From 2ed73cdd0f0785ca235adf7800e6e43137117a4c Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Thu, 14 Feb 2019 19:03:41 +0900 Subject: [PATCH] Imported Upstream version 2.13.1 --- Makefile.in | 17 +- README | 84 +- aclocal.m4 | 189 +- compile | 8 +- conf.d/90-synthetic.conf | 4 +- conf.d/Makefile.in | 15 +- config.guess | 554 +- config.h.in | 6 + config.sub | 321 +- configure | 397 +- configure.ac | 43 +- depcomp | 8 +- doc/FcAtomicCreate.3 | 2 +- doc/FcAtomicDeleteNew.3 | 2 +- doc/FcAtomicDestroy.3 | 2 +- doc/FcAtomicLock.3 | 2 +- doc/FcAtomicNewFile.3 | 2 +- doc/FcAtomicOrigFile.3 | 2 +- doc/FcAtomicReplaceOrig.3 | 2 +- doc/FcAtomicUnlock.3 | 2 +- doc/FcBlanksAdd.3 | 2 +- doc/FcBlanksCreate.3 | 2 +- doc/FcBlanksDestroy.3 | 2 +- doc/FcBlanksIsMember.3 | 2 +- doc/FcCacheCopySet.3 | 2 +- doc/FcCacheCreateTagFile.3 | 2 +- doc/FcCacheDir.3 | 2 +- doc/FcCacheNumFont.3 | 2 +- doc/FcCacheNumSubdir.3 | 2 +- doc/FcCacheSubdir.3 | 2 +- doc/FcCharSetAddChar.3 | 2 +- doc/FcCharSetCopy.3 | 2 +- doc/FcCharSetCount.3 | 2 +- doc/FcCharSetCoverage.3 | 2 +- doc/FcCharSetCreate.3 | 2 +- doc/FcCharSetDelChar.3 | 2 +- doc/FcCharSetDestroy.3 | 2 +- doc/FcCharSetEqual.3 | 2 +- doc/FcCharSetFirstPage.3 | 2 +- doc/FcCharSetHasChar.3 | 2 +- doc/FcCharSetIntersect.3 | 2 +- doc/FcCharSetIntersectCount.3 | 2 +- doc/FcCharSetIsSubset.3 | 2 +- doc/FcCharSetMerge.3 | 2 +- doc/FcCharSetNew.3 | 2 +- doc/FcCharSetNextPage.3 | 2 +- doc/FcCharSetSubtract.3 | 2 +- doc/FcCharSetSubtractCount.3 | 2 +- doc/FcCharSetUnion.3 | 2 +- doc/FcConfigAppFontAddDir.3 | 2 +- doc/FcConfigAppFontAddFile.3 | 2 +- doc/FcConfigAppFontClear.3 | 2 +- doc/FcConfigBuildFonts.3 | 2 +- doc/FcConfigCreate.3 | 2 +- doc/FcConfigDestroy.3 | 2 +- doc/FcConfigEnableHome.3 | 2 +- doc/FcConfigFileInfoIterGet.3 | 2 +- doc/FcConfigFileInfoIterInit.3 | 2 +- doc/FcConfigFileInfoIterNext.3 | 2 +- doc/FcConfigFilename.3 | 2 +- doc/FcConfigGetBlanks.3 | 2 +- doc/FcConfigGetCache.3 | 2 +- doc/FcConfigGetCacheDirs.3 | 2 +- doc/FcConfigGetConfigDirs.3 | 2 +- doc/FcConfigGetConfigFiles.3 | 2 +- doc/FcConfigGetCurrent.3 | 2 +- doc/FcConfigGetFontDirs.3 | 2 +- doc/FcConfigGetFonts.3 | 2 +- doc/FcConfigGetRescanInterval.3 | 2 +- doc/FcConfigGetSysRoot.3 | 2 +- doc/FcConfigHome.3 | 2 +- doc/FcConfigParseAndLoad.3 | 2 +- doc/FcConfigParseAndLoadFromMemory.3 | 2 +- doc/FcConfigReference.3 | 2 +- doc/FcConfigSetCurrent.3 | 2 +- doc/FcConfigSetRescanInterval.3 | 2 +- doc/FcConfigSetSysRoot.3 | 2 +- doc/FcConfigSubstitute.3 | 2 +- doc/FcConfigSubstituteWithPat.3 | 2 +- doc/FcConfigUptoDate.3 | 2 +- doc/FcDefaultSubstitute.3 | 2 +- doc/FcDirCacheClean.3 | 2 +- doc/FcDirCacheCreateUUID.3 | 4 +- doc/FcDirCacheDeleteUUID.3 | 17 + doc/FcDirCacheLoad.3 | 2 +- doc/FcDirCacheLoadFile.3 | 2 +- doc/FcDirCacheRead.3 | 2 +- doc/FcDirCacheRescan.3 | 2 +- doc/FcDirCacheUnlink.3 | 2 +- doc/FcDirCacheUnload.3 | 2 +- doc/FcDirCacheValid.3 | 2 +- doc/FcDirSave.3 | 2 +- doc/FcDirScan.3 | 2 +- doc/FcFileIsDir.3 | 2 +- doc/FcFileScan.3 | 2 +- doc/FcFini.3 | 2 +- doc/FcFontList.3 | 2 +- doc/FcFontMatch.3 | 2 +- doc/FcFontRenderPrepare.3 | 2 +- doc/FcFontSetAdd.3 | 2 +- doc/FcFontSetCreate.3 | 2 +- doc/FcFontSetDestroy.3 | 2 +- doc/FcFontSetList.3 | 2 +- doc/FcFontSetMatch.3 | 2 +- doc/FcFontSetPrint.3 | 2 +- doc/FcFontSetSort.3 | 2 +- doc/FcFontSetSortDestroy.3 | 2 +- doc/FcFontSort.3 | 2 +- doc/FcFreeTypeCharIndex.3 | 2 +- doc/FcFreeTypeCharSet.3 | 2 +- doc/FcFreeTypeCharSetAndSpacing.3 | 2 +- doc/FcFreeTypeQuery.3 | 2 +- doc/FcFreeTypeQueryAll.3 | 2 +- doc/FcFreeTypeQueryFace.3 | 2 +- doc/FcGetDefaultLangs.3 | 2 +- doc/FcGetLangs.3 | 2 +- doc/FcGetVersion.3 | 2 +- doc/FcInit.3 | 2 +- doc/FcInitBringUptoDate.3 | 2 +- doc/FcInitLoadConfig.3 | 2 +- doc/FcInitLoadConfigAndFonts.3 | 2 +- doc/FcInitReinitialize.3 | 2 +- doc/FcIsLower.3 | 2 +- doc/FcIsUpper.3 | 2 +- doc/FcLangGetCharSet.3 | 2 +- doc/FcLangNormalize.3 | 2 +- doc/FcLangSetAdd.3 | 2 +- doc/FcLangSetCompare.3 | 2 +- doc/FcLangSetContains.3 | 2 +- doc/FcLangSetCopy.3 | 2 +- doc/FcLangSetCreate.3 | 2 +- doc/FcLangSetDel.3 | 2 +- doc/FcLangSetDestroy.3 | 2 +- doc/FcLangSetEqual.3 | 2 +- doc/FcLangSetGetLangs.3 | 2 +- doc/FcLangSetHasLang.3 | 2 +- doc/FcLangSetHash.3 | 2 +- doc/FcLangSetSubtract.3 | 2 +- doc/FcLangSetUnion.3 | 2 +- doc/FcMatrixCopy.3 | 2 +- doc/FcMatrixEqual.3 | 2 +- doc/FcMatrixInit.3 | 2 +- doc/FcMatrixMultiply.3 | 2 +- doc/FcMatrixRotate.3 | 2 +- doc/FcMatrixScale.3 | 2 +- doc/FcMatrixShear.3 | 2 +- doc/FcNameConstant.3 | 2 +- doc/FcNameGetConstant.3 | 2 +- doc/FcNameGetObjectType.3 | 2 +- doc/FcNameParse.3 | 2 +- doc/FcNameRegisterConstants.3 | 2 +- doc/FcNameRegisterObjectTypes.3 | 2 +- doc/FcNameUnparse.3 | 2 +- doc/FcNameUnregisterConstants.3 | 2 +- doc/FcNameUnregisterObjectTypes.3 | 2 +- doc/FcObjectSetAdd.3 | 2 +- doc/FcObjectSetBuild.3 | 2 +- doc/FcObjectSetCreate.3 | 2 +- doc/FcObjectSetDestroy.3 | 2 +- doc/FcPatternAdd-Type.3 | 2 +- doc/FcPatternAdd.3 | 2 +- doc/FcPatternAddWeak.3 | 2 +- doc/FcPatternBuild.3 | 2 +- doc/FcPatternCreate.3 | 2 +- doc/FcPatternDel.3 | 2 +- doc/FcPatternDestroy.3 | 2 +- doc/FcPatternDuplicate.3 | 2 +- doc/FcPatternEqual.3 | 2 +- doc/FcPatternEqualSubset.3 | 2 +- doc/FcPatternFilter.3 | 2 +- doc/FcPatternFindIter.3 | 17 + doc/FcPatternFormat.3 | 2 +- doc/FcPatternGet-Type.3 | 2 +- doc/FcPatternGet.3 | 2 +- doc/FcPatternGetWithBinding.3 | 2 +- doc/FcPatternHash.3 | 2 +- doc/FcPatternIterEqual.3 | 17 + doc/FcPatternIterGetObject.3 | 18 + doc/FcPatternIterGetValue.3 | 20 + doc/FcPatternIterIsValid.3 | 17 + doc/FcPatternIterNext.3 | 18 + doc/FcPatternIterStart.3 | 18 + doc/FcPatternIterValueCount.3 | 17 + doc/FcPatternObjectCount.3 | 16 + doc/FcPatternPrint.3 | 2 +- doc/FcPatternReference.3 | 2 +- doc/FcPatternRemove.3 | 2 +- doc/FcRangeCopy.3 | 2 +- doc/FcRangeCreateDouble.3 | 2 +- doc/FcRangeCreateInteger.3 | 2 +- doc/FcRangeDestroy.3 | 2 +- doc/FcRangeGetDouble.3 | 2 +- doc/FcStrBasename.3 | 2 +- doc/FcStrCmp.3 | 2 +- doc/FcStrCmpIgnoreCase.3 | 2 +- doc/FcStrCopy.3 | 2 +- doc/FcStrCopyFilename.3 | 2 +- doc/FcStrDirname.3 | 2 +- doc/FcStrDowncase.3 | 2 +- doc/FcStrFree.3 | 2 +- doc/FcStrListCreate.3 | 2 +- doc/FcStrListDone.3 | 2 +- doc/FcStrListFirst.3 | 2 +- doc/FcStrListNext.3 | 2 +- doc/FcStrPlus.3 | 2 +- doc/FcStrSetAdd.3 | 2 +- doc/FcStrSetAddFilename.3 | 2 +- doc/FcStrSetCreate.3 | 2 +- doc/FcStrSetDel.3 | 2 +- doc/FcStrSetDestroy.3 | 2 +- doc/FcStrSetEqual.3 | 2 +- doc/FcStrSetMember.3 | 2 +- doc/FcStrStr.3 | 2 +- doc/FcStrStrIgnoreCase.3 | 2 +- doc/FcToLower.3 | 2 +- doc/FcUcs4ToUtf8.3 | 2 +- doc/FcUtf16Len.3 | 2 +- doc/FcUtf16ToUcs4.3 | 2 +- doc/FcUtf8Len.3 | 2 +- doc/FcUtf8ToUcs4.3 | 2 +- doc/FcValueDestroy.3 | 2 +- doc/FcValueEqual.3 | 2 +- doc/FcValuePrint.3 | 2 +- doc/FcValueSave.3 | 2 +- doc/FcWeightFromOpenType.3 | 2 +- doc/FcWeightFromOpenTypeDouble.3 | 2 +- doc/FcWeightToOpenType.3 | 2 +- doc/FcWeightToOpenTypeDouble.3 | 2 +- doc/Makefile.in | 48 +- doc/fccache.fncs | 12 +- doc/fccache.sgml | 57 +- doc/fcpattern.fncs | 111 +- doc/fcpattern.sgml | 505 ++ doc/fontconfig-devel.pdf | Bin 406260 -> 420848 bytes doc/fontconfig-devel.txt | 5409 +++++++++++--------- doc/fontconfig-devel/fcatomiccreate.html | 12 +- doc/fontconfig-devel/fcatomicdeletenew.html | 12 +- doc/fontconfig-devel/fcatomicdestroy.html | 12 +- doc/fontconfig-devel/fcatomiclock.html | 12 +- doc/fontconfig-devel/fcatomicnewfile.html | 12 +- doc/fontconfig-devel/fcatomicorigfile.html | 12 +- doc/fontconfig-devel/fcatomicreplaceorig.html | 12 +- doc/fontconfig-devel/fcatomicunlock.html | 12 +- doc/fontconfig-devel/fcblanksadd.html | 12 +- doc/fontconfig-devel/fcblankscreate.html | 12 +- doc/fontconfig-devel/fcblanksdestroy.html | 12 +- doc/fontconfig-devel/fcblanksismember.html | 12 +- doc/fontconfig-devel/fccachecopyset.html | 12 +- doc/fontconfig-devel/fccachecreatetagfile.html | 14 +- doc/fontconfig-devel/fccachedir.html | 12 +- doc/fontconfig-devel/fccachenumfont.html | 12 +- doc/fontconfig-devel/fccachenumsubdir.html | 12 +- doc/fontconfig-devel/fccachesubdir.html | 12 +- doc/fontconfig-devel/fccharsetaddchar.html | 12 +- doc/fontconfig-devel/fccharsetcopy.html | 12 +- doc/fontconfig-devel/fccharsetcount.html | 12 +- doc/fontconfig-devel/fccharsetcoverage.html | 12 +- doc/fontconfig-devel/fccharsetcreate.html | 12 +- doc/fontconfig-devel/fccharsetdelchar.html | 14 +- doc/fontconfig-devel/fccharsetdestroy.html | 12 +- doc/fontconfig-devel/fccharsetequal.html | 12 +- doc/fontconfig-devel/fccharsetfirstpage.html | 12 +- doc/fontconfig-devel/fccharsethaschar.html | 12 +- doc/fontconfig-devel/fccharsetintersect.html | 12 +- doc/fontconfig-devel/fccharsetintersectcount.html | 12 +- doc/fontconfig-devel/fccharsetissubset.html | 12 +- doc/fontconfig-devel/fccharsetmerge.html | 12 +- doc/fontconfig-devel/fccharsetnew.html | 12 +- doc/fontconfig-devel/fccharsetnextpage.html | 12 +- doc/fontconfig-devel/fccharsetsubtract.html | 12 +- doc/fontconfig-devel/fccharsetsubtractcount.html | 12 +- doc/fontconfig-devel/fccharsetunion.html | 12 +- doc/fontconfig-devel/fcconfigappfontadddir.html | 12 +- doc/fontconfig-devel/fcconfigappfontaddfile.html | 12 +- doc/fontconfig-devel/fcconfigappfontclear.html | 12 +- doc/fontconfig-devel/fcconfigbuildfonts.html | 12 +- doc/fontconfig-devel/fcconfigcreate.html | 12 +- doc/fontconfig-devel/fcconfigdestroy.html | 12 +- doc/fontconfig-devel/fcconfigenablehome.html | 12 +- doc/fontconfig-devel/fcconfigfileinfoiterget.html | 14 +- doc/fontconfig-devel/fcconfigfileinfoiterinit.html | 14 +- doc/fontconfig-devel/fcconfigfileinfoiternext.html | 14 +- doc/fontconfig-devel/fcconfigfilename.html | 12 +- doc/fontconfig-devel/fcconfiggetblanks.html | 12 +- doc/fontconfig-devel/fcconfiggetcache.html | 12 +- doc/fontconfig-devel/fcconfiggetcachedirs.html | 12 +- doc/fontconfig-devel/fcconfiggetconfigdirs.html | 12 +- doc/fontconfig-devel/fcconfiggetconfigfiles.html | 12 +- doc/fontconfig-devel/fcconfiggetcurrent.html | 12 +- doc/fontconfig-devel/fcconfiggetfontdirs.html | 12 +- doc/fontconfig-devel/fcconfiggetfonts.html | 12 +- .../fcconfiggetrescaninterval.html | 12 +- doc/fontconfig-devel/fcconfiggetsysroot.html | 14 +- doc/fontconfig-devel/fcconfighome.html | 12 +- doc/fontconfig-devel/fcconfigparseandload.html | 12 +- .../fcconfigparseandloadfrommemory.html | 14 +- doc/fontconfig-devel/fcconfigreference.html | 12 +- doc/fontconfig-devel/fcconfigsetcurrent.html | 12 +- .../fcconfigsetrescaninterval.html | 12 +- doc/fontconfig-devel/fcconfigsetsysroot.html | 14 +- doc/fontconfig-devel/fcconfigsubstitute.html | 12 +- .../fcconfigsubstitutewithpat.html | 12 +- doc/fontconfig-devel/fcconfiguptodate.html | 12 +- doc/fontconfig-devel/fcdefaultsubstitute.html | 8 +- doc/fontconfig-devel/fcdircacheclean.html | 14 +- doc/fontconfig-devel/fcdircachecreateuuid.html | 35 +- doc/fontconfig-devel/fcdircachedeleteuuid.html | 214 + doc/fontconfig-devel/fcdircacheload.html | 12 +- doc/fontconfig-devel/fcdircacheloadfile.html | 12 +- doc/fontconfig-devel/fcdircacheread.html | 12 +- doc/fontconfig-devel/fcdircacherescan.html | 14 +- doc/fontconfig-devel/fcdircacheunlink.html | 12 +- doc/fontconfig-devel/fcdircacheunload.html | 12 +- doc/fontconfig-devel/fcdircachevalid.html | 12 +- doc/fontconfig-devel/fcdirsave.html | 12 +- doc/fontconfig-devel/fcdirscan.html | 12 +- doc/fontconfig-devel/fcfileisdir.html | 12 +- doc/fontconfig-devel/fcfilescan.html | 12 +- doc/fontconfig-devel/fcfontlist.html | 12 +- doc/fontconfig-devel/fcfontmatch.html | 12 +- doc/fontconfig-devel/fcfontrenderprepare.html | 12 +- doc/fontconfig-devel/fcfontsetadd.html | 12 +- doc/fontconfig-devel/fcfontsetcreate.html | 12 +- doc/fontconfig-devel/fcfontsetdestroy.html | 12 +- doc/fontconfig-devel/fcfontsetlist.html | 12 +- doc/fontconfig-devel/fcfontsetmatch.html | 12 +- doc/fontconfig-devel/fcfontsetprint.html | 12 +- doc/fontconfig-devel/fcfontsetsort.html | 12 +- doc/fontconfig-devel/fcfontsetsortdestroy.html | 12 +- doc/fontconfig-devel/fcfontsort.html | 12 +- doc/fontconfig-devel/fcfreetypecharindex.html | 12 +- doc/fontconfig-devel/fcfreetypecharset.html | 12 +- .../fcfreetypecharsetandspacing.html | 12 +- doc/fontconfig-devel/fcfreetypequery.html | 12 +- doc/fontconfig-devel/fcfreetypequeryall.html | 14 +- doc/fontconfig-devel/fcfreetypequeryface.html | 12 +- doc/fontconfig-devel/fcgetdefaultlangs.html | 14 +- doc/fontconfig-devel/fcgetlangs.html | 12 +- doc/fontconfig-devel/fcislower.html | 12 +- doc/fontconfig-devel/fcisupper.html | 12 +- doc/fontconfig-devel/fclanggetcharset.html | 12 +- doc/fontconfig-devel/fclangnormalize.html | 14 +- doc/fontconfig-devel/fclangsetadd.html | 12 +- doc/fontconfig-devel/fclangsetcompare.html | 12 +- doc/fontconfig-devel/fclangsetcontains.html | 12 +- doc/fontconfig-devel/fclangsetcopy.html | 12 +- doc/fontconfig-devel/fclangsetcreate.html | 12 +- doc/fontconfig-devel/fclangsetdel.html | 14 +- doc/fontconfig-devel/fclangsetdestroy.html | 12 +- doc/fontconfig-devel/fclangsetequal.html | 12 +- doc/fontconfig-devel/fclangsetgetlangs.html | 12 +- doc/fontconfig-devel/fclangsethash.html | 12 +- doc/fontconfig-devel/fclangsethaslang.html | 12 +- doc/fontconfig-devel/fclangsetsubtract.html | 14 +- doc/fontconfig-devel/fclangsetunion.html | 14 +- doc/fontconfig-devel/fcmatrixcopy.html | 12 +- doc/fontconfig-devel/fcmatrixequal.html | 12 +- doc/fontconfig-devel/fcmatrixinit.html | 12 +- doc/fontconfig-devel/fcmatrixmultiply.html | 12 +- doc/fontconfig-devel/fcmatrixrotate.html | 12 +- doc/fontconfig-devel/fcmatrixscale.html | 12 +- doc/fontconfig-devel/fcmatrixshear.html | 12 +- doc/fontconfig-devel/fcnameconstant.html | 12 +- doc/fontconfig-devel/fcnamegetconstant.html | 12 +- doc/fontconfig-devel/fcnamegetobjecttype.html | 12 +- doc/fontconfig-devel/fcnameparse.html | 8 +- doc/fontconfig-devel/fcnameregisterconstants.html | 12 +- .../fcnameregisterobjecttypes.html | 12 +- doc/fontconfig-devel/fcnameunparse.html | 8 +- .../fcnameunregisterconstants.html | 12 +- .../fcnameunregisterobjecttypes.html | 12 +- doc/fontconfig-devel/fcobjectsetadd.html | 12 +- doc/fontconfig-devel/fcobjectsetbuild.html | 12 +- doc/fontconfig-devel/fcobjectsetcreate.html | 12 +- doc/fontconfig-devel/fcobjectsetdestroy.html | 12 +- doc/fontconfig-devel/fcpatternadd-type.html | 8 +- doc/fontconfig-devel/fcpatternadd.html | 8 +- doc/fontconfig-devel/fcpatternaddweak.html | 8 +- doc/fontconfig-devel/fcpatternbuild.html | 8 +- doc/fontconfig-devel/fcpatterndel.html | 8 +- doc/fontconfig-devel/fcpatterndestroy.html | 10 +- doc/fontconfig-devel/fcpatternequal.html | 18 +- doc/fontconfig-devel/fcpatternequalsubset.html | 8 +- doc/fontconfig-devel/fcpatternfilter.html | 8 +- doc/fontconfig-devel/fcpatternfinditer.html | 240 + doc/fontconfig-devel/fcpatternformat.html | 10 +- doc/fontconfig-devel/fcpatternget-type.html | 8 +- doc/fontconfig-devel/fcpatternget.html | 8 +- doc/fontconfig-devel/fcpatterngetwithbinding.html | 10 +- doc/fontconfig-devel/fcpatternhash.html | 8 +- doc/fontconfig-devel/fcpatterniterequal.html | 240 + doc/fontconfig-devel/fcpatternitergetobject.html | 236 + doc/fontconfig-devel/fcpatternitergetvalue.html | 258 + doc/fontconfig-devel/fcpatterniterisvalid.html | 230 + doc/fontconfig-devel/fcpatterniternext.html | 236 + doc/fontconfig-devel/fcpatterniterstart.html | 241 + doc/fontconfig-devel/fcpatternitervaluecount.html | 230 + doc/fontconfig-devel/fcpatternobjectcount.html | 219 + doc/fontconfig-devel/fcpatternprint.html | 18 +- doc/fontconfig-devel/fcpatternremove.html | 18 +- doc/fontconfig-devel/fcrangecopy.html | 14 +- doc/fontconfig-devel/fcrangecreatedouble.html | 14 +- doc/fontconfig-devel/fcrangecreateinteger.html | 14 +- doc/fontconfig-devel/fcrangedestroy.html | 14 +- doc/fontconfig-devel/fcrangegetdouble.html | 14 +- doc/fontconfig-devel/fcstrbasename.html | 12 +- doc/fontconfig-devel/fcstrcmp.html | 12 +- doc/fontconfig-devel/fcstrcmpignorecase.html | 12 +- doc/fontconfig-devel/fcstrcopy.html | 12 +- doc/fontconfig-devel/fcstrcopyfilename.html | 12 +- doc/fontconfig-devel/fcstrdirname.html | 12 +- doc/fontconfig-devel/fcstrdowncase.html | 12 +- doc/fontconfig-devel/fcstrfree.html | 12 +- doc/fontconfig-devel/fcstrlistcreate.html | 12 +- doc/fontconfig-devel/fcstrlistdone.html | 12 +- doc/fontconfig-devel/fcstrlistfirst.html | 14 +- doc/fontconfig-devel/fcstrlistnext.html | 12 +- doc/fontconfig-devel/fcstrplus.html | 12 +- doc/fontconfig-devel/fcstrsetadd.html | 12 +- doc/fontconfig-devel/fcstrsetaddfilename.html | 12 +- doc/fontconfig-devel/fcstrsetcreate.html | 12 +- doc/fontconfig-devel/fcstrsetdel.html | 12 +- doc/fontconfig-devel/fcstrsetdestroy.html | 12 +- doc/fontconfig-devel/fcstrsetequal.html | 12 +- doc/fontconfig-devel/fcstrsetmember.html | 12 +- doc/fontconfig-devel/fcstrstr.html | 12 +- doc/fontconfig-devel/fcstrstrignorecase.html | 12 +- doc/fontconfig-devel/fctolower.html | 12 +- doc/fontconfig-devel/fcucs4toutf8.html | 12 +- doc/fontconfig-devel/fcutf16len.html | 12 +- doc/fontconfig-devel/fcutf16toucs4.html | 12 +- doc/fontconfig-devel/fcutf8len.html | 12 +- doc/fontconfig-devel/fcutf8toucs4.html | 12 +- doc/fontconfig-devel/fcvaluedestroy.html | 12 +- doc/fontconfig-devel/fcvalueequal.html | 12 +- doc/fontconfig-devel/fcvalueprint.html | 12 +- doc/fontconfig-devel/fcvaluesave.html | 12 +- doc/fontconfig-devel/fcweightfromopentype.html | 14 +- .../fcweightfromopentypedouble.html | 14 +- doc/fontconfig-devel/fcweighttoopentype.html | 14 +- doc/fontconfig-devel/fcweighttoopentypedouble.html | 14 +- doc/fontconfig-devel/t1.html | 4 +- doc/fontconfig-devel/x103.html | 86 +- doc/fontconfig-user.html | 42 +- doc/fontconfig-user.pdf | Bin 131754 -> 133232 bytes doc/fontconfig-user.sgml | 20 +- doc/fontconfig-user.txt | 1203 +++-- doc/fonts-conf.5 | 22 +- fc-cache/Makefile.in | 60 +- fc-cache/fc-cache.c | 2 + fc-case/CaseFolding.txt | 87 +- fc-case/Makefile.in | 15 +- fc-case/fccase.h | 7 +- fc-cat/Makefile.in | 59 +- fc-cat/fc-cat.c | 2 + fc-conflist/Makefile.in | 59 +- fc-conflist/fc-conflist.c | 2 + fc-lang/Makefile.in | 15 +- fc-lang/fc-lang.c | 2 +- fc-list/Makefile.in | 59 +- fc-list/fc-list.c | 2 + fc-match/Makefile.in | 59 +- fc-match/fc-match.c | 2 + fc-pattern/Makefile.in | 59 +- fc-pattern/fc-pattern.c | 2 + fc-query/Makefile.in | 59 +- fc-query/fc-query.c | 2 + fc-scan/Makefile.in | 59 +- fc-scan/fc-scan.c | 2 + fc-validate/Makefile.in | 59 +- fontconfig.spec | 2 +- fontconfig/Makefile.in | 15 +- fontconfig/fontconfig.h | 39 +- install-sh | 45 +- its/Makefile.in | 15 +- missing | 14 +- po-conf/fontconfig-conf.pot | 4 +- po-conf/zh_CN.gmo | Bin 3311 -> 3311 bytes po-conf/zh_CN.po | 2 +- po/fontconfig.pot | 208 +- po/zh_CN.gmo | Bin 14705 -> 14705 bytes po/zh_CN.po | 206 +- src/Makefile.am | 18 +- src/Makefile.in | 220 +- src/fccache.c | 186 +- src/fccfg.c | 216 +- src/fcdbg.c | 15 +- src/fcdefault.c | 32 +- src/fcdir.c | 7 + src/fcformat.c | 22 +- src/fcfreetype.c | 325 +- src/fchash.c | 29 + src/fcint.h | 28 +- src/fclang.c | 10 +- src/fclist.c | 39 +- src/fcmatch.c | 54 +- src/fcname.c | 38 +- src/fcobjshash.h | 332 -- src/fcpat.c | 304 +- src/fcptrlist.c | 2 + src/fcstat.c | 9 + src/fcstdint.h | 4 +- src/fcstr.c | 13 +- src/fcxml.c | 37 +- test-driver | 8 +- test/Makefile.am | 52 +- test/Makefile.in | 251 +- test/out.expected | 8 - test/run-test-conf.sh | 36 + test/run-test.sh | 62 +- test/test-90-synthetic.json | 68 + test/test-bz106618.c | 47 + test/test-bz106632.c | 316 ++ test/test-conf.c | 328 ++ test/test-hash.c | 187 + test/test-name-parse.c | 90 + 516 files changed, 12604 insertions(+), 6498 deletions(-) create mode 100644 doc/FcDirCacheDeleteUUID.3 create mode 100644 doc/FcPatternFindIter.3 create mode 100644 doc/FcPatternIterEqual.3 create mode 100644 doc/FcPatternIterGetObject.3 create mode 100644 doc/FcPatternIterGetValue.3 create mode 100644 doc/FcPatternIterIsValid.3 create mode 100644 doc/FcPatternIterNext.3 create mode 100644 doc/FcPatternIterStart.3 create mode 100644 doc/FcPatternIterValueCount.3 create mode 100644 doc/FcPatternObjectCount.3 create mode 100644 doc/fontconfig-devel/fcdircachedeleteuuid.html create mode 100644 doc/fontconfig-devel/fcpatternfinditer.html create mode 100644 doc/fontconfig-devel/fcpatterniterequal.html create mode 100644 doc/fontconfig-devel/fcpatternitergetobject.html create mode 100644 doc/fontconfig-devel/fcpatternitergetvalue.html create mode 100644 doc/fontconfig-devel/fcpatterniterisvalid.html create mode 100644 doc/fontconfig-devel/fcpatterniternext.html create mode 100644 doc/fontconfig-devel/fcpatterniterstart.html create mode 100644 doc/fontconfig-devel/fcpatternitervaluecount.html create mode 100644 doc/fontconfig-devel/fcpatternobjectcount.html delete mode 100644 src/fcobjshash.h delete mode 100644 test/out.expected create mode 100644 test/run-test-conf.sh create mode 100644 test/test-90-synthetic.json create mode 100644 test/test-bz106618.c create mode 100644 test/test-bz106632.c create mode 100644 test/test-conf.c create mode 100644 test/test-hash.c create mode 100644 test/test-name-parse.c diff --git a/Makefile.in b/Makefile.in index 0b80f26..bea1b79 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -199,7 +199,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck + cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, @@ -329,6 +329,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -504,8 +506,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -695,7 +697,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ diff --git a/README b/README index c5e605d..fbbc140 100644 --- a/README +++ b/README @@ -1,11 +1,89 @@ Fontconfig Font configuration and customization library - Version 2.13 - 2018-03-06 + Version 2.13.1 + 2018-08-30 Check INSTALL for compilation and installation instructions. -Report bugs to https://bugs.freedesktop.org in the fontconfig module. +Report bugs to https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new. + +2.13.1 + +Akira TAGOH (48): + Use the builtin uuid for OSX + Fix the build issue again on MinGW with enabling nls + Add uuid to Requires.private in .pc only when pkgconfig macro found it + Allow the constant names in the range + Do not override locale if already set by app + Add the value of the constant name to the implicit object in the pattern + Add a testcase for FcNameParse + Leave the locale setting to applications + call setlocale + Fix make check fail when srcdir != builddir. + Do not ship fcobjshash.h + Fix typo in doc + Change the emboldening logic again + Bug 43367 - RFE: iterator to peek objects in FcPattern + Add a testrunner for conf + Add a test case for 90-synthetic.conf + Bug 106497 - better error description when problem reading font configuration + Bug 106459 - fc-cache doesn't use -y option for .uuid files + Fix leaks + Fix -Wstringop-truncation warning + Fix double-free + Add a test case for bz#106618 + Update CaseFolding.txt to Unicode 11 + Remove .uuid when no font files exists on a directory + Fix the leak of file handle + Fix memory leak + Fix memory leaks + Fix memory leak + Fix memory leak + Fix memory leak + Fix unterminated string issue + Fix array access in a null pointer dereference + Fix access in a null pointer dereference + do not pass null pointer to memcpy + Fix dereferencing null pointer + Fix a typo + Fix possibly dereferencing a null pointer + Fix allocating insufficient memory for terminating null of the string + Make a call fail on ENOMEM + Allocate sufficient memory to terminate with null + Drop the redundant code + Fix memory leak + Fix the build issue with gperf + Fix missing closing bracket in FcStrIsAbsoluteFilename() + Update the issue tracker URL + Fix distcheck fail + Add .gitlab-ci.yml + Bump the libtool revision + +Alexander Larsson (3): + Add FcCacheAllocate() helper + Cache: Rewrite relocated paths in earlier + Cache: Remove alias_table + +Behdad Esfahbod (4): + Minor: fix warnings + Fix name scanning + Share name-mapping across instances + Use FT_HAS_COLOR + +Chris Lamb (1): + Ensure cache checksums are deterministic + +Matthieu Herrb (1): + FcCacheFindByStat(): fix checking of nanoseconds field. + +Tom Anderson (7): + Fix undefined-shift UBSAN errors + Use realfilename for FcOpen in _FcConfigParse + Add FONTCONFIG_SYSROOT environment variable + Fix CFI builds + Fix heap use-after-free + Return canonicalized paths from FcConfigRealFilename + Fix build with CFLAGS="-std=c11 -D_GNU_SOURCE" 2.13 diff --git a/aclocal.m4 b/aclocal.m4 index 8ac4ff4..4125f78 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15.1 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2017 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.]) # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.15' +[am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15.1], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15.1])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,13 +332,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. - # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], @@ -346,49 +345,41 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -397,18 +388,17 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -495,8 +485,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. @@ -563,7 +553,7 @@ END Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -605,7 +595,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -626,7 +616,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2017 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -647,7 +637,7 @@ AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -655,49 +645,42 @@ AC_SUBST([am__leading_dot])]) # AM_MAKE_INCLUDE() # ----------------- -# Check to see how make treats includes. +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -736,7 +719,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -765,7 +748,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -812,7 +795,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -831,7 +814,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -912,7 +895,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2017 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -972,7 +955,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1000,7 +983,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1019,7 +1002,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2017 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/compile b/compile index 2ab71e4..99e5052 100755 --- a/compile +++ b/compile @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2016-01-11.22; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -340,7 +340,7 @@ exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/conf.d/90-synthetic.conf b/conf.d/90-synthetic.conf index e344e4a..6b929dd 100644 --- a/conf.d/90-synthetic.conf +++ b/conf.d/90-synthetic.conf @@ -42,9 +42,9 @@ --> - + - regular + medium diff --git a/conf.d/Makefile.in b/conf.d/Makefile.in index ff988eb..604af41 100644 --- a/conf.d/Makefile.in +++ b/conf.d/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -241,6 +241,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -448,8 +450,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -515,7 +517,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/config.guess b/config.guess index a744844..256083a 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2017 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2017-08-08' +timestamp='2018-03-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2017-08-08' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,7 +27,7 @@ timestamp='2017-08-08' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -39,7 +39,7 @@ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2017 Free Software Foundation, Inc. +Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -107,9 +107,9 @@ trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; + ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; @@ -132,14 +132,14 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval $set_cc_for_build - cat <<-EOF > $dummy.c + eval "$set_cc_for_build" + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc @@ -149,13 +149,20 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -169,30 +176,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - /sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` - machine=${arch}${endian}-unknown + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -208,10 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release @@ -219,49 +226,55 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}${abi}" + echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) - echo ${UNAME_MACHINE}-unknown-sortix + echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) - echo ${UNAME_MACHINE}-unknown-redox + echo "$UNAME_MACHINE"-unknown-redox exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -313,28 +326,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -346,7 +350,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} + echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos @@ -373,19 +377,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build + eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. @@ -398,13 +402,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in @@ -413,25 +417,25 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not @@ -442,44 +446,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -488,23 +492,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} + echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax @@ -530,17 +534,17 @@ EOF AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -557,7 +561,7 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id @@ -569,14 +573,14 @@ EOF if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -587,7 +591,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else @@ -601,7 +605,7 @@ EOF exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -610,18 +614,18 @@ EOF IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -636,28 +640,28 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in + case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in + case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if [ "$HP_ARCH" = "" ]; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -690,13 +694,13 @@ EOF exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = hppa2.0w ] + if [ "$HP_ARCH" = hppa2.0w ] then - eval $set_cc_for_build + eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -715,15 +719,15 @@ EOF HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -748,11 +752,11 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -761,7 +765,7 @@ EOF *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) @@ -769,9 +773,9 @@ EOF exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -796,128 +800,109 @@ EOF echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case "$UNAME_MACHINE" in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix + echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -931,63 +916,63 @@ EOF esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el @@ -1001,70 +986,70 @@ EOF #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} + echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1078,34 +1063,34 @@ EOF # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable + echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) @@ -1115,12 +1100,12 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1130,9 +1115,9 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) @@ -1152,9 +1137,9 @@ EOF exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1174,9 +1159,9 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1185,28 +1170,28 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 @@ -1217,7 +1202,7 @@ EOF *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi @@ -1237,23 +1222,23 @@ EOF exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos + echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1272,39 +1257,39 @@ EOF echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux${UNAME_RELEASE} + echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build + eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ @@ -1332,7 +1317,7 @@ EOF # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` @@ -1340,22 +1325,25 @@ EOF UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) - echo nsx-tandem-nsk${UNAME_RELEASE} + echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux @@ -1364,7 +1352,7 @@ EOF echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 @@ -1375,7 +1363,7 @@ EOF else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 @@ -1396,14 +1384,14 @@ EOF echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; @@ -1412,32 +1400,44 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/config.h.in b/config.h.in index c5bbd66..d836433 100644 --- a/config.h.in +++ b/config.h.in @@ -179,6 +179,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H diff --git a/config.sub b/config.sub index 932128b..20f7cf2 100755 --- a/config.sub +++ b/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2017 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2017-04-02' +timestamp='2018-05-05' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2017-04-02' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +33,7 @@ timestamp='2017-04-02' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -67,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2017 Free Software Foundation, Inc. +Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -94,7 +94,7 @@ while test $# -gt 0 ; do *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -110,28 +110,48 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; +# Spilt fields of configuration type +IFS="-" read -r field1 field2 field3 field4 <&2 + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. @@ -382,7 +403,7 @@ case $basic_machine in | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ @@ -423,6 +444,7 @@ case $basic_machine in | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ + | nfp-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ @@ -461,7 +483,7 @@ case $basic_machine in # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) - basic_machine=i386-unknown + basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) @@ -495,7 +517,7 @@ case $basic_machine in basic_machine=x86_64-pc ;; amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl @@ -540,7 +562,7 @@ case $basic_machine in os=-linux ;; blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) @@ -548,13 +570,13 @@ case $basic_machine in os=-cnk ;; c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray @@ -643,7 +665,7 @@ case $basic_machine in basic_machine=rs6000-bull os=-bosx ;; - dpx2* | dpx2*-bull) + dpx2*) basic_machine=m68k-bull os=-sysv3 ;; @@ -652,7 +674,7 @@ case $basic_machine in os=$os"spe" ;; e500v[12]-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) @@ -744,9 +766,6 @@ case $basic_machine in hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; - hppa-next) - os=-nextstep3 - ;; hppaosf) basic_machine=hppa1.1-hp os=-osf @@ -759,26 +778,26 @@ case $basic_machine in basic_machine=i370-ibm ;; i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; - i386-vsta | vsta) + vsta) basic_machine=i386-unknown os=-vsta ;; @@ -797,19 +816,16 @@ case $basic_machine in os=-sysv ;; leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; - m88k-omron*) - basic_machine=m88k-omron - ;; magnum | m3230) basic_machine=mips-mips os=-sysv @@ -841,10 +857,10 @@ case $basic_machine in os=-mint ;; mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k @@ -863,7 +879,7 @@ case $basic_machine in os=-msdos ;; ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc @@ -905,7 +921,7 @@ case $basic_machine in basic_machine=v70-nec os=-sysv ;; - next | m*-next ) + next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) @@ -950,6 +966,9 @@ case $basic_machine in nsr-tandem) basic_machine=nsr-tandem ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; nsx-tandem) basic_machine=nsx-tandem ;; @@ -985,7 +1004,7 @@ case $basic_machine in os=-linux ;; parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) @@ -1001,7 +1020,7 @@ case $basic_machine in basic_machine=i386-pc ;; pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc @@ -1016,16 +1035,16 @@ case $basic_machine in basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould @@ -1035,23 +1054,23 @@ case $basic_machine in ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; - ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm @@ -1105,17 +1124,10 @@ case $basic_machine in sequent) basic_machine=i386-sequent ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; sh5el) basic_machine=sh5le-unknown ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) + simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; @@ -1134,7 +1146,7 @@ case $basic_machine in os=-sysv4 ;; strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun @@ -1248,9 +1260,6 @@ case $basic_machine in basic_machine=a29k-wrs os=-vxworks ;; - wasm32) - basic_machine=wasm32-unknown - ;; w65*) basic_machine=w65-wdc os=-none @@ -1259,6 +1268,9 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; + x64) + basic_machine=x86_64-pc + ;; xbox) basic_machine=i686-pc os=-mingw32 @@ -1267,20 +1279,12 @@ case $basic_machine in basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; none) basic_machine=none-none os=-none @@ -1309,10 +1313,6 @@ case $basic_machine in vax) basic_machine=vax-dec ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; pdp11) basic_machine=pdp11-dec ;; @@ -1322,9 +1322,6 @@ case $basic_machine in sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; cydra) basic_machine=cydra-cydrome ;; @@ -1344,7 +1341,7 @@ case $basic_machine in # Make sure to match an already-canonicalized machine name. ;; *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac @@ -1352,10 +1349,10 @@ esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; @@ -1363,11 +1360,11 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if [ x$os != x ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases that might get confused + # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux @@ -1378,18 +1375,19 @@ case $os in -solaris) os=-solaris2 ;; - -svr4*) - os=-sysv4 - ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # es1800 is here to avoid being matched by es* (a different OS) + -es1800*) + os=-ose + ;; + # Now accept the basic system types. # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. + # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ @@ -1399,25 +1397,26 @@ case $os in | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* | -hcos* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ + | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1434,12 +1433,12 @@ case $os in -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + -sim | -xray | -os68k* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) - os=`echo $os | sed -e 's|mac|macos|'` + os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc @@ -1448,10 +1447,10 @@ case $os in os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition @@ -1462,12 +1461,6 @@ case $os in -wince*) os=-wince ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; -utek*) os=-bsd ;; @@ -1492,7 +1485,7 @@ case $os in -nova*) os=-rtmk-nova ;; - -ns2 ) + -ns2) os=-nextstep2 ;; -nsk*) @@ -1514,7 +1507,7 @@ case $os in -oss*) os=-sysv3 ;; - -svr4) + -svr4*) os=-sysv4 ;; -svr3) @@ -1529,34 +1522,44 @@ case $os in -ose*) os=-ose ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; - -aros*) - os=-aros - ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; -nacl*) ;; -ios) ;; -none) ;; + -*-eabi) + case $basic_machine in + arm*) + ;; + esac + ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac @@ -1652,9 +1655,6 @@ case $basic_machine in *-be) os=-beos ;; - *-haiku) - os=-haiku - ;; *-ibm) os=-aix ;; @@ -1694,7 +1694,7 @@ case $basic_machine in m88k-omron*) os=-luna ;; - *-next ) + *-next) os=-nextstep ;; *-sequent) @@ -1709,9 +1709,6 @@ case $basic_machine in i370-*) os=-mvs ;; - *-next) - os=-nextstep3 - ;; *-gould) os=-sysv ;; @@ -1821,15 +1818,15 @@ case $basic_machine in vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$basic_machine$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/configure b/configure index 830de63..21fa640 100755 --- a/configure +++ b/configure @@ -1,8 +1,8 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for fontconfig 2.13.0. +# Generated by GNU Autoconf 2.69 for fontconfig 2.13.1. # -# Report bugs to . +# Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -275,7 +275,7 @@ fi $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig +$0: https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do @@ -591,9 +591,9 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='fontconfig' PACKAGE_TARNAME='fontconfig' -PACKAGE_VERSION='2.13.0' -PACKAGE_STRING='fontconfig 2.13.0' -PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig' +PACKAGE_VERSION='2.13.1' +PACKAGE_STRING='fontconfig 2.13.1' +PACKAGE_BUGREPORT='https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new' PACKAGE_URL='' # Factoring default headers for most tests. @@ -663,6 +663,10 @@ FC_FONTPATH FC_ADD_FONTS FC_DEFAULT_FONTS PREFERRED_HINTING +ENABLE_JSONC_FALSE +ENABLE_JSONC_TRUE +JSONC_LIBS +JSONC_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS PKG_EXPAT_LIBS @@ -758,7 +762,6 @@ am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE -am__quote am__include DEPDIR OBJEXT @@ -832,7 +835,8 @@ PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR -SHELL' +SHELL +am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking @@ -892,7 +896,9 @@ UUID_LIBS EXPAT_CFLAGS EXPAT_LIBS LIBXML2_CFLAGS -LIBXML2_LIBS' +LIBXML2_LIBS +JSONC_CFLAGS +JSONC_LIBS' # Initialize some variables set by options. @@ -1433,7 +1439,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures fontconfig 2.13.0 to adapt to many kinds of systems. +\`configure' configures fontconfig 2.13.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1503,7 +1509,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of fontconfig 2.13.0:";; + short | recursive ) echo "Configuration of fontconfig 2.13.1:";; esac cat <<\_ACEOF @@ -1606,11 +1612,14 @@ Some influential environment variables: C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config + JSONC_CFLAGS + C compiler flags for JSONC, overriding pkg-config + JSONC_LIBS linker flags for JSONC, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to . +Report bugs to . _ACEOF ac_status=$? fi @@ -1673,7 +1682,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -fontconfig configure 2.13.0 +fontconfig configure 2.13.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1832,9 +1841,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ---------------------------------------------------------------------------- ## -## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig ## -## ---------------------------------------------------------------------------- ##" +( $as_echo "## ------------------------------------------------------------------------------ ## +## Report this to https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new ## +## ------------------------------------------------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac @@ -2382,7 +2391,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by fontconfig $as_me 2.13.0, which was +It was created by fontconfig $as_me 2.13.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2734,7 +2743,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -am__api_version='1.15' +am__api_version='1.16' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do @@ -3249,7 +3258,7 @@ fi # Define the identity of the package. PACKAGE='fontconfig' - VERSION='2.13.0' + VERSION='2.13.1' cat >>confdefs.h <<_ACEOF @@ -3279,8 +3288,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The @@ -3331,7 +3340,7 @@ END Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -4238,45 +4247,45 @@ DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" - -am_make=${MAKE-make} -cat > confinc << 'END' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : @@ -13276,11 +13285,11 @@ CC=$lt_save_CC -LIBT_CURRENT=12 -LIBT_REVISION=1 +LIBT_CURRENT=13 +LIBT_REVISION=0 -LIBT_AGE=11 +LIBT_AGE=12 LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE" @@ -16704,7 +16713,7 @@ $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt -for ac_func in link mkstemp mkostemp _mktemp_s mkdtemp getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r readlink fstatvfs fstatfs lstat +for ac_func in link mkstemp mkostemp _mktemp_s mkdtemp getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r readlink fstatvfs fstatfs lstat strerror strerror_r do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -17188,6 +17197,10 @@ CFLAGS="$fontconfig_save_cflags" # Check for uuid # if test "$os_win32" != "yes"; then + use_pkgconfig_for_uuid=yes + if test -n "${UUID_LIBS}"; then + save_UUID_LIBS=$UUID_LIBS + fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UUID" >&5 @@ -17247,39 +17260,50 @@ fi # Put the nasty error message in config.log where it belongs echo "$UUID_PKG_ERRORS" >&5 - as_fn_error $? "Package requirements (uuid) were not met: - -$UUID_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables UUID_CFLAGS -and UUID_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 + use_pkgconfig_for_uuid=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables UUID_CFLAGS -and UUID_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see . -See \`config.log' for more details" "$LINENO" 5; } + use_pkgconfig_for_uuid=no else UUID_CFLAGS=$pkg_cv_UUID_CFLAGS UUID_LIBS=$pkg_cv_UUID_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } + use_pkgconfig_for_uuid=yes +fi + if test "x$use_pkgconfig_for_uuid" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where uuid functions comes from" >&5 +$as_echo_n "checking where uuid functions comes from... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +uuid_t a; uuid_generate(a); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: builtin" >&5 +$as_echo "builtin" >&6; } + UUID_CFLAGS="" + UUID_LIBS="" +else + as_fn_error $? " +*** uuid is required. install util-linux. + " "$LINENO" 5 fi - PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY uuid" +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + else + if test -z "${save_UUID_LIBS+x}" && test "x${UUID_LIBS}" != "x"; then + PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY uuid" + fi + fi else UUID_CFLAGS="" UUID_LIBS="" @@ -17606,6 +17630,92 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi # +# Check json-c +# + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JSONC" >&5 +$as_echo_n "checking for JSONC... " >&6; } + +if test -n "$JSONC_CFLAGS"; then + pkg_cv_JSONC_CFLAGS="$JSONC_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5 + ($PKG_CONFIG --exists --print-errors "json-c") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JSONC_CFLAGS=`$PKG_CONFIG --cflags "json-c" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$JSONC_LIBS"; then + pkg_cv_JSONC_LIBS="$JSONC_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c\""; } >&5 + ($PKG_CONFIG --exists --print-errors "json-c") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JSONC_LIBS=`$PKG_CONFIG --libs "json-c" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JSONC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "json-c" 2>&1` + else + JSONC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "json-c" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$JSONC_PKG_ERRORS" >&5 + + use_jsonc=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + use_jsonc=no +else + JSONC_CFLAGS=$pkg_cv_JSONC_CFLAGS + JSONC_LIBS=$pkg_cv_JSONC_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + use_jsonc=yes +fi + + if test "x$use_jsonc" = "xyes"; then + ENABLE_JSONC_TRUE= + ENABLE_JSONC_FALSE='#' +else + ENABLE_JSONC_TRUE='#' + ENABLE_JSONC_FALSE= +fi + + + + +# # Set default hinting # @@ -19055,6 +19165,10 @@ if test -z "${FREETYPE_PCF_LONG_FAMILY_NAMES_TRUE}" && test -z "${FREETYPE_PCF_L as_fn_error $? "conditional \"FREETYPE_PCF_LONG_FAMILY_NAMES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${ENABLE_JSONC_TRUE}" && test -z "${ENABLE_JSONC_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_JSONC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_PTHREAD_TRUE}" && test -z "${HAVE_PTHREAD_FALSE}"; then as_fn_error $? "conditional \"HAVE_PTHREAD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -19465,7 +19579,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by fontconfig $as_me 2.13.0, which was +This file was extended by fontconfig $as_me 2.13.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19525,13 +19639,13 @@ $config_headers Configuration commands: $config_commands -Report bugs to ." +Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -fontconfig config.status 2.13.0 +fontconfig config.status 2.13.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -19650,7 +19764,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout @@ -20598,29 +20712,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -20638,53 +20758,48 @@ $as_echo X"$mf" | q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } - /^X\(\/\/\)$/{ + /^X\/\(\/\/\)$/{ s//\1/ q } - /^X\(\/\).*/{ + /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk } ;; "libtool":C) diff --git a/configure.ac b/configure.ac index 85f113f..fb8af46 100644 --- a/configure.ac +++ b/configure.ac @@ -33,7 +33,7 @@ dnl This is the package version number, not the shared library dnl version. This same version number must appear in fontconfig/fontconfig.h dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's dnl not possible to extract the version number here from fontconfig.h -AC_INIT([fontconfig], [2.13.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig]) +AC_INIT([fontconfig], [2.13.1], [https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/new]) AM_INIT_AUTOMAKE([1.11 parallel-tests dist-bzip2]) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) @@ -72,11 +72,11 @@ dnl libtool versioning dnl bump revision when fixing bugs dnl bump current and age, reset revision to zero when adding APIs dnl bump current, leave age, reset revision to zero when changing/removing APIS -LIBT_CURRENT=12 -LIBT_REVISION=1 +LIBT_CURRENT=13 +LIBT_REVISION=0 AC_SUBST(LIBT_CURRENT) AC_SUBST(LIBT_REVISION) -LIBT_AGE=11 +LIBT_AGE=12 LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE" AC_SUBST(LIBT_VERSION_INFO) @@ -169,7 +169,7 @@ AC_TYPE_PID_T # Checks for library functions. AC_FUNC_VPRINTF AC_FUNC_MMAP -AC_CHECK_FUNCS([link mkstemp mkostemp _mktemp_s mkdtemp getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r readlink fstatvfs fstatfs lstat]) +AC_CHECK_FUNCS([link mkstemp mkostemp _mktemp_s mkdtemp getopt getopt_long getprogname getexecname rand random lrand48 random_r rand_r readlink fstatvfs fstatfs lstat strerror strerror_r]) dnl AC_CHECK_FUNCS doesn't check for header files. dnl posix_fadvise() may be not available in older libc. @@ -336,8 +336,28 @@ CFLAGS="$fontconfig_save_cflags" # Check for uuid # if test "$os_win32" != "yes"; then - PKG_CHECK_MODULES([UUID], [uuid]) - PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY uuid" + use_pkgconfig_for_uuid=yes + if test -n "${UUID_LIBS}"; then + save_UUID_LIBS=$UUID_LIBS + fi + PKG_CHECK_MODULES([UUID], [uuid], + [use_pkgconfig_for_uuid=yes], + [use_pkgconfig_for_uuid=no]) + if test "x$use_pkgconfig_for_uuid" = "xno"; then + AC_MSG_CHECKING([where uuid functions comes from]) + AC_TRY_LINK([#include ], + [uuid_t a; uuid_generate(a);], + [AC_MSG_RESULT([builtin]) + UUID_CFLAGS="" + UUID_LIBS="" + ],[AC_MSG_ERROR([ +*** uuid is required. install util-linux. + ])]) + else + if test -z "${save_UUID_LIBS+x}" && test "x${UUID_LIBS}" != "x"; then + PKGCONFIG_REQUIRES_PRIVATELY="$PKGCONFIG_REQUIRES_PRIVATELY uuid" + fi + fi else UUID_CFLAGS="" UUID_LIBS="" @@ -454,6 +474,15 @@ if test "$enable_libxml2" = "yes"; then fi # +# Check json-c +# +PKG_CHECK_MODULES([JSONC], [json-c], [use_jsonc=yes], [use_jsonc=no]) + +AM_CONDITIONAL(ENABLE_JSONC, test "x$use_jsonc" = "xyes") +AC_SUBST(JSONC_CFLAGS) +AC_SUBST(JSONC_LIBS) + +# # Set default hinting # diff --git a/depcomp b/depcomp index b39f98f..65cbf70 100755 --- a/depcomp +++ b/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ scriptversion=2016-01-11.22; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -783,7 +783,7 @@ exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/doc/FcAtomicCreate.3 b/doc/FcAtomicCreate.3 index 2921772..87d56c2 100644 --- a/doc/FcAtomicCreate.3 +++ b/doc/FcAtomicCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicCreate \- create an FcAtomic object .SH SYNOPSIS diff --git a/doc/FcAtomicDeleteNew.3 b/doc/FcAtomicDeleteNew.3 index df56cd6..d5df889 100644 --- a/doc/FcAtomicDeleteNew.3 +++ b/doc/FcAtomicDeleteNew.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicDeleteNew" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicDeleteNew" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicDeleteNew \- delete new file .SH SYNOPSIS diff --git a/doc/FcAtomicDestroy.3 b/doc/FcAtomicDestroy.3 index 1dea61e..a3f30cc 100644 --- a/doc/FcAtomicDestroy.3 +++ b/doc/FcAtomicDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicDestroy \- destroy an FcAtomic object .SH SYNOPSIS diff --git a/doc/FcAtomicLock.3 b/doc/FcAtomicLock.3 index eca2fff..192a735 100644 --- a/doc/FcAtomicLock.3 +++ b/doc/FcAtomicLock.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicLock" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicLock" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicLock \- lock a file .SH SYNOPSIS diff --git a/doc/FcAtomicNewFile.3 b/doc/FcAtomicNewFile.3 index 35c58d5..1ae0589 100644 --- a/doc/FcAtomicNewFile.3 +++ b/doc/FcAtomicNewFile.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicNewFile" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicNewFile" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicNewFile \- return new temporary file name .SH SYNOPSIS diff --git a/doc/FcAtomicOrigFile.3 b/doc/FcAtomicOrigFile.3 index fb1589d..d902385 100644 --- a/doc/FcAtomicOrigFile.3 +++ b/doc/FcAtomicOrigFile.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicOrigFile" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicOrigFile" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicOrigFile \- return original file name .SH SYNOPSIS diff --git a/doc/FcAtomicReplaceOrig.3 b/doc/FcAtomicReplaceOrig.3 index e7692a3..c5f8899 100644 --- a/doc/FcAtomicReplaceOrig.3 +++ b/doc/FcAtomicReplaceOrig.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicReplaceOrig" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicReplaceOrig" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicReplaceOrig \- replace original with new .SH SYNOPSIS diff --git a/doc/FcAtomicUnlock.3 b/doc/FcAtomicUnlock.3 index 961688a..e08f78f 100644 --- a/doc/FcAtomicUnlock.3 +++ b/doc/FcAtomicUnlock.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcAtomicUnlock" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcAtomicUnlock" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcAtomicUnlock \- unlock a file .SH SYNOPSIS diff --git a/doc/FcBlanksAdd.3 b/doc/FcBlanksAdd.3 index 057712f..bc5e0cb 100644 --- a/doc/FcBlanksAdd.3 +++ b/doc/FcBlanksAdd.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcBlanksAdd" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcBlanksAdd" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcBlanksAdd \- Add a character to an FcBlanks .SH SYNOPSIS diff --git a/doc/FcBlanksCreate.3 b/doc/FcBlanksCreate.3 index 33eb2c5..328b023 100644 --- a/doc/FcBlanksCreate.3 +++ b/doc/FcBlanksCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcBlanksCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcBlanksCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcBlanksCreate \- Create an FcBlanks .SH SYNOPSIS diff --git a/doc/FcBlanksDestroy.3 b/doc/FcBlanksDestroy.3 index 45e9c30..e2a5e18 100644 --- a/doc/FcBlanksDestroy.3 +++ b/doc/FcBlanksDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcBlanksDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcBlanksDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcBlanksDestroy \- Destroy and FcBlanks .SH SYNOPSIS diff --git a/doc/FcBlanksIsMember.3 b/doc/FcBlanksIsMember.3 index 59abcc0..e735a78 100644 --- a/doc/FcBlanksIsMember.3 +++ b/doc/FcBlanksIsMember.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcBlanksIsMember" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcBlanksIsMember" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcBlanksIsMember \- Query membership in an FcBlanks .SH SYNOPSIS diff --git a/doc/FcCacheCopySet.3 b/doc/FcCacheCopySet.3 index d571009..2a754f5 100644 --- a/doc/FcCacheCopySet.3 +++ b/doc/FcCacheCopySet.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCacheCopySet" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCacheCopySet" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCacheCopySet \- Returns a copy of the fontset from cache .SH SYNOPSIS diff --git a/doc/FcCacheCreateTagFile.3 b/doc/FcCacheCreateTagFile.3 index 8c4a36e..cce2ebc 100644 --- a/doc/FcCacheCreateTagFile.3 +++ b/doc/FcCacheCreateTagFile.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCacheCreateTagFile" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCacheCreateTagFile" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCacheCreateTagFile \- Create CACHEDIR.TAG at cache directory. .SH SYNOPSIS diff --git a/doc/FcCacheDir.3 b/doc/FcCacheDir.3 index d769046..a720e27 100644 --- a/doc/FcCacheDir.3 +++ b/doc/FcCacheDir.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCacheDir" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCacheDir" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCacheDir \- Return directory of cache .SH SYNOPSIS diff --git a/doc/FcCacheNumFont.3 b/doc/FcCacheNumFont.3 index 76c0a2f..1c0698e 100644 --- a/doc/FcCacheNumFont.3 +++ b/doc/FcCacheNumFont.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCacheNumFont" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCacheNumFont" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCacheNumFont \- Returns the number of fonts in cache. .SH SYNOPSIS diff --git a/doc/FcCacheNumSubdir.3 b/doc/FcCacheNumSubdir.3 index a5843ec..5ec1888 100644 --- a/doc/FcCacheNumSubdir.3 +++ b/doc/FcCacheNumSubdir.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCacheNumSubdir" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCacheNumSubdir" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCacheNumSubdir \- Return the number of subdirectories in cache. .SH SYNOPSIS diff --git a/doc/FcCacheSubdir.3 b/doc/FcCacheSubdir.3 index 4580a92..b51c0a1 100644 --- a/doc/FcCacheSubdir.3 +++ b/doc/FcCacheSubdir.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCacheSubdir" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCacheSubdir" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCacheSubdir \- Return the i'th subdirectory. .SH SYNOPSIS diff --git a/doc/FcCharSetAddChar.3 b/doc/FcCharSetAddChar.3 index 241be63..fbae1b2 100644 --- a/doc/FcCharSetAddChar.3 +++ b/doc/FcCharSetAddChar.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetAddChar" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetAddChar" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetAddChar \- Add a character to a charset .SH SYNOPSIS diff --git a/doc/FcCharSetCopy.3 b/doc/FcCharSetCopy.3 index 097a253..91ddbbe 100644 --- a/doc/FcCharSetCopy.3 +++ b/doc/FcCharSetCopy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetCopy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetCopy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetCopy \- Copy a charset .SH SYNOPSIS diff --git a/doc/FcCharSetCount.3 b/doc/FcCharSetCount.3 index f82901f..a0c63b8 100644 --- a/doc/FcCharSetCount.3 +++ b/doc/FcCharSetCount.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetCount" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetCount" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetCount \- Count entries in a charset .SH SYNOPSIS diff --git a/doc/FcCharSetCoverage.3 b/doc/FcCharSetCoverage.3 index 3ff0d9b..1a31902 100644 --- a/doc/FcCharSetCoverage.3 +++ b/doc/FcCharSetCoverage.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetCoverage" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetCoverage" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetCoverage \- DEPRECATED return coverage for a Unicode page .SH SYNOPSIS diff --git a/doc/FcCharSetCreate.3 b/doc/FcCharSetCreate.3 index 1897930..69933b7 100644 --- a/doc/FcCharSetCreate.3 +++ b/doc/FcCharSetCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetCreate \- Create an empty character set .SH SYNOPSIS diff --git a/doc/FcCharSetDelChar.3 b/doc/FcCharSetDelChar.3 index b2850b8..b2de649 100644 --- a/doc/FcCharSetDelChar.3 +++ b/doc/FcCharSetDelChar.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetDelChar" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetDelChar" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetDelChar \- Add a character to a charset .SH SYNOPSIS diff --git a/doc/FcCharSetDestroy.3 b/doc/FcCharSetDestroy.3 index e074f8d..295357c 100644 --- a/doc/FcCharSetDestroy.3 +++ b/doc/FcCharSetDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetDestroy \- Destroy a character set .SH SYNOPSIS diff --git a/doc/FcCharSetEqual.3 b/doc/FcCharSetEqual.3 index 637795f..d5ff9a8 100644 --- a/doc/FcCharSetEqual.3 +++ b/doc/FcCharSetEqual.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetEqual" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetEqual" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetEqual \- Compare two charsets .SH SYNOPSIS diff --git a/doc/FcCharSetFirstPage.3 b/doc/FcCharSetFirstPage.3 index 5b5bbd8..5f126c4 100644 --- a/doc/FcCharSetFirstPage.3 +++ b/doc/FcCharSetFirstPage.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetFirstPage" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetFirstPage" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetFirstPage \- Start enumerating charset contents .SH SYNOPSIS diff --git a/doc/FcCharSetHasChar.3 b/doc/FcCharSetHasChar.3 index 6679e7c..47c2129 100644 --- a/doc/FcCharSetHasChar.3 +++ b/doc/FcCharSetHasChar.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetHasChar" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetHasChar" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetHasChar \- Check a charset for a char .SH SYNOPSIS diff --git a/doc/FcCharSetIntersect.3 b/doc/FcCharSetIntersect.3 index 5ed5c8a..557a2b7 100644 --- a/doc/FcCharSetIntersect.3 +++ b/doc/FcCharSetIntersect.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetIntersect" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetIntersect" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetIntersect \- Intersect charsets .SH SYNOPSIS diff --git a/doc/FcCharSetIntersectCount.3 b/doc/FcCharSetIntersectCount.3 index d08068c..038589b 100644 --- a/doc/FcCharSetIntersectCount.3 +++ b/doc/FcCharSetIntersectCount.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetIntersectCount" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetIntersectCount" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetIntersectCount \- Intersect and count charsets .SH SYNOPSIS diff --git a/doc/FcCharSetIsSubset.3 b/doc/FcCharSetIsSubset.3 index 90d7e53..c80bc0a 100644 --- a/doc/FcCharSetIsSubset.3 +++ b/doc/FcCharSetIsSubset.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetIsSubset" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetIsSubset" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetIsSubset \- Test for charset inclusion .SH SYNOPSIS diff --git a/doc/FcCharSetMerge.3 b/doc/FcCharSetMerge.3 index 3c84301..0c85401 100644 --- a/doc/FcCharSetMerge.3 +++ b/doc/FcCharSetMerge.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetMerge" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetMerge" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetMerge \- Merge charsets .SH SYNOPSIS diff --git a/doc/FcCharSetNew.3 b/doc/FcCharSetNew.3 index 687dd2f..3988181 100644 --- a/doc/FcCharSetNew.3 +++ b/doc/FcCharSetNew.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetNew" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetNew" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetNew \- DEPRECATED alias for FcCharSetCreate .SH SYNOPSIS diff --git a/doc/FcCharSetNextPage.3 b/doc/FcCharSetNextPage.3 index ac5008b..229ee8c 100644 --- a/doc/FcCharSetNextPage.3 +++ b/doc/FcCharSetNextPage.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetNextPage" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetNextPage" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetNextPage \- Continue enumerating charset contents .SH SYNOPSIS diff --git a/doc/FcCharSetSubtract.3 b/doc/FcCharSetSubtract.3 index 0bf85c1..7537bee 100644 --- a/doc/FcCharSetSubtract.3 +++ b/doc/FcCharSetSubtract.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetSubtract" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetSubtract" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetSubtract \- Subtract charsets .SH SYNOPSIS diff --git a/doc/FcCharSetSubtractCount.3 b/doc/FcCharSetSubtractCount.3 index 09bb9fc..fbc2f29 100644 --- a/doc/FcCharSetSubtractCount.3 +++ b/doc/FcCharSetSubtractCount.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetSubtractCount" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetSubtractCount" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetSubtractCount \- Subtract and count charsets .SH SYNOPSIS diff --git a/doc/FcCharSetUnion.3 b/doc/FcCharSetUnion.3 index 1b80ecd..f7379bd 100644 --- a/doc/FcCharSetUnion.3 +++ b/doc/FcCharSetUnion.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcCharSetUnion" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcCharSetUnion" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcCharSetUnion \- Add charsets .SH SYNOPSIS diff --git a/doc/FcConfigAppFontAddDir.3 b/doc/FcConfigAppFontAddDir.3 index af8a9d0..ba6c3c7 100644 --- a/doc/FcConfigAppFontAddDir.3 +++ b/doc/FcConfigAppFontAddDir.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigAppFontAddDir" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigAppFontAddDir" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigAppFontAddDir \- Add fonts from directory to font database .SH SYNOPSIS diff --git a/doc/FcConfigAppFontAddFile.3 b/doc/FcConfigAppFontAddFile.3 index 54333b4..99db1c3 100644 --- a/doc/FcConfigAppFontAddFile.3 +++ b/doc/FcConfigAppFontAddFile.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigAppFontAddFile" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigAppFontAddFile" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigAppFontAddFile \- Add font file to font database .SH SYNOPSIS diff --git a/doc/FcConfigAppFontClear.3 b/doc/FcConfigAppFontClear.3 index 64f71aa..1675ddd 100644 --- a/doc/FcConfigAppFontClear.3 +++ b/doc/FcConfigAppFontClear.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigAppFontClear" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigAppFontClear" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigAppFontClear \- Remove all app fonts from font database .SH SYNOPSIS diff --git a/doc/FcConfigBuildFonts.3 b/doc/FcConfigBuildFonts.3 index 785da51..0fb537d 100644 --- a/doc/FcConfigBuildFonts.3 +++ b/doc/FcConfigBuildFonts.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigBuildFonts" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigBuildFonts" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigBuildFonts \- Build font database .SH SYNOPSIS diff --git a/doc/FcConfigCreate.3 b/doc/FcConfigCreate.3 index 8988b68..1f88703 100644 --- a/doc/FcConfigCreate.3 +++ b/doc/FcConfigCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigCreate \- Create a configuration .SH SYNOPSIS diff --git a/doc/FcConfigDestroy.3 b/doc/FcConfigDestroy.3 index 71a65d7..2a484eb 100644 --- a/doc/FcConfigDestroy.3 +++ b/doc/FcConfigDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigDestroy \- Destroy a configuration .SH SYNOPSIS diff --git a/doc/FcConfigEnableHome.3 b/doc/FcConfigEnableHome.3 index 6a21e15..f1a8896 100644 --- a/doc/FcConfigEnableHome.3 +++ b/doc/FcConfigEnableHome.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigEnableHome" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigEnableHome" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigEnableHome \- controls use of the home directory. .SH SYNOPSIS diff --git a/doc/FcConfigFileInfoIterGet.3 b/doc/FcConfigFileInfoIterGet.3 index b930aa8..0af674e 100644 --- a/doc/FcConfigFileInfoIterGet.3 +++ b/doc/FcConfigFileInfoIterGet.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigFileInfoIterGet" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigFileInfoIterGet" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigFileInfoIterGet \- Obtain the configuration file information .SH SYNOPSIS diff --git a/doc/FcConfigFileInfoIterInit.3 b/doc/FcConfigFileInfoIterInit.3 index 59cea5c..819fae2 100644 --- a/doc/FcConfigFileInfoIterInit.3 +++ b/doc/FcConfigFileInfoIterInit.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigFileInfoIterInit" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigFileInfoIterInit" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigFileInfoIterInit \- Initialize the iterator .SH SYNOPSIS diff --git a/doc/FcConfigFileInfoIterNext.3 b/doc/FcConfigFileInfoIterNext.3 index 5908aa9..004dfd9 100644 --- a/doc/FcConfigFileInfoIterNext.3 +++ b/doc/FcConfigFileInfoIterNext.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigFileInfoIterNext" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigFileInfoIterNext" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigFileInfoIterNext \- Set the iterator to point to the next list .SH SYNOPSIS diff --git a/doc/FcConfigFilename.3 b/doc/FcConfigFilename.3 index 35318a5..771a48a 100644 --- a/doc/FcConfigFilename.3 +++ b/doc/FcConfigFilename.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigFilename" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigFilename" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigFilename \- Find a config file .SH SYNOPSIS diff --git a/doc/FcConfigGetBlanks.3 b/doc/FcConfigGetBlanks.3 index dbd48f2..fd05673 100644 --- a/doc/FcConfigGetBlanks.3 +++ b/doc/FcConfigGetBlanks.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetBlanks" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetBlanks" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetBlanks \- Get config blanks .SH SYNOPSIS diff --git a/doc/FcConfigGetCache.3 b/doc/FcConfigGetCache.3 index 504c928..73cdba3 100644 --- a/doc/FcConfigGetCache.3 +++ b/doc/FcConfigGetCache.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetCache" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetCache" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetCache \- DEPRECATED used to return per-user cache filename .SH SYNOPSIS diff --git a/doc/FcConfigGetCacheDirs.3 b/doc/FcConfigGetCacheDirs.3 index 26b3720..36ba9c6 100644 --- a/doc/FcConfigGetCacheDirs.3 +++ b/doc/FcConfigGetCacheDirs.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetCacheDirs" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetCacheDirs" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetCacheDirs \- return the list of directories searched for cache files .SH SYNOPSIS diff --git a/doc/FcConfigGetConfigDirs.3 b/doc/FcConfigGetConfigDirs.3 index 1006743..5ce1e34 100644 --- a/doc/FcConfigGetConfigDirs.3 +++ b/doc/FcConfigGetConfigDirs.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetConfigDirs" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetConfigDirs" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetConfigDirs \- Get config directories .SH SYNOPSIS diff --git a/doc/FcConfigGetConfigFiles.3 b/doc/FcConfigGetConfigFiles.3 index 70f650e..2ef1ef6 100644 --- a/doc/FcConfigGetConfigFiles.3 +++ b/doc/FcConfigGetConfigFiles.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetConfigFiles" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetConfigFiles" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetConfigFiles \- Get config files .SH SYNOPSIS diff --git a/doc/FcConfigGetCurrent.3 b/doc/FcConfigGetCurrent.3 index 76326c9..ce7a7f5 100644 --- a/doc/FcConfigGetCurrent.3 +++ b/doc/FcConfigGetCurrent.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetCurrent" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetCurrent" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetCurrent \- Return current configuration .SH SYNOPSIS diff --git a/doc/FcConfigGetFontDirs.3 b/doc/FcConfigGetFontDirs.3 index e5e4336..648545f 100644 --- a/doc/FcConfigGetFontDirs.3 +++ b/doc/FcConfigGetFontDirs.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetFontDirs" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetFontDirs" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetFontDirs \- Get font directories .SH SYNOPSIS diff --git a/doc/FcConfigGetFonts.3 b/doc/FcConfigGetFonts.3 index aa4c46c..5017b19 100644 --- a/doc/FcConfigGetFonts.3 +++ b/doc/FcConfigGetFonts.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetFonts" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetFonts" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetFonts \- Get config font set .SH SYNOPSIS diff --git a/doc/FcConfigGetRescanInterval.3 b/doc/FcConfigGetRescanInterval.3 index 5a44049..5ed759f 100644 --- a/doc/FcConfigGetRescanInterval.3 +++ b/doc/FcConfigGetRescanInterval.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetRescanInterval" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetRescanInterval" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetRescanInterval \- Get config rescan interval .SH SYNOPSIS diff --git a/doc/FcConfigGetSysRoot.3 b/doc/FcConfigGetSysRoot.3 index 4fd3732..43de435 100644 --- a/doc/FcConfigGetSysRoot.3 +++ b/doc/FcConfigGetSysRoot.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigGetSysRoot" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigGetSysRoot" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigGetSysRoot \- Obtain the system root directory .SH SYNOPSIS diff --git a/doc/FcConfigHome.3 b/doc/FcConfigHome.3 index 437b73e..864c88b 100644 --- a/doc/FcConfigHome.3 +++ b/doc/FcConfigHome.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigHome" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigHome" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigHome \- return the current home directory. .SH SYNOPSIS diff --git a/doc/FcConfigParseAndLoad.3 b/doc/FcConfigParseAndLoad.3 index 870b7a0..2184dbf 100644 --- a/doc/FcConfigParseAndLoad.3 +++ b/doc/FcConfigParseAndLoad.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigParseAndLoad" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigParseAndLoad" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigParseAndLoad \- load a configuration file .SH SYNOPSIS diff --git a/doc/FcConfigParseAndLoadFromMemory.3 b/doc/FcConfigParseAndLoadFromMemory.3 index b131004..bd7ad44 100644 --- a/doc/FcConfigParseAndLoadFromMemory.3 +++ b/doc/FcConfigParseAndLoadFromMemory.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigParseAndLoadFromMemory" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigParseAndLoadFromMemory" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigParseAndLoadFromMemory \- load a configuration from memory .SH SYNOPSIS diff --git a/doc/FcConfigReference.3 b/doc/FcConfigReference.3 index 4b71564..b680f10 100644 --- a/doc/FcConfigReference.3 +++ b/doc/FcConfigReference.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigReference" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigReference" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigReference \- Increment config reference count .SH SYNOPSIS diff --git a/doc/FcConfigSetCurrent.3 b/doc/FcConfigSetCurrent.3 index 5c3cd6e..e462b52 100644 --- a/doc/FcConfigSetCurrent.3 +++ b/doc/FcConfigSetCurrent.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigSetCurrent" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigSetCurrent" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigSetCurrent \- Set configuration as default .SH SYNOPSIS diff --git a/doc/FcConfigSetRescanInterval.3 b/doc/FcConfigSetRescanInterval.3 index deb9b30..1004eb3 100644 --- a/doc/FcConfigSetRescanInterval.3 +++ b/doc/FcConfigSetRescanInterval.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigSetRescanInterval" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigSetRescanInterval" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigSetRescanInterval \- Set config rescan interval .SH SYNOPSIS diff --git a/doc/FcConfigSetSysRoot.3 b/doc/FcConfigSetSysRoot.3 index 5cdedd1..e1e1183 100644 --- a/doc/FcConfigSetSysRoot.3 +++ b/doc/FcConfigSetSysRoot.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigSetSysRoot" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigSetSysRoot" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigSetSysRoot \- Set the system root directory .SH SYNOPSIS diff --git a/doc/FcConfigSubstitute.3 b/doc/FcConfigSubstitute.3 index 937f201..490bb5c 100644 --- a/doc/FcConfigSubstitute.3 +++ b/doc/FcConfigSubstitute.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigSubstitute" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigSubstitute" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigSubstitute \- Execute substitutions .SH SYNOPSIS diff --git a/doc/FcConfigSubstituteWithPat.3 b/doc/FcConfigSubstituteWithPat.3 index 16e335a..7f69124 100644 --- a/doc/FcConfigSubstituteWithPat.3 +++ b/doc/FcConfigSubstituteWithPat.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigSubstituteWithPat" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigSubstituteWithPat" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigSubstituteWithPat \- Execute substitutions .SH SYNOPSIS diff --git a/doc/FcConfigUptoDate.3 b/doc/FcConfigUptoDate.3 index 07ddfd5..05a32a2 100644 --- a/doc/FcConfigUptoDate.3 +++ b/doc/FcConfigUptoDate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcConfigUptoDate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcConfigUptoDate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcConfigUptoDate \- Check timestamps on config files .SH SYNOPSIS diff --git a/doc/FcDefaultSubstitute.3 b/doc/FcDefaultSubstitute.3 index bf24959..929f7af 100644 --- a/doc/FcDefaultSubstitute.3 +++ b/doc/FcDefaultSubstitute.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDefaultSubstitute" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDefaultSubstitute" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDefaultSubstitute \- Perform default substitutions in a pattern .SH SYNOPSIS diff --git a/doc/FcDirCacheClean.3 b/doc/FcDirCacheClean.3 index df97549..6833348 100644 --- a/doc/FcDirCacheClean.3 +++ b/doc/FcDirCacheClean.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheClean" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheClean" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheClean \- Clean up a cache directory .SH SYNOPSIS diff --git a/doc/FcDirCacheCreateUUID.3 b/doc/FcDirCacheCreateUUID.3 index 518519f..7fe56d3 100644 --- a/doc/FcDirCacheCreateUUID.3 +++ b/doc/FcDirCacheCreateUUID.3 @@ -1,12 +1,12 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheCreateUUID" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheCreateUUID" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheCreateUUID \- Create .uuid file at a directory .SH SYNOPSIS .nf \fB#include .sp -FcBool FcDirCacheCreateUUID (FcChar8 *\fIdir\fB, FcBool\fIforce\fB, FcConfig\fIconfig\fB); +FcBool FcDirCacheCreateUUID (FcChar8 *\fIdir\fB, FcBool\fIforce\fB, FcConfig *\fIconfig\fB); .fi\fR .SH "DESCRIPTION" .PP diff --git a/doc/FcDirCacheDeleteUUID.3 b/doc/FcDirCacheDeleteUUID.3 new file mode 100644 index 0000000..da1d7b7 --- /dev/null +++ b/doc/FcDirCacheDeleteUUID.3 @@ -0,0 +1,17 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcDirCacheDeleteUUID" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcDirCacheDeleteUUID \- Delete .uuid file +.SH SYNOPSIS +.nf +\fB#include +.sp +FcBool FcDirCacheDeleteUUID (const FcChar8 *\fIdir\fB, FcConfig *\fIconfig\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +This is to delete .uuid file containing an UUID at a font directory of +\fIdir\fR\&. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcDirCacheLoad.3 b/doc/FcDirCacheLoad.3 index 41c2802..4ebcdaa 100644 --- a/doc/FcDirCacheLoad.3 +++ b/doc/FcDirCacheLoad.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheLoad" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheLoad" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheLoad \- load a directory cache .SH SYNOPSIS diff --git a/doc/FcDirCacheLoadFile.3 b/doc/FcDirCacheLoadFile.3 index 3b439b0..bedd727 100644 --- a/doc/FcDirCacheLoadFile.3 +++ b/doc/FcDirCacheLoadFile.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheLoadFile" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheLoadFile" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheLoadFile \- load a cache file .SH SYNOPSIS diff --git a/doc/FcDirCacheRead.3 b/doc/FcDirCacheRead.3 index 104c958..42f70a6 100644 --- a/doc/FcDirCacheRead.3 +++ b/doc/FcDirCacheRead.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheRead" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheRead" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheRead \- read or construct a directory cache .SH SYNOPSIS diff --git a/doc/FcDirCacheRescan.3 b/doc/FcDirCacheRescan.3 index 9045653..4f2819c 100644 --- a/doc/FcDirCacheRescan.3 +++ b/doc/FcDirCacheRescan.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheRescan" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheRescan" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheRescan \- Re-scan a directory cache .SH SYNOPSIS diff --git a/doc/FcDirCacheUnlink.3 b/doc/FcDirCacheUnlink.3 index 29bd68d..ff73c26 100644 --- a/doc/FcDirCacheUnlink.3 +++ b/doc/FcDirCacheUnlink.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheUnlink" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheUnlink" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheUnlink \- Remove all caches related to dir .SH SYNOPSIS diff --git a/doc/FcDirCacheUnload.3 b/doc/FcDirCacheUnload.3 index 82428d2..acc5545 100644 --- a/doc/FcDirCacheUnload.3 +++ b/doc/FcDirCacheUnload.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheUnload" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheUnload" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheUnload \- unload a cache file .SH SYNOPSIS diff --git a/doc/FcDirCacheValid.3 b/doc/FcDirCacheValid.3 index 69d09c8..c89a40e 100644 --- a/doc/FcDirCacheValid.3 +++ b/doc/FcDirCacheValid.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirCacheValid" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirCacheValid" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirCacheValid \- check directory cache .SH SYNOPSIS diff --git a/doc/FcDirSave.3 b/doc/FcDirSave.3 index aaecba3..ed5f858 100644 --- a/doc/FcDirSave.3 +++ b/doc/FcDirSave.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirSave" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirSave" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirSave \- DEPRECATED: formerly used to save a directory cache .SH SYNOPSIS diff --git a/doc/FcDirScan.3 b/doc/FcDirScan.3 index 79a66b0..2dfcc21 100644 --- a/doc/FcDirScan.3 +++ b/doc/FcDirScan.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcDirScan" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcDirScan" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcDirScan \- scan a font directory without caching it .SH SYNOPSIS diff --git a/doc/FcFileIsDir.3 b/doc/FcFileIsDir.3 index e1f969f..7fda564 100644 --- a/doc/FcFileIsDir.3 +++ b/doc/FcFileIsDir.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFileIsDir" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFileIsDir" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFileIsDir \- check whether a file is a directory .SH SYNOPSIS diff --git a/doc/FcFileScan.3 b/doc/FcFileScan.3 index fcdb613..7e1eb5c 100644 --- a/doc/FcFileScan.3 +++ b/doc/FcFileScan.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFileScan" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFileScan" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFileScan \- scan a font file .SH SYNOPSIS diff --git a/doc/FcFini.3 b/doc/FcFini.3 index 416def8..87cb829 100644 --- a/doc/FcFini.3 +++ b/doc/FcFini.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFini" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFini" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFini \- finalize fontconfig library .SH SYNOPSIS diff --git a/doc/FcFontList.3 b/doc/FcFontList.3 index 92ff7e3..f3eb232 100644 --- a/doc/FcFontList.3 +++ b/doc/FcFontList.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontList" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontList" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontList \- List fonts .SH SYNOPSIS diff --git a/doc/FcFontMatch.3 b/doc/FcFontMatch.3 index a3e1ddd..d94d711 100644 --- a/doc/FcFontMatch.3 +++ b/doc/FcFontMatch.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontMatch" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontMatch" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontMatch \- Return best font .SH SYNOPSIS diff --git a/doc/FcFontRenderPrepare.3 b/doc/FcFontRenderPrepare.3 index df8082b..9cf37b0 100644 --- a/doc/FcFontRenderPrepare.3 +++ b/doc/FcFontRenderPrepare.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontRenderPrepare" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontRenderPrepare" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontRenderPrepare \- Prepare pattern for loading font file .SH SYNOPSIS diff --git a/doc/FcFontSetAdd.3 b/doc/FcFontSetAdd.3 index a95382d..52dbc3d 100644 --- a/doc/FcFontSetAdd.3 +++ b/doc/FcFontSetAdd.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetAdd" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetAdd" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetAdd \- Add to a font set .SH SYNOPSIS diff --git a/doc/FcFontSetCreate.3 b/doc/FcFontSetCreate.3 index 1c86421..fbf9d3d 100644 --- a/doc/FcFontSetCreate.3 +++ b/doc/FcFontSetCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetCreate \- Create a font set .SH SYNOPSIS diff --git a/doc/FcFontSetDestroy.3 b/doc/FcFontSetDestroy.3 index bb20669..5d2d056 100644 --- a/doc/FcFontSetDestroy.3 +++ b/doc/FcFontSetDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetDestroy \- Destroy a font set .SH SYNOPSIS diff --git a/doc/FcFontSetList.3 b/doc/FcFontSetList.3 index e7c76b9..0d92bd1 100644 --- a/doc/FcFontSetList.3 +++ b/doc/FcFontSetList.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetList" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetList" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetList \- List fonts from a set of font sets .SH SYNOPSIS diff --git a/doc/FcFontSetMatch.3 b/doc/FcFontSetMatch.3 index c52aecf..03268eb 100644 --- a/doc/FcFontSetMatch.3 +++ b/doc/FcFontSetMatch.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetMatch" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetMatch" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetMatch \- Return the best font from a set of font sets .SH SYNOPSIS diff --git a/doc/FcFontSetPrint.3 b/doc/FcFontSetPrint.3 index 30cd36e..a7d4653 100644 --- a/doc/FcFontSetPrint.3 +++ b/doc/FcFontSetPrint.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetPrint" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetPrint" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetPrint \- Print a set of patterns to stdout .SH SYNOPSIS diff --git a/doc/FcFontSetSort.3 b/doc/FcFontSetSort.3 index 5d6e762..580c9a7 100644 --- a/doc/FcFontSetSort.3 +++ b/doc/FcFontSetSort.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetSort" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetSort" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetSort \- Add to a font set .SH SYNOPSIS diff --git a/doc/FcFontSetSortDestroy.3 b/doc/FcFontSetSortDestroy.3 index 5882707..d509446 100644 --- a/doc/FcFontSetSortDestroy.3 +++ b/doc/FcFontSetSortDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSetSortDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSetSortDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSetSortDestroy \- DEPRECATED destroy a font set .SH SYNOPSIS diff --git a/doc/FcFontSort.3 b/doc/FcFontSort.3 index d49b4e9..48715f1 100644 --- a/doc/FcFontSort.3 +++ b/doc/FcFontSort.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFontSort" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFontSort" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFontSort \- Return list of matching fonts .SH SYNOPSIS diff --git a/doc/FcFreeTypeCharIndex.3 b/doc/FcFreeTypeCharIndex.3 index a3243e3..39106cb 100644 --- a/doc/FcFreeTypeCharIndex.3 +++ b/doc/FcFreeTypeCharIndex.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFreeTypeCharIndex" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFreeTypeCharIndex" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFreeTypeCharIndex \- map Unicode to glyph id .SH SYNOPSIS diff --git a/doc/FcFreeTypeCharSet.3 b/doc/FcFreeTypeCharSet.3 index 9047f0a..2dbff35 100644 --- a/doc/FcFreeTypeCharSet.3 +++ b/doc/FcFreeTypeCharSet.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFreeTypeCharSet" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFreeTypeCharSet" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFreeTypeCharSet \- compute Unicode coverage .SH SYNOPSIS diff --git a/doc/FcFreeTypeCharSetAndSpacing.3 b/doc/FcFreeTypeCharSetAndSpacing.3 index c4f936d..b6e9bab 100644 --- a/doc/FcFreeTypeCharSetAndSpacing.3 +++ b/doc/FcFreeTypeCharSetAndSpacing.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFreeTypeCharSetAndSpacing" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFreeTypeCharSetAndSpacing" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFreeTypeCharSetAndSpacing \- compute Unicode coverage and spacing type .SH SYNOPSIS diff --git a/doc/FcFreeTypeQuery.3 b/doc/FcFreeTypeQuery.3 index 0e78c99..3e1f44e 100644 --- a/doc/FcFreeTypeQuery.3 +++ b/doc/FcFreeTypeQuery.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFreeTypeQuery" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFreeTypeQuery" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFreeTypeQuery \- compute pattern from font file (and index) .SH SYNOPSIS diff --git a/doc/FcFreeTypeQueryAll.3 b/doc/FcFreeTypeQueryAll.3 index 0e4965a..23b15d4 100644 --- a/doc/FcFreeTypeQueryAll.3 +++ b/doc/FcFreeTypeQueryAll.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFreeTypeQueryAll" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFreeTypeQueryAll" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFreeTypeQueryAll \- compute all patterns from font file (and index) .SH SYNOPSIS diff --git a/doc/FcFreeTypeQueryFace.3 b/doc/FcFreeTypeQueryFace.3 index d026964..008e130 100644 --- a/doc/FcFreeTypeQueryFace.3 +++ b/doc/FcFreeTypeQueryFace.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcFreeTypeQueryFace" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcFreeTypeQueryFace" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcFreeTypeQueryFace \- compute pattern from FT_Face .SH SYNOPSIS diff --git a/doc/FcGetDefaultLangs.3 b/doc/FcGetDefaultLangs.3 index 419895e..86edc52 100644 --- a/doc/FcGetDefaultLangs.3 +++ b/doc/FcGetDefaultLangs.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcGetDefaultLangs" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcGetDefaultLangs" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcGetDefaultLangs \- Get the default languages list .SH SYNOPSIS diff --git a/doc/FcGetLangs.3 b/doc/FcGetLangs.3 index b6713ea..2e9e287 100644 --- a/doc/FcGetLangs.3 +++ b/doc/FcGetLangs.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcGetLangs" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcGetLangs" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcGetLangs \- Get list of languages .SH SYNOPSIS diff --git a/doc/FcGetVersion.3 b/doc/FcGetVersion.3 index 212dc1d..7f71b9e 100644 --- a/doc/FcGetVersion.3 +++ b/doc/FcGetVersion.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcGetVersion" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcGetVersion" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcGetVersion \- library version number .SH SYNOPSIS diff --git a/doc/FcInit.3 b/doc/FcInit.3 index 7e74ac8..ffcffdf 100644 --- a/doc/FcInit.3 +++ b/doc/FcInit.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcInit" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcInit" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcInit \- initialize fontconfig library .SH SYNOPSIS diff --git a/doc/FcInitBringUptoDate.3 b/doc/FcInitBringUptoDate.3 index f82d69e..2edbe9a 100644 --- a/doc/FcInitBringUptoDate.3 +++ b/doc/FcInitBringUptoDate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcInitBringUptoDate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcInitBringUptoDate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcInitBringUptoDate \- reload configuration files if needed .SH SYNOPSIS diff --git a/doc/FcInitLoadConfig.3 b/doc/FcInitLoadConfig.3 index 45e1c92..3e4bc32 100644 --- a/doc/FcInitLoadConfig.3 +++ b/doc/FcInitLoadConfig.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcInitLoadConfig" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcInitLoadConfig" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcInitLoadConfig \- load configuration .SH SYNOPSIS diff --git a/doc/FcInitLoadConfigAndFonts.3 b/doc/FcInitLoadConfigAndFonts.3 index e9001d2..04e0818 100644 --- a/doc/FcInitLoadConfigAndFonts.3 +++ b/doc/FcInitLoadConfigAndFonts.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcInitLoadConfigAndFonts" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcInitLoadConfigAndFonts" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcInitLoadConfigAndFonts \- load configuration and font data .SH SYNOPSIS diff --git a/doc/FcInitReinitialize.3 b/doc/FcInitReinitialize.3 index 1e6e57b..b70dde6 100644 --- a/doc/FcInitReinitialize.3 +++ b/doc/FcInitReinitialize.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcInitReinitialize" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcInitReinitialize" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcInitReinitialize \- re-initialize library .SH SYNOPSIS diff --git a/doc/FcIsLower.3 b/doc/FcIsLower.3 index ea77e55..4d4408d 100644 --- a/doc/FcIsLower.3 +++ b/doc/FcIsLower.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcIsLower" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcIsLower" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcIsLower \- check for lower case ASCII character .SH SYNOPSIS diff --git a/doc/FcIsUpper.3 b/doc/FcIsUpper.3 index 5ebe201..9b955f4 100644 --- a/doc/FcIsUpper.3 +++ b/doc/FcIsUpper.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcIsUpper" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcIsUpper" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcIsUpper \- check for upper case ASCII character .SH SYNOPSIS diff --git a/doc/FcLangGetCharSet.3 b/doc/FcLangGetCharSet.3 index fba9243..5329dd6 100644 --- a/doc/FcLangGetCharSet.3 +++ b/doc/FcLangGetCharSet.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangGetCharSet" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangGetCharSet" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangGetCharSet \- Get character map for a language .SH SYNOPSIS diff --git a/doc/FcLangNormalize.3 b/doc/FcLangNormalize.3 index 47aa19c..257e783 100644 --- a/doc/FcLangNormalize.3 +++ b/doc/FcLangNormalize.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangNormalize" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangNormalize" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangNormalize \- Normalize the language string .SH SYNOPSIS diff --git a/doc/FcLangSetAdd.3 b/doc/FcLangSetAdd.3 index d641d50..e59447e 100644 --- a/doc/FcLangSetAdd.3 +++ b/doc/FcLangSetAdd.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetAdd" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetAdd" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetAdd \- add a language to a langset .SH SYNOPSIS diff --git a/doc/FcLangSetCompare.3 b/doc/FcLangSetCompare.3 index 58a2677..442e50f 100644 --- a/doc/FcLangSetCompare.3 +++ b/doc/FcLangSetCompare.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetCompare" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetCompare" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetCompare \- compare language sets .SH SYNOPSIS diff --git a/doc/FcLangSetContains.3 b/doc/FcLangSetContains.3 index 8e43aea..b693a41 100644 --- a/doc/FcLangSetContains.3 +++ b/doc/FcLangSetContains.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetContains" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetContains" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetContains \- check langset subset relation .SH SYNOPSIS diff --git a/doc/FcLangSetCopy.3 b/doc/FcLangSetCopy.3 index 7ed9602..f94578e 100644 --- a/doc/FcLangSetCopy.3 +++ b/doc/FcLangSetCopy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetCopy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetCopy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetCopy \- copy a langset object .SH SYNOPSIS diff --git a/doc/FcLangSetCreate.3 b/doc/FcLangSetCreate.3 index 5ce84c8..446a93b 100644 --- a/doc/FcLangSetCreate.3 +++ b/doc/FcLangSetCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetCreate \- create a langset object .SH SYNOPSIS diff --git a/doc/FcLangSetDel.3 b/doc/FcLangSetDel.3 index 98d4840..a4fa56f 100644 --- a/doc/FcLangSetDel.3 +++ b/doc/FcLangSetDel.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetDel" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetDel" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetDel \- delete a language from a langset .SH SYNOPSIS diff --git a/doc/FcLangSetDestroy.3 b/doc/FcLangSetDestroy.3 index b73fb99..84ab8ba 100644 --- a/doc/FcLangSetDestroy.3 +++ b/doc/FcLangSetDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetDestroy \- destroy a langset object .SH SYNOPSIS diff --git a/doc/FcLangSetEqual.3 b/doc/FcLangSetEqual.3 index f5717e3..a623bf8 100644 --- a/doc/FcLangSetEqual.3 +++ b/doc/FcLangSetEqual.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetEqual" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetEqual" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetEqual \- test for matching langsets .SH SYNOPSIS diff --git a/doc/FcLangSetGetLangs.3 b/doc/FcLangSetGetLangs.3 index 31347cd..54ad78c 100644 --- a/doc/FcLangSetGetLangs.3 +++ b/doc/FcLangSetGetLangs.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetGetLangs" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetGetLangs" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetGetLangs \- get the list of languages in the langset .SH SYNOPSIS diff --git a/doc/FcLangSetHasLang.3 b/doc/FcLangSetHasLang.3 index a774fce..2d9bb19 100644 --- a/doc/FcLangSetHasLang.3 +++ b/doc/FcLangSetHasLang.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetHasLang" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetHasLang" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetHasLang \- test langset for language support .SH SYNOPSIS diff --git a/doc/FcLangSetHash.3 b/doc/FcLangSetHash.3 index 3f2efc2..34ba788 100644 --- a/doc/FcLangSetHash.3 +++ b/doc/FcLangSetHash.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetHash" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetHash" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetHash \- return a hash value for a langset .SH SYNOPSIS diff --git a/doc/FcLangSetSubtract.3 b/doc/FcLangSetSubtract.3 index 27aee0f..4117a13 100644 --- a/doc/FcLangSetSubtract.3 +++ b/doc/FcLangSetSubtract.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetSubtract" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetSubtract" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetSubtract \- Subtract langsets .SH SYNOPSIS diff --git a/doc/FcLangSetUnion.3 b/doc/FcLangSetUnion.3 index ca7d0ad..fc36862 100644 --- a/doc/FcLangSetUnion.3 +++ b/doc/FcLangSetUnion.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcLangSetUnion" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcLangSetUnion" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcLangSetUnion \- Add langsets .SH SYNOPSIS diff --git a/doc/FcMatrixCopy.3 b/doc/FcMatrixCopy.3 index f5fbddd..51bbd50 100644 --- a/doc/FcMatrixCopy.3 +++ b/doc/FcMatrixCopy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcMatrixCopy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcMatrixCopy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcMatrixCopy \- Copy a matrix .SH SYNOPSIS diff --git a/doc/FcMatrixEqual.3 b/doc/FcMatrixEqual.3 index 54e7b0a..065494e 100644 --- a/doc/FcMatrixEqual.3 +++ b/doc/FcMatrixEqual.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcMatrixEqual" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcMatrixEqual" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcMatrixEqual \- Compare two matrices .SH SYNOPSIS diff --git a/doc/FcMatrixInit.3 b/doc/FcMatrixInit.3 index a0a44af..7cb5dd7 100644 --- a/doc/FcMatrixInit.3 +++ b/doc/FcMatrixInit.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcMatrixInit" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcMatrixInit" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcMatrixInit \- initialize an FcMatrix structure .SH SYNOPSIS diff --git a/doc/FcMatrixMultiply.3 b/doc/FcMatrixMultiply.3 index e3d9dda..ed817b3 100644 --- a/doc/FcMatrixMultiply.3 +++ b/doc/FcMatrixMultiply.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcMatrixMultiply" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcMatrixMultiply" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcMatrixMultiply \- Multiply matrices .SH SYNOPSIS diff --git a/doc/FcMatrixRotate.3 b/doc/FcMatrixRotate.3 index e52e485..9a6191c 100644 --- a/doc/FcMatrixRotate.3 +++ b/doc/FcMatrixRotate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcMatrixRotate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcMatrixRotate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcMatrixRotate \- Rotate a matrix .SH SYNOPSIS diff --git a/doc/FcMatrixScale.3 b/doc/FcMatrixScale.3 index e6d68b7..72c95ea 100644 --- a/doc/FcMatrixScale.3 +++ b/doc/FcMatrixScale.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcMatrixScale" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcMatrixScale" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcMatrixScale \- Scale a matrix .SH SYNOPSIS diff --git a/doc/FcMatrixShear.3 b/doc/FcMatrixShear.3 index ff335d0..1b69645 100644 --- a/doc/FcMatrixShear.3 +++ b/doc/FcMatrixShear.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcMatrixShear" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcMatrixShear" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcMatrixShear \- Shear a matrix .SH SYNOPSIS diff --git a/doc/FcNameConstant.3 b/doc/FcNameConstant.3 index 5730ece..50d6691 100644 --- a/doc/FcNameConstant.3 +++ b/doc/FcNameConstant.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameConstant" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameConstant" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameConstant \- Get the value for a symbolic constant .SH SYNOPSIS diff --git a/doc/FcNameGetConstant.3 b/doc/FcNameGetConstant.3 index 5d310e6..5761d06 100644 --- a/doc/FcNameGetConstant.3 +++ b/doc/FcNameGetConstant.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameGetConstant" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameGetConstant" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameGetConstant \- Lookup symbolic constant .SH SYNOPSIS diff --git a/doc/FcNameGetObjectType.3 b/doc/FcNameGetObjectType.3 index ed1b23b..3c88e59 100644 --- a/doc/FcNameGetObjectType.3 +++ b/doc/FcNameGetObjectType.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameGetObjectType" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameGetObjectType" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameGetObjectType \- Lookup an object type .SH SYNOPSIS diff --git a/doc/FcNameParse.3 b/doc/FcNameParse.3 index 4e7f7c7..cc0abba 100644 --- a/doc/FcNameParse.3 +++ b/doc/FcNameParse.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameParse" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameParse" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameParse \- Parse a pattern string .SH SYNOPSIS diff --git a/doc/FcNameRegisterConstants.3 b/doc/FcNameRegisterConstants.3 index fdf939c..1a34de2 100644 --- a/doc/FcNameRegisterConstants.3 +++ b/doc/FcNameRegisterConstants.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameRegisterConstants" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameRegisterConstants" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameRegisterConstants \- Register symbolic constants .SH SYNOPSIS diff --git a/doc/FcNameRegisterObjectTypes.3 b/doc/FcNameRegisterObjectTypes.3 index ce9ec5b..0b57706 100644 --- a/doc/FcNameRegisterObjectTypes.3 +++ b/doc/FcNameRegisterObjectTypes.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameRegisterObjectTypes" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameRegisterObjectTypes" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameRegisterObjectTypes \- Register object types .SH SYNOPSIS diff --git a/doc/FcNameUnparse.3 b/doc/FcNameUnparse.3 index 6dd1411..a203b8b 100644 --- a/doc/FcNameUnparse.3 +++ b/doc/FcNameUnparse.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameUnparse" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameUnparse" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameUnparse \- Convert a pattern back into a string that can be parsed .SH SYNOPSIS diff --git a/doc/FcNameUnregisterConstants.3 b/doc/FcNameUnregisterConstants.3 index 7a7c8f4..4d7cdfa 100644 --- a/doc/FcNameUnregisterConstants.3 +++ b/doc/FcNameUnregisterConstants.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameUnregisterConstants" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameUnregisterConstants" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameUnregisterConstants \- Unregister symbolic constants .SH SYNOPSIS diff --git a/doc/FcNameUnregisterObjectTypes.3 b/doc/FcNameUnregisterObjectTypes.3 index 3341e83..bdddb00 100644 --- a/doc/FcNameUnregisterObjectTypes.3 +++ b/doc/FcNameUnregisterObjectTypes.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcNameUnregisterObjectTypes" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcNameUnregisterObjectTypes" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcNameUnregisterObjectTypes \- Unregister object types .SH SYNOPSIS diff --git a/doc/FcObjectSetAdd.3 b/doc/FcObjectSetAdd.3 index fe2a5ee..28210c8 100644 --- a/doc/FcObjectSetAdd.3 +++ b/doc/FcObjectSetAdd.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcObjectSetAdd" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcObjectSetAdd" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcObjectSetAdd \- Add to an object set .SH SYNOPSIS diff --git a/doc/FcObjectSetBuild.3 b/doc/FcObjectSetBuild.3 index e4edb0b..abcb789 100644 --- a/doc/FcObjectSetBuild.3 +++ b/doc/FcObjectSetBuild.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcObjectSetBuild" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcObjectSetBuild" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcObjectSetBuild, FcObjectSetVaBuild, FcObjectSetVapBuild \- Build object set from args .SH SYNOPSIS diff --git a/doc/FcObjectSetCreate.3 b/doc/FcObjectSetCreate.3 index 2dec2c6..8a2c29b 100644 --- a/doc/FcObjectSetCreate.3 +++ b/doc/FcObjectSetCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcObjectSetCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcObjectSetCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcObjectSetCreate \- Create an object set .SH SYNOPSIS diff --git a/doc/FcObjectSetDestroy.3 b/doc/FcObjectSetDestroy.3 index 1e54be0..20dc60b 100644 --- a/doc/FcObjectSetDestroy.3 +++ b/doc/FcObjectSetDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcObjectSetDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcObjectSetDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcObjectSetDestroy \- Destroy an object set .SH SYNOPSIS diff --git a/doc/FcPatternAdd-Type.3 b/doc/FcPatternAdd-Type.3 index 068f6b5..98fc8f9 100644 --- a/doc/FcPatternAdd-Type.3 +++ b/doc/FcPatternAdd-Type.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternAdd-Type" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternAdd-Type" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternAddInteger, FcPatternAddDouble, FcPatternAddString, FcPatternAddMatrix, FcPatternAddCharSet, FcPatternAddBool, FcPatternAddFTFace, FcPatternAddLangSet, FcPatternAddRange \- Add a typed value to a pattern .SH SYNOPSIS diff --git a/doc/FcPatternAdd.3 b/doc/FcPatternAdd.3 index ae92054..01d869e 100644 --- a/doc/FcPatternAdd.3 +++ b/doc/FcPatternAdd.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternAdd" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternAdd" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternAdd \- Add a value to a pattern .SH SYNOPSIS diff --git a/doc/FcPatternAddWeak.3 b/doc/FcPatternAddWeak.3 index d5b3856..61facda 100644 --- a/doc/FcPatternAddWeak.3 +++ b/doc/FcPatternAddWeak.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternAddWeak" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternAddWeak" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternAddWeak \- Add a value to a pattern with weak binding .SH SYNOPSIS diff --git a/doc/FcPatternBuild.3 b/doc/FcPatternBuild.3 index 7b8eaa7..15adc06 100644 --- a/doc/FcPatternBuild.3 +++ b/doc/FcPatternBuild.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternBuild" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternBuild" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternBuild, FcPatternVaBuild, FcPatternVapBuild \- Create patterns from arguments .SH SYNOPSIS diff --git a/doc/FcPatternCreate.3 b/doc/FcPatternCreate.3 index 4e2acad..a20c11f 100644 --- a/doc/FcPatternCreate.3 +++ b/doc/FcPatternCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternCreate \- Create a pattern .SH SYNOPSIS diff --git a/doc/FcPatternDel.3 b/doc/FcPatternDel.3 index b3fa828..37b849f 100644 --- a/doc/FcPatternDel.3 +++ b/doc/FcPatternDel.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternDel" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternDel" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternDel \- Delete a property from a pattern .SH SYNOPSIS diff --git a/doc/FcPatternDestroy.3 b/doc/FcPatternDestroy.3 index 618bfd4..4753f20 100644 --- a/doc/FcPatternDestroy.3 +++ b/doc/FcPatternDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternDestroy \- Destroy a pattern .SH SYNOPSIS diff --git a/doc/FcPatternDuplicate.3 b/doc/FcPatternDuplicate.3 index 55dd729..0047ebc 100644 --- a/doc/FcPatternDuplicate.3 +++ b/doc/FcPatternDuplicate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternDuplicate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternDuplicate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternDuplicate \- Copy a pattern .SH SYNOPSIS diff --git a/doc/FcPatternEqual.3 b/doc/FcPatternEqual.3 index 2afd20b..b001a04 100644 --- a/doc/FcPatternEqual.3 +++ b/doc/FcPatternEqual.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternEqual" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternEqual" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternEqual \- Compare patterns .SH SYNOPSIS diff --git a/doc/FcPatternEqualSubset.3 b/doc/FcPatternEqualSubset.3 index 3cc95f5..5346a4b 100644 --- a/doc/FcPatternEqualSubset.3 +++ b/doc/FcPatternEqualSubset.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternEqualSubset" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternEqualSubset" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternEqualSubset \- Compare portions of patterns .SH SYNOPSIS diff --git a/doc/FcPatternFilter.3 b/doc/FcPatternFilter.3 index e3f3531..9afa876 100644 --- a/doc/FcPatternFilter.3 +++ b/doc/FcPatternFilter.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternFilter" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternFilter" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternFilter \- Filter the objects of pattern .SH SYNOPSIS diff --git a/doc/FcPatternFindIter.3 b/doc/FcPatternFindIter.3 new file mode 100644 index 0000000..2a8f55e --- /dev/null +++ b/doc/FcPatternFindIter.3 @@ -0,0 +1,17 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternFindIter" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternFindIter \- Set the iterator to point to the object in the pattern +.SH SYNOPSIS +.nf +\fB#include +.sp +FcBool FcPatternFindIter (const FcPattern *\fIp\fB, FcPatternIter *\fIiter\fB, const char *\fIobject\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Set \fIiter\fR to point to \fIobject\fR in +\fIp\fR if any and returns FcTrue. returns FcFalse otherwise. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternFormat.3 b/doc/FcPatternFormat.3 index 908a0a1..bd3c89a 100644 --- a/doc/FcPatternFormat.3 +++ b/doc/FcPatternFormat.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternFormat" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternFormat" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternFormat \- Format a pattern into a string according to a format specifier .SH SYNOPSIS diff --git a/doc/FcPatternGet-Type.3 b/doc/FcPatternGet-Type.3 index 9f7b38c..f6d01c2 100644 --- a/doc/FcPatternGet-Type.3 +++ b/doc/FcPatternGet-Type.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternGet-Type" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternGet-Type" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternGetInteger, FcPatternGetDouble, FcPatternGetString, FcPatternGetMatrix, FcPatternGetCharSet, FcPatternGetBool, FcPatternGetFTFace, FcPatternGetLangSet, FcPatternGetRange \- Return a typed value from a pattern .SH SYNOPSIS diff --git a/doc/FcPatternGet.3 b/doc/FcPatternGet.3 index ddcd7fd..9f2af8d 100644 --- a/doc/FcPatternGet.3 +++ b/doc/FcPatternGet.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternGet" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternGet" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternGet \- Return a value from a pattern .SH SYNOPSIS diff --git a/doc/FcPatternGetWithBinding.3 b/doc/FcPatternGetWithBinding.3 index b881b5c..9b7c656 100644 --- a/doc/FcPatternGetWithBinding.3 +++ b/doc/FcPatternGetWithBinding.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternGetWithBinding" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternGetWithBinding" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternGetWithBinding \- Return a value with binding from a pattern .SH SYNOPSIS diff --git a/doc/FcPatternHash.3 b/doc/FcPatternHash.3 index 473c7e4..ffff86d 100644 --- a/doc/FcPatternHash.3 +++ b/doc/FcPatternHash.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternHash" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternHash" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternHash \- Compute a pattern hash value .SH SYNOPSIS diff --git a/doc/FcPatternIterEqual.3 b/doc/FcPatternIterEqual.3 new file mode 100644 index 0000000..629a54f --- /dev/null +++ b/doc/FcPatternIterEqual.3 @@ -0,0 +1,17 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternIterEqual" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternIterEqual \- Compare iterators +.SH SYNOPSIS +.nf +\fB#include +.sp +FcBool FcPatternIterEqual (const FcPattern *\fIp1\fB, FcPatternIter *\fIi1\fB, const FcPattern *\fIp2\fB, FcPatternIter *\fIi2\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Return FcTrue if both \fIi1\fR and \fIi2\fR +point to same object and contains same values. return FcFalse otherwise. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternIterGetObject.3 b/doc/FcPatternIterGetObject.3 new file mode 100644 index 0000000..564f94b --- /dev/null +++ b/doc/FcPatternIterGetObject.3 @@ -0,0 +1,18 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternIterGetObject" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternIterGetObject \- Returns an object name which the iterator point to +.SH SYNOPSIS +.nf +\fB#include +.sp +const char * FcPatternIterGetObject (const FcPattern *\fIp\fB, FcPatternIter *\fIiter\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Returns an object name in \fIp\fR which +\fIiter\fR point to. returns NULL if +\fIiter\fR isn't valid. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternIterGetValue.3 b/doc/FcPatternIterGetValue.3 new file mode 100644 index 0000000..d8f32cc --- /dev/null +++ b/doc/FcPatternIterGetValue.3 @@ -0,0 +1,20 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternIterGetValue" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternIterGetValue \- Returns a value which the iterator point to +.SH SYNOPSIS +.nf +\fB#include +.sp +FcResult FcPatternIterGetValue (const FcPattern *\fIp\fB, FcPatternIter *\fIiter\fB, int\fIid\fB, FcValue *\fIv\fB, FcValueBinding *\fIb\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Returns in \fIv\fR the \fIid\fR\&'th value +which \fIiter\fR point to. also binding to \fIb\fR +if given. +The value returned is not a copy, but rather refers to the data stored +within the pattern directly. Applications must not free this value. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternIterIsValid.3 b/doc/FcPatternIterIsValid.3 new file mode 100644 index 0000000..a5558f9 --- /dev/null +++ b/doc/FcPatternIterIsValid.3 @@ -0,0 +1,17 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternIterIsValid" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternIterIsValid \- Check whether the iterator is valid or not +.SH SYNOPSIS +.nf +\fB#include +.sp +FcBool FcPatternIterIsValid (const FcPattern *\fIp\fB, FcPatternIter :\fIiter\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Returns FcTrue if \fIiter\fR point to the valid entry +in \fIp\fR\&. returns FcFalse otherwise. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternIterNext.3 b/doc/FcPatternIterNext.3 new file mode 100644 index 0000000..ab4d9f9 --- /dev/null +++ b/doc/FcPatternIterNext.3 @@ -0,0 +1,18 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternIterNext" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternIterNext \- +.SH SYNOPSIS +.nf +\fB#include +.sp +FcBool FcPatternIterNext (const FcPattern *\fIp\fB, FcPatternIter *\fIiter\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Set \fIiter\fR to point to the next object in \fIp\fR +and returns FcTrue if \fIiter\fR has been changed to the next object. +returns FcFalse otherwise. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternIterStart.3 b/doc/FcPatternIterStart.3 new file mode 100644 index 0000000..8eedd78 --- /dev/null +++ b/doc/FcPatternIterStart.3 @@ -0,0 +1,18 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternIterStart" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternIterStart \- Initialize the iterator with the first iterator in the pattern +.SH SYNOPSIS +.nf +\fB#include +.sp +void FcPatternIterStart (const FcPattern *\fIp\fB, FcPatternIter *\fIiter\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Initialize \fIiter\fR with the first iterator in \fIp\fR\&. +If there are no objects in \fIp\fR, \fIiter\fR +will not have any valid data. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternIterValueCount.3 b/doc/FcPatternIterValueCount.3 new file mode 100644 index 0000000..db108a1 --- /dev/null +++ b/doc/FcPatternIterValueCount.3 @@ -0,0 +1,17 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternIterValueCount" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternIterValueCount \- Returns the number of the values which the iterator point to +.SH SYNOPSIS +.nf +\fB#include +.sp +int FcPatternIterValueCount (const FcPattern *\fIp\fB, FcPatternIter *\fIiter\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Returns the number of the values in the object which \fIiter\fR +point to. if \fIiter\fR isn't valid, returns 0. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternObjectCount.3 b/doc/FcPatternObjectCount.3 new file mode 100644 index 0000000..9fa71a1 --- /dev/null +++ b/doc/FcPatternObjectCount.3 @@ -0,0 +1,16 @@ +.\" auto-generated by docbook2man-spec from docbook-utils package +.TH "FcPatternObjectCount" "3" "30 8月 2018" "Fontconfig 2.13.1" "" +.SH NAME +FcPatternObjectCount \- Returns the number of the object +.SH SYNOPSIS +.nf +\fB#include +.sp +int FcPatternObjectCount (const FcPattern *\fIp\fB); +.fi\fR +.SH "DESCRIPTION" +.PP +Returns the number of the object \fIp\fR has. +.SH "SINCE" +.PP +version 2.13.1 diff --git a/doc/FcPatternPrint.3 b/doc/FcPatternPrint.3 index 8ed60f8..7396e76 100644 --- a/doc/FcPatternPrint.3 +++ b/doc/FcPatternPrint.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternPrint" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternPrint" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternPrint \- Print a pattern for debugging .SH SYNOPSIS diff --git a/doc/FcPatternReference.3 b/doc/FcPatternReference.3 index 27b9c66..ae25fb9 100644 --- a/doc/FcPatternReference.3 +++ b/doc/FcPatternReference.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternReference" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternReference" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternReference \- Increment pattern reference count .SH SYNOPSIS diff --git a/doc/FcPatternRemove.3 b/doc/FcPatternRemove.3 index 7b9f53a..5fe9442 100644 --- a/doc/FcPatternRemove.3 +++ b/doc/FcPatternRemove.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcPatternRemove" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcPatternRemove" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcPatternRemove \- Remove one object of the specified type from the pattern .SH SYNOPSIS diff --git a/doc/FcRangeCopy.3 b/doc/FcRangeCopy.3 index 8373003..29562f4 100644 --- a/doc/FcRangeCopy.3 +++ b/doc/FcRangeCopy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcRangeCopy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcRangeCopy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcRangeCopy \- Copy a range object .SH SYNOPSIS diff --git a/doc/FcRangeCreateDouble.3 b/doc/FcRangeCreateDouble.3 index ca8646d..e9777fa 100644 --- a/doc/FcRangeCreateDouble.3 +++ b/doc/FcRangeCreateDouble.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcRangeCreateDouble" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcRangeCreateDouble" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcRangeCreateDouble \- create a range object for double .SH SYNOPSIS diff --git a/doc/FcRangeCreateInteger.3 b/doc/FcRangeCreateInteger.3 index 9ea1793..8e5f0b9 100644 --- a/doc/FcRangeCreateInteger.3 +++ b/doc/FcRangeCreateInteger.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcRangeCreateInteger" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcRangeCreateInteger" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcRangeCreateInteger \- create a range object for integer .SH SYNOPSIS diff --git a/doc/FcRangeDestroy.3 b/doc/FcRangeDestroy.3 index 7a1a0b3..f0a2583 100644 --- a/doc/FcRangeDestroy.3 +++ b/doc/FcRangeDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcRangeDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcRangeDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcRangeDestroy \- destroy a range object .SH SYNOPSIS diff --git a/doc/FcRangeGetDouble.3 b/doc/FcRangeGetDouble.3 index 60f5e94..80ee398 100644 --- a/doc/FcRangeGetDouble.3 +++ b/doc/FcRangeGetDouble.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcRangeGetDouble" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcRangeGetDouble" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcRangeGetDouble \- Get the range in double .SH SYNOPSIS diff --git a/doc/FcStrBasename.3 b/doc/FcStrBasename.3 index 087f326..a736554 100644 --- a/doc/FcStrBasename.3 +++ b/doc/FcStrBasename.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrBasename" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrBasename" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrBasename \- last component of filename .SH SYNOPSIS diff --git a/doc/FcStrCmp.3 b/doc/FcStrCmp.3 index f5dbd8d..5256ec1 100644 --- a/doc/FcStrCmp.3 +++ b/doc/FcStrCmp.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrCmp" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrCmp" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrCmp \- compare UTF-8 strings .SH SYNOPSIS diff --git a/doc/FcStrCmpIgnoreCase.3 b/doc/FcStrCmpIgnoreCase.3 index 4afc471..a6ae228 100644 --- a/doc/FcStrCmpIgnoreCase.3 +++ b/doc/FcStrCmpIgnoreCase.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrCmpIgnoreCase" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrCmpIgnoreCase" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrCmpIgnoreCase \- compare UTF-8 strings ignoring case .SH SYNOPSIS diff --git a/doc/FcStrCopy.3 b/doc/FcStrCopy.3 index 449b7f2..114add2 100644 --- a/doc/FcStrCopy.3 +++ b/doc/FcStrCopy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrCopy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrCopy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrCopy \- duplicate a string .SH SYNOPSIS diff --git a/doc/FcStrCopyFilename.3 b/doc/FcStrCopyFilename.3 index bf45004..d22155a 100644 --- a/doc/FcStrCopyFilename.3 +++ b/doc/FcStrCopyFilename.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrCopyFilename" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrCopyFilename" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrCopyFilename \- create a complete path from a filename .SH SYNOPSIS diff --git a/doc/FcStrDirname.3 b/doc/FcStrDirname.3 index 631f0c0..4285304 100644 --- a/doc/FcStrDirname.3 +++ b/doc/FcStrDirname.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrDirname" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrDirname" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrDirname \- directory part of filename .SH SYNOPSIS diff --git a/doc/FcStrDowncase.3 b/doc/FcStrDowncase.3 index 391c246..10460f6 100644 --- a/doc/FcStrDowncase.3 +++ b/doc/FcStrDowncase.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrDowncase" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrDowncase" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrDowncase \- create a lower case translation of a string .SH SYNOPSIS diff --git a/doc/FcStrFree.3 b/doc/FcStrFree.3 index dc4d253..a04fe10 100644 --- a/doc/FcStrFree.3 +++ b/doc/FcStrFree.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrFree" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrFree" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrFree \- free a string .SH SYNOPSIS diff --git a/doc/FcStrListCreate.3 b/doc/FcStrListCreate.3 index c3551fd..6e58c8c 100644 --- a/doc/FcStrListCreate.3 +++ b/doc/FcStrListCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrListCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrListCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrListCreate \- create a string iterator .SH SYNOPSIS diff --git a/doc/FcStrListDone.3 b/doc/FcStrListDone.3 index 8d6a58e..e9ed958 100644 --- a/doc/FcStrListDone.3 +++ b/doc/FcStrListDone.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrListDone" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrListDone" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrListDone \- destroy a string iterator .SH SYNOPSIS diff --git a/doc/FcStrListFirst.3 b/doc/FcStrListFirst.3 index a7d907a..a1d7ce8 100644 --- a/doc/FcStrListFirst.3 +++ b/doc/FcStrListFirst.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrListFirst" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrListFirst" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrListFirst \- get first string in iteration .SH SYNOPSIS diff --git a/doc/FcStrListNext.3 b/doc/FcStrListNext.3 index e1542ba..40a7709 100644 --- a/doc/FcStrListNext.3 +++ b/doc/FcStrListNext.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrListNext" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrListNext" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrListNext \- get next string in iteration .SH SYNOPSIS diff --git a/doc/FcStrPlus.3 b/doc/FcStrPlus.3 index b2f5b38..4e0ca5a 100644 --- a/doc/FcStrPlus.3 +++ b/doc/FcStrPlus.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrPlus" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrPlus" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrPlus \- concatenate two strings .SH SYNOPSIS diff --git a/doc/FcStrSetAdd.3 b/doc/FcStrSetAdd.3 index 655e0cc..707009f 100644 --- a/doc/FcStrSetAdd.3 +++ b/doc/FcStrSetAdd.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrSetAdd" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrSetAdd" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrSetAdd \- add to a string set .SH SYNOPSIS diff --git a/doc/FcStrSetAddFilename.3 b/doc/FcStrSetAddFilename.3 index cac1aeb..dfbdc8f 100644 --- a/doc/FcStrSetAddFilename.3 +++ b/doc/FcStrSetAddFilename.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrSetAddFilename" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrSetAddFilename" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrSetAddFilename \- add a filename to a string set .SH SYNOPSIS diff --git a/doc/FcStrSetCreate.3 b/doc/FcStrSetCreate.3 index 8d0d43c..01da3fe 100644 --- a/doc/FcStrSetCreate.3 +++ b/doc/FcStrSetCreate.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrSetCreate" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrSetCreate" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrSetCreate \- create a string set .SH SYNOPSIS diff --git a/doc/FcStrSetDel.3 b/doc/FcStrSetDel.3 index 0aa5a17..10e3d93 100644 --- a/doc/FcStrSetDel.3 +++ b/doc/FcStrSetDel.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrSetDel" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrSetDel" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrSetDel \- delete from a string set .SH SYNOPSIS diff --git a/doc/FcStrSetDestroy.3 b/doc/FcStrSetDestroy.3 index fcfbc4a..32984fd 100644 --- a/doc/FcStrSetDestroy.3 +++ b/doc/FcStrSetDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrSetDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrSetDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrSetDestroy \- destroy a string set .SH SYNOPSIS diff --git a/doc/FcStrSetEqual.3 b/doc/FcStrSetEqual.3 index b8c9f71..2caceb5 100644 --- a/doc/FcStrSetEqual.3 +++ b/doc/FcStrSetEqual.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrSetEqual" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrSetEqual" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrSetEqual \- check sets for equality .SH SYNOPSIS diff --git a/doc/FcStrSetMember.3 b/doc/FcStrSetMember.3 index 4c28dba..2d664a2 100644 --- a/doc/FcStrSetMember.3 +++ b/doc/FcStrSetMember.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrSetMember" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrSetMember" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrSetMember \- check set for membership .SH SYNOPSIS diff --git a/doc/FcStrStr.3 b/doc/FcStrStr.3 index df9d168..5b5d920 100644 --- a/doc/FcStrStr.3 +++ b/doc/FcStrStr.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrStr" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrStr" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrStr \- locate UTF-8 substring .SH SYNOPSIS diff --git a/doc/FcStrStrIgnoreCase.3 b/doc/FcStrStrIgnoreCase.3 index eec3127..c9f9797 100644 --- a/doc/FcStrStrIgnoreCase.3 +++ b/doc/FcStrStrIgnoreCase.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcStrStrIgnoreCase" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcStrStrIgnoreCase" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcStrStrIgnoreCase \- locate UTF-8 substring ignoring ASCII case .SH SYNOPSIS diff --git a/doc/FcToLower.3 b/doc/FcToLower.3 index 640dc56..e940f83 100644 --- a/doc/FcToLower.3 +++ b/doc/FcToLower.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcToLower" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcToLower" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcToLower \- convert upper case ASCII to lower case .SH SYNOPSIS diff --git a/doc/FcUcs4ToUtf8.3 b/doc/FcUcs4ToUtf8.3 index e19eb14..963213a 100644 --- a/doc/FcUcs4ToUtf8.3 +++ b/doc/FcUcs4ToUtf8.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcUcs4ToUtf8" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcUcs4ToUtf8" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcUcs4ToUtf8 \- convert UCS4 to UTF-8 .SH SYNOPSIS diff --git a/doc/FcUtf16Len.3 b/doc/FcUtf16Len.3 index a6f8fef..ea4b871 100644 --- a/doc/FcUtf16Len.3 +++ b/doc/FcUtf16Len.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcUtf16Len" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcUtf16Len" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcUtf16Len \- count UTF-16 encoded chars .SH SYNOPSIS diff --git a/doc/FcUtf16ToUcs4.3 b/doc/FcUtf16ToUcs4.3 index 3087e2e..4408953 100644 --- a/doc/FcUtf16ToUcs4.3 +++ b/doc/FcUtf16ToUcs4.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcUtf16ToUcs4" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcUtf16ToUcs4" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcUtf16ToUcs4 \- convert UTF-16 to UCS4 .SH SYNOPSIS diff --git a/doc/FcUtf8Len.3 b/doc/FcUtf8Len.3 index fe0af07..7ab7701 100644 --- a/doc/FcUtf8Len.3 +++ b/doc/FcUtf8Len.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcUtf8Len" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcUtf8Len" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcUtf8Len \- count UTF-8 encoded chars .SH SYNOPSIS diff --git a/doc/FcUtf8ToUcs4.3 b/doc/FcUtf8ToUcs4.3 index 98cd3c4..69bf3ee 100644 --- a/doc/FcUtf8ToUcs4.3 +++ b/doc/FcUtf8ToUcs4.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcUtf8ToUcs4" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcUtf8ToUcs4" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcUtf8ToUcs4 \- convert UTF-8 to UCS4 .SH SYNOPSIS diff --git a/doc/FcValueDestroy.3 b/doc/FcValueDestroy.3 index 7dded44..212badc 100644 --- a/doc/FcValueDestroy.3 +++ b/doc/FcValueDestroy.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcValueDestroy" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcValueDestroy" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcValueDestroy \- Free a value .SH SYNOPSIS diff --git a/doc/FcValueEqual.3 b/doc/FcValueEqual.3 index 206c92c..3813364 100644 --- a/doc/FcValueEqual.3 +++ b/doc/FcValueEqual.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcValueEqual" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcValueEqual" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcValueEqual \- Test two values for equality .SH SYNOPSIS diff --git a/doc/FcValuePrint.3 b/doc/FcValuePrint.3 index 413bcbe..a812cc3 100644 --- a/doc/FcValuePrint.3 +++ b/doc/FcValuePrint.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcValuePrint" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcValuePrint" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcValuePrint \- Print a value to stdout .SH SYNOPSIS diff --git a/doc/FcValueSave.3 b/doc/FcValueSave.3 index 38d3254..41c5ac2 100644 --- a/doc/FcValueSave.3 +++ b/doc/FcValueSave.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcValueSave" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcValueSave" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcValueSave \- Copy a value .SH SYNOPSIS diff --git a/doc/FcWeightFromOpenType.3 b/doc/FcWeightFromOpenType.3 index 03b1346..b7d2f94 100644 --- a/doc/FcWeightFromOpenType.3 +++ b/doc/FcWeightFromOpenType.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcWeightFromOpenType" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcWeightFromOpenType" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcWeightFromOpenType \- Convert from OpenType weight values to fontconfig ones .SH SYNOPSIS diff --git a/doc/FcWeightFromOpenTypeDouble.3 b/doc/FcWeightFromOpenTypeDouble.3 index 8b6ec75..3c53821 100644 --- a/doc/FcWeightFromOpenTypeDouble.3 +++ b/doc/FcWeightFromOpenTypeDouble.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcWeightFromOpenTypeDouble" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcWeightFromOpenTypeDouble" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcWeightFromOpenTypeDouble \- Convert from OpenType weight values to fontconfig ones .SH SYNOPSIS diff --git a/doc/FcWeightToOpenType.3 b/doc/FcWeightToOpenType.3 index 6476b84..3954c5c 100644 --- a/doc/FcWeightToOpenType.3 +++ b/doc/FcWeightToOpenType.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcWeightToOpenType" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcWeightToOpenType" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcWeightToOpenType \- Convert from fontconfig weight values to OpenType ones .SH SYNOPSIS diff --git a/doc/FcWeightToOpenTypeDouble.3 b/doc/FcWeightToOpenTypeDouble.3 index e74b5e2..90c69e1 100644 --- a/doc/FcWeightToOpenTypeDouble.3 +++ b/doc/FcWeightToOpenTypeDouble.3 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FcWeightToOpenTypeDouble" "3" "06 3月 2018" "Fontconfig 2.13.0" "" +.TH "FcWeightToOpenTypeDouble" "3" "30 8月 2018" "Fontconfig 2.13.1" "" .SH NAME FcWeightToOpenTypeDouble \- Convert from fontconfig weight values to OpenType ones .SH SYNOPSIS diff --git a/doc/Makefile.in b/doc/Makefile.in index f07dfbe..b8ae0b4 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -167,7 +167,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/edit-sgml.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -489,6 +490,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -761,8 +764,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -795,7 +798,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit-sgml.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit-sgml.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -1120,7 +1129,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS) fi; \ $$success || exit 1 -check-TESTS: +check-TESTS: $(check_SCRIPTS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @@ -1163,7 +1172,10 @@ check-missing-doc.log: check-missing-doc @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1246,7 +1258,7 @@ clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/edit-sgml.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -1292,7 +1304,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/edit-sgml.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -1315,14 +1327,14 @@ uninstall-man: uninstall-man3 uninstall-man5 .MAKE: all check check-am install install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-TESTS \ - check-am clean clean-generic clean-libtool clean-local \ - clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am \ - install-docDATA install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am \ +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-TESTS check-am clean clean-generic clean-libtool \ + clean-local clean-noinstPROGRAMS cscopelist-am ctags ctags-am \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-docDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ install-htmldocDATA install-info install-info-am install-man \ install-man3 install-man5 install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ diff --git a/doc/fccache.fncs b/doc/fccache.fncs index 17e74fe..972b642 100644 --- a/doc/fccache.fncs +++ b/doc/fccache.fncs @@ -92,7 +92,7 @@ to config. @FUNC@ FcDirCacheCreateUUID @TYPE1@ FcChar8 * @ARG1@ dir @TYPE2@ FcBool @ARG2@ force -@TYPE3@ FcConfig @ARG3@ config +@TYPE3@ FcConfig * @ARG3@ config @PURPOSE@ Create .uuid file at a directory @DESC@ This is to create .uuid file containing an UUID at a font directory of @@ -102,3 +102,13 @@ the cache filename if available. @SINCE@ 2.12.92 @@ +@RET@ FcBool +@FUNC@ FcDirCacheDeleteUUID +@TYPE1@ const FcChar8 * @ARG1@ dir +@TYPE2@ FcConfig * @ARG2@ config +@PURPOSE@ Delete .uuid file +@DESC@ +This is to delete .uuid file containing an UUID at a font directory of +dir. +@SINCE@ 2.13.1 +@@ diff --git a/doc/fccache.sgml b/doc/fccache.sgml index 729401a..e29738c 100644 --- a/doc/fccache.sgml +++ b/doc/fccache.sgml @@ -406,7 +406,7 @@ to config. FcBool FcDirCacheCreateUUID FcChar8 *dir FcBoolforce - FcConfigconfig + FcConfig *config @@ -422,3 +422,58 @@ the cache filename if available. version 2.12.92 + + + + FcDirCacheDeleteUUID + 3 + Fontconfig &version; + + + FcDirCacheDeleteUUID + Delete .uuid file + + + + +#include <fontconfig/fontconfig.h> + + + FcBool FcDirCacheDeleteUUID + const FcChar8 *dir + FcConfig *config + + + + Description + +This is to delete .uuid file containing an UUID at a font directory of +dir. + + + Since + version 2.13.1 + + diff --git a/doc/fcpattern.fncs b/doc/fcpattern.fncs index 928f0bc..3b13c22 100644 --- a/doc/fcpattern.fncs +++ b/doc/fcpattern.fncs @@ -57,6 +57,15 @@ Decrement the pattern reference count. If all references are gone, destroys the pattern, in the process destroying all related values. @@ +@RET@ int +@FUNC@ FcPatternObjectCount +@TYPE1@ const FcPattern * @ARG1@ p +@PURPOSE@ Returns the number of the object +@DESC@ +Returns the number of the object p has. +@SINCE@ 2.13.1 +@@ + @RET@ FcBool @FUNC@ FcPatternEqual @TYPE1@ const FcPattern * @ARG1@ pa @@ -383,7 +392,107 @@ whether the property existed or not. Removes the value associated with the property `object' at position `id', returning whether the property existed and had a value at that position or not. @@ - + +@RET@ void +@FUNC@ FcPatternIterStart +@TYPE1@ const FcPattern * @ARG1@ p +@TYPE2@ FcPatternIter * @ARG2@ iter +@PURPOSE@ Initialize the iterator with the first iterator in the pattern +@DESC@ +Initialize iter with the first iterator in p. +If there are no objects in p, iter +will not have any valid data. +@SINCE@ 2.13.1 +@@ + +@RET@ FcBool +@FUNC@ FcPatternIterNext +@TYPE1@ const FcPattern * @ARG1@ p +@TYPE2@ FcPatternIter * @ARG2@ iter +@PURPUSE@ Set the iterator to point to the next object in the pattern +@DESC@ +Set iter to point to the next object in p +and returns FcTrue if iter has been changed to the next object. +returns FcFalse otherwise. +@SINCE@ 2.13.1 +@@ + +@RET@ FcBool +@FUNC@ FcPatternIterEqual +@TYPE1@ const FcPattern * @ARG1@ p1 +@TYPE2@ FcPatternIter * @ARG2@ i1 +@TYPE3@ const FcPattern * @ARG3@ p2 +@TYPE4@ FcPatternIter * @ARG4@ i2 +@PURPOSE@ Compare iterators +@DESC@ +Return FcTrue if both i1 and i2 +point to same object and contains same values. return FcFalse otherwise. +@SINCE@ 2.13.1 +@@ + +@RET@ FcBool +@FUNC@ FcPatternFindIter +@TYPE1@ const FcPattern * @ARG1@ p +@TYPE2@ FcPatternIter * @ARG2@ iter +@TYPE3@ const char * @ARG3@ object +@PURPOSE@ Set the iterator to point to the object in the pattern +@DESC@ +Set iter to point to object in +p if any and returns FcTrue. returns FcFalse otherwise. +@SINCE@ 2.13.1 +@@ + +@RET@ FcBool +@FUNC@ FcPatternIterIsValid +@TYPE1@ const FcPattern * @ARG1@ p +@TYPE2@ FcPatternIter : @ARG2@ iter +@PURPOSE@ Check whether the iterator is valid or not +@DESC@ +Returns FcTrue if iter point to the valid entry +in p. returns FcFalse otherwise. +@SINCE@ 2.13.1 +@@ + +@RET@ const char * +@FUNC@ FcPatternIterGetObject +@TYPE1@ const FcPattern * @ARG1@ p +@TYPE2@ FcPatternIter * @ARG2@ iter +@PURPOSE@ Returns an object name which the iterator point to +@DESC@ +Returns an object name in p which +iter point to. returns NULL if +iter isn't valid. +@SINCE@ 2.13.1 +@@ + +@RET@ int +@FUNC@ FcPatternIterValueCount +@TYPE1@ const FcPattern * @ARG1@ p +@TYPE2@ FcPatternIter * @ARG2@ iter +@PURPOSE@ Returns the number of the values which the iterator point to +@DESC@ +Returns the number of the values in the object which iter +point to. if iter isn't valid, returns 0. +@SINCE@ 2.13.1 +@@ + +@RET@ FcResult +@FUNC@ FcPatternIterGetValue +@TYPE1@ const FcPattern * @ARG1@ p +@TYPE2@ FcPatternIter * @ARG2@ iter +@TYPE3@ int @ARG3@ id +@TYPE4@ FcValue * @ARG4@ v +@TYPE5@ FcValueBinding * @ARG5@ b +@PURPOSE@ Returns a value which the iterator point to +@DESC@ +Returns in v the id'th value +which iter point to. also binding to b +if given. +The value returned is not a copy, but rather refers to the data stored +within the pattern directly. Applications must not free this value. +@SINCE@ 2.13.1 +@@ + @RET@ void @FUNC@ FcPatternPrint @TYPE1@ const FcPattern * @ARG1@ p diff --git a/doc/fcpattern.sgml b/doc/fcpattern.sgml index 1bd0216..0093645 100644 --- a/doc/fcpattern.sgml +++ b/doc/fcpattern.sgml @@ -225,6 +225,59 @@ the pattern, in the process destroying all related values. TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --> + + + FcPatternObjectCount + 3 + Fontconfig &version; + + + FcPatternObjectCount + Returns the number of the object + + + + +#include <fontconfig/fontconfig.h> + + + int FcPatternObjectCount + const FcPattern *p + + + + Description + +Returns the number of the object p has. + + + Since + version 2.13.1 + + + FcPatternEqual @@ -1094,6 +1147,458 @@ whether the property existed and had a value at that position or not. TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --> + + + FcPatternIterStart + 3 + Fontconfig &version; + + + FcPatternIterStart + Initialize the iterator with the first iterator in the pattern + + + + +#include <fontconfig/fontconfig.h> + + + void FcPatternIterStart + const FcPattern *p + FcPatternIter *iter + + + + Description + +Initialize iter with the first iterator in p. +If there are no objects in p, iter +will not have any valid data. + + + Since + version 2.13.1 + + + + + + FcPatternIterNext + 3 + Fontconfig &version; + + + FcPatternIterNext + + + + + +#include <fontconfig/fontconfig.h> + + + FcBool FcPatternIterNext + const FcPattern *p + FcPatternIter *iter + + + + Description + +Set iter to point to the next object in p +and returns FcTrue if iter has been changed to the next object. +returns FcFalse otherwise. + + + Since + version 2.13.1 + + + + + + FcPatternIterEqual + 3 + Fontconfig &version; + + + FcPatternIterEqual + Compare iterators + + + + +#include <fontconfig/fontconfig.h> + + + FcBool FcPatternIterEqual + const FcPattern *p1 + FcPatternIter *i1 + const FcPattern *p2 + FcPatternIter *i2 + + + + Description + +Return FcTrue if both i1 and i2 +point to same object and contains same values. return FcFalse otherwise. + + + Since + version 2.13.1 + + + + + + FcPatternFindIter + 3 + Fontconfig &version; + + + FcPatternFindIter + Set the iterator to point to the object in the pattern + + + + +#include <fontconfig/fontconfig.h> + + + FcBool FcPatternFindIter + const FcPattern *p + FcPatternIter *iter + const char *object + + + + Description + +Set iter to point to object in +p if any and returns FcTrue. returns FcFalse otherwise. + + + Since + version 2.13.1 + + + + + + FcPatternIterIsValid + 3 + Fontconfig &version; + + + FcPatternIterIsValid + Check whether the iterator is valid or not + + + + +#include <fontconfig/fontconfig.h> + + + FcBool FcPatternIterIsValid + const FcPattern *p + FcPatternIter :iter + + + + Description + +Returns FcTrue if iter point to the valid entry +in p. returns FcFalse otherwise. + + + Since + version 2.13.1 + + + + + + FcPatternIterGetObject + 3 + Fontconfig &version; + + + FcPatternIterGetObject + Returns an object name which the iterator point to + + + + +#include <fontconfig/fontconfig.h> + + + const char * FcPatternIterGetObject + const FcPattern *p + FcPatternIter *iter + + + + Description + +Returns an object name in p which +iter point to. returns NULL if +iter isn't valid. + + + Since + version 2.13.1 + + + + + + FcPatternIterValueCount + 3 + Fontconfig &version; + + + FcPatternIterValueCount + Returns the number of the values which the iterator point to + + + + +#include <fontconfig/fontconfig.h> + + + int FcPatternIterValueCount + const FcPattern *p + FcPatternIter *iter + + + + Description + +Returns the number of the values in the object which iter +point to. if iter isn't valid, returns 0. + + + Since + version 2.13.1 + + + + + + FcPatternIterGetValue + 3 + Fontconfig &version; + + + FcPatternIterGetValue + Returns a value which the iterator point to + + + + +#include <fontconfig/fontconfig.h> + + + FcResult FcPatternIterGetValue + const FcPattern *p + FcPatternIter *iter + intid + FcValue *v + FcValueBinding *b + + + + Description + +Returns in v the id'th value +which iter point to. also binding to b +if given. +The value returned is not a copy, but rather refers to the data stored +within the pattern directly. Applications must not free this value. + + + Since + version 2.13.1 + + + FcPatternPrint diff --git a/doc/fontconfig-devel.pdf b/doc/fontconfig-devel.pdf index 526ae7987ef0481c347f720105e7f13449d34d24..6bc47c47f37088b255a07b013d45451d9e3e8932 100644 GIT binary patch delta 300508 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

aw$T2pZTHI9SkH_RCt! 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�s?=74Xqel~3gui|g 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 delta 286363 zcmZs?RZtyG`@J1BxVyW%LvY`?ySuvw*tq+~gS)$HaCdiy;10pUpXaS#)pzopOm+42 zOwGYuweEZM>YEkZha;RiK}ZO0UTzR8B|T8Y5nTi!^!kn7H$;}NWrUpwmK3b`Hxwz{ zKEXT`nG9Oe!z^&dHGe;$%A-i8#UiIW_oF0=B40cS&N@UU1Hhvk`};5~AyOM9R*Ss= zJuM=Z$1JFGFgRi#p&cWMpgsxb&gud+-##uK0OhwN&2F;@upN{U@m~)naokhK3gU5buLiRiUbV<=%jiWVerqPf_0Se8^<^Z>3@K}xu1CnJ zD`~PX{ZWmz5%F`cm@DPF3-Q5rNfA*x?+abqB-aq1TtVZE8(l0SwXngOD;vsM1uG3f z=3roP9y*2s)C5yW1bJilJKagsp#jzC_yge+S&~+lf|+q72XLNvL{91?1~P9%_7J1S z^H{=7O@?S?qam{kGx~{_S-_y{`&mQ9s)ztu+sXTxjp9MmyaXY#S+Yd^qSLF1{nRZO zB?XOryhB)P3}|tXc$34&iFu92U^cgz6iHY!aJd28dNz0%Va|Qyh zm`aJDX-v^jTRjNOmU>frII1V%Q0I#`(WTa&Cea$Vx-`i%(|4saKwV zU0&4*@@J#m72de;S3R9?IRm@5vX=I*Yj12G9U29DHfy(JZuL(K;GXucy=1d zC!UeDYOCmL?a&9-y`>zY&&MCMItw{y9E5Bi6T^!8#Y6UANtu-XAOs?hd_4J!+H+07 zDxdC$)IGVRqED~%UZ=LA>)dP0MCf3fYbP(tYR{+|?Dz@9j6_EDH&&qlu<1kAC(fv= zG|zQIV4cSr(^0gssX~ge8?%ji^ojiCq-C>1LqlX~yqO@wui~13jC9(2xM0JcoZ)*r~o5m%FsKM5gDbb1CEt=yxJbLe^ z_ig@G0I5nI2Al-5B(1VZNk5Hfa~@5-*VN$Lj>dirU0@rH4F&8vC4j;!EidJ8NgCsg z421KbEKQdqRZL^RF7d8Xg~4tEhXMaU3*=Kw%MuSre9!oJH?P8+$&wA_5H6HC)5`>) zdo?BTX(APc3G%8OZ&I?H;5=I%UM$gIr-v<}b;0Q!*j+G=*_H$~s+OzC(P-!G`!OcL z{@oqxs>Ni>4ad!Ru9oBU8v5%?q+U+-w=$#RoF!NXeU-Hr1t&T};&6J)N!p>(2&n99 ztc4Q;7L!4a6$I6w5+Ax%c+$^OOoR}uB!JteA;G~=?-6CEg|UH(1fNAS-^Xed=*45g z6y=-1Y(Pp9mmVdlxTzNm0(p+uJ_TTsI?pfCs+bTLlTmp%MrCP1q@!ZkhTs6|g*0M7 znD=UCLpsiRujb&j{jioCYT^UDz%&I``qlot-B@_43abGq4@@V$StV9-ri|x6R}t{2 z#nrAK>vi6qZRQXqWIU3h*<`$2xpV~w<28L_m>{K)5zYa&`2hy7u)k)+=y#x9u>b&U zy0~Oe+e@2d-zQ|1hoz;Pk65WA*EP4B51`hIvVpE837t>q+CcxQbK~*`$bG=@LHsV2AhJ3Lgw^yhCA4_qp90~57k*NcR)hXC^!j;3L zS>rB&Z9YPF&cdd)Kad5BhmfN7?gb+_J3!!tLQdWs22&{3+8`2h997yXhbvH{U(7u`Jx zY-8zgYJ0RrSg_r%xn3Luv`NPen#08uD?LzL03cF@wd-M6rK)5IoGu9KcRMXjBog8e zvmFPi@9ds4e4E}x11{AD zRVE5$=)ABqIfAF;*4hYYzuQA{npd)0Ho#LjD7PBa{gdko zi_bBuUAqSa>%_quqU|)38>YfntrKa6i(3=J(?R%gG3d+cY=JO9%W27PX_v58_zCBT za)>8EzP54h6dv3iXN!aY{m&_46d{-=!ajjlxTZj#AYWk*btHf$eQ?f5ZCbfmc@>hE z{~-p{jpUq#5T=^NKw7nL_7SSdkcwha&w_(n0*e5=Fu7OQ!TvBwz@fsS@Od>4>Pa>6*M)c z*7kwUja!7v;rFa6xud_XX0KK{{l8QwWFZC^eDBe-^$=YnCEmLu7&n)ds{+*d_eZi^ zg%Y#KvsvXx`s~+|P0Ry7?E;M<<-({Ey=uIfzZUT;>*5F?Te6rgTT-Ta+PCQbpuzEa zM5`7g8au8o8q3fuI*~Zb{PtKvY#RIv!v=_<3ClUJ2^V`M{l}#9dSn)*#0^QUYK}Ld zT!T7y@umNIn=D9foKvRq5HG`!l$#%UqU+=RQFkTt52)@_cZ1!l`#RN+J8Wdk8@H^& z8+Y`~8<(dS_V{}cUDOZ{`^MQvFQx(?o4j&_G8^UX$@s&MQ&MPz zjTTeQMO`KKP*YldW`S+TbL;Y;rf{IfcE$5N^@@nAdML;LbO#s?6s^5Zdwc$+{_M&? z^1&_I`|U8L?k25I00JF!kHnQ${|Zj`MU#jkJ}b(9HQX^w+HSqTe>9aUhRf^L>TMD5BX)vU$wpI0quXnlUlNkRAh6k+#h8NvB$sr|IM6JI3 zMLg7A3$@sLopKE!&5EeMXR#u_k2-T$D|Gp)EBlX?iBP`r>0!_nlx!>Z8FEf>1SS48 zW>aZ0B2#k=JAu$UjGZD}g;gRBV%EEfrdbA!&@6A^ zP0<3@OzGjYfl@9hs{&1BtHZfbide551a(nXjY%FZF z<=fL{Vt+8jQas%+0RGVCxAT1KeB3(4p^ZOu2e$H6J&!y(yiw^{z9VPV9*6hzdapif z3Z;ch00{<)`G@~Cyf4M8Gy^I@>lNx!%?1vR*l$NR-5;zT%62N8WoVgdKgOynE}PFB zpFj4D5ty7+%2mq&<)C)u@(|SGv|m#=hGsGs!YNqw5ZXc{z!rY_X_IdK?(A$Sn@r{r z=HxML=L)W=ap9Kf@oz$FLWX{Z4p%$V#JLlAB#?qc9>}J4@*qs!rH38_v-3By)6m(W zJ4GSr<*_vLyi9}CKs!I}o4S9scjw040&$7%KK#Pg8(utX{6u%6$E7>Z6H_?lpzBd# z&Tevu3?UL#fg|szofn}#AZ+jN8l;cA)%ZR>0WyW=*a*-Rxr!mJ-!=DlozfA=3}4z{B%k|!$~9fjjevB8Z@kL7 zt8Y2t?^Z13^hin5JqdPVZ8TSpFtWm3o9jXFG_egbT;f4E%@-OC^k_07cqO&lobkRv zYPP;;;EWr35~OB6K?CGb#UBdDnjo79Gm`|RRSwC>=|&nffzA=S`aY#tc^2=;&~BBa zBG_?SSsShf&?01gX|grBE7q3=G$^CswcAr`VuaL}ZgybD2PV=2qBLpJ7%1yB-BmJ; z)M*iGL~PKjP@y_k$eLjbjLpH*sRWgkH%d@|2y}5I!URZdu;x7SBU-2TJ{Tdq;1Y3v z7kQ{M@TDNR)H909EklKtHAv*UR)dEbQm|=l$N3p@7%?OFCCtN4$nkGsyoak`)PoOH ziz@o=e+))pt0z>3UCajGhKM4K*{Hc>ITayFwBV6{C<|IV9VM%%N_Lg~i7%z%G>5DL zMyf=GaAICTpxRbENCi&Hw+8~}3C>EdeF@aKf zAc)eUv5o92iCG@h);ym;=2-n6Ox;FS;|!JJs3##Y(gKy1vBtuwM~CH7p{-t%3>~62Wya@#4I|LJwR7s%7UiBL$_Sq8eIl6K-vlKJJ=FFYH89tlYd{r5`95OQD zF-c9zg~h;+w>Vao`{+18DCr0V-9g#Gdbf_>!06O`fw7ABD9ad|70=A4`4*w^3r{v* z+nUg4%fD~J4;>F6VJsOC9UeU}_5X@FZ#ctLe4O|bO;Ksgh;6kpv`dI0(t^Zw$k2!I z)@xp-CKb@qG*nfZFA?z@Pp1`vdXSYGrm8_<(Wq^zO&6AR$_i5jtO%ri2ACjIDA>OX zyDBs>K9Sjw?^c6}tcmqB^>s)pg~V183|_NCRix4)46O7STIL!+855*ZIsm?cf_##) zp$4FxJz)1tB(;hm5gy!P?>@_mjm|PW8gOMMlZ3XaP_829>|(8=XQNJ=a>^-VZANFY zcPXqEJMC7UAqTHQf3hs6lgDDlL5va7ItbDQ9WQmt+@A@M8Tri2lVd)SZDpO#(@PNq zxoNZp%t5aP!?XhX-o+@wg9aEmB>$R=gU_Rigu7r!E@h^}6RWe5iMus`vFem(x6fUg zGEEh6M^war=hQQ%v}6j-8cO3hVAHbTRHW}Rr(gDlSLLjS3a-qIA?(wTcU#}BEYVR4 z7A(H%48^<3?bDeui0F6Sqh---M2;Y53=C@13YEuC>=y+>2RF}>1rO-prH=5F>{nQ6 zyFapM(@Ws#X*|z+*8247RULoyTOq^}WGzc3O8(4zo}jeP_WNyj$uYj$;z5jav3!Ml zgAWnUJa9TSvUpn^DOeH^flHu;K*=T(K||AbUzVSvr#JeNoz=VHzd8QW+%?yTH(juI zqQ=CmxV;G!aBPWJJTG0KRWTepUs`Z!_1~;*{Z&|(b4q+;;r(b{->G})xZGL#5k53v z6EyPt{&=%7)M`B*Hkc$=XmSv^y0KJiT|H~V^nMMOyMZ-4m%_b&x1LI1bVBk%t5 z;{y`cH8TZ3hdf51EouHlJ`Kz!F|BE212mInP`tIty*oZWuRdCMH~GMS-|}6TBVdQ+ zN?p5jva$M+MX-ewzThk5Gdr{OJoC0?(w_UIC+i7p$Mh% zXJUb+Jf;YRa#mEvpc5Td5*!s&6gU;@5C$qm6jT8)NyW~IO(teCr)o)-E?Gx3)QIID zeRBwtOgEtdZ-S)Rv|I&G3VQjTn#O#T&KiyE-DJB;oKck0w2@4aU4pVN78s>3S@Gjl ztL*t!y3DYzuXOQ#8?ClgOybafMs*VHv1(|QaK2^>RkKA!^|MadtCf~mUX%w1i~4Uo zem@u>X5tAl8tO}M9+U1ZiP?2aGXX-@&(TeVw&+Pgqj)$n3I~Oj$-1NsST9-H6D+lZMvl;hDUqQ?PV(H&30~pGjdN5WUl8V$gnKYAH{%tHr5GZ?1m@|MDU*GY z16$g1ZRaG^2u8FaoXu~4(?zGkH5Qhkb0d@*t68>&wiQ9?zk$xn-;hG-pqH_#TVUIF z^foBAoPe5kJ3)|LI&1NOi0bOYxgJIdvo~nUMISd0$GqxWJO@nL3Hypii!_w#W$8y3D>=ItUT;qhoP_#i<^cJ5E@?^$#hPV3=&#nR z+p&2nb}H0m>%|KI_-?*?((DLHE7lxfGMr3DQBX{`%7kJ0%Kg^S``e9IZ}8$J3{xsq zbI?3fHHmAlM*WI@yFP!dsOx~w-|`-i z6}BQ-G5MY%c<(mvOBd&L8w~!06rV3VSLHJkLk=M^#&@O*Wi|2g735 zk$y0*7Rf1n7vuzf%QI}O0tFEQz&W`84=M+IsV}Jf;fO%d0u+{E1SF%B4naioVp-Tq zp|Rw`OC1dei;jl>$XBh^>^ai(eV*{AKS7H%?In_tZ4F6mR~asSTcePk)X#0Q{D)yA z8pUKVRXE`9OBr6<>zJDI6p1Y0lw;Dh8AV2&cz|(F!Bc06bv29zcNH zDmjDP6_ETxkHZa|iL^~r#A-~y*qIJi&YVub7?Tdl$0mP&l;DTVK+Sqtl*BO)3LUu; zIJQWMjS+)QV!|4KR1h66$edtLRHJ?ZUVDJ4_7FDZUa|%+W1z;8MScuXZbDfN2EJQ9 zuavjB3{Tg@rmR9D&LW1yg92#Qq=w2V?hN47uXnbSfg*s*A<%nBK;P7MOVmzadL6Aw ztiX@BBZo`xt{sy2_GKm~p$_4y*kpkjtK4$Dj?L$ND^?+}o>SJCjFFH%fT@yD)F!Mb zD9=K_0~>==pVOFbcTJ?zjbtyV&mvSz%oDDWux+Oy$R~qxZ?STaBLptf;Uy|H(v1Yh zmJx(g76_t^YARbj^AyggX*%ljJgh}?u>b7dy)nSny17CNeXM~(?y?QkyA}{-*Nw8k zx9H3V!`eEAuEe@L*2u@WU&Ct89@nyOZO-HO03Cd)$7+rkyMe&RV-Fv_Yi{K5sjic_05g9`5~Y?+PUPm^pcmAe8cejr&~mfBIy`uxtX|{zM1ykurdcfN*J& zx8MxG*pzM;jIUnFRcI(AVHGd-U&;8I}t&br2UKn)olO`ccnRGhgoV49B!%FDW@2^8oF05mZJ$xWXurMiSO0c1Sv9UUPtn z2DG+`v7jwlHq_)$vMO!VW0IE^l`Ne}EK4~s%AM6;ft8#+iPH2qivrWc>|5(_9w1IH zhY+k(COM0iiK^YD0)sX%qrQnIi=0^444*oC#enc$@RKww zkNw9X&NXt#i0rQ&P)FZbFD9$;e`8j22gPfA+Rq9+sFm%#(uus{SOpARpi%fL3dNx&^RI6-Uf=^c$r|pUb&N;apnh3Gp5}C z)u^eN-roFJo1S@_`gd8-)FV?{`Z3^e@4Gs=v2f;F!#w^g{Q3UL`TpSkf#NeFuj2bTCN-!;*IrY1p^YbcInN(cF;Yg{^1PE%Vs0ey+VJ&K!mpPiLX4R1diHWF?l>M_ z8uvE+j;e(a(-^>EDdt14D-~=>6KbAv=xrLd(X%X>98RZ|ADBFaWEa!zl8bpOJ9al2 zA9iSCBJA1YVD@;ixaYV`!_wC8J?^l($SiC^G<4Nb5ZMuW&q_U9UcPQ;!tXrkcz6(a z#>SwY%?BM*0Km9F`3!VlG%4B=NPTTEy<)gGF{@~PR)d>5QJA?nv1pK-L~=x?(sWK- z@$5S0KCk20Nq|nHTlpU=&Q>1r+z~3!D4-e9Vtdu2?pB7-{7q3T1*zt6aLwix+2xzC zpsCggL`;l3g})hBy$AUkZ-jihI|t3;2N6&}mAE7&^O9KtDA|ElNimHL03?KfWL3!% zG)l`jS_v0&$?~LF^&yezd`@YAofarru-k%mSyjH`iJ6KsskD4i^cbsHqeLeWOKZD= z!`zaf#@s|JVL83urYhLD0V-!JQ|miBI=x(b6mEt<6z`9psMof)bYE04O>@#i^F3FA z{Y27hf@a_=$^j0RK(v->rK3^P*{L2isFRb`80_WSm_t3~$*6?J<3&aRQE3~uCMNwk z*s-1pf1!p8hu{LVqf0Vf1`%+gBKUYJ#&{4@ZCpIUN;Bu^=zJHmVo)s(b#RR(pK^v` z(B8NwX+G?U)^AY>Qj(?eTzytxxZ7F)rjH@Q^$41m?KkUVrqV@xbsx|U%B>r?aN zw%X~TTECp3<%ZRdcy}9g4!v1bI^DYlZMxLp3YTI&cH=r4h^sW>1)^~c+Jw@p4c3qy zDt~SeUjYzp~Wy2D~jS zG<}|Tl_(Omc+)Ph8ps^bI3h6L_>0apeR}s!mI8q#rOh3O)}YRbI~32fRAUFfX+Q4a z>U5RXc3NB0&E$0!Pv7Z}E3ZR$|K}U0&YzhpQAuxHZe5e4F(RrJ1GCnIctDdSE-Zvb)-+35q-Fa8J zjJVAOhY`!ejITPTyEPKjTLWpMO@Aks81G)^h!{j7FSvZRl}vVgyt=Qgp05-S)EYJs z1Fn%u&E?bG-?q*h>OE^^!*{y>2nG3PJ|o|s9#{)1lzLZ_jaV}8^!|Wd27=;f0N`A_ zUmhPFP<_H-Q5dD`g#K8X>DTFLPTH4UZlzp=f`Ttd!a$`Xeqpup{q9)}F(`s&8VS4e zsQjvYWEDvy=$;7@pa5~bma$LNHIeA)Tzu!CP!~qVr|c23Pf<^)hB4?AkcN(tPNFw| z7=#PoG#u1FtAhsbeAW)JoHEf@umIh%&%rGRbk}La2xc!&C%}9dWu~$OXazVKYu+)z zb>8qmn_GS4*ilv7w1!c>UT@#ZdMC!?;4u_E_X!{vbwAr-OR>`f*LIp(kF@|x| zyU7&At5+e$#WOm{l$D34CzYIu*f0y>;r2`(Vnm|mI3%h}V%c3V3(=#Dly7m9QgF&3 z=41w;FrOkq5m0Id$GxSoOJnbM(~5?HxGyp`S*UeIqR`S>4Nh=n00%nbDl;*Rr~pcC zdueSMS437>R0YXtl}uY4N=g?@fUI>*V1nAr*r<+;X#iBYuOS9S@o|IzO6y_?ns@jP zEZNO2?^=S_&150&arr!s=g;<-69rM-Aqf&ZOs?;KYL_gpPIq_3KQ`JLJr|aMhtt~~ z*bPZanpkF-3R{($)XZGZ2X3CLgbLXCd&m!$PODd*p7#!Tx#E?EV~&SDojJoVCZ6eO z0ay<+s}tuN#<&*x;`kgM=qcX|97}FDt}MFWSYx93AqN(mJ3@{GJ3>+&I`&w%;#b}V zZhYQ-SoMMWHmo6@$!tb-HPLLq{CRop+`_JH#n$Wa4QpWUq8(lwh+6J#6y4@iWc%UT zc>QAd5*+L&!`&8(;}vpliM4?Z%O#I=h&vI5=o>QHT(g*#FN2+{xRzeV%RxWP`P&_b z)n{6`)g?-5j?eAPh~vTw|HaJ6R@Y+K=Yq3$$dI6SNQr~D_z9Bt3$HgYZD7W`e5#5d zO-kz$^xf)V>nCgTcdB9_IW#6J`CAla$Y+yz%d|bX6;Hk1uh{{nE!4 zc$Z+hh;nWi{<}l?huDU3`HYF6!*}E286;8LTEgScqYv**p`mx|=8TnoICBRxS2q`P zWBdO`jwUv6Y#gi{Bp?R{HgHa^|DmYS=b*=p(Dg>|CCAi4lb8$%$;%PuY8$XFF*ChS zy2Z7|*|j0|uZNvYZ>2g{lXo>fA?y$#ywkDKI+0?nNoLHKiIK84wV$~@ESO85#z^7KtuHfp3Qd47|Ic?HmP(dDqB4-Kkw22s zQVFtIX-$4odZ1Fvyo0-bm@9vOylQm6$YgK7F9>ztUe7&p5|oKjXU&KvGQC6*wy#r6 zRU)QJNQY-(Toedc#0iwWJfJJ0yc2oR7%io?<}$;!ZZ34;w$6r1oRfOqE>dlvPC=rB zVGA1n=BiN6-k+yRl$P%1f&iStEL2bmE+aX+L`dw*NCa!BAZQ+4;L*b(!jgz+pD|G#xQO@9I{4WD*Evq=iuias$cU<-40<~ zYv;kl?z`SL^F-R^UfZS+72$FN!$=ykL)YV7&G72;_1#@twu!4=I7FTaCI22?{6PrbxqHiA17`6Pu4`>(w35cL z^a%CX^$sT1+FMtA1=jnL^K)6Hs(E1^=G=Au+oiP*-W(rkb?uMVR3m|0EJ>{lbjdP# zc=Gkq5be(u+tbq8)=nWqs@+p-XyiKN=ZQ;aZHR;C6Tk-q*E18|Y}$?l5MtGGwhqM1 z^1q!ekPrtm@XHL5*!jTpl{2{5n{?uVfCQVzL4s?dRVpRU8;=%^sN$r+4E^kRR@iM( z>Rug-PVM9qGq`gp*5Z&&&}x#Y>f#!MTEQ9eCI+b;G)GjhJIyJSkmz`El$TjT|Ao1Q z15==BqzGsqkS}0Wj4K=9=LOik!yT!Z#gO9xP7z`j+_c@UP5M6P+eK=}<>?Y;IhliN zy5$mGbu>D+NaVKa7Gc}#-B(t0}vxv{>(b3m*gkYi-(m#3sySOs7WHC`bHsPtFw}d!zvq3T~Sb9Z;k(UJT;%J zl4S2xjT2?T6SJJi6a|Li(Xz55EM27zD9cYz)~TUSxg)5s3pk}$@G1-FE$L}N-*1$V1-a-l*hohOm*XQ457v2;g(lU9%v?WA* zT)J@86f=yC(cC(+wcyQ7Y*2boypD{FEL#-XRFkYlq$;x*mQo^HER^G)Lj=r?lWhxa zU`k7mAEVUi6{`t-65X*E$~qa@dUEFger~LBUmQ5EXO&W}x)~WqATlA$-G>)5y~rCk62R^G}s_Y!yl87AB*9M4?>hghi6%8(|i z(_DbrIZwYX#g}BM8HU}52ItdF3cR(PJJo!DT$bL46l?7>u6G!i0L|r?m5G;h`-``C zkluw>lJlhEZ>v2UA(PC@0rQFTh(bXxFqN(Q4l9 zoMll^lB%-Fz#GLnE)R5C;`<;aXH2XX?b6`^8ee3k%IJ52-9ly-s(T}gS8={Faa1TH zlG-wM;U~=ecqB*T|A+3|arbIzj>w1UIiPG|P(K-9aD@;XL*&K`n z2l)>)%AlBxI1TYEBFQQYOAa{O2*hCHC_fnw8Hb#!0FOWlh@RKG^{op8g6CZ{Wjxga z#vfi>?B2Ne@ow2|?-~T@fxEw-*M_9&qYhO$D46$M-KS` zx5XNRwf7`LIhS2aFV`EarADJ$V}o5<6Q4!e;uCbI#mo-Nf=Bm`FydPcCkSj*BlY{R zwJF5G;$C2R2hiwmHoxcZ@w-_bdpoNvK7J0)tB=?8U(U1D49Kwy!(qeamxvxB)$fFv z6U}caom(^E)}0xse@{y1PF;IrNOTC(3Fo0L!xwMY#y)WccD4i!?1_#?HNGE*HTAWV zx_@rILx<{ji-AzZ&_Vm$^#3`Lpot%hz?3NmRRBupvv-tE|M2Nq?wJiNX}%X59_%U( z(Qh72Bief05$(y18QxeU4yv>bhAiFIH@78C_jLt08#Ibg916Z%I^O$?V!T`l{@c?6 z9UP9i(QFI}`1m3U9dZZ|PCsT4oie@#TLYGP9t@4--KrJ~yY^1Mi%Db*dOH~nP+Fs1 zziuMY@FJTJ++gCcy$}I(PXr|8F-+U)lY{OpE=Ygm!i3fz&XPZ9IsS zl1P!%VG$ZFol|-y#86bDX|Oi{5HtAL4%K*`R26!KW6>qFjLhY#z*5~^G79D&$#_JJ zwo#GCuVjtkoc5o%0C9FxQi`n@g0g}l6OS@5Ax?KAoQiVvFI@|DH!i2L)VCAv!%HtZ z#=yy!EUAXm<a4>$&jR~rl)W?yz6|*0S-7id8-uwuLh3v}!ue-k&2#DWPgfy(%cY?SHb!$UNm=U;AmaMI(AAU$aCPci z6Fj_w!om~3->QGl*3JwOt)P=FiEVIe*!-=on7f_>qUMw3fR87!(7)!KA1XRJcGVMi zO1AnslDg+M_%_u|#GZQ|t-QHh3)(H=KTeq)pW|nMkvCh5pTw_RiM*`;3Yisy8@RX- z^|fIJ79!H>u1mrd^%txa>_pOxzYLSQFT-Tj4fbthM{(ngw>q?IQbrrsw0JR0`=0Xr zS7#@0acGB}Oh$a7%6b@Jg1zY7oNuxqImKFwszh!if;M(w&;!twb9Itjf-S`L2@ah9 zef>Y$Qh(6@myrUwd;OQ)6>%is{>twD!{n#J)}^470T0r%DWWktY`8^+i2>9LciLVk zBpmNN3t$2+`4-ffer(R6zeL8fAC#ykwPoywYl1Giu*ySM5|+I$3lciK(cEj=qKDf+ z61EmfLn?ZtRwiOu>I|+wx$2F!^#=KDk5Cj%VTCe0;doq3zX6TO)kKy_nbaG2+0vl- zEs#R$hN@YLHWkI42>`0~&X^dTu{}7*6>H~ZM31+N0>=bseb#W&AJlL#PWj_X6LLmW z(xw}K{NbzYEC9|#9ubxBvq)yZP+0hCGL4$kh zSdULW%(GR_$>IO_U0espX;ixYEnIQjK0?WK_4u2LlqqU{8255$X=X~1RrzrrI5kK7 zWS#o`9~j@IO?;c*T8vrW!y9!ZEwn0&S>S!Di|e6V_Jo0A;dpzCds-2rnj>;aU;ckn zeH5Ph8hu-Zd!3QU`6vRY8Tz^3+&=QBF?&J2SnP2XbYZizAc2DI!65I&+_1BYSM?T~ zO`iNZ;WOLj^7JI`)beyG?SP}~WR`IoC1EAuT)LlD+zBoVT@iCd{n8Z0_>=`DpX}=;X_PJyXkFeDv$VgI6f)DgOMQ*WdaM zgL9#APvp+WCS8pSEya;q-Lu)hsc#=6LTUEe*@eYT@(V4NO`dP}uM^fUZA@Qx{WGxG zWL=w*&p7OXB5w{rzFOUVmQDoOjF~=_OdvSd1@LY4;we0w7~N$Mp=)U9AwD&447X0b@_G(4( za^UvgURG<-p8tzm@>I7)nA5Ko!qqE zZ{1F~tj|k0r18?8yJjV%a!jq|xNHjvIymnKt3U9b>~tEmF#iuU6Co}zwlrgRu>Up$ zlx@|%QoTE0sowgYrVM~ZQo!H5VzLOBOX7rv(V#2F&ZxiF0@M;_w#?j0KHZ3Tu5L(&uD* zcZinhzRD2a4$pXeNE{(A4#pUHK2S_+Ld5QH+=7BkHNuRJk}F(k+d@ z)G4d#(ZFq8OyYVyueAjNn7S+C$}=K}^6|yy$xv6=CVfHny0Yf2`M`?{e6D22i$+w= zTdE;cKB6N~lb1tAc27SVtsYn9ty9k~4gBaoU7mY{7KDNANdVvE@-(sP@2`A8A%dz~I^K=$Ph?4) z&p`!ff>yP%;G@)0w3|&dZ7*S2zpDL}Vl3=h!->aiy)CZNW`u;xxm~gG{Eb_o>&@iRZ13 z$rB#hSb&1B`#SFKA#$2H8SDIN7lPOK3 zMVa=VS52n0mR_K@X4^zuQ#(Jl#m^jZZ8L?lh}lpZ_${oomF5d1jIUlRP#YbzBRK$$ zQ`%T0MF0jtJqDAOUjvQ~!Oq12GWJ3TT}Uf|b8(~vVnCobDg(M;z`3~oH&3R*1l)41 z;K2a)0z(@W`Bb|jWZa28pfPnls`!L|I(l9!P>Uv9kg=fHZT0#qN`w0gZ~S-@M@zc* z^FN`Gv0YKo@iZ)%POFX1pU-@t%B*N6=;g$HY%=b3|Do}-aIWsit6FFyny0{l;6n++ zedV-*yjWo5JHarl0=r;qUHpOq5V$#<8149XUDdLn#rS(9c~9QcYjDo|%f!n^G}&LE zJ_1!WE6Yk)Ogq;pVpw%e#iL}FtLU~7;(z_M*NB}O&nSzh0{cnH;tP23r2Vo>DuY1n&_^f83+Z^6P92kgQ*a(V(&7I7gD1Z0 zK?}A;OQ_~}xe;Zu#G2G2pXwf_R5!;21ao<=CW%T(LqStnRaQ%&YM9x9_U^a65E_Vl)Jf2Dl&0=&;yh7TRqg4*}k(pzq`u#8V8PX%>h|TtrjI1N9t5 ztc`M#ze1y$6X}|C-5F&5fRht~kA6Aik(0)@S@CVo74I6A@`~4;Nk!yn9rHT^>QMoU z_y`X+6C{&j*ikyW-%G<{?n-=|k&{V;RCzGPZ_6OL*a;CXDwI_%Odt`^ZCMVNrD0uI zmng}D5_J{Vn=Ii&5<<$kBMmL`K9*`b^cE|0^he%k3IKk7i*ZF&$uL*wv@(Nq(vZ5) zP*Sjzf+Fo9ia`S7b`IIR$cqP1A5HUQv|P)YqL|*xxfdBa#xF3(#6F$aH`0RbJ-iev zR_o@2n-`j}k|lk(2joVT{5`HW6?^^roWDXwa>>Es4G((gPl^(YccJZ{^3`i2T2u4( zBX!^YF&dAtbNj(Z;4cj80dhpJRbB+3_a(WlPF zF%Eg?&NAhU@NYzN8~$|3?JAOTd15MIj`~g^Y37f4;gWI8oK@;ynK~3TbiBAE3?_VT z?L>8K;e4BwCGav$=spizPalnYV_eV+tN3_l(P#d#b$dftsP+PGfGtOCXABB5YF!5x zkh>V;%h!`8f&nDz(_&lz6?XY(VrD_6C_{N zC9Fr6ljNxVMQnGH=i9PZhVok8Qo|0=3{)ceKp(12wEDRlfMf4jjzbtVM1@RT5vxo9 ztKQka{lZn=(L@;coGuEn@aJas@mp6^0Y&uP*KrTw%VZ#q6L>Cy_p~rNR~ib9>_WT9 zlhPlr5h~ZqKE3*uI;xeJgx?-8s>%WRf~kM6OK%Mr*vqWg;x2^oIW4+PhTrMxEj(&< zTlQe8GWr~KJ3d&+P^#N(*cw43sR>;I{sqFLnd;Y&YBaQ$wT%|l5gC;4G@-QL=bx5M zpdIF#9F~B{oXRtE3KmpqO&4sAjr_)2UQY&}1ao5EI|-q7-7b0U4O5RY!jhPDiY~6G zB`^N;_a!}>%Xwfjv#B8=M3r|O3*4`ZdYRL%`rbN87yY88u||OS-3pBl#gY16!Sfj_ zN^d2>rr#@3 zy4}|{QxM^G-@O|s-QtrPh`;m3zHFxV%E_OI>~t-}r})+S1}S;+uq>f~+uniZ%J+jOoJ+ zFXjm(VjRG7z7+}E<<5j_hZM;FzV4Src@8P14#>Op{s9^L&gFYuGQOWHmK(F1^3TZW zZ)bO^{_j=uE4_v(c3dj+ox!a6qTq19$}zdEMlytRLO&c#VD zd*h^@apI8xJoS*Zqqvp{*+sSr2P<$H=J}(5GD?7Xue1Wc*ebB`po;O$^C!P8^~s)< zr9>+Hat137IYbRi&jBj2#!if#Cs{0#-P?0!6_X24Ywoo=h^H{)S5k;Z-*3CN7Q&wv z8Tcom8!mYqLN{vEM?>ZiYL`KD2k-9r3OXMmic860KgG_Yq&VzX(N!izEa7+)ZZCs@ z8=w^iwGbV}S>3v9QhaHp2TUXg!518^LE? z>8KxhMgeC!?ep7h+8W>g)RsH#*6ZtdXR`JW+&N?YtFq+qP}n=EQa~ zN#5Lh-~07`bX8aHuI{Q+=k(fVueDdJs*^$W5Iy{zxQ!xY@Ilyr=bg?WdismC8hlbF zbm*;=%DKdNZ=~1b(Sa@(s<#x~L4;ke>44%3&@kOwAbhFe0iWH&x@*Ac4Cep zG7@q`ZL(jMZ@E~l@909QArkXmm+_r=O0BWHFEg>GmF%sVN_jTV#+06VaIkkiX)n(@5!<0*z^gSnnm%yM8Iz zo`C751n`b=-boI4VB-|6vewj+O<3ubeQ9ZjeQ`QRCb>(A=t|aHhQ{g;x=nR13m|bY z{3#UOPH3QbG-8_YZObsR`^CrIY52R}O6i}Afz{(djs>pkYd_U56Ho96%#fxfxc$N- zej(y@!D=R_Y5OL}_~w{$R!QRN9N=s037(yZMF3ujA>5sXUXneCu>DBxm(ApmUlpHG z?P&iJkHfgdL~4WPQu|ST44hq7L~z|UlYN5Wnf(e3sW7y-C_Qz{t+XUzs_`F|X{8$z ze_dvgD>DZUAx3y723Tyt>GPCe0~EqS>#SOfi0>mXs>Yx67;MB07H~)@Q3N&DHd=D* z9l#Es@nQe)fHXpw%#k7Y;h{cr1FT-G>G(24UccXAzCMQ?&{ES05Gr|e;x5_{wOo-w ziv|cpp#fds(6U;6v~yH&^~!1vm+HUj)T)cT(uH3onh7>cI0F&TOa4`(v1LCdVT`;@vDsIJ8%b2l672`jCNiEP;Wg#t*+o$Hg7{*7 z47Vt*{Oi-OXa+dmHIxHOkv$XG_8DfG6sWR>0k>8Hj~8kolCXVve;O^!w3=i+n*Juv z0jlk2>CS4F_*GjaQAFixE7+pXwz;)y^LsoYUXxazs-RSbIH?YMA(w0*kpolI(wkpW z!l3EDp1hv&>4SjTD;QT5USA=9Yx)B7ER^QUBS6(0IBHqsL&}{-)4JRxa z7drSnRBQaaz`Yz9s8@`VDGX7xi}Gge0aY@N!Q>q4n^_q|7}?Q7c_sXY;TB6GDh3H7 z%x@n|!$68rA~@r|!UB)?G61dC6{!5=8bE|bC@=>NohKjb{yU3Gk&pG>A$}y)#^7s# zXGCb`uRjWOgc^H{)#Z||2r>AbbVlpxdPf`V#rnpshLg$YQmXHx*}DIrFv=bc-dr$d zC^T9^YWNBj#J;lEqu{sPI^|#abxJbOC}Rspunne7`?RB9?7Tr|M}S5jCaL^{fU@(e zDsux2T;Fa9(Z3~Eq_+0tzJBRZkc#O$jUkm+Vy$w`@0%zm#@c6dSag{JjZrT}-#C=% z8*psWTPmPb7V{2N(yiSsNhGgTR&AmS5)dfXjfW9qw}nO27kRijTr-S&I=kxwbhMQU z^M9a4=-4rOQ>gRF{{TqeV8C6bt{aO-V$iFIy;?p5wEoP24F%z|kR_hm&qMj@ZtgtW zbWWo6c>6sB!1I=Lw$wDe`?IH7UWp085PLfgD)OWErrTF+zPk)ts&?&W`prHT=rWD@7a{^sO|uos;BdSob`e>()er@7`Or zGHo_IH1*`ap_}=0zAdCA6+9^J82sczt--y-gjM%XPr$2TSS;m@6SBkoD+k ze?w$ios9VJmz^_-sRKO;)u0#9_GbLGl=AB(uP)FgHSnHO^oScuC9|Zdgs>{y_NPl@ zG?znQJAc~-J1`Uoi#cUg}XQ$w`xcPK7Lz)q0 zyvJ`7)cO$g);_k@--rh#=rXw8(~^6M7?=89oS&}mfrGela^cuk7b6N_>fgHSop5Sp zeo!^>fqkABxmMfsdR8niRIEeGf<~w7u5@VX+g??@U5OMB7?EbO>neACBUXx@q53_v z%1QUr`w5rC^0*YWIs8{?$)NiA~- z9kZz{C_rqCQN2p2xDgMP51+^x{%i1QwB5TCakFOlhWd8Ggd{qdP%IA@(EHGY?eRy< zFcQ3TIic(ji1SDkykc+b-4xlwdC9fakrspO7aur*!Wgv-s@Wc3RTUT;^~}KT4s}-B z1@ZMcv~TvxX39Lyv<>}FYt7@LOY8m@Xc`N%s_9k>hiogw9zn|;*J~;KGY#+gMZy>BN5PM>~fS?gdg zi*9d8;h?S_rW-BbuSL~Ga-t$xnlgg3r8qw=yDMm93G`6R?S;sg`StD}a`xx!SC1OC z`ww(*WN`6@f~IXwy?jrzz}(^D&V$?98_2p`#L+C{|h{~&aM8!0D;k%sDvLXicUmT$Yy{W^$`AihzFOob4SBFH; zWTjle!a^ee8f&uoC}b7A`)Ex>+iZ!vXglv-W3R8=7L-jxpfIT+`7xfhJb z45=0|d+iDy`GR9so?=`udj($pw<~1>ziOWUZX_I;M1#O=0cp!8J3a(L@LM9TbYMqA zsl5i@9s}zzOc60)$cTz{Fe|}YTs=V%@;3?` z|Fr~I1n!uSPhoP4Bi%t?tX>bLpLNL>$kFm`$TEuN30WL}n#P0ez$na7tOgAe$yTj? zPg~spKpEbEQHdHD64n4OoNv@q$Ftz+aH0>%gMNee2P0{y%kaWqY8SViA2yD4cM{*Fw*aNpz9+hd^21+yNwl!sLg68oWs2zBp)8W5Va<^J^n zo9Id*G0taPSacJkNqS5P1+X;?rPHbF5W%S~fDQU9uJi-y{Xilyz>l&nifmHw4S~4d z7y%`bT#{Cni#w6tJD{*QBh=z%dcBr5Qcud>4z1XJ;xX^`I~ev`VBU54xn^HAX*liR zk{QuuTCJTi344^e1U0n51ZO08+6ofu()@}F3-{)EMv%faPItp$t(5C!z2?X-mK-C~ zn!^DCEzpHG0}NWlfoO}D2{|!LoH3u&NTUIK=@+6&7wS4Pti*Wa=_d>YA#l~AoaxKF zQdmgwA1P}-5S6{0I3)kBu^Lwi%?$1y0@$&>Cy5_3jnD{b-?tRBH|ftqCEi4jmfjD< zZ&KU4|CEA3IT+c}kVQaHleEqHfqRnh%sB!5^o;#cStG<1*hq9Ib{*2ZbLVm#XrX6& z6hRi#jo-pqCgj@HP8>4pP*Ls7`q_>x&kq)BYEoeD z-K@Rz^2i3wv|Om8dt@#IZ=_|!d_3JN>0$HEOVLZ}Q8)P6iFsqO8!}`hmoXY%5=DUg z0`$@GT4E~A2`%4-JOxRPY*0{-%wzOetQkBKKW6<)KXB8Fcangvt+&<<5B@tF1&|)zZ8#^RPg$_{d)kyH!zz%RT!w@4faZCL3xXz3g=Qn|p5PVicpAIFKnMsbMT;PwQUgGSxAY0$ zOeynl#9^qmVp~a|=%`QzpAvhI&G_PLTfn<3InEi{?J16XVmp_MDNVBfsB-F@Nb2`Lwe}mt0nkI`rjLaq1So_6Bama-JK)j1Q8spMK-Ry z+Bq`sXB>!g*#kLbAAaRE3>tujUVls90Ufq@7S%=*<=HbC4Z;<7u#QZ%@;soe&Q!C9 zGT0Fb@TiyaKOg&gx%~(7C=FQ>>gLTbU+GAY##GvowM3ZXO#!3}x6g`9I~F2fH|S#p zgeS;3YN7;;HIf9};B5Uqys~NIb2BBMyXBRcTd|Zd8xJAC?|h5vms$Xn7TnB0?YEW`H!mAoZ>jG*V+YOL0( z6C8yaAGu9wZELZoO)^AUUR*W%tlWoag;>W1ro`pN|_Ge!x8?OmFd;Zl<0cH zmaL4XG2*km~t25 zvQ;|p930d7(9|wZXjn(El{NB*@^oB1@1I<(CD#o)7V~|AoL`tR3~qiO7cwMBhN5yf zItm`XBtPh>lqlErEtt%U{^>W8q1rW9BY5kORgBI9?2GKRWX`$NJ?Q9*RG;FtJHRO7 z-ASUzzg%6SsE7b5S65j2_37|0mi@S|39Lv`t>q3oMZl4D=7=gUYsm8Nh(S->KkJe~ z$9TeOk@R1=6yew?ERb@v|DXuDA%GOa?Wf-;9Mz<7q*lOlbj?lxuw!9EOx(OpV5bri z$zIdnZx=(V*)sEjQq=n>2ulmhPBxxQY8!5FmQ*o;&kMMjP;xl1xIrku=r>I$jkU#M z)UsitDYDv{UL1b!4#3=!M|&ATMA_EyCu!EmC1^oTFwd(t5uT^^Sr9D3rCwObrgtJL zKLH6aWmgyJs@gKq?N0e)t@NnE?q7BDWY$#Ige$-%E<$+CZeP|kEE;UwBw{2%8iM%& zMt6+VJPR^InlOp+jC*vER~ ze}5W#O(C3amIe6KykC8-fV&uY`gntIxgAej%UWEY8wbW&dv|m1vbc1r_p#9fDn;*f zu?EW2GW*B!6<(HLV-z^te}ERj2NC|Ssw)Xggd@=w?jJ$dkO)o%n9-Q}k9K)yPTgX| z&P6N|jhqN79&#JQB7o?=u;xH46D~48pv(b}=HVE<(b=q`*hOho?d}b$E zK%)V?Knp{$U?M(%Ok-)899|`{3bUM2njV|%5g!Cptt$Yhyp!gQ33337jaeO5k!D>k zK=}b(bWo~E2K)Dr9z5JuFG;+WGqiO!_+*Ps_W# zjUYg(woNdLd@mq=V;k<e@{z)V*mp-~XqimWE7Z5+R@OYI=)G&8?fuf8q= zFGe0Hi0lurn6sUVkG!;{lx2`K5t43;AxT;^wy8HcOwAMubhSy?bcQ`Geu;!o$xLHo zoZ&T4$)}*EM=lnoX9_$A*Mv`W%LX&8pijxqXYnVQ$<+oWrk<_qa9-r@B?e=R?k;z; zO2B(g0)yu9E{rjlFu)%!cijq}uVS$Qi&FJ`K2rju>xG<$&74!n&JAe_bW(N0ElqS) zJ>I=BAyu6}<@K!@dfk7_JzIITcC>5h>-gT`xu02ib$r*qd%T-{8G1u}ZZcf9-RcSK z_`sO==F^P@1tTx%MIbeFNwPTq4I+Lg58E_Ncfv$l) zt-=NDx_?!juZ#)Qe(VYKb-h`$@$KmJ>gu}@F1Rmw7DwIcJ~aHtyHvXTT3)T)YcEfZHsILq z6yv*l))y=Lm?_qttLMxv$FYsqzsoHykrRx;>>WwAMRfGb8iw`eg=uAxnA*g zWAk5Ai?WRupk!4$zce8Ywj-484|#V95f?tc!zofNkg{>i%36Ua5Z68vR{-l)1j^UO z7INHB5DC0nh-Up(I5C*@dIuEWqF`a3^YHd@nzl&M*dtonPa?(-kR5%$)5la~8Z1~P zUF^;(I+GpDx=|wgo)5y{AAso#Q-l~fqP|;<3Q{YFL%U*-3zr9?k9y;3;2r|9SU$r1 z$pv&wN2*dBPh%^^C#4|Yi2y|!c5{MbnOkQ)Pa88etz9!Un`sRj=nv*$uK-xBy>B_ow;1@$ zS;q5DEcYE=5Bz}8eStuj{U=Wc;b2Y+U6=JgE>$VH}Kv$yeQ?QM4OyPB#1{e2naNXlfCZMdW+qn zEPB(7!Bd-`S3_d9d!#=_Kx*LW=L_1_aXEtu@?%~JU~4;L4yaw_+tR*!D56!9B%4XN zJ!QU@5wmwM;59+I3Y>qwsM##vHHRmzcP_YAx{Y>RDNb2pic>vNH7UD3gMc07o0tA? zXxY*dRR8e`E*|~BolR_>9Ux#1`2DN@i*f#ktWT>71f~V7s7={rGot-NVj@@2-wrlG z18P;2>7mcYWZ!{ z)-JKUK_Y@Fc1xeYM5JW9la+@xu54j$v-)aXveZ9-jX$u0lMR2w365(wr#c%Rc{C@v ziMG?Y)6@ZO*ZfG!kinJBy7}RvP>_2ZdFtyUeR|3V1JrU3CWXcf#n49dHoa zT#?X(jlOMyDI|%}Kxr-&1a%4`PtAg|7Qu@aS3{rRf8vWl#F7UE^Os%bh!9h#DGaj1 zm;Db|JCHzkG+)cIRRrh8*L|n!4}yMqcCD+A#v9y)BM;n|*qbD+S?%F;%*4I^hES_s zoZtX#U0>yoZ%)T%wj#9eo!FWe@FilIq?p&x(pq^p&-H-gtE_NM;>Fvot4%Eu`)!2ygu;vT>8%9y&(sj%P#>9M|u6bED935mjFW|0^ zBT34H&!*;er+1)GvL1`n#2XcA11I=Ly0h^l4dgaNQ)QA$CNa=NB?;R`%o+0n^00#+9-??~14%>+7b zEsr4YWy5A3o-M$&ekyEnCW)(l+80CLcW7~C0wi+@jz{mu+xOSjP84QbP)2hkxM2-W z;ECmvQu6_l$8>;{)%;)9bP#w*Pf6AIOq3a2>upCEJRA~K_BV?r6ftqJrOy=9k;^;=N5EXHy$CqE6H@9$vK+O9Lgdo zaA|~~C^kT7Ajmcot)?mVMvBo}tY9jjhbl0XBZfd#QKcF+SBhu4#tB!de%~_7ET5kU zp+?9_!Kuu7l|6~QNOaXA8rRLG7B%I!LzZ!oL-OK^RTs^n^sv?s#;vHBK#0F@lRXhINF3bdXMO6lZT{%tDF-}~z=eLEIzn6caR*!g zKXK&uP|n?|YY|`bn+^`vXp%dLg?hse{s3U?4s#?}xHlqK^)M>M{Fw|taKqez`3+k^ zWhL8$09jFrr5!XI-jAKvbIF2L=I~7&)M$nM2*EG_njuR3qa`=xi&4xX<_G%(g$M$4 zP8{{XIyq4V_0Jh);?Ecc&(jnJ&)Ykl+qio3x-z5T_{)UCzmuni5u;I`zuH$>1Bzq9 z^A&3nm;I;vUEK59!_CK6cPU%i1Ozlf)8I`r#TG$)MZX5#E>z{2ugmq0w|rRJAy_?A zT0Kv&_EI<_%ruCSQ+#bgJSHt$J|Q^-zY+eMTyQe|qrK388I$JwsFP?z5`lZ0`a-Ng z;b0vP9!@@P5VNk?E&g{S+kbV2dJ*lwQcakVmcW1yPswRHffy^IO8?P%z4>2iX}~T6 z0CVRo=p(Jre}@n=Yq-mm5Y#yRq35?{?hcJ8 zWa5B91L&j`k#+<)Y7R*3x80wO&Y5Q{#$d~UZ8qKL7A0XIy}%k9>mE8x&-NwmSm=^>4?v?C$zJ8z8X zHj?(m?Gi>naO>XqwlZ!^vjg&3U_#`F2tLHy)!$-YVN_$Q!@H4Bz$}9$vMJr_5woJ? z)!XgCKAqVDp^Ud0IbPOXThYzPg$36a63n`+!1F&t1NyJ;?SF997Y+aaN+vZLJ675M zz-q5-9@T=aFR}l)5Wbftm=)7jj$XJkS-4*2Q1Ii0kMtJDUh`27SATecgFllCC+3f2 zsa*;Bc@yUI8z5OK_j8<;U* z^A2l39>fm+@4s1(6XGEojTH>8jEx}G62NY}(^<+)v2KJJT+M*%FpC^`uZ4=E6GVYJs|bp^YMqOx@~Xw^o)B?x zU1_w-#^E@k*$&AQD=W=SnTT21Qn%_t7pxmGl5$g=lkh3FOp?m`&lQpwg8HTqM8|`! zs0vDUUr^`AYKS+0`)AOh8hP@dsKklJ5`;M$u>@+THFR}u{sXHtTv}NNuf5d&g4IPv zi*YBHdZwOTpWnxm-|NMS=~MH?cwB~x#7ap&x0mYfL-a?T^D}BKDAi<#THS)99+K=1 zO##4_S$?Y{Hi$Ra=fnyMpJdj=`o^@M4+tM7+D1@wiNfwIJD~pM?C>g1L!3IENNA4 zj1^Fh0@hfxQSk!L`dJPqCsQaCOvK0al+c1$;U*P0t4pXIpk0+X&HBAkU)CRraXzfg zs$pHuebZ}^AT<{qO7=xQP$q5wpT))QZ0_5lfUk9AltU8uX_}J33)KFwOqKfd&xwHy zI<(hvm5Hr7E(ua_VL7BtZ5+Qcl*SGrW(vSli<>H%*IchqE~7vIq|{fPjj3DY>)|#g z!s%-F+6|m`e|Vx7S#B1| zK_R5aJCzyFo3+OSrnE-fRu|q4Ehjt%Bho4#>10W!8 zA}?*7g^|E6_Ln0m|e`w8e19^2QTh6i!VwOrE}Bct01R3!Bvp={@xC|_pc$g(9V(+cK)H&fDQ%Y!^LJNAp~c z=0rE-(3tCYc^TVd1DP7v?+$&0j|rO=_mBUFHC$EEzaqJmLvl z6|7xJa{z68{CnAT#kS`b6rr|9$C(dRb`Ymtd~AQObxU=iW@c*jb*&s4k|J)=48>UX zmNdUHLr9Pugs21pEdh!b=mwLM9Eu%WaM(-pVCs6knBWr&L~sZpoXf=+aw(h}0x@Kv z7VNSG)=;Zg%Q@jl+73JI1?Vy&dp$Vy0O7)4{r3c{Ea?+5&!gX?SA$d)5tgHeaj;yi z5LF>DQhsCU00J6@GZ)~vrFU4SKS>sBL#GSBQ9`bi|D@< zc2$4s<+f0qFsR_5ti%)gXbmj$tzgzi_%~P7)5_G_^?*vFgZ^0Qyj_Ag3AKRFI%qEk zno%{m_wLRHMl^DR8FOG;OSD5S0!p=m=9OO}$d)n-0AMBHmGHlVhW}s(`sF?^O40;a z^F}Jq`vpiFRK7*Ttvu`u6JkWfB>dRO81ecYJyW{-!1q+8C=y8tEP!5QfK?=_8PEk;#M%3 zfIhFbu8tmbqDFmWg-MHCH5j=?Av`FRSmP!cfVQ@>QB(cITX_AN*))+hx64~y#oN7n z=oPokHH@4M7NB0clT`m|XSo4F=cbCy{+|{1ZutBV=<=4PK26a+g?2!YLq?@c#Iyc< zDau4~Rsh{WsI_lP}Z|+XN?!*&;#8eJq{p9}u z1+tc;oJ^c<;L*wVoXdn?_)*chWlsE3-%y7DKe`PtE!}kM0xphCQ1CvbGEa|;{eCWM z++6GOf*K&g{xQY{DKn5|{A;IP8+B9~r8*u_z(`bnE+r7tz9_h2P!Aundt=8iMt+Pu zmh3pM^9%`y_K>e=?Z*}uqqE2xiN7&dRh6BNXxz+lhL_&lJ;B!M z>bE`*!r?RoQg!pX9cS+65fTie;ySFI(9!`3&-1vb1rrV1UKW?^cFac>Tn%liL^Mpqko{~|fH^vY z+80)9oAy$WD=P^3WRxx`foT+?*otHY5d(%a%9ZSuEd_C&N}wF9Njkk-XfpX9f3yKk zD-#Y1IdkdS-897>l&w1fZum}r$lb;_M0#S}%um1iD(Su`PTVR*7hmfmqy}UoMfPN) z55coWMg$u&kn)JM1^x00dXZ@ZS`73Bfe6R1kGw{E1d(3IpWt-q8t=+n2ptDT&1~JX zc&!I3se9_*RC8Ab8YikYUHe{aZv_CY*RaK%QBV-5eteQ^{DUh74nrx-hlq1Had_yY zh5_}4@`UIG_j+Ob?`yWQ!Q|r&VTZGd9}w+~)f#vKX+VwX(1(|8b$YId3$%YX@Losk za@g#UBE!(`o~!1_VeHwcf4$X|#gpsnwMA6XrhFf&o146(RnPV%j>p!Xvi)KftcmF} zkMm7z>_~4V?08+P-R!zP<`eid2f3xrw#CCurZDO>=RrSWQk5CSryuvqs|GQ`~1YWQoZ*QQQrisBX{ zqxqw>3<*s~k1RrlgYt!gVBLM%AxR0ypnMjfgrnXLH5S0Lw)b$!^mxrU)rS$_^ikl?v0s6Kk+b#8HkZCN z!5>1vq!#!HdgYLWFi;m|BhrDtv^^j%+AXWe*0)K34uB{$8G}Pc4-LDfqt-}q(3UA_ z55}NFqB#Y@+Xgp<1yIWsA!t0sjF_8i6#>%@oph#muwAsflfVdstx#T2X4UwiKnlS2 zp;-ppt!Nmq(H0oOWFAl%{j$Wm)hQ%~^*~brA+{(55U@T0Z25PT1eIX=($RcSfu*e; z>)|bmgvNIp=S~z)6|;&~ zq?4uxg)pQcWg`!NSAB@^KcqFd_>KtorCl8I; zwT0VwFSVxX7LI51Zm(!!=YGE)tWq-kz7gLq-KwMHc^nLeQB|^Yd%8RyF9GkZ-Lz%q z3U!m`BkxDH@6}%;eLvavW0!rim}Pl}6Yn1{zO1CN&zNPWr>`7@yFFZeKg;h^@BpP2MvdtD}r8SrMOsD_lFX%Ri{2-;^h6P9-H zE?k0oAKlf1RV;pO7J+!3GXw5;-LApf*#9*K4z`1V&=`1 zx?Ck!t=_ut5qz2)_t%I|f3SlgRTqxs7-wBh=ccHE9d@sO*ns&>@P5u|7=YnYGkQ=mG!U_MpG)NMb7z zZlNfP&s$}FZ6HBG-jsJwlN-%3dd$sg2{C%k-MBFqs=tfF2W5VZqiWq|yIVjw@;66B zCcnOojN6E>v5_h7pQEoRA-$oj2y^0ySW+eKsi-kYO*3ByRH9>9e(g#d_F(8sz)Ok< zAeSbdB*xF8_U+Hr9iS)UNa8dS`b2*Y9o0Sehev%lg^Evo8#0QN`}?}%kl-Vo<_3e0 zN{V%YAH@&{gfExD1~!-RH8q z%P-V9UwSLF+t|7tQp6SlCKl;6LtUC>u zPg2lJc_QGYHyW`O7S?{Cz!m(+eu!T1fezK z9GFlupl^4>62(C*kVeF6LcNaAa_da(nX>^tU?4VE7W#W!Rk$UIq>W6_LW4u33{GfuHr%(vO z&^Ke;5NQ`V-F`8dTpRG9{@JsC9%|sb4;O-i+)uu^sI05JJm0s#Jvi&CN~@~MA|Fc- z*HT2TVMiWtdNb~n=}lwJCG#BE}l2?Ug{ zt8{d{bi2dK8OKvzPO?yvz#WV*R1wxWIP9BAxr$N_QmunMLL*}_krxKTBzs-j-&TFh zr`D);Yck_g-Kjay#1;i37o*)L=B23i3Sf-NJh+hk+jxow1fu@6f{-C0nFYc9Ih5<@ z!Io^!0;WhNo)E2jdxmooE*6jeO$1;~WS^xkf9L3`HgqZW4@pg%rGLz8tYwjV_FcU( z+XolReAN2@m1k<-a*Gl*;HA_akwhIv0(TKkw7#4q$(!DnZPrvc7o!;$0pbJ zDu8@1WlJ}&Sg#1VZkCnE2^a5OPn&VU3ohe^AY4fxks*8&#mmN7&mZbZ?ku4dp&-PF zv<#2#wS#8<#Ka$XeO*FUFfb{h&p=ju3Rul@)Q07j#b902Nglik8wUV`N~2wGiuXJP z4q{}pD|I?Crn( z--OD)CLkU+hgNoG`*@WYi=py*_gKps!5zdUZC(*cm$?pSRbd;Nd)JjQ>~a`V8`!rR zEBnbFPPJcC=Ys4mOSZ0RA?u9?%4Tx&ov+rCRXt&uTSUz6KZu=xMG)o1-fU^rL%$L8bd$9oyi_LwqyLTe-|& ztNFBmQCEK_xElU6=g@@X@q=fF{G!!=e|zxlGqAL2+{?9uo|>xo`HtqV@PJRs=RbR+254Hb|*JjKiGFBK3=UueO#S7#Vr4>i_prV`XGcBhL6I z2$+nf1zc3G}Xb_R57X6aub*zc}iN}iw2XhogK2>6z z3lgAcswEH+ua z19CMSeSUY;R5`k=}!6bMjZx04YGveGEGgE+zK{fg(=!dBW}nQ zP!Oqzih-GUFr2cI=;DH1s5GJt9zi8osTJeRk2MQ_HDyB>^uk^G1O;@4%; zlSv@wY%t-JINb`w;_rQ?O8d%dTi|!@VOav2c1w2uK=bc8Dj!b|r|;J)7w00JxWKAP zYTliuciNfUm&>wdosVa|AiTT4PGnk#zk+wG&X!nMr6qF>sqkcz9 z=%gecz_8jA7+#(om58F7tG7A!e3>FBGQ*VMLWSus8RmlcaAU%w*R>G|`@Uy< z&=*X^hG{apLm^x@r!7bh5t7;dpn&i$l(!QDZTD2JKC z!Vql`;KwK?%a#yTTYajl9@WC%2J#5g7mfGjtPxEN+?##D;RwQFy{(#)B+(uqC6a}r z^_W2>)*)kdAlRcDKk!ATSiv5>XvIEAF$tUTlVH%?k#08&lZM((h+3^bvVdxvfp49L zhpiU$F7PnC;k9f9DITIgSS{`Oe+(zTA%~N*6ep&>_f7BNr>xKG!Nu&<5{Sboyg%A> zn0=s;&@A}+PP(4Lu!ujl86`Jmof~ME19<&_k*5_9v%uhI+Ypc;GI6%(DTxnbL0`>C zJ?}e}-G15-PxP+j<(rfDC4f)N5zX_K7cE!!K_~u-=eT8-zixK+XH!DvueU#@9$v<4 zGwUf6e^+Lw`{6HTxu2u1%cK(*q`I_}rNdy@1gf$po#3$BuLb@PX2J1ORe6amwD~B+ zDFedlQ+@ZaU7Npk*lut)#6O1geRzN2J%gd-<%v1*I~esVwB$r$CjewEK2_FeA?OD8 zJgQbALz}T9t<%vro2)#mi$3$FHSF@Oz_q%@h5&7|MW|;j)6Mw4P-Lq<&d!_otiUvH zHuww&=a~Il_2kn}V+njP4j>UhjB&1thIg?Dd)?RQ5m&tru=XzP3>6&WVElVA1 zOVyp)m%<@2?8OXm9)PY=o07)3I|tEHnWur!I`&?1jXKqgty?-KwXXA&YwHe!r2+z% zopcF{t;XY8Yy;0V5kNKd@dPadxU{&!^}FGu;OrD%#8#Qq)YkQH-Qqt7yX@9G;v0^S z4roXM88Su)F|pGzd?q*AE8S}|7gpoyd2%NNi68u=MJcEdPJGjG8#C4`HXJA6`*`)4 zulX+1ZEZ0jas^!r&A?q;Z>Yvkh|-e#ZfG(d$HEPy>otMl3)zH!{_Tu^t6D4nH+Kst z0;U3CXG&7a-~_~}aKQQI=_lyNM+h8pE=Go7Tx*kydRjzz2)d}K3fq83iT?P;u{f*O z)9O@R4c)w%$zK_dx%o&mr>L1^Vzj(nnf~_CBE}|;7M>;cFnmEWJ17uC1F$wQ<^z2a zD=x4j7V0(Efz$Vdd=Qr~eDO-_LxiRX85(#vrjq1DX#>s(QPGUr+L*nu9H^Hw35b}; z;FDpCsfaC!6GJZJ?-aP#n}Q7yEuZ4|!yOcDk!AGlJ<~ z7{WY_lT|C+F(M{vlnogA8eL*p!}I!tm<@I_Xruo5h3u0)&;0p2TC$Y_3MX**0Fx{b zOf|mU;SEp%d~gSwc!&h{grsRUj3m=j&lqMBZ-Yk^Gbqi;Mx8&J&XoES#qFxN@01q)3NrsUvl?nvWJP8U{lH>M zBYR+jA(Yg-uV3FoGfJgDU;u(NISmYyu%QK$s~FJxBJ7+ev`qTBx{57($|FG_(_pETrlBnn7^$e$8V@dQu5Azm3dPvFkIaKs z8iG!NravBz5A!YE02)$cHGpv0Q$zkw+Cw#9oQEuSoSXR&67sGU)If|J5!+)tJ+!iN z@CIn^4pxs9_S1{)`}&qJQG~DaY>q5uxaIHl{k*t4o)|jYsItuFQ5A9WA&f4o45xOl z0BhWn80x{X%m78KD%511sx}#yJCTNxpB;lhl?=QMn&=TPbF3UPmuJzeOR$ZDq8JV; zvKEz@1;i7$0-S_sIhuZ7$wRZ0C z7h6{T)=oea5v$?H!N>2z;qm?}YbnfGU&FdD`}^N ztGXlY0n{HS7Fw!f2v})gm4ZnY=Vt_xDR>{kn>tqJTcl3sW}#*z6M{!|+~me#e%dRq z{a8U(tQY+4v;T*!cM8rV+}eg?+jcUsIk9cq#>7sZ*tTukw(U$jvF+r~-tT|*?W6AM zzPqaHuIkkb7wjaL#}G2U(srxqoD~5NYTK{`E+<1Tq7tj|rqL!wxZ^Mi;sr>@D(6Q0 zi3X9b*)kNWOWo63$|9Nn+H#Bc+1DZo=&|8+B%4_KgX5Q@*GsJ6?6_E^z{}%7jfu*Q z&B8^Jc+W|RCnBm~Q412HU17TMO$NjIlP+M4I7v>qma)Fh^K@6X@|neCE3yDGs$%M4 z<({=T@t;hTm8)23P8Hy+9sCsT=fub&Msg~^dt3gD?|aKs;z8a8u5|0dHvy_XWL{8v zHOR6AaN9T3N1tSAc(*quYRbYn8av(M-TQ3pkR#eiX8N-Q#zW&3Bb8FgO=l-1Wr1X# z=P-*j6>c1_-rYh)eTqzJX3BsyTeOJHEMM=E&nL9^!>)IJbFG*AWtqrk!W_$0ZAaIV zZpfa8r9ab6`UP%g8(tOuBedgXwUBypJwqf7Y`y{$`K{rI)8Q_w!bOSk7>)jsehC%x z)$!1=(Azk5{i3DyqZ?f#vkGEqR&K)G=!MNs2J+ptxaH``lKC84_*(#<1Tv4~xqvk1 zs6DO+d{pPe_RLB*86^vBc+CW`KP)T>DFkiiSM@!A-E=+i6Q+7+Koiq{^_?&n)p0CFbt`m z?!b_sOiUb!^SxAn%e3j(b5^9j>vwgLeSt{5uCK6OFd-w&H!zSO*UC}M0^`$$f%c2*T?mUmZ2y1wo#bCyLBIQqDEGUHU-gbE3| zXqNf7clrlY`f@Ve*%`2LM@~u7!FV-ShV53`7GKv+dh$9zHasJ(f{}2bRbE;4SDxaE z>WcufA(Z@g*0*!;CQyyJ%C8`jss3MW^5K19RPjYBLQB$ucDghn}Z8r(@}`5EWykL1_A0H6h=SQv}drY#%+a;ey&JUIM#owX^z{? zu)`#YXaH6*kp-Der2z8B#4MY zgX0$1>94%&8T4wH1h@kcy|cm_^%}D9H=a}+oO4E4E!=_}x4eRb|1H=;Q)_kGxZ8HI zU-$68Ox=~pUKvAD-|~=YA-S0B*d(Tqwgt(GctF78dwxR$GC!I((v~bkYCWw{P`!6c zljbee4uQ-ViHc4yZ{%ngLk#ouK@Ehd9IGHUzzYRaF_she3hB;8!P6IkEiE}tF^3pr z{pPIIO#fnHqyrV7c2e-X@9Kf1dgIf_{K8PZ{fh`3%^2xwSB5&pr5=xzLeT&Dv>q3g z2>?Rhj>G`-y9uN;Aj|5jcq=F^rYBEts?v0*i6|^#`+)?9@W6)|)3(2BShX8AVC!Ft zOT*5pXu5Wz^R@S#+q&q!+EMVxv%;$Sr7~Gwk^mcP5<@U=g~vr1T%j?V;(9Hvta8bN z$(1)(f9r7^NXadk^B;9)%v@!^nDbm!TR>o3sJJ4Bys`zGU2jKvq%e2Sq#<#q+S8F5 z0n*jh%4MTd@6?Yp@3k#{Q|hH5f?@2+iKA)@7W6tuz9n}iKr^LZ!myS2H(C#1m36aW zY%9lB^U>X2c0$tER8Awfy~IhOrNTEdZw=VtpQ1q2lgVFDkEufz2k#JJgNt!aVStLk z(Rr3+5v8OOr0@wVK12zeyeHaF!P$|Zg;eX!7aM@phmaF@9f>*KWeiSnqxBt9%5>DH z)i@vv(UD!o`jZpqj~tKZyo(lxFKpNa;3Kzusw{Vqe&_+@?$LSZ&Z8`M94aTFRZ^T1g@3K@$T zAatw=A}vObsu2wh$K+Bi)X0QqSQbnwk-rr<0nUj6ZMpi{efg;3EO(Th$Vaw8LJR*M zNL}Z5m?ni!7oL)na&?-%AH>5G(&T)dlOlIwae4?$x7GRM#M@Dqg=7Jp3TPmv`;-tL ziT9KjL^1d`2hoELwSc#Q!-aKPK#8;#d;oO1 z<0kfJhn*^l7Lhl7C5Cf9tf0)iSdw~NYSCn-mreFiUs?$=I>iJFUcMqxOnw75I=%uX zI=#XT3qkz{Gtc-J%2l=+>4L3UtWMi1QDr*;xBYJ-qGP`}p!VNg{M&AWcS%0jbAp(< z`&B|oT%~o!%xO0Tl_|X8JWWEtqhz}ERN`2{DgKIvF=_Y;8@r)PjK3TbJXT1b)*hT} zfV+jiF)WnU7{)x%D8>SixVDWwgPk=T9$(u7a7@n{1*hlrZrU!E)U1Mb2+JFE3>6$8 zz*uRLS$jbVZ~~rSscA#BK-a>R5JAU)iV+4UWsqsb-G`z91(8A#v}viTfdrRA&W7F8 zXSjy0v1>8F8sQF42o`W!_7Gs;?CgnbFLM+D z#YwS@eqlr>G^-(II?^vh!G!fsrNXFa4#au^|47{w;2TC=l}yy9Zi`n@_ZFa8L4h|I zSDge_z&=4KQL>>HQB}V_4)iNKlNcQ?P;#a@T8`RAC%fYg=cg-cZ?&UqR1U!tajMc_UwG}vfRy>Kq1idyO(3NRK z4vx?Rz`1j19p3S)?eDL<^FLv=M^fY=rdBsMuLq;gq3X4IVu2ipM`CbWo~~DJa9idp zD383_dZ88;1e}38kdtv!OLcadpEz1RCWj*-b7R#!?#{**xa$Kw@o4Q!Cmq#>p6xtQ5`z_JbywC|rlDHfn4OTjJOCL;5Tb z0S$Sg&;{pXyk{FQ>=YLnrP^9pyf6v9kn`sC=R>O0bkt84>m}ec5^&wAaYS!A!bT_E zVPNye)F{IGtfvYMQVMoDU3uXhPbu6TZyLnm`OiWqBDt`VaNU>*Kg%To6zzh+Y~6Cm z*WOgOJ8|Uf?sYCa&qKdLPH}_|x|8MsT;Tm(Q-d|PWK$?EwpCoj|Jq^8mm41pW<%k| z%j(qK?2lr8H5U*ccXI#B7~iV7GI-{BH3cpPqh*?P$1OzDuQr`#AxT6~C2KPi#P6Sc z`UYbWIy46s;XJHZXoD`fO$0}fZeraV&OYpQd$>Fpbn0lA9M$gPtn9Q|w0m6x{4m&C zzi-HfiMIj5jLE9IAGq=Ee1E?8&?8XVra^~qrxy=GbLD4G>G6L+ak8Usr3|yD17BCy zy>c&mU$KjOFQjUYp6*{m89iP2F@NN93HbSaI2~k0*`F3qpZTu=?jH$PP*$jqgs`|> zh11)CH($_tFIf68-gGefH{Vi#GU+7$MZU*iiep?xZYkfnGYO2IgWg!a^R4OwMIu4Q z3Rkaku^uRluGN2M8LM2^7A+UW^e?#fqMHS3g%+c13SHvbQ8SAtkJlMjm39ptEA!gYvTmdIe0lOaQTeYUtk9xIRb$Q!? zHI;d20M)v0V2`0u!v7UJ{}0v$%Eb16!)d^!mh^w1T|LL@P$$FmR`i4@qAj9`9-J2Q zMWXvh326Rm1>II%35Mf#Pdjd7`8MN|vQK+9I0o`1WqVUM2c_x6mN;}IIJ|%d_oovR zoJ9##y7nludx>8nBeYWJza&w_8%aF5GgeeHSC_e^UX6J6pz(Rxv>U6`&9-*$X#gx7 z=S<3^%7;gg7hWtY-e4%Ex`vRyWRQM;c|C2Co?Yh3w8vomVhvAjCMXqgz>sYtgWmA< zQCzMpvAL*AET4-9Q8%>-wq!+)q8wJZ>ui`v%^b)x$$B6&7Bwm{@I(FJ%A+BdxdJ=l z-0^7VT;~|q6ks|C__1&X1wdQm)B#jb`?*+ICF#Zx7Cw?K*(X~#{G_t=TwOE1)0?X` z)n{ejt(P;vcfHrc%tX$MaPMO%oH=Hs#KS3QRd+!oi^TG;6{9aQ<-!yc<;~C;(LwjS z8o{LLsPKV>WY06r)14R-`luY75+6_bDgJ=EwnL=UfexB3LpX!b84b|=%K%VP*^8j( zNKXw?llDW)KSqBt)G`iwMh^NqVo>zCA|rNpp)=&HWG)s%W2p&Pzl6mKzzXc+bRn%C zioU73@1-W`Wg^)ni@^1VHS{y1a}SZmqon`M`X$=u2_i^|a4Ui=H@xL>*P)xbyzl?( zc{I`T3+$*cO8{$-8xP>!K}M@lXp)+R3kIzLWH87viMxwmr5JC}B=%TrQnIj_Zm{$DHM29Rd1Jfin>cwFh;srg!Q&x zTXRdkw!Z=Yu-kalh-T;7-NWufy<|GWx5HcmST&PR$UFWz=?^-#ZTZ`#Dg0hL0_&n2 z>|dO!t=q6GY7O|npQ9Rri$jHe_B^xI)LsuXB zl2jVz!&G|Ti4W->{QB$ted*V1lbJj@m6O2bmeFw63_%M?YFQO}zZ)d@WM=a14?94P zeg%4615QRRRLcE45)d;tJeujK8Du2Pp+s5G)T`v4o(;HO986|1-6v`S&_*zYIEJ3bPZ&Kt(`l(wr4?|b|zvTb0P6+Jm zFbp!LcIM6&L`=+F|HVB0vgK7vuggzG-@v9qR!i89uWk-*MuZ-J>nA zxAI!G)A6{@~u545P#g?I)f^9Ktc>K}nKwntIYX3?70T8%=W zA|YQU?iZIRq%6QgVg9vm5Fl}GB$`IdwT6*Wa13S~ykrc3AU&=-i8C17$N5u{mlzd|90BCGrUZ!*f$)2K)M&ES0}Ttkvs|61x~f z?j`e7s~B6v!vW6MkTcH@vH0NkWIxlungDxU12uM2f;6li1k)HVx0CDFLzqg&Y4Dtl z6{LX_FQxu*|H>uX>LJG}_A?QAsSgiR=K|CWr95h7p`~{nj5(V?J(2o`{xYsM zPAI53?nAg)B5QLovh9>($#1G44(q{0SW?cQ+~R6#P{d2)vcK{FD_>9=Z?2j-fQVL2 zhGQ5xkPY%@6R#M@%Ynl9=aiO2AAY@CSSI@)XR|4khdZoS-A$tvLg~#7_7`oo!-(nYH4dx?yU;agsjI_b73A7sIl0Y z-ui3-{_G^+Jytc*1;>(}*+MiVDAmRY-5vqm^d*wwN(PToyy4vneAMaR2b3K?Z2)Qx zjzf3rd2_*o43|zj$g-|uj%W_n?qiOJdB9nVk8tacb2~@TX!U*-I7Q4K0z$qocTZ}! z!ti-M*UCfVYFa@~lT2$vf3N*3iqpRh=q!1$2= zED8HrBJ%T8JlBKRe=aF)0zM#j{~%X6X#MKPjc;StbQP8wWRs^$3^hUM#!rxZIEaLS;7gpL;eUQ%FvNT?@PW zo*mHjxphdl{)g~+Yun{e$Q<>kMX+v4-D%Q1Ps&&w-|Z@{*-rN0y^5#9tP3476va%K zeW{3)PfG`upy+qDs*7}XRe@`IE}-%+LAR99O#Z((UWL-fuh&EP=JzVgIdOh%w-Ung zK*cv`Mz9`5ihj!(8zW)(AJ|iiOX%6DXY_9lX<`U$d2p5y0Rg>Nngy(75f=PsnC)I^ znt=wgmFxu$R5g*Qqzg9oQR+Xygz%u>%6wivHd<$w4eUEc>OmJpUD8rgssMahHiVng zgMl)1=^@Uysla;#Dc$C%r6MD>D40$mYpI)fcB!E%+KiN=h!8D_!}Sm7cw+CKb{_m@WjLwb8Pc@FXqxkd+c7^4~u= zisblzs&n?>NpDC^4JF)1pXE8M;wu{m`Dd5iFKL%grhYXI@xTTpOdzQE%~M2D^YhyV z6R#K6R&S&a7aB>{3Ejug$E${4n>#7;`n_*osdibld3k>}g%!8J=K+bT^-j}?=ZpK^ zu;hI*RCH5eb~Us6&S6s#9KtS41yHc=1WM>(tBgwIt>St}I_dC9WufgA zWlD7BZLN0M!R3LOWi%I!4P!=^#J~O~mnJ9Nf|U`djo`?E#Q}<#r<`eDLG3jFzH(m% zd`f1ro*_-!cQ4H0=}8UuU)@O^Ug}9T@aDf^#WT+!|3tHs*$XFZY0%-Vg;Qb}auCsv zNkSc58mnGs7NnPe1g{!$vgV?z>Jh9GpKxMZjD!sD@2}u(EXWjf4}@$hX6|1dEtzgY z4}#eJs$RIybOu;>5H|&Ps(5ZMG|av?cF;qf@icE7h&HmG-ZCrZiocOP^d^H9wVKS(*qBXlz6*-mH4i7emKSTCBY1~jjYIK49}bQ zIf{4;V&mM-D#e^)f3b<}`2ex%PqZ+Ud0xhFE&4Wcd4xP&AV>M1ahLVKZDbI3&eV*2 z5H>({+O(CfINa#7Z-hrcI}52LU!Tc5#5D}@bb;*&Nl~g2l!GLm#7+4ItLO@ z`fu?BboIVOTX?ha6^Q30)89-=x%)#hg|>hhDdU&(?xOXNN4>=h{P7dbW&P`f6s|Vw zieej9G0aW-D*DMRoN~3TE@(E6KgAnEv5YWFSaPZef5G4jU*}Wr$yBSqAVyR!-{GA# z*8k)UPF;!#G#|FWIXiFh{Op?&#qW?dpO^X=%{iudrdAFv_w3DVRQ$>glc=i7&LqIP zG7b3nOIdQY&F|(G0}w?QSUrVEVIw1JBa7Ygb}LHv1y1lQOJ?@U;u3CW>Aa`@6bg{j zg&W*GAy7FYw9H_9A1{aep4saDdjWRDzkN*9K^>QVl7ckIPB5n2CQ1q|#uO*<_$*Wq zhZ9B4Wz8OeLrNcHc)DkQl_Xk@Hi`fVwpZR|86sLP6@tiCl#&G>{z9R4wm}L{^E|r4 zHqwHjbj&cXCJd%|LE3L>YKrVbvPZPcJc2s0Ix#B>?46O;UG;S`Tdxf~eEW)YgNXmi zb+%L&cyu;jE^BSOj(3LLZ&zDxbI3b%$=w$N5y00bj^G)7-jTQEgRVB0{v2@h^mO#V z+&vs4#nmfUs_*+5t#77wSI99brsVr^w>Nmr!Jx+zTSKi`UZY2+ObuzE-M$-ulomCW zofy&w8}(bw=@&M_lm?qJc(+Cl*h61b53^mgKeUt{IklFvX>A&o7MC{pXrRSl0#36? zsA+Q9h4mDCEd%$%)5Ut(ITqlJDefV*E9U+bMM7BEAAmF_c&A9s)MPIfh%A!0799|k zPj$vK&``egxBMTGr&bLe^*dEUq4}Hd+!pZ-TbxM>$64CH?MB8w2q0YK@;~ivIw|h^ zxuH2-C+JDDpd*45AKNOX2W5+?$x?7`Yd9awO5F)4|h3 zDl{nUVYPzdxSL|*3+q9^;;)L`Ub`X?*6*HfE{WdtE7#CBtE0339A61Ei>o6Mr1ahmH^AoYwMf74h0y9Mx;Xl*@pF8ugUZ(QY1{NQUo;$eQVsm}op zzS~)x9h+=SbEjO*+336LKJ`C{YD;&2t8cj<3OgZFx7A8;&}BDk*r+=il+hyny`Fh4 z1sM;Oa<%Jw+;WVXUNB<>H{;VRGOIL9@m`JR?1ui}Jd`2x6zuW5KS}rZ`Xr6v|F0;U zDmVm!4$8>Nlqk4N3pn^;5&x&vOzc{3BykpL6G;%U1P;@rK_rahh>qMLwAjx(9 z^_D4qu93L{z7ch^gzGGW!_cOzz%;TCVyreI{9#cj`2MeT? zF0{q}?AVaVr=cPs8hUq$VrlCzHD4J^$xhPVsmJH8M%H8kDAv2lJx^xrC)e*Pae_lo z0^5IXK8@0x9PHRIMk7HmN{2`1VE7rJ4Rb=KNBT^vxa?QA=uORJ$|^<84N!`4CTbuCr7p8u*rWI1n{9Xu*wkh|~n{^+Cjxzx4z^9y~I zp2K?Z{M=0r;OsKDC23#Zn&y>+G#AC0BoAp;kgcPrqeD8ij|2ZcmMmlh*PE-Nz+k!*-zXg%=Ry*_3(q`MbV{jXV7L7yZNiN@}z; z6wwl4X6_{EJ#Qf_?R!;`)o&p5ZP{hFiV%_Y*i3RcNbw-OT@wCN6(w_C5d!13AP#Yyd0yx5^g zQU{UQh?&AjGly*&kZWNk?%ht*F58`D6_Ty|O`11ccnbP8%X*{ig9FKkCuGT9l1ViR zFj>0c@ZcVe;%0+RBZDxxv#jVZ0}7{F-6_p@ud&6QSsGA0XK-P|9h6%NvC>j=ct?Rn z1l=4QKULPB&e4Dn2DSi>AN8a1qr#c-d0Oy(z++udfYW!2o$Semil0H4{z zmxHxKIMCAP-AxC3jd|(|Fk-uo0VK-;E^dY?LH)_T0;5!vBW9&eU-Q@9o$Q(Rk&>3{K z6AM}#-6z3;>Ik34Rfudx=XW$*CiR(Un6246%T-j_Yu|prPihC_y#<_&wFK{!HH^{Y zKE^i>y;IMdmHfcD5UvgXBWSQP{m0@54TO_DQ4oykM{!T`XGVqgL-rwxi_{gtqbCt9 z5Jb?_$qO}z>*!|X{W1N4ttS^w$e!t)Js`=%v5o*sla}}O^`0DU^(GP27Mc68(MxfA zj?5y8ZZ<)o;|N2IQLRzP$HE{HpJaRUYOy%$u{mQ1s=MSd4w&LwYuw@x-*nykHt(#z z%&JHSR7=1AKKaV9W(SR|C=U!UoM1}-Zv6O+5dnIJEkU+OC;MAGi=~(r4+0i0I;H2! z4EfG@Y+^6?5P!?#!Vmg4k!jJ#D)!-PdIit5g2eJ<( zpexlVH+ZS2nEbTFk3S+|nnIr`$BFAnhf+15W`M|?Tb6C^?u~HgKu%+hfu)BWZAFb| z(XyDr1{FLQP^DLSB3=RGiSwh>@(0IIf(+D8P!KsAFehz`qh#v1l+Vy?J8f?Yg#y6@ zoW6NbKm*S{b1zco>LOpD$e5&By85?EC9a-Ak(2vx>PbUep4KLIn@#l}P@-~`kRkkq z+)TE0x!5xMi}05*yFTPP^UY?nN4icAXXfVc2zrJUYmzBHHRc`N7Qs;HJsV$adCB@< zcI9^LYZKCPu?Z6OusO85VScPC!zoGuu09w35 z|DYbXp?0?I<AM)7(fGb$P z&RlpPAl1OT$hSP0Z`D=3Dp7Fl1ROQ#$38RH72}`SJ-!67OG|*o5-{X;OqL+p*>&hF zmU7t}G%$gOh{ya{CQ&q8ISSx_11)YQr{voC>CQeV7>b3)X9X37v-)|Gi+0oR{_CKfp z0T8mXu>Y6h48q2idiC(1vgwE3to@@*{Z8`$-XIZ<2pmYeVc-fLz#7>ih#_c&1|E=3 zlKum|c~)qNWEzin%)RNl^jJcq!StC2WweNLpLA#W2rR`PrxebH-#rd%4!oI+~S1OFAsZS$uOOPXelkx|`A(507Vq>UMfV1^5he{0x zX9@u+5A7IntD%AZv=eOISeF0|acp)-tTD)Qe%;nHb6@d06%c*?_9XRqo$(37YR{K z5(!}%L0FY1BfM^*n3r$EO4&H?sv(&38o~I_gEG>4kg>=GNl!b-GRQrGF`pD-oMbPQ zLOLNI6fa9jJkDVGSsjnT8dIAD(V#m z^h`$wR0Zi2fLr~$-u(MZc;tb)XE-XRj1Hu>u>d`>pm~{c7q8LJ!z9|Qavly>j9WEA zCSG-~9=)57MjS!;Z}+2BPI9zdMWvGC-)$NkTEM7x1XM?pn7ZxDni-pRsUUvlvKt0n zp=V2$yWE;#rmF@UD`w`BnIxv>9N5}J)YS3UeoeA>qrmS8Xfe`sCTu6yxRo3`2FL2g zW3ogKe7baDB}Vg3*ix#3_)B`c-R3`Tsd@T9?2dnVkMJRE6L7=RJ=U3S78)D`@?vNw z=>UzMvlD!wnPSoRw*jwDUsw5m|0aFX0TKGa07uu7|6qTEyJzUhg;i7jK>lOu%L7;5DGy-Vm{n!3Mn&d7bhE9;L-#MubMGu7LVMQ&}5g?gHc<6*t2xU)ka z*m9bq<~-+j$-}V;pFD?Yt*^_5e#i!Oeq>VFkIMm+#{u2Zy*p~A>XKu@a9K8|{N1^%mAMx7dwm_(TW)~XwG8>qaTtkSrp;tb~Df3JRBX(Bz8c_T4vK%@Jp!JQ$ zuBAA%ZQ5eB1FhgdL?Vt~*ok==H%`pC=Y*;86;0_v;ZUQxkWduZ2vJTdN)2z=vuy<> zWQ~R9;tOy(K*-l7d73vSa%%jbuz)n1m2Ai8O5Ygn0(J+MNr&8Nv%I;hafm!g)y8F! zzRf1|GoZD&h`y+bby^gyNsmck9W84eeo!|mX{84PIG5>&n1ZLOlQOHsDhn7B4#%5A zln|YObm^Bntb(88H8^dWt~}7B#aAz|w0E)uXbS8R3z*_=vUPcv0fqS*!00>Lt|lTz z`m(um^O+^Lv|`V*!_xVI6qQKRI++$5Q8&?^FOhSL@5!Ho>#Mk`vWb zU@6ghu-7Nur_qMqQf<#D0PmI14mvtgx{UXXt-9;+*tw8MHllzo*X7~N95O9haJAevWjNm)H;kFYCUhWiP-)w zuz9By{ht9sEX4Z`H-l7?`nvSIJPtzWKl^QA?zF9$fc0Gc&(ovj&2!4MLuz?v=Fau$ zI}LJ0PHC3vea?(68}nR@RoN}ujJH&xxmI-=e8|Y_$j$<*nBnq6!0k??u0sb*qp0Ga z2=aq3kK}W3g(TT&sA{3YfJ*&8Uw71T_d9y$-WXQsLy94#;^h<0oZ6=%!`@G$qa9o= zrje7|dYRrSz?G6gL;W_ULdmAY%02YwvM$>gGT6ferb*?LQwG4uU%p1QD#4QSbqDWP z6PvA|WlyNMp&MmO05ZEhLJC*CV9T1Q6`+6AqQr?39E49#NyMMDAmx1ts%86R$EQ0U zxZsjG3!45?#&IhGF5R!0mmT{m`W&T!mnAjDss-;}pD06uy&*9%PUt1;OY`9X=PH>a zLhmdd+9;JOV>c`fK@>1pB)v_hlN~N;mAI1c`~J>aU6o@4fN;Ls{0(;r&gSZbpD8#o z9-cTgoD#)%j|E5R-CBO}-Aef}vVoal!JQ22bAI`Cgfe8vp8{_OZN1>1Ej*fcK&sX$ zN|gn|FpDy_N6G`BU`e1@i7T(@25y=~*0`U%_|Z9Z(6{i^`y{ga-TZpgQi$k8ZQ8X9~;l zN8!6P19!X?F`t)73vE={a5wkR9o#7qrX@?Ro)67t4LbkKB*#^m-s4}-&^VzWWY?F* z33xuNZS@HfVMoXuw^Wfgw9C$^&qa}?u?fB2^ZUL5!t)(D$W@WlQ$AW0NWn+0A847H zsst4d)kN?p%BA4Ejg!TD{8$#Pu?@B0cPcD50!-3GBZV93s1rb^)^x?6!EW3^3OA}Z zuIe+^DlQG))NTb3A}J_KiX?4{xZ2+LprUL%mM&i23FQ!?4dOG=R5t6Xusi8InocJ= z3w%}qi6C~`D=9WWh<->$9QfKuQHt^|i?;?}W>?M-q~`QMT3nVB2pPtbUuY$fPVk$n zt#%S$q56&tKp9SMJcVAt&=UbqO`+HB3oCZ%-L}{$2o@__=#Y8A`_5?m?L6=#M^+Jv zJdD~|9FFP;FqGo#>qkWHN_cs?j3hQx`jbuow*ZrgN?z(vENDB(Lz5doe?@dO~EVR+=;mdsgO)6MSv+tB1S z0^|tb1CjF=fv!JzoSMnG!567>B9CNlY`Sq&a&Q~{^o9z}@WPj`?ly9G=}N*vXHPbO z7tg(((zg^j74#j<{ouNELSSSqCZIeg^iGHgw_(+ii1~ z!##(M*-V=v*pMVxaCQ4yP@64?9X-zgP&0+PGq+(ND)L>#m3G`0A`omzL7kW_6R+*M zQOP&F4{qERbDp3?a`_9KF{$SnWe@zK3atTP@gnvHzcAdOe zgvDQ9K3Z<6Kwv>ZHD&EbV`HffTCAcpBC=s(oga5(5dMk$S0>ywC=dviyY3kPgH+Bg zEm4Pmj_znqBZ6q7wMR97Np`~WLF0n3#HV~TRpF{lVFqB@va|)aIkYBHmUAlQ2RZC z6FF1=dESCa_^_Q8R2>kK>epccyf`^n-+~c5ekk~v`Hp0&4a+?x!Q1^UA(0wKnYN2i zhBnyMqBGN5t!V$Pe8i~BYA${fEcjqRle}n9^l$L7<@rV_;@1N2Q=sv&soWRkW%5oG zNvWp3cgx|P20H2?8rt{o(@4M*4u0eLU~4%n1QEfrrpB**L_f@#(aN!QfJ0X>mAZK8 zyb#lyKH4TSN()rVQtaesVg%$&R3)Xt9I@^iOb2KRZFrl%+*CmeBnsoM7~EVDCBI?q z0D}r3msq2d{J4-d+e)-4q=ZqrTg~J|Q_M)ztg$E8IQWeRp=P2b#yiP&lw&zu&7)$} ztyqdwf-9p54si=ans^KY@NHLg1yx7gLD#{%g(p^{fLJH<8?R~~d^LIs6A>f1-r4$9 z+O#$=%tNE0F%+fXI7mA0gvm$JdBNl241Q=H-SHQA8tN+@HvB1o^?G?$fE#chJnOUH z&Y^E{{HsFlC?cNY#ctsS1PWHPJKI%9GRqO!q5sSq3DXrDW9B*sU@E`*G)8dGVUQlv zEM1b*c_v=(p511INgQ(#Fg%zTb?MJY#_^)Xt~(2XA_Mr9UhRSJ%m7*EIlQJv(k3sP z3U1Ljnlfq#`<+(H?&D4Q2W7+86(cG%or|CBPP6zVxt??eR2bz({nrc}dCKVZzhv^GZ8=wYPtV z#V65$-?VZHB15**8L=iPqIm~Njnj>R$mFCt{de*w!0wCy9ISbatAxa2k^i{A8rCTZ z>Qd_69JF$FF&`ZC4Srh8U{h&ins~G;Rynyu37$Pe#UyD(LWE@QlY{Lx3E&pS60fU? zy$k3rev}BKSMmKlssXR#<`L$H6R=c7QEy;fwmO1+wlF|mUcWHLvO2U1lzj#U;pyS$ z!64v~`F-91a6?GY>zcksuu*9wLicV?no@VLL%v9hncxUgn(fBiWGX)O26cn;Gd9dn z)ulAtGUO_y!ZDc7$q{}R0gc`FzV!46)@6*=R8nob1y(`VhnOVSsWB2rpI!tC{*v9e zHdX-~EsWmIZWtlx)Ekm99C$L}=3!eo1K|*rN}vpO;Xd98#PX48cW+z4pzVcC(C zpw0wxVu6&QVqu8Mf|CNwbmrP}s8stP=`N_$HmFpEa`VX!^as78cQw4-*Un{c52own z1x71Z%ter*1E(Uaka#c>zm{07W3Pv!lS zduV+SHNqQgnehlhIb)?mR*D3s+~N~B2g zbkx{Og{Lskelq7hXQS^&MP;CPSyf^zL<703$Ag-r-yxc7#Ivvr9LOJmZ3D6@1*w7t zAb;5&u(V4hY`;9ANf_ue){y5O49xSeYimt13R-g|+;KvwYuMATGf?|`4)ko5#VllMbOPY~j%F>6!TTZY9y!vW+ zPKb&5Ps*t#-(Pg<9uA_MjWqx9&VqCR;*RvaffSQSm2}!q1)-x>*9A3 zU+Az~xCu(VPT{{br0~tr&L#;lkW@9(MpmWp?oz^zAO(TEOYC_J)q{>%OWg$k^iiAL z{|1yyi}jL&|Mbj318(1(MLJSm!XrGg5!Av0eRHW+!t(YQJ~6I*htfUK-0;WdK7xJj zIj&rVPF)}B!ZdWAx@G9%KBp|ltnI}-OOolSLaw$Dj7f%>IrE*j6h8Nb!T3aC8f#$5 zTAa{YF7@1#6)?Zyu|-pppLgQOhHloiV%0wE@6UR()O9rfpOWFHV&MFbl6dN}3HXnn z3AS$RLCfu@Z?G|uA7(vz_>#Flk;JBrUkhb~>t^aC?~RFPb|tO+0sS9g0~ zKA*PTd@$YozzaG1GAm86zZZWuIDZ1zFyJ2mS|PpK!|$SPr8-SFdhKAEfnzFc)A9l& zAor#-JNdg|M1KTrT-Y^zFpCZI?wy;JE#q$X`FDe8=n7e(3gO6*AkS2vpBk(~bJER) zjN$Xlui$NnSNBTJZg6ckMws)@r;BTGuzjoENQFP=naw>|F_i~|Wc06B;P3z&9d?A5 zIrXjbQ??4p%k)1mb}Uy62vMav1XHiy>AL2#M75(Hzh&56mLH*tGoSjs;HUj5FT?9A5V6{98Q|8QkDP1ftrax@sJ8CN@UA^sGQC9` zZ|8`eHE*$7IhD^XVkdzt(?3+hV5#IaFya>QfqApb7amNkpe%MeH7mx`2Q2;}yftl=sphztGfjNIpXZTABfQbFv!;FJAN&DbH zigPH^5g1Wqg&}?@#HiDk! zjCoOs+ZRF&H@4Ux!wPSN-m>5G&tG43I4CPaW`qT&fqv+ZFhQ%&%O1LzEQA(`J( z9Zy1q#elu%WuYh@de}r%4Jy4+?&pQ^P(`sL@ z8~0fbgv{`yQbZTjm`^mdul@S?MFd;t8snHCEp6F>ypy+5bTMO6kt zNidLFTilcUpuq+2u$nX;6dic;abPDL$}83vmGN6C1LZ7r6?yW^fCICy?_f2LJ zczK?AQh}CSNhHvK0$5L}t1Y0WML(Js z*XrYA&!8fsgWcp1#4nBp2V+!P=}R2F zB{>Rt{1QRhoxz#^J&Xr0D!G1e(PNG!>Zm{P;M?t7VfhY|Hf4nYtgHWn$@!rU%#>vO z4dAz=zq)YQI^i{L=*SAHxkljn|Hsxl24@y^YrC;++qOEkZL4G3Pi)(^)3I&awv$fB zI(hg0&iQto+CNs+s`Y!;sJX_t$91Kgs8dcN5wiWop?Gab{SJ;j36Rg@#{73- z*fzpJJU-8mzd(eg1rhMI<|g{Ej*f^fA$~g8FV&hU$sqb?Hvi8Mk;@;b1)_$4c;I6? zY=r7OVN#veHhG+|T;ohiioN#IC8DIl^XfQpKxk3k0GA~)Q$!+}TtN4`8Mo^v2MD9S zwL$NzXzRx#q?Q zz=a8^l7iOKk+ffAP;HJGYmA^6P$i57@S{JDuLRU$pnKlwEB9Vc4tK?#3!YkVmFzG0 zw)_@D*K!gkL~sU9XhJVS1`v_?FG(`>FJ?PCppL?wxq00DO=o1EBu&QptHkcGycZ=P zR{1`(p^erpy)@IN?pk|s2b=Mfxm!B3K+`XDOp<>tSX%e`*%Tr3{%(3Ru zkqFvLYeHXMGZKfA<4_q~ z_Ui+Ba8U3V^B)LiF!H%>eY}8cH=k=QL^vrzj{Q_Mq*k1z9P@K-RR`B>Nr_$x?PMzM zudYjnBERDz)V!j1K~-6U8B%w?=tyRI;`_InuFE_t*qCp3W%|54tvtQOn5(VbMw^>k zDW^$;Ee-}IIsyCyLC+|`)_cU`?utxSmA57Zfv$N(6*X9sPPBWmf%CCi-Jte}?^fMW>RCB5gHEr@skXdzfnLC7U}VyS zZ~sD>Ighkq+-W<;}&hHJi2$o3Qi|^_t*0PnVvK%bn8z@pV=aT5B z4!DZNW?)D}SimWlrckhNnR^Nio7A7Tq~RS~OU__d?LrJQ1Fg*K^u0$lwPjj>R#)q_ zv+|({R@mJkTi%+Uc4)%YKjb|sV#NZr^)Ey?j{t3-n6K=A_I8&bQ-EOL4}oU?e=iWI zQ{q{|*93$?X?`8QoIIr=L_Hyz?2xUjVkArKPkc&gKLDq!&~QOrkwl-CWmajB*a+O$ z5}mm9e-@$yo?@0yKrkyN*i_6BSZtQl-(%^=p^LiH-4~>^F?O#K)7=>&hzYNw;Eiy_ zG%b+}eCVhMAJ%sa8A6MNaj#WnqL^Tvr)GSfKyB@HWKBi&u37F39sIi!EMFNiPX$VC8Gz;Yn${C*4Q&3nT~KNB*=iKwjet709o5 zPw*h7q3NGZKJTH#9LCAGpe55FM@yJ0vF#(IWpq1kY>roC&91AzK79LxX!R^F5y|vD zr3g$Nj>%E%B~r;hQ%>#3Ssj@NT=U$Wd5oU*x&h%RsZz`&N3e`|HmNM3s47Nf)RDfM zX{2lyZREc})H|8*;;~Q@F8{Ss&;ze3q@x|vO%IE3h-HfjDtHbQ}Um64T(QAaHc;GmjwzsswU%&6q9>DwSmpdt~7=FP8jHMfx>gZAPp6y2mOI-@SZU zew9{MK|Zp?VuU+N*)ciR=Q<-k){)nlUBQ~Ja4?aczn_obL^jv}8$9&gUDqj#G_7k% zX!x`k<*NM%=pbgtbk?)wv8(8c(P)LVE`FzY978!EoKp9sisotOTZt7aplew>Vz)eK0CdiAO zuneCq$s13M;Fag302T+wd{ns^Uk-zgy`r+!=&+ff_J?h0F4WI>-MH0aj0ezY z9sWqbuc#4PR-PqI@jB=j5!U6J)vK*=GcptawwNWA+7B97YNOk*-=cG=vrSN8%OkR! zd@>UtE4sZ%_fF$BP=anmpDcM-F>B@jV*G>3_>SlI5lWsrM4Mx1po)qZwl{J>NM^+- z2wGJ+N8~pABo51P8QY#J)mJQ6>INtke>ZoUddM=|pW_9FC`zi{WC5*&;TV+{wnj=1 zJ=}h2SJ`T9``+YY=Rt~vNx*H)kF_dp3LtrBybyQk^FZK5F&vbrB)>IMkIMCnl4I&DlyAs#p*ZU5=rl1xF0OVGa9!V*aXRe-mvw zarHPd1jceFRWifLt8fe+-dz zcZ_#yYPC*U+K!TQJ0!#d#LyGK2})?t4ajsTug{*djX`drBEJGAYd1eTe#lI9yfsoX zOw@{e*vnFZ{GPbQ1@)mHcSdo%~ zr=$)O&eBiBR5W*q@6=NWqgkv;dJ@0AHMB=FCho%TB4+E|M$vQ4m_tgEBB&;SmW1Hl zZK--<#h`K1Sl3FTJNk*QKMkdvqJ7g2x|}3SDjkBcR+~O?owu&9)!qJfaaxXNha(my z{Ql!A6%{PZ{~_rwwCT%TFo^Pq{kDH& z;w9zW_f55yDNOpj;ukicaZ40p%Xb19mlKG5sDzmz53P~BrjFMe4tFwdtF^A!0nSt=hqv>-5)LU1e7NMOIqeYZ-w>l@eJr&>v z|G9^RI2}58gZH=Kv<*G}u<%G-D8}2dA1ICc-cWh6Ba0A=nAjVc&H^rdCUG^BJHAd! zk4ei$c>w~eQGq~YwGS?CEmwf4z)y5vL}AZT)DT-XUo4 z_v~V`<%vsOJ{WFP36+JQlA8?B6-xFl`}6Qn62#5!LpIaxcwzYSo!B_~pxkvQ{VY`` zX6e}PRrd{Bb=%)mlg6neCwqSD>|i92w_Tt~GT&}*Z!AW7Dx2S>b>(@B8ic#@21;K5 zP+vX>0}If8>Sg!7HWl;C_usYN(RLvsA^wSElV*8aOhb^gwscqrGkHXG4m3{b`;;W!2c@ z%WVhYlwJAap8SA?a|Q!SI$9%6i$Md01m)o3OxjPO1H^4GA@w}a(mjHxv0BF+rfI8f zNK`BhS}lupyLbx@U6C|E2fEOH`BJV00PR$&Zi+0!I!^KSWW4f^W^c33@INt#cQ+c% zWPp|_HO?nXG4!9LVn^kx&WMA*ZxE{g=Bt?aHFNJ5UvThA`+an}Jiw^2|Jj)Lb}YEo z!$|oh2UvS&aaf~_(ozeB2O|zZ?1|xj^Z;|<5FNF^WKWZOgKGyr3dO)to#MCryZiR$ zbUxZ_{}F@>q5+n&--8bZygB3qY^lxQtO>@-dx<+o$Z`+<&)Rojuiy ziEL5J6WSi4yM}SrDM|$@Y!6>*RKB?Wxo!uI7|{npj#Z&E`W!Kq!Gu6YLXVeT>gYXf z%bQ+EHIoQVbsgA$DNj|Kvu=85$aaZUBGIIQ87SU}kF4=gk%|5f%{~bgDUrtreNq)6 z5FkOJ`?_q(t+NEL7pLVQn6-UZ1T>Ox_~ocnhbrrjACIu9vtxy@fX|W$v^)v?*Khfw z+93RyC#6KYEZknI&O`RYKWd_GrHn;DlsDz|fUww4qz|n9T(xngc|R9>fWQv)m7o!k z?N~6qxYUKS2EXF{gyf2G#PvGuw>3eYz=zKlE>1IK&@V=aK*bMo+gwbs!Ym5NpLLxG#L!k0kW-mN=hJllLctF%MXCll}VckGfh?qZrD2a84{!_MxV zt;p3K4y2Vs?uu7kR8hGdwX{4{*PfqIT{>V)le*V{8RwZ34hlL8Sr4io=#lS&iXjq5 zP9id!=RnvXH>L3d8#sXrlv#BpDVg=4*Ov7{>R!{NRL>RxRCqWdvYI9fU7DsE!HsWB z*cgQ>XYeJ{$mSY_4xF^O>|r*Sh?d%<@wnJ9xSrLcw;e^ryDDB z5LYNrZ*A}ZV5A4FRTNo|P^c1JPsXPH&YKx2@%)P*#Wo6W9iX`f{xEfAgh;@P7(ovD z6Td%aNahi7rH$x}57QMA6uZU*BY9OH;tOJH080?A%mqH$oA<-R9r*gT6yubm5`MgM*$e8a$jqmk ziAQfhS5s|XTL?Le;0!>FXV_0GI2%fm^{3W>kwee!h{T~qAzPXxeRMd*aK^9}40D!B@%QeIM$?A-pvg(d^d`leu z*}zPkR*($F&M8K=R5WWAM@yDPB?d%#V;&iEJW{=O#XJ!^!3<4y0Re|yo1L=b@nX?= zifWff(UtqxTq1ggY~+o8nfbM%gm3XRQiTb?R7^!=B1tSpO3%{lQY38IOly9Gy~ACi zN#tK9zQu3?`gVIu#x+BVl1Wq7RE-?XaJZCX9z1c4W6!BcopVfox*kEJa?YKraJ zNHj3`&nED+BpKy9kbhIGd?$IJRuHpzIr3x+7PZ>6yxPDM;=kA6A1}~Jfv#T4VKYQD zh_GIs9;gdR!6{`h-gqJ)kLi+3(U%t>G<83{eO;EPfOzc7-Q(%27kexJlVmLlb^j4_ z4@AWQvJpmq#M~|q4uofBL(gG{n~R^>&!n{~&&y1GF7RzcL7 zUdw6%g8QStB%xiJpkG%U^Jl+}CnoO$w6lDun-$V=Ieu@+^KgLqe@||i$CCjbuodrm zGsbIJoGy-1Y-TM~>4De121i`R*NxWFA4sk|jYo(4Aa7VesVrEjJ7$+xxXp$&PfUvg zc9CPZJ-{qtbReHpH>bI979IGe9A!jit0>zE`?V!_Emp1Igmn8H=)sa3iq9C9|4`q~ z5miF}B4Z$G*mCfciCAfiX!8RooH)Z$sqb|`G3Px20U7Gnc`Q+DRTX8YC-D(2G9^pM zv)Lu5uyLaf_46i*!y=s=eV(!VH^B?CZPxHzWrdV0Zwap{J3=e`C&LP4BKHIYx;}mN za@;?=^~Atz0#MwP<7R+bOTGuBZ6pQ3@nzkn;XSm2kD=@J{CX-kaR5m6^R;U`sY2G> zNb|b`G2^5q6DXISVk*G~XU7$lWwj;S*fT30g|ual42^a^P+|MOYr+U}Rz!8}VJI9I!h zo|-{-M`d8qD3pYOfp0^5hn6!QwkcW4d}(;JU}BP_Wn}Q)JVl&e^s4K!nd>8l$y=Lr zdEY(ld*}8lr1y_5#an0XF!F3o9gxxe)I_KrI?|`Kl0vB{iZxJ`$FZxw?+<7!r655w z>Teb~g|U<_6vZNI{&!YqlY~Dha{15yYC5wbqMJ)PT-40)i+8r43}UR}J^m%WrG`&E zcV#8%7Y^oL+NqUI6z_Gdovq0!j`6D63Aiu}m!8tCO)B6e6Q3$q%+8>lh1}dpmGe&QsHQGW;2412 zE>Yk>OY-bV$55TMQZNyX2Bs#&kxqFoHh)e4dfn5X|D`Js68{<(r?1%(n zi%yQFkd@KOHkOHmJ2k;5=v!S+>*gf%Pf^hfNY5=aD+*=hvWh1%^$*ggX6AoTbvo-d zkC#cGQS(SgZBdz@0x%JmUnRF+5`a~Lkir*8!!0DjZ%57vRmy^zH=9 z|I0R*EKp^wL!iVrPmk`;GQ-TTYwcaLfhz+EIXcF!_9hny6Ze4N{ZVF4`u=&*tO$Gp z*P}$nL$20mnFo0Y+7805jbLJaLLE6QYnpa5DhE>-aWRQz0{9=4+{qPS;q|}niy`7) zD3f*>j!U>xf-^0P6MGEFChpVC_~a?*;9eoDz#-&xkT{Ff-HZ-ysdz|7FlrTo7b@O2 zCM=cyK0b(NnmOp$=yj&V32h;L^t9n^u1-A=Gs+$N@dQQW@ld0wa^q_*(mWG2T5<&4 z>U0&gVcbIL0o1-$;M4S49$Jx7`=v_a6@!ur?4OC9X<>-(IfnxgWr;^d;HEof=?+1} z`_C+U2mD7mZ|&{tKIb>#!?rLiTkSvNjNUKR$@oL1ZqI@OZOj`D-nU09%0Jz4*<8c8 z`NE8$_{O>sXii?QOfD!4SJyriu7KaFrvZ?NCSnd1q(t38F zezvf4gzX=8VtQTu^*))Sh-Hn^8H*?vd&l%rkqzzJ-0p>lpZN6O zftUZ^))EItT7nud+RshV=GLX3J z)_RbPO1>mbBYvP+-ST=d`zWX9s-@>!kbKR^NmqLLeA1u%IL=1@wVRm(uw)=@=1?=M zb-0O>nO>>?VeDiZk{tx=e>H!826_S4+NbM_MbBY*fV|5kD-Njr*{Ba58vE?FY%Jw+ zO-0D=?%8*uU}`oGS6_(IR^=WWB5k=rfPnmkL?{tb7Jrrk0uxb>R!o*XA~=R@A-4*# z#w3J-v~16_Qd5?m;%Yqskoe#()pMh&^!1k##ZE}Tfy!R^k%yh}2cl#|zc0{8ER=86 z+E+eo?n`f`$&>Wdy60YGe}+b+LqT*DijGcP(lmy4v#Z%;CiuM%3kxB0;R}vqZMj zQlsZCy@Ph?=w&3dfwCsF2WCot?IF*J46zkhbxp}V)z-QVf7SNdcNSiD)`O5Z#D_@b zqL|f(RYlx*H_G&reM@2ml8_`yOv(@}K$;wi^`pl`WuGUyt>Elc0M5e|D-7Hi8Kh9+ z-gk(`ai*4i=(U3YTiN$lA4l5s@;>wvC=zPh`zPMLoK?76xvpU5ew!f&f~vxNM*`$&BBAo!2^K&R0ODNx8&_R6Okc24J5pBz4!`7-Cl@<@LF<-HDpRuv|phLrI&l0A@f z=*2C40iGHHHbm6N_?$K9uKH|YsC(a|=g7s>#78@*b9~lZE^Dy>orloaM^@68*+o}V ze`@b-3^&IGgpe2uZxezRlSNRpZ5tJWrgi0p9w8CoF(VXY!9fCGjO@tR_oo7DDH1)K z1(t^K1S|?m2IIi4$|yge*39I8C5Togykp`l-iJGnYXv>IvV1LRO-p; zXrmgVL!&f$jL>+YvKf)JPwHlA#)nthk8kUI5LWPc?gx@_z;X}mc9$$TsuikIW|AGue>3BG*jgK$3s(yM0EfKll7M_^pgVP^boiZ-h6SA1wUwTFDwgwxNd!CRETGYxCn!0qMn zmpI1kJh0FYi1hP}hh zCx`PR-exd_j|3%7t$(tkLsn<5Uk~%qxT$0CA`1{>s zPa-LV<3KC1ZgNMQO7W_j^yhX5VtdH}_@l6a-X(}^M)JxbCcb5x@oo$h_pwm+%;&h&Dd0`YKMETjscy&OB~&5pTS%hGiu;l*|RAo>~8EJ z6=T_n<`?7zTA%ov55RJ0m)@c5nBuwsz!7lbTWoSpr>;v%6}<(c0uYJutdN|CI{LrR z(fxeWh9N&kZ9X3rO(C@=&?9p)k1(tlTCX<%j0LaH zO?uwcOCD2y5heM#$_p*f(5DF`w@R+1%YjtfB= z3V-_@rCks2K6H>W|DP)~;{RNz<=|lYuTBOc2lM}(rm(WJCGA5}CB5|`07MF*u(X;2 z+`&OOqguo}3BEn^Eln4@UGAaOaDwV@JHMhx;m06Ym7wDfg=|0x!MM_h zH0)Um!5#t&GxEaQiz92nBH4r*ifK)p6<89~Gs%p)BX#|ozZ0Ldz=y>{L<6y*`zE<`CT86tjE4D1WhX$$)YbE$12Ng$M&-!o(ck~aZ2JjXzTT;wYG zf{pqzV-2nT9*#FC0*H_%7;B53Msr!4$m#E@*^*1=jC0Cl68K#sw5{7hG4=i@M8eU6 zFt%(2c~Df+HuzvowJ;o*uORp%W(`5Vg+ld@m!=>G7GtOhw9@`>izG!hJR0<7s|46) zsD9!{HPnQt9@!dO{n9S`tkSBfyY>Bp0|%e?Q^GPQpNFs3MZo^c=k@g9`N=+i50T5$ z^1g>_NAIW0^S(>3?YZ`U;TdmxJ3n=6i#|JLY}YJ`3o|b|L6f(IWPF%bA?x(%W$GrI z?NARZ@c?hHm`ge_fAU0VaGJJ!-d^svIs11o*WUcuw}G7>tkx`oA|gm8Dky3KF{A_L zHJaOR{VlBkw&jY^WjLD&D%;{YwmoF&HcME&_+O%pSEg|lD4DPXt5nO$q`)hB%jui9o>LJZ3kwkq7ga+=@s zG}?!E(g9K>2V6tCf~-&7X2mzIY!iig)>AoX>77dec1vfAJhjExv2@p%d9*iOQipP* znG=fG#MKOZ5-!lnD|!CA*bPzu{9yGhdKFvMrH5<*cB6YBScJ+pp;^s=;7}dyF$kDI zrD%%|VIzZaIG$U!E%ovq;@y@$icfCh{D5QEjhs}KP?>svOZ6&H6=j&|l+ko)W<-_B z-z7mnKt6CHe^SBvwvz}7UW@!XUtZ1O5{{IMYC@0#`TX28Uz9p<z?_2cN z*`FwY-$dR+@55mSaR4G^i~b5+S>iDM&KP2pZ`h;I@B{w&Kaa)zjBd}_F*KtBT6aBs z-u>R<%`SKY9a&cqpO+@vfzgTYR9a|9+xjRUDK7!w3MbpC>$RgcFca}xBS53OsqLvo z!);BblS5!O7g9{1yh#-&5F@h>)ZcJ?}C%%Ka>$vFlLq? zE!|J81x#zm*#7{E{tpX(1&;7QL{iBxYe+1r5FVu{%?|O8=rE1xc>EFA*E7Bql~!bm z+4D*iADIBc>AhoUVZXCrP+pzihOSKSm=mgVRalb*7t6Gbc znqNV(0HcQP!f=jngP3c*YtW%Y*1FgD6ks4V;xpJ8z(CpqB&wgn)enst%<%mq9~1k0 zU9~Qd2n)-^nh8Yzu{6y)t^^*WAelAD+jYY$jM^@qTsJh^i7_6qTob!QvunqM5K{*u`R1i;UbIi3r1o6Pn|Kfu|bX#dL6b;|bWBVrqZUp`3tX>Mlw;W+q7 zG*-omMgCnOc|zihxh`;2N|~kVIk~orwNXVv%?z;Ne@jb-#fHYdb+kPu2AJs4B1?mu zMTB8hNa&Qd_?2H1*Iq}viHj7T_j%?S7H|1wrL|ydc1ln)_J_(xLJ}31J<2}D63J+E zzrp^2VJ|3EJb`z|?@Jh|ffJnS)S1BjP^c-YESiLN$L@u#NO0G}s%mSj;^v3bPK|B= z@0Yx%@<$m#N7qY!cPgPm1|(ohV9Nyo3FhDMLdGTv#<%i0rs6fn2KajOCbb9 z@o6XX>SjsSr>V?zk?2)>??)5NDoJAO&cmT@U_3_r~K z1?}Iod(nbIgGy2H=-6g7-GzRyLj5rHUcYn%qfa9b>o-itvP?>u2r0I2s~kVhehw(1 zFiLHYzdi3Pp&f^iD;*9JZOqMkUd`N2teHB* zv3zrL=**+&`XvJnl8cUUn5P6OP@tuVOTP0^j?S zU$@TPE7#d$lB*$phqk*Xk>VqOA{#6Fd_kb2Y_)L3zKU_nh0$OW!^EO= zCrRHYm2Gs}_G|js2t8BTXebk0P-&RkkNL(iZ~XLQ;`W~PCvU)&3nIZdg}ETN8G|Q@ zpmLz`q!4&tHCN|bMbww@GoiY3V9~PP8U8JCqEtMM%eA#%5vUQnP`UzOuZ{vH87~}( zVyfLhnZ^fwWfTAHq-|kjA747B5EpVTT}j1v&%2>6%T~h;a%RDyJ}s7&l!*L3w{D`N z+^tGcFEN%E6&gALbkiMG69h_ttNPQlX7X})8<_*OFPH@>8ZqFOGTwv)jY)c1C?G!! zB9Bdu-Dz~Irv}>Igj!?gx*77|u&V;w zf$gtlDNn8cq^YDCMx+T|#*K?Fm)+kdG49W3-YJ=|hMwb&_YrhZ)Q>XE-9ID;kcD&TpRE|D{ z;8#7huDi6?If7bqv74SW))@k$d-vN>1kc+ki751k~XThIq->mG; zo|&IRL`aKjbd+S)(<+S$O@N+a`10?d(ru1oE8+R6Z`q1cwCfl8k(UKUh4rLLitpUY zhO*%hsw&|t@B^02;+uJ;KyLwwSO6UPlwc{uh8+k(lJK(9RN3(rXK<3%+W$EG|KHhX z{y%atg$#IL&i@8-*Q8I{>53tRK0ly+g7N98`KDCU5&cD=hS362!cf8@E*=waAq{Cg zt>Vv(?;|S{+VSx6`cipZ?T&TEr!S7bJo~txMGg(!Qid_!Mnow#7qC#2@vG0Tc_W5Y zxfg*}&mwHY_~o#tgYCB{vTu$+ntWg=Rgk~bz}`udpx9XjK!Km0Ld4L1C?gN6t<{x2 zqbJt1!txn!md08>AA?HlcnF9ZGp)lBoyM+kykJ1%Hoov`aUMl+SbuZA6maGq{hPUyO`oKG#M zd#HM%cPh#T*n&vmt%E4LNp^y%JV6*AsObD$KPv;;xLit6x}A6E=@26=@`IJw52!t6l6vB)+hYb@fZ=TkHw-H|qMJ9SR=}f9 z92r_RW#JqU~tmtvqwO zm|4}%(&%fEB~gIC2phK@^Fg^bF{{dIVz!T$S|_wslpA!EO+8rg7KGJz>M=d+5_Zdx=P6q`3LW|{RV{B< zDFz@J#}7MJ;PV4^p0>e7p#=>xx9#=r>oaSx(L8NFRr;!=x=<%FgGNu}a9q=2l|coir>EN!N<(AcL#{bXq4{-p zocHTQ^6ln{-urfP)480hr>)cX`S6^$3t<#50L$`e{Ekjcn|PS z&$c7D@!gTL3_G0snb?MPx|hAzh|P8q%J+VKJ#}uz?KcNa)Ta}z)JT-h;G*?(i@@;F z+9LX#pb;(ueu|NI^w1?Y; z$lH|1XQ#>WiGUQLKH0(OH)|Nn6#y*Vf%3snj`jy@qUgQtu?moD;`sG74H!yxQqVNW z!wHFV;ajD!^M%2i#6gwhTBL|o$mslYMJE4Ogg?^4i&VY-$>bvz*ZDZG zFsx~By~heq5m?gg#LfA9m1LvkV%%~Ikxj*lcWzL`%DG{;%>twOv^rOPI}gyXcr#1h z9$=sAxvVQ7j9~*Y?d+BU-)I{+<5b2JqvcqUVLc~F&z$-*ORCatioUN~Et==qrO!+L zvL&EOr9<6GzK4s@2_jNUYhy@ozkZ5|L;jg57l=laroZRVTz>V)W(cwMT$W;cQQtrZ9}6rUTmxr`z2U?rSICQRh?UZf{_W8T~oo4lbf1H zLIE*7mocL$ftU-0u5wQ2I4Xa{96-CUZU$VQzJabBp4lcqUy$4X1c2-Tp~0_blBbiK}i}A?x&{sWyf4)5mwxL$kf6 zt(*HM^r>Z_{THYHq={+s@IBtJm8=$)-prk`axv)<#{3yQW^iS8`SQP&V{Ue$G+0Dn zm^3^Q5U4b(NML$^ZCsW((wAQ^NCjbJm6yGNp;1bu^5T*jO>+tk<>#C#W%TM32NoU1 zFGql{c?S3(zWeGKL*822dd9kWs3(L)J-o%;!}8?u@*_!M0Ex5{HXUa`WJI)Pd~x=W zBO2XmzrlVXO;#7puF6DfBX^wTi*%lg626PA<5$?unb!zlK{2iU3uAR>8VylsK$V=q zVF0Y4u{W((SIPd{t6vSMN>_QmdeLx(JfeI3<9S(t$A0JR z$|kA-lygBWDV6-{&zNBeO5(|pVQbsa_^K%Puh44N-gFd>DvHE*pq$uD=3KAF8CMO* zWKzpm+ulJ?kBKmk7D&T6L^}*I4_H$j$|w@SN(P?>mRYMOb6idxI>Wyz?_AB>7u7}J zPb}O1qGwSWsUIjCv>QdI;6emVT#Gt3@L~)Dy5=8ulC_Ff+t&06(QOsq{LKUOvKj@T zqRpUVJCie7^B0&4+CH3{HjnqRVUcm76i!3J2YgeDfOYvE(cqI-z~i-!STXdKJJi;# zqX*)CCEebE{qb|Ima#8cKi`+nO1~ynk@vhBV(h=A7DjO#&r|Y>TgQ-IBa*O6s)30C z*tBz;3GSesVw=#BEspm?$?e4?y_D{4>RNYaOX1`q%4>l*@||t9eNm3So@kyhxL<*e zAF^K0<_M*=g+V}M>A<6h(P=JgT@T<#Ip|sH_-*gSQq!ABRuMfEf$Jk|spe$Wcl@0# zvTcMF&k#%LKIdtS4>;Mi$rk9r|EYuk+qwdd6P4xde4FaqyJ&lr>|UF8wsah~fP*b1Q`7vAMpn zvIt35F5%z2R!>M>SN=h*CF4~HQKbW?EnI|d1pVWsZadUpTe-2m?WJ~qk{;Lq--e{8 zQ0zFIbhBp$Jpo+oNM)4ooK|dUoc0E3(_q(eTIXMEp21IPoKbYED%G4F-=&y1)L3jRfYxDO2JWGO`QX-EV=4my++=EjWi)3jRJhWza`osGLe^#1? zNHoz1`aSfr<=Th!$}N^V^4MbostGkb4ouVledr&-Rf6C%8eHG`GRZbowEf+LU8!({ zns=0Zu2*N$EI~Ly7C_tZbN;S}(BPrgw$m*(&>%zF@kY%h2p(P+4ieIUWPkqRVMJI? z=e#mOsTl58>K!TbC-4aak6n50Utgte1j6mH*Dxu9+D@-`WLMNRRJ2jE$`!kkz zB0;xIZ-p0bE!T&a;P&0meBLx=?kFuOEh-7qSqfFA`h-V|4pj)8d4VirUz9q7ZsO>9 zysM(KutGp_LSr$RmWSK9)o#&dyLR}YM5kjr8ITcC1EYu+rxF8~OCF*sieOPsI{BxyS`?QmG)sy}u9ksI0$b*j6 zm`g_4D7<0*@!?~mpt?SY$uf~eu6kUY0%1AI<}O%C3M(jWe;9IxHM-KGwv{tyaImw3 z29UY%$k}R_R=34$uvpH3ju#j=qrbg6-BPpBJqS_#KDk$KIE01vQCk@`Er-o6!;X|3 zDrx4$3E(ZHA(g!aPu1M`-Ar;xy3rKOum=0>BC0dNMJ_u*);wf!fAxhfQ!Wdc@@n>- zPM*O?j^U$tCJLRX1&ShS83nS7sH$Yk3b+DFJU1o!r@0AtJ%|?}w5cd|8Ws1@72ZBC z0!qy3M);<0QH(Tz#B&*9xWZPl_oMIB|6VudO0B=L;3Bn-gkp_8S=1j45VI?=4I{26 zjBRPUYlKx$2CtDjw8&|1SyS7bDe5~FS)Mhbn^a3!^`{bUl!_H_7DdMb;EoWs1BltF z)YEeFQIjw2+`0qp@Wr&tWr#A#zkWg`(WxG53e^H=iX*9_lY_}#0@MvOrIml{&991G zbeeRIa%jzi$PjUo1=!B0h6j0}#MXi|>w2`8;V&2ykPG2OmD+4q8?(HePDkRmfAiQ}i$IBdym0pjs zf;EI0Z6YEjV=MJj(Qgvz`10xYL>rK}JH)ELq%*_HO&S&`MR?x{55K3ezO_bU`n3AI z@4=clccY)~6rjJ<0_KyMNx%VaeR1MdIH>2H+>Hu54A({6sEJVIJw5tZfMrqXdqOQn z7{ycjYD|Co>7S1*iPXPz8TCIcy2}Y}KpG4fzk)A^RgAjJq4I+s544QBiTD?y9rzKT zHRNeh2x`-m=%j@_pBtLu3OkO-Ox_d1p`Dg%td#)e(W+W;f64!NhwRhjyBfY%g3s`< z@M_P*uPz}9x6#XKE*6aePU`r-+#LOY)k@${kDzxAk|BPNwdsr^7JKxr6E$pX*{{+s zTz;(V|GHu@Z1$rs46M9bVJ+@IS?^rrY!q3R@PcNS+UX?e&cM*}-t4QkI(o#{Xr9s7 zHgI)^-vP(mz;+UG;%)7$8fXKm(|`+v%szwQz3ghu$ey|@T*rSf#sTs1_Pl>OaH9D$ zey|$#u*lgK4r%#sG(WY9e?Avx-m@@nX0d1D>zSwSwx|#Zmiq+<9{?)@yoUV5d&P(P zoNHLbDZnWI1!7Efmi@n80Mi=yz^OnunA7U4fH{)hdvO6Il8|BneGE2`lHWaHI10GG zMszvuCOR^mr6PHYXPV#Q7b4&03NZjRQ;%D);~RIvLB`B5jibgGZqzs0!4MpGfi5xN z4z@Q-@S81eO>0ozjcEv3H$`p1?dKj)&d$mGx;_rrzP3{=5mB)#6F(pzrGgdHFm#iW z#_AWGY7>AAOv02VwYtf**8juSJB3#kZC$&uZQHhO+o;&KvnsY-v2EM7t%_||l9Ro^ z@0|a?I2UtW&5QNSXU;K3>%H~25g#{0;(crk3J2>}L1=W3T4O96Md4_0>;>*k>2w7U zjAhguc8X0eIuA2%> z8OE*BntlpJrx346FfKt3Z7+mF+0VzK8e<7ufT~Nd#{f9&1BoRCHRnPaa^g$fTQ%tiBPglv)-GyZQ;jdQ zy6o?0YJbL>N@%9+CvFp3F`KucvIK8+1Qv;$D*!WGAm!0Q!H0#!3?(c;S|E2e5grl; z!c)NG4hLLD)xP6qjgV^8adcdf9I;SS0XIxEaWxSOSBF%3+IBqid3HbVnLiDOpDQc* z5VcPH5Zgtr_X`fvMLMEL%By5Ns4Hkc=V?1Um+#7`bkxM`61Y6AO!{xFC7(#nHvH_w zJLxq-FmHM~+t#iO(rBBu#0Y!oKYkKf;Pq7tQvrMyF$2E*UOa;d%#R2V*x(3 zq2-PQay!;)G1Z!qqFIuSUhGYp2=oI_V>@u~Xf0YX{f)>{nac_G_IkX^Gi>tJc4Ui^ zFo@4!zFsbV1`G@nUo1K$qz)I&vUOOGEn$?dF|NFy7b+v-PW?>En07$N}A{euvBeEC~2dKf!sh_{~h zqlz!l;be!Z`JhzC(CouV7YLK;WlKL&lf&aLl4qctrd7<&TuO$C0imK0MYvav0i+PB zmR8`C#4`IHr3wgHjME32*4syQq0{I#Y@;f++F>TrMWZ~gYP6epV^hT|o$ZtqxY^W5 zyD#lGAe`Dvqu_X(SH3<- zARS6ri5>X0!X z;tQTuP?7c|rQdIDlUb`gMap*1c!G3x5@~xZ^Jy37hX}J;1gGIhSj{G94F);bj1d!Z6O3;xyEw6O&DoE8N;Xg31W;o&Jo(}ylV41heBw_$6C>s}7 z5_3BmC^Pqef?B8n|DQh+>eQ$?ByC@`K&pvqj?8VI;7`-9$Aw2C*<{UI9UZ9+uAg40 zGZp<2m0NV15CZ>C2I0x@zAx$gDNn)ttOaAM1tS9rj#UA9+I&l-tBmPDft*ufiF6Zv zVej9l7VO9tFG=d&Uk;u!2dl^3>#dNBPi#42q|hHY*K#4$p_;KF`7D1cF~&@Z&Bt9>pkJ-mA( zrfk4VlXJbL!zau@7%OgnH}(njbS4U>o9Z7#AtTuyyDnhdeqyDa_Q{VD{zo@K?y|mL zoo9Gx(NrPPyG!!*f~f*1(l|^Mkz{f)v3|WoKSwb%UhsK(-8_5xFTrI;l-2 z1!&nmRQY7IS$hNJet87PBm-N*MY6`UIB3BA$}W9YxQZ}K_3xk}71F`h04f?cb8%)F z7Hn|2Nh^+r5Y+KT>S-c=qBVZg*dnyp-i@PdX9_Br!v<&;Hezy-5Dc}a9lA1b&5*36 zoWc$qmS>X)j&BzJhLxj4HW{iE#3Fq(#uqP_17~!CHkoj9>a|%ZlGhVnM|Nnhykvll zC#~&z$oy%kM5Se%3EXi9%0M}SeS}}@KXdYZoTU z8{f>{b%<@%Z27B`)54Q|U3$RLv0@33aXl~OfYB8to-r;{uopWBHCatxP)Sy`_t0RN z(rDF}_d?0iaI!+MF*h@<50FkkEa5}6ckIAUKw&81;h#)pnh^m(kcSrB&@$kp-_R!M zUpB84WaJQVVwDgZIVQk7X2LQU-ZTdYrvAGQMt)N=SpM+7_3>!#gq!SToE`#b;yB9` zp_153m?kAdRe#}Q1Ga8*q4AE4m;W5jf=pZ%YOa$4Welz(QGa}c(Mam%M5bH<>U=Tk z_&E5x$Ucb7nOFuTpvy@q)^p|Rl`=p!Rqxu@(*1_lu%ukX#pl2XEgUCVyB=TO)#7?Y z>ase3Klq)jlnND_O06%a69oVe1D@|(TrN<7F=s9Tjd@1esLA~gf;|5m>xY?vbSCd) zk6LB*R)5WeW*>mvcJ|Y2^5hl`=86jGf}D5J;m?^#^EGkR5S7pZX$4Ml=Jj?~`h0Mo z{4|3_($z;x9E}1~!f!UNM;y`-y_mJ2nxg#tOdQP(+E~GmWEI2R91H;U-6RdBge}A( zSsO_G_3*$OYoS2nZp=bF+}CCNDkm|c(Ew{cIyd3W+YQffO`+jFdM(?*G1lurDAfRS zAZoUty_NFidN@)OZVu;MTj%u95^m)PEmkCTBTB{+35cbf;B4%_ zCjJk|^KQB5v^m@#Yd7ovP|%rKnf_-Quvt?#uJ8wUlWP#L6h^$fR}YV+TTSD}sHS>V zvti$4y2Wq@ZK@= z1b^MFOMM+AW@Wv#7aS5?12<)k$D4=RVq3~XKc`tc)qbvy$ zKE_cpp)qNd(kgt?t!faT?+1_U@t#JYkZ?Z)Dxs9?p*b{kC&4e18J~m8A(1C#uv?sE zAwUe6I*0co(-?DY;d{?|1u`E4%mG}@I0gvXo9Bg5{)J>%8s3aD7+xU^@kf%nUd@lGgiY9Gqh72s&*3l1uW<-!KAd`yM zqC$IhE{KFlas8b~hP)$oYK14yuM|ziJ`g^FhO*OCDKrNg9bV2Z9iji^rL_Xj9AeU7 zuXLjJ6K|G=Z-z;3sDjjQn-wiaoD0swil3zPv$P~HCygY*9++)2ST<29sxj(d$Zk;O ztLa(FK3J%00Bq~zBAEb64N4`lH^SB=u7YK4OylT!QXJ)QAJ%UTFlFLkYN$WOKS>fs z*CfJ8QJeA`X0ONSgWKn=)Wf#KFKP$+Y?)(=SFATtXTr0m-*FPFcG?cgmm45^f7&o7 z7gBoMBhLry(uUd3$CW_sb8)V~a8%FEFBP~sBdexw=SJ{4*>nM`)XMdfJ9~y$tOlCi zi1zHS=Jiahjk%oln}?DFFg-83yadT>LCQ z>{Lxy)YCfbjdTH`E2%GL>MhrsH)fqK_v-n~!vQLNfyM;-_Av6Pw~*RM;cBBiH@3M` z6-i%Uw~5MFEL+f!d<9r!e0KAqM~G#7@bM8m5LS&15|7+Qo?18~CUz@;GZogzENeV) zp%L4yw2Fb@el~e818!UlPYokc^I~^=`|d{LJ#L*q@e@EBOg~A_#e37Jy2V(e&P$!7 z+$jDCcZ7tw^h5LX7!fZd*c?QZw=$f)G47arZMp#_KA2%4JJoMbHbk@it(n{URc%&t z41~uXckNnGG0-50qE|fl=Z-xrqrnLeo^PllM-xqrW?q+#>#RNo8z*qgpFxhy)%OHC z58FC!b$fuRutn>rZ7*at>XdwFlYa+DY!i077(pE&5o9Q<31BAIN&vUxp|d}fn=x4$ z<`iuFV4QAPO8+m5FJCn0QQ&I!9{^8K{kH>D=Vz2xv=f%P$lX~0WkAo=o9~_%Q)9{I zi%fc7vC6@+*4Rh125O=dGrrkYLI}st)YxEPOFBSI=3mS;>>p#t`(2M+0*sc=Td10+ zbq0~PY#$fCgOX0t1Hmj1v+G&dtB_%)s-eFuZRM~))d?<88(3v+!rQ5Emjd?{+h;%X zXNZq2{D1vgK@OfT;GVxvtw5v0VRwXP8a#}+OeFhSHq*jo6K zG|t?YDp07#=SHCTe)z<}9f*v0&0A^aaRvZ%KGkrc(e`Fsq!hcg$e$1grk zd2bqN-C@Ew1DWiwtjM+Vm(&vB zA?wVtMfVO-N;AnEoI0#3qJ!Z3U_9oUmSlrhWeWf*zKcyFb+@rh<&R82E@Bhq!ir0w zFv^X=nKki9nxb4}c>dl}1hE~IDlm#nV%Ess4iQyw`e8+$#o+;P9K`)0lXLwS;hmUV zm3*#_8W(fgMb%+ogwyn7ucu;}=1g1DqRS|lYr#vz;-Ng~Ql6!u$t==YWPxbvr$c2R z6LWwrkup*6wKCDsOeUE62%3h}@NgwMcKC7Pr*J4O4t$=rRt{Ik8v>1QdC9%_+crk&WNSih9Tl%4YVQ!gtYJdpkf@(O z?mFMB^S6rF1}BbG6GtAeN4Yed^_U_O#jiqO0j;~CHUhY_Hlknqsi(bd&33oMCI&E1 zbw*?NA185><}|n#^SE-r=4`Hj-&&WK3(hvZPmu_{lqW}WI$qJF(vjHeH{9RcT0&)08(1QBkAqY_LWITo7Cnc zmfL6#)+mF?4Ogi9HyUhzH(t))^9E3q1A28tDY=HBPs|?;@8QQBD6r$%Vl2_}ioJQTl7!Oto;sHS489xvvJyZE+idhQLU zkHb21?LrHgfJska18RIH*f2JH4H3FZAQ(TsU1k`bXlK@6>i<#BU=wakW<6jWNK=BtQd=u~;WQ_{rLg@e6&no@PHOU=!knS{-R5JVXv-fio*(=@&-^}R6&+WLY z62!V-L3tWFO;y2+f>Vnqo)d5eu8=E?5RUNp2CaAdUExe4?xwC^BsiT_Yt~z=D{my1 ztJ){hlP6jyu#lvB2o+unO=)=u}HI2-~bXLv=mY?l8;y{%J^fKbp9JAE9zoWy?m$Te_6|D8g~ zX6;cbJcf$$Vb{26B|_P;_6L{W?9S9;W4J986$f^`2AMh`3*3k-LQUXrt@o85>9Q=s zp0-G`TpTXZD=?Rg&rAfF9+cMN+m2I?F-~s9G=T+9m_95EhW07(K)5I%RG=x-PumV> z6K^o7&g7#JmeE*D#?{wkvTE&^KzoQ^k~qTf9%vlFLQqx0}^X zxDheb;UF7#?fuowqq(?vxZO;{J^B#aRba@-YH7*^#L#et5eDUu|C zUvcVSsx^+bdOIto(ai)e#S;TxqE_qb9E9`eZInek%PC*Xa7{p1vTv}-;-Avme=VqB z>!j;n*(d(0{=^CcYP6Q;!7RHrYTU4mqb~GjVS{?-8~XE^ix&|XcMhSUja3p4iDT|K z6qo8PrDTqzrIEZ^?l*t>Db@HmxTl9Cl0MpA2U~eWOeu*_$*ADM#2j-a_3fApwNSYF z9}oezVKPcNFrk=0>6QigqlLk>doYiBaN-+d&y)_m zuZ{D+xn;75Z`$W97dgLT6nC~Y`6KR90zd~Ntm>;bbGs%X;s)ZK#w316gIXoumP;Df z9Xq=}Vv{`(LoH`+~PCUSz zQ@1G$ufd){UU`mX)tok|hTvCQZ;vSaSqgr!bigm~dai>E2XijQ1=FOt!?4QL$;!;I zEDH2;vb6Dg>Tyeni7vUwL{#E?({=@aX~L{48;hU5Bbn1WnacMfe?ll?Vs@mu#Ffb(I=)i>M zFBRC2nSzkZQ-)EAOcRB-kTjM`LfYKm0=+?l4%QHHM`E|CZ1K|4R_|6)!2O!2W6OM| z{ZSE7ml(wiDzjd~o~d+V2*l`Aezlz)>>oR;NFG9qq|`%kyInfF2WWx;4O1{V z&$BaxTHd!`9$@W)8^0Vz7M_wDY?9kO1}h@|07FK+gL92l5SfQcw93XCmCTB~yoo1ii#flDvjZRr3t>;`?jj6f1aVZ;1bJlH}T;22iqEvb8Ug zHgih-(2@BBpR4OL5mJoXSnYEGkT)M|wp9-uQp**KrVRPNNon)6=ngxptqI+}-^BcH zASH+?XoMz~T*owCwS_+{&F%!3Th7CMO;$@Z_<68~_h*nKimsut1$9+Bnf@ljk=&gcbM~t3Z6I~?b zFG*NT!)F{8NJt%{(D_DU$ffmg`vv@1Dv*2OD99i|K?S@VMbBbAlY~q;ykRL5&qNq{6~JoPOx?Eq5tv#Ka%H4Rc#2` z@6yoWN+5E*X(K4g`)~G6(3+jwVi^C#8=k-p`@3y*j?t3SgRe8?4I-1TU^eHL$y=Iw zk68V+)##QV)q=($RTBUT?n^@P-|adLSs$DVl$)I;Em{|t3lOQtiM0Kqc?!E!QL4t| znUKB?9(^E=auDM52Z<@iFs}dYBTGdQS8yYN=$9$;qFd!`HO;avKZy)24u&{>?v9L- zzY6gg`5!c#EI5WKQfTTe@ZCoeHf$X*08tfHvnUc+I{9E!Gj%m4ZxrG1%za@SSxM_( zQtoV-lN_+L901JNL^{kZlO6&Qnlr=ZZISPUQB39}O# z${O}>lxTSk6>}uPCZ!Errl6T;1W%0nB;yh7_} ziCt1YP5|da{d=qqU$WTzg2_W+@tgAKgxsJ9q*uzq6XLZfut!r4*<%hZDB;Wrmg!94 zUP@XDSm5Gv*cKY%+l<-?)fBSjMKWQHJ+3f0CG=c6GVovWFwBcpj9SGj6q5}q_m6=^ zbyB3PqrTqMtb2G!eAXw2)Jvo!VVRkOcRxATFh3~!n?>h;N2|N>_J!sV{WaE7jhr_I zz5Y&~kEc95RUHGa=jw)^y+P~M2;r%|u=U$0^g-uJzkX9U;qV0jtxmo3&x82j_$e~E z)$%n|?yI^TAzi1$@8T)1b5tLnHa9ZhFW883*ZWLA*HLarEccuttteMt;Y^33GGwn- z7y>Mrw8dkpvnWAlE;>*5m$x|P5j89{%4@BGK3mL#NGXT>RU4eHCc|CwAm&@7n(ytA zkUc;D`udN?@*v5JZ} z*E_v_Zr&c(heVtI&MiyygfjnX3jL$mztKMIRWG|SQd?U6^E&w# zqt7b4)}H6Sw0D*HKNtH0eppz+%K%o*tTp;NFaw91RT#LMO25@rEh*YWU)1OYvmG`a zH2sCu9bQDMfS0m6mbW_PL;tQY2~!Arai7zubuz~>`v9jnoX)qQY$jPv_wYRPlZp`L zW?Tsg#Btg6icF)oVR;zM-t(3-Bt6Q?ct6G4V$+`P7CqXZZDQ-AX8G3m7ogzlCJHt* z3eev6yY$=5DI;xld-%xZwm8n$#_0{uZ(Y3UU_>m_5O{5rBE5+L+`=67daK)Lc%?_^ zBx^>XC4%77b__!YDk7}&9|aEPlx?EV>Et;}-DqR&l)t62{b^mM@{qwaVOvXID6nmI zsyS35J10;N&r)p^23vT`nE}ETRhU^$3I3Ws(-O9JH#IhXSWpk;>p@Gr$w(?QTHZ0D zXnWO24sjp{agX+4BE8WnVMaBJDQa}e%>*L-YQ3e>VHezfS&T)9(@=vou2`IW6Pqj9 zl|kV*@M7<|?f)L(*wc)dKv0vyG3WqS8sq;_NZlv2P>&>-%!BfJa|J>ROFvIE-^s_y zTZx`&TQ zkrqs3vN@ML_#ezuSr!-hw9ex!BzNYFhGeqR=Z%%?2?pIYKvS{4LYabX5@1u5>w}M( z?k;?S-La49C|#~+W|uG?>)Ub!t^h7c?G#C$stQ|NmBI<8e%2nxV_CzFiT96FP*ZOO z8nE14vT7AO_+ewk_=UO=F!cg~iX~myGlb3FB(edFYCCvxyo0tr-c{oF!orPAT=E`YoGJSeJ_8qh~qGc&G7!H6w=ouN)sWcwGPb|VTXQ!zcufd|GS(kj8*TCJQddOqh8 z{jc%#mo4L+f3}wo4*&%xeoAJAektpzPSMn3qq;-ZeTvu9ja?6KwXNBk9~&F?$(76l z$*cwlcb3y{kmMGrxm=oY;Ru>qB_9Q>mlJmL3CGG6h1cl#G4AoBQn7@<(o$U{7A6YB zu0yr=8qwTO%L(U3_$HA?M>mi>B>?f!>yoxrX8RVj*+`NyOu$J%XI5iT^`EGXf%(#s z34LVFfF&SkTSUq{9{>Gze<)h45Bp}@E?lA6du@$YWN7X@tF9rT;EAdV%{?NSxN6^U zE@N$8EatxE%8sCJ+A!49KP{7gUYVyz@>2c0oTFkGv#W60?r@qrj@W1ji+}8@Ipy8G z$?u%j>)kuwHZ1D~1!jXa|B6!iZvz(;{e(WX*)O{5ArXCN5&nv=mYV(>dL5{lZo^ya z${_p)G;#=6{@-s1m?=#d0t5||`zPN^7>xR-(C~j`P!wL3`5TgfRJ>?|Qvk>n@x^iC zW8c`LPB>kAYF6L30BOR43O}F>O z%1kQ~!%X!99wHf3`?LA&Dl{1AdS!|%85nsi;t@LqtSwb~gbZrd|7PQ_8bK!kq~FcT z78wp`s@ILMHzAWwh*H#xkB_(Gc6a5w`mItUsWm(c<|!AKt^N@YC!T2Oir_|rf0bUZ z#?O$1HkxGdy?e*Z$Rp%ktZcdFyMmn+>mSSR9r?9gN|F%cB+#|EkH5 zrCSdOf19XFM-^2u_3IMDMcDElP8r;?CsjQ@33(gM#*0}R)-D+VAQLnx7_mEnb}pJi zdza+6W9KIGATsh1CCb`$Xs!vG|1*rgtvov?#ufn(@q_|wJ+&rlfTj9{6!caA2en8k zh@y`n#4>YRMcfr8yN$Qm5aYpDnkPE@FOa%sX44VlvW#+2PgLOvYbz5fc|b)Tf>-dU z^ZxGI3i<>(txbQ zl7T%O$#RmqCgLT49s=b&Z1cN6_!olc0PKy6 zW1%;A20pvP^CWijHQ%3DYWi7m}BAA}nI z|Hi_w{cnLo>t`g96K;F*QYO*%g zlt#TJu36$1Clz^^UshkDrjsEWsZ(E~M=@+bO-2xifdeMQI0b7I@)78X+`tlmnOQ#< z#jz=jrG$aBP{7)>Cuo5nEOUY!n7RYrSq-NHiv-XUy=BooZTwYIodUe|+c-V{cI*$Q zRAY!($iOo99kbpr3Z^kaXRHZccZfBLjtzz+Xc4>ba?1){BD0)l7@LnTeu&(l6{1ye z5&|xR(lQiGS6C)~%_BMvR>8GR45{@#)r{1jvBPM~IvNKLUwVgQ9WL?j;8zI-B6ulM zzTbdOITV6EBvhgm2~h$KDkn8O7RPAz{N|B(I+2jzh7n*~S~7S<2`Sbt9H|1UA*69b z-2MLF>}j_|&R2fb`!**~55FO|P2iPJgu!sf_zE|AUe z7MjQENF30;`7tf@q4R zEQ69JkZB_uEDU_A%bK8Zx$t9`M zaK{`rH_AALC|z$BkJ`;M=Tz@M5f4>?Hn;++m3|Q0I`~osGOXO{SF_>ZSG158Dd$D< zxn?U=TE^8$jRLHzWl5BK7oD3Q&Tatp=hc2N4<7qY39CSOO7c~d@BFOTZ!1UP+1+?J zY)chNvh+RoB@omPO~RX#ooBTWU1{3nX;k2JFwRoHwRF0jXv5- z%FFu46B@6n6beg1g-P;?S$QT9)No$vv7|AJ&pJ;bVH zitUIU7fX+ukVuhJCzdx9MLM9!yg3r#E^E)lhb48{lcP(ZnKGJ}-M%u5)N-ZKY`pkK zOprM&J0Y6ZL)fP3(#)&0>Jg}|c1NWSZf*@MM^Ljvrb#HIR)mY9@Z%#NlfC1` zhcW{f+QznoyA+e@--?vwR2Msd7BWK5%2Tk61bcS$y=17xIJJ!&z5t^4SW%fXDNmiv zNeY!HycUpu`y7y=LMP?po~WU2@Q`On<#GLzl4d#{@O(Tf3zyW5IkAY0_lzxo( z@5TMdO%lA+_=PyaUw2mNsdIR#|5Bc)rNq{B^*si>WuC9pUfg~RFn)RuT&|_H3j&~TdgSp4 zO~jN__Q4@3ek=IP3C3BbeLrUL20FBt6ih2fkFb|9*nRo4>l(ZttFAX)TI+puS=|AT z1khONrn4DxlV;Qz>QlZ?UX~)(4~Rb*L6r1sCr#8JU{VY)Nd%AtLQJ8bP^dM5+5wKG z)IUlTq^G17-K_$f)Bucqy5{@IEk2oDT|&ot6dnB5Ox-3ArF}UVTSl-*G6rY@W+L*?&L<* zgkbipS502K&JKV|^3n~^VVGG!sC&6!YD`yD__<;XIBVNYh{wUrdM#HK;Gb3=Bo+kc z_h^ey=C}@q0v+<3_5+mBthuTmz@WYHQv84}-5o8&JY}#g@%(M6IA(Wn$7_%3q7>ap z{IYx$o0j|J27-4OFc9l<5k9qEjJ~fZuO+keaG5j&8=tUVs&)?8wC+4-eF7h##((R6 z-RQ(I{z2cNP&qDiO8mAK_qEXleTrz_e+3 zOdw!sjLRU<09`G%UBv&`cegpj6Ggkuim!!NR60dglj|4E_W`;2RO5;AwI*!cO_a)o zKX_AYf6;x@q`kw{M$O8`DDu$=VF{Its)=BuP`1^G1vKdXq-CBrR{fP4dTWmm=50C_ z8prn$|CY}8mFvvgulZE>ULv06nz|F==h1;VG`0%B1~{;IFmczb&C>_=HE5fbN)l3J z9Z>F`04WM-iCLm@gxIaW*U9;2iS@scD00?_P)qWcbFOhLVV$JBH~pi?Z6muN3QSb_ z8e~cw4%bLQ30rEh!!o7N=t*lAr(Utma3c|H6*&Z4K%~}8I7_%P3~W&HXgg@LXZQ3= zTFVoF7X?@&8UmiI2pVQrQO?Lp?F62bJSk$q^61`i`}(0E<~2-(MI;oewyrN;agl)~ z;x35khxc8kh2@MB`Wr{SaE$a9_aicXRt}_v;`=le+SrSb1QCct@6MCkP_s~aqjb+< zSl(mZD%0O&@{GN3L-eNIwURZ>)@p|hLoIoL0^~D%Wc0P{>wHUC_eGo#0Rg<}61@nc zMvWkI^X7JldS^8*ZYsFYoCD)UkS-!Gr57T%G6=ry2*fn$Jay6X?dSVk*#0?(ag3AL zx>oi@ICB8maS%wyXdE#O^Tn-6FsYn);u|Y${xt4=Hzint$U9gmhXxSBPcO`!ZJ`8E z`UmkX2A}qw>{gW$7dPUUtk@FN2zoJ1-km_*l6hpWU8beaBL|BFvDp{lNr9$YchoJs zsuT<>R`h^CGXuJcjzY#U@FezcH2{1!)r0)ouvF3dq}P?UGdE!t{3~!0@HPq;52HDY zr9^A}MYt?LC&DvlE?sya93W&VSi1_yi8Zu8>C85W|3U0x9FZ3XP(4yp02_~*z&5)L zK@gF{@r&ExYmj2Q&3CyG_jPO!- zb&Xxo3a}@-!sOxS@&MRijd-r6+;-J-K7H8>LwOlfA&NFV$Z+(i*i;?G1^7+{s8zNYV+uf_XdlV zmEJ6Wdjq0JszP~1YXMX^1gtPh(odEm3SX=zfc8361t*Gq%CslDsVUo0#>z%UJNiDr ze-{=|X4e1O!l=@6*FoUY-X4D#%FF5Fv1lAfp*Nps{vfUT>N`cqVPMnrC?t4^L$`bmfP7OC*OdG!(H5$l@c3i@gRI~fJXVw^354c6HCbjuKTa&d1J$!9 zl!^-rrS`V`=qzaw6!7iLrdZ3Y?S+MPuO8s+W)bl&SigDW0H=sJDGA$fEdGc`7s$YeThZ;U)wZM1t za5lDD<@oZa4z}lX`Is}%#@1UyTQ>N^$aHZMf(Og7rPX9G#UX2CB$0Ou?53nZ5|m3! zWrDiAI&hb!aMx8VXn$!%VtF#FsOvdvmL01=Rp~tY?ltLTTd-S715m@dRJJ((R++Uq z_$h@SD;I`0&&UvP6V-Gec!8aMH!K5b2QV^y_{v>6g z0q!p|T$b~{6fy4o2nr(Ba5RIxZ>c<%`d80C~CLzwjA`Zg1 zXx_BLh#`j?l#m-g=155i$R7Nf8idi&eXlzZnSCp+ug3>Qqhzi6q{ImL+TAX|=lk&f zd?90yYGi1+0mMm;Ny$)zN7dT9S(8>AsNnOQH95!4Gr#M!a`#8;oCeu5S>|bH{G3?5 zN+c}hVtCB6VV4-LiE2|5*9MC}_WU~KRyf-d%LY3_+%CpDU?#ri--~pF-fmYr{C|Ka zc01~D<>PMjJ9cWjZ%OZz66@Qg$C?A+(!ZM4!KKybU3diZ|GpkxO;-{sw(fgz33&P9 z$IdDc+7EU=TL8YC{zj$sW+RN=)c^E2p0neU_Wy+)EG~9tzBm|U?_^6(@%Y)rLxQ|2I@&Wk`L(DhTfjc* zw`InT75z&!q_9CVS02pK)09Yyt|w*d*rxnS#dnK7UGy^=B_h~zXja*|YnPCpj3(U(Y6)8*P5`|1Lbfa!Pj^~A|5?*cNjIJ6I8gRB zqIopqn;DFb;;67+kz|h1Ym9Pq9n>JRF|x0{AJD+AWCYhe<>gK9nNJOMG?TnmtWh-4 zvtOaERC}EMiyO%3HyJ3jTh)-LyOkwRr!mjj&hL1o z`~WDK?|~@#^Ma#Uj<`F5v8QocWna+z#$HFO%Nvjf{W7<5%2+Z$@Q#vTJHN~7Q%zfC zY1OI*ZXm1w!DZ|*zij+V18Va=%gpEWLqCP-Tx+MjDjcs)40UAMCWv#$zwjo2v3qhb zdc3uZv#X#}kVE&f!KV2wCht3Fy6Obr@WUba_cC2oTDvwS0AT>Jal+XcH=kw}<%v0+ zX=s;gl^NF8bfa>+&1W<2Fx~?45UDJ7oj>mQXaMm%mrB;c!!iGoIaa6jZeG^DW>Vb| zJ?538eqgk*QDQk=RbhsXyc63MLUUt+>xGSUAdo2k_}L=3o_E78A&65RITQlkMqh}tW0t&0d2{6& z@ZAlz&u5CMZloBu)5OT1j2CzF-A(d&d9i|*q}IuCUt%fKewvbkBZ>x;^0xN)9er2S*=SL6t@8x-_K^|>u976Brk+m zN(iRUc5hB1I{)4R*TY$eRMK(uEt#Svm{p1RpF?OD_1z7Y)tOv+_PmEu#hBF%W1jod zYBp}}Qy1f^D_h1Y##K02(u>8ii_w|JncJl|ip=s@*z?|zwtQ1e^^K~|G0!-lQ&;=M z(mE7nk*Q{>q^tp*M7PLpj9g6Op7e3XPjoOi<^-M`uRvEMfR{T={HD{NV{Y%J7mk)0T^%^~fMZIgx6_;*bj`n{qrXyG>=;c6nt##)D@sYF6A zd6*kKQ^}q&XYmPED87zPFWte&98qJ86M-s#NY|i}dteljmHEOU;%d=^BEC?$D}QJC zEUSyBY`p`_dU|#92QuC2?|O3|=;&8SLl7+P)GDHth>9?6Q1+Hw51q3ALSQFUD@@N{ z3LL82#W?G9JZg(?0^tYX>EMhurBeDBC3|Kz&KO zc&1fHTH`vRSl_L19y3!4N4$7gRM#sZ?={rc!*nFzT%H5-4!nd7kB45JTK87Ck3aAz z109Tob7|Qq#FWYU{y~iSl>n)@mX70!>8n3X$?FX#r@UXh~RHw16W`U7Jm*|KwX^tzr6ua?zu1IBV`kwIaMpJ8}$b9j6aqx0yOUdAIO|xgvhv$J*H4SMY z$Vjt%i0#BtsAC_izXhoD;92O+&%1oD@2Yw9*#G?qF?jW!0$h%zxqMUk`|!H^24je; zk09cu1Mz%u`FM$Rf+$dKA^(W;sfaVy5^AW*|LFI0zjsCLZFccRo*ac>QjE&w2KG`i zRJba$`TN#_tlcVsH%sc}J{6t#se-|c+c+^gP`MX~sI~*~dcJLjeIDd=Ct!)wn1dv- z!)R>CKo>m#7Zd%Ajnaw5f2bCH0oE1>Q8A&age8@gN+%DF8r2i=V}n%2BkLnKpz3I_ z4g*|^$@YUyIYU3X+fY2ODeAd*G~Qb)V!%8;Kt4x`Hi5}E=}}qkM}DIS2aQad!O`v~SJKa9g~Uk?k{z7Si|=u_l7PehMPsM04}h5eQe4ZGr| za}VI@ee$D>1Mw&Or*IZ+%-d>vvL!}lZnJI0qlcl+e;R!=FOqNhzC(CxhR=I+<*id@DyS zv}bc9zosV=$7G6&qu_8OH4EEEk7a5WECZ0i-C>@mC(6MjOS4-KWY$~4nz#nH!vA~v zPHZt0kxOOtlhM1K%3Hy!m}EP2gG?R;?OXMtnlKYFjt}ln%a^8=!~Dued63<5dH!f1 zWzp*SVHam`T^@fl+F#Q%-{AzkkD-s_Y0e>$bNg=LqvRTCKhTo_q+L>%m$_i;ag|g z)MDdDkZ;~`aRxeb9E-oSm79{p1P|CM$DZ#czV%t&aH(Sk9lQy}H^P&>n1uF!;ZA7DJ1YM&b{P+TY!g`oAfXD@Wf&~5fS2RDN z^#8-uIYn2tb)~v>Go5iL|SbAXq2YcXN>o!u-J{7ZS-rDS!#N`N!FSeZ()4*f`NUD+35@frU6;ynZ$*Xd;5k|l_x zqv$RNS^Q;kCR(D7VLz-uz*=KvdeSGsC9Vhf;D~?*PXa6;?UxUyFE6Lp4IK+E7WC8O zJI!04BQhk@8`jAE+E)TyzOSdJqY2~33S(c9=|LMlxRI5pK0|ZiwL1{lCCMP`BF!j? z?14QAIs4tw$=^^m!Se?dDR9Sv!HKm>s${^zn?eOVkxIktHBp&S3os)xwbtO_%QCUq zKfr*!RE}e87nMp)w-DBl+Fb1r%1tZuBrsLB7-^Vt82r$_@qIqZjcy_^wgGWIEF8Mg zrv>NYrW?+WbaG%CG+_kT!P}Qsb9X;@ zX~VN~kf;-0^f`lsLVu~u@^k#COBlipiqr*8P1nsMv0b5|iraftLr@@2Z*Fz{eeh7% zOYW~P<~+FGeLku3Y5LgR0>*e;zf|un?wB)if2kM0=>1N+c=!bUTHc>OCU5$E*Rrj< z@jl;PALN^}$Hoit)6$qYJ$^-Y1oSRnq~__D)DCYeqqzau zQxhOw_U*7JJ5`KgRY_&>`_uB7&I%D9peJReh8bRDz-4QeyVglxpmZz+j+Gwt=AwLZ zE#AKeOkYfJ>DtlGZBQ2riE{CCcz!Fdq9rJ{D^i5no5-@l=NhH455V7^)KL=li!Hp$ zQ=G!33bCNIHy|SG=V}f$GwC|aY!3zs)Z59S7}vL$Ku2$w#HUe6FOhIP(tl?FvrLjP?T1vAhq6TpHyO5^2l zPG_!ZX_RGZOBklGT!)u5t=4de_0Lz&I<(1c5joF=FgdHT5|(bxByFCtaAO0KRr`z_ zH=S6nQ&|pN5--=PS7&%eSTi-64mhrmS`6{0cT|(atl>jYyz$>3akJR-wN+^K${K&f z{XE?`pXW9%J&6U+hI2Q0(%`Vdy3g-nj*&`pkM%iyf0gKj0$a!G-%ua!xgvN#K4O&M z&wTmxUJxa|i1kA1HHXUktm*|Gbv-?_UdNwSPX(v+z+VpvU!k_Z&|_r3WU1pt@4`7C zt>aj&iLrX@f7*Ln2!9gdWgI*2)g#OFWK=bEjIPl{91WQtEA4ib@)QR}A{@niU(IeOhmGom0(K{;mx6q;<z~xNDFFC15;CF69 zSLDsPt_8b`%*3er0<4FB(-u(U$d-up-F4L+_+;49e23WN>ozN+q$iLK6O*6?K0h#M zGYXLniNzmYCQzQZW%xa656;UlG2_xc_2AP=0BUbUY!T9O>u z+EfGu^@}C3E8@S>)2;HFz_>2;$skPfhoxCwH3;lLvVMs})AoCEV$)JQh3XC`kxm)g z_;}43eP8@*LxW%WY$kaI$$0YVTvEjmZu|R+z>Hwiw#*@ z*PF-Ry}^qOm&cpal;-)cw{-vIRp=2TMWYvVV~&}yCXUnfeUphuxpUON58}@ZlfXbj zArk~CUZyDDAB3D|6gRlFkYyt4J5!I#cjKyUo%M^ZkT6brI^I+z%weu$FSonCu98`f zV(m2p^6+~a*P!CIT6_C&j5Xu)4{cG{3Bvp=FSJQQq@`lchtm~W;`f$iyfd#av-E96aT!7xzX_$gHJz2#Wj>Hh)zku4;QKd2Bu1 zkm3oKA>c`KJgHftUfQZH*9&;7F2L}@fNjlpF6yfq5wHVLiVujuu&^ocK47O4(k$Ra z6;g`$wO~Y1iGKJM)TklZG06|MuK3KgT($`Tu;3d{vvuq0l=%e|JG0-=l9d6-Y zvRRHGi`&yu`ZpCX7OfEFY7C1jslG+o6-#ESw02$G2AP11Y_$0!P;u)4TWKgfDu~Vd zLLp7jJ_AwDUFL7l!leNEFJK^G;2xZ86SNX-rN)t%L{?tK@Dr@iRmT#4vGtMBnL6}g zrdtkKB1S7f5gdfA0etWlZl#xa5&9&QEjonldxiA5s+L!q0FGhr8Fpwe<6VtGft=g$ zIuu8Rh(W*AQU^B8w+fNOCF?Cej*t8XPg5-7<64P`%cPLk=~@8vBrqeb%ji7J=m-9N ziL2I1rGAlKSdD#(>K{Z6J_Ls~fk}RfY;#ktbCd{+ADDD}r7p8Geg}N$zw!eQ;X%rb zT%o|k#J(Yej2KB=G~P73$%x&mY((KeGf{AX(7}J&em_CpXGH+PH~3h)pKYSx9eBF^ zxi!zcAjI@t_qn53#S=KmkZWrCm*Lp}z-=1R?PYQQa$#ndDr$akW zHHazq*JTBL+1Btjj3T1VEFg=DhpD+5X9t4r_tjG{|6z&%95#>&2Pcscd4;@ymWke< zr&xwHzoCC5Qt!8gm<3z|z-U95UO2s(Pd`KtF=p>8l!!mcrsSlZ0Q~ds?&01>##S*Q zNk=%@FNj@aY{Xf9bfsCxE6ddd!*7&7vU85(dTo$kY8ZHQ0NoKGj1WZtR4Wpqs9L|N zMEa*98`L73Ia%NenaoPT@4C@h>I^VgCH>!ZILx8S9F|2k+w;-0CQK3uq{eI@bi+K) z7=&@)JGyzc{1>v)&4GLiLXAZ)$hTbFq!($#QgW6Z!$tNXGMv^eWHgoK7CIdHX9AL# z-{J?IhZ$CPqQn_ltOUA39U!)TW}Ve7GliIiuuxBS7nT9rEgaUz6-d?_VxTd+L)@E@ z#2)Pl+a%*AFGTSvB5Rh{1&~*`+kA=F1@3(q_j=E*B2Escm8%GTs<=NOr_7lv36bTx zowP+DHrQ1Wct zVPY(n87K%W+Llz8+hq!MH0XOq$#K?cKDvxZ@yqLS`=gv?#Yk@%XM=t)CMw}}0fpu1A%10hcfp>r z-z|gRk@%?w5BHOr53$k(UJ?R)Vf|*ssX4|UH`SLkcM|Vs#^x1tAR#kFkdy}q6C$K) zUod8Ipn6e#efKv=N%o@u^b1y&|LGSwt03?xW;- zjnqv2&TLs(BTZKVU5U>y$BwC#xQcl`{B4S04Emb>*0^B{|2u!FU(Ja6(N3l{mc0@%t z(D!yUNdNWClMLSrP7HYpjrPyJ3sDH0_8j({%-%QRNf7|ANhTtMavWnm^m9maf@HeM zFJgl%{&NzYmS9IQa9TJs#R{{UFboP^Iv{>IPFoNC1nP@0vQFLOcBaCJ*be^9wZD>K zp@G`S48a5}&QbtQfej|6(nt-?k`TDVvO!33%k&HqR8TX&+OM5)c}SeVel~U2t&^~Gnp;)5ugurjPHIL}R^(3IN*Vyoo^tD=Z21YyNlh=?zK~ahZg^irGw?MA% z_TqBpfhf7|9g$!n^^H)iO>{6&+m&35=zYo>C8839tougO;>7u)>5S5DlDK&3Uk`!_ zhb$Rbglj5iO;jrjYilIotz>c($<<_XL)1c3DY2kkn_oM6Y*Ub}XyvsU5{jCd2Y=vb zj1)?%Is!z>XhR^0v%g-&YBZGsB3tMu2PuC$Q(sc~_6|!*KjG ztj5zQa9U%Y&xv3`&nl1O$31f`y*5XUrm7mLqg$;+ln-e1j?Ns-WyG`u!fVf8M%gY= zO^w6?OsT~2zdzV=<@SI;SnZ9iLGOHJAj;-3Mj-0}+L48wO9d3LC>Q-j;`7Xo0QBd) z0gSEVT)SeYHVqsi0pgT3Jip^3h!9GgS=?Kt9uB#!`WT~4c;;%xGTGQ&%bYWg(KkhL zLvHf+Y@&|pIcCXTGNZVGOw?r}u`rdP?S)ttE;UK zA0MjbuXgCKEO!TwpBGi^oc{a!G77Nc@1BS2GfFz%6@kFO2>TxJy}W;XFZ4C`YKvew zEBn!p=i}ojgYZ%?X-xsDAJB(GS{QX&R!w|8>0N`KpKz-WAb+{TN;1ST&6$z+%ggdb z5J>s)UEit*_kLxwN{>0_vcy(RCVLRVaBUc}(m24GVm8IYl_2c0bq}*LRWkmVYL)pX z5BL4nPjV;J-ru0W`2|>dricNmR^pHB*Or^FezDN+}XT# zhsMixBIbK$^z)ecM-C?(OAFbmOeTW~_>j$kL=&}=TGbaI&|fh2_04wWL+xbPk&u`{ zil2#M^)V>B*f()?(|G}Vv)ob%NnB@5QcDX$*G9W$8VxMO0KMn;3E!o1CfMGt1}7e^bOrx+?6|_vX zZ7CKmq}aHDd0sidoT007*C@?o@V&g)w5SA&o4burNT(haThTq^sO7HeC1@0Q38@BD zJ8;8p^p~5*K&_SL-{|CY>F~xR5%%WXRv`rWK>6!E`if{8qtSRkBUx8gAv&?k2=F(I15b#tgN2diesFA31onigEiMB@{_fK3XbqjmY<8v6?gBeNYxd*A0Qux5{A z%eR)*muaO)rESLMEjpvYF$N^jEc?TiShVc(rf0-h@)UqA?YM!Bg zf8wEC#>is$nNxMsw!c=qht#ov%i5X{S%`92+KWp=;iax^g}QS|74D zeUoNQ2D&nHqqqn62hl!t!u^Jg;Y*}q)(T11a#4g-$Rnq78p(CVw+m71ts4Oysz0T+ z2w@X7BOW}tc7#*`V1rR+z$hvNO>Der9ij$Cg1={!o6&-Mgn zTKEQCEfow3!81hIc(uL{GcF4J} zfxItekZ$&^ZjZkQ-NRpsGOC0v=jIeuTin0c6*C z3UK9vbxI0$qLl2~*|>u?ww@$5z{^Jh!NsXedA&!-%p`+-?$S}wodp5`snEVK?l*_}Vdo6}GG?zA=( zA-oI%%KOX()@h-TL07>no7na#cG;E1NnipYoA64TgM15*BD+nDt^9nA7oCp7Qd?&r zZPn_|65&q{uB!KxSoLXxa4{%pNgnQT)}Dsyf^1U4KT1(C!fLGo2%pVE*%vnsB^fa} zE@{L`x0}%FVFV~!=98Swo}qolk)Gw2V4axHG^e@=lSS@Sp!6viIp+drLr+5+wZL`v ze!+=o#PgYM(>~FI+VhCWaf1%%w*qgFm-^5Pm@6O@)*mo}Vzb&3KBiI2G??2@;tIbD_5HbZhOX}Nx4z~KmJyOaa z)rayHQ{Vi3&KK?<*Nk9|Ja{=3tN^3Mto(1t!N!_k=z#{t$;y?25&+5#+(h!%5Q0G! zp|cnWse_&(WB+kM<)(db)tZp@N6tYUq}C|GbAQuW|L9MVi7b^Trx!n=ta&^tl$^8d zA?+@@#b{V9UShmS7n%N0eVNT|Sw~Ugf7_QQSMNouFS_{C*>7W46caJNX|ItUPoBHa z*z^%)QCR;7IDdJ7K*2of50@c)L%foB4zUzSI&-o;fJ&6_$(fJ3O~%iFtobyD0iz}@ zNbesk|Lj?!P72bEJtTeYgTCe6jP~A-)q|!s9=q2}8&6rJpK1&g-Xl5AgAN%#T(nQ) zhP4nogXk!u{A8uTRydXXQit5LkdtT6De#E9mo= zOCP~pc_Sx}hTE#SIcxI{h#74_y&iaLgnM2Z&T})rSV%B2za^#gFUGC3u^z5FYGjw{ zEdEwd-A!(=BvGkOe~C&J_zUA8Uy@QYWVz(5YHgOAb_>ooGo7C(FUQYT-?)v3{I@kQ zoeexrZ+%sPblyWMp~ThDN{c-1LEa|ll%BZ1ihhHuHjv@~&<=j$MCJ-xVnt_tN8dmy z7sAF9H*df>Z3eS7WyJJm<`Rd829y?msYHI?J><=ETys1!q+{Kw_=#PK^fbI8;D#kT zBRw?4TVL{YD6=Oi?Cjoc8`p}*+p2Cs*?m(nN0qjLQHl;U>}RXok{9UVB6m{quqEoquX;`~aM6scdH2?xW*c6ep_0WFF!CtBOvOxqvpFRp`Vzg%-- z$&ZJos+@1x8kJ$&*tzC{EdC-0o65~>XXn$=r^eZ3b6WC}I2L|du3FtsUx@9nqEvff z-(ArIwg`(f)nycqtDMFI;0i2Xa^9l2gGN51*EI2YLAe4A66<~!p&?r#z;@9MON1E)@^|T^? ztk9W-`{2B-=igQ_3p0QX(%Mlah_)QS=IQm-qc}riFEY-DV>3`4 z)A(y1pMfw)iLag~C|005)3iLiatf35N1r&t_7pP_XzOmPhQAqGSPP^r-`P`rv}@P; zJqwwz7&&$&;tW5FI=?*zm@zyO`;>YVb;>w==kJ{mbYVL)+A}j%zZ%U|t1zI)KA2dh zAqwB!sBf}&%^0XoRhh)n-UvRdP^}Mp~WIp~r_6KdlRz znl#aHu&Nm)gA!p_l1Ds%E+^L;S=k+_rYB9gsy?y|7#=QtSX zdzU$L$z@E!OHz4@omaa9h1)Z6gOHg@LvdUDqa*dnP9HL)P4*h|`WVpFFTqP`s{;3~ zkh1j=ZoK0U*BMK6Q4;Ibl3v{^KBwELS5*6YASQhY?;;;h1-U8_(+M;yYhI_SwrUf$ zQi!QD*H+8Q+9;H{q+N%RiJm$jnTz5eCXvV{PQ}yllL)U^sjtb<>tz+TkgO+q)7ue? z!s zjLNSeS$(TJOeYm<9&S+9C0j0Gh>1S6!c-##aP&nsVd<^g24hWjU32i-xvbP5a_=p` z*hg!76h_}j#q$?#l-17v?3VUurWXVJEtq?n0>>CcRPn5~wi9$0%#MEb`rualOmszf zIj-C6-;@H&rdB;w_%pp)ZC1T_usPi`RSk_M`D@$ws3d6U6Mn$xXyoi<)ZJZ?GUb2W zJ~!(>5WD}j6+zfjZeT#Efs?5lR$m~8;j1U=dvL92vwH{%EZb{c;(}HSTql&dLi7M# z8>qSFEBgk$1Xqz*NxYHCOT3fnzXX$+$_?6*xfYDQ5ueLUht6<$i{S(X=9Cg6t->|g z89c4w4>Pw8MnOw-=+e~pz|72FGuEyop~NdN z2>BCx;D*BMdZdw2K{kSvXTNjvMmJ+ssMe9)m zuy`cK9|FuHU5k-biW(rzIV0HFN;Yhf_vPwk{nBE4~ zd-}-4MN;yiJ5bMC!yZvg$?q(0q{_fMKRpAi_T$!_Ol{F)p<+giTa00{DU`SH6*e4e z)cvX3A<8D%9k|<kv6TV-BsjWSr3wUmgM0g- zuMNMRoD!G7P@F#vLF29)(*sI9_^3eNc$S@*GH}!|PN|~NzOR)jMk{MQv}NKz(#lP; z7c6RWC#E*00S&ok+mbd02kkz;Qr(_;T;EyFfv@jKKd96)8RqhCfe$=QiEKjW0Cp zJu>6Wy_?{&@2m!R^Tu+nk1wzp40Tfd@qW}ZwAPK-{yuHt)YA49Syt`m*9`P*>HKiG zyL9mGfInPi3>EzJd!2t6zFrki&SlQkSSH9=!3FQ?^p7;(QF)r6%=g*t{)%=fABuZ` zL*xSk7Ncm><|ajOtqEnX+tOnuA=I>iuJ6izmua-8nKQ~i)xL~ls2}7lq*@1!w2+#; z%3#0mjBAvh@Es?eV~)Yi-R&M?Zyo}~Mj6V(9CC|=>5?4lubyx#hTR{-pom! zdD2?@vVa(!IMohyrOUFdNoqe67(~!%ZmP5yXg>7*M|NYX*ohA`JM*@|hIOzy40 zuw|CU5!;)2Ox#vpVL=!Q(B?=~Bfm?9ku}m)>0cZEHJJC1sHAIpkrH|g(16^oOZ}k) zJYf`Fj!5P}UZZGocKDF_btneX&-96m-)W%Po`Qb?%)V;Ig3*_g~a~iqcE7+bsRSh{j@DYt**a&zam%O zij_D@R$b8L-ELODG(}@gCgFy^N3)A>iEk`+jHp+4sJokovGx(gu!3S9@T|fxHmRqz z;>6wrvlk1{>^wzQO&>CI{0%E{V)&tJ9PUaGNKlXML?YS8KyyKAds3I?RllQd23(Ar z+DU6x%6W&+`UmgZC#4=tA5NNJDVYTz|)lgeI zmT_g^O_@i@ABEk8@0AxvBnxEISbd(B?h2X+BQpGRn+=4%W zJ8E{Exn}2e1Hbh(}4fd8~hjqVkP?pe=|o?^^3tO*TO|3B55 zkKfwHVXFRd8KP%VC_}|a%?VSsfqxiLw@kKqRG%UZJ|_F;rBSr{BH7ZMBdQVCy zrmm9`HEJbLr*%H#G)Y$pw9$I%vz_-INKb)d!qR^oe+*rUS=k}nQ2D+3#^(=w!WrRtJ z-FRR@8?c$k;jE-@i7l|h;lMA2-5U8d8?>zq=|iGOv!30vsr9b-mWMG@&`v1Cx5G^~ zLbYqUYSrTNZ0;7&be1E&Mpiy#t+{4ukNO^vD=wlfLof!Gj$7zunVidpZr!Vmj950B z79<|{egOGc8t05i(=r^~fv*+(Ah$!!WfpOr4$O0f7H0}g!l~-@>85jcR0@f(2FqnL z#x;HgY_(k8W>%bwy$G`=_CTDfbeYJ!O0@m5TXNuz$nlVcMMi1E_}sWUxpZes5fJPc z@~~$B4t<+cewT-OpT^A!aL+xYs;lvS^Q`MAAhrUtuKLszg-<1df@t)Mfnj)(<<`^_ zko~2pVrG_Y6uFC{9VAYETiv=F`eufEwGNlIOZ1w90e9i#wuP3!llP&8C)d$VH#qx! zcN>m9j|rRB&=q~+2j>PXd)VI=>~~1h)t2Lb4>%|@+kX|sKl%X(`FY8oaNB8ehUjf_#Q`cqH$Y1B)!l2%o$X<_i@q zViant!3O6v^v?j{Sgg(&4N|RCesEfN>~JNNQ|4W99g$=4H7+4+g=Pt}S#F}J5JCiy zF*81R28LV*Nk=}RnK@5jkQr^~@V%kw41DjnL-673xQ(?*qUFwQYOq#*DrS7h5A2*K z%m6|X=8j-NG5#Vsk7+z-%AuBFoqnERJj|k@x&G{M%T=Rbv|I&kd-FHOiDLD>cF9_$gK^E2u7oqYr9Sb8KT#aIK)5{ReUQIs>u4Kd;@&Sjs9*IMb z>Xo?K!RUva1I2~M9g&U_zFYAQIm8*|gfu;jY9adL^hkgnU;hLht}r7lflQ5Uz(m$j zaTBxv!BKz_N8}HLaoCL`xE4u%qJX#51PeAL7ykvTnZ~RrX}m+n1(+3@8eFD9;W_EB z=}Ea{#wraK+==W-G2Dq1+Oo-&-x*&>#ofV+tYC(DVa&uNN6fCZD732qF`^-L z$w3#s4TDrERS*-cH6Gw2vq}4jjS4Rn=&&7fS{EW_*#ZfKaie!C7-{8+{WmJMX}xD| zpvX@@ru*#$mrDVED!|y4gxy_V5cuKYad+s-6s?JSJU3|#2G$*$)uiHn1F&f)N^Mh@ z*yMSDRr4d9FiHBg_z&}lThQkbptE`dRuVF|y=k5JJJTvdb=wEAqMnA5^x_;k^ok;m z<|~vL=$X`ng_Nv`Gcc0tU*c=x3P*D{0sXd|K~Yf-Q=pHLmF$zuGAvM zV!h9pf9)sj_ezEGj&aJw)3HQxLGA!ljeLPiM={zMoXk5{4X1D`tzd?*4YyWURD0Ie zNkzG{i6U|1cxk5$QoBZTu;~2S-D9}`MWNILpj>30T041jE0I?a1!?o7^RaCP<*fV~ zU+89&Ct_!CP=S(HhI6*7+<2+Pr+WTXCs8WK`S9!nm&@7*$CH}lBjs!cDN}E|H{|c{ z4;KB%UCi>PNt<9t2#E#jUe}*ZVi`)*cQT8jbJbkpjL@QJq{4hlevQsXeh3cD6da z9&w_93$8-V@|7I%xf0IG8>XBjN3iD+=}X>9jSA82Z&QG9g_{|fx`mddtDIgS{JNv_ z_9PM;Tzjo|SxJbRFc%JQzo*!#RL%9-_la?#e7HVhtCB_5lVC)bka~U8xAk7`%jkAE zllxj*G3Sw4pToDF_b_@*-o&1+v_(9h(|B;svK1aueAQkqb>0CeKt?N6R^<<$56N6d zo}3eWDVO_sKKe7M$ToC+RiRHslLClf^$c?9(3}wF$xN%5Pu=u9tnvT`Xh*}9agQ3- zE{KDfX1o3YW|ULw~!lY0%EPVL)2eFvDmYqZdg2>3VTXd5;@UcM5aV1q-W9siXQ z|4W}|X8spC4m{A1vR~&w?|M~-J|<=j7I#L&YB(l#)oGyel7#Fe6DA(d#K|=tO=6RJ zzj_@hcAXfI`-MsGg*xgv{)E{T%OUFqBkRZI-NoJB63@jW-tw?{8S@$+BSRKv(@mciR=O!AM#|G%$;#`&~9E2+|>@#J94Fi2j?Q+=2ZLI3-j*dUR*O!#C_!$-Kc{BXAh=9xo6BY=woS{!rM5*xJ zW8|E})KwLWPq3A!U425S_ncdC{r28P_t=s-42rrTaAiax%I9z@y)k@}#4Pvhi)lWD z=_ny&ypV#{!W7ev5VJ#oXgr~=XhGn#+ntKmo$iF%q#C^i;vA_>ST)n0vF|tyEDxk z9MlI};zXM@AJCo9(YOT~5+ZDl=>)+hjjvk?COa9CpakU}PBjTfS=SFg^34>V`)x;T zd~tn&%nDQ>-gL=PlDv;L4Uj|?gw;KCLB5+LJWu9&E}`D*-?r#TxrUv6E`_xF=JlOh z3lP);v{-9OGY(J0ie``E8-oO5v{1(|b2|CufxR0ro<8<~5;<(r#U@pXz4L}4VBy?2Z2;6!k`}E1Ny40PPXip zIO30AqZtdV{rpiw38Ll3_Orl7;X_0^6Me!x;K)y36Ei?U517Q&3w=PQ_1^mTfadnY z{xTJTiZl*=$P+6aTOzQrK@2B&(|(?!^iK5byk|3mw~F#cqBot!$ot^6fq#iyY>*z| zDt>ZI!myKNhuKwGG4;xUnxUCW#ncgy%yTye2{}Q#Gof4+wuHLwau|77?LiDp5uVea zZWR+Ms@g0N1_axU- z?E%J6wyb!#BMM*OgKgK08V#xoB|(NDg(X)kQaC&(gqKtB5 zAmtZ~E>L(e+%h_3Yag48Yg92H+ui!c4DJ0PgC#R<1mr-;U3z2|WGX^|1m9c?422L( ztDlpacHBAb3vVyWqHevjm~*3!YkX=xglD=@-=8n7K$P8tUy14w<;X-eR=6quqBid> z71QsFDPot9%pcuc1W?PC0MOk$Xx;yQn4wEG8Kknvv8lfgU18Eymo^2lLI#khBaD2e z4zimk01@JxC_i}q6q2T=hq5#oYx0Y+1UO{4L6D1lIy)Pj;O&fW+Y+8d=cT)!0Yv8}O-~ryvkZr0tIdp7srg0nXJ#%& ztVXRzX)A>iU82p2G&>0Gi^<|xD=CO-2Zuaj?rXK3Bz!>52+Ni}IK8P1zvb^pnD=Q7=LWU(rRm8R7ZSt@Al z8$yx!4PV-x?2NW>#F|gx;w`l>Xsk#Q#&FH>oToAZLm6A;Za&s zYh|2m<4ou9#QL7Y`8@qsFKrJQWpXR;Hy}t4b@$et)7ZCS!xwy65m0Z-EzcRsAHQ+xfx{DelF&~6;XT0k8qz@RI{eN{=-v!P*Mo-|2kQA&i^+X zPr*I<3M80Jos3cCgdcu-qP_)h9j@IYLp7SsTTvBB6xSXAoh>gzHKM^LdwG24c4sg( zSVddVbYb1wf7`R?ovLiKT2-oCj9(<9NFLIuS3v4ZxCbR>Pnt6_Cp$pb4`L-nd{E(x z{Qb=i3c4#6z?-}tkh{F^YsA+$7idx1*gCJwhz4X;dO}`pViVie`2ldftXXXWJyXk} zL$`!w7a_9|V@u_@$J}>79~?(t2uP3D>ZgH8a)o<6)I)+3@rguQMDht1-U#YMtdg_D zM>tIk;T>?j%=Lc?-xJHYJh7P3dM*w<`vn=iez_AH!zKfVBP_f2A_=jUV(=$VP?48&yw{yLGJK>Ljcs4$$Xjw!K4W?InP1 zt(r$UpA6&Po^!xP2e9eD2Sb8id<%x$phWaD#ud)(EpbL_HJ;#~GpoOrzEI!_0FN&a z2c=ARvAUvD?N^r@qK@lD)F@qSJtET=8v+&z8-k+0nVI03mxmhDn|L5a8kAKAK|)x@ zIU4PkPK|iLjM2KGvvE=4Q;owlNbCB)@^?m(W`0EGP#8{#P z2d-u)e4)`)lcf|#{gi5M5nD7Ma}M2du`dSGo0UZ+U);p1AnWghqto)&I|`LR0s?*> zyzBz3#B$~3>A9QYY+!Csopyo!C}?Oi;bw=Yr^nkfNY5N!%7`6(E6N=3I~Km?2yt9G zZ%7q233==d#PjLPg{;>-6@Ik^!+u+4tZq`;w+FYv+S>~^ap1gJiv2y{LY7f7e)KF2 zjwD8YOSk*u#w9_oU~isM{p1<=c7H?R8~^b(Ehy*X@vwH{@J1jjXK%mx{WU!vaoD{0 zX_;`dQ=n7u=w*!Q(yQ=Y>1 zL*XI6i{9y87J!jO{o-GH-eYYbr*&)IAV34eTOT~~KzHcA&8E~g85r%f)*D0b4%!+* zvEDkHzcfQZ?{4L+m_WZ9@1qe@ZZL|!$<}_xa1@t+;1p>_;}h5TgW!G~3S61T1djr9 zm(`@#J8sPSSX*53V|^$~a4ea;3KOSwVQ`|}AFWV;?0N2Qg*`W9IDTd2VYIM6VwNj= z#NnEVqizJAyLm{CIB@Act_^^d4>pX^489~#;~;+&Q+3Bf&}!E{7(5>Z=ZsM4Q7PuG zFFG%hIBSVOzvOIQqC|+@u5mP$t2Sozo7UZUaS(ns`cEW3S*oz9+bE0IrY)=lTt4zr zPgDmt1!Eb-a_te)AfdB}t|;zC_`bd<7U}B>)q=x>zVsz68*uxu9Y^G@1fEFT0;%nf zqe;$i)zTLD2U}`mGESa*hSfOg9Yte)`BR9BkF9GhztoAR_63&+Dnl$r2Z(crNOI4H z$$;M|AYa6_FEg;(S+>=#i+g0t2c!0uj^k}`S$pX8$Rbt^wmFSc&643mj zZY2Fkr8*Kv$#T_~uC47hDx47JF%fev4Caqn-=%57fh|GzFS^{uA2CbyAzdU%9v05vUG5?6*2cMJ<&1fZcfV}=3~Du^Bj$&F1;^JPpr48{ zv|4U0I_%3jQyK@XR|!ykN{2-BR9B++E~Z5b#gYEXoOOSDKDfO8U#ZFdW#d6hslE8u z$p7VAX8PB}vlhu}rHZAE#Q~{nZxh6_%7lGJRYh7{6r*EAng8kcJvoyrdhH_Ddrf&? z{s_Dw?K{^yXE15A4w3K4}K(7nt8}u~Iyh&2)Q0mk$ zimZc2-f~+7!F`?ERtnGZICESs2QW>*;ZJjI9K|H)R9Z57=JC^cFA!O=Mtl>I?UJS%8G*{03zNuC zBVU-+U?q=R_1Ge>l1Q(FpWqyib+SKE$jBX&?coxV%G2c8<-C$>#hBypuaLlM!AX3K zf3?dU4Zb;ei@AgO!YjlS*>41f9~nA?c=Msc zhf^TEQIS0Ks5SOw^rflDFf}|xEL$@KsTsrH4uSl6G4pMe5YQrBUt#5L-2}6sayj<8 z)~JnDDQk+k`mDZmQWv($qMcPEA6~8JrQOuajI_2f5FQII^sd3_7?z@?PAeX zc3Co2-Ehb1sf?^~P}r&Dv+lf?KR^`V?MlPb%_QV#P|!Cm5db#Pg=HOVo1;x@E!HmELP$Vf`KdZ`;NO{>H#Y#-?D;Q^T!=Pl#t%aF3Q0 zMmVMd#02rgX={!6yHDZRn&GP9H{^0Km%$^vH&A1nw9m=mC zP40JTZeBHlC2K027Z})sU;Xp>#3dpv1+qMc+wtgD`ENn@AaWw8K3QJMuCUtG8}8pR zeqckhNuU4wu((s=R6)?dIJh|eVIZemqJzQ$|H1fqv>{zd6Co;S!Q>L8hrt~ftjk(0 zHj=JU2k1|8wM(75z|rsaSuUS>`rJL6rNm?8?)%)@F>`ZEQ`Z_`sGHQ1sRjJNnGFd{ zq}J3)V4SaSJH2gd%S)^_gGq7mI=$4@tk#`>xsq;nnT$#+Eq8hv%l6IE6c7*3t9k>1 zd_nxCx)=oHEUtl0L-f7MRVBxr%JB{mEG?7Mx=+;QYPQvT;@k>p>3VF723(}!Oa?aJ zyy7;v8EManC>qAlHS+h|f(b@wVhq^IY{aX%mI?UEo@F%~4AmL?VbWJkXt9FRzyrgN zmw!5cLe{yBvRvi zuK9Fi=?rwyRjN5pBLyoq*S}y2`Fv>MY7)r8!miowZsl=SnY=~Rho#KbIMY?iP&9oC zGui{!vqBPXm(bIMXEH3S*rRNg{xVyMJL4N7_Oq?a&P4{KGvl(wpeTS@yAve}m zPH;VM+O!GQz2jRB8r@8u08N=JkJ(U^RTa6D35bq?s{fPA>vjaL#GOy3TQ>x>N>#^` zsFQj9@yA)ePME^PlSwnJot<>v#*tVvZ!umdwV;3;O>M9PU{YIgov(KqAvhf0<|NZp z5Pm}HVl*rg0>!WW2Fc-7kCrPW0Z2ydim_t;eV)3(hUO?sB@P!Hr(RLCI2N%eMnS9Q zqo7%v&VRh(eVf~66l|@fR&fY4F|9of#}C%19TP5RNUH%z7bWJ>;ds*zRMf16t8&y- z<(--chiaa|wC6X0NlA>$NJH8wja1a|a%1Y3?iNsxekZ55rlLBUP?$9}ElRkoW0|L} zCm9EL(x#V|%T=RSN{4jCW5&d2rk$A7B$`H_7JDY!)RA~D#wetxLInY$fR`)^Y8fpGN_*5>iplk4rV_FG?`bI)5Qu4#e<@dM#*3Pqkj5Ig|3lU}2FKQQ?K-w?+t!Y?W81dv zj&|&1$F^VkV&+4KBX13)Fz`*P&L z0}Lk4cdQ|b$BJ+MK^!?MLF6Rd>fxr>6qxYi`S?6KBediHm10&eS5)JSWfeeG!}R>h zr)9Ixka7wBYwXru!Nk;uEn1mi{F#qw$4rp9(5T88^ixM#<~r5MTZTyn^;e~c&up0Q zo=X|CP%=@0V)+EJ9hP;R4FKhm4H=gcbea$r6d3Xa%}YxuI|IfN>yWRq1uNU95+tm@NHm0>FVMfo+jHvx=&# zcWzoEG8)XBQtH6n6(g~9aQ95)^0m&&{V@-5>I3t;v3`g5odo-@@0c2^wT zZ`-gG(pE2|kEMm{4tRV|-JXEkc|jrE|MaFb!GVh9BZ!=IdwA)CWwTn#x{jIBF3~Dc zW-qEjMA#1PHJxLdmbg=*#C!9oq@Ht%gd4|Cot9#YN8Jby!u55BEE^=X@A{NEno-Z5 zDr>j0*-TQWv!K=%pz0bU&APGrnsO{-s10d+N!^x)MT2rW1k~N7zk$W}D3}bE>D5$a zie~cF5*XS(tDM!QIJyS@*xqr`s?Y`SMO%MG)~|`JCF|`)!*jmQz?{ivWAWb)S=apt zYXCpj$C&@&`wLTk_5#^5NfQ@-(%v4WNRhD19`?cK3%yF`ChG=ir~aKB{{u8C{@myP zWe#z&enVDKQ&hIUNx}bxa6SEt3ikLfgiDmW5gBv5Pl_YFXfVd6gyh|8Sd(%Eti_VN zl}Ju+&E9;oGmDdhoK<)%G}65wvQI&2x7V_I%t8tb-Jpnk*hxVuVK&(33_h}x0P_XE z$Y)W$HNT4%aD_QEo}${?bEB;Pn0E2va}Ln|Wv>4g^Mn+S?&;AR0G<1BRUnVqNX~@i z^b-rRoQbknKDC&rk^*`uSNL&FRd``JH< zMpz0qL36zpy!#~VoA1kKfJ2jQ*3f4NeHYUk1kp=gbIS5R4XLqPhTiG)4PuW!@Z4jU`Jm$m_fK& zmOD6WWN08fDm#x~!&B9Lw6*6G_tMU3L^~QXnsc($O_0lYie9=+_SG%+{FRwv+4ZEf zsF$J`0fF+H$lsc#xm_ygwV-l6!00x0bA-2|<8<=^8Kctr$wxB957222D*zDXPZ*Qf zwg}N>b+B_IH+4;BsL%P-h#PS|KQG`ABjK_l`Z{5D(l<$rIq~0{Z||D_Ax9QdN!K1d zVoZGLlpnV`9}*C4-pBGNnTgP$z~kzN!$c~G>uHCRnYqu(qlla91kecmtjIroq-5;l zZXRGDOa~S=90|v-WRQbU_DgM<9GB%76X&po3AtuiQ1Ybwe+{ z#XHcV?ZGQ&?D&a$CpjEN23Sx1xpg*LfcVAst{5vWVE3~p8m=Q6Mn$kqM1b0@@!;cl z7jsXmu;bs|$hT2ZXb|L^H^K3byOa(fE5G&)#=fJadq`0E=We%J5D8Ez7e%!FD}B<( zf}kOF&gS_1{FL=jjgN~5mAmORKAi1)buoF4n|Mq^GMiHHr=eg>C2llORYt7A(}bK# zh}0HKf;xZ2^xm3{K9Yt$5>|M5fy*o*O0FTpMzOm7VfgDSd#d3fHC<7ya0O5YcyzW| zfg-)FzefBgo&N6q_z(v6IhOPOdc;=(ZjkeC6=7fu_QV|?U zsVIZ~J)$*p&s(pNn`b@=LpNURwQa+&1kPEh4D|0(V zvcs=Ddq9}ZAwLm>0qd9tR*Ci@6;sq$BEI__of4R96ApC5KjQlV{<*eA0tg0{x#jSw zZxA_0>WLdD)sX)GaObQz{BQ(g%9?wz2Y!K137grEzt^M6Bvl;p_KS0N1S1snz*b>t z5U<{&N-CTd;~0Cp;9xw7i388#koylZR1Ivor#I)N^veDXFRO6<30cbhGp{p`|1s%p z*;t%hEtymRyl({{4PI*wzP)l1+LyhHkt%LR?T_+-g35i3U~$j9)-2b4_D-yhl;5n( zlC;S{Ro>hY;%djb&4fWU?@QN=SaCsJQ?*(h+39dO#g^^B(G0egI?HhvYgg0IUsKME zuWSDFDeqjemXEU=A=NvsP+K{zv_)ES!lr2xhze$M1Wf=~6mzS}r+P}&H#Tm1O7nA^ zZi%GPryo{{x%`R-hX~2zHiDO9d0YlxqyO_m-~ai_XMe2n$;BF}{mhqdBEA$MW4|b* zWtwA@t9O_VBa-0Q9Ya@+V83~_d)n>{cC-!*51**n0L}j0{0|V(wuU|@(B^Irn)OxK z)_IS-j$n{JWL#Bp5hC6v9V!gkEF^aA?kzT`I4klw5vW=x{(MHc&eCF}@_=Wq_Oii* z>)it5t&u-cN$Ya>)q_LrBX9eQg-=!(g8oXv14q_W%qPfx45H6} zP5_)NT>o35|8IP~O5;Cyvp4l)Op76TN&k2e+-Ef+31%{KR$>fMwjD4+>R}sdDeLkqH?8FOI$t ziNxyOp+6h#aaEs|{vzCPi!b*1@GzCI(17t11R@3Uqhak2dbh~$-r}N-pq6(A zvF)N6V8_;elW1tOletx6F*ERYEd+#Se>x`&ib~kJrsLJHM>Xc z#gyR^r*-WasfMY9ui}=Wtwtp=um?`5TWQK-KWHoQ6iLDc(bTfN`~Iku|0c26a+X61 zIWJI9KOgULLzqKwqOg`GlNNH(HXbxp1XDaIK-ct+z%V5`4cU6)4H!{pv7vT{*4|Kw z;|h`&YJ|A&(w|tOmP4(wx6MDT7I=LajzuTll{k-owVnfft{y_o)fhrsHPEpTJlgd3G)~$Lkhk;OW%a*9-t`!s5^Ktw zVfA2uwcms2r#CLYf*pU5&YF<%0H)jy;tg~c(Pi+myLx=@?ry3(=|aur?ZWUto%EE-4L>@9l@UNeG!cd?v| zG`fd}3Y!-+g=d&yPomOdHAaC`vRoXII0}WEX%6(D zf+H+fn(1yj90EFdrQ?RRko`4#;u5XF=fFg^G{n13?qVN4>;lq@H&{G`p)n!9-r1J{-0#@YnZoD61R7*e3Rc%a&Z`~ZD z#jvEh*fVqAQA`lvsTSv|>PP1wbObnLhA+iO*!T+UM%xya*2=-jb)eZmg|2l1n7e;s zT5!t@PR*)!-r8z(9tOpQSdbW#uoen^B|E<(b{zU@nl9BnI~e5o>wk;?76 z@2g_LZ0wTj%&1s%2ai|tPR8Cz4dBx}=H0uOZDt{0rX>UI$KTF&Nq6jZ!5Nc^y>VE! zLnay)ski7WU0Qv|`#}6yyNvoz)sTzj-zhv`mXx~JZ?yS;clAf#V|apr*WUsVAV z2?+-aQih};$;`n7>z^-FQ$6O39d74t($e6NWO8YhTit2CKkjT2=ui`Uu(~p0Auq+EV^Ww4ov-It4wi9Wb>Z4u0Cq&9h$njDE-NaNs=u5Q#E(>dPf;mUw~}J+o|Am zM}XecZHnK;#9%!$NkscCEF2Xi%L~T`7fGIfBC8pyj%kEL3cu+f5Gf8QIEzV+@3>pW z?qTPqX~(+lQwJ7O`0rhYygsJ%!gc?;yu&{$s=ZEYKL{n2%6oBq1vr=ZIu!+*hHc^B z6PWQ4&Nwi^-Uj)V zZU&vQ#$r;1b2z!>#n?kl2bSuRN<(nHmPdb)r*8%EfcRA{Ho5Z=QtR=-+%IZ$@ zNtQ^%uE6~2?^Nni*dXl#8%|b9f;eotA_2-jY_cLX)jr8fE)@}@(}DN^90#+de4lmv z7m}ZE_aEtqHt7NAyE(Nd7qUJKRIKu(nS{H+IuW6=>6*|XktL~(Uh7;I2vY74=#vFu zT5Q>ov=6mE_aL!P3^)^$thu|V$N3VB=rW1LqLlKX?|!r}T}#g5Rb2JOyk3vOX+79> zcO(lzoHLNb$gLxJ&%4I+<=Apg9LueP*&}Q`hh{DJphBoc<$IKnBNI|QPqtR`uD{w5 z_%*Rsu6Ny2i!f_iP>n%)Z_57^06uznqxqkI6vsbcUUXpYeU<^AJ%P5^6PU}h659>EkiOl!}Aa0c`b$>G7c%Jn3&Upq_&Jr>266c*` zSc9SpSu$!^zS(qS%IPG;9vu2+gtvFiCz!T($i`lLw57c-X&Wo;8_RZQU;4|xFU&-b znl+byey+Tw<#7|01DbCT|3TBOl)Pl1;+^MYD<}3T(=am}%Q0GFa7~=pit$1U5bbdLdOCO6^mKF&IdQmcmf^ zc%ImVijd+Vd&kx7RdsU+VlA?WD3XYW_C0Pi1KWtkiNvY#;FK6N5!$RPOu>fds31d> zPK_~?xns-7#X{~xrt5n5;322Mp3T^n#e{KUJ&!d_Y?O(L8=z2^%#C7j2BWd20?f#V zU+TNM%54JyZs~UyJVF+6f8P;b+@Sdbk&SuAAw3h4uzw|+MwtKF4%;TWX6?{*Stxd& zN=edc#~q)hXcuB0EaQbhd{`4_j;_qrlUsqxAmcYPM!_Fjv{m;7S50>9%0Y+2Ikn2k zRjXz`?z$go3?>~%JfX=bDp^~puEFTZ4_!6%tHD79ctOb#u8U{ebce_h$aNR!LRwoO zT6mRaBj=^0*cyK{0-gC;tuOjEl|89C^ZCx!*z&3ql(^>Y&j7s61z2dIz}sF1TW|ZN z#}Ia&Tga$$1WSljhQ#@FlBSsh?~?GuAHeqh40t@X1iqa$>xFF0Y&Ct>(sq;wyJ6*o zj;J;OfP!q7cuBfwndLYhpQcD!Ffni({o^C8h{DaFd0@pC$`j=&-1WpKnd!@UR&0#4XlD zF}7EsZZ-sNt?xlq^U+{ijQChe%kRT7lrYTJ5{Fxp_c>CDg6#<8y3g{Q$9;M1(Mv^R zxZX#Iiq;v5`2@$ql|O7&r)+)6O8ehB%Jturv1}+pMW32aKx=i$haHjEGvH>qiX5rt zW8v;Mjt=(MnicRwAqJ4uzPRwgbJjiB1zsR(^GC4$bB5qz{=Z^AAm7x;9Y`v`KW7MB zPNc3g^=nLpeIEyj-qAd0A6leB?nZVeCZ)V@Z(zU$&`Hk~u9d1p)jmEKKYhv@mpxae zC!VCYWf|GUPy!p^k!>`GRP_?;Z-P~dN`?ao4!<&L+N(cGB4c%C>lC)6(isG(Z2loD zla|2@oM0L&DZ4RTDMiChGCjZ*B`5DM{!;k7fB0%+@$4a-4waZ;I+Ol4N|_($lD$c# zqIJsz%k?NPo8~4H6guq>GsnRGJ{;(}&kui~-TFW%r-aH<4f059)ig`=- z)V{@#w@?k$Jxg%?s<%v!;3-T;rq+3Qst5^W0HC?!CeO+Hrir9Qpl zZ|)_g(@Rzo@%?J{0mGT>DoPvodibcxr#$lbXJi+!s9H`!#r%&=LD9D^Y7bv~tbmsA zE0Mm%VI5$Oy*3cM#TCy0k=iU!8(#t{gb4A6LSW=*j-xozqE^#RC&iX^GDmtlY{>!F zL;PgNESqIUXIBn9L|DKLgblxy9rj6|7T@DC_Ze@*<%#+s-f}uu#>@IO6fySlAgRfA z)1}RIHXk^X6_(}ze;g67#dKfF>^kVRR9QD-utr4tfnNOH(9z(;;OV4jQbZhK zeW;v;nbA*XCRQ#%28X^Q1$!3OI`=3uid_paa|)6o(Id;Y-yr~;s%~t{M0oHB@M(_T zGw%WQ%BJd!ii)X6-FBfa)xQs+jUNv!TYPRSXEE>Lq^)m{2NNYz8JtJ6{YgJ2M`k3Z z=(tRGlOcJ%3E;uU#!15n(s89ittPCVj-1V93;O;S_=$ zD|4{}G*rm_#d85Wl1M(+>Cz1Egf%r+SJ`t5s;hdW-mOihE9`|RKmHy>f55ADb*5Fk z1D_0?s5S$FjB-aG&jjmyzZ||^QZ|&^CD)#=s^=f~F5i@2Q$F^#^xdBw-j3`Vd|~C? z+~vR7%ZZi^AGO|{Uys+GPpwP8xS#GWV|(lX?O)k;c!hwVhArT@4I7diL60{eT1nk# z-#$eJ-n&>72MBPhB*-l8aa1NS>VoP-Y7``#7hbRMmYY$wd-lEsEjQ{qD{QMz-c%?e z9SAk4;ooR?ps(?vF$*48y9UtiN(820vS*{CNkkgrA$|~jf01IEaXJIb!EtE%P3Z}O zqsm+Lf-C@F!LxCLGn2{a>QYFy={vGW^jx-L!jQAw(mMLg_b7HliQc-fV+{~LN&*r!2*pB>S#oWt>A{0N)GA5&pQK4WRIq(meL~gP7o7cgs>leND+2C zku!fisD({&j4!>MnJMoVYNLY+w4zQ0wpx#aHxhlT=#)G~Fn?os*U@4idl2DToV4df z_AQ__lJ|m1e_grx^DDc)iSUZrQGL*R+}Pn_hU&euYh9V3Kz(fxGf3Tgd>;Rj{mn_< zb2xT_?;xD8g71KP9@Bf=c{}p^-StrREt`im-+|;k#uP$6=2T1`VmiJkrm{JS5?Rxh`cGQ-GI=+a%p9u#@0wD!C?Yt+w}lOgUdt?IaOV4av9AxZZyWKz zM^eE+YWS?$EH3#%OqW}TD@dTxUi3Zq2qE_f8z1j1|Ff;({!c_4l!J}?|C@C6sQ>Xs zj|532u0s{dwo)kGSDo1i<;S;o-rgJ(senHCOL=&D();ekWSS$Yp`}3mZq}uk z>uwt!heMxrjGXHr)fGyMmP5Zzeos^LJjK*;jN6U^+lrqb*4pv>@lB@2f8rgTefHZQ!Xk}5Koq)Je7lTB}27-qC?yLdD z7MRokGSuAYSb)FNcQ8O7SR24cXNYww7EdyhMy07m~Q z5j+?V!RP<8^HT*xWh)=41SNNij<+eTBaud-;SNz+;mEl3i8>^Ke~5RiTHPSMyy+6= zS7%zRA4uz?2iyPLpX~p}U;Z(~Fr;)X0mA}vU(No(C#jJC)~K~0^Whjfn;Y$_sdF zerM|o0CeX<&^9qeQ7~o*#sT`4ewekQ)e+ zn^kGgu}Z*Af*px@HPGmofyrO|uF9|yziG4)a04B-jFSoC$P>*`kM&J5Ba^~L^^9@i zO!%EFnB-)a_1!QVH*dVmcY1Ku+W-uW161iV1(Kh(Y*(X(GQj=@E2@VgU0+mF<(yV- zLRRS_UBv3nMENfcYIi&0kLD~9^D&S}R|lYOgueNKNdw1w2Sw);$Tnvo{`9~Crbr4f zs&{{93d}?@^;bMafIx#s_oMy}9Y&e1?ZG?U6-J-zh_4|TOM^>Ytz6ai_5q5TE*j*Z zpe#Gbv=K>+<$z@hMvG5@V@9bUBV2I+sbJ<>eZV0D2aenE=4iaFR#ylw_U)r{ z<`~dsLs8&$I}V5Cv))c4XZfDntljl8PKG1>r&e80d2iPV2`-E^FZxY&Q!JaU&Q}G# zM$_$}6i`4MGN8nR+fCu47672`uo8tl@|62q$HDvy;nr(9zyCb3x=&vSD2DgO#hRMx z97biI2H)L;9`Guz(cGUxPf*M`|p1&^y#3e%*&yQw)v?*>}dltttN z6yZ*8o1ZQwHH6fIb^SA}Y-`<=v+CbBa%_;8;uQFKTuiEvBD?X&2h9g=e4sX96Qi#$ z{(bxbB=c&>OfQ?fon!jbZS-mK5kXqYg7J$G1V$xcf@dEcIX{qT8K0E8KOm?e?A$5# zc_1_?+tna&z)b%l(wn|j*?62tomcADu&pLN5+H$y;d$CX12@Fs+d(^Yfj}W>5-i*A zzUACnVi}WWJk2igT$x5a9hwcRp@j*Jh_d-*&Ha{>=F-2XFzFZMK8wjo9Fc*TH`k453P;7{d0J=7;G)usa`)5?t;vOt5rG8z%Pb-~^P`x9 zAv~fLt+Qxu1E91h>S`rYSvt+dOp0zNz8A3YcQ_%eghQZjHBZDpk>v@F))5xV@;+*t zUX8{Mn6yAzPG@r$S8rw)7cPH@6D%-&icjM5cN}8CX7$EXu6wa3RAZZc6ZLdV8o*+2 zi1S24)^-=1tw~h{X-0#Z{BYNsCOjVdIWOY37sjDgD}bYE5Qg;{L#go(-!YRLzz|9M zEE`7d{A8HGVTu=`RP|DiEt@Lj;Tm+PH}U}jb~x&H4*tNO^xWDNS1g>O`|t*`-+X>? zByr%LRIGW}v`IB|X#r9@*cEEEf$_aU5ok}N@?joqI9}o*OLha$Sr6+o{Hv4*7^#>_ zXUh#7PXMAK)fSlXqO@}c2Di7R6PPg@i?bHXulYYcg?TGTp2^whmaU)fC-ZL`73zP0 zLgv$E&}2x}ldb^;Wl=K63Sgwh_-tUICKFM!PC`0m(dVXEC{gio;J=VTaeFZaokG3Q zYOzrROU)0fG~$w@USk8&=qnIUkX|iZEV0?~Mgh4?3?V-$ic^oR(zV$(m>tl?d6TH!nMmF}K^$aqBAJ$33nMR@bdKdxv|9W`bG8gfv4qV}-zqxW8Gl(~KEKc?qV3>OL>Bj045!6!&?Y<7t{Fpz!l+Xn6EoZ@F_wJVy~ zrwhB2NfkJE)UL&eFqKISYpp+r};)Tt;91R|sWpm^~N<*R(mAyA8 z2DGJW@CaaiL$TS=5fn1Ead${qD)ditAfN#msDcU+#X_@D;wD~l*QChhnV$1v3V?GR zg)%m}J18w#tcO*0F4R$lTD&NBFFNfLq1xxK(%DqcRzzcwfL_?&&BO3{=&;>V#un8~ zh2o|Sca_zOjhc37VuYHbrD5!lp&sSk}q46 zmb0I>laeO@rjn9v+rxXbuCdI;UVwSpeE4ip?)k9iVI#>4FZQd|HHR}#w9AC*>-Q&S zBi!FwmthKLt$3eo?y7)4%q8sSnujhp?FmQnYUb3VlE?n#&whyc%t`M9+##EVoF%_n z#O&2XbIj?s;M8XLn+%qu#LNN%kI0ek5lNA^m^1Q%+(dM1|DFqI4~r^`5p}+B_r>lP zD9A2sH41LjOLr(^PdD_lMVq zky4(a4IKbB10|m$iZX;<`!g{q+%v=;fuhAM94#nYLG+~eHTK0WH_I;zb@R13dpX-d z!ZcVC+Dh*|+c`XM-2fyDB_u4zGZ3TqJGV#2B}y>k$J4aY{gcFF5C*ALHdccvU&Y{^ z(;+9_7`v9@M1n<;%+RX$^&^m8Qo{{n*+|#_xCX!|qC}5nrh`OXFLV%=`jk@XTa~0!za@`t=jQFLRoK6TeRW!_<~%H-tH;XZ#dL)8s*k$$ z9jiLKxp-)5zSpJeI`{jv?wvMZUlP`u!ZLZj{|s=WPKzNagK7 zOHr-dTl0``W^>L%E__;dwrgW__y_Z%u1DRD5EJb*=M}T%%2u;_Pt>8+HOp1LEQc;` zntmYBE&Mc-Z!`>J49E>-ewq0iIUi983?6`x(twB+lCmz_%*9MVsO@U&+#h{3-Uuvj zsyA>phth!Nb8GVYcXukh%|wWvkw)K(O#dSsgD3FKeeIVAd!zBKeQ-vCXwJ|n0lnY* z!$2tKG3=J725n5J|Jv^K#I$IA1NbqYRG^c);e=WnJn#VVyv!8Hv~CAU5}1&=7!}~a z8~HeErc>LaIs@VtL7;>F)hPr^U^;$;?&*oQu{}fY#%~8UG0VH3hL3L7X`za?v*LV7 zogQVVPOdWnNhtCXqc-6&b^<1IlDw(5oN*(zJIe%!RaX_65}V1a4Gu|=I^}P5T0No3 zHGUR>sSW4u6Q+Y*Vsn{#%?^yLC+&>ffAl#6X)z%LoqxLce9Cno!KQr>%Y4bB0Pmqi z0P$*A9$zbQE52AdKVViEDKezY9s+-_9sdU7K)AX7$qLb=^s<2<0My_l!x_JU4H-Pk z1dp}W_jC8T<4Q7u@gR|_yn8EdxUq#{xK zEUT*V$f9O+O6jP?^%gC$pJ6SwdlAi^g-HUoC=3=p`hK)$k43z0t)EJ22aW?SIvipz zz)yZ#SOlP3lp{7@5kix?N} zg^*j_n4nV|iBkd|m)mdH=3!+08#8WpwF|G<-52YD1hf9hdrB4 ze1zCcedj`VdQnlKPyG_0Jj#0~RVpU-VL9+%`y z1gFSL_N;CF#A-$peLJZmTr^o~*98OH!X5v9{zQuIl5{f}4|Ej;F(E1u#4C`G!QDb5 zQC@&8@3`myFpR+^!OBQ87O28Vu$1LWR3u^PFBNtR%ja56DSM6dYq#iqtM5JWWWa?a z{cVNXArd~w=2^DLd^=TaYjTSFGwxGmhqK0-Ogs%f@{duUR19vbhZU|sXZE^$G~eBb z`AP=@DNXS?JrCcG%#ddTVK^$v+xmfF#o22AVKp2bpk@(2uAU!A-p5WiJn6^&v@#C^ z5zd+*n0%`n0`NEQ)+9p40P2*Az{sWy};f`Sw@oe0309!`ci zO4$g#y`bB7CYv!ggE2+ES*JHpK1ztoy_vrQNZZ1moz7ceA=w`*LFvNe`y4w*r5-+2 zw>)eL%n|XJn%K~OsRBv*-|71C+F}{sK=R_%uH?wwUVDKWWL2Z-JLyC2-_5XF*n*gO zO5h+Y+6Vu}g(+zzB%a`)9h;AG$o3U*4|MRAb2R_+y2B1Wg|eBAI=V)|tJyNdQS*~c z<^lV5%b~~PDP(OHPn6QIOV3^d*H(HhD-mQ zRU%bkP~n0y9tz$6=kc$}nvRSf;HMOp$p0xZaQ~|YOr`;aPhpYx?v_t!$VO&z!gc?t zxn`WvAZ)hLaIzTKgdv{FvmGTa6rm2@NU$OLc=FvJvq`)N1YZ$hWc7OBPd3ri_ge`~ z(OPw3T-*aBjok>qS~H2$^9BYHA|nb%w1VY{d4d^=b%4)CIP&=)53Op&psT`oOEfj{ zs#zd4xI~9)N)z@04+BgCEr@u*b&Un?&wi6o3RxK-onm@P4iI7ejYoOWj~3 zl_u#C`-9_tbE0S>@KvKf=m{!Wn{#^`I1oKxfvXs@1FYDoEUXQO4Jwa^`v#0dITZ44 zE8&}4842jHPLlV#^pc0fFX1hQFvr zv?G-@c^Q{4=Qso(0(_yUf)uVPs4ULd_nUBd`@%V32@TQ)^ZWzB9cglj+G1;^a+lbf za~vUC<7Ni}XE;2wKnf=@lxk(p5(1mXoh47eLy?rwkjY4S%bptPC>|rTzW*W902a46?41N#vgsX# z-G!PR|Le7uTLd47=wuLGMU0FP zuZM@4B?GXqGm?x(pLoiVo!mqfp;We{%Nwq06`w|ZKZJmR^G=joZEt@$zM#sjSEJ<* zr#(?kZUx42|Bj|w*fPy&OMt^0|3$$J5W^ z-}>!+QS&b%%Kp3A79-G~Fh8|1LKP*wy7PPsxW9Rv4|OkzJu+(Z5XkcTy1V$!H%*+i zYt<|Ljm!&LKZi%_{s5w$#ZL*?;sW=*)yEun8b6joJ$UaSc*l7k3gWj0nM7cF4Q!E9 zta8e?ox9EkQz!RitM92Jo%xn@Tl{2{2^R;8%a=XsWdYiJHO3)M&hJuU%S}4w2+pqr z2oR@sB@PxYfV<||&ZJ^O{RZ39AU&#FpkO;&=hWb9hv0ro5OjV;i1c z=;v}ua$k^IO*kpiQLMe7?n}Yz1(RY1(AZUqpD(q}wjv)EXA%cGMAQ+dfCfe(%Ps0F z7TKs6-%_SjPNCnl|9&S2XX?*Cxh#){D>TsQRXR>>VxlCQO$pg#c8X4x0oK_ctv|rz z6iQ!n3;uy*8MVP%cEg`O6Ut^+iX}|=IP|rH7Z`~mkSXHeo3ZsHwDL^P4Z#x#AP$># z9RjOmnSp!%(MS~g_;m%OKQ8fe?;;j%AF)z=m8Bgx4(l~h&E4f>)_q$V`$WNTJs}^Q z+*=A|a@1H7XG1})<8IO00)%fE7BW;fL4Awe58lEHnc_ zY7Q4QPEi1#CFJF6DbE_2;I+F709QnwU3xVSDv5bSIgn8@H^$4XBPo6uZHv(1`ftKm zX=}Cjo(TfgWg1IEzN7PfRYgx4eL{AKv_ghk!c~uU>paIq5n?}F0w`_&eENPbW`?8c z9e)BeQh^w*N~bF$&E*`Dbt0Fdy&B^Hcn%KRZP^7pyz zUlB4eb7CGH4PfKjq%kju)csF@=^r=vRj44|Y63{P7Zo+;w!ya>JbpR;qVcrHe94;f zY`c`GwRi07hPONI#jKO6JyyYmohK)@m^Fk1UJD6%Dg{{#4NW;-1&qsl)(6>_;7>%S zT;w~f@V*}kYRquTVP9or6*cXbpLKF^rU5&Lr`0r|^L$=3v2I~BVjULB0LJ3h_0up| z3uqpD7Ma4oHQI7uM1v?-N|YJ7*Y`eF-m|W%ejHoQT;=C@KKf)?0aY}5y2fi%%F4&RL-2yXu?&?24bK24XtpsOyMpk!P>_qO zT|_!Sk4-O22$FHQ_t)c=K16ohOg(gnU<8%IX{JuvtC4y#MGfRGZ3a#Wem`SaK`4p# zGNs=^Q>=F{m_kHBDr>KVSA(>2k!f?4E~hUP_6$VZbby+zT}$!iZ_kNnFVlD8CMdq2 zR*V{{ruEt_jQD+Srn`Z?z&PL}NVd7m&=DE{lNfR>aCQrst7ccnw7+Il71Iec3hf6E zvh~bwURg556^>ipjJ{QLO=I2t!4f(1L*s>8YcwXf$_ry=YidQf5uZA3d#frzww6JI zNy}cfUp^eukw$z>Kq`UT?am(gtbF?@sWZe+-p(WRf_z-=BybZKaxfzd8{S+nKiM1r zQ9%xr;!&;akq3lP8Y1)~ylBg4DzbR2w^31XyW_$TzXV5#?1Q~E> zd%-zG;%wPQR(iNMjf*jS!zDtp z5ok(iZjhnLglyF4n6-#Q=-CEQcoo0W`e%*BeDrYoS@zi4%P}M>X{pOUrx!F}rhgE& zsG!XM1ScGTsR0}RR|zD~37M6QT!~EUKJKy@k$ClyaB5P+R z!Uk5teO6f>2R`)fkdrLd4LR1YvwcHnW4(yCe$uL}Ko(nb$b}|#5phLkf_(%>Ju`V$+_M);O+oH3TamJosiICquv5 zqZZ&yX-h`7N5gKxH*4sICpHIQBhG-4*bu z&_R^Kx%L8qA4`k;q}ou>b9Yg#X{^GJFkQ)l21&CX!sZn%vHtaXiLXdMxaeE%HFEq7 z%ob|CT#F;e#U4$NW0n>!5ez~uH@gv8OIod~z|^P4%3G9V#_q44DJm&qIWkT3>~A zV-%ZlipuOpB39?E7+To()egJ3Hi+DM0NCQYsZAgS3(_ zz7Lcg%E^lpP9=yOi+BG4Ym~-@2%gJD@ng=PYqui@aplFQ6~DqOGJ3s-2lsEvWQg;} zmmSBmt|*B`2;HH`XB^<^Qef!qOJH4JWt+XV#J0Nvy%owmq6r9yB;FnaBEX0VLQgcp z^6P+1LAaA2nyj&AmqZ5S4m`1U1ddX4*#Z97PM~=tmq+#W4_$oAu6yoVTGKUTMjN#o z1czqgTexE^$<3CaA2^did7YlcLq<8AKb9E#i2L38V_QtC|11FJt@IF}4qN%pKU_e} zc6Q)B-`=;w)Y-Km^J7&L5d#jS2E$Mss?5pcTJCen4JfNr4)SBY12gD`F@HM10zM3E zK%iRokb;bWq{#oSYZA+{$D)um@Qy;ArXR@KwSoL3b3 zP4`M|N=Bhh0=i1zEDdy%8#59N7DdQ54Re7EsG$X)hOe2-FPK>dsCm08onzSr&MH7d z12^WZX&*KRDaFTUvz;B!(go^LYJff-%C|Qj0hh3?ef3hUu3w1^R~nvt!MOa7nGSWX zQ;#8j434xw7pfua-oN&c+3T06qd*$aOheVb{t&>iD zyVmzOFj?E)9UO1S!bApq2o|cNnW8ia+#IOliLKI*=23LPPOBSeTX8dk<48BifbH(# zNcgG|2ZBT>1h;wX}^5;T8Ji6nzE zmG*^GmvnN8x3jz~xCN*#F70d~F4^aA-o;b%**~D`y9o4q^;q)Y+BFU=2}ToQsfb>0 zxpjR&7}_S6XDSV5y!cjtA;ikm;ymk175)XrBemw^66X0V`d!cA>$TxqrSJlzfj{Kj z(gcXD5Rx#GnH}fe)bzayJ$jDM=5M1!^b?=F{-iGi*@C%Jp9>$VI2e;>oW`H}x8w=R z#KHcbQLTSE&MB`x-(^o$Ef5?4DF*3W1W8^R6h!#DuUuOjvMj~AR4VwqtM8vGnx%;m zk2^K3yq$tlbbC2drFSP{$IfGnJbB8aWI6+awJ%&Zm> zEt-V2&g?kVl%DOZo?=!^g7hA^g#|TF`G&tV&{lfQ1WzuvIZ^>;=eTyr#;#H zD*fa=d4aD$gmOU4BN@Ic5wSbrX1A}e$K$ypQ^Vf{pvvFKeKiG~3$oUsHS$o!m$h3H zwKUHwj;o~{A`;>Y$@eQ&;tM(k-`Pllf9n;bqou+;09X9P>G+1b#KFXt3+RL0X5#-t z)H$|S8fIZOb}FgZwr$&H#kS2;v2EK%#kOtRtk{$4?wR>^e!#h&cjMk`F^UwO2M_QB z-qmO8?>+Breq`XwBODgv=<#&Z4Xc;LARGeh&TBs3_rH!F?jXd$m>pP1*}m8$*)Xctv%D#!Z9!r)2G^$7m@U@RB54 z&|G0Oa6F^+0ACg?Sa-~d)BD@mN;TeZh`-T;$u(HzYz36r!Nz`xOI_xp&@!Q%L>_v} z)IV%VpW@$zn!^TWp0?ML6$-MKyep6?o#7(&!X0QUk1jq0~= zm6jJfHAa#_LiJLRQ2AuiN(B{wAlvl&UNhjTP(|8q(N%ehcMS)wr*+O2jq#vjX8<*m z)p)cGf=~$SiJAF);MUQVBF*_xjg#BQX{V}N0PEbko*T8&ACq5-^>+eJh6o=!htWQ*OZSvvT@f|e zeBcVEuWq@*7!r|OY(beZk~#khXr|o5d5Y>feh}M)ZWOK8B^Hc&>RCr&j8whLR<^K&7*Sv+aG366& zY$q8J)*~sNu6{1l6~;5AG_9yeGVU)C@&w(WvXYFd{HH@Pb18^s?EtV;;E{T zgyZRi-8?rsdPOu`LsB4~D$|kimm`X+6kD?YX3}CPsl-R}HlcCPpUXSSmAP%HedNnouBNtn0yb((Lsi*%U;8w1d)Q*5eeZ6tTAv90 zp1x3DB9DAh)%#140KHwZt6#5| z!;jM)PZ+P+ss2@nZ1DeC$m%zyN2UJFwt`L4hNEf~%QWvMK;z3e`MwJo_Gis>)3KqG zCtQ>oMVzR}%E}Mdm#4UFegTHvpy%Dqp!DV(Ko6y49-xn*ow_L%^p6F` z^MFy^ckt45mn$5D>HXOYGgf1x#kSZ5+vm4rNua>*LKHU}Hp0D*i-m4n>bzxR1Avn0 zf}I#r=?tDAR|h!6o)vkUC*y|B^CP77=u~nvx`Llp2Tu%fosVDsPTJQ@+HObrFc8m# zW1lJ|Z>?Zhx2!L?OMiEjmM)Z8pCSfqr1J)Bzj2Z}rOgM=-w%5w?o+{GB)<{A;8s4pAnA+Ty zgj?yyyWT=k3cgbqfpTS1!7g`io0E$XX?x%9_gCkh0R{N(9yvsm_w9f()UJBTNYM=p zf5Q!jW3xFq?px)*1GnNCtAM%j>ZWlqaq``*T}+NJ&y^7oXQYQ6WAPFtKxjn>u8jOn zHg+mr?q`dS2Ug_Cr8FSKr!xaOPJPo=jRC(>oPI6Vf%W~$vKbl+?l!MV+k0Xf3=5CU zFPK4d4f%Q5rhhP+0#d!t1u~Exv2pSE<4VgIIfnPpnHJ)Rsf#m7OV#9N_<&>lfT6nU znymMVph>S&uQ`SR`yqA}pskMApR-S%HpM%4PjNY*4gH|+-RCjIdw4Q*ihEe_9R0Vu z0w#RC+LkJ##rBfPl-Jp@!iATqfT1=&1b?y$P$GNd_k}-n-@so#1;()9A1BceC-_1f z1T7tT7pHC!R;v{AvNp&6w~qCB1kYy|J<>pgWf}$-rAI%luz-~vDk7pA_!9>C;y-oJ z_u-^I0|@FjCgLA-4X~&#X}2!+kJ*oS5=1q2OOpvt>nNcON$Zb;^e2TZgpsvARH0Bn ziS_;Z&2;xj!B3e0*l}+@!{hCVFUG+!XXoHyar|=e!6q6xsxg;n^$Ix{Q>j&|FhBH; zXZ0!`Ft=WO6;b^8o3V4-IC1}e=+mm=$atOZ-Pi1?X%jICu+~=F4Ys+BEvww3$mXJ; zAcE1C5wp%;V=wa^9XShB2;>|Hyutj5!AKe(2{RykkG+m+<8hXSU)$Mb!lf8nJCX(N z$|gaLsZ6WO`q0$@uz6E2=2*!X^*YV6W5+iYUHW(Nr*4^mw+@RiJzG`_alMg$ zsGSO*8ri40F1hCn5@zFAs$Hf+ebm?!zzk;Y&S+&(M1qU zj+x`L2gafV1@J%SHSe8@Xftx5C_j5tPW*NdLB$jUD2S1CewrK!;H~Q$v~|8iHA%;5G61 zVYHbEXsg%KBNU7E*L=?4PjXSra;s~~oVGoJITV3U`)t~iCL$Vw{W+}g@j#N_A8sUs z87~7DOs~dcCSo~2ktoU%?`&Oje)cvK8W@0%VJ(J;{?nI#TH7G6C?+@#W%Ob$h>#X0 zfgEyIujE4j5RJl4^L;9?q#`IeilK{Ro8KD zFMf!cwYN>XX!%I~eIPeW!-*^7h&kMKofe;`mOd3YiqN>EY}!v1D2-x=8;TjWeXv7q z09~4`*A0ruXl*`$3mZ(o;+;Z!W+oKpi`@<oR~dWW+U0sZYslVW$^*~!zn7B8waK4}V+{h=d% zN{e5)3w1sbo2#qJ-sx$4*4z}t2(2Z3t#rjf%!>gYk>um(b{j_b2R2>r(*$O*@NTh( z67!*|y=ZLRb~T@%QK;W)<$v>15DtbE;4u)^6bcYfYQUy#;`d$IcF7I0J8ySWQD_9( zVKq{|cB7~^L0dT$p;8>dZ1XiHc?6Wy4NA+3@e=p;#O?dbvy&2S)y#t8LOAlLO!$|s z#7){z(9o~bpjBavAnsv#-9XRE2_ibgN>rPDAU}QED*IVZp;*H0AZ`}|X`xh(G7Zd7EZdTSYNBevG(?chL75)@ z6bGgDcl7hV{fhWN0&a7Y_-+m4*XIH}7JFuY(qth$-ULb#04o8(cklLdvMuNB`Be34 z9e)o_p@1OpH;GCOI4j{I1p0v{538OeBnVCf7y#trp=I_70t_t-Rp$H9#w4zMu}FD0 zY;f`H&pnTtS_jSqPL@A+X69S(O$`zRxUdU@@WRYeT+ib>hZ_jNJtaU!m$BZXQ7fSB z`a!M&o3-wxf7PYmw9EWi3g5^Vr(_u> zq4EOv86KCu`*wu?G3i3<9WN^weD6}qWh?22q_|8Nw zAD1lebznlKbqC$JMWBg)gw{QADbjJyvsD0j%W0aa%89M5TFI2l@~oB8ng#>ZSvJKm zvs8ViD%pg1J>@O8^Vr@~1hp2Bi_8WyttMhKEfUVw6RlDQ3K{>5t{PXCSO`_;Vr9a8RFX=Y5LS7RL zr}m-7aZ01$IY2^-o~%|0c7*SjCsBS+eml&`UU}1H9FtNqDPz4P?0?j8?U#oF45`$bLWNNqkB@#yr;?RH4p0*+UJuDpkhsr1@V zF&--rlphS5+dF&D7axlmdh+atCY*d;o|@70a`<**>ANjGoIkMh_x>zCGi7 zhwc2O|Mund^{oGmz2sc0t6|BP^W){|Jg1s3IR$u_EFD4NpXx}jclZ3M775I~8j=rT z?3w?-l!w6qkDPrUxC`Jv#*|lBFR&`El-6hqzb%`&)j0IAe?Ha%ta3qJwo&A2KbQHK z_8YG3J4V5dhrtn@9cP?*TNdD&r+m{p7(g1`nq}cq(Xv4LXFAdFckY!GbYb_8Oxh!` zvox6&KW(e;n)Zdqjz%u3NtD*<+x8VzXgpR$=x#&eCG9oAGzv(IewR>N&dso)MMdP3 z5{TwTF@>@_=Qm}AFqGpQ5$Pxxu>cUsssz!l{t_IZ)RYpW<;k$!5Cb;4(l-}&*^6ES zHY1aTEZVXDI8K~?z;{3D`gD*13mZgjm-|bCs14a>I*o<}zg%W4t1O=Oc(5we!fY?i z2DD3(mCUVW&#YcX7D*;Qq!e^$S$eD1KIp;yMzG(=UO^+eW`R2d_(;fQ03 zS`xjN?yx?ivpe&Wdf6x1jUTexOsGiDT5t9R9JASW>yx+$n}}OH}0@ZQ7s%L z*$bIiDoB=x?b1jE5)K6;@)_r34#RMVpqbyWI_E%gZ^3RTalro)ntSMq1`)92-6$Ni1#e2d911z zXs^r(TpV0Df#dyo6iFqUiUo|V=O!`o;2_y#hQdr2igrfue2F;;{Xg^45DpR297C^? z39BI|ar|mPleB6bvp7cH>B$Ih(mg@+iG+U+V96grgzB78&y&^i>^F&!uw-_uJ8baJ9_5C>1GNO9oojGY}}rcdknO<2c8ZNgE9lTLTdZ7(LOn^p*{&qcxR zbFa(v)S_>~gU%i0`Pc^WUDY^0#I5Q6v_BRrn^pHT*O&e-VuSh;-YVB`6j}%l5~QpG zz`)py^X1ebsiplOktFBi6G>Hwu_X8h51Cc+yv5GUqh}@G?d#GBC7rH2mxk5tcrXS! z&F4v{zQgSG`0K1uJwc9YlAcS{7o8JH%X&TTFGi`zp!zyQz0$8cv<4~}7)oKIz7ff@ zTkniNzIEekXqUu=LCq&W9H(+rF)^^B0m0#j-CbqVlr}oc@W49|5y7$Byo+oNTwweW z^^#Y8;FZ5gw^JWg;H6T>jYKIsd3@IsbZF`aBd;HU7P zDB-}XqVYy-wU{|iw7NL2$FbO| z@#W%%25(jpoFX+?J@l~%tvg1?0Oe17M%gpti9`JU$ZyAv_V5CqpF1rA!^^M{b?Gf` zf=6WLnJw@o;(fstezm*YNRL36l&_Hufb?1ewX{S4o?ZhWp*HPkpx8p++GlKqy&d<* zW`-fKwhqnsn2xdK3sy1SrHu82#V;tsDv!~5f<5#RYu})3bwc?Sm%DW$()0R|N*8i~ zz3EpqlIicz-4dJlK6yech%_lPrtO-VPoT=`DAE74WgyH9|F|~aOKk?06h^}DI&C{9 zlMT_gyBnm8-a6@Fb?7_(7IFs~e;>4WysNWv`SUa6 zqIchhLq>SJiv-&9p(fnVu0O3d>;RdNCaFv6d!G#qJdpfSYG?aCA|ZCb1)w$G7j&81 z7GwxIDvvC2n@Li#(4_V-en8`+|G36XpPv_N@;{8(Y_GwVL8m3RP@(=o#ZNY{(hTWrrZx1`A$` zppGT<1+8Jk;}*k~Kh)q z>FG?=E9LT4%~iKht~4^bPyiCu%8)-pIiinIdn0Z7RurkJTEk0;Em+uWm!$osZ675p zGW&pib)m%=k*xM}la=+a7WFuyp(vRAS1jI-08t}vz7SU^QmFPnA9+>YK{{>HV^e!l zaXBRRts&$L)^SM4F}PCY<*p{GI9r^xNCxpHY{DtnffqX;{Y^dJe?F5aGXX$0$|3MJ zJ;)gvIu-u!#ZHe>CbvT{!tOq_b^eGcaYHnor7>H#Q(q&BTxa)MFpu41Z#L-pfG7eA zJgp9levj__)SJ^qwCt#@ug9w_a>5RNhB@JL=<=s%6Y&{NQx0b~;^DY(s1%mI<_XjZ zbi_nrsshs(=MgsEc>sKYfva+(l@le(Y$mXqMShf7>(l7I!`$@Leu_0il7=?y{!MYT zaZhWXlOPb5k#H90hV(~hcRffA<>mQfLwElx#=f9r&IW0gj*oNKBia^E%AVnmFMh@6 zItytCGZCr}7Z~;wg%+kSju0!!(m8ti>?(X!#L0s@Fg#Izdw|ZD|Z| z4woi32-tHR+fUf|~PCA2!9%j!jw6C%+j7)&BjtHjtvCj7|6ZFTU*gQ`G3i>#3 zvQHV_J9_tN&KZ$b9OyHB!6YYVYO|GYuYf|~XVLXb7;c=|*8KT>es19Y zED=p&XkuIxFkr3*+ybvpybBNT7tSzsVeHHu9Ua~{d?JfV;#8xSmy#1-;#i56266*a zJMpFJ7s=ed$9i!2VLV1c<<#`1Fvaj2^VJXkpF@P(^5>_Abm| zt+W`TnKHO&i9GkC6=8)f9$!Mvf58?aB@EO{ScBj%6Ce>Hd1a0@b7q8`DyEo+m7v++ z(ji4G8O7T`{0B#5qv7u*(7`~QHaB$@*d2s`ptjJz?VFWK)dY6a5f>@1By*o zaDnoZ<-*3lO?fRcRtfA?E}}0oR-3REzl48lm$33MZ3y7dH7{ziD;(k7CuSW{aBdm)6R(RP+1gipF!UZ(?Ll1FlCtYJXDpBZ{-ek<28<9a z=QD+Es}32iyMdkEz%rTFPK?&=64pW{l;xM{iV@DD3mn_UpM*&)&PDAd!(Hu=Yyef9$ReZ?w4IsABej45d zJHb~(B>2!oSHXU@Bu-<}M?#@N>Zr-Nt@rdQDs6ZUfpL<91Ci1`PJh_`nj%(})nLo) zZq+=~M_^cmID_;;T*CcYyP6`gP6keYoeVG@MdBvR;PrJ4!&qG|zYP0;ZeQ3(hM9Lx8JO$Gg}iHd0IFw$48HGww6T**B_F{Xr{1lX}W1)U~axG3?1=lNK3RMCvYMa73vIaR`p7WD^H}J=W|Vi zvCW3h*kP|PNdwD>P%h{n4+*FyI1?QVIDpTl(bD(*S5U!AbLNn6X<7Mjy& zXPgGXH>-lKa;YTrsMiH$yK}^5kgLobp6eP|vFo}< z0Tn$X-1Iol1JzF$uNZ`|5D64AIUmQvy5dGEob>1O(|xHKjfFb&sw!iNr2EqNvKI{a97k=2-VYp`aKB6= z3vM7e43}8=7+`%VE7hV0=b%>?im5D;97CxS+ut1)Z$6bpa-PM@)T)1{3Tz;99D%G3F|o=n@A2Nsy!bfaGG9?lJy;vQ^t;TeS15pwEUSL@ttPi;hE zQ3gnCDxfaP0EC7~h}8yWbR4Q@J4?P=a4;O^MFbIpOsAGuLM6dNIKYhbzO>X_lv&II zLL$He{`r7;UQ`v2hHbI6#}7`7O(lk88n1UFX=GEm@K+2Te&40^$K#lS{cB38n0(oZ zIZf7(dO2xmX5Vo(#Z_H!a7)I{_+VKT=fwQJ+@JvoJjanU7uMsbNi6kG7L>gzBZY~A ztQtIb52f1q!0}KCkyA2fCY3Q-M3@n0xnd|q`V1J$ZOVGDVPin?SJm~|v&p@pcY>OF zW{9eNn*Z?u8x9OXc;`<)ewYFi^Z z6GH)I+m?H^xdTE#b$W&^lBrZ>Cd9yo$um)snL!5&Ug=8`GiOb%Wo`^U|Eu-`LubfV zi8U{$G2>&)#-Y>VhLhv?ZDKXf9%`4@8sL5Bu%6q4n=u1^loe!X28!a_qgho_6)b8N zP~r~*B7-dMqXo$wxHH@7i@9-Ub)5~QiPs#<^jO9J)90N1L~A9{!0&XMK7wGHovKja zGgn;Ut>6f{$Q*LRlViV;jEfsx=sew33@(AB;hiiqx~Pyy8F3dIb0_)=tF4Yb8L&3U z-6Ns>=j3wh&$efZMh+F&cBi9_8x`m{m7dLO#shYX<^kV57_)`WGu3vY$>QFttbT<< zZr@vhGN{ku10{t^%*6WCZgJI3D<@uslTEL0Gi5ZcZW1Jz|3Xf0;e2~O^u#k?%Pw?< zcV{EYiRo->&z&`&JiI{3OKP5k1b}T+1u;zcXE7xlEgpLbxCaz3fQxd}K&fq-rEr@c z-lzDdM0d^G)Fj^y2kYx+zkICI^69ZOmai!b2JaQNUe8QFJRC4z4!Q7jh*+%tj2WgN zoQy#2dmuE4?+x&b$He6G`|*U*m?(zBZtTsrzm4Km95EYNuGhvr34$nCiY;hv{~Pek zt}Mby_UX=1&kIBcEOSpg)Xk4ZEHm|p z3$!)+coN6DRk}}I-6hqO=zDn2~>$IQPF zcEOLXqG<#RHm3sWcxgAf+buQ1q%*<NG6DvDx&Li^gC zzr9Vfs>n1~V5wEHRMK~{A|eCrDO$JlwP|Io7FCA41<<`J?D6-!T{-EA&($-3A+7JS zi!UiUN+yqFk9~Sy1d#L}6J+y2H5<^9hGAsBq zE*c2tBb_=rit~1Z{qyr-f5>mpjw9RH9Dg=d^Hknq4pvR}+(06MaAm7zV;T|U$Qd^; z(J+Zg7CpXpupNTG+HBMU(Y+Yj8>w=WQ`XX&O* z5A0=nfgi6w#fxIn-%;#mrrlIObPW2(!Mku+Ix5bY`s{pRb(C=oi#SN<3W>*KkCFbu zcO)Yf3@8*nY2F3S83$>pT0d#pPq4n z{u|x|UD_)}5;v3P$LP+F#eDiRd)uT-vk1jAMKk;T4RNBjhk`%-=XtlO+83_Er}Hj>UNvr+<0l}tw7F^2wlCQ((Uu`Zz;;lN&f8`wG03LR zSS1NU^|X{KiW)i=c0DVjN4mvX2lQXE-Ojm%u-W z&scwQo0lf)2F1o3%n~*Zk*_b2kAHi!NYw+uWYo{FHXV_C-`Qpm1hJ!9#61OmC}D)6 zRy9Q$XlzNK@MtiGLV$nt< zhE7T2+WBv#5D5O8guDb5=G7ZTvJfCEC>6zXZju}<0U$zK9fLb7zdofNio=n2H9|wu zUch1e#Bqa&{*J;8-E^4|adFS3|(Uonz3lDJ87sl74 z3T1z|<){hk&KYZJav58My@k5Tmww@2dpnCSEAnI0CUmf?b;2+6cM7!vV18T`NfvTt zBgN^9fWf_x`V){RIGx~ z0sbGd>H<>l_l~gP30jZ6w*=9%K1T$>Z$j{RI1WG#)l{{OAa+8%%Qvwq{mQVrbx=eI zW>6%+?6Y}>w6qX!0EV4MLYdA{p~@XRbg53+UvfVmf_h4w)%~o!&t_U!7lBjJuQ)aY zA}RK5B@eD#0oJ5c0YQ~g!KoCm*h-PND~;;CC>3n1aIzCA3dXlr3 zHk1U$VCxN=*;rR1h!UfLsfJ39TrGfvHR0hb#WvzZsD6`pDWDc$P42I-8f_fgku{pv zywi}6YbRawBjg}C6jVdN7t$uSzU~Pr@uJS(f&KAEn{myIoFz+`TO}62Cf)#{et3O1 zz77&cHWC#M_;IF}-aC~_IMGaM>P87~%^qV?7~9&nm0jpv{xzrt*2+M78TCQVx^qGa$rc;h#=15wAb0Z0=lA{ z15yK17|zRoaRvgbmbDWALsxsg67b`?kweDt9&XFO_Xv|?waLChUm>^&W>gh+O0hS0 zsSXmt#@tH3HVa<=JS^S->74inqC_@Q_ittIJFRgzfEdx#E)&fvjM`*w0U@VzU^DS* z$IsIKTj zU);y;k59;W5;Su8Fk|13+y0Q|c69owfTG0{9-sKsy!-W&f)j1WO8cSa-gHtlcj|T# zKZGR_YCa|}IRYwE?PVJmQW<~p z5I-kI&uNLAXBHDXnnaS&5JglLHI3LdBuDR!JgaKKR+{?&ep*52HIHFto1v#+BAo4t zC^V}SHw8#Ul1l5#=*DF^LVF*;$=8GP_2_={vqB;wYP$!_jVr(QE2JmrhXgIWnD`93 zR+I_FZf1_W2 za$P*~2aN6lUO%HhmR~+>zh3R#?rtAHc5Tl`jjmJra{%3Mr$@>yL|Gd@?G%<%tFP?x zZZ>HP1BqNPcC0e&=iUr$aM^l+ezs?a6^HB?L6@}(WXaEvI~8mlIQi@YWAt0dgtm=+ z6;*}NW&Lp(YfD_=P#~@?AIUd2%Wggf%aM|pMdNG($ZG6cXAv{J>NKb>#m{_>M~>75 z9;_MBxyU+Kf1{RPc?z1oaf@69jm;JpSzMlK_vx$9@WRN|tP%RLhgoLO6GPg@sM<3f z4AAs`gS7b{AvCnbeDE;?13KXSeK<4AGdWSsfqYRWp=AyGe^){FXxM!e9j9ugvtGdq zAgcoa(Uu8wG%{Hx2+eTpC`{AJEZ$SlQ%lky)fKbFr+uph=PexhBq#aif{WB2oV_J; zEaA};(IeDKSm;+cZ$wCDVR;sPBQFf055Rfbx^_KK$20i7{?|cCj314sh-^okL>Jcz3 z2n%b90Rsp!7$YO=w;-Y)mp<$ODyeVrUyk2n~=BgYAobd2ATW2AqP zWAY4}zr%()Xy5Kr1dRFi!*G}mcO(Aq>atN4cWZk+t14N9-a2j-pl)#8T$BeJJ2FmW z{V&!y&d<)Tw-X9zEhh8Rp<=X}b*PWWz$7NJUlQtW9$ZpePU0<2vWW>%{+CGh3a2il zlvI-;w#lEoo_nJhpBUi2fCEe!yv?=`LCvLujn@1n z;$~Sd&4`F2`KH}(w%%Pv(glTHfV&cYw7*|DYUF=J8VX@5$+$vxXUujG{lneUz!WW67Yrd6j~S6!GARNfY8`_E&MV0Q#ZywRCA3J1&oFZ_W_f(Y@e? zo{?D(SaLi6V$45&cnTYO@6{a4SkZ?B3T5;X=SGGD*MR><^4B*iB@JjarjK|@V0)Iz zW(0AhS)>>`$XLZv$AT`+P1*_7M=ji5;i~vsV0Apyughbxvz&LQWM+WGXpLs!j`HZF zalbhNfU-?cIhL+3&9WPGt=ItP^s0SovR8z?_|f&0W-VOt+(K&#SBUcfuaHRh%Y|pH z5hnL09i90sNeHf(fKT?y7)es(ximTdup-qY6(yb`6mde~C-Z{G_o7EVlgM_eR|wvU z_W|ZUs?&ejqeg#8--*xElp>{Z1tQ4Su77U{u=MjUpUY~O_YA^<&)BheusSa=?XK3TiKs7rQnSK+PObXnOpT1T`~8)O`l%tzl<4XW~CKUMBHf zo!(7zh`^kyl)rO;5FwBwXMw9=2N^>731qO%=B}{zvd%G1~E|B@a{9HYBP}X{Gf{c^;Xmbpu1@7 zCb$$+J^-+@T`bBrA++mYD7b%EJWhiN`^xJ1C1hi)j}Y8|A|K4|yLId8bYexq4qBr0 zF$|GAtgY#swN_-MZU)tsDJ|>W{&mNncw~Ds=N_Zzzhl#lP2YD0z;XgygqUS7&zU6Bm5~JaQ|=3$ik9hp9eyj^1Y^mO*uLK7Rjf|T5Yf+ z4qd-d-a|LeMT*huJDLaB1;rlCEFB=u6`}a+;6TpVZEu@*7DJQG^`>Y5E(<*7nG4cX za9Il#TpATDV>g^IR=d4M*1Q>ou8=GxDMMNG4hU?nzE8H?Sj@AyN&oqQX;7%Ulmi^% zMPY*>(0DPZ6ih;MxQQ3a07NA-18$B#Y|2NFJg>TDW~>Aq=`c<}8iEXvwT0y{2FvTH zj_T{UqM-ZZcovNxH~2?|g_Fx9kSfX~nSLDm?x+`gRQ zTG=j7cJv-6Fd6LnW9Krc_l8W2m&H+P#*A^z0!M`Rl{fWaHoZC=V1I#x^gR>oJ()`{Isi^3` zb!pj+hmibW!vVZ~ARJ4f&=nVlBW3~JhBy1UN{1;DyRMhN-tgU#Z6yD36LnL&a z?icOU{ie_{V9uz7X+gzkHS&)OODundM$F0x0u;6?d#jl!@r0fP*-}&{8xQH1dfiaJ zOzVoUa$>$ZMgmgj87+;4P-Pv7la!idF30KhG~O?%@T_ zJw>a^j^7=>L>%tWC;=Kq^w3jP@sSI+ger|D7x7|>fSQ}3ZP|*lo>~02&bAWKz0wR9 z`9A~o2V3B94;?+%e#oLy)-_kR65@7CX!->x?#gvROOb?)1{vlO%dJDaEIzt2-(PVl zO^Nk-E66|8Z%Sx|$0xWux-CyVQfHn|e?qQkJ)P=8d`ZG?HZ<00S6HIsSk_UpJowk@ z!4mc+0Fdz>B=hz9>L5yPvyEzXimxYxqv=U8tN6rNguiah&;6q|vpfbPa&3|qtu?Zi z)s)pdzIoMkX}0zBcM{EYn(C)}N>tdlr7WB_J11`bHP^QIeT%9by3DfXMZh`3)zBHQ znNFWdU-^)L_rG%MbP^g>RobyzW^RVpdZip)fY$D}=krs-jllhk<>lSytNRB+9t*(J zH9xuU^Ud<9{X3?#Tr)zB4+|nc;Cr3u)Ai=~b<6TJ=W(4fp926qpI%wD+`>booEV9# zLn)1Uq4>6lhflNm;63Xpj13++0T@A7c6Z&cc%RWKr{a2V(hGQ(SpfmQ9T`L1mri{E zSbus1l6mLKMKv|-npF8AR9u_+vtOi-Z6N&c5DTpM3r`{u;ttFNBtOs_EE*NJt;Q?d zGpU;tRlUw&8Juin+?&EokJ5Cu@zNU~EL;&L2mBJ+UHKoHXonS(Q6#e=GIpeEX_1HO z6W=*772ZdtWM^^aNV5`ubJRpppOK9NZWuKbdmd-f>daB={NZ1}~QNRn>KL)%7^gnazsV?v)tu0-A1^ zlw>08n-bGc7rrH$Gh@!i#5uJ6fknTfp6xD(uau&63$awtZ)SL(i2{it)S9TE#!j5h zNWsP>ZBnxL0ZK5nn-y>K!m8I=>p!Th6oBZn#+ZzMA@8y`jg1TMa*E%EGR)DyxYV4w zAy=ZnCiv+K$AO>IM-!~eG5iQJmLmJ;zb5CP7fxcL>?vn3f#E&gY@fu6x^IBmLy%7< zj7UhV?#5-@lPu4qnNorK#laW?95EiS8{%PF67MGy&p%|T9w`NPdpa^W2N$0lpNlGt|an7+$cq;^Zl zmCO7(6|f+EthA8W!17q#))3U&MX*n>el4A0W}eqCQmwGF$LE#nq>c=d?_!o7{liVu z=sW;0yS$L+;2qkRl1xnCB?dnN+pIdBSxTPd;^4B_R+fQ_En&Fi7AJi`=zpe=47LdG zGii&k#alcT8wOHNaOSj^mJD)O7()yG3e^_I0zgNMt2`$Z7BFC2&AVTLP8o@l7MZa< z7uH1d-ggLDLZRc#dn2KVOi&izu(Rm`mnw?ML?MF=#>tapr$#-{6a{1dl!W)QwpPT5 z>2BU^GCPt~!>?JkRKPTy85O{|IFS=^Z{|R*Y#S5R^bL0d!k%OG)RMorv#Keun@H_(R01fpV8698* zY(gzx{}B2<QLJE9{Z#a$d29h5-Q55cP6Xi;%qT!k5=5kjH)z6^sP8bl=)7jcw zRU*8+vpg#DTYFz)p}6V@7dJB}6cijG4saLo(rUIpI<&;q^q_Lz<2u^k>pB|Lfa_2Q z2_)>gf0=OMieiMU$Ls0qRBO^qQf)YKG0QE~8YtR_&0KUX`6{G$a|(+X1ath!=)=F8 z?9>W$zRW*ET6}9U1TtqD$nQ4VtRTD@HAa#g~i2jWZ!Y;|I%*0O!*#Nau;4cGV!q0_?>3Tn*9c zlx-UV1ymIu3oU`x4iiy!{8G=LoILiKIbL});2cOBM3zWXRcmU&B5o=_^~zyQskLC>w1Vvk6vj&*kcw9AMeA@;q?jny-(H! zE&-=4{@#g3Qa-ywE9V0|q$%3;zuyez|BIetNU4hlr%cf-2Y~|w92ySZ2&0fTQpB=2 z%;ekn>lE;^@S2l)s+ZDW<#%X(z5Vz;Z07#O0-r7{Pa@v$(LbEF8!Gnn9q-re{H52a zQN%(e5qC@T%PwCip2j3@jPqZ<-{sz`gK1MC?F#fepqpkdxxf6X*lb$j6>*N;Ir|ZR zSa(I`6IHL50uG1~EMUZi;V|%@ImAE5uQBfd)a{9aDP=3}&R8VgM2-My`QQs|(}PDz z1I5-Y(zm~oD=$^}j#^kZ@t;?nra%|m_NIwNWGbW`O&OL;Olc;DW*&%gOw%8#6;xA@ zi9^~a#}TO`Kg&9ObzP9>0yF4Cv#w4%ia90+;C6q39s^(yw)*5UlQ<%cuihLv<{ECn z(rK%kkQ48aNr~l%I1tgNoV`varq~|ct8v~P@jqI@E=Ck@D~c=Dd~l&84n-IzB|ZOs ztz#;O*Ity?_SOQ0>t+@o7z{D&`%}b4VRvWLWiqHD_HxR=3k8_`5%%ci)XI7A#zELLO z_AR)(&vJ27%qI*PGjMyL4ucoZfvB6RhuY>{j$WmDbk>AOSIBZ6chhR?80xO?7`SjI z70hf(OTl12Kb5jXVist_1_Y#T08m{YVCH@w5sFC7nER_>^AX zJ(t@99FHStq&xmW?em}aJYp%PXni%@6We(o;nmOUtmCRKS6$W8-!fdp#>*Y=wr=hGB#6ENH{Q#c+KM`&SLu_6Y9+jtmM@a8y4UKP&U+kiBPN;fTCDR$ML~ z@QIqX_9pMI4VqSPsZIL0w2#_#L@Hdk@pA=hKyB50THZFqt_b2=H>?>5aI0V9qWr^?YipnAZc@C_CyQjrk-q|J1^E5M3HX3(3!r}I*ORZ}D=+-7VRx2P{OU-`5 z&Y~RKEeQ9Bq`+2|-6v_hc%xtejQlDKQ$BhmnA{haJE6L=GBr3+*s3ol-Ba+xda_>O zyVOHWeg7lXZzNI;Kg_VPIWsWw_8PEhxj-wsPn-&_0#neM0f3nJ(8a# z%*Bv6e1AtrpQ^@>k%`c7{uLp6N;=$JxY}}DlP;VbTV#;=9$Vyto!SAmWd)&au{XiBfEX8a~INil1=YrxPR;r|5p6LELbpYPkR2}?s&WRaNA6nX& zi=Cp!2Jvtr3U@1e97_1RJIU=Ll@3i|<9SGaWR-BH&PYN50bDrytGH8B{{x;q&kE|l zY%d%4|IZ2t{2%BpRj&>h0U(LORBr)#0Rv`Ob*KQPJA5Iu!Tlg4!WL$(661r zW^qomzp+CP5ybsaGCESXk0qs`-;jW)F>)$l%3|52K%PQ^Z2VDoZG|^SHH3E^;49F0 zgZ4VD;=C(8P{<)5bx3$_fexj}K*_E%MCoqCZE6AjI^MO|E1l8o4u7}=I4c)U za1&HA-XQGzmO^Xj3U_GV=K}Z)#ITQvS(re%34H5v*doB}Jg3v3tdzq+Q|4thU+jjF_qA!MnMIgRU-S4t$ZqlBE_k|Aj)F-95fWf35W=^Xzi=3 zIo1KGCpZscrDw~QZ{N_~zN-{`%?Ujx(D%oIwvF{!O%pRn>nW6nob`LZDzoTe zC3^8o*(~+#Qwv<_Xx-A<(5c%8s zNT|g^pk;$k7ohdc;mhvJ!Q!X!Majn%VDsJKiCGtNw0+-#O;)SA++N7t36Xv!FBAZu z%L|S<-BY)-lXRHCt91_Ge+H8wFIcPKUU3EyXzz$H=f%yeflz*!3^ORoP#i?fEHeM; zR#RkBUT+raW>PsLCn1<@5m~wsb7mmh^gw5RwvDIZrKWe^*f4pliwWdrZSww52*s5vM<1r2x-{YDy;%huP3;VDZoC{IOg>S@b3j3Q=g(ihia zv}iU|)?kYMSdhri}P|Ng?`s16_<6Gn$JDQM~lv`Cx>E zMdBl*J2#l%gvYqiZRFG71BNxLM}TFJ!;qhCFx)xoYZ%*2pNn$WC!m{7|2DL_TMgUP za#g&}8#rQkTh?;HcC%^lu>)Q;+A(Xs%%?%iUuk$U7;lZ>tD>&hn?>(WGRGs$v&A5$ z3ie2SpeMNsQbngqxXI+CY>Qvm5PyU3`Rb@d%l*Ze5WNv4=YZ!{m~%(p_^!98;HLsK zCzUPvzt`SmnAE$@&NBgBq&V8ph5dzBzz`p)i;C7|V3?F*0MBL-tw>8M^k;7ZX+rNge6P zUAd{bHM!@SR>BKH@mN; zgQoX9wo@()<+p+8a(>$OWMc)v^D?lmmjL)sOXsY_JcU2bu;QuEh)BF1 zXnt+sx_$lWvDH2j3Sa~!VbZ&wBBv5djG|TG5&JCu9w<*alT0BSvjEl_gC5xI?mhao zD@+X>KtT4~X)F`cI7vd`ikQ6o4_;ip6R#u?F@-@#a7q~K-ZcD>Dg!xrId=1d@PY{fZ>=XFQt#)vz8MFt( zWQs?|C^nL-9>+?qK3)2k5OG1411#! z;7GzGSQUpS@;h+q3AiW?1$LVzeMJQ`2poTbhzkFtb_4cjr^{79*#1bpGH45ppTx`J z-<6*mp4E7Sr8$RE03BPhX(Zh}FC=aS6yA@flZxq_EI=ZowzoINjc>?su~zZ2K*q|* zvR=`AJ)*eqjF;iL2jKbd-KWXsUD7-npuf+TL#^`=jZVIJ6}%90a&%=nO;sy-(b3|W z*cU`=5JxV&>LxKF;?Jw0$Xz4;v@2H=M3eZ#X?^uNqL2&AMH$E4UZACndV48;8mZk$ zfG8G7>GPS*neLxeNKm1-V*KolI%jLe4$|(ss6@P-nJ(;uy^vy4r`joEnrU4;Kq~`{ z5jnB97E|CLrQe&AGQ2wB&KVEEq}X|dxye_8cWBj+C9Zip1oJSjuH{b_8Dp)%%Z`x~ z6M-$a*vKOP!gFk&db;6oeWYzI`j(-pswv%uEvAHKH>@*V&NEGi!HM{k;=R55Zm^406EFuWjp9sfIcc=TLd-i5UmN>*M0M>K1*HE=c7v< z#9~4>Hw$me0#{EwWL1O~}vE8Adn?KcelHt4LE?eMDeW7WtaM-9VQS(bTup zwFkSo+nox{m1%%bmqx5TIP404(j^PK)q2O50}1o2^9>>ISL8G|Pb8QV(g;2tWnxyx zdwbU_BtY|F=)Xn^2lKzddTth$RL8CFHj4c^*FWTJs1@M@(ZOrt?%5%Nwd%GeRXg*u>Q7&7vXw<}&W$@E`;z(nUR2|RDz&A157L++xZ8_wX&8E0~Arx}*Wr`hHM zB5WFF*u?Y6(pAtL^~^GL9|iPVTvwVOL5J_Z;aD+un1|DB7ttr4UmyRxq@pSSyYr9~`-y?gOHsJL@#KRShV`5L zN=U-9oF?jbzXdItKXNyPV1$DN>;>cGs|c@yyPW;7Ut2?PT6FH`nN+ko^<^F**~N_d zdGRwv{cG*9xaN&o8T`p*m|0mYPHFR|Wz8;gUH7{MgF2%0JE1gfnGp6j8Hv%amA6!2 z(GISN<65LNg%C2-o9$fKcvup4qojbmc<10pU5}+^+1;4nl<90qvep=20HLK`gmB&o zTB`CL)5uNZ-89!<71~zt-Jf2$TRvFvyH0~DDbF?~P?YW}q;e8LyoAg!TJ6ArI_ydT zKK!9`nSxhMXj|SzJYZb(ej(#!WPn@em*hS;LnSkCM&v$2DZMn`^+nD=+_SepWN{j{ znb^SXm&6;IV7fa>ImK6X0AdIiRQNa|2vt9k-*_|cUeOxFk+1^UAea>;N8(xcg@Ae> zB@t7*Sxr`x>69NFkcA=={^g9ZCl653aiGK3PwK;W-GQ>(d$d zS~QFV+!0|4%d}WhcY>mU>l@Go{R2cJ$Kn+9B#1CkX(_SHr_y(*fKg|VbSG+1&D%Gf z*TV&c#m68#;|}|d6%7SBUAG7M_U`vm{=bZ;-eEkkRT-?5LNc>oY1})H3GawusKxpQ zoF6lYswLf8e&l?4XsxQdrVGC_fLVyb2!UEV#P_Hf+(dpUxj_Vyw((JWdmG-!`dAl5 zR|&A2wKzbkkw`u70koy0L|&fg%0^jbpl4WRZUm{T>5o_=(^T!8tIjV6!4Vox*R;O` zux8yh6%cnCo`%ytN^JrYZ9|I|8wfAbrroFqCWW4D_b&FNF1pTL%biv?U3Z>dw&9=L z|4@_0@^J4c?i;sea}V>0q@I*iv3fo7b-CDHl^1V*Ov+Ld;B6+2<;Jf5$h9=?7dA?G zB}$l%d2ix=1F^N$sr~mn1>t1<54xGV3IYeh!uF5b9C#}6DT)ZNBDxE7vh}3kc5a5$ zk!sO!JbbvwPl8C8?;cv@VL4Q#tQh&FW5ySWjuH({dk#An*@}r_B^qvIY9Nnjh+&Oa z)0p-cxNb2-v9}1MAl8X96gmi#I?W13-4z=C+jLf|j>WsmJsnLK? znur8KS*V$q%UJy|XaXc?ChAYt(tTM;u5YBlsN^9Dm{FB<{3w zK`oa&Ei_d~TrMM=L1GWZXABe@n{Laj5_Cy0MfelP5yI&HATV6R1n`hQ>SXXr`tfWU zXB+>g7@2Xb{vU4Bvk~WpvOeNx*ULTN^CNSh!8|sQvi2I1vH}4~#$VS8uLt)0;bKa+ zt(|7XI$DRzwxgOf75VW(au@pJ;2n*B_%c2WgT*D*nMgeK0St8nlhAJK!@ZrhX5wb( z?pp%l^6ITlP}%c(7mKRb`ElXQ<%>vBlGzbESBCL4aC307cTs|PC1)+$(nJW5>-qeA z>{y>UaG4bnT7;kx7P~07H@Lolw4jza(!lMGl5FWQ{^k|1ASH$0e)0IFZtKC@He?QD zUFOZ~T<)%jY@x_(&=#z_o}zCUgf=3NPS0ys{2?D1Ft6G5B0y1~XF$JlX--$MZOG?H zFvwQr#=SIFVlVVEG6}6doq_bAaFs31Wk2?uqq-K)$qnFIs zI7`dmJ8}%jR3P!hAT@)Det~$3GMSs*P;lX9J1HeSl!!jef#WE6FciMcQ`Sk%=}chC zQ=g!~4^php;5#OBv^PR~9b;Z3H_qxaJO1K4VE%N9QagC-^eE1C2(?|yML>z>LtNzU8% zcIF|JHOH1hqmpxH(WgLDj7ygZBJ0&inZz7Ry_v*O*Ki6)(v(%|pM93uI%%qM-UxaK z);skKIMB%anHyxEOBoRb=n}V-eHH{#7EG+U<0M6cmN6G0PXjU%D3Q-Kit&@mDGUOQ zT#bBE-*VnL{I-ldCEEcPv(mU~6mTFVp%L#2iw|uk!*1N7I(Ig@Sexv1mM@vc^UBlM z(#{JzhBVqwsr=$Rw#b!{6^KWY%~9S*T|%YGt$6=y2{%dMLUsI6JHoMoissnm@hdDS_&?wA)_ZadR>Ibg{;q^JfFw{OD3g<77X$KA?xc7gTcDY z)abke#`IL>$l3Ij%%mT0#^i@eCQ=2nBsTh36#RIJS6OHCsv3X`%qRFA*-0jHkBXi@ zV6^~l-ys~d5SFY2*p)`c26S>ZTaB9yXubZqFdNA*ibH{%F)yNCYKe63j=FF+Lt&xw zN??Sn1vBV&)PU%sn^<(V?tcJcqCf*X@Y${a-baH4PeQV%LNZa_RkmK{y$qwBgVq2t zFNb{Br2IpG2}iZ=&?W-saTs00BW_XAU)l>s3M}JMWMrTN2u?c!PPsxc(wiBJiRF#U zF%g^%d6pd2dNl;VoE&Amq{}FQCoCWt{C%|If;&SD)`y#xyO-94_%!Kzli?KARl6{C z+@Ig+azeN3%}-_+^qM~{{bju2VyQMO-_lVf`!@ri!gy-d$9rXxcm;bJSOhT^h084#Iv5#CW0@sM`#(1*?{D2B-p2VV>a^W3C1(i zl${$HYNh9AVeZqh1;TR1%?=l>ZYBx-;YMgZDiU3uEv4e+!=T zzeap2MjS8$V8U)e5N+d$R?H~ze?Iiap=1pp8h?1xc%H;Ts-~)ysy{vE!^V`Z4oXz9 z;6|LyGd|f~Gx)}hB3QaPS+epJ%p;?I@hbTzAlSeOsD*6c#9SHEb4Q9<=Bf$i%UBBs zT=^ie4Ch_CN5LCOJ1^r5=VmhZqh{g!@K*xS0C;?Ekqq-4aPWSh*dCd!tZj-IDb( z?-+&V6o(5&LI?1yu;i#63P{>zaoln|WWLf~y9|%wSft;nyx<^{69*Lv9+VoekKu$# zB1SS{(YB_G*wPemyn(aux3~Qgz%ezdN{fpitF=>9QY1isJ4H~PrkZS9b+NX&R#`WW z*KmgbyxyJ$WNV?VQS)h+GRdx*jsX$aq+I4t#ree&x5)PJx5Yd~HFo*48^h2yciOg1 zeYcWo$&%#`Pt4RX@z2DnstSOP(9ZtX6E`2ZY^M*V9vm;rxEwrO>0o6wz>wAuG~oJD zM{m_si^p}Q;A#nA71x;UT(UlPrDeOwjwh1izkjOV=j0>06_r>@0Xe;N zuvbkIA~or6+%Jo4ycAq~$cbn8{aQ8{+&HvYQR_6n@$|ffry+O)*88vg&%w^||1Qp{ zG|a%XiElk{02KXvAks*V>uSL`v$>^F5(!9A|6T?gNQtlRP@Jt^J6#=!n|=a>D`Xc2 z{rr%Xsz#$?rNLe0iSy@k6&`7-&Ny(8ua!!q8MQ*lVNYayVud-e8;OWVJks~goY*z9lRv%-@D zngx;~;5kMxaCjbggg=c0W^f6SZ2e3a(;&Jf>t^0*2*+A=Ny`T9#xJwZsJBid5`9zr z_}Zn85Z=qrM`8u^95K!>(`l#j+UUocAJ}7DrvsvL!1ebNPN6}p0!azRn?I04Eu}v& z#M`W*p`}F0+;3EPH7LG`wJK>t-40^0N`YwrV0;K7 z|H!jJf>FUj*W);%(R~AX1158(U|>s>6zJr6?-R7(-o6~Td8kL8NF@5dekOfDmi`hV zeA^<=E>+-iTH6MKB1ZJRBu*#!^;}CVLbnF7otTkuxNx-b$8o*ndcY{HaESv$Lp#ra zcAeiG*e)N(j-%V`!$$Mz?bKPYHinS`B{xe?~4+ zBO`xxCM|Nmdd!h;;xW&M+Q*~MX%Tc2s}4cl@Rh0>Ba%9zJvn-=iKv_tqCSrjFKQOFEpe={Dp`w!Yr4 z2c}Ygp*zoZTY;jR*9hlpdAB&UoCZkKM3T!YS9Gr{ax$GR zH5Be7SVbo;1_PH}7Na0|KQlmM1QZx2N&6SD52K|5+b0K0g1zKUl1Gualv7Bze*}cjyI^!xS2q0a=_fmIzpgz zz}3xln#%dKnPca^V?;~=N3#KuKzl#qh3yBTomA`j*AR94n1CGS7oICNpRz`B( zAwjE$1m=yk;iNj1lr)Ze{;ZWxHmfkjL9OivGN^Kv)32Z<&V-Wl7ExR=k09N$(9A~s zfGv+*{>k8gHy?zlG$U~o+Nh|B`ITX?=I3Cd6HBo`vO5!Dbpy7p!z8w7W}!r8GO|s( zP2|50pD*)PS)$w%R0Gwo|NK-WO@1Bdv$;M8^L}YJd1;fV&!zg2FXYOo4#KoGpoy-7O z7eo4okv%F(GkGJ>%2;?zEQ^*WftrV&Av_N%T|<`7mP$m8`}vf8z(784dX6PJD{MEh z_>ZTrdoIBwH*Wu8sN!O1k%Bb*+t?%1+!2I|z_SqkZR{CMxNy0(Y;ttbZ+&GYw&{^e zC#qO}TvDs9v&HNNH1Muhm+7sx18P%uE@PVvX&b3@@folb5KKOf9#dgafOTxsB&oj3 z{glP>Wn{fgGD;LeLFYBL>W!ugZ(PS-O*>W~Y3_tfTG7L@y^8x?T_Isht6>eUAHOS~ znDQ@UZSetXXqla-bU}Co7?2duga)QCYz301bLnYT%AGUz=i2LE=cm;(fV0nY4+ab8 zeVoSdi+j5|lm>-xZ?^YJcPW-UG=9j~nW!>_3Erbm0gj!&8(Z%O<@HedL!=rDSPTbn zw6O+&o*LbS_yUPLQEs-yjzo6Snu`Z zw~9Mt1XzFSy}VXDe1KLMAWO;Ak2M4mG-Buy!AE0{?_;|JUk)xXxG2J*7gJr_f%pWA3;_?-Px+^Xk8>zwO{$O_{ zT_k~|M#+DV@|3$gas%!s%=ZP_746S=A3DsZW2wT}zc}#cfGw9gK(A_Ui+@U+n^xH< zdw0-Zleai6esMfXZGz<}fCy3bPg@ScqjtnQa80w&(tHP;|427Z3CSMZ< z2lvCVHtHMJxR$C*xW%=cO02DX5RAyC;X(Y0T?n`Af2%`kAaZ^!l4bWK*g9k*o$>(U zD+M;rg6ltZ_yF|fp_#<2=#Avkd};V%pKBZhS3)_^N_z1_th!BO^%vkcmtd>L12tFC zEl`|u>%ap)_06t#*RFp#ba-jKiMZlzc)D|^kJRx~WQvOdLxKbEw6!29t*vua?;Vt% zdia0xaZav(s`%fdTHp0Rp+y?N`giOW$!A6#>R7ml#7rUrP4qiRHD$`VZUkx*R4mv6 zg%;clzLM};I^h0{cYpR)c2ySRSUXn+A=K$`n3VbcsuxlbljsYB=Z4O#Kzy`-c z5~U9$`4>qMRDI}n&2@csdwzAd!npZdkTgzCrg%fCdaf(k+%;7Z=khj$Oo*NqWLvW>Z#5}5?)g$-r z1lG~06;&NFH2Ib=9Dg?ej9Ii%kCoK~vI{$ArwPi8j-f&pm|#*lctq8NccS**dL3&& z1H1@Kzi~-Qq)YdCbS~hS;=h1_hw&257aZ<%7Au-_5C#y^puDj(XR>#aF4@pC?W5Xj7ABObB>EzP@^JIs37#URBkQFbr zx+E2Hs8yAol@cJ_1vQn`n~q{XSvVGp66^-ZAejQKHa1@J3AE6e2T-_;6pusadCArCRM!jk%hnj z_J<^G?a0`**R1laQE1kin3Sb__uKb$kjU&T*yZ)nO{u zna$)t8J@_LsqNg6@u<3^wR({!LSc_F(>f54X{O2uw5;FCxsk{$r!REIZo2W7_&f2^ z7Y7t_+_Iw+aB3q3CKIi!%{<)S%y>9L^~=W)Gm~o))M}L?Hmw4=;lp0*Pvz+}qm1Di z#(UkScDCte+iSn39{*l`&Tcw5j-z96E8_5Da$vJh+rcyJpB#_{PuEu9VFIspug>dM z&Q$I>Z(|?USjsc%37AGN%4T$QwowEq|Ei36fnH8je+UlHc%pYIwH?B&|dozoXAK@S3l5IF*cGdma{jgw^$ zlGGIprq8|eo4T!sQ_4{owK<;IsV`O>EG9}aAxd1^UGw0>i913}t-GoTFy$*vig4js@X;6g9l780MgE9dQ$IIBmm7O7^)d))D$?RBFS*shQ zR1hKDH8267i9yRq;omwwBz1{l-dGBKQih+IQ8`VazMT4odiLV=rNiEb^tkCmvs&9a8kvkY`k$(QOD$IHzuu{lO%4c z^T#iJ;kLUC_qGOK6H`SYBO?OxVz4MC1Z!8e8xrx690mi+EJG(B&}zb4qpqoDTU53b zWgq7hw8rA;TkIH@w#?UlR7Zn!3yD&@Q{PooY2f54e|guGDM08ODV-;X^01KODp&Vu zIG(bpUqd+|1lk?y#O-Zw%4h^^bj#fVWPAb5&5P`T1 z7nBQDeD`stiVSaz@HO~l4UJphx+Fi)g|xTRyBc*FdlKfAWYHD+E#Is11h^K01Yo+se&+srUQ&s7iD zd_ADX{8ZSs+{3g>l^<8LtoPPlyFrt?2oWnTp9qq9gvACI&c$Hyp);{8WWE6~8e86g zVUGHCVur8Oy=EcT8Lv9kA3E|jd@>rPMy$-qAP!hh8tPn6kVWZM8r*__D{JsPp3k74 z)0syD{}d7Lj>|6Dmo~gCS$EUwh!dBg)V=tLRimrYw5IxllLg(28nv}q;tZkdDBIC)=@+Z=9~|>i0>`=w6#+fvImGjtsM8?75^O`G}QjK-TmXe`~G|b{XOcEHWj1B z2^aF@gx(e)W5gRy8m-Z2;hKzOI)_mwc(1Gq&5RC*()A`V{SF1QTgYU}{CwvTyVv;{ z?({mFBXue)UXStRm2vhYqbh7ju8J7FNET2mFF$W?L3g5)mZP;(7oC#vz{*D2M13== zJi-y{K9FiwObq%vnJwgcl-&cMn~~9J4HbY%5G$5JziE|m=uF2c-LwM2PNskLpi;rG zB8WqfP(oAhU_*|Fk(n&3D!ja!{J5efZcgqx2VSY&lw#M)Ulg%RVDsjbncm#R?^ zXe>;;(-)Ueh`t#Hd3-%&4G*o4M;Y(#mNG5?K`<%$(i_MPifMxujSmkHy}c&5QzAbO z(J8wrL5D(zt`QU0s(^RaN=4Xh6h#xWX*XzG42uaiH5$X{uP?C1dGnLAq~)TcE(n^| z9Nmd<6Sms%Z&=gO5$c#!n|2?^adJG!X{4+6CIN3n1`7V=Y?Ay_MuNR;bRJqspU0uS zHG?d<`5LXjN_2JPTw)&p{|GS;H%vJ%YceWsOF)2xeSxEBAW42(sAISh28Yrf1}9&4 z?s9V78%RrO$1{-+Mw^%U8Jm8HL;uS=A{qdQG?B(qFV~nh{wAUP%q-w9eX z%pNnn_kS+>;PYu;HkNGO==>Pc)9Y%J!^Av!Ptci@6I{|xtye1A_>72iTkD%*ELRHM z;19HP3Gj*}yYK{b)b*nr$$zKcUtgTFb4uh z_U{j0b^ol_fA8t{_m`(1>*^(Lob0X6KeBzl?hX*u3Fq$|N@Sn&#IW3!sYVvKOdsTcWwoKD_XfpSueZS9iLw@Gd_$PmsH z9aFdiZNj;+D$SY(!r?gX8u%ZRa;S*qtQ)Lp;IVie^VV2bZfCyO+pW4ejj5&Jy%;9L z#E5N(KW+esG7^eIJ;d)!>uXu+!>_Opzh^Tm>Cbh`ES~VhmlSam>|01B0jb8qZPFr`1($$V}upD*V z;F?ysX|3NLU77qNmF%?z)-cct?mawLw1*#+tQ*L4wru)$WV*ty%A z$OjrA!&h~sRUJ+I3-85yU6t3?-+B)?BNO{>{;#N0=m}ng*YR8YB#}r=zWe$Mj(NfH z3Y+W}!Qv-mt&3d8JmMYOTEP%F=h^oNq64B$J*3*SBChxt*%r*qDm7whg02Qq`HN6XcGh zAAu|f8k@ouI4$(+B3s$5T!l@xYV^vs)tP+i)yZ8^p61#_kPp@E`(!`+$x^+Ft|2{mMW zrwe=Z`(zkxD4$m$qWH(0i#<+UGsgC3TPzWMxNEm{|JJ4fySBW)t);9&Ld$xcP-D_b zr`$`{n>aYYIb7duoNa7;aP;{L1}I{jBlt@oOH0H#M$EH8yP95$w=Pa893Mg(d;S$+ z8`{D3h;OnpT^{&U_lVmFxdte31bYK_ZgB*J90tw9Gf|N+e_OXYTHIFNdbX61ks=&2 z9M1U1kV?qHsD!DXeN~3@7u&XmSK%lTNc!WpvGF>*55tIr1g%ecOPLK_2gTJotM3k# zztAD!4S$uu-I zupVID?-lHirqKC9pl(-1UXg=8-3*vf%7AK@rP@^r4Ob7AA%H*LqSrA!7D|WF6N95W zLEa2b|Mmd!*ozUxJglhk&!WoE_VlsgdRT=z&eL|O@&k#pTO)-^aTl13D@hGhlv{7N zK}}^meZ1`Va~ffO$^cs3knSnNBIK&a_A`QPvoRB!t^7Du^nA4W(m?p6uKu>p2ans< zFSC?Gpt?^Q&9($hVSxNP3aC?oO=BoeiV?ohtqst_$2H|0E%YrFH^{k96786X-2ICU zRNLVXs-OL1p}C3X)`GpL7}(P}u~336cjK0dqL{#!p4=}v7#6U0qXR=fr~azrwN|u% z!g1ru|Fqzdsp2N0rz;cE>1u^lc(gtdnOzWCfP2*SB}X25w`k8k9bWOPzef2k($HgQ;= z!bT9@d{$`2m=YkCw6lVcc+9Z^CMDTPHz7=EyQp5gScvX4SYp&YBfr3h_QhAdWWzX& zYaV8juIMz9OEpCl2N~9{E8H>TQ#c{n7KH6#tSBQpNN}{ba@?%`0Z+@>T{UYM4ZZsp zap!6>tY)T2JiV|X5n3F22X$PXwwXm_<)RmupgfRg^9LZYREt^0BC0-3HsVL6MvMf7 zf=n4P*f`bO?NHjbC|J?tR@9Yw3KMF&Q;6bl!0PYC(@CEOIMer#OX!m4d{s-e+h0vU zgM4ZIrDB!=P>=SzxT~1iR<~mjhrlc5#vP&O0^C6pkHTF;~pzD!goK;zT8`br0Lc;W5G zN19C|qpWPwFd^g&#cMBlz9N`F_64U@a7CY%Tj(JFJYQL2W3Z)5P1TK-{`+hX^zrW* zWEL3P>y;Wpng-hlvtCBv1Xb5(Y#}8S^Owrf`Cq9oQU&fN*pg_-tAPM+WND&)$iU?F z5!E_@bwWh}TrCO&rRr=%Mi{RN{oY3IUH$ohTwRlE_>e^i@iXZ7@frE_>jRi zKRj&~es~Cq--EdgEs1%M-gplRnJ%Ya^K+dmGwEq8aG9$H;Hs{!SDO}T;rjXcdWsoF zhe+IID{wpoA9oPT^uqKi6qythOU_?>SCU;#_}6jag~OxnA-W<*(3J4&M{;cGy9E{G zD0oEc>k%~mfKkOWBk6rN5YPa6XFS2Ahc$=j>s`kH%W|{;*d8j+_F?rX5B~|EShoHa z!O!(wn7m;Fz!Avu@nd-_+tsDMW>!jSBkS=Y<&fYKXL?n|8r7B8l-Q`y=u7vMPUFuL z*%*YsW}A7YH6sx+cMjN%IE4HhPBjcJ`yHJbpP#EBqW4jzarfthIV}d zTItJ#e7F)p3eF<2Si6Eyx1F%QUqHxMA-r{4w!aZ{s#7R`09CQ?7ysWW+cyc!k$U~l zKb%DkS$jNAxNq(3EaPm1egYI0ccZ`kw+SJ%Sqwp}{r`rhuHH&-u+B^{3xK>%hL)7< zM=29XxChLVq{_3YEu+7(vQRQLNw7gA|3LmkZ5T?Sv=cUxv@ozrz>!y#)H+2-NcqFn z?5Sj5cWr`$LOtdw5u}t%+?UHi21vkx5|o#&LI^LGLxGjvz+nqa!i15Ou7=+h8}m6n z35WSKIM8qjm(2>~`VL}S;m}GA?$^QMEfX7OrNY2bA<(JS!GaeKq|m701fjh;YXo+T znvCM8`E2**-Np%hLx}$xw7^?)u{V|10+$Sw5p>k9(_?9Ht%brZ;e}XH0{C_YG(!^S zuSHsatSsxnsu|2+5GVd->?bm-Ros!FCwE0=$A3j4R6{J@t3%$#VZK1-$2uAp4%u7A zC=o$x^@msvFxSSf&uL91;J6l<9bzDY^(us5JV(ZIjg|4Ip=L1&SRADc`WY5VcUuZx z5hAi{7!6f1Uh6-J#D~&>51?&@?&u9iOs7V+XTmiF zt8LDSS5}Uw@Sy0X!g^wK3X2G_d5R0enE5l&}7tZ#CU|#6Liq^zSecqR$4Y$%56P(pKC-@gHWlPAC|Z zD_gS4a}uI+n~s?-ZVmF`_)EiIU~Fr4|EmZ6(t-!u-nj{H$`gjJnEP~N7+KVbP5;j+ z9fyaAvkqDKcS~~9!F9adW3W`p6pk&UNwz+wo=B9kh6~m-2SDG6mn=q6Fbc+$af61{ zAj*-^xf4{c(qzjM%ldmpF5eNfVk%#KX~}7i$776HZeLS=&+K>elXL(x`W{Rp7JtLk zt;6&d(YN3{XMRz2O}}7Ox~h@SDH>Xf1|skP^IW3IMcxSUZu=G%HJD8|9_zb^T>T7= z`sRlClQZ67AV3zBm4*27rowt(D5;2@T=9!Gm6@rY3pK(kl?C^ z&zpyjA#o<|<-YNF}0$pGKwf5xkQBD7N8v1qVowA_AS7Z#ib@e*iH5!I*MjYk8=LtW%5|( zCB3xf`^}hNglvGLtIVEMLhH}zElxlQp~Yv7Z10Tej`xorVm0Uk3K22^xV_@U?}!`_ z7yp@qLAY7}bK5be?&yE-uxiq=`)o+vGc{p@mToCxKP}=?Fz~PtHU~FQ zDNtKbo?>3Nj7Q|w`0*R*9CpxtjH~K*b)!u_Vo!GWcyx5NZKyCM3bIVrUoa%1)xwzS z7zkP>+h(4(cpH0aXMO_z>|~UZG5nMR{K@7%HiUb7@+=7j3D^e5}K#r1K8Jq1fY_k(>F6H9X*2=d8cl&5m1rF@zZdS(10U5Bc{} z(S`&46svtYRV_fULjFAP?nG>l+$@^&p@jewn zgMg$B=1N@B;R^853m8EkflSN;gbD)e58$j1@GF9%A|e5=weDbV zm{#m}H^T7g%CI}X)e$=4ssakAd)+*#BUlT3sB+ZxbSfKW+N4K6%7nks36?K7Z!~(b z2>rP~vPKYS(duScTYjoL6G_;kS{my?a7e}g{YQ^r6I3xVQ1E!<(lWao! z!!1|Fx)O{s2GE28^Xb9p91mUcv=Lyh9;Dt*;u;~2V-wqa5SA>R#9cV6y)}SF7Xb0) zJq^Sumb>Sbm(PYUyi45s{d}mnszPLu=CXYFGHZFpO$#-mZf5ahThp#d6Sp;|8Ofbl zpX8^Tl`IEAtxJkbZq3^MR(u%NisafS0Ac zGkI|^xdaD7GGyxYWpN5J@P6{c$iubh!?K8@jn+V1OC1m3DyJ)AQPoorGgIVr-?M+$ zGF&&n4zNW1_8xe8lOLDa(cmHOCe<*0qW8hr z^!j4pW1i4k@ri2{j)c)Rgio&`bm%G{QbLgh;HqL`*tO#*#~ALq<_15sidRT-s9t{7 z>(~+|oU=WRJ{80FYwCdVfH%O^FRg}CiT-Ub4Dghsa=OZ$hA+(If;=6YO(!OaVq&v} zJ(=0qvQ94{S#Z|!`Ljn$B2`9%^@6K%XSLt444(foQG6l5uRIUv=lHg?`o?3Oh#6?< zqE2%&v2JyXjOdD{3&EFIKfQ%frx!6oyr3Yr>@XJDFf&CllMYZQC8&wr$(C?POxxc=J5x{Odg*`rEGRs_tETU+ccs`mNG$ z#>)SR7(HBGr99|j zl0C>F-4M@2Lpyhm3;u$bN>M%DoEs>oopwAbxROVp@R=JTwI~D$)rTL%e{)*bNV~51 zqGUC8B3=T)v~D!xu>b(gNf?DelwG$Q3M4;8miLb~Fu}w{Cu(SQ_bzz3_-BFCZIYY7 zb?LZ;hsHtPS}z?H#W^i$Ew$Hqjd>Nd#@`aO;_a87(YA_FYP<=R_RlPWxF-{`KEm5| zs6L9p*AC60;f7kuC@48j7EET$xVlpP+Y5=!LQ4}mt@e6ylK|7xx)-Ut&XMq%m7ij% zhLg`z{W6D5dUnfr^PaQem`i#i8vWmlV!&3j>UwOiSNsO6h=-_!%Mhk*XgeJn;*c-J zm_=U;8bJeD1w)8R1@V_rEEU45OX*K6SOEmxo|T~)bTpnnH+V)Z_?-^+79GW_+SWsk z=|$o>K?(@5hJd?!!rawQauJj{UXd)EqJgjSorUrp(MoBZwdffgS2We=AX-N>&i*D< zggCazrfwJNa_q#9s?0Vgj%Y2?m2r$GKHsUE*vabn57sx+*)!oAQ9_Bw6rt3}4%rKYSF!BH~a@tBFP%Eb9HSxD* zEYDzH&B=cM3Iq^#2DX2ju;aB-DFBVClh)q~q3cTF7^)#pG!|KRe+Ik@4RQ`=4T~N0 zB##_%CGg_M$@)|NQ2fwM5s~_nF0IP|A2d22!$W>jC!Z?lKP6|L;G;e8 zxUi$}c*W9E_t(ywGY$}o?EnQI;q&PN9|piLS+(zLfTHkFi^ul2E_OiNk9i%-BxPFH z3)z8z2z*(tcN;?6Wv&~gtRU5uO#4d}(pd;q#}|SS?~FC-2Q&QxWbwV3OcJmI*jL_*2D38(>d!KL=Y=|!yliW$sw!-pQui^WXV|h#{zBU0ulFa5V z+E)+f70j90#V-d4>s4Xo^c%sUp@APxK7l?tW&Ys61-!nXFNiANtevf1-#!c@;BVn+ zcd$)IBuobEnQhcBFY-93Bu#KlaIvvIa}7-z89ph;v}0C;6Rm3TCk-F}UiqPqw@TBh z5E=S&Uef~+;+8lc^e3HYJuGOOYSNlPoLfT0V?+nj1^+IXE?eJnb*)RkUd_!G>| zHSaboHRyoh&&Uq~sIa0qxJu$7%^ps_oLLM#y_%L8wcV4%^4WL?Y(8U04ArIljR^4u zazsV8F_MvvHvuM%d0jKT0U#M!d$U&2m{e5y0w)@$2KsF%L_wz2lw}1yEr;|MZ5iTwLS}hk>hf^zD+2eI&=hB+@kav(W{mPoV@HfQF%p{DDlcOez8%*GpHQ^vYr{<*(o%^Qp%(B)%%c3&mrv zM`S|#NVOqGV&)gj;pV#OpB3J$c(*H$AP!mTQ4e8hBF zLI=eVo(j5uoHGQ=!u?WWHX9wR0UH|?brTWeg3nkmRsxl&ZF}|RK?${4$``72S!M9p zB1s3*e;KI_MV_34KNZ|+L?P!=G`+7EBD}15e zoCkuv18%FS;$xS(;|5e&l@F&QjuolH%)^*egU#9X4zC`V^&GhG5WDqxfmOdYV~eC#dL1~ zdNk1B-}4Pha{dw-Lt@(L@SDycFax577K5S=U@fa-?t3G->iG~bAy-jm@~B22kCpBI z3~zW&f%=EE8c$^uyJjYBljf{U9!<{ctP30_gNot`_@_gbNSaelz)~~+(BKqWC1RLAgdH7c- z3ZiDslgXn?Eu|-+O33pRk0}1X*!Tlr{kw7%`IW}G!7Wpmd8#%+M`v~eBG&3~$7zG} zHWt;q4BgiR#uJbVP=Th=)nX4X=J-TB_c19@WB>MbrS`;yWU#n{ap)MGy^IP1(xG(u zG2_l#{@Rem2>g>RR~H}_)6%#aw`8{;;vb({J=HSf>iMX6GH`wK($C*Ahzc(8zG*oy z0TS?Qu^oT1CpjUc6_H$1%gC4#j<479AA@G_KI46guG>_CP|jC&~H;^;$7uak6wlv`rc%}L2uNPT$XYNNZQ zf}_5S`G?_~+r(_VWRI`f%*){gs1xV?C_Yx32p&9#V1+eO_z$o?`N$C%9*F6`=usxd z2x<4I*c+7(Y%>FX${s^mz}NY7x7Xo#CrU~yN9~@ zsDTWQt}k|S?S}coUxjW?rnYF)`-{PY!@UP7equ4hp?cH$NKmu_(J*paHnDkuCk)d@~YvdC-d?)0P}C=Hl|DPn=2|&M7FVUPHF5 z{em5;Fd;tZlgO_wPuY>*`vY=VgH*(IBj^bY+ASkw5F{xGKC=5?J#JCji&Ip#xYF$W zfRjx)qMORjHz}q5xY^od92j^u*K(WaqRpo^d}`Vr#P$;^^axZi2Ja%NMI7@h{Wxii zct4T~$e(~#0?Kc07iN>|xQ5r)YXeC;SZ@SOTsRfZyE&izguNK(QB4d|u<|mB zaoXqxL%$ZfJhaIDi5Vi~yKjLJis{g9Inqyc5+-B^3w^oGKgX)wX~J@d9jjR3!DS)jbT6{TGV&eNIdMO5q4;0^kLK>y*+X&spj9M zxY_0NLE~t`fYe_5%6Z&SOtxAFP$}Za##3b~W;322glp^V)=u6i!>PLE$nR%sySXz{ zksCmXy&RK+x(iz=wBokOs3eb^2Ic7TEPAY?m>mAx?r~=och#ObDdl&MM0EH-OwhR)tFmnikC@>Ed>L+PY?dSw zOl7}u2p>w8z_7ZF#a6vqylY#__!%P}e-&`Oz}AWBjo0o}4fNy(hn=MbA?A+kG?gzo z%PsE;&J*D8Kc!U$ad+SXU(L|mbNTQ_ zFyXW{yXui@RFi<#s!+uRY=l@yZBh7p_dtsktHYGW{iM4cb4%uPQ>~6Hy8#S6a*A5EHbPT0CCt|CG^iSH^e z=H*Xi6jF{~#R*0aP{YW~a&D^w(WD{M?F~1B&@}a*#*eI8TboX8@?G1Vv(Cw`k=5|< zhUv}S#lAZZ?Z&@1Sk1Y*{ycodrRf6MmYT3!yvqRJ|4U#Rsn+1U(r8U?YV<4=h}Pwcr14tg~ZBPdujDzhbGDtP?MtDrKfY;H43K$b1i9}A&L!!zpU?{Kf2PxpJS%H-1Ulm{~o$6qkszqILF_)F`E$is5) zL^Y>O9Cvo;FoT^P#+eEPI?*9xL0SDkkwcl7IeUmQ%arW-ezD_5IQ>Mep_6Gz;@LDX#UaE1sg zTlw(yGSHPeg5RKWV$P#t$IYcr2S0FBKM-02As5}u+owl%xQ9;pFhoRNkqwj@y3jR1 z#jTR}I`C#s>snOZF1?mvi~ve636OiYQ_0Lm4hEb^!5E;;PXS7^5WtTty5c7_&kssg z6NKx8ODJ_dnS{Gj5QuCZqp0Uo64SJjuX{$Bo61punfBeIo#moZv8rk@v$rYW$NaR? zjMXQs7s+3DowCzwSqsIPQ)&U%HE`JBlwvuqE@Hc0x8!lsP=T2xj8_Bx0O-^ZUFk~- zU6CvRwtyamWchJ2x6~febUb$yLo^20dPXUG6$Ri}!eYR|ycw$bN#Wao+`05x1dYte ztE}s<=c4KwsD9$0=J1|AuFlqFzqSIiZ8Ss>d7WUgD;OfI98`0*ikD!fBnlg%@r|Tr1a9xr57exCQ}^Gj)i11JsptpaI9S!U z8KImuvI=Ub$c-@?hsEnDU8&B~X`0A!4@_d-*L*DlaS}yZ@#RPUg@6qbN4-H+$G|9C zTxSH%mq5+vBkBm9wHIlMR*@SXVbBd3l@hEn(rTH?7YW1Q(9-suhQm)jB6k;%;h`Sh z_WsJ3tPJ`ABKt@EdGc+!S_cP@%N@f~854WdH_)Pc zt#$l+52GN$W;h+qQvQc>!o(^kFTwm#dGV>aBvB>zQT*61<1~t7Ok0~nqR^DB44z-y z>=MM<^($6a9Sx$d7XUwu*HXSbh@R(EL-G+ac9vGsVJeD9aT~X=(ZC|+*Sp^sX_zw# z_030sEyJm%uU_TVJZrR= zh#eeQZ{BeO>9pGRtJa#DrfR{+^bQuBO|w?l-Fx1@m@LB-NYujzNZz>F|bAYk8(K)Ziz$3jMdGJ}uwAGf=< zyDCj=1@}q<)a?lDz`0ge?m)C<=puWg**Xf|=}MyV*AYOo-FipPX0)nF(_q>(%KPiJ zK`h(LrU!CZ${J%8Dwk+j-i&Hk8tmrGz*-U3qqWQJ!ej+$qk8_#DkxIsB?&P4rZYit zBg}=C;f?-`!2nw|?;|X!Gug~}WaiNtaYZ$?jZ&5Zm=B3DY}2q`w}Q}pmB(H@R;q;k zwa8v%JAtUFD}V83*h4|hRM;FY5s35NQPdt56>j^@?IFX$i|Bv00fX0)IZ%HLDY%g% ze_X$=WotOv^g{}mnRGl99HRTEX659$&LSS=HNN$2QS$Tf{__%w`r-^~^6!_7X-iu6 zOtvpJfFa~;tC{S+`1mfsIAS)O`f>9cmB9w-ioRjDnd{Uz7-2W{qE|lu!`%!>8EuOG3hpPh+S({&>L_>Oa!OlQAq+QQ~9 zSfs~}WKuk(LB-VzABa(83&l!>$$ZImun{ezF;`L7_^XmH4PFCH$TcB)>|Tf56!i`Acz-{_AD{2woFu(naeY`FnG_6 z`$Fv)7A%YTzFH?*t8B7S4qUZ99e@2G+c=y0kBVgbHtnMV)6@O4dZGYqsz^9wd?)hG zRAduj3IoE1QcY7O2_UN_&9E<+Qg1Y~(*pvH)HrJxDS@1%SIB=u2Nn3ba^J|8T}GK|WN_ zXHrGTOs9ES=r5j|dRWcQ+N^yb6RF%7)7&r7SBb}2cXi`m;y@Ziv9qU`Ly}S+J<=}?9cIcOOFg!; zxO^{CFX3U8RXXdSz){^U(_s|w{gU%r5j0=J*m7vEUHq{t&%m;C-r%tq+zYe1QC>f4 zh<(5)?_IN=IAo~6uVtDQ9yBZ7Cq+gm6}44$$C@F+e1Jk9E(aT*{=h_v@6Jj)XZdI0 zKvKA+Ng7OO2}`lrCdX|lrsh5^=75R!?8T{9%XGb`iefIw&rN+g(3NCkmKUDl#|<%s zp$x)Y<5aj>u)VF-t+rUY5b}?`0Bft}glU{m0ZexMv0<%cPg0x#skhZv`n^_u7qHlc zKbWuhM}RJLL_fCtFC1okSDaq{F$GI$UE1-A*BS4~v?~$#;Slh>Y#c&vl|0fuaj($O zWUjK&QV|3__P^}YIaZtd)2Y#(UB`^D*alq%$HDh*or(*+j6rb63JB9-Z9qc%9cA?` zWp4~Ze|bJkmEZoh-E0ry0Xu}~n~#!^xt?OsIs$wh5Y{e&?k>8<+UY>+*tS{qWY5RQ zWZV~IRw}Z6B2xs%8WsFvk$S&uf|B-kNSqeYyI{-Q`1dMIK-;_O`l)>aet0*BBY<5GS$yfjB zM+8)!>0|h%rJAq2AZ>DY?L(uGn^w)9r$m`ZJOhS{&Mma&g42*mVKF-EUTZ zH$k+c8#*@s*YGDu}S?#WbBklKO3F&_~0`Da9RU=&pa;l-}dMo#jmhl$NiS_~Qx&v*^d9 ziH!A<2>|FMG_~xXXAMg7V;C?R2tEBbfWa2%yR?b!oA53~S@zI{Zz`8lo1Z5%D^T$o zx8Eb1AQ(Ud7ZN4sY{tAnwLTjBxF z?&`(H4JJSo)hQ4ngO2a`{qN~C3>HX>rhPJS)mq*| zShB<}GR&;`$)H&sVub3r>}_z~*jPV@h*+s`+#K>K6**|{w;L3*@1CHh7uzQ6;=oSK z86^l4eE@Rv_a}#*TWg8- zUjn8kASaB5F}pmy<8Ch0J^&NOI&=;`&|8qv{ahAkZ&b8M=z-Bh5_u59B*s9BLeOQN zdHcj#i%FpstRjHLX z@G&Pi(&^ZEL2%Vpu~uxM5vI|jS)#R<-1AX3-gOv!n9}+@Hn@1(ZRuyZ^zz6BA)~k5 zH+n#3d4Gk)&sIvv6x%H1;79tAyNPt<6lUhdEugHfgj?o8v-&qxEsbDH6s^)7Jmp>zQFjvi7N*A&l0bM*)$2-BiqB@{%!N6X%{8ray_ zk4!31h>89B;vIk|B)9aY*nW`c#ZdiqsG6Ry(?)$!f*oxpYQJI!w5r#%;siL12_E|b zqQQ2S6tH?y+ww#axo3P~qKUK^ak@AMA}1AoYz9w8kt(4cSHj2WqZ*cQz&HQvNhyE-OVgtmUt13ZAS_%7UlhlpppE z43DqI#=y%NtGjde_-{_@Gq0%fywh9o6)YDwe~?bTK#p;EsfPXXHg3ljsHea$t{jlN zWcr_UcRvs578rFfNv0^^z3>6FIBI)VSER_QX->gx(7G;=T0aRy?4yrD466NFd!=eC z%{O?0?=Db}wx=3Rmi0fR){?8gohbP?3QNHVD9;OS1Ft!8UPA|~?Nhv8@tNosoe5p5 zU%uVL>}*gOD3g=j;@j1LX?(A&EKi*NcA(npp*GnBQS5Gp3Jy89_BQZmXve$Vv42M) zV7C8~VZPhsV3Sn_zMVLes!|qOtcaW4I=MPIWRnrX$SG87J6ePVY7NY40rzsyy);cA zC*4=QdbAQE(@x|Q> z^Tmr7>Wbz5;FnN7_|Y5R_~0f}i4hp9{##5qapCaQ^B1c(w>aRI?=Ogq_!$U*gD3ca z@ZD1ttCRQ6)J)kM{>nI?$Dm;BK>L?xW&NC}j8X!}jcQ;R%w8E~RI_cHxsF9z*uAE z3u%NHPcx&+UUiH69R826N}}q$A-3z(=ei(Cah)Z~iid9=LC_#uz|bErVQC{}Z^9b- zOm$E&dCGcUu7x>MbZJTyplk}Yqcnju2?-Ig+RGY~m>|IHkYt%S^>hAOsgQ+yd?A=k zPkk!TAd){0d4v+xg--&jrzWet- z+*qs;NPHKT()iP0OhyNmu(0@4=SxZr%Z{Of%-2pRHt0~){hy4dD)CMf0O3DI zCK`h?okumqYr@*NKLw&=0}T=R(;GN@8R_pWQw;%BBgDs6v_lLI5X=5)x95x{ZLY#v zSA(W?vQCejd{7=}q$S;$!WzGPeIp%aI|*htS4NNoC1NAYD>oTsdS!*dVHZqR&f3?9 z9i0-RmUoc8n=M~Y(@2hWtL{+5#`utu$zsq)ci#ooFPaE@sm1*cQ6zD;H@3arU+z<^ z=WYO#XJ?L{F0Z#KpN*fFSKZRCH@nf_Ye`~G_Dyc?7_#K6e_%EJn@4Za#leg&RgKxw z-Cr-e!R@psL6;4stv!jk#4hzubkDnZ>d25!@4fRGJJ+843P%|&hZM9I`wF&TVMmGr zP3adtw5yjK^%IX=y&G0I0NtIas#TzRGk~EK4XJ^8$O}->^r;6@-8)RwZ8=tV{3 z(l?u&J0V7l$!4k2-{Y+E;?du;Je9II{&)u&rx$`kLs_y{hcCcaqn5d`NuQasYAD{M|5@9`&zM&nfC7cAA;Nx#b`FYE*lnYv0p;4 z*QpfET>Sbn9M5jal4(-<;E`(TjC%B}JGg?{9ewDOJ8?HwdWaqcgo2 z^!7xG(Ark&$du^BDEhv8x26gSUhQcHXObN#AiFXo`0fuh!*ZJ)M#*rndaVWmLi7x) z`B{*i`yabQwQ`uz@88VT1FRVT?Db=&P}hD|kLG zj_~;jueJZLept^6I{DlY7!sKNABln^#@ML{>NEPMX#fC_1Aa+- zIj7V`cPp|1c@f1Z6eLPaejMif{b(1j)SgtdxE?vwQj zF_^8`k!^XaZRFih zy!)`*gSwj~A|Ci79GC)lW2nOAMQe7$_$4WBa&>cg)$aAavSGug)=rPd5Fm(Qt)i$j z{(QFr;}ij0_K-70Y`{Sx|9ZlgbA7${YIs*=%{}>`wwpdwLSd5PP4a$ST9&<@hYJvs z84oF72Qx5Dc~Sb7!Uq@vFzo3Ru#o29ZQE4?bG(aeyQpPfikzF0Qf$?rMG^j4;wSBi zBNU52*$h@{a#l;OF9-yPY@>I`D8NFE)(`+(FoFp>&I3d_q|hvr>RLtYO>;SuBbTwF zeyt6gKf_1SH!s*NBxQOLugQO-E&ww8K&=l!iz*pK3V~s9<*G#*w1@Dd)iq7;tXn)I zuAyVqViKf7@IWj;sD(;M8g)_ejqn|`WOc&s{Y)V>@!*73C@&F${hg`{)z0z5rRv6cEBs znPSAIvi>*7%KWQ9>nD?0=L@Irh(I>}$Mwx8Uf+ryfwoX|pCvm@?lRruc-;IT*X~A*01^C(em{T9UfY5F;Ce zkWPs=+RsN!B#80 zUI&5_!g z;mYzj5n3uYk^|k`9&CJq-cGl5Zwwe(vHMLT^cMEw@!?efKpWi*;>o!g-);rQG36aOa2k88V>6{WzjpzpUF<`FA60 zjYRZxmSNk_wxr`Y&wX5laQEb1-Oil!+lul7@TA{+ zGIkzAyEwF9=4%E46e!dmavzb4MW;=z#6_(9MZWIkgDJj%cu>UVrL}lT9}>3lQqa=8 z&8x9#juH99=a4!a^qhi}zr`zxB)4@xr~byz zfI`@8EnN6-#5|XfTCvk;I_K#GMQv^9<@=-IT5#7TS#kmMtd)B*IXH#?4r^m++Fu$X z#wel`mEei1v$ydhLY$vI^tlA4^my-jKi&BW;foo@1js^#)`HA_4W!4Hh(n)!=XV8YWfq% zavERMTBkWlQ>bs6Jq?x{RJ$N10lXX4+lSY%cMpwX=w9h3@`;+A!wgu7`{CTt1uwJu zgmn^!RQvlaF^~>nkEnzl6eLha?b#9p#PevTrw&U?;(qHHJ^}+N*`G+an2m21S>Ja% z(xMh;Fbrp-$2lR429D>N4TtASwr(M0E4VN55pP+9;(txQlc|Y6NSt96189u^FXoR= ztsf0K%G?N^hL&%F*H`{@O_PWz8n(KU9a*iJr!vG-rQXn*sNb|qi{iaOo?kXWRE+pi z2h-1~7J)5tLDQoOBh-VB*To;kZ*HNHiB<+2vo~rR3TG|U5~L_mE-T|Wv^`s?3J2K( z_CaDkVrjP>Ak3Ac0>D<0HXshu%Lxx#UM;PmHhUa(+B@p3Z4&Icv+Z^Owg|~mg}n3V zNyP1q3vSQM(yD?`39AhTvf$~FqbvCfh`*s1JVa}#UO!#Zoh3)v$MGh|U0GgsQ$8*c zhpf2dH0~dp^K*c-!&YPQo6!M4Jctr~|DOMV(EqQ(`fv5tzY9NPu}~si!&&gHZ<8q1 z8kQQyNzQ*wqW^I0e?_K?36a#N?k;leNqC;j9aAS3G(M1Qele>_F|`$rIp`H|j6g{U zf(X)vD*DJtYfh?|>t6%$iG^M8+Q$9rA`-LIS2t&%=VEq<)l$eNdKL8w^N|gNv|TFL zsZx@_QUC-jF}3;BBctA5xY|?#ahjJEPLKjIPtJgwV=?erC7D7nANY6`QkeEgu95Ug ztNukUI_Y8&FO%OePA0UfLLyJM$S{v@1#h)_#sckiPWBZs-L;@=;&%~cJg+&yFHzR= zkWDb1$Fmu2gplR~@?*AKZ(vP1HIG4iN1SB#5&NcgTOqgq&Mv0UBdK6oXT$lk3X$K%a}~J0ySIOuz2zS8y8v2UZA;iAbZVsenPvun8J6AxLOFf)Ndpk#!Vh(X;Z$Au!|A#|JCN z7-#2NkPAM9P$ls@k=gz+?&wdaNb+#j@C7(n-sX&BSP+eraJJd>a{cGqq^- zw=2&8oAuzMyQPiy=r=cZ{rsA(p-^FyP-K|$^c@N{s{S6X<*Xp`VJj9`Cc%{C0_^3W z>x`#HE-{jPaC;qM<##wWPR=i{eVXG6t2cc2r^zqr>B9H7n8TC@aOSv!e#U8%lmQ-R zi8rWOV-q8@Ku-e;OsszzN~H}mq=}0BtcF=+palW7V)}FDCzWX6E?XUfsF9|6Yw6Yj zW*Nb}>oY+E#eKm3D)Y#$n|KrQ> zXX!2eoePkb=b+LZ#_XKruQRJOZp_U3Oe>w~o?-X=N`VZj?CiwTt>dBmRf(EzaCiCCbFM>bn!oPnOrI@M9fv$T9WEiy>J6>}>F4=OcgEoba z9?&H02aF?@Z-_U%AKH$tEr3ap9v5{6vyA02uGt>^A?c$JNx zD-9nI#jMY*TpbMxxJ%W!3XSqMS_M>#{Q>=X+>V0OHIVfB9O3Y~KVaGrtJ1K=z}Nz- z0$TQ0vuWO2glVt56o#opq+ek#?oSDz4f?wpqhrFf*-Qi7%VUgBc7h;0ZdqBx$lvx^ zI-LB+@dA|ga`~xef0Kkk8Y$h68B#n|n-8;nL9?KSM1<0kd38Y3Nc6O)GX3F8G1jJa zrlupIFvx>F=X;*MPh_74L!K7(t~DUIH?X=eoDT&}>B_PuPMwYOa*=o%z0KFm*!*DLh}Ow+QlP7nlDT zy;zg~HHxycvBvKvQUX*Y;{W~|FSA8M4^A^BQCrH-VXF}!XS3A>@mM*~#WBhws+Di5 z?|*-@Dm@sOay3DRhDRlnsPrz;(HUp*7%_ePm~1{vZ%@ogB^0(#t!z%E2t}n*NQL_^W^s;&SG+l>(;#se>LYF)OG?iXZ&v|QMWPt?V!6CEh zf#v?w#l1CS_+>pPHN=)%IMdrEE9j6!-AY2b=KZnoY;e>@;M`0pS+rXw4{Dr74I|uO zJn|A~ar$9q5UY?tES(#wiv>#bcbTybRquA9MhMV+xqDeh(vCS8fi8$2O{ z06nFr7Xl67gU`6?T#ra8Wum0>-(E}M+brvHxhOB&TGdJGtY&d|QWh-n{lcX_DT@O3 zb+Yvs6{Ucy^9<$KUojPf&Wv%2H! z!hMs4D^ZUugO?vAq2~}X>GTf}=rHW!Vs=UhZI=R2*2&d65eHAH>4nWms1AKbL`wTh z%?zYxN)2J*cTqllz)uLxMLdXJad~S+6S;bqXgY*LEP6+W`*TqlSSLxM4nT$==MN-M z+;@5PX_vN5EmxghfImf7ZSO)``@=Z?&IJF^d+^A!yn%KWIFtw7O#*keEMY831IdVeMsNxwC-^?}x3Y6~ibg7y!=2+mX)t_cxY%#db ztZzEX2q!Wv@UCGuAbeecy;j$YuC9BSMK{|~^*G=v`&EDb0#syiASZEr<%-CYH(y(M zMngPK6K|Nt9J?sxv37AOdK4%R|J_LSmN+D| z`PqtvuV|TsFclaM)`J4;PZ)W|P%vD$KcR7_u@}2(jmMm zr0afB_WJHOGiq7D`ogE0ty#FnMnJ0h(Dt@GpVQyqXCUX)`}f5s1TmeLDG%$*`K$mW zg)~)ARI?|LOUQog!c5l-rdezcuSgd+O*0B9Am8&ebN!KD;9-<&K?Kz%0hr{K+z5t_ zxMq>-1s7t5HMaXLr`8F{J_Lid{ZZ)-7*(3X09mE^0R)`Wv9S;r*H>a9^)ZHzUNMoa zz5W?LNzGl}TFeaeO4~-Jw-877Fbl3DgQx7DKP&-|`HPHIQ2(KXVe+dPRS-RU=!Z4~ ze=g!D1V&9+|J@%Wvfq5+sa|uFPoF(Z>BqHpr8)ikIv_rP8#(q@ft2^Go|SyT1ieo_ zqPaJrv(OQjvvh>_0m1lxM=fB+|G@abvZ=r0q~BWWAIL7`G2vPt*4+nh7~a|fnEME! z+Wp*qPGU=vkJji6apjj+a9%^4C3}>^q?myD*4+)Um?L`Z@pSq2qY7)YpWx35eaba_ zVre!EJ)(b-V|iY9A1K>PO390hWc(|eGwW?mIACeUn z@?41@O4ZDNl-&z5ldI*LYuW9jc>mT8Jh%&nzXUu`2(G1Vp+*@R6G0zq4dW-D^j$%f zG{PTo3S+K?gW?fiioRe9Xtcn(D~GXVFr zup}G=myIFT^ww@68S{tCN1mZfb80f~O2Yy9Jz#Vw80YkSqUmn?j40DzZuG1-Q9pL8 zS`FX*LzqUi9e#GKZ2h{$*vGyLHzz|BC?VwvP$*?>$cb2h&WQw% zZ9$M+h5KYje}3pqT{BRV9W*^csC}Q{h;;yy{Vb$*aM`U(`?p`<*%<`H{bWTYb^6o& zucG}x)B9_!cI-S46EqjsA2=eR6)^Z_G1PyUa$PtGhX>a1N`VUj&X zZi&76@MKp_Pn78D>3ia7i~0v%ulo%E?V$J%5F(P1 z&xu==>T%JZke|ZRpU`{cdBGV`4B)7zjrvgL;BAf`TZyAr?NmBMjmY!zB_@^5kCt9KMA@F-loHwzwVn z_~0Oi)ZQRTa-MXO{nyn20ilX%X1v-P_%K{=mMynC^T{=3~MpM+kt#|oZPIK zA*|B)q6W>JAx#uyzQZ(rW>0BbFzUe)o(6P=);R-SBVUW=VgNP+{lvsFEKxJb>qG>!-cJyB&S{ zc!+8LJ5!{WB0T>SqBF=YUbeyAoSVEJfvS1rjuBKd9@)!)^(m^6S6^z+#Z4S@(dYQ$dsxTqhQzo zi-ER&T*rtyl{@=~udcb{ec7>Z+=(owMpENm}C zRS6B5y2Thkk;QP+iS;b9Ni`aDpRwNXm|VvjZLUn1A!WS03TqVGd;tBBJWi8oX9ZU6 zWHe~@e9|mU(Ig2i|6+dDk)V$HBz4jFO1H6>mx~8}RaM_-nwolqnzePiu^`IT>M+?2 znZyy9%&EKZ+SjcV1j0p$2o}W#P^?WtdPr+Uxd3K-I6-NMxQ@KR_z$Q7pg%3 z(ue>sq7B;s!!?&T!7)AMt{9%kQ|k<6!R3-ra|dW{C< znIK>??S{5?%b*!%o^98bUx(%5(a;jiUOWVd%N9@@w@$NGCNnS1efxjjuv&od!lPov z?UJddG>f2ScArKip08vDQSI1yNK5cwp7DVB1m-HHQtpF}W`b@+w}^qJwd) zXL!5&&9{9adJPezOKvr0jpvoV_^*KZ72z#Mjz$5Gk;JmhCQEA5oIC$%=+_Eo(rJLO zmSn1C3wV|N)cI&Q7#SIQ%`rNbB=$Pq75$3|#wA_4+#2Q2dS<%Gr0^(BP{4G`!$t4u z3FKp^K@!0J&3)olM(N9C;QvadNdG)8k7YzDO!0 z3?QYI;xhH9l4k~sXQc24L@0nT<30Yv&6n%*AnO#eLQ&Uv)~+ER*bYHM^FWB-){`ka zI9{sn(n*87k5kE6f-*LbWQ{&B;SmZjB{THGfcuUuNCs?1>i%m~ zP*EDNj$m~G=;Xm_E(xB;Mb*<}g?QrR1?XO>EWz^~ivszHQUmW|AWe~l^c~j6LM{lJ zak=GIGVpHZL`?kj<7f9Gw9Yy^+(_Kii~z$5>xGmbWB*iK5@O!)xK4nGD&?n;LwT;o z{--|GnT@RuXDoQ!C^QP&7s^PKf!^xfiug84G!mn*W=3>PUv=94GU;KEf4o){0BXm8 zZdTu_XZjr_V|=DQ#E`#uH6)|Ua$dKJ?HeIFC*ZudzW-!5Jpi3XQjpt0d1M$Uq{vf+ zXxUGm^hT~kTAq=~BJ$%hs+RhHO#NefWepc@i&kb>v2EM7ZQHh;%!+Lr72CFL+g8P? zq>_{8UF+<ksl=AR*#{4P&$TT|sQVSW|QH z?_u&2ycffFU#x?PPS1VOOS`T@)kqn?Bq%~LhO2|_q3(jP0<@&1R|I?f1GhjDI;cy$pwyl(Uy)Ns)RoZtKu#k;y0I-}jEb1Jhfru^gWK z4*%6&Z`)iY6Oox;d7zx!TU3ti#jNWdN-XZMZKpaihF7d_4)llHVgJM5M=WquEII6< zn{Kk*%K*6WmG-kbZ}?-E!$w6cpUbGn83-A$%L~F$6 zPbVHB-c$$%S`^GqA$<(49x7O}M%nN~!l8C^anh9@+)eOTSE=qub_tWB#9PR3yqs$OE1Z7pKot#{l7f_jbbE|(K5&E0`HACdJ9T| z5k2&v?XxQ{=}D`NG_gKNC{v#~6uNtg{io=A0A#F-TmO52)0SHSXkgy}QRe>~s{i@P z<2Jv?rQ2G>xhUPLHs1(@Cd#_{L)Pzf;>vmPxln>-)-QE!$$NS>_`)rCV>Ngs_)@j9-X^QA` z`-FMiQknQ>T`5aU~vi6wB6dfOMw+M)F!)8(08R)|D*fu8e;Uv&59~T zFmZN}f@2<10Fnyvc$uKr-RIpxlS23Pc7G?^Vnm=NxQAo5Y4rCsTkz8`tASsYoY0G3 z$T@^l$*~Ul)yu`ZZ*N`( ziw;SJhka4kjyqX7ZlHWIU(YaR%rb6mY0mhQzmNFMno-~!MRXFNWe%us+#mEfMJ7W` zMJ5(%p9A?cVWcckI#LWa4Wx=gr{`6PaTX@e9ajKxQ_`5=N=&EFnnCJk?$an?;CW|l zga27_T!dDC2~ngrwQ3GTpo@1ZSSV;5iDJgvs8b6)2_gme^XmP0y1w`a*`y_zyVDC} zx!UI@iYmg|5{FYP%lBEVl=o$5^GoN(3B1!? zj8pl@bAL18LcSHq)i`c+S0|<4=^QIgC6Syh+mX&fy{~tK*eotxM?#~J``G;3WTPjG zy*O)NS1wa_g0*UZrDU-*`uy?L6W7$27azh;V{L@JGao}v(+||M$w&WFMp5r~XbcRx zo6fa+C>>TZGsatbv`YJ|q#z;vSp-dY`}9sQF_R}SeZmE}5kmx!0@l0X70upg3zvrN zAaTNg-Dv1!nAdHlwROhzdE%{gbj4;7$)PFox7Rt@wJ;@hE2!!aF9{zNjLjcCV~ z$k%V(9Mhi-sg9a$&d5P|?ZregR9Mugf`P-v+Way)!;k*gPhZZiAXxHg?M0tE#l(KX~6ctk>DSFvRe{e%R5_@W|lq$7SSWu%F>*E z;o{y;?yStq8KB49-epX{n&^#u?FPY^Oli#<%qH*k`|;`zQ>mF9*kbbqae9km2n?V0 z9`#XagTRF2D&ezWhQ9q7+nk=(z(f3z_W!ns;Xql~IRB3%?tf80X36j0_3CuFsB8|{ z(c1^AkDt6Pv~S?4xEpn?!jdkQINng_iqJ$liEu@`Jpx|t&{^`vtye}Ktlpn-J7kk8 z$~QzI>O+C*UsXm&iiwhAX3W}Sdf8_}uR)kXncO9ziICZe!sRET@R^Gs!hst{$%f-- zsBr9Ts4(ohga_0NPfCmjZ((mg)GXvrn+D-^g$b5+3mhA-#yM=gn`Qg z+OFD*bi0Qh94}bj+ie`K+r-)hW@IVUicHS#fvqWJ>0?(5CxiceWxw5lSL~OpT@H2f ziNB)XQqt-4;5oe@Fkq3_3xciL$e!!{q;RUl^l{@3%B@N5$+wNJxf3-o2AGRb`?jJB zT^u1EOuo9AB@rYH*q_Hd!&}Ayv&&pKn&%$hI@#~q_b1GlQ_v5(n09;2x7cOW2>HcE z3Z`b=`XI)0p= z8kA8*#Q3fh&Red(K-5%>S$EBv}*rCsU_O~xnnvQ(XK@7Lf6LXng%xg=8 zRnKh~&KC1M2Cc8qJ~u#1;?t3Dr0k=0Q@)6%q4VgqLZbJXurQ@2pFNp9inE%R!jrvB zo+%MYJ6sn4&yU9lH$fMFqi)v_MXopB6cP{%BOqQj+%v^cCEAM&o0~UDPE9&151i&u zldYHqFou~J2ila-V69b7C8wW&ePeeurzyz^?X-xIxhOH?kpDgIqUc3$t(Jlrj0hJf zyYit=gl8B|mMLX~ReD?3Gt0lsA(-=MPMoOjwMBaY8#6iWO}6o%^(owJONL#_&A5Km zyD8=iGifcF6%a4F&)a?%E_Ou)(sLxp2^-ei*S(jvNvJNvO*js@{$%uqKV5IXzdO31 z#I{~+(ph}^Ua!0?PQd$oiqEZg)6Zh+*}@**PbJX0ojOD#v6nsglyUaFI=(!A<54{E zVi|IQyP=1bi>L2*anBmSe_jXuS-T2hhcBAW-oUTR=%p#)Ijd{LGu^oR;nHza!?a zbuf>kdEynXaxRJMpxWSE^l+*9EzuiW^?fbgSY1uEDU1g~C>F-c3PEH55 z^HTm}YXMD+@utp_6Ff8Cv;)xFWOrt19g*XTvB%I)Y*kL4xz$h{@W7t}6V)Cme~`2GA@skLLzXrv#zt(}tkyTwh^QUuRd2iLljjJQH+ zg(O|Z&`c1T|G7ttB(d$TL=MAcS{DJBI)6Aq$*N9YRbjF?JeB^q+n0;ziv`1KrsvK1 zkih18qw2M2j@=5(7?{?(oacY4p1!1Vr<2ogul_^eL1!@0yVm?ck$0_kiS)`$+1p{m zCu}fKO}Ei}(Ft7wb-i)?O3i7b3q3<8wyUjUEN!KeA0m_^@x}4ip%QRI0&SLd=n6mr zu(JMd*5Y7FGjao=1&-TqGJZ4BXuuwgF_weh1JU_RodN*YMC{&HkpoI+nq_qDiHXEO z1L-2$38N0M@d81G!s3jV&}@!b(Q&uHM33KxZ)cVhiiJWj#EEar^SEGx5vpLE7ULh( zZ@jswVo52(;KE1ViO8`dr6(&@lhx(cFYjBla%}z9wvkg^K<8V2IaaLA@Gjad7(hB8 z(>J4+fM^!TO2%F95FyxPCLtva=BSW0ooQ{JnKVI*y?D~@2nc6c4rTcnxkp+Io%}rP zuWRc|yWHPH%Z#3%;)|IzL8$+;PkEz>{v#0aoIRo4u0?A5HpFL1E(PP$(Ry(xQjX75 zI%2!F*4w!k2BlKQhnQp8&0p2qfW$Wj1EMvwCWeSa{?pN+WtcYB<22QKT zk@og9@BgzB>ig(QispB)3FRDF3?Ut^XBmGzA5ywW{&-xB**16cKKbM4PdXlEFlAC9 z#U?SL)_B6@nhuzudAkgQbqaqxKA>%Jv7PkK-1PY1}Xw{VQAje^24 z5{&1+iy|s$3H{<6nB*iHe9ct@dl~LGTZSIp!B+LKTG}wcVZ$oQo|X^*L0E3h{6C8X zR?hzs|3J9XfQKLq|9>&!8IdwltVi0rXe3}-gbun1#JC`h917Ff3`tQ^sL1YhVRwhf z;?3EL0(wqI9yj6P_2kJ)(-p7&Y&9xvGiox%Gy$|UB(|lK(&+ohL1F?b|FmTVEF! zY8~Bynw#gIb&`e|>CUmjl+@}JCBqQW!!`Wo8~$QIqk=uxMWB5rBBD* z9%q_ppxExkV`Hg?n+x^CrD5U_!`aglS|XeU4SEQWO{9TXSq zdpBaJvXoNRJ-k&Z(K|V6GIc!|8$AD^sNsf@Qq9feg(k++FOMtc136AjnMeUtGxxS} z5o2XJ)MD^)ySS%Pa1BlawsHOI#iZ*2ZMdm)mqB{46v<5A#BUx8CrcZ_-Uf&UGH2s%pS|Xm zH+zMaTNgzH`xi*NB_v9!&RrZ1ha!SKuphwZR3yk_R0>WJ9zU6onTi=evxRd0ZKaoU zx;w7B`2uB|0-aJ3L@8ND!9{}J`GkRB*pWOI=YHW< zm<#955}$$ofJz9jB}5K8O;`w!oZ=ESHWw|l<7j(53qR_;tfkFGI-r8+2U|`9Vv;JI zGLE?jH(l2x;%if&fw+jTN^HDl>o={!N^MJa2}c>lcdWXJ&6*i6d zbt|^x*y<#heI{3m%WeaiFA!LSyw;wGOP&LKb)f6E{XgjUxq-sRM`ePa}iA=GnJBf{ZwIDr% z73?eTxVn&SI&wO7d?V{Rp0&ETI;M@pfc~wjfc{{qu8KzT~8xLo9I5$e|v4eXR!^L|lQvQvxhmgrx z+9!8NiEreZ9${7dr4Y29Oe~}ujJlkvGA)lrw4<~gApX{5M9S=3p+lgW#G1)Wl=19q zAq+~jS+Q7G^nmD6F$nCXNbgL_7minLy0mnKtT;c$97y@-d<|(4zYQ+lNgu( zrQ5?w)M_o%_k!|mzPO@z_T>npv6yx8v|(q~xK?6KXP70NXH zNoXNSMt4yEOY0mm!Q)fEN#2@?$K?IEU~9I8%W{vkuPl>G;fB$S`y9f}h_94$i=F_E zFE3NC^~lt!x_&=xXaG{CjxTQB;(*%B=w?Pnh+J-3oLA5m;O zjKd}}K!M_3!f(@v?36~v(;q~m2;-k7e2rsrPkUNX&4T&!SaeZxv>wl)so1E8FUwXF zi#ZM?8sTL@A&X$CHGyIfR>ebK4fK-V@ zR(cgnplRn0PmIW&{?qo>plW!hBXSH4iTQe}*x}Jam9+^dbripsC~S{>D#p!l`bT00 zwFsqu^qNu(R>2`*T#(-lx#X0Pi!`zyai9r<|HV2Cw=~3HBqM$F_~&FkNyRRTZ-uUI z+T9d|lWNXoBjLC;{^A5(?VYN=7HtZjV}W*Wh+O6J3uDY0T+ZP{0WZ6kdMp|rW64Zrw8fEW85`~TAnGP5^zNON2VK>Rlk zfO4>Kr6C0ZSb((kPKZ4@FCv8Kc2LN|w3*>>W=7dkHdOUAn{*SqEJ=T8rUh|C6A-gZ zNBCWCGumHp5h80yP`mT887M4VLW$wD5s~Ot6HW**V~dFUxS~=k&t!NRqR45YXoAO{ zSc!0lSzH|0kH6;tfnHV{6}kFIxr7Xj&-K%C@_Ml&GvGb}Vjt?<q?CcbgQ*oe%>GhsW5*SHH&NlB!^}y4 zk}{@{)F}#LHrhO|(Fhln_A=uvVhZTra_HFqqkRIpsT_;>2sT>@XD6|H3P)_a$avS& zOni?5KEQ(sXD5c2Au5Ps-a9dU)2vRlPLUA_!IED_%L)D{P-Gxc_;t@{dZ()vgNXKk zZ&C$e`5Af-oTz-=lHkvJP`CxWLV=@)hOOv5Nz3!S|31cHJawa-EN`@bGk_nI1@Tn* z&@?w#1;AW0G58@e$&Uq8SO%ZlxWq%V?1|8C0tW#FYxuI;ulu~6ZBjJN3RPf)R0;~X zl9Pg3?QlFpwLyL+;D8M`9*bW}o1-i$7Ha;RoFU(Nkkv;!KKkjFE{>;gbA^Ck$$ml? zf|Ql4>q%EWUz~~8DLuoXD)>uVa9J~jtCo?-0x=wnd=8O%Ap?E-YzyD^o)vl2}!jFDoa01>~!`)i_qv6rxL=P+QNN z>Sg!wBLFFAo7MHarE*UHq;{->1mkeV#j#cplqQy;a?HojbFV@zIc5w+NOs)1E2>glN%)*bEpGXsA-EL1p@>1QPQU3E%b5% zTgZpq1o1xt;nm|RI{WbrvXtw1ETscll!(N9`IF4@N3}3tgD1#m%LG1Ug`Bbg3Del0oe8+uofz<(sef5t4*FQesDNjnGzaCLKXo8 z(B0d*4Z@p*afl65gHYUi?a9o=KZuGu93urstTtN}%D!jcLC_p^4v z@HR;c+h%GON{B9>R%9%0BM|IC=LlL}4YeS+n{RZGtX94qgXGmnZ9h?Ufq?}-^g;6d@(=a*ek%_1n+Iqn z%pg2FyW@s2FH*DJO!yLiHH>yBjxvVFhJA!j;zJYZWFTA!xBSakPh?1}BGndM77m(g z5m~|VpnbnVh-R!M7z$g@okw^IgJ-TuF{LG$Hp8hsY9HlARhHH9nqvip*`Ya#K7HN- zLtJAi?Nx7~0sZGj0Cky2Q1K+Ct2PkZ8EM)ai;j9sw_i6X;rVf_VWxFqST4&CLQ@oB zjp7H%NDL3gk9kTCW)-L6;Wjnz6ZB?N7%3yLtiWO!_6G4=(uPC{Ef4UCL5rygtyN7k zfH>D!H&&p`##w1*drz;AtcJ$9XN-|7tjjpBdyEz0vJS)U&}e4I_5OeaK|IiImWydU zySG3>YVm>Vdu!?22K@T_zxwoX)OUN@<-0xIV+DNp8bx8Z|Kh`ooi!Rizxk7-5U%pw zq`r7O|9lvHPpa+DZ+|{L&-=3fYWqsG*EJi)Q#90+Sjf8Iq3rVeg&N&jw~pY8ftu&i z3$qU^EfIy?m6St}UY^1W9HpRK1ivNQkQ=!QP#EiKZVc@=tA+eJ+ciVBDmLXsGIqzr zPU&qych}v>&;o6cP-HFP&nF+N(l_jv#K9S;j~rc@iDu+aQR8iqA|3O~5H;S~Bt<^z zktJrjvEv*(y@`H>5$(#^KTfdHRCFC~s~bYe&B<`%pJZVm8u-x!?3Fj!^3OVq!2CYZ z)ByZD#MyJn!9|Q$-(I02)GM{J_{kpB&piu>82x^#Z*{lDCi~zcH*Zvia%o;*VmyZ} z^UW{3f7W$OMyDY^<_CTN>laT4f{S3% z(ya+X&0X?o(hs=-1-DY7XZQ(#Z&*COHcA||1n+0H$k6beHg9D zOYa4E=TAob@7?=dSo&X%o}Ha5NeGMzWI4?!0|W(_PbLZVG$*c08AiEXlp3hFZm;&q zcX+k2o=jJUCh2$|W`5G`#p7Tr-4dLLkmNBr?n^}Fw8y$?+D;S*UAKU2!bM3oejn+Z zL4Q%9v${<74XvSRD_m3oo_ajRIBeYc-f;9}F!4MsZ}dXn^3USt8H;LZ?1Mv+|C;Hc z7mx>9k}?`NN?<}(AfoKUlu$ucN)_N*cHR6@@awdn$f~IgUVjK-{Aspf5r7k@0EkmN zC23U)X5iVa>gf2Xpodq}*>HW3WkX=UQA1T}H$_iU^j*d+O64PE8B62}-Vtf(nYw9T?kG3hqeoBbcqlpFdTpER<2Mgv%Zpzv9MVU<=Q_eKN`#=bC_+T9ih^`& z`Flcw^3o=3^^bjYi`c~k;v_9QD}Q)JqWrIvCB$~1?r-ggl|wH+&LhoUMBJ3{C59f2 zCpn##Z&m1qqyb}{QVxb$^Uk*ZFn_T$;Cp#;)%Pw}k_=KZ`b!S;Qm#FRzmv6>H1gbDAxz0c^O_x9+fKhwl$`k(1bf1_4w-rLUA z3-DWw{mFmn27SdCiB+rNx8o9nA1SbWb_I0)TlO&iR8j9EApJ3ABs~%*q4P_LaiTbO z3U6hecyF)hV-+2w6qOa?^IY!k?C5yqM`jwI9}KAgu|%&>w)P%0P=pn9{E!!x+b#Lt zpX&`IJVdeb|11*OnbHDS0cZdwrnEnUAk@G~`$Klr?Nb^sR}u`g!LT7nZP)oCdPUSm z%WQjYJxXRglz1wk!o~637v-WSM^?NkS9ZOOF5a$NAIifcuKsZb4uNZX`&KS_RORe@ zQx8ei08e>jA}Z=g-u3GwfkitLz2&tR%*9hVahU9#OAI}Z>YKlHUwQOXUDk6q2{T5wje zwy|P~Q-G9oVzd;g+T)X+SEOc%xlw@eKtkfd?~07{ell@Usy4R#T@`9!D4*?4qL~vm zsEIpJWfK$o=taHrO#A6WTIw0hkaXbhNrc)KE1$(UdzrgI0(g6tz#`Z_hv@2y2Y&8s z3>HIrCHbS_eFAmWpQ5i&oWYU!QxDfoqTfcLU}jRxUfmBTF&FV*;b>(|N>X0{-+eLD zI~Jx3887ApP3ct4vQbT@O3}S<6)63k=iu)oVIpEuOmT1xkViYk!BcUVAyXjp;L@MZ z6gI~^C#FX69s@dJq<9obbM>R}y*1^Rj#}Wp<3T1N??p$yr5QC;~DnY zmgyxjVYUKD;MN)&1xdh?oZ1RE3p(*F(KSOo4xs~jI$9zd&EZhmdI%6u9+=oTsmRw6 zv}H#spEX)B+l%aWAM%`WB4+b_htCh>nELtePazKmdm8Fnk3-?vjnVQvE%k@)2jcvdXbvdoQ-H{7jAKBNXVk3Uc}W_CY5KH{@Re-QU4 zl|TYy#1Jb|sS5$u85K6=Vb6-$t$H+6bdjM$=lKK#0a0Vw#R&g5lIzJ@3VxPBTz1^4 z#i)YBX)qb+cJRDmk=gsJjZcQb%P0T-nB(68f|xj^XC6y<2Jv_yOC-b1M_1W@2UCfPi@`*J#$FL}0oVCs$*U)_4ZnbPH#q zH5Fi4MF=ZE7BmDQMPH?wd)y{JHRt?J%F278Q=av;j5>-#Fvo6MwHjHGV)$nPPKdHHen(Orl7a|uqLf;D!J3W zT*tN%FT*+)TEn7I4+dcKOVZg;iZ(|&JA)INkWqK3>Ht?zjjSiJ1Ao(IGy)9jl`Wc) zL1Gp;)bdw%B7Tf7HabvZdy0W!ZC+g z0ihsc)3%td-5sZ5bv?3`@FIR%wbNYFoJPySY>A3~9Q_rZX4~H~ z%$`;XP7?Ev@{klBS_29)s>zsMD&dEDvfnj|(+-{&RA5y%6LGaMmW-;Rx5&15%QjPs zn_WsOnYK)`@$=1z4x>xAOB8`tq108`0t5W!p7Voc&YN$*oAaMH-{rTJ)q}x$5I3aj<{f_O~E%mvraG4ZZVzHW2xusflaV;w6Km_CUB{z|v7<|;02rraqR(a9jL60C0{=Z848LRaKY(*>$<31zQ)0_~zs);`OV<#CTg#%2uvB7fG}&Pe z1cOc+bjm=#<&4ZUcn<|5tS;agB6-T5HoCfnNU7cUh*b@42i`Gu4xXrPJiGG7Ig@&4 z2Q9uzZq@CNhAh_oYvn?73-cUy9NzZfOszQ4Sy*LVfx$z;2^c%bA_H6Zp4QQ$!CtCk zu+SzV$3P|`Bhcu8OEF2$s79h|{-EFDj$!!o5QtmuuC-TtxXj^lP#OXCI_}YUUj?u~ zzo9|<20?ZCK0)G0VMwW;9_uuez@M?$^gi=w0h>Am_sIjBMg1f9me?Pl6OT9h|M!cG z{eMR4Z}uhg|JawnV+|dfLvd99*;>R$G5X5!EmjO|=xtkF%FSZeYvnasA(|Mw0Ag@0 z`8D7!3rokw{RovGm0xCp>j}@xZM0(@oa5c(^5*jLQ{tf@30)bKde$$aP*jZoRn%c7 z1a+-DDqVH6B=uvw5!cRe%jiLmlX2AL-{mi#ZwQS{Pl08?x#V)M!`*-FbF5$yUDW?z zBB4Y)|9CxJqS?c>ePimrMfI@ULVluP;<6Ehg@9rG_t9Fjr?%Ob=e?)IbHRY-KpiJs z(eIdPc-jX&!{R|a7Q^^q0;xtg3OHo;UL1=iGSWPZZP#d)uMeN?ygkIX1)3CPyFbr7 zp5#9<$pBEC#OlzN?4bc`+_<1Pr5J2j)WdSpHRtB7LYo7J4HTC~l<_+F)-gKme44%- z>uJC^8aF7XLt25>khQsENrH`d_yVCCh~t53K5&q3hJ?d$V-@DvM8 zn{fDO%=|tmjhh;*0u34QobqI^=<(ooiog0{bOe~19G3cfW4OgPUfu4OL&g305}Ycf ziPPFu^lsH8Z*{{n5%}td{ozEbH|86cs2Gv-vDMkg1X1&f>lQ_8rcfc~y@EJW7UV%g zZE4X|mtRk3ridOsk19TXPx?xfwTTA4|Jw%UDkGvKZ9;0xE8{}E9;6O-QpQv(ndXJM zr5+Fi)Kqsq?&#zZF{?bOg% zOovF3|D;EgV_|~2gdP-FLXtZ-?dydq0)VZ}F(3bMbAJ4R3>rIzU1m84n>mqtE*!2} zM~@kKaK!7otfJQ&%(gDfKiBbI`pzmD$bt!jQwIo`&m+x3d<8m}S_n2$Y3V&K%@L(BnA0 z%AIF*75_+HWX$p9GLDZ|1U9lV_58$zx@OD%wf(Wda9VRW8OkaD=t9ChSzY?4r>5C) z9g1#7OpDAh*J8f=%HWqX=TF<269a4=j~8g(Xa)?jKF%sgIawyS+)>D7M?6nH%=}vL zu3@H(b}KNTgacpQ>+!vJFJXpn#UzZ4NQ=m$oGqa&lv5LMB^lWX|FGX(LcD+xFUMt~ zN2&}NFfwxp{92IY3nUOy@YTRX;^R@@9=67;5|wp8zRZeiED@(W_%bZf_q6I1i1;dc zp<2i`U{nqHJlXn1#E$GeJ^h95O+|I8$VS`{SBe!OSDFyIwYW|I{S~(W(!CM2f8)zM zJ1n*e$^rTlH;Pp`u-j7xkwV4o5ryYp2t+N{579uvnN0%~ItmGU4GkbD=Hm+V|9Ss# zFn`}kPysC8l<)tfINO>s4u{_v_tWo6@G!k~D8hdk_c_y5u}Co`*Bt#!eAJAVkO@`7 zajBPGkJq_L8IJYB(p=euC62*3mWP<=B)`BUf?9iajnzw33TP^MuZDFpY7t(thp ztxVgN@!KdjyN*J31kA;M&SETGo~3ziY69maPqV!jIrgbQQTisTM-Km+*5X2#HKmmi z1w~QJfk^>&0lj_0FK;gp#|LMf?+LR_<*XP#|zxwj=PRL=+R>7gN=>?$Y; zY3Sa!7WUbW^FFGP<3b)w9z~enUl$)s-BeNDmH$MX#&CL#PJL_Rb^sa?U@*MR=;1$z zDM4jsgf~%vNF3q9%8C98Rvp}dq7i)Ny;hs<7{BT+UXIK!`JR^COGlb^_8nQ<8A}g; z+kdp}Xo(WWF^RVSux3=wc+`x`aRt#>KQ5+9Gc|hlpEz7+n~adepcDs3Ld2VH!8TE60HBAURl|JPIVZjL`5(;~vu{&S~YI1Ll9T}?GJ&$d+V_ERgS-7Jr z294v)FlTeTr0r3eQ;Ab01sETDpg#SnXZ61Py)71igVf_q%Ok*_(E!7hgduj#*joJ4 z3M~eQm|0Z9pm{yjD;ixK2~FfG7^dmm>^BHYCwR1JILJz*$&e~kjGNQ$HPqK!5}tw- zd4g&Iknkg$!0k>@tRZ34$zsR(!kE?bU9kKP74>NxtmcNprtiU|j3&M{KpUsXZfaFc zP*02A)A9L`LPen2jE9p~83vx^Kza50qk>h;Z6ow|@w%x6H4(b$?TrT#Z2%Mj`<3tT zR?7ROQ#d@5p)k<_)~&$@e_$6efH+qflX5H;7_gnyQA57Tq%klIVrs=c)NhfNPoH}M zV&SQ`1!!LoYu8aTL^I6X?r(odvdsNWEgBpR z@vo|ky3N-a0;U{8DEm|bjckZp$_p31K|)weF%=20uJDzB%w;yz)`0y7e@c(>q$|Y% zNCY%LKZZ-)%N=i>e^g>@QKOSV>OYVHOMd~tuG?H@A?vG@9R!K5OHq#4+antDoIk9? z$)HsKa-6(SQ|hDUK?yPZ<03kSG;C1*iK`?$;(XC(@2!hJDu?Cx$GcH*WMXwPlA@5m zCa^Ca)+~J%oV*NX(o_*6H9|=5%2p8r$iu6G(aBOnugJWdj_#n2VR4j3&5%8%{V0Op z1x2>iiM6O7(V(PJ+Rnr#30|o9aN^89xR2O27}Kl!3xo<0s`Ns)LJ!7NZ`4|d@C7pf zVp(7%=1cD1mAZhII&PHv@~govbAJb%gJrQU21FeDz_s^on&BqUx>V17T@Pmph<9P_ z1EKn+xn{GA)xMSa%3CBm;d!Q~Le9JC9rf{XlK<~|4L+qyT4*RNGIHZV5a(+_HQHOZz*QRwGRouDOm4cz#KfjAZjADq8P5T0|kMtbr=JIRqz&p29~xnq^Qrv?D-?wX{bGDua_56`B+3>(tLv_ z(*>}*5Tjjpc|}Q<&@yR@DT+`r4=%FP0cSD0a^2-yU3AJwHxOa_T2z%1i zEhXd9Ki~{!uvDC%XWplmcgynd3jgm18(W%V0e~tkZyf-e_V)O{{Qq>M-go~0!PqG**=UK=0CirBDqKQ}BKcqb|0ESwinDOq_~hd3Gmi9fa-n&iF2(fs zY|%uiWoFVWQF$bbxJ-5GlD1BH%nhy_^?|6uMi>goQv+9O$1_cM#@~(X6mb?P8mp-j zu&a*jvT@mjDmtLtI&S#Bv{7vX7hm;_v>hpxSdAb~vVE?~^M7zf1UR*<9d?=9rALU2V{0D8Dv@R0rM%7;& zOj2`u5cv4^W;)lYYP$lHlyNR@hpHQ8^oi$xMMvG}DGXn5HLA~AR zW~XJ`*ld1FH-ok#n@1e=JpPjVrI7^DYtQgwKNka)Zj$w z$#dP2_Z#ReIBcXj(TO*>Pt@+w+D_c=)5QD3&a-K2>x3vsxPfi9Ig%t=m1(w@y;8>N zEZqbNVPGxQ7Qeh9ROW<@ZkR9FO1q`yWXXAa8b)aQ#WXnbG&CVtn~wvQ!g_myGr#5H z)KV48oXbJUK_?5ntQu~x*@qlkxcNno!16K|M;z#NG4~IGdn7isaL~QUv1+4AV|7)d zwDg=TWUKu0^!)LAZcSk0gUR4fFHzm~^L>9_UQVJg7_G_O4ic=tV0u1z-q!2rkuSxu zwcjCr*5SCBp2s)cy5jHm!q1)R905NcKRMYIfQtjL-71uE^7#PYPfj27yffryb9ags zqks>kosYH87{D*Llc-f-cCEaC@%Y>JHl#w@#jQb3Zl1uFzwg({$3A}u`)%pNEwJZv z|5?TRJi14lKAm}U%JTsY+Mrh=(qeau!S^O<^1S8i;`ygmE{4@hF{l9KB=b@{jNe^3 zx2m=UMR}2EWaZx`rUpsIz3#^@=_cFrQZIb&TcM`dT%Zo> zX1{o4>U$t4eg-d@47ej^z?t$d!h3y0#dzql03=l9~~oUHf+pp?2}f zxGah&hqiD8_Z{*WamE8gC)`^CndVV6uh&?8t(48px_kw$Ia?B93|}O=omQBFdC0ji zs9R6Exv?eNxDR|~6#jwOFp#-|gT_tNobRd5lQl^A$7_e1#*LXEb(DepGH$NtYby#Ea?Kk6*QjyFh(x{924J zw~#t&gDOPwOJFTxPj9G3_~>5Pk<3{4Nt!PpBL==-Uea;f(qbZOk*njegj{p$~hzpVvgRv zQ%QE!iRaG1JfO!!*y*X5@M=C9^C5C~$`nmO+h+N{!^74!>d5LW4yAkIq@VhI3SgpE z0Z@I@@hBR9i$w##BT?{4Cw~z`Gp7c`gJDJm9WlS+)61@#mUIb*SDhdkQSvUYb}-`T zE#JIF>0emKnw3q;_I{`Rd#2HTR*Tt7zXbj$`E??Y7{{`N;n+k-UFYyqqDhVbi8O%F z2m@C$kB_Ia*WR{fWswU}a0=ZD&ln_ekFXHA=wk9;w!W2xOv)-YH1U*>6cbh|^lY*d zp|V!o%zYr@KKIxP_xpLOj7s}(OVobLqITzU=R;CsV?RapLKQHBUf_a7EO`y<@hNXN z)m-KDX)UNJq&Z6u0W~Oj<~#3WKK$I^z;2#vL`yW{e6}|&N(qu42O;AzFzM^oq%+`6 z{GI&=I}SSBj2J^gho&TQFA!`(aeLrrFS(mS(kM*I{xLIRM1UVfz**8al>QgM)HEi4 z8oaif4^J&smO!}8>)JKIHYw}qE-?vvc`71A0858e;LjR zs1SEfY!@wfGd)QU;h6olMkWu1_IP2ZmvpVDJ+zf%`2#=2(o8L0qJ0m5$ck}fe|=Kn zXHRcYq)iMz6rhd~kSjofKT9kCgor0emWN0k142j?Imte~tT~?DcCv$Ejs=9ghcVbXk z%vla^#LHBH6sp#<$9~M6p!AfrXlVtIpr|0<=ehsHy-dt({~O2t6QO_si@vQ(?;3>1 zjIyjvoj8_)5yWIRJe~9AB-J^RO4*?1-n^8si1;nO;|>aH8iRebJ8K&z@~q2GHMIiR zH(NYgZ-1`BvKk*MfARd3NmiYio{xD2xCk!WJQb9O67Zejj?&mR+UhadTgCA1NI+V`&TWapwK?N#^>1HEqf|3wMzk0y_vw~e4CW`YBqipu?%YvGBjv|-?F~5RBAFQHdIjfhb3bSWX2E_q&q$ z>{b=b)LNq!!w!7=57JS4Cnl@TT3f0Jvne5ds4*G8ZGvk6kx;Bv*XBWXk6%tl$u=1{ z(HATdY9R)1(RqD{rPCS6Xpzy!oe&+Ktx#}CAp}7U4}PL+qx$mw8ALM%6?Q@gk&cs= zY0QRDPbBO26n5|$D~Lz0tK`fZ4y!SVRyeG*`iOt~L;81t7l01wjI8L}$Z0lCQi8gm zZAf`CX(@LPRMAEmKeeLcCH9S2$)BUrNQau^;#^K`?*kgFLiskD{fZk9_Q-hy%Wtc! zijN)BO*%ssb*RnoL*GZKXX2cpS_d2 zBktk)>2%<~;?NHQaWI^nq!xzFZ5QIUaZM+O^K`)oR2gx2{Qpt)j?tNQ(YkF?v2EM7 zZQHiZO684h+h)bKt%_~iKKb_9_uh8@&GmP+HQSnFjy|4#@8-q+@SW@`$^#e@G2>=U=YSV@c!yVkylhUm_JJA;SS70@3dB#G2`neoBUVN~0O%Z<+@X z=(>+~E>iVM1iG5Y4EG;@I4rS5ZYJGD*oxrA#_Pm};uhO-zgX`N-?yt!gYBMDwQjS* zQlTa!%w)rt!8eJU{RvKR?_&7=07IX~=gn?gHwhUP&en}1I^)$0LZW7E0TH&uNq_1o zi=BGW^Oi;CWlHq-xun;XvG0QmizO7`5Bk2>C(^;8OyCSC{%@$RPOf(hL#Q39|0%9O zI5=4TgBV#rSQ(lA%Ut+h=O-fA|2IG(jxNqk2@UFQ#3T6j%=d4D%6y)uOE@7~P6pNM z<;cxuue@lfh@w2aP3116r-{@UJ^+~wp`b*Y3{t*n2q$^aRLIh}Qb;plj|Y)19Nt_( zTN-kysK9AHQCP-CJ)v$$P2p%CRKVJjpdUyAnxfR{7oZ3!HtkXDPQJx<}NuTkW1k6NE9$H=Q@Y zOKa^p*E&e2Kggmh9J(wBlzad*5g<^m;twC%T(ip^$|3`$N}p$%MOC&-+@cx|LKUDq zHlPbs0cd)P3&m&(?%Gm0%!d=#U=N0eECa^y@gx$_k$`OqvcvOM!?x#|e&Y<}-T#Zx zR{?I<3KpO~qNOOJ1A$(O&rP^$m-UnXb`wdm)!dm> zi0VSHF~}{;DuAFLJ_(2x&%%=i39MF$8`m8u?&JpM7a_WmBd9)Y9+a~#u~xirT!8b+ zCSc>@sdfR+xh=0`yX5mntP)a1q-r=3)XVSl_Hz4qwOHvkU9-Bw<}`su{w=_Q%qmd= zVoiTDkYyQPWd;MmOh{uKwlM)lXA;=)Xe$}aWxtz4ft2{WGA=&fHy+zHEUyYig~?a!EGx)zw&hv~YWh31hs=9(;}pMH`{dYpD6dpDPEh z+Bsoe+dd7%Wdp|68Yqa1YgvpD!dW97Rqr?YmN=X}EKCL2^C~0vFO_b{$;lf{0}rEk3?-|Br~PVh0y*< zN$9Y7nk?YSpfL4sQ0jbfvc*eX6^BncG5kgAS+$aRm>2zLUBaI(7tuAe24FukLFr4C zscA4$-O(cGNCgYj4|JlT*BHKvu%!KSzsNS?LyhSles1DXY|?%a_ zL%>>zRAvSF54z;iqW6=B-(@64Ev;MVFzharDwKp2CVOXRHD&G7c#{Yfo5lj*CK*}Q zWF)3*nG~+0G_7bSL= zi3jKD3U*ZNu*+=) zbzO^$K$ylKX|3$^g6`ZLzf54ULuJLbMp~xYpz`}n&i#@=8N%-4S{%&P*BBbQT6E3CleVK6)i)nPtT{U%74t0sc+2n%&Y3r`9Ys z(g_tNRCJQ&E#ckgbIiT2HjD@uTnZS+9b~k>gRn3RgSNQ4ua#obod`KggFyx|Rpc5f zOd{8?944?RkD9F^D7MjxZCHhyC}N?h#_F+^1qfgDXeojp?c>F6)|j9GHW*a~5PX|( zRe~#JCMxwgdGL+N>uC08n1372oIE?j|RJOy}zOhYZEVu$^ z1q<3j)UujwT57vIxgH~c*pe!jy-OqOxE1K8i1mC^wUWF|L0e|SE_!(e2Kj!4fGuFaIqHWlhOd4NhHq9N z%MsJfy|UiRs{?|-_dCZ6Q_=F;Ro}dV0F*gIjqit35fW-_pF#GTXS)3i2UTX{Kui@B z(()#XiwFkIiTjCF>4v-eI4R8nb(c*m%S`0ov?_I@x*CN+0ruEY(b_4Wl*uQ?#n=Nn zjo2_*07LJt`lArl%(xnVwkqGo<_9zz9&h?H{>6s2F>rQ;`k)wo5mr54ZtQ-8fRFSQ z?f<4 zaAoH7Ez(?xMB>_Gv9Dm|ZroDcxw-W3-Q}Tb1{z(!1B^jTI^HY5=PK6edST@j$t%cM$n^M~Q84-hhWfk;@Jb6DEy7VG5=K?9( zkKA(hUMpp0*@FY0uQ-CYm@GkybC$CkH_QxjA$#E0yPoMpVzrbyi2r|b%Py`LYeMJo z|Kyg8xJq@`NCzz$=UHjMP;-Jkf}FIab&_0Aopb!)4*0A8a%oV$6l5LIXeA zjVX7L(peKNvMgGjJV}ToyStr!PuGZD@U2=V1tEk89#s(F6`+rbC`BO=K=wG^-PzqL zNP|;>dXSgpE1Pe((OEXvDh990@4x}B!xY8&_M%==Dc8LgSQU`q2aH>Sv(?m@K?;)%sCy#A@By z?HLYd$PC@sqw?n(`uNy#+M_Yi9=Rl7;Bhn%u={!acO5stzTp_|cLQWJl@sN_r65vI z{l7srUZVaf-+)X$pwxF@deBK&UC3V>UueB#4#4o@ppKfCpsfw|1Q_Y7AdcX{*QHx2 zw%n=-1_XpHJU^oHVf06X4{0ZK z;OR=zs=tMM!x+z;)sgRdMSmNks|K8+BKql@`5mF#K>`7#G&pZO?fVtRw0$mbWY)4Y9{$lSV$oR2y$xQBry9=n8JUq*`Epn0e}ij63Kp3 zBN%5s$399d2_fd+OOFfjLpg?KU=3K6c8{AFX{J8wChW;b?2D8&?uoRP9RjGBa+~60 z{n4sV&QOuD}$opk{nfN)-R|L;OZpG;=wUEz$unRMv20c zDj|CHrBU2ZGT|=%=|NOKg9JEjC7y`an|uMa|ZMM77K^b0+%t z@3>;n_#iD{3-=qP6SdM*%V8mJyYB7SM{bOap3QAQ)CY5qXOox(ME8n^z#kccG!Y~2 z*&(VgXqz@ET8GOD0u*w+>}meQ=xV)1*@cUVhc$>=sNdJcJ}~U~N19F(x#VW-3YjWF zBox?DPigiWq<`yPIsp-N-F{Va52Y&Lz?mBrZ);*t#@JQM*`d?%=>V zZ(N~j*YsRhrrnxQb5UnRODS`C<15wVS8I_yM^DJ>OuSMXsFJ))M#7E?1By$o(pMY-GWL&rv0%;+E)U=;`~&PnCT-{Va!@LcDrxzYiRSb zBNyTM&~3HH(^v1Q7C!fCBJfe;r^VD8`G55xyJNdYUn0)Y@!Qu=3*&~IQ-*|m?|m3uSJ^ho)pUy^;R|5JV$Ee4P2@US zAc@3Gk@7n1wF@Z=n6ds)wt;7sCLmLC6@hZJ1rXpMFU#24kf4IR zrry{{ixG{$nJJigT{oA5zewD)P_17xR^EL`WBi5&w)#Sqi4z6ZAShask(SQgL&9kG zkP@^{_U_Y)S_dsY=6x#@R_y;sMu+HvNncH@&lJ^KFonD!t>T+_(Ty{F5A z7|W($?kfiL6#dpNy+7Dar1kQlj3HvW+)(LyTw$W>ACO67!@}k;bkN$v>rflZq3m#V zx8p;XgKsrKd~x|MX>vzs~ZiJO2i-trXSNYvD)rC8Bym(eCKJu5V&% zJC#qTH;3@M)Xtsn=em6X$6h^7{qKp0?LX)d_1AyFn#r_)#H{~G)yx~m7&h~M6h=-~ zg@5u^P7XwPQl)o-#~c*wkDv;Y@x z1`B5%B~6^mkKo+R3yw)Lk1HYOPMRaQ?QRg6Tb&8|yH9UK6;3dzvEWXzko);8p_1+^ z;bv=Vv;}zS+V;Tu(GZ+gZ5s-5#ck$>ZeK|PIrdm+iDJc}{wa75lK!PTL1~1neEr#% z71_-NHw~ZDwe8XbB)fq%+ITk}+Abu?tLEfZH{=Q4&41e&Du_N z#{}+sunn(sI1`HG7u}{fK?e5a^k}KFdJ|dRtw=9QXCbmi<_?1Q=v}^pZvF? zjeO2*amRiv)39PtuIw@`CH*wi!F}DdkPY}HPg%6mUO0X(Mxk(}jC*RC-;iwP-#CEo zd!mrpR7eXV9Z#SPoK!|&1leW^NxtBz{oS4g!Eos7b#{;9th0jCQQ5(1@3^hf(x&SO z!J1W`S@2|Rx2D3#_uzHgf@1bziO<7}E$}`w;Z=lJ8br%n(``0#5S6zn85+gMCIZ-8 z$y}}0pLJgMIlce#lAwwPI3^KfY)zxQ<;vfW-&HV61DRYL3Z_QSIQbuZT(ro033ysf zqSw%0Ecqa~AlrTug!r(>u zHULDStPgvv*XVjMDSF87-#dHDegR@mKb|{poH~g%H;~cIVT0Gz2kBsaMsawy=__S2 zje$WiTpnwc==4}%v!*{_w(JSXlS&@Foidp}>U@W6I^Y~jQsrjT@L6lnF>?jscR6&C z)5i4@+&rvg7ywM?>#Vi{i{v*km%qkbpEwitUwjygsdkU#T6~r6U?GvhfRP)j*`5h0 zcPmA%5j?hmsLQJJ{&$;l{_j{LBgcPZjQ}@QIftyDShed~!L#7%@xkpC>qU`_5@iHF z(#jt+kTMM{e1(QE`e}Q4IE0LfYcKm7Ys> zXosgLov0*+o-IriM0jW`iW7IU0g2WTLgPR_%Ng~*D~wHtH3Z51jkwM~8VB?jB?Vy}{5|&y|9b zWj=etaV{FQFxHiFHr7IdOwEl@P6x`jc*u}liaTdlQtYTvK0(07uHbNmD(>@($nFI+lU$hGdaBi2AtH+*5C$>L0uXr`tb&dN z8SLZmG%_H(nQ!q%1%5;VMl6u1v4>A>@&}-$)!(d;QqjIw(|xM0*>sUigkdN)?>{jR z*KJl492iz@i8H=g8Ps4a+jrITyg2hM!=FA>^au-9=W^|IL zz4_&VD*_~KebfK_>{$OJtk`~<{I^iQr~uWPo7Pzzh+WSrCs2(U2LC^k1<`*diy`+P zlSR(l6*!OnGmf@FHShME<&ou=DU)4sGJiS7;|rddGLi}%sSG0w+;D)75&o?e>J>6F z&@C1W{hkc5*m`TPaOB#WnV3avFvddg>Co^RTSVlLF*<>h<;4zwQ`JzpR8tYFkyJN? zg*7s1Ra~-Bc0p4!-DTLF;h$@`aT9#Jei#tieTbSty;2yLJUZt{*U<7!DlCK_q9=YR z4ca_9r&$%PX8=r*%h+F%m4WfU*hXZOq^UPLPBqVeQCyWE2>wiJz7Ar6PnlRTQEg~* zUgtGc^Z03Om|HRdXk?Ke`Z!9EKD0*osv=LK7Tci)^z%8V$kpjFULx??(*lmGBB@)4 z+FP;XR`FZhR63pm|21nXaMNm^5jEtQNS8 z_4lE5nxv!4iu-u|J%VF4sM-y5jd%yDo7VsxK)|9a09~dtsbhB>*0m)p5-blz2j%<) z&a7DaZ$HMd^==$&w&p@+SS*;>k-`~dc!x%)gibzlwg9`-pPY7&^`(+rCL{~ixGsSI zm@E(so>)8(K(Iyvh6h!Er>m#0f1#iH4A~f-<*Vb~^YMm5T%;yy%v6f)UDM<9^|8CR zSb2Y9wTSdoqDx||j~F#t3rikdjGXoD!HTmOqS<_erj^NBBqio(hsDgJ8n{O9mUf_8 zsgq2*X$Z%$jI_ZJ@sp4jz5@dqRcs3$BG_l%8*#2lLmKW|h1e>57ZLUkD zg#=j)Ah&jeuR^h%#KlQdu!e=xVcI+klcEe3-v%4V5VNT@*4i8gQPn~IV;p2o_C*g; zV_$PUacH)xXT|C&%Wkud7GPi;#`QsVo7%E(fcdZJ{1gWq4GR-AMv~R5B@i9A?zhYD z`_tpkKVAmz4*CYkn;oCa?{}9E9)RzrkQo~RADFP5P*CpbFv_>t+qYqKc< z<*SNLvj4pr{q*>gdNyUw+-||iQDkBqA5W}Ra;`5e? z`VbC@%hsK3QNOdh(H4S6C0xe*Noa4-CH;G*;`0>EnVWL5NoLA@?PGW&i_79W#Wr`^ zw=@PS$QZ~D61hUhxW>!wD&nN@buPk$XNiDgIKD-^< z2bP>)(^)j&OkVEmupN)>JEYo46~sv{Ck`r!1=P`|9|AmV*(#qK{~k11yoUtql}CWG zxxJY>|KNW@pEFi+Zc}WSia$%tczQ5!AE+!D55c)u&B|b*ZSBY$PiQZUA z^AhhHQ$cgBB}?^ZQsPGNjT>XXk=S`-+Yc^o)X-fMV?~g{jxzLeZ#6>)J_61-$Z*fxl z_jioSzk2OQ{#g{(mcuRC^v!^p?V85K4)kN3NFX4G>l)5JqOER4{l@ z5?oGJR%ixUGkXhHOBO=L|7S_a#Kg}2BOF_$1bCUa7G0*e+q$hd4V|ns+wqi_nXHSC zG~2DKkI0X(bK?QLwq4AptL~?2(_fWr_;8+^oGyPat5lALp(a^@$=OEx88@@bH%7U_ z>H=}W*pOIAn2F$EX%p$tp!Aj|pv6SVt^iw}m>SuT7@vS1{3-*H10ohQ0YX9Xi%(2M z0mQ%(+S(jn85)^if##{IDVM%IMIRYt^ymVKUws?B@}626nS&61`#1t?udZo<*k$n( zeT_gQ`wRLdav>U88-amBPS99NkB5U$4jrlj?+N1M1?Hm(_N|VN_hS;87{N9=fhq&b z+Tj7Iegn7>SV?3%_8J z-pRh%;nM~P`DP#(91|Lg#2)0Af0=7v*>Tx{m!+YPrI#qOeM@s=b1QxQ(@-~9YC@tH z1YX?fINYCT>vMYxuz%S;A6V)6?Uh*9*;n z-=7xn=<+dwG%DPj;w3X_!}7UxQ?#}_C*RnpQaCC)KqLbK59HJC-$pLL+#j2S<2~jf zXDm=6C^|Sa9)3`>s4@D}OQ$TP0KYrHF!Sa&-q<$;>US>U2SE7xJ7xoLeA1)4_kH>2 z%fph%f`*1mG87Ln7oGFRUnW*WxF= zdy>E0Fwf*AbiQ9{vLDW}z;M^p7M_u<@$F)6+gl9>B`+{J815!F$tt?4*oPVG29EgW4inB<*@e&H~7M!wKO}{*AJKXsl^Jizg_%& zf6wqUBV#CP7iA~+m4RXgpb)`HoSA!57&0(7v499w5dZGJ%q9B{{dkT8@wXQ=XnM z%O9$D`x4x5kuDk)_}Yv^sJnC3S5D&5=>kiEc~-J z|BLmJ&lEfmnPI!I!$eo}^t9mj3Mk0WWFspMotUNO@R0cf#jRT1cI8E7ZMFd9Dx z-}21yi4U6oR<9`wfY1x%v1o)9c8~lr7ko8WnN3uQ6YSs8g^LQ>AU!6%(K}^p(QT|= z`J}J3(QQj}OT2l>kO^oq{!x@qN>qE}HZ~CZBQ(rQpl7BL;gswX6Ry#uVOi%7=-A_5 zHYF8GbnvmCYggro9*-k$dhG8Ri|QJm6au_-^^z$>f1`)10T}V~ef|8+-0C zDniB%D05nd`~NNP5K0ehrHk& z>?K$|reXc#t35}b0xnlUk!N+zo{N}C{+u181oJO3!+Qu*a=?Kb@Ce+qx%dB3n`|=} zsa%2Op@)*223$ec(J|@GqQeWnfa7GJq=ZAsiW;2j_kTH4jb%i7V1$|>*aCaJ-Zdje zO|S-iQTuFg7P)RWNY1eP=%E;)9(HXlWRd>LJMbx*wzBWLm&Y`kRUHrj-|)LA`*&4e z@;fPBB9w5fd|wAfnW2Is0dtuu>pM|bXV^{&JRhz_2(UEz4(a@hz)yB;hwbA%u$yt2 zx&Mu}La)R<#STt8v8TYH@iX#(ItQ@}Ge+^LQE&ni6dk2()q2{+_(Ej}2%6}pm43ae z6Ga4h7`4KQlMP61(zI|&pUfpt8Nz?7-8WAriU4)FG83E6!RWOy`T>E>_RqjDFSR=dJc z3o5=GJ|+Z5v|aj?gv-8p?Q7cX8fJb~p$srlq(ri5zu%F5ySQ!H81gI|QV8QRT7xn6 zM<<8EJx87^Eszi@{2lr?2w+V zn*A=b%OmJE<1M~R?>;$XBTaY-o;3^=Se1BJ3SMtw%mvv^?b7=XQa2>pUv^7o+sE2O z0l>M^LD0Dp*Xj~MYV)Nmlgwn5Oe-dI)mAu`L4^AjT|(LE?i;FDsQFb-61x{iE3_V6 z(+kpR06m&%^ z3mG!!s?WwNdV{{4uXUpZTuiZbLWu(0)L2nFFCjGiSKRkz^f?z*I(__pGEOk5MdLc$ z6Te~}@1~=Ty~RY?qmPE+A9oVx8G%1LMLzxDDv6>Ix_)+;|5U2TsYWF97++=+U;v3b z0gTmZ^UM|{$Z`o!*|}v92*3dUQ?YP7RA}s-u%yBjV?;-?V@8kP>X*RITOBImosCVL zo_fYELk@wve#(lLR6{pn_#Zm-i_pCyDpkozzE#mGY+A)uv~hWRzrW>9QG?$Twa+e} z4LaUM6Is+ILXY~%ix-~G?i$UdvjFdivDBnn!6?@AB#)g>8EY>zZBvcgzs0t8kL6Xw zOwM}5#s4j)Ic90zJd&Dvo7JkE1!;?ZmxX4`X-b9iCiMHQcXyi$Uf7&;w&_^!>i^{l zIyp8oC8f^FXiI}l>cOpmNmYTDmSX8r@MXwo)p|BVsm7$?_6luPX9*Ag2MM6un=CJn zPzjhuNohu~hD}AKFWp^R@~QVLx;bsa8$dDZ;C3bOZLS+}mCg|@D!u!%s?~}FIg-r7 zKl%!IeW)Y0hj+}kKKA@Y;tv9VOX%?NMuIEN`0!7~rZP%w>w{6I{=ET$r{&4ge@_um z0;1TOh!4iTerSxag@e^ZVhK=XPiD7yDrxxY<%>(CP{{{X!0(LkC zsC<|sqy!NOqA=411G%3zl5I_ydnhb-E^XOL<#Lkzy$7?JTrIfBo8T_q?14O#+5$-AiGjM6T$HN( ziJd)%ZEXw)#XM113cqTJTj6%oug#jdNeFtm33+y3*5)xykHmt~*2k?JQ`o4rP+@N| zTV9K22QbJ(bJYj5b$q;a)zX zJw)pU<2yPx@?4;zK1?mmoRkeoB?o9}JamyHvz z0fzVHp)n$2-RaqWF`DlkI|Pib9^XQ(zI21CC5I)g1xV1QbQW;<+l^>~9LC=yIV%_v zM9lzU4{I)WUidlC#%<3aGik1eJ-yYY#mUtKUYt2flPyuKX6Va%1K(R*RbL?OrLBO< zl}Rv_WM1V+_wWkCK)kP9RgQ&__DOY3`Ow02XCVH7SU2%l2Rnd`5&vJ~oO;t7b2@!r z5zrYax5iDmTNeONNG3rPM`HK$m<8L`*`M`uGd7E6HqW$-p6jfq20Fk{lQCn8$_>X? z056If$aTF-_I$bb1OKwenPpZ$5pBdO00nJX8vsgi@C`|e#qL**Uac@S9;`@aV%V8S z2gBP|UT;?m1-^_vk~T<~8TB-@D}*gNJ&7N?s65*BlR&B&TJmOn;`fBv?*X%<^C;TA z9E}0FX{wOe>ONoxH7U$~VAad-UKmn%<3K51jFu#kY|RB~wTf0h=SY;psm7J%T(KI5&oQ1gr&fpXmzy*mysexD@PNbz}KD+ep zsGC%xSl^t9*cWLpoYYEZUP03w0a3v2?59jBkOXiS(f-^S2loZUOx>PZwH3}(%CG13 zi-G5h!@HQ0Ny1m0`C@1Wun*7ThAY9){DfU+KJVKhm5?f3f%b}H<$qNmKZw=EXgG&p zOGqNHobs^9-uoI{x4xD)o&hSx6zs^*Y|OoK@|3Hv2H86f1M6}V2%S@mv5rjzSSm_g zeE}2~3q*GBB!Op{9w5)|tEa@0I5YwRnahj0avCM(2#dB&u>s`b{p5Ey-J1vcxa`(= zM==nmgd|?bBlOtyD3nMp=BYMY#LG>qsSm6-`4hNixSv(ZXBFNn1f7_>>b&q<;HmBF zsh%2S?}xhMwrUTYLhWgIt`JJlE+cW?J^%yCFsXB|NtcsOXQErB3Nx`e9TX6T0+lzJ z4dh5!L@^$bGhdzS&iJLbI^4eSn+;gqpOZuM#STV%`>q$~@#i%6Y(;|cXo+VuXL;uE zy}EY-LGoN@1H{!S3D1t{?U|#323W13VDE#|i)EcC3ULGACp8fTy)dYw?+b1I2i|G! z@cRDD|1hj6${Xmiw5WsMe#J1o$)aVwI3S5y^dQMPmtw`G({JYIzv>@ab}>-3Hu(e3 zGqwRNSAa=&U-yA|s#sAOez=c((g%kk5nzhNDdvpg_9S>hf%rprs>h2m_?ILjRkQix zex~YCGB7!}O{_s5;J3475%!`f0wRFE=#fWEtFtoE*z3CM&V}=%Lg*s-6WXz+QV*(Z1KdpA8w~dJ zNpKE6XGBfwmA#=$yD}*0qBze+H?HTNw&Mqk#g?Gju1Z1C#}!lWPyFieyrUHwp->r! zo^ZHY*&m&R^Lj{6T`G`LiAeQsnOpO5*;;{)>qR+TrVdlX1MQK~y(F-iLh8Zmld2vD zKxZt6=<+H%C>oXCoIo-20k@0yc-UB*iV^zImnXlF=}TFZ&2)vl|GDEz`jXCafBg$} z!K0Bp?>78%bG>hHd8NOxr7b!~!*f8-PSZTXDfZHj{k}RKwB_d$LXAe#{jtD@3QJSw zkSV~V(+5F3AQiA~%SwvjIbyEXSdguLmkXO5MPf+0zMb)fcmjR+8{iV#+w$ciIP;zK zp)9pKL3FF<>DLsQ;&0e%-74vhr|xC!l3uToi8>}4{GypyOdwS%Ba%3tmse=~np41} z`d4q1h+eDy4n(*pNq%5;eb^`FmwwYsJZVgtS@g*75&1$=x)Q+(>T$d1XiSLBg%P*k zifR14J>e#WJ`_5+dw>)2+3Mc_^0kCQ?-R`-aV#e;{xF0&jhuZSLbrSYL05wPtzJ0P zPpjWNo%z{4r%tK#e`Y((VQSYYBH4;}@}06utWP67iDzyQ*<1>JODqC*_eVdqaE`kU z55nevrs$2ln?|?Bn#zJa7#vzO$mBBjKjoPl>;jczng3vvi2!I|nT|sQz3=^!4jenj z4rugZPKNSaOn^0*YMdxec}YsZELurG%B>+=*?5(4=T(zx*cgsA;pJx8hjj5PR&+D) zf)W(nWJYr{Oe6G zT9u%|2Ubci!v&=42$h$Q5OQtQd(a&~+f-iw75_5k$hI=eU1x9zgWPY)QLBO{1(<*A z$uF3{m|tH`U7vUr8e|g)&rrgNLHx#Od_wp$$QW3pcbtjGG)cBccv_o_H=MN>$A==o z+BcPKG$=+wG$vhgDr4iOe1;`8rE}*9eNr5QU8K|4?g7}eIOn)y$$3A7yBnYS#Q6=9 zEIGX|oA*mwWrzY3jy}|KtVHGJ)K`kcdvzf%y>EpWEanjAF_DZELPrLfy6bNHLLvss z$Otb+5O7d9+Z-N3(R9g+$HabqakU?@MUq8AM)PRmJw46?GH3u@{2W(7U_>fvC@PXL zFjRO}qy%tr6Xc7~yX7w~zqo}TpY^fnRl&g9}uLw)dNr^~;IcnERf=Dj(ked_A z9q?r@Tqn@N=T;#JEt=$50h5$2*+7odJVfXWQCRQ5sLOsAvM)(R7)Ir~M_$k^*FsqT z@Llbyn=2ZOws9CjMR(i0*Fn4q5pZ7|ko+>U<^=>4+j3Dsnh2DzB8Slz{)$5jbJmpW zBFkY0Wod^t2J_=K-xJ*-5txf<-0HUGckI9AV&f1n&w~%N94Ra;P8w7HHgyX0dBBTt zlyyi37$!1~esarf;Ln+GXB}v!T6TVT)GD$J!qMn(t`0C8oFUY4x%@yz zYqLFAGa~oEZ%Q#iJ54tEB~+)LJ8zyo+exXB2C_h##!11WZ_hcJUj6)j$pe`=1Sy0R z4hnaCWGgfS-nr~m%@9d?E0DTx7V?9Ac>qo}@XU{_ew#(7A@DXB7GjaUa)9G;^y7GP zd4BJi)u1Ekgyhr|apo_EHCEcIlA<--9+a7DDzY}xDLA!M$v=TB&9UK=z&1jc> zc~)9ALvvTA0|xL6QPCC+b?q!M`~%z)xC%GF;+1e4?o5i};S_1MdB`9-F7ab;1a-+O zHc^W%wSvWzYmo)vdC-kkJ??0K8sKIS=Z}RZe{?l#W8v!RP}U4B3C`iqlad3?3!ZN{in%( zH;_x*d?KVxingA)K?h}Q0(YTd!RLs@JgLeyhh2f&p3d%opMXioKp zU5Oo8s2c9(pufL_s#bE#tP$X*8s631QyN%muU?tV)zcok+HkYvJocln7OIF{LoI*HGnW2U=0vsaE1Vxm93y}PN%5}<#WP;j z%W{mA+fle+kB$%02vEzNUXdbvp7SC*RQ#=ef75C{YO|1{{O<%+*aatMt7F8d;=obF zb`zn}t#kdBPk1XFzMNI01ya}=kTmzj>v!*sRPi4 zxkH$O?|C|ujwF_84pW^gG7ua45gc^KfU*@JRpw0M zNv11!>lgR6(4KMAnY>HK4PS`7(6j#ciVfut0>tk=;@hiFZG-P`^*A? z+!pnW3vWuzWt{U;b7fYQJ(q{2haC-4U93IX!hx~`DFAYXF~akkBh=sRbqKgUUEO)? z;T2X#q+3|)fo$5cYcCdEn&l-IigAeJGxOZUSu3O!Cf$qt3K})2 z9Ax6degF+liiTTFy`U)((Hmjm!UHR}Akz~fe)j3kuHL>1-U(NN zlKu`t1I2_iOFbot=~O8woRaGMQK|@td1@11k%jra&PP_3Jb0nriKd%IeOe%D6p@<* z(Vy=dAP7Mxc$IP&kh4ML%)wH_$KsxTz<$*I?|g;1oZB6UOtqOL@Q62S4Z4i1CLzLL z55OSoI>g5tfBV!%)hjLUYL>fXd zHf{V9kqb)rPN=>xg4KtHWYQJHTQ(}Pp_t2(u3HBimEn!>sHK&Jp8M}h?zHpXcmbi( zwTXtC5MZ40Lm|BIgsEcwd?~B1BS~~6Tc#>$dX>WG*|vsqUAY|$<N;R=@A<3q2v`u00wEHXyFxLnzVv*ou=IM+r88zV4imVZ4?>?6C47{5G%i zZ{;~Mg+<>&-4A|Ns)xR327)k(p1plOyln+CWO6K7#sl`i@5Fvl+Yn1Z@T1ZeKKw5cr4)7-I8fqR!e22;FL(US@V?-p_eT#LdzShint*xJXO0~rfbzM-Z{Behnw(=$to(VJ>+o*9#*Ht0TAGzT08mZdG!YL z1kBTu{a#Fmy(MplMtAoxwvoU)by?4WQ-v9?f7qU=SYty#^*xf@u|@;ycpZc06`$_IDpQKAEUM$#<4)2fiS&N{LT# zk1Xl)POPD(cam-73lQo$n7kLXp<}!k9uuQd^)60bWjQHq(49c$<;ajSyn-LbD_Pn+ z5KBKH;czl5G6Q%2M%Zv6@P|+{%6ra+Xd?JCTtHoQ;>7=XI7|jKc_rDYj8Y*htOZ$s zSdS!9K1LKl3DP*V3EpqyECn@=+{m$r#OfVD9EsZ99q$jr0+`yQOx64lM?=pn*kZAk zxs&O=VJ*pVvi=>ZXp(K#LZEwr(ufmQ9&J18vQh~02y2nV_SVk-z3G?)CpUO)jmQy1 z_nLh>$D2~6T_i1R?N|6^b?&Fj+yq8Xv|&(v$Qy_!GxiT@1aMm*l%+ZU<=4Vb?7tP)W@@bqEE@%V>4E z#>+U=(KwLLd_=_;>e!I71`d7)11hAHv*Azug5izq0@%Kh#SXoFErmm?e%OeR@*hPO zLD#uSGNbdkj<}Vjwvuo<8;9|FR_m-iAK|z|xxi!(v!m68JHAYlO2km_+6T+uZ0(7d z?QMiLljD^r(uJO!2-!?TKpf_FubaId*8Xs7@g$jwe<~^45-8jXb=?~|4WoTJQVXS9 z3y4Ay0({dHL;vFy#MULRr=;3cLy%k8fDB_3zwB-VLZa)lDGA1G+Q8`5_du;dPFm6 zArSL#Dhipk$cX~n;CE8$(E@S3#h}N5^RKj{0q)NR6P>%~;?OfJ^XD?5aZ<};T~M;2 zX1Sxe9s4TX9{$7wk27?MxZLqJL3rnJW+@}Qs)_3JW3Frr{>54nAa(3qgk)^a0 zg)DNOI7EyR-GovXvS{@VB8t?fT^+c3k7Urf@*5BZy@R5+HHS|TrE#)dt@2Td3FCvF z0lxI3fZ^v3QB;ThqPK#kXqZYQ#&9*1*;esgUFi*5G-6P@(S0TGaz(%SgL_hv!PdWw z6^i~3RbLqp$Fj7&3yZrG+#P~T2=49>+%0JEV2itZu%N*mf)gybySuvu3y^QgIrqNz z`?otYHC0{x^wiWd-CbzcM>j-+XE4kowd?jYngwwH*@K7ob1W`2{aQ1*Pp6ygO=C$; znKdi+f}dFMO7ki|%-jy77s~S3T=+FnRLe8`v>_23>3*KO1+$wk0-r=5&w`Hdc4JY+ z@A2hbtMnP~PxXi1LyFT8Fr5^n_Aw{P3l{UXo4|@nJ1u90os_jD&YVyU5o^^p3auPl z`n<>>oj&oXhWJFSmai-GHawoDP@`>Fn2pM=to3>qDk+sk5)2)!xEf3swH60vgkWau z=2Q# zF-9b;4O+9Ov3G6|YYbSUX-Hm?Qm4P)e;^2bSY-)_LVQ+nQbxQs&A{NucwF3959JTG zjRKs$;YXNRb02p6X4G$6`qZ=h5Ri`e8yT|2#YWs*FxYHwlhC78!SCf^nwj`8l!ONe zQ^{~}T^l=V{Y(=oKkyt2BM{+H(Wi2O8eAo8!6icKAWuVYvse54l!USeom=EBhr<+> z+?ux13!j8&#bhk}hu-#@0$bLBIA8?E%F!^*4JF2XdvFF9s=eqcP!_Q~?w;{3PrsC# zH*YuR5lsK*CI|G*2M&Smip1tislVqr-0UY6_b(yosxD+%U;GQjO^DP{k4@GZfhGql zBUZF%juk$p0#ygWKe+qIDJog}poOtNiCDsDrcANvv8k37n9|Zralf4#spxxg7Wzet zSut$LY@mqN3pZ`LsR`GT!JfQtO5Y;~vq0HuNCy5Ouzi7KRNM#4oQERXneJ_qh$(ha z{T`cRTzN^g)>87#$6bQ7UoNbN@Qb9+%i9Wy|18}^LXi%tr{$*~o7hLTrYbCZ=(42K zvWI{bOzVmcV;A@lpJxQS?~i9(7XZwM%D8}f(TJRHr%uB8z8790lYp_%b)bdJ3n?PF z5#zF$bl$eYbhhjY(Ve6B{?3`X?%G>{n~)*oIu&CkLcu= zI}~@&S5QfyJZnA9r!jLO!(x@~GbILrAHm?ciDM$zEk^F8;Iz9Sp>hD6>E_28+b2y7 z{P*n#;#-Ekf^sHgJU6K^hpf@x`CwwG&?EN{7?Aqu+B$rQSdMt$6zoM^gx{IKDDY;$ z&DUTI9S3q_I5D)?V!y3wQ}D@;#-+h&Jyj3ym`blQwdSZI%;CV9EbI9FdGn2l9QX#@ zmoy-{xE2me*6+AjN#oU4;T!lyY$X9YYd0=eHNcMd%`XXk`O--)?yJE(@ia6!qKsHH zij1ab*#YBEfkO!vm}Ayy@0`+*q=KTx0kqg;YADf?EU*OwRHK#{!uPN&whVS$E|M$u zz!OOwT9pp&Q#(v9xmdLIxb2f9!aE;u$Bl$)asBL#5cw9>&GHxrXLq=<5f||yX zt)YgAO^{;a8p@>%SuPNdV=}lC>8c3sD7Y4hyBM!apx9g%PKEc|2jiMdGl=XFdpkYX zmsZKvKU8jp0TSzeZ+ZAQU&ed^qsjw>xWLb8nze$@r8L?)4pklI*{%Ir$vPFJh)_l& zR$X%@J~a(s;3|ii=xNUtS?zBlg>HHze z8XW2am*|my!>{xfYt@exPfRxn^O`95B_+)bSrGJxcNQ{p`-IM2Y4MrB~?}xB8a}R+?%6cn(_l?W%WTXc)W6JJZhkUuY3Nj-|z5(D3>t}sC19@@pB!oJkT(O&)w&B zfONW<};h_)s{6iYOzK1CAOarfmC;r}&INs~x>?#Mc^3!%ozG6wEYb8u& zoHC~4q4_+&y$49)qC%=nlNy>t%;ZRNz@=OihQQ>qz*P1Fe5a6ME@Jz9Dpkdfo7;|q zzBBdPvW9hVkBrk5zga7BBd z(JEAzV@mU^Y-PtnU2sBv8I#4NzpjP$6+H!$ym$!U!?> z7?PAvTX9v(J$xoHG@)yBTR{t-5#rd3E>-ZPBo$U0j?$_!3rpnt4*{)4OrPpY-|7*O z6e89fhHZPzNKMU)`vVK>$Dj~pzGXynqd_6|e=Z(NKHwV~HUvvUnFSw)PV-*yo6Bcl zxTa2IGV&sfV}ATW`jnOcscs)~klYsT)B}BJh|Tcq8PTC4QJOfjt`f=BETBkz1u3;d z+Hq0$1384c&)AD0-IG8siG8qn5!Jg$w;mBcw^h$3H+<0_?p$bJzc(`qr{>A%{OkSJ zYW|poXn5cB7kY53$Qe1X3Wo#d&0}dJckyrCX-~4`4*3&w?C?Mt9$jzl{SfQ~AyKvZ zExQl}a6LSr}B#vB5GNB=8hGLO=y%@Sm)0PXEcbISAXEQ>G8MO95P1DHJi7O%SF|jx0x(qa(IAc zUcyn6pXT}QkS~0%ohpyI=}v_G_a;-Gk*pAAc7L#*uQFcLed2uNadC-B0y1rK}Wj?9<=2I?<~FhgTpUxGOAKk(=1EgxAmMW{j~9#L5=S)6+kx;5ic}a_df&H1 z+>Fv~6v@wUOqxa=kl8<`rvR4crRE@!8Oo2vT!LTiJ~+V1!}imb`P%pdByAAg+$pDY zgY)i2o8h_XFmmRV?*?l%0zmIdr&YDbXYew}fvEKsA+K({3K9*X$!E z#=Pe@>@a(Wzv^h%O?(3Q3~SU{8)2XRc8juNb?yftjTo=z@8APMDy~053~3xj|IQ$1 z=V*k?7I)`?Ob_S!XWsaW6G+_*@|UMkV;*F}2hGa*cc(8JbT(Fw|4tkyk2>qU_mqS{?}__Ztm#|sS= zN6**rRwhCdI_+@#*jaj^WluwYu>}{Wc!;-*vHy^Op$i401ydEnn894Ym{H%WTcb@A zmEJ&$D5%KeXO^p%bhs>J(Jt>5dxV>#8F(*>Y)CUfH!`W1(Hevv{LXPg9Qd)vI%@(4 zU&<@E0^6}FqcjQF2&Wn$i)0)JWT>JZiqn}-hGk^1jxMiHK|Rj}65L@FGM*+$%3cmR zp1G4zJF*FKB?AX#$W`7@pJuxh`%ey#6nsx+Lrk85_phOn?B5q+81lxymb_e%;|o=s*ek~;di$t4BBIlW;!+Z^X37@JbX*aX2;K;i4s zpR$@oGCVzKzzb?c3EYd4R|&FbcCpCghY_(rFXuOy=kY=H*)OV>LwC_WPo5fHB!}Di zh>UN3Aw?&Ly3jU@Cq{R~n!THFZaJS2Z239|i4NK=-`ahNFZ(RtnMgTJ8&=^}Qnv{Y zM=+qRQtBT1mU;CCfak*LQq3m01d7`0`@wnOHaj~0t9x397qn*a)wFLYUwL>{m2KgP zCaBKG3D3PE>{t?5dCFKPqHHG+m|FB-o_cbsVM3gElhp}dayWDrx}8u8kIjYRZxIL zB3q1@iy@HSZ)hqh;F^9yT}0Moxv->fisYo4KECBDknsxp7ef)!8(92{5E+7fJ#F~u zZZo9QK92_su8NCj)P~W7rAZ!f-R2U!!O%6on>hOq=S{V&Qrz3V0U z+7|yuftR*?`rTtjTN*fF-uZ1h5ov^PI>)+qt1W|&9SJA6Y6hV& z?V|kLXu@bZc=l*rB({hCtdFwxtNk>7P%7Sz4ou8b5+F--i;5O?RbTj|k^FL0|fPA%y?NS*^GS z93SbKwy;?9x%E4(gT9R;t~FesyiI!^%C0UtdE+%^0Ip6w!SNbht6pEwy^U$NBwaYS z?WSP_nYBCy64&JK?lgVjDmoTsmINebSI`q^>eiOVymx>8^Jh?2b;#$e57!SL z*-eX1TpkOJiz3UY`E5Q4S?;g1jA!s=)c&azT8PrG=F2eDC*m5Oy|Ep`wPkZypl;1% z%4o(rECG{UU~=hXRu3=EM)+8Kt-?Lt+p)q8t2PT#;Lz2}|_)$A+Tl>z^ z=DVOFH;V3`W+SbWkG=t-v3SEFKE~kMsuRNBk_qkM*2nC944X*&#hMhj^U|dydrUFio)!7tXZv`1XTzZ1 z_Xp2lurKiQg{P36*Wl?^VW9h4p_4zD?KhqQ2A77qAEhsHpLRb(G1A+ocVf9rU25K{toeLZgL?TYHf5BMR2{n;w9%UT{P^IYMU3P@^stz|*DTH#T7wFn`P- zd!F;RXuQ4O>e;+5qUNl^#Y+TQ)l2eM{P~uMO3WS@QdX-q$H%FOENptMSh9MmE8{@k zwS<9qF=^Ip8q3#`KAIk{>HJC5Tdd!@gJhfrjK>D_KK~L;)9oGcxmxU;oVC$YxlTt( zrKa}H!zkE67n47l(czY~-MhoE?+r|^@?aS~%%Pm4qT$+gS3*%1lWLs%Qi6>Xdj?E8 zv+NoWc7YMOurVKoIfGh9%fkKyy8+-4(5$=gs2g@*eS@~&ADMXggdCljoz0Dp(mz@X zexz%Y<;eW4Hqr31-m6Bf5JB)ha({Dz(8#X)egct9TuyEDa#A$H%XBc^D7F75=if8?){7-9 zrd~RDDD;fvB{@{cYR_FX$0nD>OY6V)1g|Xnob6(^o`PfWMr3*Yi*_uuXz(EuJgUO3!mo?<7tf~eZOr>Z_*ke zJ%GK*Ib_d?kf@WPvza=bl}t!n--;N~Qbslt9Pmy{`42h_oaG4fuDBMT%0WtNJUEiH zV0lCQd*P~PR3OXDcC+VGXfY2vj$KKSRF_(?+b^_9`+`(^Ys-H93>&TG^Qp6+JLTHO zzxDJc$v>f0rOp^Vp`H2ushY+*QC1Co)1E+JMj=n-(vq)FRgU*^XptvhYzIMYL=a|t zwMr5S7ZifVx@eN?Bm*slkfk@s2rL>YeNhb;UVU$oCrsmeBNjxP6B7m8qO9JOGFIMP z&L@meedhto8T(X^3fQuy9^z!cK(!|y>LUXX>KXVaPU2g36XX0q6carK<&-4UmKt{2$04&)KOM;ErjL(;tynh{dW>L6unU&6Bbh(0SkuwFq_l;#(F zx*^FTdO{*EF_jo8UzTr)PF;65&Wgn0`0w!f9{2J%;V>2#q{BW4)rY+mwAu{N&vU!YPN*FBt}FDuZhSlPDXf{Nk6BFz{^XhsveU-fTi#&VLen&tJm1W%~Lh*hE@rR zH26W$-Mff{a7a<3+srKS2JG42SGUO)934l2$(98%f30;PKL1>5M% zv(*D7-2F((PTQ(|+W6w>qd-sHF~gXmMy9B>o2-l3+F8cdL!tpml=F;FUJoFd>6ZgW z2;uOaoW~?9X*DL?0Pn>o)I-keD1(!$bJkn7avtPu5!(#ot%)+#cZnXTwHttD!J!u0 zt&yAS&W1;cld}P4FkfDBekLQA-DfG4%5lwI+ddKf9ueGc^KGf*X2=hKo=#)wLX@YW zbc_pmDN+ri#ZtnWs3TP4lJc?Mp_nZhbtm1bL+{~9vqm;G9|WP3>Tk~rLa5ap3o%G=>#XVe;XblOo(+xH*ZL6pH;LN z!?5ss^-BVHppCpQU19M_M~a$BV$v(2CGbPUNN`(*vg;zB=kM|%ogYWvUzkzN8?f4E zSu#NC?wAKULOH5?(Vhi&e#ZyXhXQQ}0#piRJ%0m zGmBc=1!xHrnSV4$Cd&YIM&FPe+;q2`2vk7K1bepK33CeyTY4{qMI?AFvzR3UTxk87 zQ6(Cnk3HX5j2)uF5+B2<577WwDcj+O3>Mxo7+XiKCC(7{vJ;Z#a0uG|^@`>HiA`&r zk`W^3@Z-BwoNLi%fP^6m{bB^o&#h;pKcru-K`-6|N;8y|T~H6~TETG&P!n087NVSD zw;cJmJtKUpT{$*BKV%oF0IXA9IVZst`IsrnH`xUce?kOnGnDfVh$fcZ$TL7W{0O$6 z=t_x&9U6vVp$|}D^>gob3Mskss`98i30iIYF*!NJkiG(;#o(f@TeY1fAJ=B;C_ySC;}cjdzWq?BAeKhe}8U27h=Itnm8z8dYHK1j1AM zQPOUOs>H5@fIN~W`3|0oH3a9cC!IcT0`OyjC9|gJ(tiCL$>I&92s(*$r1a+g;BrT* z^2}ga0nA)K++3&xT6b~{sx2IIGsU>i5*1MLZF%N{KRMOlL@fL`m21hX@WtXVP=ja| zn?A@>4d}6$#M`P?d8g%j8^O{CF!rsyf%(FVOVf){RUBPMju#!BF5Z?`#DYMe6q=@Yv2oGi;+oiQvllc;_W+x>=6&{w)GJtGo2G01@%ZRT- zVbBHU-BS3#;Gmd*qN=m^PP}$XBraU*hGj8KD~e)3PZP%4ZA+Xho~-B-YZ%1RGWa2t zEopB4^X`0$#nW)cs=_%usLD1?Yg)%$CQg}N#w8=)PI?=>K|jVSF-72oA&OIcF%k1% zC3Iz*jH&j0U;N3tjUhr(@SCx&ujl7~ zbO??8-WKZUc=^5H>k#{+^7tW< z=ZWXj2YF8q+dnYnYQDu=T^yEipO+&jmp(1>am1{65&tYdtkr!{m0)8B^zQMv`-ojfTC0Zy-FYko40CS38Dv zBo9g|Rn6a0cw4ty7o^j!=VJMmcGd1}Swi(abc5>X2sKkX9haF`s zBSmjgtt#bwhC#x1qTRo?Ef1Gdjl2kB=-~8B)u{$Pf(4+yEGw290HkG!h9GW1SEVR~ zT^-Hdxp!HXW3RKET)o9i4mv?U0Ys!LEHIZ%*c^F+ z5L)XwCP8(34Bx21Y79Sz3--PjKj-g7Up`u(7O^sz`mN!6fNYRiIbn;VfS#s~!1}FT zAWwB2)1N~04ir>96r+E(*!Jjgxn`~Wnu_k^8ambFLlSz=*60hX!WT3T4-dn$GIrL3ftm1xva->0_MY0rUroH44+K4%5A3}blY&Nxi#cXh*_hht zxsIBoibowCCUv{ilX)9#0eGU)B@A32TMo_LyiatyAU2w}f*I3F|35S$3W%^aX0?H0 z0m;0d|H{xaayd00Qfmv!70(V!xZgTWt%7ga84>D)l#^`ts&C3?a&AFgD{fbj0f4w9 zUU5i&p{qggxHd{sJ@h)h21l|b+?VClG4q6!jofiU3iDN=rv*f78;L_2i5Wh%u{8m7 zKAD6J;Zr#vv-oM2VSg<277eHY>cMXgs!$4bjSl+TPYx*bn<=3#9e!Z3PSynf?ZZ8c zl*%ZehpD4T^;VD|Fi8opk5%a>nVCjT2M1UKHo38cpo;JT4&1kz;$d#-vR#UJg&Pfj z2|s`?1UKcmI2x-V2+C=og_k5c$mJaZ`ndz}gc%h_l;1#IgmgAwiNXPffWqxq{bQYK z57derTjh_9TXf5S*+{Tj!YENnB@w^_?p67WGLboaCn1!fkGu>YV1S1MZs77$JCns8 zQ%ma?=pk;uI+XJgi#^Ac04Kl(v7Zzfhcj6tx^nn7ihq^hw*n%-#ONJyHOB>HC?<^D zWxYDfoDlHrFT1yl7_^O>1PwR`u)y~jLl^!l1pksX^`|kE_CMQ{aB#gwXS&oUXjnvO zHpni^xe720;16AuR9whyKdKH$g)@4?Po){Df_f3igYNwWPK>ERQ?+D*q+SM=eYd;< zMA`3SWtxYQ?dJvQTuFBQRDY`!Cgl+&hhoFTh7?Qi1C}QDcJgCOC4?lYnTObR8tvFg z!t^8E(0g<5q3(cOC1A~CmnsGkp2?H_Qu08Pmv;y7hDMIxDu0C6=GQcjfkyqv{eVy2^9~? zA^jE)4o1HzUEN`vaLCCcsGAU1f+HAHx}n2o%m}CS*JIA)kYl?95ZADDY%ll6I*|JQxjKy< zclxChZ~4^Nh$eJ!9ew_*>T8GZ%k}c)xRN1cWAT^bb-|abhaV1CDlEIF+e(HVFBM;Z zb}a9I6T5a}ux~u|&4*5O6zhAuOzoSlnZ~h*uX}SNX$VM>(7qF5j7ZecVb^0c! z4VJ{u2l4<^m4!hTT^zf*m36V29(S4)u>3r=I#PRh?fpG@N%!8$)h#>R<>8bS{uD-( zZN=g33v#s};LB?mFYGl#fBeZbIqvl4m*6nm>N3;0OJkiGtDPKKj4viQNtSjSb`vS+ zjHZhjhI3EZ3wSWP$jZ4#<^XvVencg3z8K2fd|=v7<=YwM`}NlOQB4=J;@DZUY?d!s zFp3Y_kj%rGmCF*}S#lYW4SC-7MUUat1$EMnyxJIk`k3c#YJBd`dp{8dY z%}QVy53S{gXg-|RmT?skI3ES`y%+ep`@~-4>8$v?oGQt+7nFHn<*JxhFcry03ktLZ zIVdWO()VS?VP(%0B`uVDXM3>8p?Y^S;jKESG=TLCT)6rCO%KEIXv_qWsZXwbu?iAl_dco7w@z@cBRM?7JY#WuDBfxnG9-v$6Pj5^uys|}Ac?T!DrFT5bWBLVWlt29~Z zIQHfC+c-9%89N44AYwoC}p~C@>omk{W^|$9} zkB#-sUkhL8M=udtE&l=FXu_-PFI+*LtSn2KEDIj^Uj+U|yOm&p5di5P`ZQAKCQvOT z3KpH)j}~eiyDLphYcJ;q)9}M|CjY9tbIOZ8*oc~aPnpxQ;T^vkLsk@@dKJb*hFA%o z*@(#NJ3|sC0S`Kh#i9TyYMq|TxHhJ~p$jK&%$u+($Y6<=CGCr5Ga&QZj^TnpH>w5r z9`gPfMVQ56f#5%WQAf045&p|FW%a|tHgtmyGoISvY7_99066gJoDv#jiW-HoAqtkJ z_x}Wa^pnYEgX8%xBxqMpnYunKY(Ye_vUC~R-|!H$2}8V?(s7#3Rx}2Yk*3$!?$cl; z`=@hRTK1WgT9&objfC0o;|!0J?2XyG{7hK?b$uKHEcQRH?*dc>07LYfqIBwRy8H}4 z(41WWQ!r~&<2(K$8$1QpPJCpF05sS%*uN)O;g5KdN{6b-%+GAu?H9JG8OFx|+H4PX2hA2k;81p~ej3S>rWZr_rr!SABPN{-tR#e_>#ACkDFv#M_UQv>;YGAQ z@i?&r#f5giVH-L%hvI&&HBM>cQ3;i@+@fG`Z>aEWLCS=GxCP#ITpqOKRD92k^s#XT zL)*I^lPx!QaZ7`mBd!cwz|`6($>pu!Bs)6BN?o8j0xsh~scdbap9?j=hZar(@k*Jx z@S=*gMz6lLLbAwezD}Z@IkpCHku8J)@3KxyBi=37MI*&m#P>*+1VcmO9W28IEEO{} z*8}a1y?YqD%rraxO!A49iGpTrKHe&gPmfjb8w1!hm0+rQ zL@T-Q4HcL86rZY^dAt;fj>5bCp;D$SQ_2dOEK|5k`6<5JN`@)E(^k#IF>8mVP#48u z4G91`o%O@8WSEX!zrsv|&zr;<3;mi-%_UwlDLYjZiR^Uj)Z~)`Pmpr48tF5{4ATR0 zVG;6a_2i|U0(FfPf3}=bX)schCu*Fw=DQC`qVhv}Eo*5R42dVjS7JE>F|brz%5E+K zaEKAD?DLbC_@&5AvstrWIX^^ZLo>B$OgQIIGt#je*J#-3Xx0Xndf=++nx`ZpO*L;Y zKk_fCB=bq{HymFA58G~8vPE<%#KwWr`*!or0Fz=I0XVWOo(X5b6<8@fVu+1Uw}-}3 z3-y5pPD-QTx=*7_X20Ty54~L1<{VD#orA)-f0UJt{c z{maen@%keZ+$s3^VP7e>|I*_%R*N6og)DE&iYzTyQfq_^MqDqdalf0?KnChbXt{nwzI^M@?cYsm(#Jy5MD7D8wEgZ}|G;NaM}`8& ziOw#Z%q{RNZznlgsKZ8%e;|h9WujlbE30G98l4AkS~n0HZbNdSr`geJBgvPX7e|%% zXQws{6oCN>G|`3Q1#AoghzPn%`zTG^^LOpv-;n{KiLg-I{(h!p9vC-{EJT8v$^&q3 zw^ulL%_=<@k>g1mCz(IM?)GbrFs;fuVD4P^rO0T5J#KbZ^I zd~m`lvR;zw{<7} z*4+vd@DqgIA5Kq{2!Pjgl)dzA2@NC}lXuc0?WCbq9zn1y`OGvmr@)$nkDM1Uj*zqm zV(0VU+kK{h_)+e9P9^yBXUn>ob8tqcPTH$hOe>#>JNuzp9^aIAG&QCc-rqvqgKO0% z97fCU+6x1I(}!J0fH5)=zffnUPPIZo!sYuf2uEqV)^};U#&;i6c(dVaVvX9G)e6_q zY5Kf)5WVyL=30Fp(hw3bm~6WCHuU&79d%kU%-*Keehks*LFy9Qbi~I2k1QM?jT%>R z$4(UpoC;cv`y2TDg3NI$jmP;dGgJTTK@K28nC^dpyWJ=pdLv zA=2sU@_W}7ak4q{y^SIcnJD7Fu&dP+MhjKtHQO+1g&@Hx)M|sw05Wvax<#PjApR02 z-pC0R<8cIccKXBjuXj8O;e>yJAg>%JA{3gQh}BW{AF-dE;r?VXbp?*{WStshei+Jd zygz&V33+MIjgUc>C8n4Ur#4W)K4En1PBL>*w6Rulk4k-GQcbYrRd?|@}EL|jfh+5qz<3ycpu0Z zT8gD4reKI%<+UA!(!H4?oo)=w+3xWh+6VFwNsjm(6DlmN(Up%q%t(%rQL2SI|Eo;hBVCJ0x9qo*&=ImPtw%lRY2X! z+}_LI222{0zS$n7M)*n)YoKG1#mEsCpAW`-0}H=TU2CZ{>(9x}sSWgp1o3Zi!?GRk zwFLoeiW5bZLn6{!&_M~ZSfpfQg>4aFrm>QM+HmJm{rI1JT!o-ditY5ZyhS2IG-KBC z61ZiYDvLpxG-YU?wR6kRypJ;}JSY>cfXL&H9NV^ezr2l2H05Yv^j7A= z(q26yrooLtAFALpz|Ep=DCq0`aM7O%sTF@TdFIp&20vWnR}TMvY#cW<{PXzYySBc5 z|M+!C_?zPqQVnQnOY=Qvce-9GSO=g<=KA8_)tJvRm>-HV}0>bMh@D2W7BM zvyZARF~9cI%-3X21+U!cur#MO5Pb_4ASx!D9b8d6UUkWzr-lD%O&SN4zUR^ec#q*E zGwPE6OM%&DLd}Ocb)_z)Xk}Q3d%7DJZ6;4gU%rB8I(o<}=*XTwnhn8-YqaDS6eN*M zC_R)6R$!K!=;=t2JJTLkJ2Ph~HV2J#1!5shbz;b`0if({NKfawe2e-yF83J+;9SYu^=%i=rmef}@Hh&WUbfd>*)Y@fKc~(D24En8(nMMV0=I|mL z5xs$IgG6&zPJLpDmUa&y7hEY(+;cezkby!^?1TjyfCbj{*R0%p4u@Dg0MUkMsDjes-)YpKLRXzpoq&?Id&Pqqs6T-is#cw z^PqqY-)$Y7ytf}Nn!0Nu^i&NJLK<~stz}T4a4*-yH7-TyiyzCQ%{$o*?{^_! z$iV&Xk%J4tsp>HVlMtqMr`}y2sNhUs03l>v(QvddlMs--XY*f)blkaDi6fJb?dkRt zE0hzCOE#X%@z$sfNS(ppI9ZBml%-J;WY2F^y9r)%S4m#la_r1Zm%^KlBh(EB@;ngw z`=U`_#-Y_DJ@ERkVG}OU?saf&Bov0j0hKAcgC`=>qET>&Pdk1y@6zqxQ~8H&IPl9m z@UxD7hKKF?+ojnVi#^7;CTRj2mS|^|Xc_mN|DX-*a#AY;MU*HkZsfjvNkqTV&IjQx z9Kqxe80?LnY_cMCjb~^4J4iV%{l&bS)Urkn7t9kuyfprBAopc9Q$(wDtXCQ8L6>|7 z3$(_Z{#TK@l(w$|wp-Al_l`xcV>E-RlMO*UXwRPiY|*Zt2H){7+Q1M!_7K~!Z|)bJ z6TRkY&;J_7MMCG47&u)sOoQO~4??%!sR>VKzK)+)@W?|%{z0hr>VFWb_FfrA;4eaB zUJ<(PmbB*fA2kpyeXA$_N5B5jl8`+@f<=nI?GJ@G?oHbI2b%N`JL|u*qd9nAqcbO@ zzyVMVGS@ly%jj!>4!(QFzJuvrn2WW;hZQ9&Ll+%D8p*?hCinj$Gq5dH`n`-g`K&@A z)~4m@P`cmMr?@h|TP5b*5U=Dc__BDxRVAj+dq(g9VAWy;H`HoFy4@Mx(i!;fFpnsz zw%uLuT`Hb-y(#DF*mhdsF;px)zd89Y#6#Z%9`H=1bOIF0w{qn*sEPyGLhQo4HgQe( z0aOAe7eP%z$c5^QY()t+{5rvnE9^wDC#Lg{_wk}}6PA8jt2 zY`{R_qOmDHVXayhRNne@Y$yt9x&0g=$h|yOAcyj;xekf?lp((o8`523V3a?qyT;V> ze1g)|aPo&1Nw1{p5m7F)p7Q6F*7_x!SK5<8tfLCaQH$bAhGSG(A+HJeQ*f?}Y=yJ3 zCfGRYh&>_=3=)!3DD~-_Vs;<7y0E}5g#-SSRMhz=WDW50%vl6FdpPz$dOZm5nhP8(45{mXA=a$VLkvfq8#2TvM@k%Y|7*IOf7FbZYR+}IyWO9P z2KIh<**{)}%Om>n!~0%ke%J1KdB3U(>;wMY_T#yKejdC|0^OJj`Kny>11I*^Zjln| zhdqAfF)->1NE*QmeiQ?oN#axeAwBcg^6=m9%Busf-<2u*1b4&v0Zg}#dO za)n0oxtOEEmPPV}X7RQDu|w^vH5Nth-sS|hoPJoYVO{&m?r{w zY5d>5+(^SZEBp?Qv_7VxWsS1w z?l4Tb#X*6ZpaR4okhwu(JA$7W)J0vn2!wlGahhjxPvFadA`q*d$ z_$np*5f$Hg>HVuyN+6`O{z$E-06xUFO6~48Uqmib<4CPZmIg*}Q3cPogqG6v(wkWT;WOJWyJJ|N_a3IvmUcB>%h zsICqFjYQ4;s3)i z_ntY+{AHy(ac}O8rK1J$ZJUegUg>jIVQ_`1CsIBFEPh}YbeGWS)GL1tp{Q#hK^Xzo z0|$A+Fd9Dq_-N#(6z~sWo%3Uktvz`1U$eft{fC!ccy2BD155zYnfxd0^8GI-&6moC z|H?^!7%rujLS0#}Dkf!}qcnu+GeWK-2r*70y~x9ZH5F^Myx7-mp{vmDgvze_fDci{S4i^g za6yj53w!9+#TyC5y$DoAZ63nq#mT{?Uk2mUAtIRs)7iZQMLre8Jq2l#Fw!9oo1W6) zd~oC33@Uf^oV6=B(H_h@;T4ImAp$+ZNyg18o5jo3YHPWm*N`P5zEFwhr6GnRVtSO4 zWy)}>+39Q5<_}UP6n`_2(W*6NJ(hLLET*H-W7SBZv*ax#2xsd1Hd}zMX00lg!~xFF z3v*&ApB3jzRVxd3s#KMRP}n#UxVtMEnpnFg0ThwKf+~;`f~{9r1TbR^T#)*+5ljk9 zh;JF+Blak-|5ibC)vqbvA?^J{Qs~wor6^_%14&Cg1!mb7*@^{67-_>$?TVCf&2T%P5V3pXN0EA63=XbOCyLVvfu#Q`t(sVbHl_lpQwvLF2k2rk@1)}k zJp_JLNAPNMN%Z-0;_E2HSWk=6?VngJz0;n}XQQj7bC6Kt54+O5X$lOpZwN<4C#X2Q zgnbY@#&MN{1sf>4_&pV* z<__fP#Z*F?+#XL6dA0T{8Cqp6w8NQf=r?aeI^DUY)>xkR0r&r->aFAQigm}~;qLA> zV7R*tA3ogO-5Gvx89H2s4|f=D!(j|}cZR#``@rtKzwgT*`IK{-q)C(ZX`0ibO~v@j zl@7*)5=O+3_}<<=cXaqZ97VK>I5n=_j`rUO?L7z(9{?}sS3@VO(X5~yW`~s5nX!5D zdohrzY&1VEH*X<-lYv`&*$EAHjMmI13G)ej4m9DmfzcB)n}SLioPHQNg*z^Qv3v_# zA#`bH`eX)=%*)Jo(3Cj-eV=b!X>T}Xa*a60(^<>vbvC?)28}IjWqseJUo(@Gol95> zmr}bk6;O6m?B%_T?1$;{v9&hud6tTH8$`6Ww(I> zu}1QZ(!;+&yP2}D0a`uOC0j{Lc~VfMcq^#L7Z4qc^oFNcy{Wm=W6U#SVrq`jV{Bg3 zdy5I{fVKr(;NxF6{5lapYvm6}&?W(3y#}Y?|F+bBzGmwb^O$WZx3Klc^bOsC#@Zd( zrxrtrx3KV5KX1Nr%73`F@>nvH{tGYriVik9;vj}WWR1xHB#79{N5WjM8;qnvGc*}p zZyZq3yqUAvasSU=qu+4=*xmRiGTc}c=u4`9Z@})V<@YeD-l*b0a((@8`%tIWt+mYC zrbg9~hhYLEjt{rf4g9R08Ic1!=~kp% zsn$syvHhw{Aty?tcTt zE}V9sfk4n|R^FbEbqCe{9kqyjIB3t6%Zv2%Y;}?egy8)mKs2rqb`}gS#KW8z-G|iU z1$o*)RM0^5x<~t#8~{hU^oJO>Hn!^!OvvkW_>kocOvKwgDJ^mGEe0YB&IF3-K*)kc zfb}4)K^RKz?LkL^LLi0!c0iT@C>2wtF-yPz6t%oPrGGW>^!M*xSF*=;e7N(rFjTl7 z5ut^jLO`q1G0^IF>KADB8*!WmQb2t&mEgxPlu?lIyl$OuffFcD;ACtBb1Vh4V17#w zc(*?cY7_!fo*Gkny1;*MqL@^K^?4HQfY;E;X~3EtU(tUVDZaWA*xGA=CQcWmGHfm{ zY*6~9ocFtEri84n*l1m5sdq-`VX#|oI>SIDg$~5|XfHo9_7LUQ)&_2n8Z2VJ2u?puiFb!+?-5e6E7xTmDMd7Gk>XJ{a3P`SCe{@?9U zpj)Mq9XFt8fYhPiTM}<;WMBW-=1e7FTv-1y5nK^H1MFJZAV?~l^IIM}eG^L)Cf^0S z=GA^&-}t8K4`{+unlL5}p7!)&V2&0@YcW-q#%XJs*p{AJ8|vqO@`NLxOWY62 zNKB&1Do@nA&<6Hu&;26&n_ye$@?41>s(*AsFzVI8Dksp;cS2k5pQCeXTzG~f%_yaY zBFzA-cq7o(M6YkOnW{S%2u!Ow;oV3h%d$Th2D+9d&lw~N>URyfVuv_OxQ?KNt(TP;j4^*}`s1deb)L>$zp8k6z((hvj;+%pfbb0h!s z2Bw>tFcN>iUo&Zey{PIG)O45*>LD};Bt#jVBi%hlppO(0{ROSaV_YTtQ^oyPZ^m9H zbm!F4=7IiS5zeqW);ZFdvp^(~Mz*sGnATs={mqu0&@{{)4fh&c40EK~Mjr?WfrA35 zUPtTC&;(nN?)p{2(J`zVW@YKv9vK{c2Q4RhtIzj~s~x~j+ehn(^Pz*qli3!O#j}0| zeZiNr8#nFtj@!En;J~utWDKZb_47wfAIOHT6uy_f;XymVvWAX?1 z^Pp}f3FJSu$e$!Mq1Y#Tu(i_Y%4l_uu(p^gw&cc>oMQ?&*y?G;S{I?@^)_Aaei|I> zjBycawqpxVT_QUdXcFC8Udz_&^mN6ZmnOHu=5!i{Z-oB?vIIOhlA1N_t+| zNljPJx(PKJxw!B(if(Z>QpL11lqgRN6h@PK4HnJk8Z)^^wu>11gu;Uu=Jzz!?`nic z3k*H2#Z7~;HHrct6kSjYYj_ivk>X?r2|3bT4|xQ{sUac=JIRaTkY_5EKZnP83i@gF znD8Rb!+Z%_f^LXtCHO9)MfhWsTzfDqGB*|*#*)M~Qwc3k9FHM-oH3cqtxP7IA$rcu zC6p0ond80_5*LI1Sm9ebT=exYjtT~0 z)yVNfeIB1nlLZGD3Ke^vXc=5%nghGHdBAI(S5#sU>MN$LY?wR4Z)?X^x1$hg%=U@n zRkeIAA~%Pp`x?)%R*#^te+Vt=inY=fjzMnYA+zXbS_!io?netqi66Z4ft3y_se0Z& zE&DW11Ug>c>R8)#+0&CS za$B+c4{8TyJin%?iVXQLrtf-U5uRy97e1%a^}nio@Q&%hF_s;Fi8;0AAKDNI%{X)$ zXfddB>Sx#6uH24>*oYK-M<6-W2&)G;-t*3O_H(EMe^livJ|(jcCvNI!Useo>m%?p! zLTV6QSas2y+jfngB3bl(#t30s|4{Ql%)vJW`KQnV7em4Xd`^XK4%)vKzY_j!vgO5nNz(_8 z5b7Na@tchhbJGD=D8i{H57}lD5&T@Ba**Gp0(De+gC781d1Ptck(r@tHVAl0rOlIs-#{qEg=&;3*7h z4lajWu$p&TY)El?+>UbUS*^-Xsc%hYI6?v}H{%*~sza;w@NzUN4NI$AooKX=tb^+X zE|M%v;yqy1w^Vffj_oaT)HdMuQm;`=hivwel%t5P9yF*q-X^-`;v?EeG}Q;L4< z*}+F6u5RM|6gJm-lkYcN{t?nM*N-r=;=@K(Qv+6Y&u)Z843mU$0=I4CNSN^=?s@o4 zSm-erIqtCHAgtsU73GF^>DKxpz|m$`kn+=k4VjH?Hiw>@F58~t3JQ0>uAT@+{?gHMcH zSv{p6q~WEI0z(;;7ysSp1ZWwpJEueAygJRv1Xn62l0|?{ksGEPF68x` zj(}n>owH2C@G*n%Fj966qhThI!2FI<+`np`te_I#SIu=pNpAd}cTF*lbooreUy6$j zyXIQ+kaL8Kif{!v8>aMvpsfe`z5E*poIwPPfiGhQ`R$-*4M5bGl&J_eei@#5z?i`> z7G-uZ_7Y7kl02<)iaXwOYIx}WeYU0=Riql!AQE!Ve zDVb_2iTr^rG>a#v_w!cUQedpiB)XdaoZH&@~PWOm&*Ff@qvv0rVPK+Vptli0`%MX~RZ*Cko?b z@*>yr;6tb>Pdes53xj&ykgYdA9gNv8Ve&){Jz9Wvi71^vntfAb^%$nA78o~nX+)53 zNtOxu*phV+d7ThDC*R7+NK51l`VdWdi}@I{i8b0p$pm?T-YMxaEy~D?K4yGBiTot# zD{IgvU!Vf*hz@PByPZ8ceMT|izZi@IKM*S`$@8w(IOu{#LdJO0uqq#3EINjIyR7S5 zXO29jHP(h~kzi(G(;)Erbjd><3kQN7>08aZ4@w6J&{iH=28YgiM`c%%Kb)LEt)H4Q08uB8Iq zkTscuFr^L|DpY2Rxk9kZA8ONvW#r}{Ljb*oITb11_VOudqt&a)1U6)>KvzASIn@IR zMlH4(+6h1T#36-Ty$`N$-iRMcb;4RLg-%X`s8$!w8RMC8 zwDq&CoE0Db)31h0pnk3R{i7svN_C5Vk3+lnT8Sj@Lf1h~zJgrz!{8`Kt}dmx&8V#{ zp*4{z9+x=sru;X$%~xZCV2y~3o44kSIN}i$2b^0FMy7`-Mc4NK^5zLp($_m{5lBk+ z6AoCu+8ZB8CB~^LtS~0nc$D$8Ht37WzLD*#N>Ao`)X9is;zF}w*NI_ADzkm!<)TkJ z?%{-eXPfrX;jaewNoAJLV>oV(cv0C!r2*5UK_!8#=kSe-qD_o7_vcC8G**CdXu2^{GFqQM9^#oLl7OpZ-CrRic@nkV6tlHC9fsV5iv0x3FIl7k)8dRBe$j){Bz^y}$vRN>Y=osM0ireuu zGL9HdDn&MAkg9pfo~C3P0Ex~V#Cg>GiZSCr3RP?k@|$hsP#P!G?*`uy`#?_cLsA5t zD&DXr3M9BnF38giU~Lz!Kw`IsKv0&8cCMrIMAF4Lkalw8Me2)>XnG98$Ag+AR`|dm zez>gk+N6IB5{TDOU8&xTIhths<7C2L`h(7engi~snAdh4%bjmoT2ogT|& zYl*YzoyO`cRKEUpfD$9Vy6z(i^-C~>Zr50Vx^+0ZO8xX_!9p5OGO>m`Y>V4x|MQ4n)Vi;+hq!{IFF9dA1bXmXIiJGipE z`^mx>*L}e&h>55+ByBj>eEa!h+vy-v%4a4jr1-@1R8SiECWT?A+gW&3jpp6Q4?xn! z#VKb`7mkssVUp;40~;d4tJ zB!U5Iqrbo66fUfKtnMb87ie?E!*F~)|-1=X;8+H^CL%8s7)t&i(A z@m&w=Y_M%=B+a{BP}MTzL{&AagMq#!I*Dz+>@KfU)_}GE6j3Dc3uFx4PO~hh9r6%; z<;H<(E1cm&|M14FngBg<1St!waS?ic^KF4SV`~H)5jSU?;i-!0dfg&tSeurr@#M@X zQHQa$k?3)&bmIu4eQ;EHY(1-$ZqkgECRF0xRyvdfAzjd&w2S>RJ407z{vWd3 zaylQc8-#%8^DEH(zR9cY0C612%jL;SRg%!!MTk2m{kLOdj729Zm%q*Gqi0U8&O!P2 zl+E|!P)&@w8Eiaeg?H`i5?d^->vnOA4k&Rac+t^?A3XP0#2S7aR=NC<-=5xQ5irCL zuWsq-#+EYZ&BuJjx*Q!T&^m0U3N|%@6 zu9!lSV+BT&PjK12y~@VokEXt$ZK@t_YU?+1z-V*QW-mBuaM7KLN>DdhFNOQ(QrTu^ z2p_0)xl(qOIRYxVyJN)k^b}@Y<4_&1^iZ&zS(ZHohl{EYr|s_*zm~j)n?d1>qu}s# zE=L7fZ!I$~!;KxeC3K9em2f6mLVWWXE``M&94cfYcI)gyU;_aokc;J&A%NzDaqzpR zq>!R3BAf-gb*!E2PXwi#{Rf4XjLf?!*6z8uD2qbl?V+6PxI$T`@ z8vHBD(;e0y>tm20q|%ljyJ|F9G?42b>?8lW0s|nmk*&p6w z>~+&qL-G^7&GgQ2oQ~9r6la;*##kbD5B{)eTgKt4FM6#eQ8F+#=6zr&*SpaXQ&P2 zM<4RV8}axtDp2r+xwq+1IOvlag0N4w(PPO7@o9!g8o%YaDnF4_0AynLk~4mpG=Sd>5ooO0zW5zb&j#s&-N z)PuG6s!_YDo8O_8gOZ1nqF0s3%e`P{jp23CIH@mf(0RNA+@*Di)BfJCH)0T@5@yR` z>m0Kdgt~TGGGd%wjT*Ox4|vt;wi-9Ed#kmE|vJn!M`-n>QS>dQO8yk!}x=S za*bwS(6ru+q^ZbHsUTqDDP>u~hHf)0WN)g5dMGA_cp0%TmJ8bDSA z@4!LrVjh>{>BXr=@+zrEm6h{Wk)CU5%wU1!-1jw6y#wQ`b$NPA-!n3%Djq{K8jo9$ zjWmNSNv>Zp!s=>WP;=sOLsZYeIRM4OKRL=|Tf(am4;1&}YW=eN2e(-(MpOe0Of zebx@@T$_wy?@xod1h%1;5CcdqhoL6GwoV;t@CU%=e`YL!J zQ1GxWBoD=_;`cJ)dN)XWK`37S!~1MN#0iB z%t5P>T!S+OPENIgJT-W4 zi0lUw3i!(k%*2nR8=C0$3w&~$4gkxLG(FFc&a;yQcA$eZz691vU7f;hfJP^RP|dk6B1)H3_e zw3Z)cMc;S~jX)y`Te=EL7HOtZa_9~Z=;cpJ_AkQ2pD8XPTC#zaD&CwHnSCUMK$r`DWQ$Dt7nmSwsKn@gnWPR$}ccC7hNL(6?E1$5>!b0{d(>1aEW z`}$v8XX_MPlHCwFS|)HAk2v{}3SdhiBnA49v~DClr=Llk5DIMQI`%AJ5xWk2?%sjra<{oD$j&8Ma>7_sL#7QgKV_*ds^IH!yZ?{*njtiR`~WScsQ4v@ee`$7%h zLCH1z0n!|L-JTc1~v2_;r{Mfa~|Rkt<%i;0I?c#(1+BUm7^v zKUk171xN*-zLATUY(1mJMQ|1e72+CX^*{bFjmtIteRAlupq!~Y;=ZqUZY-Gb$#;y+ zJelM`vu!Zu>AUAvzemaAY(+kQ9mA7q7Vl1+{!#JN9?J8y$Jk78R3TRTua2F`eZljH z%o(YdBfxXvyRz?5;hqWq^Q1h{V`)-hGDY6h{bhZ`qm=^5#VKK3?TT<$-{hBg#eHvy zVpi#V^Qm(6SvKCi>8D7Zt9_5Y{Y0SdJW^R)rgStxdq@8$)fOc)(B5!kWx<_F6)%`N z?I5hZFPc|dQWHfL-N#mFD)c$xV$3EtJ2_M>5qMamv9!kvws*yfuHkx^&Ze*bHe5e1czH=ad!p_Gg`@Vw<V zdVLq;7QGh_>E()sYlqAIcX|vPFwY>&Ia|cp!f}`$M3(!x29U>eHiG-Ul;>HaSX+ zbWPH|o*a*5uu5NJgf94d?4Uz@G<9o@V-L{3f~kiJqo$dl=?uFGgWWEShmPFWyL6l8 zs;~RB^^BcR$H`?$*$c$)JhdPWC7mp`u!8&YJ8V}t4U;=TCYK-(qMOy19opOI`y=x> zk+nA~!64moN5<2*Es@&==0ds}{t+XIFi+}J07lYxqxYS7SAD|{NfVWEL)?jx=-yoc z#_WSir1adqN#KT^H1(LU2zEI(#A#?}%7gT^K_N*)?1}U^3{YJG$~H8p*x!w0{Hu1c zf1ki1M33uW2l&_lHe}qIA}yIi{E3V>40eX&3=ExZK~Vh`jPK>)5aiF8z3uq@tsMq? z8ePr*X*U&NpB!;ni_o*eG{vsf-%A4$lFUb}hrqCQ315nR0_c8vXrkylXnKHz!%7Bv`g{h(jixLry)?v^Eu+sDQ z_Mb+ltRnkKp1O87QaIOH-^nTuMupb@wbpR?3esJ!vduGcgxwcdkk-(!5WvQx7$E6n ztp16a+si=T8Wo`1oog)CyMd0KVT2%};r^8YmbwuVs>SH(QGY%wX_P&Y-y_h-9}z*` zv2Iza<*daL?*4O?wyZl~B(wOtCkTfh(OkjxA4PKV*)*X(PIxzKI`Wb*nS-moA&@C? z9x4pmPMev4YQ370$NG#hK`T~hK?vzjO^{ksgh^*Fsp4rmRBJ#F!I^=N)-7amEez?5Tw#vmTd3&)xVsE>w!Op;%A_%%=0^ zjbUp3&x58v%6m@Z#5IQVM40QuNrV(4vw>%=XRO|Kk))SsIsu*wl1UT)I$uhBHV|-~ z;$}wzsmuwavR9n7R~&q794(L(Wo399|COSbGL(GD__wnvK6Y}-c>n_}%QloYs?qPf z%N7Gr-02f9sRF)HdKoU z)WQQeoLP~ux+wB9ZkwR*%53L(4QU`QVH_3eotmzG#wmvMYnYR# zVC7D9GdbOr=KR6wST!`2XrvI#jFCKVi4sz6AL)(v?C`GMJ9P_J+@q&uV?#ViB*7*| zcE~hMIw>N_U>q-ip;K)vbe|7fTx@0nuVo3Cb25z~(5^Vl7<|6e*(r8WS#=B$tSCIu z{*yyM0b83uun5r%8CBF?dl3%HkiE?+M|mMW)TgmpN%s8r5+7UGi{{a zK9cm$iXA_q@_)uRMbL%7zas}0=-CQd4Om-2W)emdv(IPT?0i;JG58~HuwWEethA)n zWNc3_cSN!mNW@bnp8nG3@;A~E)uL_C`go)54pS)H0msKG@?|y{na?oxf;D7HR z{Y8G~#Rhp53k{`b@ZPsZbGFFR=?9cmjid@IH~QZv?SPurAM(4M1>LWe0m&QDeD9IA zDUxmQgK=lXkvSefpfezwAGIcAM(~G3xcM@)fdr5AH-+`B@v%YD-ht5j-BYy=X1U&V zA74YHKid{p_$w>ser1F!`Z%1w;uvcUQ0t*KbojN@vsKc1zZ>?e$> z0v*!+I3}IGqKD)5OE8LCb$4BeWdc!5SBTAZ^^aW&>=qq9?$=2RjSu@{50^KdRQqFC z`9*wBSGg}^0RQ|TtFO6htxlS!r6k#Y9!5|$i&FsVrI*`?#= z%a;r9-#v||5}{vz>3*CyCEs4?!TpPmD>IIuHOnj12Bg7#lytf8%oZto&!hyu{`=5i zj6-Zuwv4f3PgTyZ{9~mJ{JI&FEeHsqtH5%3l`Fwkn)UlXE#m@ish@q!?M1KzV>|aDYrYO9_kJvIter4$R8J6q8Lv)rJ{mwG*oeLHX-&*(M zI3otlEGm}Jk}~Keoan4M?%iF$yUXJN1su$-Vc+^}RJ)PrOAtM|9;>e^Co_>G8!Bzu zY(E2Hv##Mjn#Vov3X^3@_?~8?qWp+!1TKb0N9i$&uI%n;QT^1m&J(j8z>X10Fp>)E zyC7~ooGnzf1?-hM1gk$uS#3z=?}wDN-f2aHAXzJ4{1@g~ zR9m)cr(rkP3YpC+(3c+{^BnKO(?uHRCbh_P4lMv< zHb68{?XE94f*qU(G#T{hw&)-(x80CRxg@9b8y=*0YdA}Ub9u63J57FAl@7zFqh3rD}G7jmY4^d6^zxaaiQ;A8P`SI)Yn zl38yh-PnD&DpozewbOlfPha@H-34i!6Jzmmlgh`xXm$-_%+<1vpR8RM=x9bOMP0AR zI{Bc3qk@x_`J>=X=JKTeJ_+(guS&nME@*kv}K9e9Cde#%-DV3qS-o{|W-P?CnZ+UEM1$ z$}*(FGAGA1(Gk`D*>({vM6*`zitqy~qW-2NQR`>hQN@%Xt3hvA(_@ugF>bf{tT0 z>Z>nvep!Bfdjr({aKT^32_Cgpa0A{XsbFy%}aU`T6<6W56P3=i>0OH&JX;mKEOY z3Ilgue(tzDBoh0zGQ*VjF&@(2`^_&;r(L?WPXKKjjJR2%g-(ZE=nWepT+DqQ4uJ4$ zUJKk(jW4~DBB!7*(OL1&L``?Hx+webkK7NO_9jE^qdz(A1L=+={)&exCWp|@wp!CH z_B|gr#p|x$JiWZNuU_Uxt#HD0DmbT$<3#7TAO_R(`4?Xtju@{OrCsJ2b4k`$ae+8R z%yce(Q$8Mg8(+peQ0oL_^LL!>jc7Ttyl^l`9@(VaLJyXSp63gnYx0S)iS578asUr^ zkxCa0Us#fDv08&^2u=;PA%t=iJtL_eMAgxw*ap3kDxX`0936+;=;>lZKnJH?d5)X8 z==~&c<;p(3%4Dcf=(SFfGG$tm1HQv(8qS5d`8|T|i4PVbhz=i+rOz{5EJs{Lq>Y-_ z{}H4d=Z>eJrI%gl#F5@{9<^xf*C)On-4E*EJpJ%6Hqj z%e#%c%xO00Zw8q+g?y6x+nON_N_H>z^x;&mMCqa>3uP_On~E>Co*q5H2K`3c>dh8w znLU_PcR91X05+_wO*TCLpSFsp%HXe>j|FM|#3X)KI@ghEzW&pSVj|9st^Y+5h*;B& zYGT*lNfht|#=K+bsd&wJxeebKt>?o$Zx6$M89o%|u2>{p@TV78*vmOiCKER4BgFYX zFXwY^j3%|87ssz`ihW+mYF4-s>|(%Rtz7c~LW_6qY+H{ui7bb7)WeU>bqK(KdYlrg zG*0m9pmx#iTDy{5W=q8e$Dbd_oC}YL5`0Xt@t~GDKko5+V1T0mZ}9(3bGc z^dESs9!$N%vtWo)9uJ>2v`;$>Dn8ftk*3-? zHG#iwPBT7?rD~O`8y!bl<xFM$yYe6XO!TUYhhLR(*LJ9F3mMXUcyP#s z$IaGvM%WLp8f!cG{~VRO|2_23C~&^!XW)|YsO+ejWixMR@T`~%U0lqZ-E?Q_ ztig!v$4g?|3?o0bcI1Ui4n> zweQ+@ZqyEL?yIwgeb#-RF7A031xJxHbXO6~X8;s)t)scSWnW%C!O?pKbA}OY{-@`o z_( zz0}Ro-;Jk@`{sEQ9d^CQgIRZL>-MaNO0or+N!%mT_MdAX5Ye&no#rQOVVk5?$$Ds2 zdjVXblCWGs*3Y^R+7jU=Hi2S&&-%5DOo?kHR0Zfd(>+t4i^Gd$WnT+VnJIi?Q!Wy; z)$F}`so$=P$mon;bi@AY zG&^Y8u}T}A$NWjfCBUoT2ZoONX~tSJ5O7j-4BwvDEX4YG`G{fD9X?PN+IbAin|iKd z4W^S;ogzS$5xOL_z$M!=L9F-jmi?0o;>_&l(?EmJ01`+(%tz9>oHZE5NJ%P1L|}+J zvy1ebp%@otD~qJ)I6mmqR}Pc(ov~P3`0iNCf8@nN;+^Hf%p;r+kopu;1jn3X}f6S7bZ z4s3O-YK`9x#hnUFDjW4{SfdM>Kbg=wabqo$^Igz2qyNxu=rfT#-D#Usu)O4uxRzGy zGg6A~)RurFt*Eq+`DmHi2dwvTAaf}j*W_vCd?aaEjSqOG@s6eiizv26dmM~L`AqRw z)N&k>ovdqTMLBNAsxC-HV$cb!i6~IgnjTB!wF9=BO-iS0JzwKsNq%f&1=3lC9xb z7+>igt1`g6V(D5$V4jLRu$jdUXs%S};R_k+L_WP2FL`XKAT zZDpC3Kmh6^9$Ih9LZ>qBd)7z;%=DZMIAr%Zlo!chzm7$xzOUdZ8h|=q)@ax^`GC86 znM7aj12|w!TqwUE^s-S#aMu2doM3RDePyGcR1vJk=7U?T>4p!OCMPjo5A6z$feGjz z3C=j2kbcn(yw#!i8q2OVtszce6SB8Vq{Bfk;9YKXB`k^>x#UhPlje}QsRDZ8)5MiM zRx#>ESkI#^b$4tz5u~l}$&GZ&F7Y&bN^*1FaRbiV(7#eo_0@`QowQFJ4nXc3hts!# z#{+GThsBsy5(JN9yMiBYwBE7u-d-*0Te(yA#MZp`EH4Ldym9P6_RXZI;@*?2xENGz z0eLR;i3-vbx*nGJseM~k9DdU$ub&W|3?f`e79~MNU~-A59NA5no@1Zug!3gImS}D@ z#Q+oXqj4){Wi0W0b2e4X#LVHDJXR6aUFLeBZj2ymsJGq}{`;4fnYPFc3l~d8sD%Iv zx&=NGK2R4*BDgaX6Zh3+LYz|rV5Tdc!lli38*-tRtwLx&U!O;Ylh2!XD&oGUHK?=B z%k8pKPgORoEB#aa@peAA_~V@FUloA#P|@L$KCdB00pxg{B|SyI=2eYUiVkR5Xv=d- zdx|KQXgw&78_@9%HYZ8HfvJiINDu9lFw-)mmv$BXw5fp46EU346bbIiS`-v24ZE@w zz!Lttm=}Oqnp^bw#&Vr@%2gF}S~MRUIc4~(Ab+qhIRw7Yl@e5~!k}X3p(tfiScyV3|jIStPP61o`5l z{h@Mm$1L>gFacJp(*g-Z&5S`kN?7kMP+EYff@hE8H^ci$jQ)N04c>V51hG8c959|? z;nH>0PH+aC7Xr|ZaECud7Kftnuq$Xd{XC>f#a^_%z+v%OhAs!HuIB~&7VSlQje1_} z*Q@3OlxPXGK1-X5A}m>8HMLAWMC|Lf01T`$I>*0W+W3EXBj`FXrSapHz{e-RX1Wpd|aueY{vujI9g^a?VrEsKBbzO(%YctNG*!HKHpGt1ZkKLZ(YvCuc50V>_Zmgj@XCYAV)Jg?E7 zY+xuD#ts+|I2KFq0^WGq`?Gwyv*^!!M^hkxsNDs?NYLF;f`fb{UKm}K(j}$tQa87| zjB@2mN?p%`JRb-ke^)z~fqe7k5C&Te7u=&?5JJ%KbT{RD{!Y`g6eYIqCkO9bu+ILKWYmWQ#JQhwD3IKsfdk5C zO=*~U7b4jzM3|(p=j9&=Z0LCb1CN(;Bs_Z&gUr^U#fSb6uo?g)5XQd}Z7`@p1U?V1 zRwBGrdDJRFg9d?i5D0kj)0g4s+a(hb{#9#wGU42FA|mm-7Hl->Ymo44L#8;&DCC8( zP(!Avs8E9nA|fY*dQ!yNJj*8)zrm|Of&gVudq#b6H&k1oAigsQd-&CItf~;5)y96? zuz?)e0XCtr7Km~E*=$iFf6Y%d!+95<*)^q?alU}F;ALx!lqc(8jM9VsA5tW z6nr(R!fCv0G8nTczw-5o@dI%(f&8N)9O;)z8-~WL48;O&wqT13W45Vg$t?d;+dmkO z&&&s%8aZhCH9E$K7QEkZ@wp*Dz-G~Sc+GGTAhw1^S-hS@$FkWa3>51%{L?PmSqXbg z=bq=NL}SIJSGQ=urKhStH$S?#xkUz-LKN5l-=dgv-({zgAPGf-eS1Xp1-!$b4QoJc zK-Xt9tk+&7S~xd1)+iA{4OVSC04ren+7By0mB=9Yg9?m>u&Yl;1N}7tLvLy#to%46 zFoNk7wU)`!gnnPXp}O1f`zTJIRO66~7}S=%fooIv`gOGjh?!4G*Dz(@=zW-~B%G#h zwJCU{!u?-=D6!`%hZ{!isu*dA7DyvPXjlc8+8rsG_QEA1Km8a9pz$^{<+7yS0{3a`|vUS!o5VBi<*zTl4l;xYWQ3E zD8$ZyydcWk4=J&mR&wfb0j4}WR;(kjomw&K*@#nYrsts3*NINz6c7$-SPO);?}R~H z!M2tPYIx@lYaem=XUii>U-Z@Hr7$OL(K1qe_n{{R(?xMC&(p`CygR~a=0$$V;kI(P zf0WjSCH{>5i)bO?L9w$7H|A;UWdcz*PJxnGXyB82Aw(#-uNNHX!vN1L0b+bUbjAnt+L5pNMe5I>6zz;6JObpUqK>>hY&(15dI1Pb6!sh-!)724(UTy+I zDL(C&wPGBzI$hX53#QQE-xhC(g|sqQ^%eRAvUC_CR6|^E+V3VzWDra|zfC`rSSa}P zvJh4N;(|ZvUFlDASqEBjLIbQLlG|U_z~P`SFzX}VxxI%%_I>5A$5N*vS{cy@rY%Y% znaJw>@~8ZwLkZe=`MN`1h&~Z+QC5$1wjS0y zS251E7OdQ0{Y_ZeOl$ZK(WI6!VZ9Wdb%^iOALFz2ki6ToBGv9@iKnu3Ax7gvspu!dmQf;*-2saCGQx zR@vH(e^9#0)9lNyKX!hf9CFJuAu~Cu+ryYKe0%W`=IE z$9G&$ee8ptF~@m9=jg2(tXnxIl22I++qq4~hf^nnz-B|^lKth-5X9Z2hsVx%;e%$G zBm1H+Zo|5TPPMW}^w!t-IiDZuxD^~NT^IZ)7j!ihQFH|v51M+~yJyxHzgZlTUGwJ@ z*KQJdN3jGeT)w+Dv7VafRQ?HHJ^alPjk3zs_H=vt^trD`w??Tork-8&;>XfN!-wwfPU-IM?(S|SJRn_%mhKYi5F{j}8|hZ08ziK=;oW$DKfmYw zW7b)F&z#A%u359EYX3kcE)sHSzj<69*#JizMVKl}dBvWJ?)`N#8U5q15M_!buRP{R z(u;RsgwitUmoPyxJXwnYx3IQPelvU{Cek-|F0c|s>a|QiHE~Nm<9qxa;iTD~+_mN7 zY0Hw}vbA^Y-x`FoL=hS*dMA2pvgJ&X7z6vAg(R>*3O7t-S+#KSb>N;Lj1U$s8V;o{T2%;z1C0@Vf2BGE3c2DyRb zsi7J-`6hU;P?zzkFUFyVJ@$5qq7HqOe)IYRQ95KoL}32C*>#txs=k$c{GEB%w(lhiCuv1{gKI9qj)GB zJ|VTZKQ#mbo^>b>b-dL{7N}l!Wju#okiwAe#A8&=Yp5|N_^Bm0ET=gnS^g1MUx+#0 zB@xl?xvAlb)9g`}kH00nC|M`dY#gfJIbVrYohcLkl7eZwWs;B{49aEF?SyIMYe9!N zVj|!akYXaFZ=BOLgD8-8th(VUg5gLNZHl1T5B8_Z2yNqcZ-rhjpuL8PaVIS9%v9kNH)|oon5hbE}^P8aM|E@lpG?bG44Cli_=kug0ropf&Z6 zaOhlPkr(&S#;y@0oeGY*F?!slymmPl4mO8QFWh#W16E?R9FJZyP zzby_m>!E-1M9^JS{L-tXr1+9H^!xT4HK|;h9){6&x(3_KkcZ_|HGGx6or?)v%7Ts$ zF8$eFZU|GvIzUiXR!M~q`A1K`+?NL#2K4oYbA9SwS%|qC68IN~U797qn43wEm%Z1< z+ddZMXt?LEolhH5pNXsse;Pjh2oGObK=pOe#+h7-@JS~{Q5LWruB{2v2H1IB$K={~ z_a1o0yyIz9a1ZfWnk%*LM>TkO{V5Urcw!!4 zOa6|esVbxu!GrfL%*^l9|0xL!c(&NM+c3qY)@`QPSi>M?a*Bz?)_CQ8fUN@>n&U_K zy~>nh3Huy(gu}nv($JnBT6{GXDRnUw^+W}F)J`>n{F|0$&{n#pf(%38)uuMzB-f%$l`cSfdjXnf#BjwELwFf){!)n;gOw|q+XjK zeqAq@v7zOss>+(wI8~*#&$UUsekDy@YFbADCz8O?)d+Qq7L5|KYrGp);Ig2~>lK+Y ziQfg9P|1t=J}jipQzAp}LU$y!NO&+{JDGxbQtZxqXXycu3F5)=Mfj=WfUm#}@#&KY zKgEK6OXm(%{D~)Ju6*vh>>}uAE+veDAM&>qnUFUN0~|hlq@Hb+?2Q|WU0=H|1zW2o zpO|CC-u!UsE8}9&i}E*uf#tSU!5qu|Y0;D<|Ik^6_=?z+nWA`oF4Ezg+%WrmU*Ki9 ze+C9Q_-Da5a6O2j!Iq=PA!Cj~3}{d>$6}E(xRfs_)3IJ)D&#(lbTeso*26(>_|rf? z)_Q4xSO&5zK`c8B-`<2^Xeh&~TKL#Mv%3G-(kRG12hP7D~~Wc-GBGDT}njv(%T z1jSjWGOz2kxa`*B9RDLISqS1%=z6hP2vU~V~k{eb892DHqdE+p#8 zi03)$0&wk!8);tE6*q3^T9b!*3E`SE&WU0^pQkRsBJ}4DGfFv0BaN1agN=pj@Td2< z%aQk*V4A=3J#l3evSft;xE{m}2_v$N)ZKKJQ&u>V;?b%xv$fgvvIlSlvN&)Bzf}m= zA@_o7Q4%2pRruuwX0e8Pcj%V9yDaSR8rKsi2IF@tHdeFiCZ=TZaqR&_9ifqdzl1e* zE5&Nk>Xt6iX9O!S4$0T6VZ^xff{T~LFe_DWY!iHX7KaR-5hb=N`C#*1(+L>(J&hLz zp5!i)S;h!U`}E-xg@zS4ew&s-GxN|hLOA44_;iEpCw$bpxie0}G&R!j?K45wx)W{P z%paNMe!GaPn-%M5eNP?fzb5KjO*D(XGU=vf1PT4b8aBFJyK69)Gm_#7MXAnF-R6iRjz)4#w~x}KZ2e=BwB?(d>tWcpX>`&+OL zL5dTtcM^tT1^o%q4F3Y@Xm>wt^Lw9Z&tFv|ehvHP0uRT-AuPOv_( z%M8Ove^PQPwTg0DsLE#d)nRus1TzMfu~kLP%ZX9Qm0gx((=3|rM+dH{-9`F33Gr)B z5vLns(eWo{HHHti(~9aUQjeuLcYJOotQ2T{6y6Ak=i1qIbxr4LTdzi~<6g#+on!;?r!*Goo>W7US0(VwTX@L2H9MbkmqsKS3Ro^I2VB_%m-p<0k{SMx5LF$JNPbqhD@SLaok&! zSqkJwI23faXX?*HMY9gCg06#ltjsWL(Gwya+-A{Z*}cFWjViFE!3U;4H$HoN#B20$ zHgfzkv0e3TrW1`Wi#RGugTEhMBQ-$=}q;YxYb%M1Q<~y}WOg{hy%hhtZ&5I+M%zD>!%@@giX0 zP)fIz*1A8Du6g}H{-?SEN-l_m;M8SI4lrE{MAYRLCvkhW!ICPi5)E}N-;IZ+==xsm zqa3`L?i*#q3peSeb=|rMj#H+VA`6guod5?V7Gp0V}ys5e_9) z`k-MdXf1$(XHG7o08vPS;-lSnwvbLTe5deBcUI@(T zkk@QCPp--6QYFXOY$Zo(T*;IlalOA0H;>&o@sZl+DlN(SAj#y}i0>NM?Gc7zNM?OT z3;?OjTYKr#_|HxmwntzguQ03e{#>J!E`ZN_*LHlmuF8bJ6Z>nUqUYpijW-Ex_8LsP z-JJ~%6Cz}=GB2#ldUkT>0s{IcaO;VcSfpSD7cGJH#NsaN#Yu159=QFJA`|~o*Vm$= zRt5;LkUHkjj*&U$Y|p_UI3+J3nAM9(9%f!W30uyTx}5BQ2h9a(H;%%QdzVn~!kP$} zn!VQhL00p%#ls7c-D~)TfKi4-S4GC0Lt8~=>^HmuJ*Zzo;03m#O8rr1+~San@Z5+= zmcI#^k_M0eH%ZSe$oGFkbqr`8o_~8goU>|^d799|E?yYvE@g>9v`{)+J6lCs2?l$LMHvF zGgd=xF13ifC)s{?`)&QC@_uh7RC-8Q7r*GbdZAqO%>_a5EUNu5o<`?nR3{!kZ4^~s zmz~5l_N!^*HMom7Gx)^A0-jUk$!Y-w06JFpxxfr)*ABa0d z??`89uX7}tb&7RF^YfgOjaV?&-~;~;?uIcYrGTC5|3j&@@Hq) z_=}m?AAhUT34K$t3_sJHjM8kv50EF(iJKf+WId1El`!2LLn`ZR9@Wafi;WP{1J7g} zgHPXIX!Y#k93f}J16lfiO@s%G^o___g)Lifyv_R44q(@Oy4+$GsvkSKYF&gq+}0wG zTg{PY?cOW2sGc1!bRr6Sa@nX~kqyl)%y?2ef3EYwraNTyw{WxVz!>3Dv6243pW!B?h# z{@9B{WnNE~j1d^W!!Xx1eVJ$7wO%?%7dWjY8=tutoD_cnZt{4!-&%WVdA{S%k?y*F zUR?7re`%iZwqPMuk4@VOuXQ~nOqldmZ<>#({n+(%yFa(~a{JV!PH6&pIT~c|dd!P_ zdz;+P&WJVP8ig3IEaT=c^FtMfnYqQyWs3RhzKoNO8y?4GVn!=k9`#qtVMW zcDVATj;eYctz{q;)cI0Gy!ldjWf}!4K9qk(Y+&8KCa`R)U9i%0+BOK&)Nsc#s%QR* zrX3^J&gF3A$pc%C+4hFV$;mp$iWX=ly}o*N^9*tqNcD0ThHPSWUhka7?YwdYcF&D_ zTNBQ%hWlDA{Y9(^DSA0$G5!!n53B>u|E)mqUx+V_6w}|qo8;)fr1~@Kg!|-|tV3JH z?|SGyoeaWJ{|-}w|0xRGTj@eP$ie?sFG+YuZo^6~exuOGomxZHL5E@N{MsD3z8x#W zDg|847QSGQgva(wi^4Yh;2NyJ3v{6MF*|6-_~RtKLVd*lxskZaZcK`HoVLjj6RI0Dwj=lHYAExl5Lez%x)Pe$F+x{D zneAseN2;lewO~!OgD(1`?f@i82ZxwQmPZc_MMhZ8^mQO!}5<{a=gz<&>H83InyG>JG%<#z=8@A^`Z|->&*x0A%{X6Frp%3 zmvE#}YW{t~*W`BudS?sU-kxfk@tW?68TIn^b#6hK9Rm`9bx6wMGHsO9u8MaBn1jhs z>K3h9H4U|_Ml#4ux27W+ArvOVg@uYLKAucqS#J<7S+yH#@dN%*LBD%!5ekxJLqjzL z9mw_+(_wZYjjMDFiF9G8YGIdfNv&w=Pg&=rT(4=VQuzX zW68tYUst@{+St)1MEV369Z+Am&VpzaQVBeyZ%DOL8lVv zCA)R&?7)}S2?|rpIjg}1HqPte1rE6cSFqwZ#CUsMKs69_7)W_f$GkEjJ27UJXv-Va zSxY|#=WfE};2j3)#({SX?R)*vy{`=Elks_T&vdnIsAsi_OdC7&>UmThq~mZkOjDxG zo`TfqXcRZ#v}RCcWn+q*pI^##ww%ZVJa^C*{Y+Hg=dp_ zC8O|FAwEf{1O@!HMH34VGDm_HjauIxDP1A@#X~m2&@8N%`5;OobKOvyLB_F2>ZJMv zDF@ZtS`^D@b#DbT;vF7xq#7AA47$Ac4~_{03hko$7DnNe*g??r6YZS312?{QuwD>kY|1UfS6 zP^Hy)2;J|&U|#s}$eQYvNM1V~r$`Ndni?_y^8?3+qg6y0yh(A!S0*mFxB{EgprX6TAkAdq_k^}7c_5^V zRM{~9U8vx9QbmQ`Jw?GR;8O=m6jBl5A!q~$BSax6v?3)u%>M-G6|19v-LP1SCQ*Jo zEvA%2Z^`4pvEK5w6cIp=B_U!mU&9e18q7{SijwZ4L zY9H`y`b@2*>RcchCr1 zR?m+%)uxlFM;&6BR;4Q>H(qc-sZsPcNVG_)F;b{e6#EFb`(t&sbiJM=HA!8wW)O3l zl#EhM)jMkbgt{lMC{%Rd=|xaz-kSFIgL}=O!piQRMZ%~I#0?eaq$o7{6@|N}cZYm1 zERVJ8vdu?1?U-Q8b9PD!f5HjSoW#Qh|MjJT=1~fa0sxMEOrWaBGRb>~#-nEj&vTWv zEx=w%o*5b`o*o&SR0Z6_*n$x)G^|6UL#J)4@oBcq0BAa5B6#k}Xk5MIooJfjZCv@} zI{EMtCkR;f#LhhXRY#y6_f);sqgUO%(5J35NuW%oKiBo(b+pI<@5ToNlHN(tY?0<4 zB}^Yxa=0VJmw`1w=y)UW0y+#NG8%93ZD&^vjtcXuGz)}-WWtXDKQ`>{0;z>PeVt~7 z3Y%TyfpS^Hqkv6tQR>F4OZ=J&rBw#(?IS#Odcz^{U30^uNv@4fBAoaGx=tDA?w|GGkZ>mKBi*idxjwUh!GN zyf}1cnqWWQ=Ti25|3G!B?$jl%txzpKscm|h&LM_lqe|*nYvVCX>nw~B57^tP^<3~o zPLn~g_!$>(l>{aj40L9md!;h-);8Whh2{$=ZcjMd)qLfdiz#lGKDjK2G-DzHpk)!B zJOQn@XQfdi6=e#=>@F%v6*7;fA*tW4oByT1jd&JKbO=ijojW!Z4-_l@Dd8yz&M!;|xGq!g!EjBw-V zS=ln2XAU$KJ&cP1 zUH0?h?baPRHPab;MWNepG>?CTauQvKX7FHor5;?6&7>9#MB#b}TvmwOz;az$Yo($K zO5k;uf2~J>uKdFUS0u2LJ%0u$Cn@PVWMW9c4{9y8LA<{#;AOPiT-Vz<_8T<5#*_gy zqAxDZ!5b!qju2tFS>;s3EQLr1Ev&2gze8+>)O)1vTm>JdhEpek$+Uq*#VT*1=Q*9p z3Gb>31DqfQ++6sCK->lvh(a{h!LGSeF_UVt^fq}oPoiwo(%pvhav#< z!5lM?VTiPyj00H_#UKLV4p%(Voff;PKHrf5U(5hqq)e<;>V6?UfpD%A2y$&wyoj_8 zrpE0IMM56wceo(+u&?R{GsKmSglzNa7g?h1b{Djv+_PhCrucoS@DC-Jv$}4=6BQ?XAn4l5CqO%9}9$KwdLB@2#6fQ9BiPrF3-_2Me$K zz0}IDecufVR~R8nfj6}N%PInqyavvj1o^y(kjL`mVunCH!_e=bz&e917Z>d8I!mb{ z=po`tEHF#gfa-Dd{K+WEgskI&=@)zhIX96j9%C zR?1lk31s3RrL3Y-Wx}3Bag4It`wOp(DBZ?qAVnB?Edxo?!XnLx-X>&P6-U$g*ND^b zj_|1ujx}~1m*&zGMDubi@ET@SJyxK!3F4ErC+62aBEQPo$5!BwgoQZhhS%H9(#Y;D zIoh&?hlRuXz{47Hm4wxiWnRHJ;E(FOYB3$u=8xv5(<@v7wao2UL)_gsa-%MXhd4*I z2?r5N^+3u<@_C&}=l{RqIp%-Yf&uI2<5^nJ!Y>|hk-Z98pH49h4si(4vx!Lrz%{|Z z@_EaB@crImzYWKs76ArhnwZw_PN}6|{^3nxe;#q1=bvSAORMa2AigO?yLrqFC$qg80dHGz!8d8bm=aBK6Pe*}@5{JB0FUgwAS$ zMgvYC`lIY2&hO09_*B(pq?axQ#3GJlQ2qOs{`$@&I5_^eb2{d!^6@_uSH4`fjc?>p zbNbNu=i)ZA;>d(TS9o0b9I0$6C%BGHMenM<;Na93?~hb0>Zmj(u-p796UR!P54myHVF@KqFYC1N6>g;gl9bB5&4g}9|a|WQYgmg4MWE#NLcEp9- ze;91au_QZ$TmEQS?xhnTpeN<@{-Q@K^2qs`w5DUcmZ0xFFyy|fez~0!e_45c9?htWW5cKZWiD6HA7lIrTL)~Cj-;PjNO9GJ(eCAQZ8@h)}+6IPZeq=p(Vi|IN@ zD!c@F;N92FRX$w~y-?&`R3V+yI_dD6CS+wivvRP_GEp1N*2Fv+k=MZSQ1b^~;X?34 zJ`HkH6Y8Y>@6nGxuqwH|CoPCfvn>#;FJX44$ZyA8jxgbYMf!;3*LK z2>mJNZ($*Pu~p^2L|TL^pXPC{{VN3G-MWqY*^*Dc_b(wH9_U&!JBK}>=n%C?+72R4cbW>rL=+kEuthv1*nv(P zgRw>YmD)iX0;fMgtikD90L{FG%AkW zAdScyI1ut#r-TUOX{T0L>L`v0?$3bW7^zlvkh;PR1a2K^zY`=vwL%c&#k7!tJp708 zPj4b>d{0PB>FraaWV1Fj#AyhhjTZAbwU2^C+XR;gC<-zWsGw%ZKq9MVXr3cZ)0Dgch7)>E;4j#JA*Qg?A!wuA#BwMK zQJh9oat4?zhYwP??1v9l{pf#NWQxY*y3wLK{H*2y!AtHa#njQGf^I%FTsh)~@3MsE z7hJEh82%dsc%38bt|SioRx&=6k4hWfa4?ak8ju zwKQ)}`;FJUR#~^U8$2$AsTc?aKP&CUDwn(W~`9+ zoO+mwhP;RxMU%QjHG-iMJ89u5 z6os_~@hCkby)uY}4D0Cfg83Ry5{w&cpj7N*Y9i85gtw_+f(AXOR=E6W!)+-y(?h6m zYMN&yOCt6DPcxsWT@hbP{~7XkbV zLW^gTyA&bIeQQ6MZp9#wVb6{Q7T3Lg^A-e%?VG+c-d4Er zW_!j~R=;m6mfCRt^BzROn{Sv1l7e%vt0chX;hsf__8j%j%Fq9F#v?gBMW~LUbMeqG zoh%>>s85y)AsN`Nk^`dii&~r5h}>$ZY3cCu5S76u$gVgg#E$P?`WMW2_y(R9 z9uGA(9=*?iue2n+bw@#WeC?`+#h}4^1|#0jC+M0VPEa9?vXnDEx;AB~WI0);fd$&! zE@$c9C|Q^tOjrVb-?8l@%tiuR(b};u;U@?sforL-F5zqbF?co~OG!0`K#*7){-Azu zPYZz|?#?6*(ruzi?8;K7h~UPN%csO{ZFB}3kikGmuLQdFxW!&ftUUsJGGPqV=l%3L z`_&VODC0jkk@#3^$C2M>z)eU@wY3loMK)m7Jw-^g|6TyN;P_l{r z6nn|vJ#fp{10tb$b}l(&uvwQB1Zs7dQV%JeXWccpV2(3n&TWa_o3$z6l}WI2t~4q9 z!}z)2hVy(O8DE5g<5KKKQt||1OIIdu&Eu%?FVSvAB56GDP2RRF4uBctO^qLKy z;5Sa*W)?xC0sc?~?D4>ocLZD}5CY`b8I>;-jx_s`zd=lGorD3*kEV|IKHZ>`zwW#v zso=^r9VudV(8tWe!2<}x!>RU6VzIT|1;w|z#!>74-sX=V4NPb@JA@3?9cuu+)w_#N z$7=`L-8CHnzSY|`2qX`HTkrIPf40DS_tDJsgTTgdPFS+Mp z@Rn+#3pu%f5C#1bS($6yN-#0Nu*TsMpQk118<&QvPiTuGei?Y`c33hMU zw84m&)sVdkGla(4`p_XZl3l(CcwH0<#4z0>K*EUd(SKY@c0%E9U?`Y*_W=>%Tee3t zjQ)hyuO2dckDc}SdSC^9-5N>rE^`q#fH5Y5j>rhP*~TR>>JzHNJ!HGr>w95Cz6cTR z44nU}OoAE6SA$z8J$P#P%D101@hYA?0xtrhy!y=`cY(;~js!8|as(H~Ol_vEIQjsd zDbg3AJ-f_HWB91U-sc&96A*Whp8xMnZ|Q9ja&Y(Pi6^wT;P6RMM#^Kn+HjS(QVqlp zhy)?#ILtuEc2A)3gWKA4PxIQD0@+faJi=E05)#7fXt8^^Sg4??=v zT0uA6zuA|fcpM(7BHQ8orq!UxyD;W=NGPM1GoAMQfFD=5ZZN%eVJ608KhdAfAL{to z{h{>H1|kB)Io<*^4wfO+Sfs4VH7wu;7R_vOK;*qg5%UjmjDt*jjHtW6c^_Xv8NXGZ zmlKxlvWMjn%|Jo2z{q<7$%dp!L-I$F^w6QoVb#&0b&%3wp~__-?+t@{H%+Q#C_5@~ zp;afJKIyHa%{;x)25~vbL5og3#c9N%QX^v-WWCDjN6#BC_F(C@hnN)5=y5d_^kHk4 zG-Ay`XE}xh!$8|<_^Xn3Q;`W*fV7YO8YEEM%@yGYakhPfIB&w0f*_olU{QU$)Gi^! z#K_NHK{7W^VyDc&M@%w_G0_lo9+{g|zMyP|K##<(@u)fqdreR%YxkW`FzrPfks zC~y)7)qbj^!s<6~F+DbvuT0sX$m2U{kc{LI!eY@91{~%G;RKMC3kIfy60Xia#E=ko zXI=qCg&-gVKkq^G%nBG&7N$~%IY3Daf$o?Kn6ipVAXzqiXxtVO&wQ%;x6)9$AqE&0 zw2@aJxx#K=TDig>3hTD&iCa*yu!7`!L7T@_dqE+j7^Ky3!ndcXhLvcOgT*4|G25`i zWWz|w!r&P^S}$6DZwrdyIE<7toTifu)EDN>+q;tT>sd(3%&mq0lENOs){@*8vE@}h zt}8*FdCv&U2CUwPDN4~-8-n_Ql-P+RDF7X97G}afy@zjum(UxVl28_#vO#0Rd=2P# zM0GjlVdXgtg8CS^daz=jg8FhlGGRb9uBJR)09}KyL&?{6FWHQ!wOC({ zN@3+xN|p_Uk)RY%EPSF|RQ#%FbDWmXu}=+jkfoh4CO7^Vq9mPyKdl3?Kz67Pnp>wi$5ldB4;X9iRZkB}YY~>uq-kRZ({jE%iZT*ZK+b*tDg7~v-mg=vj z#>UWBj@|gZuxX(}9Jzx;MiT|}PrV$ZT(YZNQ}GsnO{kjiOW9&4yhq;GwkFA}B@r58 zmZk}tT-4u)XTCPKMlGcFQ_NwJPR3uN%h|@@#H08a=H8h`H?PotDRbkd7K-!_pukd3 zxVcMmWqDaHOGNLc-CCj8_53XL9g*T+a<^dQYewDJ_HoF`Yy~J?m`x2uAakL1%vM22^&-{$w3s_TQX3 zub{yH4cgIQc{n)!H>(aTg#R<<9CmTSMCeQ7dOFFJ_O1Jm#8;(Y7zAY8g&XtSw}(rq zsq{Pv$Bs%|0u8!YAZ4`<3x`;jB)h3>7?r#&VJ{2ZFgYuO=9TjjZM$|e`{edqNURwxkU zy#6Z|lcu2qtR^z+lL`3)hxlDz(mB?X1Ig3*nA`2p$!%Y9lTRIQ=K{8V79WYvg{lX< zd~Fu+X{_G(yS>_V(~07l-@)dmeW2OGf3hgNPuj?B_TaQ@Bi!+Q?vS+c=EMk_{$g=j zZ%s(J?>i~vM)%0!V6U>?e6IWhPQRL4mHY?!B_h@qzutH{x4gbwGF6>PpFA>ERQ~n) zBE@z5<*#gtPGKDs8MxQO^+o$}Ri}pztu+MK=_X8fk7v8$z@qk-+sW6n4$UDC{7btp z9)CJ)*MLRw+obZ0TEB?G2H-q#13>>p~ z{$j(>>+(mu)HODAt6M;jEjDHgVQbgEUA9&%QL2pRN?WG<2sf}o0 zY~{h5ZX@6^e^cf!QYb0`>3~T`AD8|~&Difrqa){GR|}N|Gs00|#rO;k9noZUAk(9m zDkY??KL=~bg>xzBuwNNJu_IGX;<{XN;NsvWOj6F>bBr%Bhhs@0_LDQE@rEpNF_j8U zQUof=EA~ey`PN)>=n_>G%=4eax>l_qnUXkb zmYkPjHWVgubmM-nH<)Ggs7!hl7F-p&?WN(->q;ypK?bB-(6IFe1`AWwu~)`&kXWvo z^&T67n_Iau_<}spuKQu~T6-B^!cVmxTOnd45fVNx~~Am??8t zWoBDO9Xyc_|HM$>jt{i(>*EfDbb3WKAd=jKQ#I*_OXG&}Y>>mh?VUzbz=?N}$O2D- zQ?eyQEj2c(LYS8=ir->lst>)?t2Qc?L!X9uN`ORKx=dvAb2-XD1mWK#yJcI}IN~`| z5Kg!4&Oy0TD*DGY-j~VQ1=<>ypOd%4}eyPZZDN}Yrut8KxPdWsk*24fm;de)SYr}l_ft!&fzEw zN}FQaLqj4al@6f;Mlb=8P^o0CpK;+0Csz`H&Kw6a?i=1u$69 zyHg;~N8RN^A4?6oN%Y7RC~9(O#tyU7I#ySzr4RETu2OkMVK~-Wh)jk_!euf{d9{n9b+Z=#cYt*j}%p5^bl99|q+dk}uy(-iMMtD`-B+?teI zF=4E)^eSA5PNzztQBqy5g~v8TaBw+Ofeh>Pmn6vZire|n&zmZQItKKE+h`==fm=a= z73+9XL<|ii(f4ZSPvlJJ2jBn69Y|4e2VFtQbr?$VD?dwm`)ZAWaPqSWRojVVcvJNL z@K*-p@M{Uk=cInT_j369?Uwq>@@T?YVCVVoWY1kpo6lE%y|ge7Ap_@!-*QlN3j}Z$ zF=SooE-9inRdT(=(%%IUL0^SQ%F-m8Ov%xH#$Rmk%d=K(yFr3#-S?{waq)$8;8Ozu z;NM9E+)(6~@sJ|7?zahH;KyVf?w5^i?*BsLSGuurgVQ1}OS2mIQtsf*%;>Zb7dn zY!;M*5{#upOxudP z+fYs+M}A|!rKw8pJJd1%)jXLgT>BO|w=t#4K2!ILPAhUEZ<;D9hfBg7B~0Mx05n>| z{6|jXDXF(4s0|u?tYbpJBK?mgP6rnOam^mVujxo&lsI$f7>s-gFYweN260!SqXiWl zlsO3yf{UJ6^??Qk!n`SY&#^AMPztFTfT>0ze^kOI`5z(fo89|T6xW|rAn?<>ND59E z8s5yIovX$`rn*2tEB!v=IB%zhw^cw02cBpgBNy*`a`JqHkz&elk)BrJd^d^h{(BF# zrp}4#3SANkqTigKd^}X_%*axRNyvY6@rp!39GPZLxBvd!Q^~Zk2!`xqS8hnIlPJ-= zIYr~}$=hUzOMT=|l`|47+Z((!ASSwxQu=J6PCvT+S#!IK*B>z38{yD`c%5>q7bJ^w zPt!KaY63%q5Wk1@&90L+MXWdT(heF7?>;nloBpLyAf@E2dt5#+?h|f5`|jG#@r6!D zPOe;tiH2nUcpQs@nFfN;8H)h}kee77eYr+quexI_L~|Tn57P88Xycp)uF1H z5K~H8{D{r>zEfxr^MGB5W8Mjh?!TU9YVcO7HyE$T7Mv;ucobc7`a;R8S|5@Nydx%Q zMTndMDvBXsbsLJis0iFWw#Puq!7YT`G!c@4sZ$5pc#_eF*?mxibt@?V*Ni$akREao zBg>auno;GC?Xi=p)b*HCYN!+H=6{gNNl!O{^*boLMy<`@caw)9AM{DG$x-asB!J$mOnbrc6wN*!Y9l`KrhS$NqC=% zc7v$F*Qw~9KQ>Pa{{NF(uHIm_qB$_f@a6%yU314eV{-Zrw%ijfc0=wws*PsOF%w2uyAlj%DI0ElO7kF3!0y1l#xcm;jBxg~sBH#{$lIHSUMiC$<4C<0Tl?kToH#rm5> zy&mPM8tW5Ekg)v;<~JUq!Hqdxz$*2D|PgPrg5<)_;EHW;RWbzN)uCbuIhQR=} z&8$zrba)VaK!m!!JN2YKZ;B!0gWX6$lI7ZJ>Z!7JQP+*ZM$moa}PZ zKfi;bF})Cos4>0IUnnFDu|qi(c#;K)s6nvG3j9wArUN<&AN+&0M&B|(m!ty;>|F?= z$>m?V5y!&zX2a9;(A{h>uEuq8Z!psYbCi}UP>$_0Vh_3bM$7Q-T;jIed+#O>es5?+a>R9!)0WFa3Q zZ@IA>&V2i%=%zpCM+G*?dD^DpsMfue6tn*oQWfH4RKuUBiqc7<;EZL`HqhIBbJ+V2 zMihr{WD0%|(`XV3y5=#&W;d(j%1wB|MX}{!h=XNbwZlQKRyc8-;am)WkpO5u{~6o9 zh+B0HO33j^5px^Y$Qc19k^wAKUXU#2=|2VyC0eEg7YK{u3h7Yu6a)hTC6Um)_KSF6 zj7+tY@`PK+aFwSlHRLE9*4ZlHv;RLmM|&d&mm2bo>P(BlK+x7xryK+yLaAm!X`?ai zm{f!~qb;KoLMG`;KaW-H1u&TOka;XvS7>CaK5G<);o9L03HchqL<#w!igIo1zh$wP zWKull%(Pkl1$|2HDeQxE=Fl2Fc9J2uJ;L8Lh@PBQq-=k9fjpYvcbj=pQKr*0!Ss)aFnh1pmfBzRvu%x_ZkRjk>fq!TLkmnH@e0Rd|k+()M;kjC>7VJC-q1F7z zWytq2$@o1cC9-Ct12{A_OK>gFLK;ARfgQ zQtXN)r1Y?V)A~o0?Bxy38RX)P)O)Y~qSW_IADKvNfyq?l*0M1F8H+og(Z{Y;K3dOh znFu9Ar>a!&InzlAH}R7@1)L4tiab=H;*F*Q&W`AE#qWgEGx~ElJ0MW-r;~czF_mi; zN#rq=)&wap&O5gv(4a|Q$6{BaI1W4>!+El5v{X`tlNN4ylTAvYMpX&085Hhm00tgI z{S-m{bj@q%1)8bZ_rGK9p!ozdzy;9s7@QoO-2d+mH^B_3-@qkq&Yx@RSib^?+uh)i z-OK$#OqBUO;~zX4tUU*dPO8F@^z>qDV6v|ws$fP&9+23W@8`Vt!Sti}$<}qJ`d5zt zhJ>prb!j_uIKe- zRG;=4exy~eZS2(i3(;QI3;Id!vxZl2DX(Nq6)i^HXoc%nj5ly0@9W4dN5pMxyfyp~ znSm$$C1g4sHmS6;(@G(rJQYuRQQOg&vsnE5T{P9b4y%7%sgbn^q}=Zlr_GpDDz8~U zp5FaPetId=T2;MDRppu8ozcmoxnI^jvF&Wtor-nf&(gR~cgR@Cl@~{}xM}eOp+_Zg z^`l*n?*;EFi<-XS7Ozk16|dRn4;$8T{4qr*$43e2ojPjMOgcpiMMtK;Gp!m%GdaIF z{O)vDL8^CfOugeJI~ge-<+k^Yn>*mH=p6WLWkbAf~k@uhsw6{{hmtI@QC{Eo1D8TM)SDUyM!)gn4F%EEV6$my&sJ9 zKa^=^>iX@T`_1w1{3MCHay*Y+o%8E6W-L}0dtutjsd59j@MbEmngyZcFw zQCH8XKDUHt$CoWhtF^j!oQS*WMk9BXLAHAp10=Afm_M{JK;_YIN^@uWX@#u1N7={-sHQ9#wtIW z#qdTuV+V+FBeV0QXVJKK*URmn6UgJ;;0xE(@ypX7Fx{UjW2iWGAAq5yV6|#9O&8@; zA^VxuE~-!!`@@yoXWDn-DGcUoPffH!Yf4{b-c+-%t0_XB>Iazaa|0AlfAjb(x0^-Wz#sC;0I(@Ro36m zQ1k55bab?7c3xdg^$7}_q0WzITZ13hxaL?(+WxXm>SuU(qNNRmg-f3Xq8r$oi>EO& zG?yl*zw_5k;VunHeLyBLbSQVQDYzOd3<$VcOU~cSG7?q{$YSAF-Oq`3R60r3`XD7t zJ;SaDiT#(rWfkvtuLi?+Cl2*9-)ue^GHSABBynY%k`n~1(Ov*$Pzo0$1 zvSB?^v6fvVF!>o2owaByKb{;)pTW{{$l?}lW1rL?ENr&MjdFK?+(iqO!&9QiWFmef zC0r6pR?SFu=sm6#LMHwM7wq}Mic~zCiXPkk<+8P;#J#NO6K?8RdRiFQ>c|_Ur~A(J zWH^rVYoc@(qjzxJt6I#N(}(cfkX1K44<)a~7%~TQ@Gvy7kMhyfkny_{V<$B~d7z;! z2K**0=nvTJi38LXyS|~ws;YZLXXS2gL__r0P0l8zLYSXF(G(eE7~8-Vz9hqPoU2F0 z(ek8#)V>+Im2G7mAdWQKvBnwY*sLX8!!_|V&aw!C-IR|a^puaf|E8otihApCfg|~S z-T@z=0t4O&ZnE@CH+hJhuE29s99he&9)&I%ek-c2C$z`!oa=A4tKHxJ8t`ja`{7GU z>Ad8yXes#rw?nYX2 z>F!#(L!|z9@%ww<@9+OU&-)DAJNL}FXJ+rrXFli5!d$0r_09}eALzUA10K6RC#$^V z0FtG+QG=;GXkz5FbUo~E^s^1q>YD5dB5TUm7YqS!I~C&M^Qqv3Vr zL<^?Xd8-0DuaW%}7LgyV);IY4r+@L0Pr1X4uHX>w2uAF{4+Vza!If%8Y|4tGb1KOX z7HT&A(#gSXT{exnIKTNvh>3pl_sVfS-@~!9%wQXkK>18RFOK2@og`7=mydrq7U7H@ z7%|P1K(6a|j-K#pd+<4|bK;v+XrSR`A(O2|^bDo0toihBai#bt$nMBgJ+6EO+#uVh z_IfRf2fyv$2tWe82+IPFfOA6N3w~c1ocAEljv_` zP?F-+F|MVrDs{>CBw6m8`fg1&MQti6B7VhqL-tPf9rED2C`+&6ySSM!+i~7oy3^|$ zjaBiGUIzYZDmh{Qpjr(;VX!`;qliT5c@8*Bd~Sfy0&RYZ&tQ zZgB{H!Tc@li#_@bFr7vH{Z1-ebwt-WH6mW`+x+{@>vT&#xmI=;GMz=2)}(+3CDCr5 zfP=O2R1WTyBtuSN>Vuk7iZ)T(Dcwf^4%u}b5(RI$9xL#&h5h<%tc$h8KN9xnkaA1v zefyyDjsh@Wu;F(6Y#>Pd(*rXZWoZSaXkqynr}I6%E-&NRX26N>tY7-tnXOHMHhn6; zmja=;csI%#;ajRoX^HkJVumc|jA00XlhnM4m~oB{Y>}vimS>jPXV|V<9qjo7{`hF= z%*o|x@T~$K7;{t=Tlouo*8v}Kqf$o$?p4!G+(Khj-+I|8V6~^60n_&VW?p6|r5Y8Q zY4AACz==)6ap0#)&sq6Xt;hB7!-!dtQ=YZ;%n!f&q=t0p>o6#i5Klk6_t8Z`v#&vj z&u)wFa$yy%t$`vrQs`WDKTSU_`_@695QvzD%G-kp{_a6bpShd})44(efg;wu>HY`b z%s(4S8}pe?{2jc00dqyz{8)5Nr-nlL#-kJV)e;(0H>-rxzI`|B0T=!J3Kf)__lsFL zCk<@`$EdBvsTBNHh{^k{5Sb@@lE_Cte!`rqc>T7XQ{Pe?*9H2_Tv7pKDXG9}ImZ0$ z$H8|cqFw5mMaG4YgkpG}d77Z$xFR<~BikIz5(63RsY-Kegh@PT$#X;dIq!tl*;iQg z*qoQ19P%{&)VZ;k)pE=INOMNl!(ydG*k*w=t`gd4%naS^Xo&c_ACd5gVSuuGjiHJ1 zCH&_%x9bJHMc0WP9`oKSyqtr0{>+d@0c$lS4h1S+W{VI8h#WJ*^e0UX7*o{agii1L z&*FCF?h$XYC(J91F%By%*DN?p0Sv~$bX1NF#sP3#Le%2U~+$eh!cS&yF! zQL!06BK{J87=SGU7%O`J%uc1%plmfw-G7lOM}=MXC(ITTzXC_YjeXj? zb?H7;w4mT1Px(dM4}vB0ozmmYyZIrU;;kSE728%<>J_>7C1sPblJN0y{OnktOLbnt zNjYai+)QGan_N97KVJWnfPIBO46+Zmu{U016jM5J-qyRMpsf&Z%TX~hkHyq{8=f4s zb4eeDy~#ow1EjAFTT_8de^1KvZojD^Q&M`4bp7PFg^77-)9?r9F9=HBDL>q{`i+xY z5Dldw&5OQ->UBW8&LIA7%}-5Q^U+3$3*|WsZ41IQfQ#?MCcRL3N#p>2r@8W377&e( z4-;x=GqJvL2`qowErHFs4yJyNF%L^Pd=#4XofkUpNc@EjH0H0FH?6SoQT_*k`Zlz$ zgupp{xHbP%j!G#D@OTR4-La|r72UDX3jh<=!y2COk&_tohPfjQO@_xoP5Sen8MoWi z$TZ?giMkpoS0iFvVORmihk8l@ zZywddH_iHRs$Lrc22>JCi7>`~TDWsXCa7VQ{G`FBG8yv5ifk+;!&qf_73B93E6n(v zL7Pe9t^vKvBetAQT8w!McMf)A&d1>jI*(CTpJuoHs{NG5QCe#0-~Sx=njN2+5FkxdzgZz@=c|RSj{F zEmtl0EUk;LyM1(O!`+=?mI@zUmaD_&x?G*)B}64Yxipt zx^wEuXKL>2=#Ae?h#Z8iZsJ8*FEiVZDDb+M+y~4KgimxBY3tMQf{~pILvg$5kWhA~ zF!eNOA0?wIS+;yEIVljpL0~wjd7yaR2_YvdS$23FKItHU(Pb?_h1$bQ^~G-uF!tI} zgc|Su(;5m;nYtOYFOvbPoK#Gchh%uM*6xond(XU%fI%2}h*xKwh#fq~s~9M;Pm$fW zY@_%ofqFixE{g_MkcMmqiZw3fvTs#Tgu^erc4>ikMQrWrwGNN)URVojiEwU;w&Qr1 zpt<$|1_Guj_}W@+BD59RffnwIrf}L>N5<7-{OOf=w_oaPDW7m2315v<5V%%n^3v|wNEM_L zwxsd@yn|kCs4h8?8V4jDMk1OHh3OWnyZRCr(h$dijpsbyxvRsh7uQ9DK zYre2sIalB1u!w1Uu-~Lkf9q7|{x$5C96J4vN1X=w#F;OeW#nG`)Ogts<&coaz$lHz zaV>3iY{kXnCcP$5ToNbCBvhs1c)?D4^U**Sl`P8d_`%Yly8Nk}ghxIq#hh8ZKQ--x zi--KLVW)GX*AK9CP;Sb)j(!nfTGQ`jc1>iRz72@b^;l~)N5}>92B5A9;RKv$$-6pm z9=V@xl_Q!b@E5T4C@~JuiHCpsNreW$gX(5@(3pOL(Ja`u9Lyh~_$9RwaB#D5N$^O^ z+kGaPava2$l$C#h4ChBs28nu|shS5Sa?ovxco789kH*&*`viSgq@U!HNEk0!0J zxlK|{OZ~Dt+>^=(a>+#SmAzYI1@UD&U%mK1_rN!<)qUUgp&E(haciH!Q*Ym>I?4g2 z2NJkdNkAO`@;rH;!PB zTJ{saiIB0cd=^yr(ynL}@t6`L8?W@ibe2v^6ZBvC5S`7kGX{rX%t~Tk^N70W8_PgU z##nc=9JR{E-wM%{P=oExmRUdB$evnep)*U3Y)CMF<)fhoeN09_ zWMbuu;e#_~Jhwa%xvrx{Y2`BUqKN5sK^I+h1iYr@z&)D z4J`fE8F&$5%Pn64!I7Bg%{r*a^>E~+qJ)lWPOq(M@L%0AhMUUcq%-wO;fmow7RknO zJE?}0GxSRh55C@e+eNuAkF=Ty#g#7W+FoA@sxFP6Llm=Y znsQG<=lWz9>?$j;pV(JZYoixstz(aK!cAu!s@)SZaZWMhhVsIYl0^E;1`$ zJeCv8&)PtFe_zDpt;LkS#b(5s{Sn5972S9yz;yeiLw`?h%AD8rX*G1>rAjq9Q9W2?IQ@+>6g>abv1|X z1u8UVDXO9tXS$*9p^46s z`J2u#nnkflerbDi$L{u{9rs3`YcCp_PYX#y@{*&g97*Vg`=te?=T|O&C;Sq`4;euet&MID-Im}G-9WJk@YrXiO}Z#sLg1#LCmwezu?p)@^`_y z0j~3w>A+`ng?TBydWUJax{PxZ9pMB+3YkqmHnk1 zVfmtcyTYe#l&R`Es!s#4)UUYI3{#nB7p@{yz)w@YHw<1WR^PZ4Ww3pSe)KS=`cbcQ z9EJ+Ct{NpPie!rJsBvBzay8sx3rmxr7F{dWDb<~;c-?0*dwBudThP3chvNSb^^fjewlaugsSZl3+h<+rsFIke!=5foA4O zTYpJtuQIo)AIJT1}Qe2U05z~#)Fd;9vz15b)_Gu`ZnB6t$ zP26xf0qTPZ$^BsaemttNI4QxzK}U#0p@;LMkc)-{$)O+Qu#(!W%#K(3=Mi%P>80_F zq0}9h&WQDm1nBzAMf>WXIPGOFOM|yN+b)gXL(5AJF>$HF(D&&1vqjwjB607Fy*7Kl zPw1|PiAuIS9f%$aey?3FJ`iJSh{fnC%8uv#)k~!?Ms%u&*D7|0{p!d5WJ-9V!_P2u z9IwhE0}rVdci3RftbnM`Et%k|V6+G;2>sV z3-pA7=NQ_Z6NT-Z(5v@G>9if`90MxC){@~o3~|A(marZo-F~~QT9djJS#NS(m(UA5 z+tCfa<3+-{#Fm~-g|9C4=_QMov0-FFyVx`NhLOWJmq)5WI&CDgU%7D%-x3WQur(Oi z9}uScVpvDpMROPt4xV-Icpg#Fp*2LS@_E)DqG9a5>LEAJQ3xKNlf-NEDNurEJUf<` zv`{Hlo`rb~%-nDV#wfzm=}H7AaVokCP-eEO;SqQlMrMSCeqVhRUO5>v6ewA@*2Ss7 zO^oX}>5QPlH#|un^-L9-Mx;9o&CxgV6@oRNBoI?N)EzLL9aQcq(^$MIL;L)^!H~v` z{qp6Uw7BZwEB`ZxixS5lIOB0o)73sm&G$5v?R3JXLTq`vToUjY;u9p=z}sIZ-nQ)^ z?#LqXUEg?l^;VN8r1f8<4QVWPfrw_hQoi)PL_?djE)O4!FtO=^Ld?5Hds8{c+zhbSy&jnl_$ zgc9OY4b9+@CtCt2A=c(G6%J6r50g)u4l{pn6|TjqiB6q0Q1$C|_-)dOX>J($pJ_VJ z+NbBtG5#*uEE3P3>YgN$v+XL6#-k7Cbq%^Gk>H{dA_A6vS7w?hE{Ug^5a+mrAx>tA6v(v(5ZoxG}+w@5)Fz!IX_aHpAzikJDhpu%~djaKpJRnO_bVM9=~2G1H39nwZ(UQ*z#!; z1oY~&!crodqf5Wxh@KkzCCAzvL&YzBm#vCR0kMO}GvkV5i&=0xbwhF?U&~JJ(XHwB z=T9&{x31Ld!4z@6iwUAHWlN+Fd_~JNI)-gNA4<<03J%%{*ilo6eH!k8wZZTcYJf0+ zg}A|2=f#TQ-TEtakDC?Vw@#dIa(wsr{N8K=STXq-FQlqXlBgFYzf-$QT%1a&EtcRT zoSGhnb0{cIKm2|qaqw8rp=v;wNHTwc2h@`}mOx3KPWtl78|;1gcggzqPPco~(=u4) zpS>ajYR$rZHTi<>s%NH0=+;|cajtKax5>YJ5V$9Im+LLJXQ;nHV}yUyOxGq}@@NK; zrahy|7Fwzwn$U&#|2^r{Ky-}Su*+)PjM!j)KUxW=l%fqbSJ&2+*jaE{Z+ zOE>v!IL^&NMS|HL?v$NTEVhs5@T14#Ivs$ks69{)G(|r#{M3 zYHAgZc&;7jfg-S$KWF4o=xJAt3Od67-mIEhm!BjHIp&ammpZ)hB^;!y@=+C>yWX5{sry-h--;%O1$1frm>Lo^;|c)6)IA zX*_VXMtIfH6k!Jjw%B?WI?M>9>@!GO`Z4MH2Z(k;oifp@d`Kq2DBj%L`T7;d5A%Yf z7;tX}C7Y_+D#o*3c*oh?G0v|KdL6nx?{@9OIj+D~6T#hZ4ATnGpB@OBx-x|rZupY5 z^EH@5+$uly`kn6RiiQ7hSF?JOA>`C^>EYePkR+YYFsb3H&gJ?$XIPzOXVCEg$vWvL zP99UbZW+R>rMAAgeEctqv|U4g@O^^GP$wt@(;swQCVW;~Uz5(R78K(TpYq3Xv>ub` zu1A;)A7-vGN0`K-<*4=tS(%E7Nrl^%#vwjeXLl+;HFdoS>4ch(LO53W!#TTW+^@ep ziOBnYNGQ(J%!ebUDG3{WrQ=ilc`5mes*n4wXCn`0MI~wfp9p$A?Gig5#OETTb^f3= zF{@X{v1QX;N!;wDJ0g7`s^OI8qY)AW4^LO9QFKBfieF3gf$dk_!vg;rem`rgnX9>uZ(Q{QUIogCZOBzA`w(Hr@{ z+#TxqZ_9D)B37JYdsdV+z{i4D0^#^+pYgD$sp$^eK^( zO8*;9W$hgel^4U#mA|LbPULUPUt>Ky=aG`4A@CLmAJs{DIAS3CjYC;(u($WGaV><}t)P?`evAy*i=_o%qUZy;c0FaI+#4Zq-&u zTkijRYM2MK`#HAqwRVU}8sx*v#QjIP5A;g)97Gtv)tW-@Va-Lu*`$PE@gecChgNi! zbZ(VHwJ2Fua@9HLM1o9?Dr@TH(&$nTzh?z@MVLdzlD>ZVGVp*%n8{UTH$$s3)GP&h z{9D>0h|h{>$F@?Z(~h`7b62bA198aS+m`S>M!tB154(0$rJ)Nf9yy!e^hTH|CUsF= zUB6GLe>&K52!+ivyXH)N(;H^So76=Cm)pH{{3${WQT3GCBd(IBd+VP!lmxp75c(kV z$;K$8Z6X65VrCKQ8hDC1|#`xo9*lIWcTLZgH2p{(ZAm6aKk z!>`-pn<0t>#8pAGLj-7L+*@3gGhwdgZUrBHKg87~AZ~zR&<;HS3iedp6*}CCmrdDuib>DHWTi1i;rhBA@5f-_$&eF)0uTL7QLZ00 zkIL4Q2yCl2xZo(E3gw0phn`Ba7dTVfDr*$k*^((ZK#Aa}h;D&I&;+qGx`nB7BnI;k zExK+*4onr3XIp19B$kVZM5HSv0;AwbuhpmWQ5<&`cQ!OO8z+X{K1=hO#@uu@RpQ~c#$1bbXGNm_GYo!!| zyXP(4BN<%P0aN7qs#acQN~%^Jr4*dI=VC1*87726sCL~GwV5SLc^OQ+Dmu7CuAcSZ z-(31UK7~!(iczx4FWs*_Jrv|f80JOiM&;t?OgO@N2)r0E>8(Aa=1JhiEwS6QO|pVx z^CL7A0~y!AY)9Ijfz02Tufv{)Jw%_mi^O9VLkV5(HPr<>EzljbI~jF19sqwwuyB*? zeIr;*(hyb9P$*tvT#elzX-e#qw=eZEY1b$%A@Zz`4K{aXNV1naFsb}^eBYDJn)%y$ z{)>Y7;;nI*$8MZ!)pCI{yS0g@l)+oul00HGJzO+7m;0z4@jSrvE^jc`%IMZ)Qb-Pe&*D# z*~7bk9arcm%a&qcHo0l*Lg^Fn@t`Vte9jud`(i>5R#)iBi{Mm!H3XNIb41n=HlEm(X@_|iPFah_ZG``N^?P9Z8skx`v(UtUC^ zt5J*sOeB8v+Lxlae!Xm@&P^y~w#iNC&dTZW9R?n0>~fT$b{cNb>S9k4Ebb}6uUxisx{G4FQJd^1`CyMv!i+VGr^ z!yw8VZ-<$LIy0g)uaEa#C3gd7E!HFZ_Qlr{dnrZ>-gh^5mWYtc`a!1D=S-V0 zd$(~dqZz$8+{hrA_AD&)`GHW!wCkc*n3Krs<>930(M8Ykc>YNz4cqRYt0Nz``hRa7 zs8;2$+X`R08ep)aCbY)-->SNeEO;TDRH{%D{Q7>Gas14WMfs&0bZ*?A6s1j%XxxvUK0m;@!oW9sLWUI`hzm(N*tz^t|Od}Hp z`b~<~Uer$!<&i`iWa`fyZLWF#jdUsg+~c84_j_crko|VswEzC8K-Ja!T1G_Qmp;F~ z)+me{ndu&)@uH$LXT({nkO7_nUN+CBnECjGOTA|Uelt2O!C#^ECkMm#me?Xi)!7-$ zX1vy)OKJ{S6PP+QGx_Hm*7m_KeIDGQTnDc_EyOPs9V<9Dh*W}KI}dd+9MS|S{1Sa| zRa&0_wY1%XCSv`eS%Q(Vqg*}MZQq748ppft>yKmHp&}{1EcB-pJqfT z9EwpT_`w0X=rNIu|wP12gHZOtvMXUoCS1;!Lq^`L3rwZEt?;72;qUh`ajj zj>!AV4)fcJeQ1aI-HkY4&7fB*gyrw)&(4BBtirzHycS}A)8Om6#qj2|WJK%Z^FyPh z7H37|om|^m^|l>d%T@$`K!-*cjC2jJUCCWoSNE(Q30tl{z3uzO@SgNHyIKvGjWt~2 zGci&NEg{N~wn28jxBpmw7Oxxa7U!DOr0F$aP0iFhw799iQsamXSp~rkdO6N}SOUdP z_uxWOyhj|y-NV~J1CX!bgN8AK^h{P9a~mPq)hB;(${<)(J^S#ZeFiGjU0Q*hQkWt7P_9St!b;KESy*DCIuafvL>#4S5Q=3cRj-Hcu z=>FprCh8%#XhV)z5XxJ1-*R{1`Rsw4*NFlU5T$DO2fpv^vv0sY2$?@qt=$E zyTqle?=%UmghJGhss15s7>}zOUNF&^8E-ga!bhBj0 zNbcW*cndrTJUR2(0KQZ0&5|D;fjiifRoNbO7oD^@{3iGHXp}e@F4s?Jfb8u%l3eju zgOHWmyT!VfILuq+C)Dt-gg2d`QJnH`+W+tf*uj`A%Kl5Vr|-G_W>%M!sP+>efgwfn z%~!cSvl%UKVD#gZ2K=>lyyF&RizCLEmWmHy^kbAd{H1ohV>z3m{-$FMBfc#tNWFXE zc+Q8}8AxOX3JmpDIv-Gb2UM&)?2UF3xC(%538)u!2V29SZXwVhW}%wuiFYQy7JdKwZkxS!{!xtU20u#@8+$u z;o9kJ-tLADQwODsu#i){aq4`}h*ReJXYL|Dv@vh+{(h4@cs=h|KPj1>Y^y-?%>94M zGG|@wiA(VQQlAQkEPSt*a4889m8v;tzuC`NeA7a>Nu4XKazU}_LKEFSo8Rsoe5I7^ z_IaOR-a2{mro6t{zOa|<(_f`TH{bmS^VYCLxMEo>zR|J3kXy!qBs3U-2XB&w&MqGP zF(#v3eA7(0Mx7|kaY3;b!>{n?Ffahs3-gcC7dMstj5+Hs7dPG##d*C;3$0BtE7VcK zv=_-M-go$BRLuh}?+$(~^c>=KQHOgD99~`Rot>FI2|C5w`u5;}V-9Be=han$n==ax zE}`~FfW|@e^8rdLs=rLcK}8W_?XX20WexQ==CsI?+pmM%Y3~^!@{>a?0uIr4UQu(X z9+;1{yx}8nakRM{f(sYasTt@wlA^-WORFY{P)ja2G7Fk^kz&Ix`be23r4)GlfX18V`tzmKk#DzlkXwlM^D zd%4wqmB8B%?7*CU_s6>dA5L%~=a7yD!fG{pVnCv5^t2fpM`Vrl*B$1-&=)ssGrRXr z&W>irw#b~li50dW2RBaw6+VVB3V(tRJ_bEEHwPal7jWcduTocWNB|l z%g4^e&c%!^D*FG{&XG_if=-3Y&4mq;wsdrIrUi^A?4Lg5g}KBl*i-Qnd^)&db+2S^ z*xjf=dE@&|_%(q(pADuUnGn-a8^IDO?PU~0ZMU>JnK8%nl{6NoPB^np zw>{nnr6kr2p(JikNoAC0(B}73Xhq=64#86iYjxSpDw?37cbyIl=pj-WK~?W{46|F`2ovb)rJwtFEd95wpC}vq$|Nnyd3Yz!;a62Q$JYKiUZU*;{Ls zfsymg}S03JLR?wm8*-V{B?<-FjB>Z3L9^gm1&PP|q}I!sjfo;AGnPnYt@B1~bj)$A!^W+WOt`=KD63+T4r32L>!9A))2O^(2tC6Yf zQ`ajkE!be?faT zA@HvZ#|)r_fuO3c5iM(DS!CKG>exB{i#LjQ5WBiv^f(WhUVZ&q;&P-!&M=%`zB&-w z3#1S!`L!G~`e0_fkeLN7#%x8HVp1YknS97~rOi4=C!HLHOLq!0x4L!2+*kQqmvL@OlgS8sVjI}iRrqbG(SM>uM` z07qfDJk>+3grRzN0hU58hS`>~8+}8-!ph?f7GYl4auf$1mbGHfguTtp zM0^ufHu}P~HI#J~y}Pql;uG`i>_|L~)s_&e*dzT}%Z<99bNze2+G| zHyA(1A9qwvTdSUUI_r1)w)wVEFkiALSLQaEinM6gxG3f+=Divc!m1vo+vkPU!Xga>df+(oD{_5&_efjv<`Q&7$y<4DT*23|l3xoQWijXD+%iFl% zUiG-|y&5jLLYkEMZ^whT)u&Z92A@n&nwg~1KM09IWBM5XfKiEXsRQ~jLqOG+$O1cK zMFT|(mRhis??h}cpJp$b0i0cm{R;*)9meahi-ojXH4!Ye+Xm>`-%@_P9elgQh+uRW z)tc7T1I{r{gta|&SaWN0Xm*Zvz!qZsekrLbtpkGtOXdi3hYBa|TIlR(UEY6PPuG#p z?an>6bG1XM5vcLiPu2g$1{-8sB0-Qi^tmQ)e02P;f_u4^LxB@(?RXvW-1Z!{or@iM zjZlrhevK0tzx;p6QELQi{AN>Uf7uS&F7YAw98#PpYX|CZ=c=3DoDe(O{ZD!8-r(Mn zE5g;G!AZDwzK(isA2x?)=VpglBU}?OTjS=|+<31*QM+M)I+<#{l`Y zP=`@0IQfegK~Y=n5;4s;#ozeR<{SOs#FLtZCl)84^)EhGcy|=RB++WAZBI`(x-VzX z#3C;iTLLw_eKMMEF;mq0-2Xq!fR3aF-h?JX3_2JGH=iLkNZr!Ij1~~`VS}`3^*L#| zX*mI@n!UX1oU{+N$AFJUj{p*DtBEekFni)YmpO{Vtv z!mj0n7HPnb(u(3s!6ZV9a^O8=A)GE*IQcW!OabFUDw5+f+CPg~s%q*McGiAoCGEux_=KXaPM)hFk85zg(=G-VOn({DG;wir<26}2>ES9TC)Yz08y_1R z|AK)*7#4cRY%LoXzkBNyln|u`VK}ICq}GKOYQ=0&7GxHuZw1`#k%?xNaR$OX6x|$Xhla zlzbxRgfwxv9zL=c0rAmeAjs?q?Gv~#&e2N3NgD`Ml#aL>^~@fKwBt0F zU0KM{gZ^l-!lO?bmnbFN{0!E{Ps)20*0@0MFyj{S;$sST;$Gmz8wW2yQS-E7M@lDL zu-=q45>O)MKBHp_Y5!=i@EZF81}M8%#4+71OgsBJ3A{AF+{xo9>$8l0vezrK#(BUD z%HAYAj-BkE&G(W{JMp(yJRn_TC<(05y$mI~)17w20_g$&c+{@nJ)7&LuyDk8oLRIG zL$W}!;9(dS1?GWzpzx9$4omdmH$@gFH1f+= z+%%XQ`3$tLHYg$W#Ez5W>UROr{+jWnVXzOVdjHGl&&CA#`5SMLJt`dhr+B)B|8S%c zAwO_?^T7Tkoa!$ip;POGSh3Lrv2TP5ILfEwu7zuWt#`JGP^P_$KZ0NBuk9M%?$ z?Jky_nCzZy1GnA0goNMNB9+1}zU07Lf{E^&yED2jofXK%me}F`7tFW1*T+|lMUCmP zWy|>PoaaZZra7=>-8oT1n0A-1$Oe$>+~|5IwvH5OV&ozk$*!ixeXqY-&|Nv}k`w+& za*HQzCyLp@1$iuIaxrcQLr%pXe^lHiSwLNYn(=gCrUeY-{309}>vAf+9Lo)t-dz$b z^}?>~Bu}}XHmR_uVE$s{QKNYPMX3KI%@f&dAURaEBAookmGGHMlK|^Yg&xR>7`{Uf9gfa6ge&AQNi% zh$+Wi>r%O@_kl-{n=fetES~2W?<7AC*s^_r6Y_W--7%UpMyQ}slKq6rMXa;bh)x?i zSShN>R1&=dw$Mv|IE{Nu2v3^G2|s46>x4Ot-4NBL{I*?Sh3G+p=hmB+J2mQL_D>d0 zdSk_6FdKD#m?n$7=*%-%Sb211*>L;>+VAw~hDiMs3)%~0Dm5>|!HCYO?o*#PkYkfw zepaJsb4a*%Wta7F5Mt@CW!5npv^xx4aAsSCna}gm=1&H38wFjWC?WAK`!H$aDb5YG_j56+=TFS99J)CJF3s*YO)YPS<&8EoMmp#l2 zmz%uBFxs0m_U+C+FCDIOn6Mi>w zDst8>9HyF`LNvNMytss@*@qAJJFzAm$JL8tLu5ea`GMox3sm7JxZW- zAKvwhJqp7+%q&}#>6Cu9BB;4j1Z)TTY*{d1I|4u#Ot33Vu2z8@RiEnU8!D$(84k)i z5j;uUzKF{=ZMm}}d|pg}0;&Y_EIz))o&z2{F;}vJ26SUr#8@ronoBln&^R0iQ*+U^jAXbfng)ASx%VF7B2!!OsEK_oLpy%uYNAUt`_CZni?#>CZ>xDr`z5J}{Rh{+#QyTUo& z2F~m>ni&q<2faMAkOY?oY!-dit99&G6F|y#8C`i~@+AR@Es(pUu=V-4NrlC&SBTgn zCI&F9Ua!|l-rzHm+)9cOerlU4Gx_5YVE!>|pYD7Sz4`u%OwyTHX;T+gcqpXQyFl8} zMHqM}%K=XV$GOsin5Jqp(X@H5Dzl8fONHF#o2O5_KwmAl+9rOW6iGsMOSagFH_ANq+-r|p!rW2yFOdBkrajR!}tOrXBT|9yrFyE z*nEK}w73&zqcz{$$ablY1O(Q$Iv+;`^K;{D3;{Bc4yP?u_x!Ql0vUIbEdR@z{AumT zqd5>WSPRf21n1bJJGp6Al%%a#er^NF4>WrOA)M>qEtCMI(vU;<4B$=#l;p%e4W>K3 zTR;jWNoxaG&Zw#1Db#Stz98BAj0K(~vs|oJQ9|Nb`W&bOVhAXT9i@5`+p+RqZL_6y zHfF%JCG1WVPutkcu6-N8G4%v@uY4}O(<-9dlzXQRF~Jt}fq&x4Mq3VFfdhAX$x6Gy zVTyEo{1{ivpp6qvGhdIvFxVwk14We4aq4#>c2-k=o)Z&A(?k=;rsXVR{(S}rNXtJ`byh9(J6^x=fv&& z_DIugcDTo);0;siJs9o0h?JOs2^7{yHnrMo`(7BtILB!g8hd0QO7sOlBM%5;_j7sb zd-vg~;5cD9bU3rka#Z=(_t3#-*#EdL!0ENFMCbrS_gRc}3zv-RQKs=d7D;jcK~Zpo z_#6pE5Tn6ABzF7-I<;d0B3J8ko@3-3LJ;P}8p{l0#CHdZI0v46HFD>CS;I;b-3`te z3{1>a{;dw78meYVk47}=JTUQSp#?!(O)HLxEjKy^WULz*?SUDFGS0q77|D6#o+E8e z0Trc?X?fAZR47po0i(hX*0Pg=PlCruj`vWQLT%xLDWg_USP>(g1W_JtKJlEuK@xJDiK! zg=T|g@s3_Gi73Yf_dH2M|A`1WW)kdj(%69(f|ZmGsaidrF)M#n2Y`SeUAJ@$LfCo1 zCDwIEesd3dK4Su+0x)3{!eSlipsacsA!pAz3D}~OG8C9U>teU+?n!U%@qS%aBeL^6 zH|vTTjg-!aWjxCJJA3JbRZ6C94F`EQ6{O$ zXH&JB!#SF5!IJQxKfj!4H?hFOind@(|1@bc9urJ>mA7&R8{bhEW~X_{)hIxD15s(* zNI%73^)ywhn0^OZyy~gM%pVm2o)i&z8JF_g9KzFswN6qV2h2Z+dzaEFV$?}7>A4wL zCLk@V7e)RmDAg{PoyNo7wKMIai0CAjbMfbX_@^$W%?11RrX-y7< zTsU_+r)W&1jGR*-*?Z>sJgnj$_vQBjjvnd5US>$R(LMDEI_-qqb04SHc(2nM7{qA( zAK#Mq-nTR<@4AOwnS(acvuq?A{l|Np1NXeAvxMqKST_)cE?U$mv5)k3@A1|-m2i(X z&h!6(4R$^o7x~*XjXNprAKLoo?}-mST=_El0_XTEX;{DcI_pTk6Uj7T(NQwduvVSP z!hD75WqjkRV8w1owTH5vd#h018DwK>xTQGaO!qp?Pu<)DO;@E}j7j}R zxW$_-JI#GsOJK-1Na-qZfmP}kk%4yFXy3kDul(0_!KPgwq)Q1N7`u_ym9T;)=Uo9X z3uV*bwOl{2)0&9(NQ-N^igV;M<#-J{p3VBw9Mp3N* zXANi~)$-;0jH`QujVjJZ#&w67r&k`kiK(T%NcJA-UAzf9<{93NQ4(yRVSzs#5Z!v3 zapiYR1&G*D>Vf@oX#uS~%M0&yhRo@g-`HFh)gg3%Xt?eQ2*UxbFN5=LvHYK5=IPGP z`^^B*c&>hQZP}>>5#3eR)49*7b>Y|c;XFHnuOuuY>d-cC<;W>-eGyAT)Bx1}lBQAC z&rim2zKevi8<02~A!9f2MPNZ$ZF3o5mjG3R<5{XS{D>@ zOQ96wxr#gkyD>BJDi%kp;H6@Se=l25jsA9$4&~61MfXL*VVDt0{)HjN%_ljM9?+VoZ6%KMX0T0N;daR>e zb3O%7l;MWUq|Ogh08g9}(mx*oEJdtR1AcC0ocY~wo0IcCqy%^{qK78SU*dtxjC&bV zEDK-)4-&3W>GTn%z<(!QHjQ6rsqG}B74#Gto_|R-{Kti;!{guQUh^HN4mww{@<$JV z3mmlph%)1;zisFlKl=w#+Xhi2NP$Ra{GJU57RK+V(vYz;NL`G^A&=|ieb{Gk;oPLD z6>XJfe&CT+NLK~U`D|Dc2NNt0L!34i=<3RBLq#XHJbuo-JwHtS?%Z?_(w(7V(q8W$ zemNlxX{;A9sNlDAXZIi#9B~o35B?|`cK*>|=+qey{ShJF3?v3t??fNJ5bO*qyOV+@ zr!HIW7XOR>G|G1Xj0(b??lN}ni4Xz1eKQGQ)G-MGWbVU1gnC+W19FuN{-kW@%Q41f zNX~SF9V-w_fPs(p<8j>pj&x1z5$gUi)su#m^iEI<9LG+K*|eSJaE^5|)QDX81_u~6 z#s3^mnU3PAIkMdxFlKvkLGOdJRK&X}V!-3%z0x_XEeywksdeb+KLwlI`<&>JVZDio z2S9KhB*5r`19DH*mX`2Zl7ge9eaPm69DdM{rgsH^isZm}So73ww@+3F4O;9y1wQQk z7xk&!^IxN{qgq{v&4#XD!@ZvgTpJ*r7hUiAFU-j9;%VN=b;Oi|ouqcTQLDzs054#< zHN1BUm^e%T``ImZ zidX-`-jg!cd+enVHx&Tf=l%(yR>1lXeFL?{hP`A{FhVdZOdCL-V5bwJwm^&gHT)20 zQRjX-Lj>4@$?%^0;NKG%gO_BYmH#R7>`XkQmw_#dEd~qVn#cyv2k9yLv#j!8xoC&b3(sBr!n?IN-_L6*d zV)8MJ`R^z2x)isqrYJoeI;{9F^4rWB=+&02fD2X~gig4><+(~7{Zky#TLXyDvpy7D zAdA9w^?+5CWbeUs2kpu=napVf)pP?uf<&3O@N=zz~QzU6tH&a%8a*6^;= zl1ta3z6^}#ipu>PK!iv$E6&xd{D4!4_^>#gJtq!SmF10)S?2@n6@L0g11vdr#3(c@ zY}?$kq4mlj33Aza?%lRm$($UEJ3ETdBGPNgNfKJTcUyGdAON>BZyoR~y^4@-iv{|( zfqS<_Yv@uQ8L!vDPNpx_l3sd3zleVW#a_vx!u=;N@99tw+eK9U*^6NJ!AhZY7W^1` zFz&>qB=rCE_9gI8eSiNEvZTx?yD&5Meakks8q8R-D->d~CbC7Ti&Qg=WyVs3WM7lL zB1M+5WmgK>RmhTv$p6mh`&*vp`91&VdH&1m^?AAPb3X6$IcLm0_jAtYbMKu*zG>SP zbpgq^1a{EfZlOa+X;bvsj*0p0+!-yU-yg3@dCb_3stZupoB74*+LE&IQ!+DlxBK>| zndP0gH##I|B)|>L{DoO%z%M<&QGGwm!ju2Kh7uDSP)#@Ki2sN@l=;@a<0s9v5Usb1 z1c2k!j#f`TbNc>NQ#$9i)A9a`V=zz2_ZJEbi}F45^XcW!<=>lzyq!}olQ=l&pK;s5 zZP8QbRy&LS{Umwa)R0E8yW%46cr$JorSGpe)4BtJR<^dBE0grK-#grKN0HG^Zd5P$ zJn`FQaI$e|D5;#-g}6u4)g~Q#_;U3YUfY+oFN6|h$?(Fx9q0(eYW6_#zbE<~93e;F zRV^Gvo%}wU_!;?l^i<6n?d$zO%K>o4p(^9*o-853E2Pq|XA7lo;T?WiBW)LafWQ+r z-@p|Gl3^8`bnY9g=dhGXclGSGOMF7=N5OEWbPpuUpSrhhdbDLcz2ps1P!Oe@I9SqO8Q70V` zEniCUc;GB_Tl@{~6)Hbp+s`0y4gA^Wx$XyA5Cm!p!5L~pjbsXh2QpOf=Da7>Z9B{N zP}ZDCH~sYRI{fGy=#7mfm*eY@_k+{rt-ld})t?ii1~ZXvy6Jz`o%_p9hb~}Xf7vND zYM<0Y_Rmnve*0itmJF_4vfqO9E+=Kat3Z*OPKa&^-H&D7_M&d|qHixy^9j){NNOna zIn$VJ(PdHo`g6~+)0KbKI#)XW%x?*K$kc2 zk*o-8Y3#)MY<&Lcn!&5e?`@d9>Mhv=sd=+;Q<3zk=DXAhet|@>P|0aqr267V6}nfs zAuu#YEjU~0<13F1 z?ssGS!Jz}C> z=N6T~z@j2Y_7VTj4_)_cE^oY0P`R$20s8M+I5Izvf9{h?_wOaHoII_E8QVG;`RO$qdT7z}(z{LRn^&ep88|Eira~ zp~_-qaM;rLiAw$FKd!J(K)zYN&_4LBj>i5nRmzM%Tr{;XhVx}FHO&CdR7NoNGXC2Q zyui*bC;mJrdA5xje35^;AA8BxZ4;;L=)w7Nb>AoEs#AR;5`04_5Gz?rTtdDZ;HPHv z{58j}T0Os=6LLmPBUY>vb9Lvde&|g9)pL}UjPui@)Ls30#dIcRSD)q(#Ah}fZaf2E9STg zFrD}TbiCK?)|!H5!om4zP#O1ZzONkI5f+aaIEPbm4XHPqzg#i^cZ8lBko^1nV2%&( zDgd4v*>)kZ?qC&(Up{~n2UZP!CQHbIzGEuj6&!SqeT$NPY+$kvRaw^D#7@4#*4;1# ze;Nzs9H<&_p1N-&O%QE>ad1~6%#i^)N1UtU)zeRrhUbG^QoH(3fNq!z9$G~0U2WuyZxu1cT4nJUzNNlMU2P2>MkMf<9+`f{`$9}kY9valTOC@c#EZuE zU4{{LD(@r;3!CImKhmS^KIvTO8TDn!qFUV90f1@bMWL}!PJQ)A;)z8O)2=Ljh1mxAMkz;$X{KSR+-uOi1@9Li+zwkTv@4m^w z^O+br?3%9T(>n4X>Xp(E`FO$mcPnT3i0`I|_bToh%`g++^a}>(PBJ{l%oHmzih4Xt zPXww0TH{`wrYlk!g=@1v7iW#I;5h+V6=Pj9LynjYuSDQ9J%TR{I^!Hgh529cYn#5s z+;&R1yNOD}+}?qjY9uP7r9Idz`@@#c?oCM+IhyY>e?F`8%6V%@SjX~$#ai3l>1DmO z?wXvLqq{?5m!d;Wi2QT~WfM2=%u7}|>fHuHL4b4w9~tdAi)}Dm*^;Q3muzq}|Hx|?4dx7EXGpnpp@y$dmiQy9G#Nfge`l5)81Agr ze;(FAA9d-?b3SotNT)?Y;!gXXB&~;W+w6IZHPH-x?u$~y2HGA4WakSv?(9p1kO8fE+@3DnM@+e z?M*Q4ujDyC-s`Fe0$bWn^nxZ=q~25>rr0J+Eu_o}y7Ys5z7ZV=!+J7`j!mo+vcuj6 zU+DG2{zj3HDs=X1NqK0T5ykS`nw}(qdFGK*H6(BB4GV=GLE!g@u*G? zDC9&~kt8fkJTbA0Ffg&TC<4K=bF2O$--4Q}5WW2$@CidM`lq3MyD`wK%K4bc!8GA{ z@Dx8Uc=gmoEo)xl{REQsce#^0%+K{h@@@I_y8T)Pqqo|aA*wpdIvqt_NmtRxLpvg9ciWwn zR+({7(CoGjYm^vhfvvRhHeH1-nc)r_>(ogA_fhc5?Psi~PBM-NVsA%8G6?aayv!VW zGs7}s*k=apL)YxhN*dnhgBoI`tg2rC)r z1zj(25R9|BUUFH%4hf7C;g{u{ule#4o~EPUfmk6>ke7f+KV#31G< z&Q{jNG8T@!e2B{%Nf)K{2wH|ay9X_c9wLKRXFd@Fvbi6DPgInQ@rz0maU_wLe5RJfe3R2`3R#rL$u@s>q z?SxoTP?0uAEWJ1>ZGe#0q>3U!S`o37@Uki=K476eXGVMbP>^f8dsW66!&{q{i@eFS zy8X^N{Z9f1nzZ{tk?|jZY4=BHQDjQ9Uu)WkiO9(6Fd;1)<306kyBL3Qt8*)G-4S=gAxtC3UX9-jHm8ELEKJ1Ou0Wo zssBmrz?5P?C^CeBQ;Pjr3jI&;1GEbLM)GV0GLK(GeuWkp*>KnAd=%yVhsb;Mm9>GXplC2VWER6iHoQ3coSe22}YltUbf<%RZ=)I83Ly8vldB1vY z!NJ=b1o1!1$iLJLV-s*cqWH=N5dC#;N#sR!16ZMC)^i!6Bm(*j=C=U)FqmyI9+ff7 z4;8oDB=;biDo#KlwzF|KCn?$E_wO6<*(|Pq&zX7kp3ir@{Y zqWue4)ZhJ??>K$!JiNsV_i3+NOvp>On7$Nj+3PuCv_WK`HI05+!x3zEgq>o8*gQ;a zD#~Oh?OvTZ6k)@%5B$P)h5=gJ=)=_yr#a!{48@j|*>8iMTD;T(qxj(@Vxp*l4uKT$TfH0d*ZR zqZiM)dZGCmMx+fNpqpu57Mc}#d+~O%2%Ftj_v&62$50e$oBAB zuG%>Gw?(KphGZg3XQ(WKB3NaQ7PPWr*&#=V#EuqS<;6hCO=C3Bsfh_>|Bo10ODPEz zWPcprT*CuZ^H#F}3}CU|D)`cl1e`;3Nj2sCLsyf{Gz?*CORD(#ssw~Z{~7iX_ZT-k zs;bo=b;NF(-cKH*uveY_EiR@$4e`;-KKvfl{6KkJXcJde zp}&fa0WYYqJ0+`3M9tx!1T>#lsICK~(K)89-5#b5l$bl6bCKLa&qOHKuzNVgq}QmO z*AupQ$RrXsiVFFRU;sBZo_5dZ?vO;3xFEc z%j1s#ts4Yfzz#hgin9Sw{f~zPbOYRf80_%by^0!pm4FD0E*BuGaMJi|vy->s1~L)T zf(r)4+G~@&U+*)&J8G+q-HrcY6t>V-x~JJ#>R3S;bo>v4F#E{r$3Kd3?xz>dLb~n_ zm%(DC*WT42+P|d!?93Z118RiZ!#_nUSiFO|vMQuVa)W}QN}mLGI922&xIvi|rwEZM zy5iiRtcp?OF;&dPxIv+zO1UUEC>N>nMT9$rDncUMeZt(fRGCC@6A|3pQ~}!I+@OR| zMI6p84o`8Um-ZGm#=4yh`f-cI_v@^)U@w%D1mPqRkCKSYB*;Ok{3dQ$V}F7l4gC%L zXvBB-l96#;Ww2z^`}igDjzs@vgiZdZhiu&TBY~(2o1lZl{G>5dj{Burwh`MAZ-gES zd+A#I&%=P&BZP`0ex>8Lu>!{LmNJ-pC84G+phkz{`S6H3b?8=L9VTaZ7K0sHf)mYZ zAE9K%bp0Nnc1F$p($FcLQAwQ{B5wHgXNzhuMVTAn=%`Ky*xF>pS)A3gMP(R^%#GXV zu+DLW398qAdlmax7!wajntxs z?KU)tPm{fc{e~(8FdC3Y$@D%4>Srh^^PxkN%!7=+&;D^YDi{4B(Un73>!XRcTflO?1S2Y!2@PZr9npy z0Lljj!(&o?9>@+ye|zJ8AS0ad zb2LgTIL`%$Uifs|F^)BkvB3#@<_N0)1o9xU>|UQv&R0z#VlL-ohz_fh5*v5O%Hh|F zVT8fr^n;m)!xRLk&U^(&jb(^WiAB@_xF@Gw)oB-CkIxvGz!hIAW9)wW?r7G@z0|}w zJV7xH1~m8Rjq~Xb5ETv$24Fiq^1h%GqZ!q@mG~R4t{A^jWbIKxlEj0~z!hVM+54`^Lbk_ErI}kpt?k4MIkBktPgh8y#CNrEC_~5QHGafBOwO|2==fEr&<#-x zY9U<&QgAI9MR1szyC6tRzJ@<91c?%*myPMux$H>P31jM513| zsb8BN6ZGXC>edB2rwiLm5X*e+E6vW zFF`QPx8Nrje!=W@;ZF6FQ&{&q^kq#EXN9Dznu^W}!6|<)HWojfus*jSQ4)B(|CFRu z@Ntg%C>lb^`0;}}tX87!uRhN{hzdu4DmEc$D?x>^HZPfr9qx?wG8;MGu`X*W0{*hF zB0+7-%;Io|u8+c@XwP08DrV!h1OGn#YJHAM@jJcW2}o?w!E!K^q9y7vut##VOyN8@ zu2Y$ym4n2ST&odr%{?g=2Te&coy%=k^fCm^z=4J1SVQ$-Qf#H+IL64!f)O-A06Vvx zJlhuF&WidfV3ynvMW4w5Bg>M0$=TuRwFn%rTvH!u)JXv|79yDw61wd!6tUTBcfeC< z?FY>4Xg2-#09^s;u!_t$j(A%gSDF-hEQitnEt2IIX~yw;3HDOR&iF27t?iS+PeD5t zcj?UPuwmN2Km>z*7;u@Uf}YHw^q%$#%QNZE74$0{ukCv;u`tRAJ`0sSN2F>7vn`a84eFOnx(e-HZTJ&(!3MJlTZNREY;99wbx zas-=uZqM+VpyZvcvo8+X+MeLXsX^QC1tQjtTuVT!5zf82iD)_uf4L&4W(>=bvtWu# zNI*0lGEKnoA&p?}av5w<0>Z^lc21FY?Dv#vw5I6crYp?&W4h(x-!yE17t80qG`Qs2 z$0l7-vw1Ol?n|;uZsMNdCcos^wLhaYtmTs&^DYS}tLoQmHQeNq9CIlNh%2{P19Ev| zlCCJ(Fz=QH)RyK}LNRGLe1Z0={iRsrXVt%K)Knge`hS}^+>#))&BTo3Zvp}L$ zBD>V<;uPH;y6Zj2d1*t9~<)YJPB)c*mu@y(HPS6Xm7gw{>tG-MY6>8w8*&UiDUDIMcd!EtX%#y*oxTdEXy7=x70DwyDnsANwj4gv_c%GRX)BI zx$VweP>2(v^OR^hq&#p8RLXNbj-b|(kASt%gW;*Pp3DW}nR!YB#{e_X28}ZPU}9|Q zDKF+yac^b%5fDdQ?np~}p(6t!rQ$Q47!}~k-n6-!2@(d<)rQ%h2VX6J* zmhL8xmG2B6v-=MLjdE^wUhlqfevoFB&k8+vR{HUi>-E~mj={X|eRVBOwyij6Wty%EJZ;9$KmM7O$hzHK5 zi~4;k+9d8GD)`{_t8!|Fux$BL+@_=fLQc+qWCQ{GPr@cN*k)96^NP%z2UCEn3@krK^WF3QEEE=|0@Mo~Tpp4JR@& zTG=CLXoncAc+I>u@DE;{e16NDTs6do{V?;RT4;a)Fys~U&a4XWXE3xs%&*{mh)Ds| zx4-i`owuZ_n`eS{<)u^z4cs-Rg7%kbvEB`72;c@XXbueW=y=rW#(S_kjodZ<$RA<+ zcVm%eS}=$v-q@b*jDFJ$3-mc@rAjXq+icJTnzGM9=}RFLydew#$Ux~dO-HCms%R|~ zsr;izN^33jt7w$o$*UD^U%nX&xN_!MViX(&gv|zseK=zA_+kJ`UVj4ydgo`1g8?&A zo{ztv&!W846^;u%j77BI&VZPfy)QNP0g9Xl=acVeQ%*4YR04|B7Ui$eC!mCDt7PF5 zMd-Flq9+yu1Qqwr)45&PbN#zaxaI%o3utE3AD&r4Y~6Tu{1;0`^aRNMCjm`LPW}fH z`VaLW?wq8EI~C|`0Y!$ZH#4@W<*qki?s3pU0u=i$_goMy_kLw`kfI)Z?E`w0g&Vqo7$P&p(^`~GaYdiq{a64m6Jq9^6KC`)f{a#TA ztl*O)KK=RWZ$xw?fsuS~27=FN!v%%v!+KZg@my_Z5ly_g$~Fzc3Otf`6l`ipai|UF zOYvW-=*jE)X)xqVNY=A(Q~*r>CFB9l+@~4gJaYq4bREtL$sP|N?PMo2dR7&`Y>M<@9}3PC4l-Eb|ZNaZfm3E2wktt$x< zj*%9#ycR{F>4r(mwuNiCQq~QnxgDEzR$Ei|C48P(Zxua|_#|XG+j*%dbip{Ote|jh zOxe0&FwawAV@;p5BRlW>FnldW-MYauzvG5CVBPREzvJU&>xPZ|j!hct5MpVE3ZwOw z=VOUaYF4u>QAMHt=1FHi6ou}YC&?NWt(~+_Dm!2FHD;n~6EUSg{1Ovy931LpW$lB# z*re!jTVygN(hZu@KBfERsQT1V*zc#oX4`Eh=FUn?Jvkhy&F;`_3_;{aUk;NBQwKsU z0mw9tP@p2BBvS`A2Ln^&<|e&xQy{_N5}+MM9Lm*V+F1VxmQEX{7(zldz!egRUm1I_ zSTOJ6aaJ_iZE|nMr&R_O?2@DGti;V71L+99{W+tZ?2uTZj_*P!BwTleW?;Y{PfkI( zLQ^nUkw0*_n8g;u9U`&F37Qknkwi|EK>PvBr4 z1Hvq@zJ{tkD^m1Q!F(wR@979RKPKqVTg*1(5La*|9`;!p=jq6Ce#sgjMkh5UT-xGwb0IL~dbpc{gz)7$!dE zE7OrMqeLXnQ%r)EZ{j?cPh0)Un4lhlCOl>JtZs;BeK3LyIYbp~SfHx!!-{xeY~PRI zxw>v3nq&bHNC-Fg{Wvl^)I6DZVG9g1L(I2QQF62P(5s2dEi6E*LybtTeNCGT>Nl3| z3_}4fWpRBI8qvquPIQ#puE3*o5c-ZV4rsP4gaO}o9~U;NE4K~B#Btrkhqf^Wl)ykR z+REtJ{Mo2k(Rp3?6u0~~)SN(k`Al29d-rV3Ry6;PpPYF2&L?yIDQA?_sf}4xJVLJz z?>MnV+rtS2H@yB%pCP*vO1%4%dJLcMR0b6zcR@lwic0z$2h^Pgb+(b<(AEe}>w1}= zISH;N&t%II`ip+Qr_XF~S{LR@ados~LONv+jj3VN471&RX(-FoeCyX?znMe z*ao|T0C2Mr=yq0$?vp}RZd24ZL0qCmq5fe|s5g~9#wVWG({?FdY`R?Tw)TpBRyQmA z?-t?X&}`5iyak#uLVhx+SxG#H@4Gx><*dZ}B~hnaUnEy6mEQAYmS|sU%xg@QYj|qR z`F2K9vpWZn4c<7??0(V$2G(6hcPm8?U+z_ybPXIVaZQbR*7iO*IcNR#9?uQ@u#{b; zdpE5zuY4?IagijrSa=zR)pXSH&e44YL*2DA28V>%1 zed6&k8Vt72YQ6SzIQUXltI8(z@DZv!o?HN|W}#v@g*`*>`NY%;d)7;vPcPi?s#h?d zP6Dlr+E2g4^DLVT{_G#;ku@C*4#{fmWLF-4Sg<;dirEzLtXDCoFeu&4g5CX%kv||Ev$FljY#qApNaT=N&aRqtD-ikN3;w@(b^@SJ+62XxJ+S)+J-%m#yRXSMPkQy$MO zSY^E3^Kn3?wG>moz=mW0MsLG2{94)VeY*z-A6s|nm6x{ zxM&cT7;E6~W1Vi~xLq+a1b)Z-bZgDjOiFav`ymFtALEol`Q>}%niXd!U^g= zI5-#@`t0dme%4D4s`^j{srqn7w zK;AO-oJ0BPGl(jyGByG z`vU?$WJexb4Y-BFcKYYw@@F@*!MjR{Q?`aa)I&9vGt!;@ZP zD48y!vRTFTq@EOZ#yi8*@S{b!A}3iG7G|z$S?Zf-M>MX6rFhcI4;eZXCDmI=`V`s# zuPsW$a_#Vj)qaVd^rAz|XNr;%tt15sZL};(t#a%N(bX04o|lA%40Vd6@qzT_}N-2f>=LaMxHYXNt* z>mQKe8k{=maW@}q6P)VB2q3$skPqcO$4y|>iq7ito_F)r`c)@AVjDp~QUO7|2_e;# zgd1uuP-{|xYYv?Esu}3!B=v(o?btR}wn^-U&@| z_llA>Y(?n}$Wm13&Q!YHzmqBm7Ak$)U4wyCdnP2vFz~}J+89`D-`jJ)EMw-+)lK;y z>U>R6(^TZV8b@5lwVlsVk5D+&F?uATE3GxA%tiG%6nIN#j0AZS%)g{)M^t zzdC^3RGQLXhM3L4td*Qmx?p!Q{il9(oySJP6gk^7%W@=J9XNX0_Hx0ktx}c_{Fh>r z)+E?ihK$0wHJCW$?>#QWTeWKAJxO{BJ+4ik*a@xGLABaL6 zgy+qZ(hR_YMSF;$@Vq}R?b@Q>czI_?o6J0aU7G9(@b*=i`G>9k4pp5Lq*s^5x#ah! z022Pr2KGy(Lzpj)^^jNOjM`z5T;PgjqI<|knR)MjZ1+z_{;2@kK&GV0j=c>jl$pvvF#qDY6_&X6P-l@q+TB*k}syeq$HLYFa2UIqxS&ji=& z-1lNd=2>~=T!jtraHsV!g6*pDgm-g(rNjbmNNQ%Vt;{+;jd>5-iE zvc)K9#ns9y=ie_rbLD9R+(T6w-TAVwjwv1)R5hEnbLT6#n%Nr8(?+Qzw94;;ziUgc zR<-u=7r^omJ2Q7EiCHWIv2;>CK$5VShq5zgB1L!Z$W z+bW}{J|%@1ZHVT+`rejBXzs!NL>j~1E0U0u01>SQ{PA}w{CVK5KcZh%Hl93DkAj7K zXU5leGrq6aZT57%LK1;#D#B$H{o{6wbDUjIKy4qS7$D*`h5Td{!E`umT;Y3Ey$I2n z+kQ_*e0KprZY*hf2>VGWMu;me(ZS<_zI{DdbhMx$kgim#YPH9DUS zSTNONvU)@q(#qTp`>J8m`<2S36u=&{wFui!AcSq$k7F4PWc3)|0SyGqME+~Epk?MZ ztU+nbQ2y)fd|77<{NAw)paCrq^UOSWn>McS9cNz_x$A-N%@%m?;&SU-RPtwo2y;i& zU0UVaea4Xy`pjZTMdB{^#Yf~WRI?~j5wghCW856#nU})2N*FvtaD^3HDt4nzxuN`= zl@9h8BYc_^vr}AQPV5;exS>clktQYiR5kPw;oQAhPr8)WE644DrRCjfu{h{WrQ3an zk%}u_uN7~15wudn-54^sgI(AA4(lu0xie&QOYajvOsStp`9}g*w-cx(aHKX;m;_fj zu(>`L)^^d}$YPtaU4MMXH9n>96xIB|7g?h~DI>BvtiJs6L0|-hRZ3>MB=u3>0^G-@ zJZ-7)gE^O97KN0Yv%xfrCtE{=qAn?;0-RGynk&>{LgmH?XWNWLc*N(_sNM1^Hv1t% zaLcmS{V5K7Cf^v=ucTm1Ilr z4Qxm$dpi#v;`R@B_76A807|Xaz0&V7Hv+W?rQa`JPCx3h5Xxmg|K`2=qc_7_v<>P4 zt;0V!n0{yP4WEo_zRM{~`aS8>vWH1uAGw^~n`0 z^r3-T4@iGuBjrQh+F(|sn37hmJJ>l39mT;Y5z8J~TE`U##F8H_avClbco++or#rFKZ&-vHga~2?)2GU<$518QgWr_btP>Ng_jNLK%SYT4uw}`(`%>eMPGV6(L+Ph*@q_S$keqIR6#=OxQHg(4HY0P^=K%XYQn)mL6FKKP?(X&tQVDg`)sEteH) z9h{9{c8*@ZDE~vof8oO1FsQkfVh<|DFJ0M1rSIJ!mV5+n%sBB9QHDnK>2ECBL-Cc% z7)iX-2%6+Ax^iyitLQ{ZJex*%ADuosm&t2InjShNJJ}c=lCIz)b$0hV#WAx z8kC?UlD!Tf1s)1&Tdp=>|Iz+pTfqFANC?!U7*fXE)2s^>FIq811xX;;i4T~2P%}9h z2(Zle)fOsLK)fE+*DMU3%=??g72{C^mx+_opAn3T>X;xAI$*_Q@i&X|+#XWk4ae3K zDcApuq1h{fGE{)lM2IDrHX9#DSHP4hLbrQ{{M&fTqCc@2vC`|m{bVj_y1 z82T|$X)$rL*CNZ?GUBNv>7J#+FUz&NmJPS$g^6mjM(h?-Dwec56j7M6Y&Jo1I+a0yZr-cB{LNl>MvS}4)U=tOFYRo=PN-VQN zsq4%OwQ@yNvDlj%*QWOR+qc`=ruRA$ ze(W_qirYK*yj@jA4|WB`%Db4S*uD+am;t2AV!OP0Bio!&q%Y!z-u~tr!^daI$ysR` zVja10w+7vUwcdOmk(7TVzfI_KBWSs-b7%K(-E93_DLB@nbCcm~<>9d&_nZ0)mDxjX zWUbR1wtnB-Mzy9lxNCc!-E3V_yz=PkFDa8v#o$MczYdSP`7c#|p6ZFe$?@bDg#p}5 zF8;+`-!pNOqwp7ZV-Mpk{T0QCN01%Dgd3f3YZk4X2l5Ea+s@C*DAuzbFqc*<5;mxwDR?$)t~Qa~KVYCdRY0CGA5$&jH8A;Y zUWpx);#M}&?OHC63Ust9E7`#mY-{xQ9qtJMUU@J$xC%;vp#fABdt8|O_q8}~2*TeF&sDVx$CLrhQ4X|kqlDq+V5;{R2l_UgPQG-VTw z9fuP`;!tz{ws0SozIh%y?oSLc?+-a@FsI3v!YP~%Y(`?o*-0U$=s8WHl>bVh#b{nr zBxUmfcHD&&5{H@lSB1nmVUWq0!YP}+>5CnILk!^__|pxiQu<%*fq!iPGnZ>JuPK?b zS%Mv}B!%=C&izwi_RPGdT*~Hati#WMam$1dQ7aH`rj<7zj3Qm+>w2hKJx99%Jtr8t#y|Jx4D|+^yQ-D2`;n=51N!* z<)YQPTxg=tH7VFUjRKTQTn=iKvowkXxg6ba7TB0RP~*#X&zH-<_gI@RpQtZ1-ae- zIU%qDd9=dqxN`jC&%4WVp$muiJ}T;4iJRxnow%hDwqicR4`~ z*!YLxAXvEn6x9S}GD1iZ{{sLvYJ&p&MgdZN<)}8Wjl5B_l*iq(Rj59&U~7bxCRU?{ zq5lSetv*7%jgBEf>-*}|$!h7onw-G9pGLnP-g~Ec%fFaq?6a=yc5fWbVQ0oST#aI_ za-p;0f8*mi!NcMi47X$xcRV76= N1!iGkJyU(={{`=p_YnX9 diff --git a/doc/fontconfig-devel.txt b/doc/fontconfig-devel.txt index dc638c3..34cafe4 100644 --- a/doc/fontconfig-devel.txt +++ b/doc/fontconfig-devel.txt @@ -1,478 +1,460 @@ -Fontconfig Developers Reference, Version 2.13.0 + Fontconfig Developers Reference, Version 2.13.1 Copyright © 2002 Keith Packard - Permission to use, copy, modify, distribute, and sell this - software and its documentation for any purpose is hereby - granted without fee, provided that the above copyright notice - appear in all copies and that both that copyright notice and - this permission notice appear in supporting documentation, and - that the name of the author(s) not be used in advertising or - publicity pertaining to distribution of the software without - specific, written prior permission. The authors make no - representations about the suitability of this software for any - purpose. It is provided "as is" without express or implied - warranty. - - THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS - SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS, IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY - SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER - IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF - THIS SOFTWARE. - _______________________________________________ + Permission to use, copy, modify, distribute, and sell this software and + its documentation for any purpose is hereby granted without fee, provided + that the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of the author(s) not be used in + advertising or publicity pertaining to distribution of the software + without specific, written prior permission. The authors make no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + ------------------------------------------------------- Table of Contents - DESCRIPTION - FUNCTIONAL OVERVIEW - Datatypes - FUNCTIONS + + [1]DESCRIPTION + + [2]FUNCTIONAL OVERVIEW + + [3]Datatypes + + [4]FUNCTIONS DESCRIPTION Fontconfig is a library designed to provide system-wide font configuration, customization and application access. - __________________________________________________________ + + -------------------------------------------------------------------------- FUNCTIONAL OVERVIEW - Fontconfig contains two essential modules, the configuration - module which builds an internal configuration from XML files - and the matching module which accepts font patterns and returns - the nearest matching font. - __________________________________________________________ - -FONT CONFIGURATION - - The configuration module consists of the FcConfig datatype, - libexpat and FcConfigParse which walks over an XML tree and - amends a configuration with data found within. From an external - perspective, configuration of the library consists of - generating a valid XML tree and feeding that to FcConfigParse. - The only other mechanism provided to applications for changing - the running configuration is to add fonts and directories to - the list of application-provided font files. - - The intent is to make font configurations relatively static, - and shared by as many applications as possible. It is hoped - that this will lead to more stable font selection when passing - names from one application to another. XML was chosen as a - configuration file format because it provides a format which is - easy for external agents to edit while retaining the correct + Fontconfig contains two essential modules, the configuration module which + builds an internal configuration from XML files and the matching module + which accepts font patterns and returns the nearest matching font. + + -------------------------------------------------------------------------- + + FONT CONFIGURATION + + The configuration module consists of the FcConfig datatype, libexpat and + FcConfigParse which walks over an XML tree and amends a configuration with + data found within. From an external perspective, configuration of the + library consists of generating a valid XML tree and feeding that to + FcConfigParse. The only other mechanism provided to applications for + changing the running configuration is to add fonts and directories to the + list of application-provided font files. + + The intent is to make font configurations relatively static, and shared by + as many applications as possible. It is hoped that this will lead to more + stable font selection when passing names from one application to another. + XML was chosen as a configuration file format because it provides a format + which is easy for external agents to edit while retaining the correct structure and syntax. - Font configuration is separate from font matching; applications - needing to do their own matching can access the available fonts - from the library and perform private matching. The intent is to - permit applications to pick and choose appropriate - functionality from the library instead of forcing them to - choose between this library and a private configuration - mechanism. The hope is that this will ensure that configuration - of fonts for all applications can be centralized in one place. - Centralizing font configuration will simplify and regularize - font installation and customization. - __________________________________________________________ - -FONT PROPERTIES - - While font patterns may contain essentially any properties, - there are some well known properties with associated types. - Fontconfig uses some of these properties for font matching and - font completion. Others are provided as a convenience for the - application's rendering mechanism. + Font configuration is separate from font matching; applications needing to + do their own matching can access the available fonts from the library and + perform private matching. The intent is to permit applications to pick and + choose appropriate functionality from the library instead of forcing them + to choose between this library and a private configuration mechanism. The + hope is that this will ensure that configuration of fonts for all + applications can be centralized in one place. Centralizing font + configuration will simplify and regularize font installation and + customization. + + -------------------------------------------------------------------------- + + FONT PROPERTIES + + While font patterns may contain essentially any properties, there are some + well known properties with associated types. Fontconfig uses some of these + properties for font matching and font completion. Others are provided as a + convenience for the application's rendering mechanism. + Property Definitions Property C Preprocessor Symbol Type Description ---------------------------------------------------- family FC_FAMILY String Font family names - familylang FC_FAMILYLANG String Language corresponding - to + familylang FC_FAMILYLANG String Language corresponding to each family name - style FC_STYLE String Font style. Overrides -weight + style FC_STYLE String Font style. Overrides weight and slant - stylelang FC_STYLELANG String Language corresponding - to + stylelang FC_STYLELANG String Language corresponding to each style name - fullname FC_FULLNAME String Font face full name wh -ere - different from family -and + fullname FC_FULLNAME String Font face full name where + different from family and family + style - fullnamelang FC_FULLNAMELANG String Language corresponding - to + fullnamelang FC_FULLNAMELANG String Language corresponding to each fullname - slant FC_SLANT Int Italic, oblique or rom -an - weight FC_WEIGHT Int Light, medium, demibol -d, + slant FC_SLANT Int Italic, oblique or roman + weight FC_WEIGHT Int Light, medium, demibold, bold or black size FC_SIZE Double Point size - width FC_WIDTH Int Condensed, normal or e -xpanded - aspect FC_ASPECT Double Stretches glyphs horiz -ontally + width FC_WIDTH Int Condensed, normal or expanded + aspect FC_ASPECT Double Stretches glyphs horizontally before hinting pixelsize FC_PIXEL_SIZE Double Pixel size - spacing FC_SPACING Int Proportional, dual-wid -th, + spacing FC_SPACING Int Proportional, dual-width, monospace or charcell foundry FC_FOUNDRY String Font foundry name antialias FC_ANTIALIAS Bool Whether glyphs can be antialiased - hinting FC_HINTING Bool Whether the rasterizer - should + hinting FC_HINTING Bool Whether the rasterizer should use hinting - hintstyle FC_HINT_STYLE Int Automatic hinting styl -e + hintstyle FC_HINT_STYLE Int Automatic hinting style verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout - autohint FC_AUTOHINT Bool Use autohinter instead - of + autohint FC_AUTOHINT Bool Use autohinter instead of normal hinter - globaladvance FC_GLOBAL_ADVANCE Bool Use font global advanc -e data (deprecated) - file FC_FILE String The filename holding t -he font - index FC_INDEX Int The index of the font -within + globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data (deprecated) + file FC_FILE String The filename holding the font + index FC_INDEX Int The index of the font within the file - ftface FC_FT_FACE FT_Face Use the specified Free -Type + ftface FC_FT_FACE FT_Face Use the specified FreeType face object - rasterizer FC_RASTERIZER String Which rasterizer is in - use (deprecated) - outline FC_OUTLINE Bool Whether the glyphs are - outlines - scalable FC_SCALABLE Bool Whether glyphs can be -scaled - scale FC_SCALE Double Scale factor for point -->pixel - conversions (deprecate -d) - symbol FC_SYMBOL Bool Whether font uses MS s -ymbol-font encoding - color FC_COLOR Bool Whether any glyphs hav -e color + rasterizer FC_RASTERIZER String Which rasterizer is in use (deprecated) + outline FC_OUTLINE Bool Whether the glyphs are outlines + scalable FC_SCALABLE Bool Whether glyphs can be scaled + scale FC_SCALE Double Scale factor for point->pixel + conversions (deprecated) + symbol FC_SYMBOL Bool Whether font uses MS symbol-font encoding + color FC_COLOR Bool Whether any glyphs have color dpi FC_DPI Double Target dots per inch - rgba FC_RGBA Int unknown, rgb, bgr, vrg -b, - vbgr, none - subpixel -geometry + rgba FC_RGBA Int unknown, rgb, bgr, vrgb, + vbgr, none - subpixel geometry lcdfilter FC_LCD_FILTER Int Type of LCD filter - minspace FC_MINSPACE Bool Eliminate leading from - line + minspace FC_MINSPACE Bool Eliminate leading from line spacing - charset FC_CHARSET CharSet Unicode chars encoded -by + charset FC_CHARSET CharSet Unicode chars encoded by the font lang FC_LANG LangSet Set of RFC-3066-style - languages this font su -pports - fontversion FC_FONTVERSION Int Version number of the -font - capability FC_CAPABILITY String List of layout capabil -ities in + languages this font supports + fontversion FC_FONTVERSION Int Version number of the font + capability FC_CAPABILITY String List of layout capabilities in the font - fontformat FC_FONTFORMAT String String name of the fon -t format + fontformat FC_FONTFORMAT String String name of the font format embolden FC_EMBOLDEN Bool Rasterizer should - synthetically embolden - the font - embeddedbitmap FC_EMBEDDED_BITMAP Bool Use the embedded bitma -p instead + synthetically embolden the font + embeddedbitmap FC_EMBEDDED_BITMAP Bool Use the embedded bitmap instead of the outline - decorative FC_DECORATIVE Bool Whether the style is a - decorative + decorative FC_DECORATIVE Bool Whether the style is a decorative variant - fontfeatures FC_FONT_FEATURES String List of extra feature -tags in + fontfeatures FC_FONT_FEATURES String List of extra feature tags in OpenType to be enabled - namelang FC_NAMELANG String Language name to be us -ed for the - default value of famil -ylang, - stylelang and fullname -lang - prgname FC_PRGNAME String Name of the running pr -ogram - hash FC_HASH String SHA256 hash value of t -he font data - with "sha256:" prefix -(deprecated) - postscriptname FC_POSTSCRIPT_NAME String Font name in PostScrip -t - __________________________________________________________ + namelang FC_NAMELANG String Language name to be used for the + default value of familylang, + stylelang and fullnamelang + prgname FC_PRGNAME String Name of the running program + hash FC_HASH String SHA256 hash value of the font data + with "sha256:" prefix (deprecated) + postscriptname FC_POSTSCRIPT_NAME String Font name in PostScript + + + -------------------------------------------------------------------------- Datatypes - Fontconfig uses abstract data types to hide internal - implementation details for most data structures. A few - structures are exposed where appropriate. - __________________________________________________________ + Fontconfig uses abstract data types to hide internal implementation + details for most data structures. A few structures are exposed where + appropriate. + + -------------------------------------------------------------------------- + + FcChar8, FcChar16, FcChar32, FcBool + + These are primitive data types; the FcChar* types hold precisely the + number of bits stated (if supported by the C implementation). FcBool holds + one of two C preprocessor symbols: FcFalse or FcTrue. + + -------------------------------------------------------------------------- -FcChar8, FcChar16, FcChar32, FcBool + FcMatrix - These are primitive data types; the FcChar* types hold - precisely the number of bits stated (if supported by the C - implementation). FcBool holds one of two C preprocessor - symbols: FcFalse or FcTrue. - __________________________________________________________ + An FcMatrix holds an affine transformation, usually used to reshape + glyphs. A small set of matrix operations are provided to manipulate these. -FcMatrix + typedef struct _FcMatrix { + double xx, xy, yx, yy; + } FcMatrix; - An FcMatrix holds an affine transformation, usually used to - reshape glyphs. A small set of matrix operations are provided - to manipulate these. - typedef struct _FcMatrix { - double xx, xy, yx, yy; - } FcMatrix; - __________________________________________________________ -FcCharSet + -------------------------------------------------------------------------- - An FcCharSet is an abstract type that holds the set of encoded - Unicode chars in a font. Operations to build and compare these - sets are provided. - __________________________________________________________ + FcCharSet -FcLangSet + An FcCharSet is an abstract type that holds the set of encoded Unicode + chars in a font. Operations to build and compare these sets are provided. - An FcLangSet is an abstract type that holds the set of - languages supported by a font. Operations to build and compare - these sets are provided. These are computed for a font based on - orthographic information built into the fontconfig library. - Fontconfig has orthographies for all of the ISO 639-1 languages - except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. - If you have orthographic information for any of these - languages, please submit them. - __________________________________________________________ + -------------------------------------------------------------------------- -FcLangResult + FcLangSet - An FcLangResult is an enumeration used to return the results of - comparing two language strings or FcLangSet objects. - FcLangEqual means the objects match language and territory. - FcLangDifferentTerritory means the objects match in language - but differ in territory. FcLangDifferentLang means the objects - differ in language. - __________________________________________________________ + An FcLangSet is an abstract type that holds the set of languages supported + by a font. Operations to build and compare these sets are provided. These + are computed for a font based on orthographic information built into the + fontconfig library. Fontconfig has orthographies for all of the ISO 639-1 + languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If + you have orthographic information for any of these languages, please + submit them. -FcType + -------------------------------------------------------------------------- + + FcLangResult + + An FcLangResult is an enumeration used to return the results of comparing + two language strings or FcLangSet objects. FcLangEqual means the objects + match language and territory. FcLangDifferentTerritory means the objects + match in language but differ in territory. FcLangDifferentLang means the + objects differ in language. + + -------------------------------------------------------------------------- + + FcType Tags the kind of data stored in an FcValue. - __________________________________________________________ - -FcValue - - An FcValue object holds a single value with one of a number of - different types. The 'type' tag indicates which member is - valid. - typedef struct _FcValue { - FcType type; - union { - const FcChar8 *s; - int i; - FcBool b; - double d; - const FcMatrix *m; - const FcCharSet *c; - void *f; - const FcLangSet *l; - } u; - } FcValue; - - FcValue Members - - Type Union member Datatype - -------------------------------- - FcTypeVoid (none) (none) - FcTypeInteger i int - FcTypeDouble d double - FcTypeString s FcChar8 * - FcTypeBool b b - FcTypeMatrix m FcMatrix * - FcTypeCharSet c FcCharSet * - FcTypeFTFace f void * (FT_Face) - FcTypeLangSet l FcLangSet * - __________________________________________________________ - -FcPattern - - holds a set of names with associated value lists; each name - refers to a property of a font. FcPatterns are used as inputs - to the matching code as well as holding information about - specific fonts. Each property can hold one or more values; - conventionally all of the same type, although the interface - doesn't demand that. - __________________________________________________________ - -FcFontSet - - typedef struct _FcFontSet { - int nfont; - int sfont; - FcPattern **fonts; - } FcFontSet; - - An FcFontSet contains a list of FcPatterns. Internally - fontconfig uses this data structure to hold sets of fonts. - Externally, fontconfig returns the results of listing fonts in - this format. 'nfont' holds the number of patterns in the - 'fonts' array; 'sfont' is used to indicate the size of that - array. - __________________________________________________________ - -FcStrSet, FcStrList - - FcStrSet holds a list of strings that can be appended to and - enumerated. Its unique characteristic is that the enumeration - works even while strings are appended during enumeration. - FcStrList is used during enumeration to safely and correctly - walk the list of strings even while that list is edited in the - middle of enumeration. - __________________________________________________________ - -FcObjectSet - - typedef struct _FcObjectSet { - int nobject; - int sobject; - const char **objects; - } FcObjectSet; - - holds a set of names and is used to specify which fields from - fonts are placed in the the list of returned patterns when - listing fonts. - __________________________________________________________ - -FcObjectType - - typedef struct _FcObjectType { - const char *object; - FcType type; - } FcObjectType; - - marks the type of a pattern element generated when parsing font - names. Applications can add new object types so that font names - may contain the new elements. - __________________________________________________________ - -FcConstant - - typedef struct _FcConstant { - const FcChar8 *name; - const char *object; - int value; - } FcConstant; - - Provides for symbolic constants for new pattern elements. When - 'name' is seen in a font name, an 'object' element is created - with value 'value'. - __________________________________________________________ - -FcBlanks - - holds a list of Unicode chars which are expected to be blank; - unexpectedly blank chars are assumed to be invalid and are - elided from the charset associated with the font. - - FcBlanks is deprecated and should not be used in newly written - code. It is still accepted by some functions for compatibility - with older code but will be removed in the future. - __________________________________________________________ - -FcFileCache - - holds the per-user cache information for use while loading the - font database. This is built automatically for the current - configuration when that is loaded. Applications must always - pass '0' when one is requested. - __________________________________________________________ - -FcConfig - - holds a complete configuration of the library; there is one - default configuration, other can be constructed from XML data - structures. All public entry points that need global data can - take an optional FcConfig* argument; passing 0 uses the default - configuration. FcConfig objects hold two sets of fonts, the - first contains those specified by the configuration, the second - set holds those added by the application at run-time. - Interfaces that need to reference a particular set use one of + + -------------------------------------------------------------------------- + + FcValue + + An FcValue object holds a single value with one of a number of different + types. The 'type' tag indicates which member is valid. + + typedef struct _FcValue { + FcType type; + union { + const FcChar8 *s; + int i; + FcBool b; + double d; + const FcMatrix *m; + const FcCharSet *c; + void *f; + const FcLangSet *l; + } u; + } FcValue; + + + FcValue Members + + Type Union member Datatype + -------------------------------- + FcTypeVoid (none) (none) + FcTypeInteger i int + FcTypeDouble d double + FcTypeString s FcChar8 * + FcTypeBool b b + FcTypeMatrix m FcMatrix * + FcTypeCharSet c FcCharSet * + FcTypeFTFace f void * (FT_Face) + FcTypeLangSet l FcLangSet * + + + -------------------------------------------------------------------------- + + FcPattern + + holds a set of names with associated value lists; each name refers to a + property of a font. FcPatterns are used as inputs to the matching code as + well as holding information about specific fonts. Each property can hold + one or more values; conventionally all of the same type, although the + interface doesn't demand that. + + -------------------------------------------------------------------------- + + FcFontSet + + typedef struct _FcFontSet { + int nfont; + int sfont; + FcPattern **fonts; + } FcFontSet; + + + An FcFontSet contains a list of FcPatterns. Internally fontconfig uses + this data structure to hold sets of fonts. Externally, fontconfig returns + the results of listing fonts in this format. 'nfont' holds the number of + patterns in the 'fonts' array; 'sfont' is used to indicate the size of + that array. + + -------------------------------------------------------------------------- + + FcStrSet, FcStrList + + FcStrSet holds a list of strings that can be appended to and enumerated. + Its unique characteristic is that the enumeration works even while strings + are appended during enumeration. FcStrList is used during enumeration to + safely and correctly walk the list of strings even while that list is + edited in the middle of enumeration. + + -------------------------------------------------------------------------- + + FcObjectSet + + typedef struct _FcObjectSet { + int nobject; + int sobject; + const char **objects; + } FcObjectSet; + + + holds a set of names and is used to specify which fields from fonts are + placed in the the list of returned patterns when listing fonts. + + -------------------------------------------------------------------------- + + FcObjectType + + typedef struct _FcObjectType { + const char *object; + FcType type; + } FcObjectType; + + + marks the type of a pattern element generated when parsing font names. + Applications can add new object types so that font names may contain the + new elements. + + -------------------------------------------------------------------------- + + FcConstant + + typedef struct _FcConstant { + const FcChar8 *name; + const char *object; + int value; + } FcConstant; + + + Provides for symbolic constants for new pattern elements. When 'name' is + seen in a font name, an 'object' element is created with value 'value'. + + -------------------------------------------------------------------------- + + FcBlanks + + holds a list of Unicode chars which are expected to be blank; unexpectedly + blank chars are assumed to be invalid and are elided from the charset + associated with the font. + + FcBlanks is deprecated and should not be used in newly written code. It is + still accepted by some functions for compatibility with older code but + will be removed in the future. + + -------------------------------------------------------------------------- + + FcFileCache + + holds the per-user cache information for use while loading the font + database. This is built automatically for the current configuration when + that is loaded. Applications must always pass '0' when one is requested. + + -------------------------------------------------------------------------- + + FcConfig + + holds a complete configuration of the library; there is one default + configuration, other can be constructed from XML data structures. All + public entry points that need global data can take an optional FcConfig* + argument; passing 0 uses the default configuration. FcConfig objects hold + two sets of fonts, the first contains those specified by the + configuration, the second set holds those added by the application at + run-time. Interfaces that need to reference a particular set use one of the FcSetName enumerated values. - __________________________________________________________ - -FcSetName - - Specifies one of the two sets of fonts available in a - configuration; FcSetSystem for those fonts specified in the - configuration and FcSetApplication which holds fonts provided - by the application. - __________________________________________________________ - -FcResult - - Used as a return type for functions manipulating FcPattern - objects. - FcResult Values - Result Code Meaning - ----------------------------------------------------------- - FcResultMatch Object exists with the specified ID - FcResultNoMatch Object doesn't exist at all - FcResultTypeMismatch Object exists, but the type doesn't matc -h - FcResultNoId Object exists, but has fewer values - than specified - FcResultOutOfMemory malloc failed - __________________________________________________________ - -FcAtomic - - Used for locking access to configuration files. Provides a safe - way to update configuration files. - __________________________________________________________ - -FcCache - - Holds information about the fonts contained in a single - directory. Normal applications need not worry about this as - caches for font access are automatically managed by the - library. Applications dealing with cache management may want to - use some of these objects in their work, however the included - 'fc-cache' program generally suffices for all of that. - __________________________________________________________ + + -------------------------------------------------------------------------- + + FcSetName + + Specifies one of the two sets of fonts available in a configuration; + FcSetSystem for those fonts specified in the configuration and + FcSetApplication which holds fonts provided by the application. + + -------------------------------------------------------------------------- + + FcResult + + Used as a return type for functions manipulating FcPattern objects. + + FcResult Values + Result Code Meaning + ----------------------------------------------------------- + FcResultMatch Object exists with the specified ID + FcResultNoMatch Object doesn't exist at all + FcResultTypeMismatch Object exists, but the type doesn't match + FcResultNoId Object exists, but has fewer values + than specified + FcResultOutOfMemory malloc failed + + + -------------------------------------------------------------------------- + + FcAtomic + + Used for locking access to configuration files. Provides a safe way to + update configuration files. + + -------------------------------------------------------------------------- + + FcCache + + Holds information about the fonts contained in a single directory. Normal + applications need not worry about this as caches for font access are + automatically managed by the library. Applications dealing with cache + management may want to use some of these objects in their work, however + the included 'fc-cache' program generally suffices for all of that. + + -------------------------------------------------------------------------- FUNCTIONS - These are grouped by functionality, often using the main data - type being manipulated. - __________________________________________________________ + These are grouped by functionality, often using the main data type being + manipulated. + + -------------------------------------------------------------------------- -Initialization + Initialization Table of Contents - FcInitLoadConfig -- load configuration - FcInitLoadConfigAndFonts -- load configuration and font data - FcInit -- initialize fontconfig library - FcFini -- finalize fontconfig library - FcGetVersion -- library version number - FcInitReinitialize -- re-initialize library - FcInitBringUptoDate -- reload configuration files if needed - These functions provide some control over how the library is - initialized. + [5]FcInitLoadConfig -- load configuration -FcInitLoadConfig + [6]FcInitLoadConfigAndFonts -- load configuration and font data + + [7]FcInit -- initialize fontconfig library + + [8]FcFini -- finalize fontconfig library + + [9]FcGetVersion -- library version number + + [10]FcInitReinitialize -- re-initialize library + + [11]FcInitBringUptoDate -- reload configuration files if needed + + These functions provide some control over how the library is initialized. + + FcInitLoadConfig Name - FcInitLoadConfig -- load configuration + FcInitLoadConfig -- load configuration Synopsis -#include + #include + FcConfig * FcInitLoadConfig(void); @@ -481,71 +463,74 @@ Description Loads the default configuration file and returns the resulting configuration. Does not load any font information. -FcInitLoadConfigAndFonts + FcInitLoadConfigAndFonts Name - FcInitLoadConfigAndFonts -- load configuration and font data + FcInitLoadConfigAndFonts -- load configuration and font data Synopsis -#include + #include + FcConfig * FcInitLoadConfigAndFonts(void); Description - Loads the default configuration file and builds information - about the available fonts. Returns the resulting configuration. + Loads the default configuration file and builds information about the + available fonts. Returns the resulting configuration. -FcInit + FcInit Name - FcInit -- initialize fontconfig library + FcInit -- initialize fontconfig library Synopsis -#include + #include + FcBool FcInit(void); Description - Loads the default configuration file and the fonts referenced - therein and sets the default configuration to that result. - Returns whether this process succeeded or not. If the default - configuration has already been loaded, this routine does - nothing and returns FcTrue. + Loads the default configuration file and the fonts referenced therein and + sets the default configuration to that result. Returns whether this + process succeeded or not. If the default configuration has already been + loaded, this routine does nothing and returns FcTrue. -FcFini + FcFini Name - FcFini -- finalize fontconfig library + FcFini -- finalize fontconfig library Synopsis -#include + #include + void FcFini(void); Description - Frees all data structures allocated by previous calls to - fontconfig functions. Fontconfig returns to an uninitialized - state, requiring a new call to one of the FcInit functions - before any other fontconfig function may be called. + Frees all data structures allocated by previous calls to fontconfig + functions. Fontconfig returns to an uninitialized state, requiring a new + call to one of the FcInit functions before any other fontconfig function + may be called. -FcGetVersion + FcGetVersion Name - FcGetVersion -- library version number + FcGetVersion -- library version number Synopsis -#include + #include + int FcGetVersion(void); @@ -553,515 +538,764 @@ Description Returns the version number of the library. -FcInitReinitialize + FcInitReinitialize Name - FcInitReinitialize -- re-initialize library + FcInitReinitialize -- re-initialize library Synopsis -#include + #include + FcBool FcInitReinitialize(void); Description - Forces the default configuration file to be reloaded and resets - the default configuration. Returns FcFalse if the configuration - cannot be reloaded (due to configuration file errors, - allocation failures or other issues) and leaves the existing - configuration unchanged. Otherwise returns FcTrue. + Forces the default configuration file to be reloaded and resets the + default configuration. Returns FcFalse if the configuration cannot be + reloaded (due to configuration file errors, allocation failures or other + issues) and leaves the existing configuration unchanged. Otherwise returns + FcTrue. -FcInitBringUptoDate + FcInitBringUptoDate Name - FcInitBringUptoDate -- reload configuration files if needed + FcInitBringUptoDate -- reload configuration files if needed Synopsis -#include + #include + FcBool FcInitBringUptoDate(void); Description - Checks the rescan interval in the default configuration, - checking the configuration if the interval has passed and - reloading the configuration if when any changes are detected. - Returns FcFalse if the configuration cannot be reloaded (see - FcInitReinitialize). Otherwise returns FcTrue. - __________________________________________________________ + Checks the rescan interval in the default configuration, checking the + configuration if the interval has passed and reloading the configuration + if when any changes are detected. Returns FcFalse if the configuration + cannot be reloaded (see FcInitReinitialize). Otherwise returns FcTrue. + + -------------------------------------------------------------------------- -FcPattern + FcPattern Table of Contents - FcPatternCreate -- Create a pattern - FcPatternDuplicate -- Copy a pattern - FcPatternReference -- Increment pattern reference count - FcPatternDestroy -- Destroy a pattern - FcPatternEqual -- Compare patterns - FcPatternEqualSubset -- Compare portions of patterns - FcPatternFilter -- Filter the objects of pattern - FcPatternHash -- Compute a pattern hash value - FcPatternAdd -- Add a value to a pattern - FcPatternAddWeak -- Add a value to a pattern with weak binding - FcPatternAdd-Type -- Add a typed value to a pattern - FcPatternGetWithBinding -- Return a value with binding from a - pattern - FcPatternGet -- Return a value from a pattern - FcPatternGet-Type -- Return a typed value from a pattern - FcPatternBuild -- Create patterns from arguments - FcPatternDel -- Delete a property from a pattern - FcPatternRemove -- Remove one object of the specified type from - the pattern + [12]FcPatternCreate -- Create a pattern + + [13]FcPatternDuplicate -- Copy a pattern + + [14]FcPatternReference -- Increment pattern reference count + + [15]FcPatternDestroy -- Destroy a pattern + + [16]FcPatternObjectCount -- Returns the number of the object + + [17]FcPatternEqual -- Compare patterns + + [18]FcPatternEqualSubset -- Compare portions of patterns + + [19]FcPatternFilter -- Filter the objects of pattern + + [20]FcPatternHash -- Compute a pattern hash value + + [21]FcPatternAdd -- Add a value to a pattern + + [22]FcPatternAddWeak -- Add a value to a pattern with weak binding + + [23]FcPatternAdd-Type -- Add a typed value to a pattern - FcPatternPrint -- Print a pattern for debugging - FcDefaultSubstitute -- Perform default substitutions in a - pattern + [24]FcPatternGetWithBinding -- Return a value with binding from a pattern - FcNameParse -- Parse a pattern string - FcNameUnparse -- Convert a pattern back into a string that can - be parsed + [25]FcPatternGet -- Return a value from a pattern - FcPatternFormat -- Format a pattern into a string according to - a format specifier + [26]FcPatternGet-Type -- Return a typed value from a pattern - An FcPattern is an opaque type that holds both patterns to - match against the available fonts, as well as the information - about each font. + [27]FcPatternBuild -- Create patterns from arguments -FcPatternCreate + [28]FcPatternDel -- Delete a property from a pattern + + [29]FcPatternRemove -- Remove one object of the specified type from the + pattern + + [30]FcPatternIterStart -- Initialize the iterator with the first iterator + in the pattern + + [31]FcPatternIterNext --  + + [32]FcPatternIterEqual -- Compare iterators + + [33]FcPatternFindIter -- Set the iterator to point to the object in the + pattern + + [34]FcPatternIterIsValid -- Check whether the iterator is valid or not + + [35]FcPatternIterGetObject -- Returns an object name which the iterator + point to + + [36]FcPatternIterValueCount -- Returns the number of the values which the + iterator point to + + [37]FcPatternIterGetValue -- Returns a value which the iterator point to + + [38]FcPatternPrint -- Print a pattern for debugging + + [39]FcDefaultSubstitute -- Perform default substitutions in a pattern + + [40]FcNameParse -- Parse a pattern string + + [41]FcNameUnparse -- Convert a pattern back into a string that can be + parsed + + [42]FcPatternFormat -- Format a pattern into a string according to a + format specifier + + An FcPattern is an opaque type that holds both patterns to match against + the available fonts, as well as the information about each font. + + FcPatternCreate Name - FcPatternCreate -- Create a pattern + FcPatternCreate -- Create a pattern Synopsis -#include + #include + FcPattern * FcPatternCreate(void); Description - Creates a pattern with no properties; used to build patterns - from scratch. + Creates a pattern with no properties; used to build patterns from scratch. -FcPatternDuplicate + FcPatternDuplicate Name - FcPatternDuplicate -- Copy a pattern + FcPatternDuplicate -- Copy a pattern Synopsis -#include + #include + FcPattern * FcPatternDuplicate(const FcPattern *p); Description - Copy a pattern, returning a new pattern that matches p. Each - pattern may be modified without affecting the other. + Copy a pattern, returning a new pattern that matches p. Each pattern may + be modified without affecting the other. -FcPatternReference + FcPatternReference Name - FcPatternReference -- Increment pattern reference count + FcPatternReference -- Increment pattern reference count Synopsis -#include + #include + void FcPatternReference(FcPattern *p); Description - Add another reference to p. Patterns are freed only when the - reference count reaches zero. + Add another reference to p. Patterns are freed only when the reference + count reaches zero. -FcPatternDestroy + FcPatternDestroy Name - FcPatternDestroy -- Destroy a pattern + FcPatternDestroy -- Destroy a pattern Synopsis -#include + #include + void FcPatternDestroy(FcPattern *p); Description - Decrement the pattern reference count. If all references are - gone, destroys the pattern, in the process destroying all - related values. + Decrement the pattern reference count. If all references are gone, + destroys the pattern, in the process destroying all related values. + + FcPatternObjectCount + +Name + + FcPatternObjectCount -- Returns the number of the object + +Synopsis + + #include + + + int FcPatternObjectCount(const FcPattern *p); + +Description + + Returns the number of the object p has. + +Since + + version 2.13.1 -FcPatternEqual + FcPatternEqual Name - FcPatternEqual -- Compare patterns + FcPatternEqual -- Compare patterns Synopsis -#include + #include + - FcBool FcPatternEqual(const FcPattern *pa, const FcPattern - *pb); + FcBool FcPatternEqual(const FcPattern *pa, const FcPattern *pb); Description Returns whether pa and pb are exactly alike. -FcPatternEqualSubset + FcPatternEqualSubset Name - FcPatternEqualSubset -- Compare portions of patterns + FcPatternEqualSubset -- Compare portions of patterns Synopsis -#include + #include + - FcBool FcPatternEqualSubset(const FcPattern *pa, const - FcPattern *pb, const FcObjectSet *os); + FcBool FcPatternEqualSubset(const FcPattern *pa, const FcPattern *pb, + const FcObjectSet *os); Description - Returns whether pa and pb have exactly the same values for all - of the objects in os. + Returns whether pa and pb have exactly the same values for all of the + objects in os. -FcPatternFilter + FcPatternFilter Name - FcPatternFilter -- Filter the objects of pattern + FcPatternFilter -- Filter the objects of pattern Synopsis -#include + #include + FcPattern * FcPatternFilter(FcPattern *p, const FcObjectSet *); Description - Returns a new pattern that only has those objects from p that - are in os. If os is NULL, a duplicate of p is returned. + Returns a new pattern that only has those objects from p that are in os. + If os is NULL, a duplicate of p is returned. -FcPatternHash + FcPatternHash Name - FcPatternHash -- Compute a pattern hash value + FcPatternHash -- Compute a pattern hash value Synopsis -#include + #include + FcChar32 FcPatternHash(const FcPattern *p); Description - Returns a 32-bit number which is the same for any two patterns - which are equal. + Returns a 32-bit number which is the same for any two patterns which are + equal. -FcPatternAdd + FcPatternAdd Name - FcPatternAdd -- Add a value to a pattern + FcPatternAdd -- Add a value to a pattern Synopsis -#include + #include - FcBool FcPatternAdd(FcPattern *p, const char *object, FcValue - value, FcBool append); + + FcBool FcPatternAdd(FcPattern *p, const char *object, FcValue value, + FcBool append); Description - Adds a single value to the list of values associated with the - property named `object. If `append is FcTrue, the value is - added at the end of any existing list, otherwise it is inserted - at the beginning. `value' is saved (with FcValueSave) when - inserted into the pattern so that the library retains no - reference to any application-supplied data structure. + Adds a single value to the list of values associated with the property + named `object. If `append is FcTrue, the value is added at the end of any + existing list, otherwise it is inserted at the beginning. `value' is saved + (with FcValueSave) when inserted into the pattern so that the library + retains no reference to any application-supplied data structure. -FcPatternAddWeak + FcPatternAddWeak Name - FcPatternAddWeak -- Add a value to a pattern with weak binding + FcPatternAddWeak -- Add a value to a pattern with weak binding Synopsis -#include + #include + - FcBool FcPatternAddWeak(FcPattern *p, const char *object, - FcValue value, FcBool append); + FcBool FcPatternAddWeak(FcPattern *p, const char *object, FcValue value, + FcBool append); Description - FcPatternAddWeak is essentially the same as FcPatternAdd except - that any values added to the list have binding weak instead of - strong. + FcPatternAddWeak is essentially the same as FcPatternAdd except that any + values added to the list have binding weak instead of strong. -FcPatternAdd-Type + FcPatternAdd-Type Name FcPatternAddInteger, FcPatternAddDouble, FcPatternAddString, FcPatternAddMatrix, FcPatternAddCharSet, FcPatternAddBool, - FcPatternAddFTFace, FcPatternAddLangSet, - FcPatternAddRange -- Add a typed value to a pattern + FcPatternAddFTFace, FcPatternAddLangSet, FcPatternAddRange -- Add a typed + value to a pattern Synopsis -#include + #include + - FcBool FcPatternAddInteger(FcPattern *p, const char *object, - int i); + FcBool FcPatternAddInteger(FcPattern *p, const char *object, int i); - FcBool FcPatternAddDouble(FcPattern *p, const char *object, - double d); + FcBool FcPatternAddDouble(FcPattern *p, const char *object, double d); - FcBool FcPatternAddString(FcPattern *p, const char *object, - const FcChar8 *s); + FcBool FcPatternAddString(FcPattern *p, const char *object, const FcChar8 + *s); - FcBool FcPatternAddMatrix(FcPattern *p, const char *object, - const FcMatrix *m); + FcBool FcPatternAddMatrix(FcPattern *p, const char *object, const FcMatrix + *m); - FcBool FcPatternAddCharSet(FcPattern *p, const char *object, - const FcCharSet *c); + FcBool FcPatternAddCharSet(FcPattern *p, const char *object, const + FcCharSet *c); - FcBool FcPatternAddBool(FcPattern *p, const char *object, - FcBool b); + FcBool FcPatternAddBool(FcPattern *p, const char *object, FcBool b); - FcBool FcPatternAddFTFace(FcPattern *p, const char *object, - const FT_Facef); + FcBool FcPatternAddFTFace(FcPattern *p, const char *object, const + FT_Facef); - FcBool FcPatternAddLangSet(FcPattern *p, const char *object, - const FcLangSet *l); + FcBool FcPatternAddLangSet(FcPattern *p, const char *object, const + FcLangSet *l); - FcBool FcPatternAddRange(FcPattern *p, const char *object, - const FcRange *r); + FcBool FcPatternAddRange(FcPattern *p, const char *object, const FcRange + *r); Description - These are all convenience functions that insert objects of the - specified type into the pattern. Use these in preference to - FcPatternAdd as they will provide compile-time typechecking. - These all append values to any existing list of values. - FcPatternAddRange are available since 2.11.91. + These are all convenience functions that insert objects of the specified + type into the pattern. Use these in preference to FcPatternAdd as they + will provide compile-time typechecking. These all append values to any + existing list of values. FcPatternAddRange are available since 2.11.91. -FcPatternGetWithBinding + FcPatternGetWithBinding Name - FcPatternGetWithBinding -- Return a value with binding from a - pattern + FcPatternGetWithBinding -- Return a value with binding from a pattern Synopsis -#include + #include + - FcResult FcPatternGetWithBinding(FcPattern *p, const char - *object, int id, FcValue *v, FcValueBinding *b); + FcResult FcPatternGetWithBinding(FcPattern *p, const char *object, int id, + FcValue *v, FcValueBinding *b); Description - Returns in v the id'th value and b binding for that associated - with the property object. The Value returned is not a copy, but - rather refers to the data stored within the pattern directly. - Applications must not free this value. + Returns in v the id'th value and b binding for that associated with the + property object. The Value returned is not a copy, but rather refers to + the data stored within the pattern directly. Applications must not free + this value. Since version 2.12.5 -FcPatternGet + FcPatternGet Name - FcPatternGet -- Return a value from a pattern + FcPatternGet -- Return a value from a pattern Synopsis -#include + #include - FcResult FcPatternGet(FcPattern *p, const char *object, int id, - FcValue *v); + + FcResult FcPatternGet(FcPattern *p, const char *object, int id, FcValue + *v); Description - Returns in v the id'th value associated with the property - object. The value returned is not a copy, but rather refers to - the data stored within the pattern directly. Applications must - not free this value. + Returns in v the id'th value associated with the property object. The + value returned is not a copy, but rather refers to the data stored within + the pattern directly. Applications must not free this value. -FcPatternGet-Type + FcPatternGet-Type Name FcPatternGetInteger, FcPatternGetDouble, FcPatternGetString, FcPatternGetMatrix, FcPatternGetCharSet, FcPatternGetBool, - FcPatternGetFTFace, FcPatternGetLangSet, - FcPatternGetRange -- Return a typed value from a pattern + FcPatternGetFTFace, FcPatternGetLangSet, FcPatternGetRange -- Return a + typed value from a pattern Synopsis -#include + #include + - FcResult FcPatternGetInteger(FcPattern *p, const char *object, - int n, int *i); + FcResult FcPatternGetInteger(FcPattern *p, const char *object, int n, int + *i); - FcResult FcPatternGetDouble(FcPattern *p, const char *object, - int n, double *d); + FcResult FcPatternGetDouble(FcPattern *p, const char *object, int n, + double *d); - FcResult FcPatternGetString(FcPattern *p, const char *object, - int n, FcChar8 **s); + FcResult FcPatternGetString(FcPattern *p, const char *object, int n, + FcChar8 **s); - FcResult FcPatternGetMatrix(FcPattern *p, const char *object, - int n, FcMatrix **s); + FcResult FcPatternGetMatrix(FcPattern *p, const char *object, int n, + FcMatrix **s); - FcResult FcPatternGetCharSet(FcPattern *p, const char *object, - int n, FcCharSet **c); + FcResult FcPatternGetCharSet(FcPattern *p, const char *object, int n, + FcCharSet **c); - FcResult FcPatternGetBool(FcPattern *p, const char *object, int - n, FcBool *b); + FcResult FcPatternGetBool(FcPattern *p, const char *object, int n, FcBool + *b); - FcResult FcPatternGetFTFace(FcPattern *p, const char *object, - int n, FT_Face *f); + FcResult FcPatternGetFTFace(FcPattern *p, const char *object, int n, + FT_Face *f); - FcResult FcPatternGetLangSet(FcPattern *p, const char *object, - int n, FcLangSet **l); + FcResult FcPatternGetLangSet(FcPattern *p, const char *object, int n, + FcLangSet **l); - FcResult FcPatternGetRange(FcPattern *p, const char *object, - int n, FcRange **r); + FcResult FcPatternGetRange(FcPattern *p, const char *object, int n, + FcRange **r); Description - These are convenience functions that call FcPatternGet and - verify that the returned data is of the expected type. They - return FcResultTypeMismatch if this is not the case. Note that - these (like FcPatternGet) do not make a copy of any data - structure referenced by the return value. Use these in - preference to FcPatternGet to provide compile-time - typechecking. FcPatternGetRange are available since 2.11.91. + These are convenience functions that call FcPatternGet and verify that the + returned data is of the expected type. They return FcResultTypeMismatch if + this is not the case. Note that these (like FcPatternGet) do not make a + copy of any data structure referenced by the return value. Use these in + preference to FcPatternGet to provide compile-time typechecking. + FcPatternGetRange are available since 2.11.91. -FcPatternBuild + FcPatternBuild Name - FcPatternBuild, FcPatternVaBuild, FcPatternVapBuild -- Create - patterns from arguments + FcPatternBuild, FcPatternVaBuild, FcPatternVapBuild -- Create patterns + from arguments Synopsis -#include + #include + FcPattern * FcPatternBuild(FcPattern *pattern, ...); FcPattern * FcPatternVaBuild(FcPattern *pattern, va_list va); - void FcPatternVapBuild(FcPattern *result, FcPattern *pattern, - va_list va); + void FcPatternVapBuild(FcPattern *result, FcPattern *pattern, va_list va); Description - Builds a pattern using a list of objects, types and values. - Each value to be entered in the pattern is specified with three - arguments: + Builds a pattern using a list of objects, types and values. Each value to + be entered in the pattern is specified with three arguments: + +  1. Object name, a string describing the property to be added. - 1. Object name, a string describing the property to be added. - 2. Object type, one of the FcType enumerated values - 3. Value, not an FcValue, but the raw type as passed to any of - the FcPatternAdd functions. Must match the type of - the second argument. +  2. Object type, one of the FcType enumerated values - The argument list is terminated by a null object name, no - object type nor value need be passed for this. The values are - added to `pattern', if `pattern' is null, a new pattern is - created. In either case, the pattern is returned. Example -pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) -0); +  3. Value, not an FcValue, but the raw type as passed to any of the + FcPatternAdd functions. Must match the type of the second + argument. - FcPatternVaBuild is used when the arguments are already in the - form of a varargs value. FcPatternVapBuild is a macro version - of FcPatternVaBuild which returns its result directly in the - result variable. + The argument list is terminated by a null object name, no object type nor + value need be passed for this. The values are added to `pattern', if + `pattern' is null, a new pattern is created. In either case, the pattern + is returned. Example -FcPatternDel + pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0); + + FcPatternVaBuild is used when the arguments are already in the form of a + varargs value. FcPatternVapBuild is a macro version of FcPatternVaBuild + which returns its result directly in the result variable. + + FcPatternDel Name - FcPatternDel -- Delete a property from a pattern + FcPatternDel -- Delete a property from a pattern Synopsis -#include + #include + FcBool FcPatternDel(FcPattern *p, const char *object); Description - Deletes all values associated with the property `object', - returning whether the property existed or not. + Deletes all values associated with the property `object', returning + whether the property existed or not. -FcPatternRemove + FcPatternRemove Name - FcPatternRemove -- Remove one object of the specified type from + FcPatternRemove -- Remove one object of the specified type from the + pattern + +Synopsis + + #include + + + FcBool FcPatternRemove(FcPattern *p, const char *object, int id); + +Description + + Removes the value associated with the property `object' at position `id', + returning whether the property existed and had a value at that position or + not. + + FcPatternIterStart + +Name + + FcPatternIterStart -- Initialize the iterator with the first iterator in the pattern Synopsis -#include + #include - FcBool FcPatternRemove(FcPattern *p, const char *object, int - id); + + void FcPatternIterStart(const FcPattern *p, FcPatternIter *iter); Description - Removes the value associated with the property `object' at - position `id', returning whether the property existed and had a - value at that position or not. + Initialize iter with the first iterator in p. If there are no objects in + p, iter will not have any valid data. -FcPatternPrint +Since + + version 2.13.1 + + FcPatternIterNext Name - FcPatternPrint -- Print a pattern for debugging + FcPatternIterNext --  Synopsis -#include + #include - void FcPatternPrint(const FcPattern *p); + + FcBool FcPatternIterNext(const FcPattern *p, FcPatternIter *iter); Description - Prints an easily readable version of the pattern to stdout. - There is no provision for reparsing data in this format, it's - just for diagnostics and debugging. + Set iter to point to the next object in p and returns FcTrue if iter has + been changed to the next object. returns FcFalse otherwise. -FcDefaultSubstitute +Since + + version 2.13.1 + + FcPatternIterEqual + +Name + + FcPatternIterEqual -- Compare iterators + +Synopsis + + #include + + + FcBool FcPatternIterEqual(const FcPattern *p1, FcPatternIter *i1, const + FcPattern *p2, FcPatternIter *i2); + +Description + + Return FcTrue if both i1 and i2 point to same object and contains same + values. return FcFalse otherwise. + +Since + + version 2.13.1 + + FcPatternFindIter Name - FcDefaultSubstitute -- Perform default substitutions in a + FcPatternFindIter -- Set the iterator to point to the object in the pattern Synopsis -#include + #include + + + FcBool FcPatternFindIter(const FcPattern *p, FcPatternIter *iter, const + char *object); + +Description + + Set iter to point to object in p if any and returns FcTrue. returns + FcFalse otherwise. + +Since + + version 2.13.1 + + FcPatternIterIsValid + +Name + + FcPatternIterIsValid -- Check whether the iterator is valid or not + +Synopsis + + #include + + + FcBool FcPatternIterIsValid(const FcPattern *p, FcPatternIter :iter); + +Description + + Returns FcTrue if iter point to the valid entry in p. returns FcFalse + otherwise. + +Since + + version 2.13.1 + + FcPatternIterGetObject + +Name + + FcPatternIterGetObject -- Returns an object name which the iterator point + to + +Synopsis + + #include + + + const char * FcPatternIterGetObject(const FcPattern *p, FcPatternIter + *iter); + +Description + + Returns an object name in p which iter point to. returns NULL if iter + isn't valid. + +Since + + version 2.13.1 + + FcPatternIterValueCount + +Name + + FcPatternIterValueCount -- Returns the number of the values which the + iterator point to + +Synopsis + + #include + + + int FcPatternIterValueCount(const FcPattern *p, FcPatternIter *iter); + +Description + + Returns the number of the values in the object which iter point to. if + iter isn't valid, returns 0. + +Since + + version 2.13.1 + + FcPatternIterGetValue + +Name + + FcPatternIterGetValue -- Returns a value which the iterator point to + +Synopsis + + #include + + + FcResult FcPatternIterGetValue(const FcPattern *p, FcPatternIter *iter, + intid, FcValue *v, FcValueBinding *b); + +Description + + Returns in v the id'th value which iter point to. also binding to b if + given. The value returned is not a copy, but rather refers to the data + stored within the pattern directly. Applications must not free this value. + +Since + + version 2.13.1 + + FcPatternPrint + +Name + + FcPatternPrint -- Print a pattern for debugging + +Synopsis + + #include + + + void FcPatternPrint(const FcPattern *p); + +Description + + Prints an easily readable version of the pattern to stdout. There is no + provision for reparsing data in this format, it's just for diagnostics and + debugging. + + FcDefaultSubstitute + +Name + + FcDefaultSubstitute -- Perform default substitutions in a pattern + +Synopsis + + #include + void FcDefaultSubstitute(FcPattern *pattern); @@ -1069,300 +1303,297 @@ Description Supplies default values for underspecified font patterns: - * Patterns without a specified style or weight are set to - Medium - * Patterns without a specified style or slant are set to - Roman - * Patterns without a specified pixel size are given one - computed from any specified point size (default 12), dpi - (default 75) and scale (default 1). + * Patterns without a specified style or weight are set to Medium + + * Patterns without a specified style or slant are set to Roman + + * Patterns without a specified pixel size are given one computed from + any specified point size (default 12), dpi (default 75) and scale + (default 1). -FcNameParse + FcNameParse Name - FcNameParse -- Parse a pattern string + FcNameParse -- Parse a pattern string Synopsis -#include + #include + FcPattern * FcNameParse(const FcChar8 *name); Description - Converts name from the standard text format described above - into a pattern. + Converts name from the standard text format described above into a + pattern. -FcNameUnparse + FcNameUnparse Name - FcNameUnparse -- Convert a pattern back into a string that can - be parsed + FcNameUnparse -- Convert a pattern back into a string that can be parsed Synopsis -#include + #include + FcChar8 * FcNameUnparse(FcPattern *pat); Description - Converts the given pattern into the standard text format - described above. The return value is not static, but instead - refers to newly allocated memory which should be freed by the - caller using free(). - -FcPatternFormat - -Name - - FcPatternFormat -- Format a pattern into a string according to - a format specifier - -Synopsis - -#include - - FcChar8 * FcPatternFormat(FcPattern *pat, const FcChar8 - *format); - -Description - - Converts given pattern pat into text described by the format - specifier format. The return value refers to newly allocated - memory which should be freed by the caller using free(), or - NULL if format is invalid. - - The format is loosely modeled after printf-style format string. - The format string is composed of zero or more directives: - ordinary characters (not "%"), which are copied unchanged to - the output stream; and tags which are interpreted to construct - text from the pattern in a variety of ways (explained below). - Special characters can be escaped using backslash. C-string - style special characters like \n and \r are also supported - (this is useful when the format string is not a C string - literal). It is advisable to always escape curly braces that - are meant to be copied to the output as ordinary characters. - - Each tag is introduced by the character "%", followed by an - optional minimum field width, followed by tag contents in curly - braces ({}). If the minimum field width value is provided the - tag will be expanded and the result padded to achieve the - minimum width. If the minimum field width is positive, the - padding will right-align the text. Negative field width will - left-align. The rest of this section describes various - supported tag contents and their expansion. - - A simple tag is one where the content is an identifier. When - simple tags are expanded, the named identifier will be looked - up in pattern and the resulting list of values returned, joined - together using comma. For example, to print the family name and - style of the pattern, use the format "%{family} %{style}\n". To - extend the family column to forty characters use - "%-40{family}%{style}\n". - - Simple tags expand to list of all values for an element. To - only choose one of the values, one can index using the syntax - "%{elt[idx]}". For example, to get the first family name only, - use "%{family[0]}". - - If a simple tag ends with "=" and the element is found in the - pattern, the name of the element followed by "=" will be output - before the list of values. For example, "%{weight=}" may expand - to the string "weight=80". Or to the empty string if pattern - does not have weight set. - - If a simple tag starts with ":" and the element is found in the - pattern, ":" will be printed first. For example, combining this - with the =, the format "%{:weight=}" may expand to ":weight=80" - or to the empty string if pattern does not have weight set. - - If a simple tag contains the string ":-", the rest of the the - tag contents will be used as a default string. The default - string is output if the element is not found in the pattern. - For example, the format "%{:weight=:-123}" may expand to - ":weight=80" or to the string ":weight=123" if pattern does not - have weight set. - - A count tag is one that starts with the character "#" followed - by an element name, and expands to the number of values for the - element in the pattern. For example, "%{#family}" expands to - the number of family names pattern has set, which may be zero. - - A sub-expression tag is one that expands a sub-expression. The - tag contents are the sub-expression to expand placed inside - another set of curly braces. Sub-expression tags are useful for - aligning an entire sub-expression, or to apply converters - (explained later) to the entire sub-expression output. For - example, the format "%40{{%{family} %{style}}}" expands the - sub-expression to construct the family name followed by the - style, then takes the entire string and pads it on the left to - be at least forty characters. - - A filter-out tag is one starting with the character "-" - followed by a comma-separated list of element names, followed - by a sub-expression enclosed in curly braces. The - sub-expression will be expanded but with a pattern that has the - listed elements removed from it. For example, the format - "%{-size,pixelsize{sub-expr}}" will expand "sub-expr" with - pattern sans the size and pixelsize elements. - - A filter-in tag is one starting with the character "+" followed - by a comma-separated list of element names, followed by a - sub-expression enclosed in curly braces. The sub-expression - will be expanded but with a pattern that only has the listed - elements from the surrounding pattern. For example, the format - "%{+family,familylang{sub-expr}}" will expand "sub-expr" with a - sub-pattern consisting only the family and family lang elements - of pattern. - - A conditional tag is one starting with the character "?" - followed by a comma-separated list of element conditions, - followed by two sub-expression enclosed in curly braces. An - element condition can be an element name, in which case it - tests whether the element is defined in pattern, or the - character "!" followed by an element name, in which case the - test is negated. The conditional passes if all the element - conditions pass. The tag expands the first sub-expression if - the conditional passes, and expands the second sub-expression - otherwise. For example, the format - "%{?size,dpi,!pixelsize{pass}{fail}}" will expand to "pass" if - pattern has size and dpi elements but no pixelsize element, and - to "fail" otherwise. - - An enumerate tag is one starting with the string "[]" followed - by a comma-separated list of element names, followed by a - sub-expression enclosed in curly braces. The list of values for - the named elements are walked in parallel and the - sub-expression expanded each time with a pattern just having a - single value for those elements, starting from the first value - and continuing as long as any of those elements has a value. + Converts the given pattern into the standard text format described above. + The return value is not static, but instead refers to newly allocated + memory which should be freed by the caller using free(). + + FcPatternFormat + +Name + + FcPatternFormat -- Format a pattern into a string according to a format + specifier + +Synopsis + + #include + + + FcChar8 * FcPatternFormat(FcPattern *pat, const FcChar8 *format); + +Description + + Converts given pattern pat into text described by the format specifier + format. The return value refers to newly allocated memory which should be + freed by the caller using free(), or NULL if format is invalid. + + The format is loosely modeled after printf-style format string. The + format string is composed of zero or more directives: ordinary characters + (not "%"), which are copied unchanged to the output stream; and tags which + are interpreted to construct text from the pattern in a variety of ways + (explained below). Special characters can be escaped using backslash. + C-string style special characters like \n and \r are also supported (this + is useful when the format string is not a C string literal). It is + advisable to always escape curly braces that are meant to be copied to the + output as ordinary characters. + + Each tag is introduced by the character "%", followed by an optional + minimum field width, followed by tag contents in curly braces ({}). If the + minimum field width value is provided the tag will be expanded and the + result padded to achieve the minimum width. If the minimum field width is + positive, the padding will right-align the text. Negative field width will + left-align. The rest of this section describes various supported tag + contents and their expansion. + + A simple tag is one where the content is an identifier. When simple tags + are expanded, the named identifier will be looked up in pattern and the + resulting list of values returned, joined together using comma. For + example, to print the family name and style of the pattern, use the format + "%{family} %{style}\n". To extend the family column to forty characters + use "%-40{family}%{style}\n". + + Simple tags expand to list of all values for an element. To only choose + one of the values, one can index using the syntax "%{elt[idx]}". For + example, to get the first family name only, use "%{family[0]}". + + If a simple tag ends with "=" and the element is found in the pattern, + the name of the element followed by "=" will be output before the list of + values. For example, "%{weight=}" may expand to the string "weight=80". Or + to the empty string if pattern does not have weight set. + + If a simple tag starts with ":" and the element is found in the pattern, + ":" will be printed first. For example, combining this with the =, the + format "%{:weight=}" may expand to ":weight=80" or to the empty string if + pattern does not have weight set. + + If a simple tag contains the string ":-", the rest of the the tag + contents will be used as a default string. The default string is output if + the element is not found in the pattern. For example, the format + "%{:weight=:-123}" may expand to ":weight=80" or to the string + ":weight=123" if pattern does not have weight set. + + A count tag is one that starts with the character "#" followed by an + element name, and expands to the number of values for the element in the + pattern. For example, "%{#family}" expands to the number of family names + pattern has set, which may be zero. + + A sub-expression tag is one that expands a sub-expression. The tag + contents are the sub-expression to expand placed inside another set of + curly braces. Sub-expression tags are useful for aligning an entire + sub-expression, or to apply converters (explained later) to the entire + sub-expression output. For example, the format "%40{{%{family} %{style}}}" + expands the sub-expression to construct the family name followed by the + style, then takes the entire string and pads it on the left to be at least + forty characters. + + A filter-out tag is one starting with the character "-" followed by a + comma-separated list of element names, followed by a sub-expression + enclosed in curly braces. The sub-expression will be expanded but with a + pattern that has the listed elements removed from it. For example, the + format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr" with pattern + sans the size and pixelsize elements. + + A filter-in tag is one starting with the character "+" followed by a + comma-separated list of element names, followed by a sub-expression + enclosed in curly braces. The sub-expression will be expanded but with a + pattern that only has the listed elements from the surrounding pattern. + For example, the format "%{+family,familylang{sub-expr}}" will expand + "sub-expr" with a sub-pattern consisting only the family and family lang + elements of pattern. + + A conditional tag is one starting with the character "?" followed by a + comma-separated list of element conditions, followed by two sub-expression + enclosed in curly braces. An element condition can be an element name, in + which case it tests whether the element is defined in pattern, or the + character "!" followed by an element name, in which case the test is + negated. The conditional passes if all the element conditions pass. The + tag expands the first sub-expression if the conditional passes, and + expands the second sub-expression otherwise. For example, the format + "%{?size,dpi,!pixelsize{pass}{fail}}" will expand to "pass" if pattern has + size and dpi elements but no pixelsize element, and to "fail" otherwise. + + An enumerate tag is one starting with the string "[]" followed by a + comma-separated list of element names, followed by a sub-expression + enclosed in curly braces. The list of values for the named elements are + walked in parallel and the sub-expression expanded each time with a + pattern just having a single value for those elements, starting from the + first value and continuing as long as any of those elements has a value. For example, the format "%{[]family,familylang{%{family} - (%{familylang})\n}}" will expand the pattern "%{family} - (%{familylang})\n" with a pattern having only the first value - of the family and familylang elements, then expands it with the - second values, then the third, etc. + (%{familylang})\n}}" will expand the pattern "%{family} (%{familylang})\n" + with a pattern having only the first value of the family and familylang + elements, then expands it with the second values, then the third, etc. - As a special case, if an enumerate tag has only one element, - and that element has only one value in the pattern, and that - value is of type FcLangSet, the individual languages in the - language set are enumerated. + As a special case, if an enumerate tag has only one element, and that + element has only one value in the pattern, and that value is of type + FcLangSet, the individual languages in the language set are enumerated. - A builtin tag is one starting with the character "=" followed - by a builtin name. The following builtins are defined: + A builtin tag is one starting with the character "=" followed by a + builtin name. The following builtins are defined: unparse - Expands to the result of calling FcNameUnparse() on the - pattern. + + Expands to the result of calling FcNameUnparse() on the pattern. fcmatch - Expands to the output of the default output format of - the fc-match command on the pattern, without the final - newline. + + Expands to the output of the default output format of the fc-match + command on the pattern, without the final newline. fclist - Expands to the output of the default output format of - the fc-list command on the pattern, without the final - newline. + + Expands to the output of the default output format of the fc-list + command on the pattern, without the final newline. fccat - Expands to the output of the default output format of - the fc-cat command on the pattern, without the final - newline. + + Expands to the output of the default output format of the fc-cat + command on the pattern, without the final newline. pkgkit - Expands to the list of PackageKit font() tags for the - pattern. Currently this includes tags for each family - name, and each language from the pattern, enumerated and - sanitized into a set of tags terminated by newline. - Package management systems can use these tags to tag - their packages accordingly. - - For example, the format "%{+family,style{%{=unparse}}}\n" will - expand to an unparsed name containing only the family and style - element values from pattern. - - The contents of any tag can be followed by a set of zero or - more converters. A converter is specified by the character "|" - followed by the converter name and arguments. The following - converters are defined: + + Expands to the list of PackageKit font() tags for the pattern. + Currently this includes tags for each family name, and each + language from the pattern, enumerated and sanitized into a set of + tags terminated by newline. Package management systems can use + these tags to tag their packages accordingly. + + For example, the format "%{+family,style{%{=unparse}}}\n" will expand to + an unparsed name containing only the family and style element values from + pattern. + + The contents of any tag can be followed by a set of zero or more + converters. A converter is specified by the character "|" followed by the + converter name and arguments. The following converters are defined: basename - Replaces text with the results of calling - FcStrBasename() on it. + + Replaces text with the results of calling FcStrBasename() on it. dirname - Replaces text with the results of calling FcStrDirname() - on it. + + Replaces text with the results of calling FcStrDirname() on it. downcase - Replaces text with the results of calling - FcStrDowncase() on it. + + Replaces text with the results of calling FcStrDowncase() on it. shescape - Escapes text for one level of shell expansion. (Escapes - single-quotes, also encloses text in single-quotes.) + + Escapes text for one level of shell expansion. (Escapes + single-quotes, also encloses text in single-quotes.) cescape - Escapes text such that it can be used as part of a C - string literal. (Escapes backslash and double-quotes.) + + Escapes text such that it can be used as part of a C string + literal. (Escapes backslash and double-quotes.) xmlescape - Escapes text such that it can be used in XML and HTML. - (Escapes less-than, greater-than, and ampersand.) + + Escapes text such that it can be used in XML and HTML. (Escapes + less-than, greater-than, and ampersand.) delete(chars) - Deletes all occurrences of each of the characters in - chars from the text. FIXME: This converter is not UTF-8 - aware yet. + + Deletes all occurrences of each of the characters in chars from + the text. FIXME: This converter is not UTF-8 aware yet. escape(chars) - Escapes all occurrences of each of the characters in - chars by prepending it by the first character in chars. - FIXME: This converter is not UTF-8 aware yet. + + Escapes all occurrences of each of the characters in chars by + prepending it by the first character in chars. FIXME: This + converter is not UTF-8 aware yet. translate(from,to) - Translates all occurrences of each of the characters in - from by replacing them with their corresponding - character in to. If to has fewer characters than from, - it will be extended by repeating its last character. - FIXME: This converter is not UTF-8 aware yet. - For example, the format "%{family|downcase|delete( )}\n" will - expand to the values of the family element in pattern, - lower-cased and with spaces removed. + Translates all occurrences of each of the characters in from by + replacing them with their corresponding character in to. If to has + fewer characters than from, it will be extended by repeating its + last character. FIXME: This converter is not UTF-8 aware yet. + + For example, the format "%{family|downcase|delete( )}\n" will expand to + the values of the family element in pattern, lower-cased and with spaces + removed. Since version 2.9.0 - __________________________________________________________ -FcFontSet + -------------------------------------------------------------------------- + + FcFontSet Table of Contents - FcFontSetCreate -- Create a font set - FcFontSetDestroy -- Destroy a font set - FcFontSetAdd -- Add to a font set - FcFontSetList -- List fonts from a set of font sets - FcFontSetMatch -- Return the best font from a set of font sets - FcFontSetPrint -- Print a set of patterns to stdout - FcFontSetSort -- Add to a font set - FcFontSetSortDestroy -- DEPRECATED destroy a font set - An FcFontSet simply holds a list of patterns; these are used to - return the results of listing available fonts. + [43]FcFontSetCreate -- Create a font set + + [44]FcFontSetDestroy -- Destroy a font set + + [45]FcFontSetAdd -- Add to a font set + + [46]FcFontSetList -- List fonts from a set of font sets + + [47]FcFontSetMatch -- Return the best font from a set of font sets + + [48]FcFontSetPrint -- Print a set of patterns to stdout + + [49]FcFontSetSort -- Add to a font set + + [50]FcFontSetSortDestroy -- DEPRECATED destroy a font set -FcFontSetCreate + An FcFontSet simply holds a list of patterns; these are used to return the + results of listing available fonts. + + FcFontSetCreate Name - FcFontSetCreate -- Create a font set + FcFontSetCreate -- Create a font set Synopsis -#include + #include + FcFontSet * FcFontSetCreate(void); @@ -1370,178 +1601,187 @@ Description Creates an empty font set. -FcFontSetDestroy + FcFontSetDestroy Name - FcFontSetDestroy -- Destroy a font set + FcFontSetDestroy -- Destroy a font set Synopsis -#include + #include + void FcFontSetDestroy(FcFontSet *s); Description - Destroys a font set. Note that this destroys any referenced - patterns as well. + Destroys a font set. Note that this destroys any referenced patterns as + well. -FcFontSetAdd + FcFontSetAdd Name - FcFontSetAdd -- Add to a font set + FcFontSetAdd -- Add to a font set Synopsis -#include + #include + FcBool FcFontSetAdd(FcFontSet *s, FcPattern *font); Description - Adds a pattern to a font set. Note that the pattern is not - copied before being inserted into the set. Returns FcFalse if - the pattern cannot be inserted into the set (due to allocation - failure). Otherwise returns FcTrue. + Adds a pattern to a font set. Note that the pattern is not copied before + being inserted into the set. Returns FcFalse if the pattern cannot be + inserted into the set (due to allocation failure). Otherwise returns + FcTrue. -FcFontSetList + FcFontSetList Name - FcFontSetList -- List fonts from a set of font sets + FcFontSetList -- List fonts from a set of font sets Synopsis -#include + #include + - FcFontSet * FcFontSetList(FcConfig *config, FcFontSet **sets, - intnsets, FcPattern *pattern, FcObjectSet *object_set); + FcFontSet * FcFontSetList(FcConfig *config, FcFontSet **sets, intnsets, + FcPattern *pattern, FcObjectSet *object_set); Description - Selects fonts matching pattern from sets, creates patterns from - those fonts containing only the objects in object_set and - returns the set of unique such patterns. If config is NULL, the - default configuration is checked to be up to date, and used. + Selects fonts matching pattern from sets, creates patterns from those + fonts containing only the objects in object_set and returns the set of + unique such patterns. If config is NULL, the default configuration is + checked to be up to date, and used. -FcFontSetMatch + FcFontSetMatch Name - FcFontSetMatch -- Return the best font from a set of font sets + FcFontSetMatch -- Return the best font from a set of font sets Synopsis -#include + #include + - FcPattern * FcFontSetMatch(FcConfig *config, FcFontSet **sets, - intnsets, FcPattern *pattern, FcResult *result); + FcPattern * FcFontSetMatch(FcConfig *config, FcFontSet **sets, intnsets, + FcPattern *pattern, FcResult *result); Description - Finds the font in sets most closely matching pattern and - returns the result of FcFontRenderPrepare for that font and the - provided pattern. This function should be called only after - FcConfigSubstitute and FcDefaultSubstitute have been called for - pattern; otherwise the results will not be correct. If config - is NULL, the current configuration is used. Returns NULL if an - error occurs during this process. + Finds the font in sets most closely matching pattern and returns the + result of FcFontRenderPrepare for that font and the provided pattern. This + function should be called only after FcConfigSubstitute and + FcDefaultSubstitute have been called for pattern; otherwise the results + will not be correct. If config is NULL, the current configuration is used. + Returns NULL if an error occurs during this process. -FcFontSetPrint + FcFontSetPrint Name - FcFontSetPrint -- Print a set of patterns to stdout + FcFontSetPrint -- Print a set of patterns to stdout Synopsis -#include + #include + void FcFontSetPrint(FcFontSet *set); Description - This function is useful for diagnosing font related issues, - printing the complete contents of every pattern in set. The - format of the output is designed to be of help to users and - developers, and may change at any time. + This function is useful for diagnosing font related issues, printing the + complete contents of every pattern in set. The format of the output is + designed to be of help to users and developers, and may change at any + time. -FcFontSetSort + FcFontSetSort Name - FcFontSetSort -- Add to a font set + FcFontSetSort -- Add to a font set Synopsis -#include + #include + - FcFontSetSort(FcConfig *config, FcFontSet **sets, intnsets, - FcPattern *pattern, FcBool trim, FcCharSet **csp, FcResult - *result); + FcFontSetSort(FcConfig *config, FcFontSet **sets, intnsets, FcPattern + *pattern, FcBool trim, FcCharSet **csp, FcResult *result); Description - Returns the list of fonts from sets sorted by closeness to - pattern. If trim is FcTrue, elements in the list which don't - include Unicode coverage not provided by earlier elements in - the list are elided. The union of Unicode coverage of all of - the fonts is returned in csp, if csp is not NULL. This function - should be called only after FcConfigSubstitute and - FcDefaultSubstitute have been called for p; otherwise the - results will not be correct. + Returns the list of fonts from sets sorted by closeness to pattern. If + trim is FcTrue, elements in the list which don't include Unicode coverage + not provided by earlier elements in the list are elided. The union of + Unicode coverage of all of the fonts is returned in csp, if csp is not + NULL. This function should be called only after FcConfigSubstitute and + FcDefaultSubstitute have been called for p; otherwise the results will not + be correct. - The returned FcFontSet references FcPattern structures which - may be shared by the return value from multiple FcFontSort - calls, applications cannot modify these patterns. Instead, they - should be passed, along with pattern to FcFontRenderPrepare - which combines them into a complete pattern. + The returned FcFontSet references FcPattern structures which may be shared + by the return value from multiple FcFontSort calls, applications cannot + modify these patterns. Instead, they should be passed, along with pattern + to FcFontRenderPrepare which combines them into a complete pattern. The FcFontSet returned by FcFontSetSort is destroyed by calling FcFontSetDestroy. -FcFontSetSortDestroy + FcFontSetSortDestroy Name - FcFontSetSortDestroy -- DEPRECATED destroy a font set + FcFontSetSortDestroy -- DEPRECATED destroy a font set Synopsis -#include + #include + FcFontSetSortDestroy(FcFontSet *set); Description - This function is DEPRECATED. FcFontSetSortDestroy destroys set - by calling FcFontSetDestroy. Applications should use - FcFontSetDestroy directly instead. - __________________________________________________________ + This function is DEPRECATED. FcFontSetSortDestroy destroys set by calling + FcFontSetDestroy. Applications should use FcFontSetDestroy directly + instead. + + -------------------------------------------------------------------------- -FcObjectSet + FcObjectSet Table of Contents - FcObjectSetCreate -- Create an object set - FcObjectSetAdd -- Add to an object set - FcObjectSetDestroy -- Destroy an object set - FcObjectSetBuild -- Build object set from args - An FcObjectSet holds a list of pattern property names; it is - used to indicate which properties are to be returned in the - patterns from FcFontList. + [51]FcObjectSetCreate -- Create an object set + + [52]FcObjectSetAdd -- Add to an object set + + [53]FcObjectSetDestroy -- Destroy an object set + + [54]FcObjectSetBuild -- Build object set from args + + An FcObjectSet holds a list of pattern property names; it is used to + indicate which properties are to be returned in the patterns from + FcFontList. -FcObjectSetCreate + FcObjectSetCreate Name - FcObjectSetCreate -- Create an object set + FcObjectSetCreate -- Create an object set Synopsis -#include + #include + FcObjectSet * FcObjectSetCreate(void); @@ -1549,33 +1789,35 @@ Description Creates an empty set. -FcObjectSetAdd + FcObjectSetAdd Name - FcObjectSetAdd -- Add to an object set + FcObjectSetAdd -- Add to an object set Synopsis -#include + #include + FcBool FcObjectSetAdd(FcObjectSet *os, const char *object); Description - Adds a property name to the set. Returns FcFalse if the - property name cannot be inserted into the set (due to - allocation failure). Otherwise returns FcTrue. + Adds a property name to the set. Returns FcFalse if the property name + cannot be inserted into the set (due to allocation failure). Otherwise + returns FcTrue. -FcObjectSetDestroy + FcObjectSetDestroy Name - FcObjectSetDestroy -- Destroy an object set + FcObjectSetDestroy -- Destroy an object set Synopsis -#include + #include + void FcObjectSetDestroy(FcObjectSet *os); @@ -1583,406 +1825,441 @@ Description Destroys an object set. -FcObjectSetBuild + FcObjectSetBuild Name - FcObjectSetBuild, FcObjectSetVaBuild, - FcObjectSetVapBuild -- Build object set from args + FcObjectSetBuild, FcObjectSetVaBuild, FcObjectSetVapBuild -- Build object + set from args Synopsis -#include + #include + FcObjectSet * FcObjectSetBuild(const char *first, ...); - FcObjectSet * FcObjectSetVaBuild(const char *first, va_list - va); + FcObjectSet * FcObjectSetVaBuild(const char *first, va_list va); - void FcObjectSetVapBuild(FcObjectSet *result, const char - *first, va_list va); + void FcObjectSetVapBuild(FcObjectSet *result, const char *first, va_list + va); Description - These build an object set from a null-terminated list of - property names. FcObjectSetVapBuild is a macro version of - FcObjectSetVaBuild which returns the result in the result - variable directly. - __________________________________________________________ + These build an object set from a null-terminated list of property names. + FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns + the result in the result variable directly. + + -------------------------------------------------------------------------- -FreeType specific functions + FreeType specific functions Table of Contents - FcFreeTypeCharIndex -- map Unicode to glyph id - FcFreeTypeCharSet -- compute Unicode coverage - FcFreeTypeCharSetAndSpacing -- compute Unicode coverage and - spacing type - FcFreeTypeQuery -- compute pattern from font file (and index) - FcFreeTypeQueryAll -- compute all patterns from font file (and - index) + [55]FcFreeTypeCharIndex -- map Unicode to glyph id - FcFreeTypeQueryFace -- compute pattern from FT_Face + [56]FcFreeTypeCharSet -- compute Unicode coverage - While the fontconfig library doesn't insist that FreeType be - used as the rasterization mechanism for fonts, it does provide - some convenience functions. + [57]FcFreeTypeCharSetAndSpacing -- compute Unicode coverage and spacing + type -FcFreeTypeCharIndex + [58]FcFreeTypeQuery -- compute pattern from font file (and index) + + [59]FcFreeTypeQueryAll -- compute all patterns from font file (and index) + + [60]FcFreeTypeQueryFace -- compute pattern from FT_Face + + While the fontconfig library doesn't insist that FreeType be used as the + rasterization mechanism for fonts, it does provide some convenience + functions. + + FcFreeTypeCharIndex Name - FcFreeTypeCharIndex -- map Unicode to glyph id + FcFreeTypeCharIndex -- map Unicode to glyph id Synopsis -#include -#include + #include + #include + FT_UInt FcFreeTypeCharIndex(FT_Face face, FcChar32 ucs4); Description - Maps a Unicode char to a glyph index. This function uses - information from several possible underlying encoding tables to - work around broken fonts. As a result, this function isn't - designed to be used in performance sensitive areas; results - from this function are intended to be cached by higher level - functions. + Maps a Unicode char to a glyph index. This function uses information from + several possible underlying encoding tables to work around broken fonts. + As a result, this function isn't designed to be used in performance + sensitive areas; results from this function are intended to be cached by + higher level functions. -FcFreeTypeCharSet + FcFreeTypeCharSet Name - FcFreeTypeCharSet -- compute Unicode coverage + FcFreeTypeCharSet -- compute Unicode coverage Synopsis -#include -#include + #include + #include + FcCharSet * FcFreeTypeCharSet(FT_Face face, FcBlanks *blanks); Description - Scans a FreeType face and returns the set of encoded Unicode - chars. FcBlanks is deprecated, blanks is ignored and accepted - only for compatibility with older code. + Scans a FreeType face and returns the set of encoded Unicode chars. + FcBlanks is deprecated, blanks is ignored and accepted only for + compatibility with older code. -FcFreeTypeCharSetAndSpacing + FcFreeTypeCharSetAndSpacing Name - FcFreeTypeCharSetAndSpacing -- compute Unicode coverage and - spacing type + FcFreeTypeCharSetAndSpacing -- compute Unicode coverage and spacing type Synopsis -#include -#include + #include + #include + - FcCharSet * FcFreeTypeCharSetAndSpacing(FT_Face face, FcBlanks - *blanks, int *spacing); + FcCharSet * FcFreeTypeCharSetAndSpacing(FT_Face face, FcBlanks *blanks, + int *spacing); Description - Scans a FreeType face and returns the set of encoded Unicode - chars. FcBlanks is deprecated, blanks is ignored and accepted - only for compatibility with older code. spacing receives the - computed spacing type of the font, one of FC_MONO for a font - where all glyphs have the same width, FC_DUAL, where the font - has glyphs in precisely two widths, one twice as wide as the - other, or FC_PROPORTIONAL where the font has glyphs of many - widths. + Scans a FreeType face and returns the set of encoded Unicode chars. + FcBlanks is deprecated, blanks is ignored and accepted only for + compatibility with older code. spacing receives the computed spacing type + of the font, one of FC_MONO for a font where all glyphs have the same + width, FC_DUAL, where the font has glyphs in precisely two widths, one + twice as wide as the other, or FC_PROPORTIONAL where the font has glyphs + of many widths. -FcFreeTypeQuery + FcFreeTypeQuery Name - FcFreeTypeQuery -- compute pattern from font file (and index) + FcFreeTypeQuery -- compute pattern from font file (and index) Synopsis -#include -#include + #include + #include - FcPattern * FcFreeTypeQuery(const FcChar8 *file, int id, - FcBlanks *blanks, int *count); + + FcPattern * FcFreeTypeQuery(const FcChar8 *file, int id, FcBlanks *blanks, + int *count); Description - Constructs a pattern representing the 'id'th face in 'file'. - The number of faces in 'file' is returned in 'count'. FcBlanks - is deprecated, blanks is ignored and accepted only for - compatibility with older code. + Constructs a pattern representing the 'id'th face in 'file'. The number of + faces in 'file' is returned in 'count'. FcBlanks is deprecated, blanks is + ignored and accepted only for compatibility with older code. -FcFreeTypeQueryAll + FcFreeTypeQueryAll Name - FcFreeTypeQueryAll -- compute all patterns from font file (and - index) + FcFreeTypeQueryAll -- compute all patterns from font file (and index) Synopsis -#include -#include + #include + #include + - unsigned int FcFreeTypeQueryAll(const FcChar8 *file, int id, - FcBlanks *blanks, int *count, FcFontSet *set); + unsigned int FcFreeTypeQueryAll(const FcChar8 *file, int id, FcBlanks + *blanks, int *count, FcFontSet *set); Description - Constructs patterns found in 'file'. If id is -1, then all - patterns found in 'file' are added to 'set'. Otherwise, this - function works exactly like FcFreeTypeQuery(). The number of - faces in 'file' is returned in 'count'. The number of patterns - added to 'set' is returned. FcBlanks is deprecated, blanks is - ignored and accepted only for compatibility with older code. + Constructs patterns found in 'file'. If id is -1, then all patterns found + in 'file' are added to 'set'. Otherwise, this function works exactly like + FcFreeTypeQuery(). The number of faces in 'file' is returned in 'count'. + The number of patterns added to 'set' is returned. FcBlanks is deprecated, + blanks is ignored and accepted only for compatibility with older code. Since version 2.12.91 -FcFreeTypeQueryFace + FcFreeTypeQueryFace Name - FcFreeTypeQueryFace -- compute pattern from FT_Face + FcFreeTypeQueryFace -- compute pattern from FT_Face Synopsis -#include -#include + #include + #include + - FcPattern * FcFreeTypeQueryFace(const FT_Face face, const - FcChar8 *file, int id, FcBlanks *blanks); + FcPattern * FcFreeTypeQueryFace(const FT_Face face, const FcChar8 *file, + int id, FcBlanks *blanks); Description - Constructs a pattern representing 'face'. 'file' and 'id' are - used solely as data for pattern elements (FC_FILE, FC_INDEX and - sometimes FC_FAMILY). FcBlanks is deprecated, blanks is ignored - and accepted only for compatibility with older code. - __________________________________________________________ + Constructs a pattern representing 'face'. 'file' and 'id' are used solely + as data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY). + FcBlanks is deprecated, blanks is ignored and accepted only for + compatibility with older code. + + -------------------------------------------------------------------------- -FcValue + FcValue Table of Contents - FcValueDestroy -- Free a value - FcValueSave -- Copy a value - FcValuePrint -- Print a value to stdout - FcValueEqual -- Test two values for equality - FcValue is a structure containing a type tag and a union of all - possible datatypes. The tag is an enum of type FcType and is - intended to provide a measure of run-time typechecking, - although that depends on careful programming. + [61]FcValueDestroy -- Free a value + + [62]FcValueSave -- Copy a value + + [63]FcValuePrint -- Print a value to stdout -FcValueDestroy + [64]FcValueEqual -- Test two values for equality + + FcValue is a structure containing a type tag and a union of all possible + datatypes. The tag is an enum of type FcType and is intended to provide a + measure of run-time typechecking, although that depends on careful + programming. + + FcValueDestroy Name - FcValueDestroy -- Free a value + FcValueDestroy -- Free a value Synopsis -#include + #include + void FcValueDestroy(FcValue v); Description Frees any memory referenced by v. Values of type FcTypeString, - FcTypeMatrix and FcTypeCharSet reference memory, the other - types do not. + FcTypeMatrix and FcTypeCharSet reference memory, the other types do not. -FcValueSave + FcValueSave Name - FcValueSave -- Copy a value + FcValueSave -- Copy a value Synopsis -#include + #include + FcValue FcValueSave(FcValue v); Description - Returns a copy of v duplicating any object referenced by it so - that v may be safely destroyed without harming the new value. + Returns a copy of v duplicating any object referenced by it so that v may + be safely destroyed without harming the new value. -FcValuePrint + FcValuePrint Name - FcValuePrint -- Print a value to stdout + FcValuePrint -- Print a value to stdout Synopsis -#include + #include + void FcValuePrint(FcValue v); Description - Prints a human-readable representation of v to stdout. The - format should not be considered part of the library - specification as it may change in the future. + Prints a human-readable representation of v to stdout. The format should + not be considered part of the library specification as it may change in + the future. -FcValueEqual + FcValueEqual Name - FcValueEqual -- Test two values for equality + FcValueEqual -- Test two values for equality Synopsis -#include + #include + FcBool FcValueEqual(FcValue v_a, FcValue v_b); Description - Compares two values. Integers and Doubles are compared as - numbers; otherwise the two values have to be the same type to - be considered equal. Strings are compared ignoring case. - __________________________________________________________ + Compares two values. Integers and Doubles are compared as numbers; + otherwise the two values have to be the same type to be considered equal. + Strings are compared ignoring case. -FcCharSet + -------------------------------------------------------------------------- + + FcCharSet Table of Contents - FcCharSetCreate -- Create an empty character set - FcCharSetDestroy -- Destroy a character set - FcCharSetAddChar -- Add a character to a charset - FcCharSetDelChar -- Add a character to a charset - FcCharSetCopy -- Copy a charset - FcCharSetEqual -- Compare two charsets - FcCharSetIntersect -- Intersect charsets - FcCharSetUnion -- Add charsets - FcCharSetSubtract -- Subtract charsets - FcCharSetMerge -- Merge charsets - FcCharSetHasChar -- Check a charset for a char - FcCharSetCount -- Count entries in a charset - FcCharSetIntersectCount -- Intersect and count charsets - FcCharSetSubtractCount -- Subtract and count charsets - FcCharSetIsSubset -- Test for charset inclusion - FcCharSetFirstPage -- Start enumerating charset contents - FcCharSetNextPage -- Continue enumerating charset contents - FcCharSetCoverage -- DEPRECATED return coverage for a Unicode - page - FcCharSetNew -- DEPRECATED alias for FcCharSetCreate + [65]FcCharSetCreate -- Create an empty character set + + [66]FcCharSetDestroy -- Destroy a character set + + [67]FcCharSetAddChar -- Add a character to a charset + + [68]FcCharSetDelChar -- Add a character to a charset + + [69]FcCharSetCopy -- Copy a charset + + [70]FcCharSetEqual -- Compare two charsets + + [71]FcCharSetIntersect -- Intersect charsets + + [72]FcCharSetUnion -- Add charsets + + [73]FcCharSetSubtract -- Subtract charsets + + [74]FcCharSetMerge -- Merge charsets + + [75]FcCharSetHasChar -- Check a charset for a char + + [76]FcCharSetCount -- Count entries in a charset + + [77]FcCharSetIntersectCount -- Intersect and count charsets + + [78]FcCharSetSubtractCount -- Subtract and count charsets - An FcCharSet is a boolean array indicating a set of Unicode - chars. Those associated with a font are marked constant and - cannot be edited. FcCharSets may be reference counted - internally to reduce memory consumption; this may be visible to - applications as the result of FcCharSetCopy may return it's - argument, and that CharSet may remain unmodifiable. + [79]FcCharSetIsSubset -- Test for charset inclusion -FcCharSetCreate + [80]FcCharSetFirstPage -- Start enumerating charset contents + + [81]FcCharSetNextPage -- Continue enumerating charset contents + + [82]FcCharSetCoverage -- DEPRECATED return coverage for a Unicode page + + [83]FcCharSetNew -- DEPRECATED alias for FcCharSetCreate + + An FcCharSet is a boolean array indicating a set of Unicode chars. Those + associated with a font are marked constant and cannot be edited. + FcCharSets may be reference counted internally to reduce memory + consumption; this may be visible to applications as the result of + FcCharSetCopy may return it's argument, and that CharSet may remain + unmodifiable. + + FcCharSetCreate Name - FcCharSetCreate -- Create an empty character set + FcCharSetCreate -- Create an empty character set Synopsis -#include + #include + FcCharSet * FcCharSetCreate(void); Description - FcCharSetCreate allocates and initializes a new empty character - set object. + FcCharSetCreate allocates and initializes a new empty character set + object. -FcCharSetDestroy + FcCharSetDestroy Name - FcCharSetDestroy -- Destroy a character set + FcCharSetDestroy -- Destroy a character set Synopsis -#include + #include + void FcCharSetDestroy(FcCharSet *fcs); Description - FcCharSetDestroy decrements the reference count fcs. If the - reference count becomes zero, all memory referenced is freed. + FcCharSetDestroy decrements the reference count fcs. If the reference + count becomes zero, all memory referenced is freed. -FcCharSetAddChar + FcCharSetAddChar Name - FcCharSetAddChar -- Add a character to a charset + FcCharSetAddChar -- Add a character to a charset Synopsis -#include + #include + FcBool FcCharSetAddChar(FcCharSet *fcs, FcChar32 ucs4); Description - FcCharSetAddChar adds a single Unicode char to the set, - returning FcFalse on failure, either as a result of a constant - set or from running out of memory. + FcCharSetAddChar adds a single Unicode char to the set, returning FcFalse + on failure, either as a result of a constant set or from running out of + memory. -FcCharSetDelChar + FcCharSetDelChar Name - FcCharSetDelChar -- Add a character to a charset + FcCharSetDelChar -- Add a character to a charset Synopsis -#include + #include + FcBool FcCharSetDelChar(FcCharSet *fcs, FcChar32 ucs4); Description - FcCharSetDelChar deletes a single Unicode char from the set, - returning FcFalse on failure, either as a result of a constant - set or from running out of memory. + FcCharSetDelChar deletes a single Unicode char from the set, returning + FcFalse on failure, either as a result of a constant set or from running + out of memory. Since version 2.9.0 -FcCharSetCopy + FcCharSetCopy Name - FcCharSetCopy -- Copy a charset + FcCharSetCopy -- Copy a charset Synopsis -#include + #include + FcCharSet * FcCharSetCopy(FcCharSet *src); Description - Makes a copy of src; note that this may not actually do - anything more than increment the reference count on src. + Makes a copy of src; note that this may not actually do anything more than + increment the reference count on src. -FcCharSetEqual + FcCharSetEqual Name - FcCharSetEqual -- Compare two charsets + FcCharSetEqual -- Compare two charsets Synopsis -#include + #include + FcBool FcCharSetEqual(const FcCharSet *a, const FcCharSet *b); @@ -1990,88 +2267,87 @@ Description Returns whether a and b contain the same set of Unicode chars. -FcCharSetIntersect + FcCharSetIntersect Name - FcCharSetIntersect -- Intersect charsets + FcCharSetIntersect -- Intersect charsets Synopsis -#include + #include + - FcCharSet * FcCharSetIntersect(const FcCharSet *a, const - FcCharSet *b); + FcCharSet * FcCharSetIntersect(const FcCharSet *a, const FcCharSet *b); Description Returns a set including only those chars found in both a and b. -FcCharSetUnion + FcCharSetUnion Name - FcCharSetUnion -- Add charsets + FcCharSetUnion -- Add charsets Synopsis -#include + #include - FcCharSet * FcCharSetUnion(const FcCharSet *a, const FcCharSet - *b); + + FcCharSet * FcCharSetUnion(const FcCharSet *a, const FcCharSet *b); Description - Returns a set including only those chars found in either a or - b. + Returns a set including only those chars found in either a or b. -FcCharSetSubtract + FcCharSetSubtract Name - FcCharSetSubtract -- Subtract charsets + FcCharSetSubtract -- Subtract charsets Synopsis -#include + #include - FcCharSet * FcCharSetSubtract(const FcCharSet *a, const - FcCharSet *b); + + FcCharSet * FcCharSetSubtract(const FcCharSet *a, const FcCharSet *b); Description Returns a set including only those chars found in a but not b. -FcCharSetMerge + FcCharSetMerge Name - FcCharSetMerge -- Merge charsets + FcCharSetMerge -- Merge charsets Synopsis -#include + #include + - FcBool FcCharSetMerge(FcCharSet *a, const FcCharSet *b, FcBool - *changed); + FcBool FcCharSetMerge(FcCharSet *a, const FcCharSet *b, FcBool *changed); Description - Adds all chars in b to a. In other words, this is an in-place - version of FcCharSetUnion. If changed is not NULL, then it - returns whether any new chars from b were added to a. Returns - FcFalse on failure, either when a is a constant set or from - running out of memory. + Adds all chars in b to a. In other words, this is an in-place version of + FcCharSetUnion. If changed is not NULL, then it returns whether any new + chars from b were added to a. Returns FcFalse on failure, either when a is + a constant set or from running out of memory. -FcCharSetHasChar + FcCharSetHasChar Name - FcCharSetHasChar -- Check a charset for a char + FcCharSetHasChar -- Check a charset for a char Synopsis -#include + #include + FcBool FcCharSetHasChar(const FcCharSet *fcs, FcChar32 ucs4); @@ -2079,15 +2355,16 @@ Description Returns whether fcs contains the char ucs4. -FcCharSetCount + FcCharSetCount Name - FcCharSetCount -- Count entries in a charset + FcCharSetCount -- Count entries in a charset Synopsis -#include + #include + FcChar32 FcCharSetCount(const FcCharSet *a); @@ -2095,185 +2372,203 @@ Description Returns the total number of Unicode chars in a. -FcCharSetIntersectCount + FcCharSetIntersectCount Name - FcCharSetIntersectCount -- Intersect and count charsets + FcCharSetIntersectCount -- Intersect and count charsets Synopsis -#include + #include - FcChar32 FcCharSetIntersectCount(const FcCharSet *a, const - FcCharSet *b); + + FcChar32 FcCharSetIntersectCount(const FcCharSet *a, const FcCharSet *b); Description Returns the number of chars that are in both a and b. -FcCharSetSubtractCount + FcCharSetSubtractCount Name - FcCharSetSubtractCount -- Subtract and count charsets + FcCharSetSubtractCount -- Subtract and count charsets Synopsis -#include + #include + - FcChar32 FcCharSetSubtractCount(const FcCharSet *a, const - FcCharSet *b); + FcChar32 FcCharSetSubtractCount(const FcCharSet *a, const FcCharSet *b); Description Returns the number of chars that are in a but not in b. -FcCharSetIsSubset + FcCharSetIsSubset Name - FcCharSetIsSubset -- Test for charset inclusion + FcCharSetIsSubset -- Test for charset inclusion Synopsis -#include + #include - FcBool FcCharSetIsSubset(const FcCharSet *a, const FcCharSet - *b); + + FcBool FcCharSetIsSubset(const FcCharSet *a, const FcCharSet *b); Description Returns whether a is a subset of b. -FcCharSetFirstPage + FcCharSetFirstPage Name - FcCharSetFirstPage -- Start enumerating charset contents + FcCharSetFirstPage -- Start enumerating charset contents Synopsis -#include + #include + FcChar32 FcCharSetFirstPage(const FcCharSet *a, FcChar32[FC_CHARSET_MAP_SIZE] map, FcChar32 *next); Description - Builds an array of bits in map marking the first page of - Unicode coverage of a. *next is set to contains the base code - point for the next page in a. Returns the base code point for - the page, or FC_CHARSET_DONE if a contains no pages. As an - example, if FcCharSetFirstPage returns 0x300 and fills map with -0xffffffff 0xffffffff 0x01000008 0x44300002 0xffffd7f0 0xfffffffb 0xffff -7fff 0xffff0003 + Builds an array of bits in map marking the first page of Unicode coverage + of a. *next is set to contains the base code point for the next page in a. + Returns the base code point for the page, or FC_CHARSET_DONE if a contains + no pages. As an example, if FcCharSetFirstPage returns 0x300 and fills map + with + +0xffffffff 0xffffffff 0x01000008 0x44300002 0xffffd7f0 0xfffffffb 0xffff7fff 0xffff0003 - Then the page contains code points 0x300 through 0x33f (the - first 64 code points on the page) because map[0] and map[1] - both have all their bits set. It also contains code points - 0x343 (0x300 + 32*2 + (4-1)) and 0x35e (0x300 + 32*2 + (31-1)) - because map[2] has the 4th and 31st bits set. The code points - represented by map[3] and later are left as an excercise for + Then the page contains code points 0x300 through 0x33f (the first 64 code + points on the page) because map[0] and map[1] both have all their bits + set. It also contains code points 0x343 (0x300 + 32*2 + (4-1)) and 0x35e + (0x300 + 32*2 + (31-1)) because map[2] has the 4th and 31st bits set. The + code points represented by map[3] and later are left as an excercise for the reader ;). -FcCharSetNextPage + FcCharSetNextPage Name - FcCharSetNextPage -- Continue enumerating charset contents + FcCharSetNextPage -- Continue enumerating charset contents Synopsis -#include + #include + FcChar32 FcCharSetNextPage(const FcCharSet *a, FcChar32[FC_CHARSET_MAP_SIZE] map, FcChar32 *next); Description - Builds an array of bits in map marking the Unicode coverage of - a for page containing *next (see the FcCharSetFirstPage - description for details). *next is set to contains the base - code point for the next page in a. Returns the base of code - point for the page, or FC_CHARSET_DONE if a does not contain - *next. + Builds an array of bits in map marking the Unicode coverage of a for page + containing *next (see the FcCharSetFirstPage description for details). + *next is set to contains the base code point for the next page in a. + Returns the base of code point for the page, or FC_CHARSET_DONE if a does + not contain *next. -FcCharSetCoverage + FcCharSetCoverage Name - FcCharSetCoverage -- DEPRECATED return coverage for a Unicode - page + FcCharSetCoverage -- DEPRECATED return coverage for a Unicode page Synopsis -#include + #include + FcChar32 FcCharSetCoverage(const FcCharSet *a, FcChar32page, FcChar32[8]result); Description - DEPRECATED This function returns a bitmask in result which - indicates which code points in page are included in a. - FcCharSetCoverage returns the next page in the charset which - has any coverage. + DEPRECATED This function returns a bitmask in result which indicates which + code points in page are included in a. FcCharSetCoverage returns the next + page in the charset which has any coverage. -FcCharSetNew + FcCharSetNew Name - FcCharSetNew -- DEPRECATED alias for FcCharSetCreate + FcCharSetNew -- DEPRECATED alias for FcCharSetCreate Synopsis -#include + #include + FcCharSet * FcCharSetNew(void); Description FcCharSetNew is a DEPRECATED alias for FcCharSetCreate. - __________________________________________________________ -FcLangSet + -------------------------------------------------------------------------- + + FcLangSet Table of Contents - FcLangSetCreate -- create a langset object - FcLangSetDestroy -- destroy a langset object - FcLangSetCopy -- copy a langset object - FcLangSetAdd -- add a language to a langset - FcLangSetDel -- delete a language from a langset - FcLangSetUnion -- Add langsets - FcLangSetSubtract -- Subtract langsets - FcLangSetCompare -- compare language sets - FcLangSetContains -- check langset subset relation - FcLangSetEqual -- test for matching langsets - FcLangSetHash -- return a hash value for a langset - FcLangSetHasLang -- test langset for language support - FcGetDefaultLangs -- Get the default languages list - FcLangSetGetLangs -- get the list of languages in the langset - FcGetLangs -- Get list of languages - FcLangNormalize -- Normalize the language string - FcLangGetCharSet -- Get character map for a language - An FcLangSet is a set of language names (each of which include - language and an optional territory). They are used when - selecting fonts to indicate which languages the fonts need to - support. Each font is marked, using language orthography - information built into fontconfig, with the set of supported - languages. + [84]FcLangSetCreate -- create a langset object + + [85]FcLangSetDestroy -- destroy a langset object + + [86]FcLangSetCopy -- copy a langset object + + [87]FcLangSetAdd -- add a language to a langset + + [88]FcLangSetDel -- delete a language from a langset -FcLangSetCreate + [89]FcLangSetUnion -- Add langsets + + [90]FcLangSetSubtract -- Subtract langsets + + [91]FcLangSetCompare -- compare language sets + + [92]FcLangSetContains -- check langset subset relation + + [93]FcLangSetEqual -- test for matching langsets + + [94]FcLangSetHash -- return a hash value for a langset + + [95]FcLangSetHasLang -- test langset for language support + + [96]FcGetDefaultLangs -- Get the default languages list + + [97]FcLangSetGetLangs -- get the list of languages in the langset + + [98]FcGetLangs -- Get list of languages + + [99]FcLangNormalize -- Normalize the language string + + [100]FcLangGetCharSet -- Get character map for a language + + An FcLangSet is a set of language names (each of which include language + and an optional territory). They are used when selecting fonts to indicate + which languages the fonts need to support. Each font is marked, using + language orthography information built into fontconfig, with the set of + supported languages. + + FcLangSetCreate Name - FcLangSetCreate -- create a langset object + FcLangSetCreate -- create a langset object Synopsis -#include + #include + FcLangSet * FcLangSetCreate(void); @@ -2281,258 +2576,261 @@ Description FcLangSetCreate creates a new FcLangSet object. -FcLangSetDestroy + FcLangSetDestroy Name - FcLangSetDestroy -- destroy a langset object + FcLangSetDestroy -- destroy a langset object Synopsis -#include + #include + void FcLangSetDestroy(FcLangSet *ls); Description - FcLangSetDestroy destroys a FcLangSet object, freeing all - memory associated with it. + FcLangSetDestroy destroys a FcLangSet object, freeing all memory + associated with it. -FcLangSetCopy + FcLangSetCopy Name - FcLangSetCopy -- copy a langset object + FcLangSetCopy -- copy a langset object Synopsis -#include + #include + FcLangSet * FcLangSetCopy(const FcLangSet *ls); Description - FcLangSetCopy creates a new FcLangSet object and populates it - with the contents of ls. + FcLangSetCopy creates a new FcLangSet object and populates it with the + contents of ls. -FcLangSetAdd + FcLangSetAdd Name - FcLangSetAdd -- add a language to a langset + FcLangSetAdd -- add a language to a langset Synopsis -#include + #include + FcBool FcLangSetAdd(FcLangSet *ls, const FcChar8 *lang); Description - lang is added to ls. lang should be of the form Ll-Tt where Ll - is a two or three letter language from ISO 639 and Tt is a - territory from ISO 3166. + lang is added to ls. lang should be of the form Ll-Tt where Ll is a two or + three letter language from ISO 639 and Tt is a territory from ISO 3166. -FcLangSetDel + FcLangSetDel Name - FcLangSetDel -- delete a language from a langset + FcLangSetDel -- delete a language from a langset Synopsis -#include + #include + FcBool FcLangSetDel(FcLangSet *ls, const FcChar8 *lang); Description - lang is removed from ls. lang should be of the form Ll-Tt where - Ll is a two or three letter language from ISO 639 and Tt is a - territory from ISO 3166. + lang is removed from ls. lang should be of the form Ll-Tt where Ll is a + two or three letter language from ISO 639 and Tt is a territory from ISO + 3166. Since version 2.9.0 -FcLangSetUnion + FcLangSetUnion Name - FcLangSetUnion -- Add langsets + FcLangSetUnion -- Add langsets Synopsis -#include + #include + - FcLangSet * FcLangSetUnion(const FcLangSet *ls_a, const - FcLangSet *ls_b); + FcLangSet * FcLangSetUnion(const FcLangSet *ls_a, const FcLangSet *ls_b); Description - Returns a set including only those languages found in either - ls_a or ls_b. + Returns a set including only those languages found in either ls_a or ls_b. Since version 2.9.0 -FcLangSetSubtract + FcLangSetSubtract Name - FcLangSetSubtract -- Subtract langsets + FcLangSetSubtract -- Subtract langsets Synopsis -#include + #include - FcLangSet * FcLangSetSubtract(const FcLangSet *ls_a, const - FcLangSet *ls_b); + + FcLangSet * FcLangSetSubtract(const FcLangSet *ls_a, const FcLangSet + *ls_b); Description - Returns a set including only those languages found in ls_a but - not in ls_b. + Returns a set including only those languages found in ls_a but not in + ls_b. Since version 2.9.0 -FcLangSetCompare + FcLangSetCompare Name - FcLangSetCompare -- compare language sets + FcLangSetCompare -- compare language sets Synopsis -#include + #include - FcLangResult FcLangSetCompare(const FcLangSet *ls_a, const - FcLangSet *ls_b); + + FcLangResult FcLangSetCompare(const FcLangSet *ls_a, const FcLangSet + *ls_b); Description - FcLangSetCompare compares language coverage for ls_a and ls_b. - If they share any language and territory pair, this function - returns FcLangEqual. If they share a language but differ in - which territory that language is for, this function returns - FcLangDifferentTerritory. If they share no languages in common, - this function returns FcLangDifferentLang. + FcLangSetCompare compares language coverage for ls_a and ls_b. If they + share any language and territory pair, this function returns FcLangEqual. + If they share a language but differ in which territory that language is + for, this function returns FcLangDifferentTerritory. If they share no + languages in common, this function returns FcLangDifferentLang. -FcLangSetContains + FcLangSetContains Name - FcLangSetContains -- check langset subset relation + FcLangSetContains -- check langset subset relation Synopsis -#include + #include - FcBool FcLangSetContains(const FcLangSet *ls_a, const FcLangSet - *ls_b); + + FcBool FcLangSetContains(const FcLangSet *ls_a, const FcLangSet *ls_b); Description - FcLangSetContains returns FcTrue if ls_a contains every - language in ls_b. ls_a will 'contain' a language from ls_b if - ls_a has exactly the language, or either the language or ls_a - has no territory. + FcLangSetContains returns FcTrue if ls_a contains every language in ls_b. + ls_a will 'contain' a language from ls_b if ls_a has exactly the language, + or either the language or ls_a has no territory. -FcLangSetEqual + FcLangSetEqual Name - FcLangSetEqual -- test for matching langsets + FcLangSetEqual -- test for matching langsets Synopsis -#include + #include - FcBool FcLangSetEqual(const FcLangSet *ls_a, const FcLangSet - *ls_b); + + FcBool FcLangSetEqual(const FcLangSet *ls_a, const FcLangSet *ls_b); Description - Returns FcTrue if and only if ls_a supports precisely the same - language and territory combinations as ls_b. + Returns FcTrue if and only if ls_a supports precisely the same language + and territory combinations as ls_b. -FcLangSetHash + FcLangSetHash Name - FcLangSetHash -- return a hash value for a langset + FcLangSetHash -- return a hash value for a langset Synopsis -#include + #include + FcChar32 FcLangSetHash(const FcLangSet *ls); Description - This function returns a value which depends solely on the - languages supported by ls. Any language which equals ls will - have the same result from FcLangSetHash. However, two langsets - with the same hash value may not be equal. + This function returns a value which depends solely on the languages + supported by ls. Any language which equals ls will have the same result + from FcLangSetHash. However, two langsets with the same hash value may not + be equal. -FcLangSetHasLang + FcLangSetHasLang Name - FcLangSetHasLang -- test langset for language support + FcLangSetHasLang -- test langset for language support Synopsis -#include + #include + - FcLangResult FcLangSetHasLang(const FcLangSet *ls, const - FcChar8 *lang); + FcLangResult FcLangSetHasLang(const FcLangSet *ls, const FcChar8 *lang); Description - FcLangSetHasLang checks whether ls supports lang. If ls has a - matching language and territory pair, this function returns - FcLangEqual. If ls has a matching language but differs in which - territory that language is for, this function returns - FcLangDifferentTerritory. If ls has no matching language, this - function returns FcLangDifferentLang. + FcLangSetHasLang checks whether ls supports lang. If ls has a matching + language and territory pair, this function returns FcLangEqual. If ls has + a matching language but differs in which territory that language is for, + this function returns FcLangDifferentTerritory. If ls has no matching + language, this function returns FcLangDifferentLang. -FcGetDefaultLangs + FcGetDefaultLangs Name - FcGetDefaultLangs -- Get the default languages list + FcGetDefaultLangs -- Get the default languages list Synopsis -#include + #include + FcStrSet * FcGetDefaultLangs(void); Description - Returns a string set of the default languages according to the - environment variables on the system. This function looks for - them in order of FC_LANG, LC_ALL, LC_CTYPE and LANG then. If - there are no valid values in those environment variables, "en" - will be set as fallback. + Returns a string set of the default languages according to the environment + variables on the system. This function looks for them in order of FC_LANG, + LC_ALL, LC_CTYPE and LANG then. If there are no valid values in those + environment variables, "en" will be set as fallback. Since version 2.9.91 -FcLangSetGetLangs + FcLangSetGetLangs Name - FcLangSetGetLangs -- get the list of languages in the langset + FcLangSetGetLangs -- get the list of languages in the langset Synopsis -#include + #include + FcStrSet * FcLangSetGetLangs(const FcLangSet *ls); @@ -2540,15 +2838,16 @@ Description Returns a string set of all languages in langset. -FcGetLangs + FcGetLangs Name - FcGetLangs -- Get list of languages + FcGetLangs -- Get list of languages Synopsis -#include + #include + FcStrSet * FcGetLangs(void); @@ -2556,15 +2855,16 @@ Description Returns a string set of all known languages. -FcLangNormalize + FcLangNormalize Name - FcLangNormalize -- Normalize the language string + FcLangNormalize -- Normalize the language string Synopsis -#include + #include + FcChar8 * FcLangNormalize(const FcChar8 *lang); @@ -2576,46 +2876,55 @@ Since version 2.10.91 -FcLangGetCharSet + FcLangGetCharSet Name - FcLangGetCharSet -- Get character map for a language + FcLangGetCharSet -- Get character map for a language Synopsis -#include + #include + const FcCharSet * FcLangGetCharSet(const FcChar8 *lang); Description Returns the FcCharMap for a language. - __________________________________________________________ -FcMatrix + -------------------------------------------------------------------------- + + FcMatrix Table of Contents - FcMatrixInit -- initialize an FcMatrix structure - FcMatrixCopy -- Copy a matrix - FcMatrixEqual -- Compare two matrices - FcMatrixMultiply -- Multiply matrices - FcMatrixRotate -- Rotate a matrix - FcMatrixScale -- Scale a matrix - FcMatrixShear -- Shear a matrix - FcMatrix structures hold an affine transformation in matrix - form. + [101]FcMatrixInit -- initialize an FcMatrix structure + + [102]FcMatrixCopy -- Copy a matrix + + [103]FcMatrixEqual -- Compare two matrices + + [104]FcMatrixMultiply -- Multiply matrices + + [105]FcMatrixRotate -- Rotate a matrix -FcMatrixInit + [106]FcMatrixScale -- Scale a matrix + + [107]FcMatrixShear -- Shear a matrix + + FcMatrix structures hold an affine transformation in matrix form. + + FcMatrixInit Name - FcMatrixInit -- initialize an FcMatrix structure + FcMatrixInit -- initialize an FcMatrix structure Synopsis -#include + #include + void FcMatrixInit(FcMatrix *matrix); @@ -2623,15 +2932,16 @@ Description FcMatrixInit initializes matrix to the identity matrix. -FcMatrixCopy + FcMatrixCopy Name - FcMatrixCopy -- Copy a matrix + FcMatrixCopy -- Copy a matrix Synopsis -#include + #include + void FcMatrixCopy(const FcMatrix *matrix); @@ -2639,281 +2949,324 @@ Description FcMatrixCopy allocates a new FcMatrix and copies mat into it. -FcMatrixEqual + FcMatrixEqual Name - FcMatrixEqual -- Compare two matrices + FcMatrixEqual -- Compare two matrices Synopsis -#include + #include + - void FcMatrixEqual(const FcMatrix *matrix1, const FcMatrix - *matrix2); + void FcMatrixEqual(const FcMatrix *matrix1, const FcMatrix *matrix2); Description - FcMatrixEqual compares matrix1 and matrix2 returning FcTrue - when they are equal and FcFalse when they are not. + FcMatrixEqual compares matrix1 and matrix2 returning FcTrue when they are + equal and FcFalse when they are not. -FcMatrixMultiply + FcMatrixMultiply Name - FcMatrixMultiply -- Multiply matrices + FcMatrixMultiply -- Multiply matrices Synopsis -#include + #include - void FcMatrixMultiply(FcMatrix *result, const FcMatrix - *matrix1, const FcMatrix *matrix2); + + void FcMatrixMultiply(FcMatrix *result, const FcMatrix *matrix1, const + FcMatrix *matrix2); Description - FcMatrixMultiply multiplies matrix1 and matrix2 storing the - result in result. + FcMatrixMultiply multiplies matrix1 and matrix2 storing the result in + result. -FcMatrixRotate + FcMatrixRotate Name - FcMatrixRotate -- Rotate a matrix + FcMatrixRotate -- Rotate a matrix Synopsis -#include + #include + void FcMatrixRotate(FcMatrix *matrix, double cos, double sin); Description - FcMatrixRotate rotates matrix by the angle who's sine is sin - and cosine is cos. This is done by multiplying by the matrix: - cos -sin - sin cos + FcMatrixRotate rotates matrix by the angle who's sine is sin and cosine is + cos. This is done by multiplying by the matrix: -FcMatrixScale + cos -sin + sin cos + + FcMatrixScale Name - FcMatrixScale -- Scale a matrix + FcMatrixScale -- Scale a matrix Synopsis -#include + #include + void FcMatrixScale(FcMatrix *matrix, double sx, double dy); Description - FcMatrixScale multiplies matrix x values by sx and y values by - dy. This is done by multiplying by the matrix: - sx 0 - 0 dy + FcMatrixScale multiplies matrix x values by sx and y values by dy. This is + done by multiplying by the matrix: -FcMatrixShear + sx 0 + 0 dy + + FcMatrixShear Name - FcMatrixShear -- Shear a matrix + FcMatrixShear -- Shear a matrix Synopsis -#include + #include + void FcMatrixShear(FcMatrix *matrix, double sh, double sv); Description - FcMatrixShare shears matrix horizontally by sh and vertically - by sv. This is done by multiplying by the matrix: - 1 sh - sv 1 - __________________________________________________________ + FcMatrixShare shears matrix horizontally by sh and vertically by sv. This + is done by multiplying by the matrix: -FcRange + 1 sh + sv 1 + + -------------------------------------------------------------------------- + + FcRange Table of Contents - FcRangeCopy -- Copy a range object - FcRangeCreateDouble -- create a range object for double - FcRangeCreateInteger -- create a range object for integer - FcRangeDestroy -- destroy a range object - FcRangeGetDouble -- Get the range in double + + [108]FcRangeCopy -- Copy a range object + + [109]FcRangeCreateDouble -- create a range object for double + + [110]FcRangeCreateInteger -- create a range object for integer + + [111]FcRangeDestroy -- destroy a range object + + [112]FcRangeGetDouble -- Get the range in double An FcRange holds two variables to indicate a range in between. -FcRangeCopy + FcRangeCopy Name - FcRangeCopy -- Copy a range object + FcRangeCopy -- Copy a range object Synopsis -#include + #include + FcRange * FcRangeCopy(const FcRange *range); Description - FcRangeCopy creates a new FcRange object and populates it with - the contents of range. + FcRangeCopy creates a new FcRange object and populates it with the + contents of range. Since version 2.11.91 -FcRangeCreateDouble + FcRangeCreateDouble Name - FcRangeCreateDouble -- create a range object for double + FcRangeCreateDouble -- create a range object for double Synopsis -#include + #include + FcRange * FcRangeCreateDouble(doublebegin, doubleend); Description - FcRangeCreateDouble creates a new FcRange object with double - sized value. + FcRangeCreateDouble creates a new FcRange object with double sized value. + +Since + + version 2.11.91 + + FcRangeCreateInteger + +Name + + FcRangeCreateInteger -- create a range object for integer + +Synopsis + + #include + + + FcRange * FcRangeCreateInteger(intbegin, intend); + +Description + + FcRangeCreateInteger creates a new FcRange object with integer sized + value. + +Since + + version 2.11.91 + + FcRangeDestroy + +Name + + FcRangeDestroy -- destroy a range object + +Synopsis + + #include + + + void FcRangeDestroy(FcRange *range); + +Description + + FcRangeDestroy destroys a FcRange object, freeing all memory associated + with it. + +Since + + version 2.11.91 + + FcRangeGetDouble + +Name + + FcRangeGetDouble -- Get the range in double + +Synopsis + + #include + + + FcBool FcRangeGetDouble(const FcRange *range, double *begin, double *end); + +Description + + Returns in begin and end as the range. + +Since + + version 2.11.91 + + -------------------------------------------------------------------------- + + FcConfig + + Table of Contents + + [113]FcConfigCreate -- Create a configuration + + [114]FcConfigReference -- Increment config reference count + + [115]FcConfigDestroy -- Destroy a configuration + + [116]FcConfigSetCurrent -- Set configuration as default + + [117]FcConfigGetCurrent -- Return current configuration + + [118]FcConfigUptoDate -- Check timestamps on config files + + [119]FcConfigHome -- return the current home directory. + + [120]FcConfigEnableHome -- controls use of the home directory. -Since + [121]FcConfigBuildFonts -- Build font database - version 2.11.91 + [122]FcConfigGetConfigDirs -- Get config directories -FcRangeCreateInteger + [123]FcConfigGetFontDirs -- Get font directories -Name + [124]FcConfigGetConfigFiles -- Get config files - FcRangeCreateInteger -- create a range object for integer + [125]FcConfigGetCache -- DEPRECATED used to return per-user cache filename -Synopsis + [126]FcConfigGetCacheDirs -- return the list of directories searched for + cache files -#include + [127]FcConfigGetFonts -- Get config font set - FcRange * FcRangeCreateInteger(intbegin, intend); + [128]FcConfigGetBlanks -- Get config blanks -Description + [129]FcConfigGetRescanInterval -- Get config rescan interval - FcRangeCreateInteger creates a new FcRange object with integer - sized value. + [130]FcConfigSetRescanInterval -- Set config rescan interval -Since + [131]FcConfigAppFontAddFile -- Add font file to font database - version 2.11.91 + [132]FcConfigAppFontAddDir -- Add fonts from directory to font database -FcRangeDestroy + [133]FcConfigAppFontClear -- Remove all app fonts from font database -Name + [134]FcConfigSubstituteWithPat -- Execute substitutions - FcRangeDestroy -- destroy a range object + [135]FcConfigSubstitute -- Execute substitutions -Synopsis + [136]FcFontMatch -- Return best font -#include + [137]FcFontSort -- Return list of matching fonts - void FcRangeDestroy(FcRange *range); + [138]FcFontRenderPrepare -- Prepare pattern for loading font file -Description + [139]FcFontList -- List fonts - FcRangeDestroy destroys a FcRange object, freeing all memory - associated with it. + [140]FcConfigFilename -- Find a config file -Since + [141]FcConfigParseAndLoad -- load a configuration file - version 2.11.91 + [142]FcConfigParseAndLoadFromMemory -- load a configuration from memory -FcRangeGetDouble + [143]FcConfigGetSysRoot -- Obtain the system root directory -Name + [144]FcConfigSetSysRoot -- Set the system root directory - FcRangeGetDouble -- Get the range in double + [145]FcConfigFileInfoIterInit -- Initialize the iterator -Synopsis + [146]FcConfigFileInfoIterNext -- Set the iterator to point to the next + list -#include + [147]FcConfigFileInfoIterGet -- Obtain the configuration file information - FcBool FcRangeGetDouble(const FcRange *range, double *begin, - double *end); + An FcConfig object holds the internal representation of a configuration. + There is a default configuration which applications may use by passing 0 + to any function using the data within an FcConfig. -Description + FcConfigCreate - Returns in begin and end as the range. +Name -Since + FcConfigCreate -- Create a configuration - version 2.11.91 - __________________________________________________________ +Synopsis -FcConfig + #include - Table of Contents - FcConfigCreate -- Create a configuration - FcConfigReference -- Increment config reference count - FcConfigDestroy -- Destroy a configuration - FcConfigSetCurrent -- Set configuration as default - FcConfigGetCurrent -- Return current configuration - FcConfigUptoDate -- Check timestamps on config files - FcConfigHome -- return the current home directory. - FcConfigEnableHome -- controls use of the home directory. - FcConfigBuildFonts -- Build font database - FcConfigGetConfigDirs -- Get config directories - FcConfigGetFontDirs -- Get font directories - FcConfigGetConfigFiles -- Get config files - FcConfigGetCache -- DEPRECATED used to return per-user cache - filename - - FcConfigGetCacheDirs -- return the list of directories searched - for cache files - - FcConfigGetFonts -- Get config font set - FcConfigGetBlanks -- Get config blanks - FcConfigGetRescanInterval -- Get config rescan interval - FcConfigSetRescanInterval -- Set config rescan interval - FcConfigAppFontAddFile -- Add font file to font database - FcConfigAppFontAddDir -- Add fonts from directory to font - database - - FcConfigAppFontClear -- Remove all app fonts from font database - FcConfigSubstituteWithPat -- Execute substitutions - FcConfigSubstitute -- Execute substitutions - FcFontMatch -- Return best font - FcFontSort -- Return list of matching fonts - FcFontRenderPrepare -- Prepare pattern for loading font file - FcFontList -- List fonts - FcConfigFilename -- Find a config file - FcConfigParseAndLoad -- load a configuration file - FcConfigParseAndLoadFromMemory -- load a configuration from - memory - - FcConfigGetSysRoot -- Obtain the system root directory - FcConfigSetSysRoot -- Set the system root directory - FcConfigFileInfoIterInit -- Initialize the iterator - FcConfigFileInfoIterNext -- Set the iterator to point to the - next list - - FcConfigFileInfoIterGet -- Obtain the configuration file - information - - An FcConfig object holds the internal representation of a - configuration. There is a default configuration which - applications may use by passing 0 to any function using the - data within an FcConfig. - -FcConfigCreate - -Name - - FcConfigCreate -- Create a configuration - -Synopsis - -#include FcConfig * FcConfigCreate(void); @@ -2921,76 +3274,77 @@ Description Creates an empty configuration. -FcConfigReference + FcConfigReference Name - FcConfigReference -- Increment config reference count + FcConfigReference -- Increment config reference count Synopsis -#include + #include + FcConfig * FcConfigReference(FcConfig *config); Description - Add another reference to config. Configs are freed only when - the reference count reaches zero. If config is NULL, the - current configuration is used. In that case this function will - be similar to FcConfigGetCurrent() except that it increments - the reference count before returning and the user is - responsible for destroying the configuration when not needed - anymore. + Add another reference to config. Configs are freed only when the reference + count reaches zero. If config is NULL, the current configuration is used. + In that case this function will be similar to FcConfigGetCurrent() except + that it increments the reference count before returning and the user is + responsible for destroying the configuration when not needed anymore. -FcConfigDestroy + FcConfigDestroy Name - FcConfigDestroy -- Destroy a configuration + FcConfigDestroy -- Destroy a configuration Synopsis -#include + #include + void FcConfigDestroy(FcConfig *config); Description - Decrements the config reference count. If all references are - gone, destroys the configuration and any data associated with - it. Note that calling this function with the return from - FcConfigGetCurrent will cause a new configuration to be created - for use as current configuration. + Decrements the config reference count. If all references are gone, + destroys the configuration and any data associated with it. Note that + calling this function with the return from FcConfigGetCurrent will cause a + new configuration to be created for use as current configuration. -FcConfigSetCurrent + FcConfigSetCurrent Name - FcConfigSetCurrent -- Set configuration as default + FcConfigSetCurrent -- Set configuration as default Synopsis -#include + #include + FcBool FcConfigSetCurrent(FcConfig *config); Description - Sets the current default configuration to config. Implicitly - calls FcConfigBuildFonts if necessary, and FcConfigReference() - to inrease the reference count in config since 2.12.0, - returning FcFalse if that call fails. + Sets the current default configuration to config. Implicitly calls + FcConfigBuildFonts if necessary, and FcConfigReference() to inrease the + reference count in config since 2.12.0, returning FcFalse if that call + fails. -FcConfigGetCurrent + FcConfigGetCurrent Name - FcConfigGetCurrent -- Return current configuration + FcConfigGetCurrent -- Return current configuration Synopsis -#include + #include + FcConfig * FcConfigGetCurrent(void); @@ -2998,205 +3352,208 @@ Description Returns the current default configuration. -FcConfigUptoDate + FcConfigUptoDate Name - FcConfigUptoDate -- Check timestamps on config files + FcConfigUptoDate -- Check timestamps on config files Synopsis -#include + #include + FcBool FcConfigUptoDate(FcConfig *config); Description - Checks all of the files related to config and returns whether - any of them has been modified since the configuration was - created. If config is NULL, the current configuration is used. + Checks all of the files related to config and returns whether any of them + has been modified since the configuration was created. If config is NULL, + the current configuration is used. -FcConfigHome + FcConfigHome Name - FcConfigHome -- return the current home directory. + FcConfigHome -- return the current home directory. Synopsis -#include + #include + FcChar8 * FcConfigHome(void); Description - Return the current user's home directory, if it is available, - and if using it is enabled, and NULL otherwise. See also - FcConfigEnableHome). + Return the current user's home directory, if it is available, and if using + it is enabled, and NULL otherwise. See also FcConfigEnableHome). -FcConfigEnableHome + FcConfigEnableHome Name - FcConfigEnableHome -- controls use of the home directory. + FcConfigEnableHome -- controls use of the home directory. Synopsis -#include + #include + FcBool FcConfigEnableHome(FcBool enable); Description - If enable is FcTrue, then Fontconfig will use various files - which are specified relative to the user's home directory - (using the ~ notation in the configuration). When enable is - FcFalse, then all use of the home directory in these contexts - will be disabled. The previous setting of the value is - returned. + If enable is FcTrue, then Fontconfig will use various files which are + specified relative to the user's home directory (using the ~ notation in + the configuration). When enable is FcFalse, then all use of the home + directory in these contexts will be disabled. The previous setting of the + value is returned. -FcConfigBuildFonts + FcConfigBuildFonts Name - FcConfigBuildFonts -- Build font database + FcConfigBuildFonts -- Build font database Synopsis -#include + #include + FcBool FcConfigBuildFonts(FcConfig *config); Description - Builds the set of available fonts for the given configuration. - Note that any changes to the configuration after this call have - indeterminate effects. Returns FcFalse if this operation runs - out of memory. If config is NULL, the current configuration is - used. + Builds the set of available fonts for the given configuration. Note that + any changes to the configuration after this call have indeterminate + effects. Returns FcFalse if this operation runs out of memory. If config + is NULL, the current configuration is used. -FcConfigGetConfigDirs + FcConfigGetConfigDirs Name - FcConfigGetConfigDirs -- Get config directories + FcConfigGetConfigDirs -- Get config directories Synopsis -#include + #include + FcStrList * FcConfigGetConfigDirs(FcConfig *config); Description - Returns the list of font directories specified in the - configuration files for config. Does not include any - subdirectories. If config is NULL, the current configuration is - used. + Returns the list of font directories specified in the configuration files + for config. Does not include any subdirectories. If config is NULL, the + current configuration is used. -FcConfigGetFontDirs + FcConfigGetFontDirs Name - FcConfigGetFontDirs -- Get font directories + FcConfigGetFontDirs -- Get font directories Synopsis -#include + #include + FcStrList * FcConfigGetFontDirs(FcConfig *config); Description - Returns the list of font directories in config. This includes - the configured font directories along with any directories - below those in the filesystem. If config is NULL, the current - configuration is used. + Returns the list of font directories in config. This includes the + configured font directories along with any directories below those in the + filesystem. If config is NULL, the current configuration is used. -FcConfigGetConfigFiles + FcConfigGetConfigFiles Name - FcConfigGetConfigFiles -- Get config files + FcConfigGetConfigFiles -- Get config files Synopsis -#include + #include + FcStrList * FcConfigGetConfigFiles(FcConfig *config); Description - Returns the list of known configuration files used to generate - config. If config is NULL, the current configuration is used. + Returns the list of known configuration files used to generate config. If + config is NULL, the current configuration is used. -FcConfigGetCache + FcConfigGetCache Name - FcConfigGetCache -- DEPRECATED used to return per-user cache - filename + FcConfigGetCache -- DEPRECATED used to return per-user cache filename Synopsis -#include + #include + FcChar8 * FcConfigGetCache(FcConfig *config); Description - With fontconfig no longer using per-user cache files, this - function now simply returns NULL to indicate that no per-user - file exists. + With fontconfig no longer using per-user cache files, this function now + simply returns NULL to indicate that no per-user file exists. -FcConfigGetCacheDirs + FcConfigGetCacheDirs Name - FcConfigGetCacheDirs -- return the list of directories searched - for cache files + FcConfigGetCacheDirs -- return the list of directories searched for cache + files Synopsis -#include + #include + FcStrList * FcConfigGetCacheDirs(const FcConfig *config); Description - FcConfigGetCacheDirs returns a string list containing all of - the directories that fontconfig will search when attempting to - load a cache file for a font directory. If config is NULL, the - current configuration is used. + FcConfigGetCacheDirs returns a string list containing all of the + directories that fontconfig will search when attempting to load a cache + file for a font directory. If config is NULL, the current configuration is + used. -FcConfigGetFonts + FcConfigGetFonts Name - FcConfigGetFonts -- Get config font set + FcConfigGetFonts -- Get config font set Synopsis -#include + #include + FcFontSet * FcConfigGetFonts(FcConfig *config, FcSetName set); Description - Returns one of the two sets of fonts from the configuration as - specified by set. This font set is owned by the library and - must not be modified or freed. If config is NULL, the current - configuration is used. + Returns one of the two sets of fonts from the configuration as specified + by set. This font set is owned by the library and must not be modified or + freed. If config is NULL, the current configuration is used. -FcConfigGetBlanks + FcConfigGetBlanks Name - FcConfigGetBlanks -- Get config blanks + FcConfigGetBlanks -- Get config blanks Synopsis -#include + #include + FcBlanks * FcConfigGetBlanks(FcConfig *config); @@ -3204,335 +3561,332 @@ Description FcBlanks is deprecated. This function always returns NULL. -FcConfigGetRescanInterval + FcConfigGetRescanInterval Name - FcConfigGetRescanInterval -- Get config rescan interval + FcConfigGetRescanInterval -- Get config rescan interval Synopsis -#include + #include + int FcConfigGetRescanInterval(FcConfig *config); Description - Returns the interval between automatic checks of the - configuration (in seconds) specified in config. The - configuration is checked during a call to FcFontList when this - interval has passed since the last check. An interval setting - of zero disables automatic checks. If config is NULL, the + Returns the interval between automatic checks of the configuration (in + seconds) specified in config. The configuration is checked during a call + to FcFontList when this interval has passed since the last check. An + interval setting of zero disables automatic checks. If config is NULL, the current configuration is used. -FcConfigSetRescanInterval + FcConfigSetRescanInterval Name - FcConfigSetRescanInterval -- Set config rescan interval + FcConfigSetRescanInterval -- Set config rescan interval Synopsis -#include + #include + - FcBool FcConfigSetRescanInterval(FcConfig *config, int - rescanInterval); + FcBool FcConfigSetRescanInterval(FcConfig *config, int rescanInterval); Description - Sets the rescan interval. Returns FcFalse if the interval - cannot be set (due to allocation failure). Otherwise returns - FcTrue. An interval setting of zero disables automatic checks. - If config is NULL, the current configuration is used. + Sets the rescan interval. Returns FcFalse if the interval cannot be set + (due to allocation failure). Otherwise returns FcTrue. An interval setting + of zero disables automatic checks. If config is NULL, the current + configuration is used. -FcConfigAppFontAddFile + FcConfigAppFontAddFile Name - FcConfigAppFontAddFile -- Add font file to font database + FcConfigAppFontAddFile -- Add font file to font database Synopsis -#include + #include + - FcBool FcConfigAppFontAddFile(FcConfig *config, const FcChar8 - *file); + FcBool FcConfigAppFontAddFile(FcConfig *config, const FcChar8 *file); Description - Adds an application-specific font to the configuration. Returns - FcFalse if the fonts cannot be added (due to allocation failure - or no fonts found). Otherwise returns FcTrue. If config is - NULL, the current configuration is used. + Adds an application-specific font to the configuration. Returns FcFalse if + the fonts cannot be added (due to allocation failure or no fonts found). + Otherwise returns FcTrue. If config is NULL, the current configuration is + used. -FcConfigAppFontAddDir + FcConfigAppFontAddDir Name - FcConfigAppFontAddDir -- Add fonts from directory to font - database + FcConfigAppFontAddDir -- Add fonts from directory to font database Synopsis -#include + #include - FcBool FcConfigAppFontAddDir(FcConfig *config, const FcChar8 - *dir); + + FcBool FcConfigAppFontAddDir(FcConfig *config, const FcChar8 *dir); Description - Scans the specified directory for fonts, adding each one found - to the application-specific set of fonts. Returns FcFalse if - the fonts cannot be added (due to allocation failure). - Otherwise returns FcTrue. If config is NULL, the current - configuration is used. + Scans the specified directory for fonts, adding each one found to the + application-specific set of fonts. Returns FcFalse if the fonts cannot be + added (due to allocation failure). Otherwise returns FcTrue. If config is + NULL, the current configuration is used. -FcConfigAppFontClear + FcConfigAppFontClear Name - FcConfigAppFontClear -- Remove all app fonts from font database + FcConfigAppFontClear -- Remove all app fonts from font database Synopsis -#include + #include + void FcConfigAppFontClear(FcConfig *config); Description - Clears the set of application-specific fonts. If config is - NULL, the current configuration is used. + Clears the set of application-specific fonts. If config is NULL, the + current configuration is used. -FcConfigSubstituteWithPat + FcConfigSubstituteWithPat Name - FcConfigSubstituteWithPat -- Execute substitutions + FcConfigSubstituteWithPat -- Execute substitutions Synopsis -#include + #include - FcBool FcConfigSubstituteWithPat(FcConfig *config, FcPattern - *p, FcPattern *p_pat, FcMatchKind kind); + + FcBool FcConfigSubstituteWithPat(FcConfig *config, FcPattern *p, FcPattern + *p_pat, FcMatchKind kind); Description - Performs the sequence of pattern modification operations, if - kind is FcMatchPattern, then those tagged as pattern operations - are applied, else if kind is FcMatchFont, those tagged as font - operations are applied and p_pat is used for elements - with target=pattern. Returns FcFalse if the substitution cannot - be performed (due to allocation failure). Otherwise returns - FcTrue. If config is NULL, the current configuration is used. + Performs the sequence of pattern modification operations, if kind is + FcMatchPattern, then those tagged as pattern operations are applied, else + if kind is FcMatchFont, those tagged as font operations are applied and + p_pat is used for elements with target=pattern. Returns FcFalse if + the substitution cannot be performed (due to allocation failure). + Otherwise returns FcTrue. If config is NULL, the current configuration is + used. -FcConfigSubstitute + FcConfigSubstitute Name - FcConfigSubstitute -- Execute substitutions + FcConfigSubstitute -- Execute substitutions Synopsis -#include + #include - FcBool FcConfigSubstitute(FcConfig *config, FcPattern *p, - FcMatchKind kind); + + FcBool FcConfigSubstitute(FcConfig *config, FcPattern *p, FcMatchKind + kind); Description - Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns - FcFalse if the substitution cannot be performed (due to - allocation failure). Otherwise returns FcTrue. If config is - NULL, the current configuration is used. + Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns FcFalse if + the substitution cannot be performed (due to allocation failure). + Otherwise returns FcTrue. If config is NULL, the current configuration is + used. -FcFontMatch + FcFontMatch Name - FcFontMatch -- Return best font + FcFontMatch -- Return best font Synopsis -#include + #include + - FcPattern * FcFontMatch(FcConfig *config, FcPattern *p, - FcResult *result); + FcPattern * FcFontMatch(FcConfig *config, FcPattern *p, FcResult *result); Description - Finds the font in sets most closely matching pattern and - returns the result of FcFontRenderPrepare for that font and the - provided pattern. This function should be called only after - FcConfigSubstitute and FcDefaultSubstitute have been called for - p; otherwise the results will not be correct. If config is - NULL, the current configuration is used. + Finds the font in sets most closely matching pattern and returns the + result of FcFontRenderPrepare for that font and the provided pattern. This + function should be called only after FcConfigSubstitute and + FcDefaultSubstitute have been called for p; otherwise the results will not + be correct. If config is NULL, the current configuration is used. -FcFontSort + FcFontSort Name - FcFontSort -- Return list of matching fonts + FcFontSort -- Return list of matching fonts Synopsis -#include + #include + - FcFontSet * FcFontSort(FcConfig *config, FcPattern *p, FcBool - trim, FcCharSet **csp, FcResult *result); + FcFontSet * FcFontSort(FcConfig *config, FcPattern *p, FcBool trim, + FcCharSet **csp, FcResult *result); Description - Returns the list of fonts sorted by closeness to p. If trim is - FcTrue, elements in the list which don't include Unicode - coverage not provided by earlier elements in the list are - elided. The union of Unicode coverage of all of the fonts is - returned in csp, if csp is not NULL. This function should be - called only after FcConfigSubstitute and FcDefaultSubstitute - have been called for p; otherwise the results will not be - correct. + Returns the list of fonts sorted by closeness to p. If trim is FcTrue, + elements in the list which don't include Unicode coverage not provided by + earlier elements in the list are elided. The union of Unicode coverage of + all of the fonts is returned in csp, if csp is not NULL. This function + should be called only after FcConfigSubstitute and FcDefaultSubstitute + have been called for p; otherwise the results will not be correct. - The returned FcFontSet references FcPattern structures which - may be shared by the return value from multiple FcFontSort - calls, applications must not modify these patterns. Instead, - they should be passed, along with p to FcFontRenderPrepare - which combines them into a complete pattern. + The returned FcFontSet references FcPattern structures which may be shared + by the return value from multiple FcFontSort calls, applications must not + modify these patterns. Instead, they should be passed, along with p to + FcFontRenderPrepare which combines them into a complete pattern. The FcFontSet returned by FcFontSort is destroyed by calling - FcFontSetDestroy. If config is NULL, the current configuration - is used. + FcFontSetDestroy. If config is NULL, the current configuration is used. -FcFontRenderPrepare + FcFontRenderPrepare Name - FcFontRenderPrepare -- Prepare pattern for loading font file + FcFontRenderPrepare -- Prepare pattern for loading font file Synopsis -#include + #include - FcPattern * FcFontRenderPrepare(FcConfig *config, FcPattern - *pat, FcPattern *font); + + FcPattern * FcFontRenderPrepare(FcConfig *config, FcPattern *pat, + FcPattern *font); Description - Creates a new pattern consisting of elements of font not - appearing in pat, elements of pat not appearing in font and the - best matching value from pat for elements appearing in both. - The result is passed to FcConfigSubstituteWithPat with kind - FcMatchFont and then returned. + Creates a new pattern consisting of elements of font not appearing in pat, + elements of pat not appearing in font and the best matching value from pat + for elements appearing in both. The result is passed to + FcConfigSubstituteWithPat with kind FcMatchFont and then returned. -FcFontList + FcFontList Name - FcFontList -- List fonts + FcFontList -- List fonts Synopsis -#include + #include + - FcFontSet * FcFontList(FcConfig *config, FcPattern *p, - FcObjectSet *os); + FcFontSet * FcFontList(FcConfig *config, FcPattern *p, FcObjectSet *os); Description - Selects fonts matching p, creates patterns from those fonts - containing only the objects in os and returns the set of unique - such patterns. If config is NULL, the default configuration is - checked to be up to date, and used. + Selects fonts matching p, creates patterns from those fonts containing + only the objects in os and returns the set of unique such patterns. If + config is NULL, the default configuration is checked to be up to date, and + used. -FcConfigFilename + FcConfigFilename Name - FcConfigFilename -- Find a config file + FcConfigFilename -- Find a config file Synopsis -#include + #include + FcChar8 * FcConfigFilename(const FcChar8 *name); Description - Given the specified external entity name, return the associated - filename. This provides applications a way to convert various - configuration file references into filename form. + Given the specified external entity name, return the associated filename. + This provides applications a way to convert various configuration file + references into filename form. - A null or empty name indicates that the default configuration - file should be used; which file this references can be - overridden with the FONTCONFIG_FILE environment variable. Next, - if the name starts with ~, it refers to a file in the current - users home directory. Otherwise if the name doesn't start with - '/', it refers to a file in the default configuration - directory; the built-in default directory can be overridden + A null or empty name indicates that the default configuration file should + be used; which file this references can be overridden with the + FONTCONFIG_FILE environment variable. Next, if the name starts with ~, it + refers to a file in the current users home directory. Otherwise if the + name doesn't start with '/', it refers to a file in the default + configuration directory; the built-in default directory can be overridden with the FONTCONFIG_PATH environment variable. -FcConfigParseAndLoad + FcConfigParseAndLoad Name - FcConfigParseAndLoad -- load a configuration file + FcConfigParseAndLoad -- load a configuration file Synopsis -#include + #include + - FcBool FcConfigParseAndLoad(FcConfig *config, const FcChar8 - *file, FcBool complain); + FcBool FcConfigParseAndLoad(FcConfig *config, const FcChar8 *file, FcBool + complain); Description Walks the configuration in 'file' and constructs the internal - representation in 'config'. Any include files referenced from - within 'file' will be loaded and parsed. If 'complain' is - FcFalse, no warning will be displayed if 'file' does not exist. - Error and warning messages will be output to stderr. Returns - FcFalse if some error occurred while loading the file, either a - parse error, semantic error or allocation failure. Otherwise - returns FcTrue. + representation in 'config'. Any include files referenced from within + 'file' will be loaded and parsed. If 'complain' is FcFalse, no warning + will be displayed if 'file' does not exist. Error and warning messages + will be output to stderr. Returns FcFalse if some error occurred while + loading the file, either a parse error, semantic error or allocation + failure. Otherwise returns FcTrue. -FcConfigParseAndLoadFromMemory + FcConfigParseAndLoadFromMemory Name - FcConfigParseAndLoadFromMemory -- load a configuration from - memory + FcConfigParseAndLoadFromMemory -- load a configuration from memory Synopsis -#include + #include + - FcBool FcConfigParseAndLoadFromMemory(FcConfig *config, const - FcChar8 *buffer, FcBool complain); + FcBool FcConfigParseAndLoadFromMemory(FcConfig *config, const FcChar8 + *buffer, FcBool complain); Description Walks the configuration in 'memory' and constructs the internal - representation in 'config'. Any includes files referenced from - within 'memory' will be loaded and dparsed. If 'complain' is - FcFalse, no warning will be displayed if 'file' does not exist. - Error and warning messages will be output to stderr. Returns - FcFalse if fsome error occurred while loading the file, either - a parse error, semantic error or allocation failure. Otherwise - returns FcTrue. + representation in 'config'. Any includes files referenced from within + 'memory' will be loaded and dparsed. If 'complain' is FcFalse, no warning + will be displayed if 'file' does not exist. Error and warning messages + will be output to stderr. Returns FcFalse if fsome error occurred while + loading the file, either a parse error, semantic error or allocation + failure. Otherwise returns FcTrue. Since version 2.12.5 -FcConfigGetSysRoot + FcConfigGetSysRoot Name - FcConfigGetSysRoot -- Obtain the system root directory + FcConfigGetSysRoot -- Obtain the system root directory Synopsis -#include + #include + const FcChar8 * FcConfigGetSysRoot(const FcConfig *config); @@ -3544,388 +3898,403 @@ Since version 2.10.92 -FcConfigSetSysRoot + FcConfigSetSysRoot Name - FcConfigSetSysRoot -- Set the system root directory + FcConfigSetSysRoot -- Set the system root directory Synopsis -#include + #include - void FcConfigSetSysRoot(FcConfig *config, const FcChar8 - *sysroot); + + void FcConfigSetSysRoot(FcConfig *config, const FcChar8 *sysroot); Description - Set 'sysroot' as the system root directory. fontconfig prepend - 'sysroot' to the cache directories in order to allow people to - generate caches at the build time. Note that this causes - changing current config. i.e. this function calls - FcConfigSetCurrent() internally. + Set 'sysroot' as the system root directory. fontconfig prepend 'sysroot' + to the cache directories in order to allow people to generate caches at + the build time. Note that this causes changing current config. i.e. this + function calls FcConfigSetCurrent() internally. Since version 2.10.92 -FcConfigFileInfoIterInit + FcConfigFileInfoIterInit Name - FcConfigFileInfoIterInit -- Initialize the iterator + FcConfigFileInfoIterInit -- Initialize the iterator Synopsis -#include + #include + - void FcConfigFileInfoIterInit(FcConfig *config, - FcConfigFileInfoIter *iter); + void FcConfigFileInfoIterInit(FcConfig *config, FcConfigFileInfoIter + *iter); Description - Initialize 'iter' with the first iterator in the config file - information list. + Initialize 'iter' with the first iterator in the config file information + list. Since version 2.12.91 -FcConfigFileInfoIterNext + FcConfigFileInfoIterNext Name - FcConfigFileInfoIterNext -- Set the iterator to point to the - next list + FcConfigFileInfoIterNext -- Set the iterator to point to the next list Synopsis -#include + #include - FcBool FcConfigFileInfoIterNext(FcConfig *config, - FcConfigFileInfoIter *iter); + + FcBool FcConfigFileInfoIterNext(FcConfig *config, FcConfigFileInfoIter + *iter); Description - Set 'iter' to point to the next node in the config file - information list. If there is no next node, FcFalse is - returned. + Set 'iter' to point to the next node in the config file information list. + If there is no next node, FcFalse is returned. Since version 2.12.91 -FcConfigFileInfoIterGet + FcConfigFileInfoIterGet Name - FcConfigFileInfoIterGet -- Obtain the configuration file - information + FcConfigFileInfoIterGet -- Obtain the configuration file information Synopsis -#include + #include + - FcBool FcConfigFileInfoIterGet(FcConfig *config, - FcConfigFileInfoIter *iter, FcChar8 **name, FcChar8 - **description, FcBool *enabled); + FcBool FcConfigFileInfoIterGet(FcConfig *config, FcConfigFileInfoIter + *iter, FcChar8 **name, FcChar8 **description, FcBool *enabled); Description - Obtain the filename, the description and the flag whether it is - enabled or not for 'iter' where points to current configuration - file information. If the iterator is invalid, FcFalse is - returned. + Obtain the filename, the description and the flag whether it is enabled or + not for 'iter' where points to current configuration file information. If + the iterator is invalid, FcFalse is returned. Since version 2.12.91 - __________________________________________________________ -FcObjectType + -------------------------------------------------------------------------- + + FcObjectType Table of Contents - FcNameRegisterObjectTypes -- Register object types - FcNameUnregisterObjectTypes -- Unregister object types - FcNameGetObjectType -- Lookup an object type - Provides for application-specified font name object types so - that new pattern elements can be generated from font names. + [148]FcNameRegisterObjectTypes -- Register object types + + [149]FcNameUnregisterObjectTypes -- Unregister object types + + [150]FcNameGetObjectType -- Lookup an object type + + Provides for application-specified font name object types so that new + pattern elements can be generated from font names. -FcNameRegisterObjectTypes + FcNameRegisterObjectTypes Name - FcNameRegisterObjectTypes -- Register object types + FcNameRegisterObjectTypes -- Register object types Synopsis -#include + #include - FcBool FcNameRegisterObjectTypes(const FcObjectType *types, int - ntype); + + FcBool FcNameRegisterObjectTypes(const FcObjectType *types, int ntype); Description Deprecated. Does nothing. Returns FcFalse. -FcNameUnregisterObjectTypes + FcNameUnregisterObjectTypes Name - FcNameUnregisterObjectTypes -- Unregister object types + FcNameUnregisterObjectTypes -- Unregister object types Synopsis -#include + #include + - FcBool FcNameUnregisterObjectTypes(const FcObjectType *types, - int ntype); + FcBool FcNameUnregisterObjectTypes(const FcObjectType *types, int ntype); Description Deprecated. Does nothing. Returns FcFalse. -FcNameGetObjectType + FcNameGetObjectType Name - FcNameGetObjectType -- Lookup an object type + FcNameGetObjectType -- Lookup an object type Synopsis -#include + #include + const FcObjectType * FcNameGetObjectType(const char *object); Description Return the object type for the pattern element named object. - __________________________________________________________ -FcConstant + -------------------------------------------------------------------------- + + FcConstant Table of Contents - FcNameRegisterConstants -- Register symbolic constants - FcNameUnregisterConstants -- Unregister symbolic constants - FcNameGetConstant -- Lookup symbolic constant - FcNameConstant -- Get the value for a symbolic constant - Provides for application-specified symbolic constants for font - names. + [151]FcNameRegisterConstants -- Register symbolic constants -FcNameRegisterConstants + [152]FcNameUnregisterConstants -- Unregister symbolic constants + + [153]FcNameGetConstant -- Lookup symbolic constant + + [154]FcNameConstant -- Get the value for a symbolic constant + + Provides for application-specified symbolic constants for font names. + + FcNameRegisterConstants Name - FcNameRegisterConstants -- Register symbolic constants + FcNameRegisterConstants -- Register symbolic constants Synopsis -#include + #include - FcBool FcNameRegisterConstants(const FcConstant *consts, int - nconsts); + + FcBool FcNameRegisterConstants(const FcConstant *consts, int nconsts); Description Deprecated. Does nothing. Returns FcFalse. -FcNameUnregisterConstants + FcNameUnregisterConstants Name - FcNameUnregisterConstants -- Unregister symbolic constants + FcNameUnregisterConstants -- Unregister symbolic constants Synopsis -#include + #include + - FcBool FcNameUnregisterConstants(const FcConstant *consts, int - nconsts); + FcBool FcNameUnregisterConstants(const FcConstant *consts, int nconsts); Description Deprecated. Does nothing. Returns FcFalse. -FcNameGetConstant + FcNameGetConstant Name - FcNameGetConstant -- Lookup symbolic constant + FcNameGetConstant -- Lookup symbolic constant Synopsis -#include + #include + const FcConstant * FcNameGetConstant(FcChar8 *string); Description - Return the FcConstant structure related to symbolic constant - string. + Return the FcConstant structure related to symbolic constant string. -FcNameConstant + FcNameConstant Name - FcNameConstant -- Get the value for a symbolic constant + FcNameConstant -- Get the value for a symbolic constant Synopsis -#include + #include + FcBool FcNameConstant(FcChar8 *string, int *result); Description - Returns whether a symbolic constant with name string is - registered, placing the value of the constant in result if - present. - __________________________________________________________ + Returns whether a symbolic constant with name string is registered, + placing the value of the constant in result if present. -FcWeight + -------------------------------------------------------------------------- + + FcWeight Table of Contents - FcWeightFromOpenTypeDouble -- Convert from OpenType weight - values to fontconfig ones - FcWeightToOpenTypeDouble -- Convert from fontconfig weight - values to OpenType ones + [155]FcWeightFromOpenTypeDouble -- Convert from OpenType weight values to + fontconfig ones + + [156]FcWeightToOpenTypeDouble -- Convert from fontconfig weight values to + OpenType ones - FcWeightFromOpenType -- Convert from OpenType weight values to - fontconfig ones + [157]FcWeightFromOpenType -- Convert from OpenType weight values to + fontconfig ones - FcWeightToOpenType -- Convert from fontconfig weight values to - OpenType ones + [158]FcWeightToOpenType -- Convert from fontconfig weight values to + OpenType ones Maps weights to and from OpenType weights. -FcWeightFromOpenTypeDouble + FcWeightFromOpenTypeDouble Name - FcWeightFromOpenTypeDouble -- Convert from OpenType weight - values to fontconfig ones + FcWeightFromOpenTypeDouble -- Convert from OpenType weight values to + fontconfig ones Synopsis -#include + #include + double FcWeightFromOpenTypeDouble(doubleot_weight); Description - FcWeightFromOpenTypeDouble returns an double value to use with - FC_WEIGHT, from an double in the 1..1000 range, resembling the - numbers from OpenType specification's OS/2 usWeight numbers, - which are also similar to CSS font-weight numbers. If input is - negative, zero, or greater than 1000, returns -1. This function - linearly doubleerpolates between various FC_WEIGHT_* constants. - As such, the returned value does not necessarily match any of - the predefined constants. + FcWeightFromOpenTypeDouble returns an double value to use with FC_WEIGHT, + from an double in the 1..1000 range, resembling the numbers from OpenType + specification's OS/2 usWeight numbers, which are also similar to CSS + font-weight numbers. If input is negative, zero, or greater than 1000, + returns -1. This function linearly doubleerpolates between various + FC_WEIGHT_* constants. As such, the returned value does not necessarily + match any of the predefined constants. Since version 2.12.92 -FcWeightToOpenTypeDouble + FcWeightToOpenTypeDouble Name - FcWeightToOpenTypeDouble -- Convert from fontconfig weight - values to OpenType ones + FcWeightToOpenTypeDouble -- Convert from fontconfig weight values to + OpenType ones Synopsis -#include + #include + double FcWeightToOpenTypeDouble(doubleot_weight); Description - FcWeightToOpenTypeDouble is the inverse of - FcWeightFromOpenType. If the input is less than FC_WEIGHT_THIN - or greater than FC_WEIGHT_EXTRABLACK, returns -1. Otherwise - returns a number in the range 1 to 1000. + FcWeightToOpenTypeDouble is the inverse of FcWeightFromOpenType. If the + input is less than FC_WEIGHT_THIN or greater than FC_WEIGHT_EXTRABLACK, + returns -1. Otherwise returns a number in the range 1 to 1000. Since version 2.12.92 -FcWeightFromOpenType + FcWeightFromOpenType Name - FcWeightFromOpenType -- Convert from OpenType weight values to - fontconfig ones + FcWeightFromOpenType -- Convert from OpenType weight values to fontconfig + ones Synopsis -#include + #include + int FcWeightFromOpenType(intot_weight); Description - FcWeightFromOpenType is like FcWeightFromOpenTypeDouble but - with integer arguments. Use the other function instead. + FcWeightFromOpenType is like FcWeightFromOpenTypeDouble but with integer + arguments. Use the other function instead. Since version 2.11.91 -FcWeightToOpenType + FcWeightToOpenType Name - FcWeightToOpenType -- Convert from fontconfig weight values to - OpenType ones + FcWeightToOpenType -- Convert from fontconfig weight values to OpenType + ones Synopsis -#include + #include + int FcWeightToOpenType(intot_weight); Description - FcWeightToOpenType is like FcWeightToOpenTypeDouble but with - integer arguments. Use the other function instead. + FcWeightToOpenType is like FcWeightToOpenTypeDouble but with integer + arguments. Use the other function instead. Since version 2.11.91 - __________________________________________________________ -FcBlanks + -------------------------------------------------------------------------- + + FcBlanks Table of Contents - FcBlanksCreate -- Create an FcBlanks - FcBlanksDestroy -- Destroy and FcBlanks - FcBlanksAdd -- Add a character to an FcBlanks - FcBlanksIsMember -- Query membership in an FcBlanks - An FcBlanks object holds a list of Unicode chars which are - expected to be blank when drawn. When scanning new fonts, any - glyphs which are empty and not in this list will be assumed to - be broken and not placed in the FcCharSet associated with the - font. This provides a significantly more accurate CharSet for - applications. + [159]FcBlanksCreate -- Create an FcBlanks + + [160]FcBlanksDestroy -- Destroy and FcBlanks - FcBlanks is deprecated and should not be used in newly written - code. It is still accepted by some functions for compatibility - with older code but will be removed in the future. + [161]FcBlanksAdd -- Add a character to an FcBlanks -FcBlanksCreate + [162]FcBlanksIsMember -- Query membership in an FcBlanks + + An FcBlanks object holds a list of Unicode chars which are expected to be + blank when drawn. When scanning new fonts, any glyphs which are empty and + not in this list will be assumed to be broken and not placed in the + FcCharSet associated with the font. This provides a significantly more + accurate CharSet for applications. + + FcBlanks is deprecated and should not be used in newly written code. It is + still accepted by some functions for compatibility with older code but + will be removed in the future. + + FcBlanksCreate Name - FcBlanksCreate -- Create an FcBlanks + FcBlanksCreate -- Create an FcBlanks Synopsis -#include + #include + FcBlanks * FcBlanksCreate(void); @@ -3933,15 +4302,16 @@ Description FcBlanks is deprecated. This function always returns NULL. -FcBlanksDestroy + FcBlanksDestroy Name - FcBlanksDestroy -- Destroy and FcBlanks + FcBlanksDestroy -- Destroy and FcBlanks Synopsis -#include + #include + void FcBlanksDestroy(FcBlanks *b); @@ -3949,15 +4319,16 @@ Description FcBlanks is deprecated. This function does nothing. -FcBlanksAdd + FcBlanksAdd Name - FcBlanksAdd -- Add a character to an FcBlanks + FcBlanksAdd -- Add a character to an FcBlanks Synopsis -#include + #include + FcBool FcBlanksAdd(FcBlanks *b, FcChar32 ucs4); @@ -3965,104 +4336,117 @@ Description FcBlanks is deprecated. This function always returns FALSE. -FcBlanksIsMember + FcBlanksIsMember Name - FcBlanksIsMember -- Query membership in an FcBlanks + FcBlanksIsMember -- Query membership in an FcBlanks Synopsis -#include + #include + FcBool FcBlanksIsMember(FcBlanks *b, FcChar32 ucs4); Description FcBlanks is deprecated. This function always returns FALSE. - __________________________________________________________ -FcAtomic + -------------------------------------------------------------------------- + + FcAtomic Table of Contents - FcAtomicCreate -- create an FcAtomic object - FcAtomicLock -- lock a file - FcAtomicNewFile -- return new temporary file name - FcAtomicOrigFile -- return original file name - FcAtomicReplaceOrig -- replace original with new - FcAtomicDeleteNew -- delete new file - FcAtomicUnlock -- unlock a file - FcAtomicDestroy -- destroy an FcAtomic object - These functions provide a safe way to update configuration - files, allowing ongoing reading of the old configuration file - while locked for writing and ensuring that a consistent and - complete version of the configuration file is always available. + [163]FcAtomicCreate -- create an FcAtomic object + + [164]FcAtomicLock -- lock a file + + [165]FcAtomicNewFile -- return new temporary file name + + [166]FcAtomicOrigFile -- return original file name + + [167]FcAtomicReplaceOrig -- replace original with new + + [168]FcAtomicDeleteNew -- delete new file + + [169]FcAtomicUnlock -- unlock a file + + [170]FcAtomicDestroy -- destroy an FcAtomic object + + These functions provide a safe way to update configuration files, allowing + ongoing reading of the old configuration file while locked for writing and + ensuring that a consistent and complete version of the configuration file + is always available. -FcAtomicCreate + FcAtomicCreate Name - FcAtomicCreate -- create an FcAtomic object + FcAtomicCreate -- create an FcAtomic object Synopsis -#include + #include + FcAtomic * FcAtomicCreate(const FcChar8 *file); Description - Creates a data structure containing data needed to control - access to file. Writing is done to a separate file. Once that - file is complete, the original configuration file is atomically - replaced so that reading process always see a consistent and - complete file without the need to lock for reading. + Creates a data structure containing data needed to control access to file. + Writing is done to a separate file. Once that file is complete, the + original configuration file is atomically replaced so that reading process + always see a consistent and complete file without the need to lock for + reading. -FcAtomicLock + FcAtomicLock Name - FcAtomicLock -- lock a file + FcAtomicLock -- lock a file Synopsis -#include + #include + FcBool FcAtomicLock(FcAtomic *atomic); Description - Attempts to lock the file referenced by atomic. Returns FcFalse - if the file is already locked, else returns FcTrue and leaves - the file locked. + Attempts to lock the file referenced by atomic. Returns FcFalse if the + file is already locked, else returns FcTrue and leaves the file locked. -FcAtomicNewFile + FcAtomicNewFile Name - FcAtomicNewFile -- return new temporary file name + FcAtomicNewFile -- return new temporary file name Synopsis -#include + #include + FcChar8 * FcAtomicNewFile(FcAtomic *atomic); Description - Returns the filename for writing a new version of the file - referenced by atomic. + Returns the filename for writing a new version of the file referenced by + atomic. -FcAtomicOrigFile + FcAtomicOrigFile Name - FcAtomicOrigFile -- return original file name + FcAtomicOrigFile -- return original file name Synopsis -#include + #include + FcChar8 * FcAtomicOrigFile(FcAtomic *atomic); @@ -4070,50 +4454,52 @@ Description Returns the file referenced by atomic. -FcAtomicReplaceOrig + FcAtomicReplaceOrig Name - FcAtomicReplaceOrig -- replace original with new + FcAtomicReplaceOrig -- replace original with new Synopsis -#include + #include + FcBool FcAtomicReplaceOrig(FcAtomic *atomic); Description - Replaces the original file referenced by atomic with the new - file. Returns FcFalse if the file cannot be replaced due to - permission issues in the filesystem. Otherwise returns FcTrue. + Replaces the original file referenced by atomic with the new file. Returns + FcFalse if the file cannot be replaced due to permission issues in the + filesystem. Otherwise returns FcTrue. -FcAtomicDeleteNew + FcAtomicDeleteNew Name - FcAtomicDeleteNew -- delete new file + FcAtomicDeleteNew -- delete new file Synopsis -#include + #include + void FcAtomicDeleteNew(FcAtomic *atomic); Description - Deletes the new file. Used in error recovery to back out - changes. + Deletes the new file. Used in error recovery to back out changes. -FcAtomicUnlock + FcAtomicUnlock Name - FcAtomicUnlock -- unlock a file + FcAtomicUnlock -- unlock a file Synopsis -#include + #include + void FcAtomicUnlock(FcAtomic *atomic); @@ -4121,345 +4507,368 @@ Description Unlocks the file. -FcAtomicDestroy + FcAtomicDestroy Name - FcAtomicDestroy -- destroy an FcAtomic object + FcAtomicDestroy -- destroy an FcAtomic object Synopsis -#include + #include + void FcAtomicDestroy(FcAtomic *atomic); Description Destroys atomic. - __________________________________________________________ -File and Directory routines + -------------------------------------------------------------------------- + + File and Directory routines Table of Contents - FcFileScan -- scan a font file - FcFileIsDir -- check whether a file is a directory - FcDirScan -- scan a font directory without caching it - FcDirSave -- DEPRECATED: formerly used to save a directory - cache - FcDirCacheUnlink -- Remove all caches related to dir - FcDirCacheValid -- check directory cache - FcDirCacheLoad -- load a directory cache - FcDirCacheRescan -- Re-scan a directory cache - FcDirCacheRead -- read or construct a directory cache - FcDirCacheLoadFile -- load a cache file - FcDirCacheUnload -- unload a cache file + [171]FcFileScan -- scan a font file + + [172]FcFileIsDir -- check whether a file is a directory + + [173]FcDirScan -- scan a font directory without caching it + + [174]FcDirSave -- DEPRECATED: formerly used to save a directory cache + + [175]FcDirCacheUnlink -- Remove all caches related to dir + + [176]FcDirCacheValid -- check directory cache + + [177]FcDirCacheLoad -- load a directory cache + + [178]FcDirCacheRescan -- Re-scan a directory cache - These routines work with font files and directories, including - font directory cache files. + [179]FcDirCacheRead -- read or construct a directory cache -FcFileScan + [180]FcDirCacheLoadFile -- load a cache file + + [181]FcDirCacheUnload -- unload a cache file + + These routines work with font files and directories, including font + directory cache files. + + FcFileScan Name - FcFileScan -- scan a font file + FcFileScan -- scan a font file Synopsis -#include + #include + - FcBool FcFileScan(FcFontSet *set, FcStrSet *dirs, FcFileCache - *cache, FcBlanks *blanks, const FcChar8 *file, FcBool force); + FcBool FcFileScan(FcFontSet *set, FcStrSet *dirs, FcFileCache *cache, + FcBlanks *blanks, const FcChar8 *file, FcBool force); Description - Scans a single file and adds all fonts found to set. If force - is FcTrue, then the file is scanned even if associated - information is found in cache. If file is a directory, it is - added to dirs. Whether fonts are found depends on fontconfig - policy as well as the current configuration. Internally, - fontconfig will ignore BDF and PCF fonts which are not in - Unicode (or the effectively equivalent ISO Latin-1) encoding as - those are not usable by Unicode-based applications. The - configuration can ignore fonts based on filename or contents of - the font file itself. Returns FcFalse if any of the fonts - cannot be added (due to allocation failure). Otherwise returns - FcTrue. + Scans a single file and adds all fonts found to set. If force is FcTrue, + then the file is scanned even if associated information is found in cache. + If file is a directory, it is added to dirs. Whether fonts are found + depends on fontconfig policy as well as the current configuration. + Internally, fontconfig will ignore BDF and PCF fonts which are not in + Unicode (or the effectively equivalent ISO Latin-1) encoding as those are + not usable by Unicode-based applications. The configuration can ignore + fonts based on filename or contents of the font file itself. Returns + FcFalse if any of the fonts cannot be added (due to allocation failure). + Otherwise returns FcTrue. -FcFileIsDir + FcFileIsDir Name - FcFileIsDir -- check whether a file is a directory + FcFileIsDir -- check whether a file is a directory Synopsis -#include + #include + FcBool FcFileIsDir(const FcChar8 *file); Description - Returns FcTrue if file is a directory, otherwise returns - FcFalse. + Returns FcTrue if file is a directory, otherwise returns FcFalse. -FcDirScan + FcDirScan Name - FcDirScan -- scan a font directory without caching it + FcDirScan -- scan a font directory without caching it Synopsis -#include + #include - FcBool FcDirScan(FcFontSet *set, FcStrSet *dirs, FcFileCache - *cache, FcBlanks *blanks, const FcChar8 *dir, FcBool force); + + FcBool FcDirScan(FcFontSet *set, FcStrSet *dirs, FcFileCache *cache, + FcBlanks *blanks, const FcChar8 *dir, FcBool force); Description - If cache is not zero or if force is FcFalse, this function - currently returns FcFalse. Otherwise, it scans an entire - directory and adds all fonts found to set. Any subdirectories - found are added to dirs. Calling this function does not create - any cache files. Use FcDirCacheRead() if caching is desired. + If cache is not zero or if force is FcFalse, this function currently + returns FcFalse. Otherwise, it scans an entire directory and adds all + fonts found to set. Any subdirectories found are added to dirs. Calling + this function does not create any cache files. Use FcDirCacheRead() if + caching is desired. -FcDirSave + FcDirSave Name - FcDirSave -- DEPRECATED: formerly used to save a directory - cache + FcDirSave -- DEPRECATED: formerly used to save a directory cache Synopsis -#include + #include + - FcBool FcDirSave(FcFontSet *set, FcStrSet *dirs, const FcChar8 - *dir); + FcBool FcDirSave(FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir); Description - This function now does nothing aside from returning FcFalse. It - used to creates the per-directory cache file for dir and - populates it with the fonts in set and subdirectories in dirs. - All of this functionality is now automatically managed by - FcDirCacheLoad and FcDirCacheRead. + This function now does nothing aside from returning FcFalse. It used to + creates the per-directory cache file for dir and populates it with the + fonts in set and subdirectories in dirs. All of this functionality is now + automatically managed by FcDirCacheLoad and FcDirCacheRead. -FcDirCacheUnlink + FcDirCacheUnlink Name - FcDirCacheUnlink -- Remove all caches related to dir + FcDirCacheUnlink -- Remove all caches related to dir Synopsis -#include + #include + FcBool FcDirCacheUnlink(const FcChar8 *dir, FcConfig *config); Description - Scans the cache directories in config, removing any instances - of the cache file for dir. Returns FcFalse when some internal - error occurs (out of memory, etc). Errors actually unlinking - any files are ignored. + Scans the cache directories in config, removing any instances of the cache + file for dir. Returns FcFalse when some internal error occurs (out of + memory, etc). Errors actually unlinking any files are ignored. -FcDirCacheValid + FcDirCacheValid Name - FcDirCacheValid -- check directory cache + FcDirCacheValid -- check directory cache Synopsis -#include + #include + FcBool FcDirCacheValid(const FcChar8 *dir); Description - Returns FcTrue if dir has an associated valid cache file, else - returns FcFalse + Returns FcTrue if dir has an associated valid cache file, else returns + FcFalse -FcDirCacheLoad + FcDirCacheLoad Name - FcDirCacheLoad -- load a directory cache + FcDirCacheLoad -- load a directory cache Synopsis -#include + #include - FcCache * FcDirCacheLoad(const FcChar8 *dir, FcConfig *config, - FcChar8 **cache_file); + + FcCache * FcDirCacheLoad(const FcChar8 *dir, FcConfig *config, FcChar8 + **cache_file); Description - Loads the cache related to dir. If no cache file exists, - returns NULL. The name of the cache file is returned in - cache_file, unless that is NULL. See also FcDirCacheRead. + Loads the cache related to dir. If no cache file exists, returns NULL. The + name of the cache file is returned in cache_file, unless that is NULL. See + also FcDirCacheRead. -FcDirCacheRescan + FcDirCacheRescan Name - FcDirCacheRescan -- Re-scan a directory cache + FcDirCacheRescan -- Re-scan a directory cache Synopsis -#include + #include - FcCache * FcDirCacheRescan(const FcChar8 *dir, FcConfig - *config); + + FcCache * FcDirCacheRescan(const FcChar8 *dir, FcConfig *config); Description - Re-scan directories only at dir and update the cache. returns - NULL if failed. + Re-scan directories only at dir and update the cache. returns NULL if + failed. Since version 2.11.1 -FcDirCacheRead + FcDirCacheRead Name - FcDirCacheRead -- read or construct a directory cache + FcDirCacheRead -- read or construct a directory cache Synopsis -#include + #include + - FcCache * FcDirCacheRead(const FcChar8 *dir, FcBool force, - FcConfig *config); + FcCache * FcDirCacheRead(const FcChar8 *dir, FcBool force, FcConfig + *config); Description - This returns a cache for dir. If force is FcFalse, then an - existing, valid cache file will be used. Otherwise, a new cache - will be created by scanning the directory and that returned. + This returns a cache for dir. If force is FcFalse, then an existing, valid + cache file will be used. Otherwise, a new cache will be created by + scanning the directory and that returned. -FcDirCacheLoadFile + FcDirCacheLoadFile Name - FcDirCacheLoadFile -- load a cache file + FcDirCacheLoadFile -- load a cache file Synopsis -#include + #include + - FcCache * FcDirCacheLoadFile(const FcChar8 *cache_file, struct - stat *file_stat); + FcCache * FcDirCacheLoadFile(const FcChar8 *cache_file, struct stat + *file_stat); Description - This function loads a directory cache from cache_file. If - file_stat is non-NULL, it will be filled with the results of - stat(2) on the cache file. + This function loads a directory cache from cache_file. If file_stat is + non-NULL, it will be filled with the results of stat(2) on the cache file. -FcDirCacheUnload + FcDirCacheUnload Name - FcDirCacheUnload -- unload a cache file + FcDirCacheUnload -- unload a cache file Synopsis -#include + #include + void FcDirCacheUnload(FcCache *cache); Description - This function dereferences cache. When no other references to - it remain, all memory associated with the cache will be freed. - __________________________________________________________ + This function dereferences cache. When no other references to it remain, + all memory associated with the cache will be freed. + + -------------------------------------------------------------------------- -FcCache routines + FcCache routines Table of Contents - FcCacheDir -- Return directory of cache - FcCacheCopySet -- Returns a copy of the fontset from cache - FcCacheSubdir -- Return the i'th subdirectory. - FcCacheNumSubdir -- Return the number of subdirectories in - cache. - FcCacheNumFont -- Returns the number of fonts in cache. - FcDirCacheClean -- Clean up a cache directory - FcCacheCreateTagFile -- Create CACHEDIR.TAG at cache directory. - FcDirCacheCreateUUID -- Create .uuid file at a directory + [182]FcCacheDir -- Return directory of cache + + [183]FcCacheCopySet -- Returns a copy of the fontset from cache + + [184]FcCacheSubdir -- Return the i'th subdirectory. + + [185]FcCacheNumSubdir -- Return the number of subdirectories in cache. + + [186]FcCacheNumFont -- Returns the number of fonts in cache. + + [187]FcDirCacheClean -- Clean up a cache directory + + [188]FcCacheCreateTagFile -- Create CACHEDIR.TAG at cache directory. - These routines work with font directory caches, accessing their - contents in limited ways. It is not expected that normal - applications will need to use these functions. + [189]FcDirCacheCreateUUID -- Create .uuid file at a directory -FcCacheDir + [190]FcDirCacheDeleteUUID -- Delete .uuid file + + These routines work with font directory caches, accessing their contents + in limited ways. It is not expected that normal applications will need to + use these functions. + + FcCacheDir Name - FcCacheDir -- Return directory of cache + FcCacheDir -- Return directory of cache Synopsis -#include + #include + const FcChar8 * FcCacheDir(const FcCache *cache); Description - This function returns the directory from which the cache was - constructed. + This function returns the directory from which the cache was constructed. -FcCacheCopySet + FcCacheCopySet Name - FcCacheCopySet -- Returns a copy of the fontset from cache + FcCacheCopySet -- Returns a copy of the fontset from cache Synopsis -#include + #include + FcFontSet * FcCacheCopySet(const FcCache *cache); Description - The returned fontset contains each of the font patterns from - cache. This fontset may be modified, but the patterns from the - cache are read-only. + The returned fontset contains each of the font patterns from cache. This + fontset may be modified, but the patterns from the cache are read-only. -FcCacheSubdir + FcCacheSubdir Name - FcCacheSubdir -- Return the i'th subdirectory. + FcCacheSubdir -- Return the i'th subdirectory. Synopsis -#include + #include + const FcChar8 * FcCacheSubdir(const FcCache *cache, inti); Description - The set of subdirectories stored in a cache file are indexed by - this function, i should range from 0 to n-1, where n is the - return value from FcCacheNumSubdir. + The set of subdirectories stored in a cache file are indexed by this + function, i should range from 0 to n-1, where n is the return value from + FcCacheNumSubdir. -FcCacheNumSubdir + FcCacheNumSubdir Name - FcCacheNumSubdir -- Return the number of subdirectories in - cache. + FcCacheNumSubdir -- Return the number of subdirectories in cache. Synopsis -#include + #include + int FcCacheNumSubdir(const FcCache *cache); @@ -4467,120 +4876,154 @@ Description This returns the total number of subdirectories in the cache. -FcCacheNumFont + FcCacheNumFont Name - FcCacheNumFont -- Returns the number of fonts in cache. + FcCacheNumFont -- Returns the number of fonts in cache. Synopsis -#include + #include + int FcCacheNumFont(const FcCache *cache); Description - This returns the number of fonts which would be included in the - return from FcCacheCopySet. + This returns the number of fonts which would be included in the return + from FcCacheCopySet. -FcDirCacheClean + FcDirCacheClean Name - FcDirCacheClean -- Clean up a cache directory + FcDirCacheClean -- Clean up a cache directory Synopsis -#include + #include + - FcBool FcDirCacheClean(const FcChar8 *cache_dir, - FcBoolverbose); + FcBool FcDirCacheClean(const FcChar8 *cache_dir, FcBoolverbose); Description - This tries to clean up the cache directory of cache_dir. This - returns FcTrue if the operation is successfully complete. - otherwise FcFalse. + This tries to clean up the cache directory of cache_dir. This returns + FcTrue if the operation is successfully complete. otherwise FcFalse. Since version 2.9.91 -FcCacheCreateTagFile + FcCacheCreateTagFile Name - FcCacheCreateTagFile -- Create CACHEDIR.TAG at cache directory. + FcCacheCreateTagFile -- Create CACHEDIR.TAG at cache directory. Synopsis -#include + #include + void FcCacheCreateTagFile(const FcConfig *config); Description - This tries to create CACHEDIR.TAG file at the cache directory - registered to config. + This tries to create CACHEDIR.TAG file at the cache directory registered + to config. Since version 2.9.91 -FcDirCacheCreateUUID + FcDirCacheCreateUUID Name - FcDirCacheCreateUUID -- Create .uuid file at a directory + FcDirCacheCreateUUID -- Create .uuid file at a directory Synopsis -#include + #include + - FcBool FcDirCacheCreateUUID(FcChar8 *dir, FcBoolforce, - FcConfigconfig); + FcBool FcDirCacheCreateUUID(FcChar8 *dir, FcBoolforce, FcConfig *config); Description - This is to create .uuid file containing an UUID at a font - directory of dir. The UUID will be used to identify the font - directory and is used to determine the cache filename if - available. + This is to create .uuid file containing an UUID at a font directory of + dir. The UUID will be used to identify the font directory and is used to + determine the cache filename if available. Since version 2.12.92 - __________________________________________________________ -FcStrSet and FcStrList + FcDirCacheDeleteUUID + +Name + + FcDirCacheDeleteUUID -- Delete .uuid file + +Synopsis + + #include + + + FcBool FcDirCacheDeleteUUID(const FcChar8 *dir, FcConfig *config); + +Description + + This is to delete .uuid file containing an UUID at a font directory of + dir. + +Since + + version 2.13.1 + + -------------------------------------------------------------------------- + + FcStrSet and FcStrList Table of Contents - FcStrSetCreate -- create a string set - FcStrSetMember -- check set for membership - FcStrSetEqual -- check sets for equality - FcStrSetAdd -- add to a string set - FcStrSetAddFilename -- add a filename to a string set - FcStrSetDel -- delete from a string set - FcStrSetDestroy -- destroy a string set - FcStrListCreate -- create a string iterator - FcStrListFirst -- get first string in iteration - FcStrListNext -- get next string in iteration - FcStrListDone -- destroy a string iterator - A data structure for enumerating strings, used to list - directories while scanning the configuration as directories are - added while scanning. + [191]FcStrSetCreate -- create a string set + + [192]FcStrSetMember -- check set for membership + + [193]FcStrSetEqual -- check sets for equality + + [194]FcStrSetAdd -- add to a string set + + [195]FcStrSetAddFilename -- add a filename to a string set + + [196]FcStrSetDel -- delete from a string set + + [197]FcStrSetDestroy -- destroy a string set -FcStrSetCreate + [198]FcStrListCreate -- create a string iterator + + [199]FcStrListFirst -- get first string in iteration + + [200]FcStrListNext -- get next string in iteration + + [201]FcStrListDone -- destroy a string iterator + + A data structure for enumerating strings, used to list directories while + scanning the configuration as directories are added while scanning. + + FcStrSetCreate Name - FcStrSetCreate -- create a string set + FcStrSetCreate -- create a string set Synopsis -#include + #include + FcStrSet * FcStrSetCreate(void); @@ -4588,15 +5031,16 @@ Description Create an empty set. -FcStrSetMember + FcStrSetMember Name - FcStrSetMember -- check set for membership + FcStrSetMember -- check set for membership Synopsis -#include + #include + FcBool FcStrSetMember(FcStrSet *set, const FcChar8 *s); @@ -4604,33 +5048,34 @@ Description Returns whether s is a member of set. -FcStrSetEqual + FcStrSetEqual Name - FcStrSetEqual -- check sets for equality + FcStrSetEqual -- check sets for equality Synopsis -#include + #include + FcBool FcStrSetEqual(FcStrSet *set_a, FcStrSet *set_b); Description - Returns whether set_a contains precisely the same strings as - set_b. Ordering of strings within the two sets is not - considered. + Returns whether set_a contains precisely the same strings as set_b. + Ordering of strings within the two sets is not considered. -FcStrSetAdd + FcStrSetAdd Name - FcStrSetAdd -- add to a string set + FcStrSetAdd -- add to a string set Synopsis -#include + #include + FcBool FcStrSetAdd(FcStrSet *set, const FcChar8 *s); @@ -4638,50 +5083,52 @@ Description Adds a copy of s to set. -FcStrSetAddFilename + FcStrSetAddFilename Name - FcStrSetAddFilename -- add a filename to a string set + FcStrSetAddFilename -- add a filename to a string set Synopsis -#include + #include + FcBool FcStrSetAddFilename(FcStrSet *set, const FcChar8 *s); Description - Adds a copy s to set, The copy is created with - FcStrCopyFilename so that leading '~' values are replaced with - the value of the HOME environment variable. + Adds a copy s to set, The copy is created with FcStrCopyFilename so that + leading '~' values are replaced with the value of the HOME environment + variable. -FcStrSetDel + FcStrSetDel Name - FcStrSetDel -- delete from a string set + FcStrSetDel -- delete from a string set Synopsis -#include + #include + FcBool FcStrSetDel(FcStrSet *set, const FcChar8 *s); Description - Removes s from set, returning FcTrue if s was a member else - FcFalse. + Removes s from set, returning FcTrue if s was a member else FcFalse. -FcStrSetDestroy + FcStrSetDestroy Name - FcStrSetDestroy -- destroy a string set + FcStrSetDestroy -- destroy a string set Synopsis -#include + #include + void FcStrSetDestroy(FcStrSet *set); @@ -4689,15 +5136,16 @@ Description Destroys set. -FcStrListCreate + FcStrListCreate Name - FcStrListCreate -- create a string iterator + FcStrListCreate -- create a string iterator Synopsis -#include + #include + FcStrList * FcStrListCreate(FcStrSet *set); @@ -4705,15 +5153,16 @@ Description Creates an iterator to list the strings in set. -FcStrListFirst + FcStrListFirst Name - FcStrListFirst -- get first string in iteration + FcStrListFirst -- get first string in iteration Synopsis -#include + #include + void FcStrListFirst(FcStrList *list); @@ -4725,15 +5174,16 @@ Since version 2.11.0 -FcStrListNext + FcStrListNext Name - FcStrListNext -- get next string in iteration + FcStrListNext -- get next string in iteration Synopsis -#include + #include + FcChar8 * FcStrListNext(FcStrList *list); @@ -4741,159 +5191,178 @@ Description Returns the next string in list. -FcStrListDone + FcStrListDone Name - FcStrListDone -- destroy a string iterator + FcStrListDone -- destroy a string iterator Synopsis -#include + #include + void FcStrListDone(FcStrList *list); Description Destroys the enumerator list. - __________________________________________________________ -String utilities + -------------------------------------------------------------------------- + + String utilities Table of Contents - FcUtf8ToUcs4 -- convert UTF-8 to UCS4 - FcUcs4ToUtf8 -- convert UCS4 to UTF-8 - FcUtf8Len -- count UTF-8 encoded chars - FcUtf16ToUcs4 -- convert UTF-16 to UCS4 - FcUtf16Len -- count UTF-16 encoded chars - FcIsLower -- check for lower case ASCII character - FcIsUpper -- check for upper case ASCII character - FcToLower -- convert upper case ASCII to lower case - FcStrCopy -- duplicate a string - FcStrDowncase -- create a lower case translation of a string - FcStrCopyFilename -- create a complete path from a filename - FcStrCmp -- compare UTF-8 strings - FcStrCmpIgnoreCase -- compare UTF-8 strings ignoring case - FcStrStr -- locate UTF-8 substring - FcStrStrIgnoreCase -- locate UTF-8 substring ignoring ASCII - case - FcStrPlus -- concatenate two strings - FcStrFree -- free a string - FcStrDirname -- directory part of filename - FcStrBasename -- last component of filename + [202]FcUtf8ToUcs4 -- convert UTF-8 to UCS4 + + [203]FcUcs4ToUtf8 -- convert UCS4 to UTF-8 + + [204]FcUtf8Len -- count UTF-8 encoded chars + + [205]FcUtf16ToUcs4 -- convert UTF-16 to UCS4 + + [206]FcUtf16Len -- count UTF-16 encoded chars + + [207]FcIsLower -- check for lower case ASCII character + + [208]FcIsUpper -- check for upper case ASCII character + + [209]FcToLower -- convert upper case ASCII to lower case - Fontconfig manipulates many UTF-8 strings represented with the - FcChar8 type. These functions are exposed to help applications - deal with these UTF-8 strings in a locale-insensitive manner. + [210]FcStrCopy -- duplicate a string -FcUtf8ToUcs4 + [211]FcStrDowncase -- create a lower case translation of a string + + [212]FcStrCopyFilename -- create a complete path from a filename + + [213]FcStrCmp -- compare UTF-8 strings + + [214]FcStrCmpIgnoreCase -- compare UTF-8 strings ignoring case + + [215]FcStrStr -- locate UTF-8 substring + + [216]FcStrStrIgnoreCase -- locate UTF-8 substring ignoring ASCII case + + [217]FcStrPlus -- concatenate two strings + + [218]FcStrFree -- free a string + + [219]FcStrDirname -- directory part of filename + + [220]FcStrBasename -- last component of filename + + Fontconfig manipulates many UTF-8 strings represented with the FcChar8 + type. These functions are exposed to help applications deal with these + UTF-8 strings in a locale-insensitive manner. + + FcUtf8ToUcs4 Name - FcUtf8ToUcs4 -- convert UTF-8 to UCS4 + FcUtf8ToUcs4 -- convert UTF-8 to UCS4 Synopsis -#include + #include + int FcUtf8ToUcs4(FcChar8 *src, FcChar32 *dst, int len); Description - Converts the next Unicode char from src into dst and returns - the number of bytes containing the char. src must be at least - len bytes long. + Converts the next Unicode char from src into dst and returns the number of + bytes containing the char. src must be at least len bytes long. -FcUcs4ToUtf8 + FcUcs4ToUtf8 Name - FcUcs4ToUtf8 -- convert UCS4 to UTF-8 + FcUcs4ToUtf8 -- convert UCS4 to UTF-8 Synopsis -#include + #include + int FcUcs4ToUtf8(FcChar32 src, FcChar8 dst[FC_UTF8_MAX_LEN]); Description - Converts the Unicode char from src into dst and returns the - number of bytes needed to encode the char. + Converts the Unicode char from src into dst and returns the number of + bytes needed to encode the char. -FcUtf8Len + FcUtf8Len Name - FcUtf8Len -- count UTF-8 encoded chars + FcUtf8Len -- count UTF-8 encoded chars Synopsis -#include + #include - FcBool FcUtf8Len(FcChar8 *src, int len, int *nchar, int - *wchar); + + FcBool FcUtf8Len(FcChar8 *src, int len, int *nchar, int *wchar); Description - Counts the number of Unicode chars in len bytes of src. Places - that count in nchar. wchar contains 1, 2 or 4 depending on the - number of bytes needed to hold the largest Unicode char - counted. The return value indicates whether src is a - well-formed UTF8 string. + Counts the number of Unicode chars in len bytes of src. Places that count + in nchar. wchar contains 1, 2 or 4 depending on the number of bytes needed + to hold the largest Unicode char counted. The return value indicates + whether src is a well-formed UTF8 string. -FcUtf16ToUcs4 + FcUtf16ToUcs4 Name - FcUtf16ToUcs4 -- convert UTF-16 to UCS4 + FcUtf16ToUcs4 -- convert UTF-16 to UCS4 Synopsis -#include + #include + - int FcUtf16ToUcs4(FcChar8 *src, FcEndian endian, FcChar32 *dst, - int len); + int FcUtf16ToUcs4(FcChar8 *src, FcEndian endian, FcChar32 *dst, int len); Description - Converts the next Unicode char from src into dst and returns - the number of bytes containing the char. src must be at least - len bytes long. Bytes of src are combined into 16-bit units - according to endian. + Converts the next Unicode char from src into dst and returns the number of + bytes containing the char. src must be at least len bytes long. Bytes of + src are combined into 16-bit units according to endian. -FcUtf16Len + FcUtf16Len Name - FcUtf16Len -- count UTF-16 encoded chars + FcUtf16Len -- count UTF-16 encoded chars Synopsis -#include + #include - FcBool FcUtf16Len(FcChar8 *src, FcEndian endian, int len, int - *nchar, int *wchar); + + FcBool FcUtf16Len(FcChar8 *src, FcEndian endian, int len, int *nchar, int + *wchar); Description - Counts the number of Unicode chars in len bytes of src. Bytes - of src are combined into 16-bit units according to endian. - Places that count in nchar. wchar contains 1, 2 or 4 depending - on the number of bytes needed to hold the largest Unicode char - counted. The return value indicates whether string is a - well-formed UTF16 string. + Counts the number of Unicode chars in len bytes of src. Bytes of src are + combined into 16-bit units according to endian. Places that count in + nchar. wchar contains 1, 2 or 4 depending on the number of bytes needed to + hold the largest Unicode char counted. The return value indicates whether + string is a well-formed UTF16 string. -FcIsLower + FcIsLower Name - FcIsLower -- check for lower case ASCII character + FcIsLower -- check for lower case ASCII character Synopsis -#include + #include + FcBool FcIsLower(FcChar8c); @@ -4901,15 +5370,16 @@ Description This macro checks whether c is an lower case ASCII letter. -FcIsUpper + FcIsUpper Name - FcIsUpper -- check for upper case ASCII character + FcIsUpper -- check for upper case ASCII character Synopsis -#include + #include + FcBool FcIsUpper(FcChar8c); @@ -4917,91 +5387,93 @@ Description This macro checks whether c is a upper case ASCII letter. -FcToLower + FcToLower Name - FcToLower -- convert upper case ASCII to lower case + FcToLower -- convert upper case ASCII to lower case Synopsis -#include + #include + FcChar8 FcToLower(FcChar8c); Description - This macro converts upper case ASCII c to the equivalent lower - case letter. + This macro converts upper case ASCII c to the equivalent lower case + letter. -FcStrCopy + FcStrCopy Name - FcStrCopy -- duplicate a string + FcStrCopy -- duplicate a string Synopsis -#include + #include + FcChar8 * FcStrCopy(const FcChar8 *s); Description - Allocates memory, copies s and returns the resulting buffer. - Yes, this is strdup, but that function isn't available on every - platform. + Allocates memory, copies s and returns the resulting buffer. Yes, this is + strdup, but that function isn't available on every platform. -FcStrDowncase + FcStrDowncase Name - FcStrDowncase -- create a lower case translation of a string + FcStrDowncase -- create a lower case translation of a string Synopsis -#include + #include + FcChar8 * FcStrDowncase(const FcChar8 *s); Description - Allocates memory, copies s, converting upper case letters to - lower case and returns the allocated buffer. + Allocates memory, copies s, converting upper case letters to lower case + and returns the allocated buffer. -FcStrCopyFilename + FcStrCopyFilename Name - FcStrCopyFilename -- create a complete path from a filename + FcStrCopyFilename -- create a complete path from a filename Synopsis -#include + #include + FcChar8 * FcStrCopyFilename(const FcChar8 *s); Description - FcStrCopyFilename constructs an absolute pathname from s. It - converts any leading '~' characters in to the value of the HOME - environment variable, and any relative paths are converted to - absolute paths using the current working directory. Sequences - of '/' characters are converted to a single '/', and names - containing the current directory '.' or parent directory '..' - are correctly reconstructed. Returns NULL if '~' is the leading - character and HOME is unset or disabled (see - FcConfigEnableHome). + FcStrCopyFilename constructs an absolute pathname from s. It converts any + leading '~' characters in to the value of the HOME environment variable, + and any relative paths are converted to absolute paths using the current + working directory. Sequences of '/' characters are converted to a single + '/', and names containing the current directory '.' or parent directory + '..' are correctly reconstructed. Returns NULL if '~' is the leading + character and HOME is unset or disabled (see FcConfigEnableHome). -FcStrCmp + FcStrCmp Name - FcStrCmp -- compare UTF-8 strings + FcStrCmp -- compare UTF-8 strings Synopsis -#include + #include + int FcStrCmp(const FcChar8 *s1, const FcChar8 *s2); @@ -5009,127 +5481,354 @@ Description Returns the usual <0, 0, >0 result of comparing s1 and s2. -FcStrCmpIgnoreCase + FcStrCmpIgnoreCase Name - FcStrCmpIgnoreCase -- compare UTF-8 strings ignoring case + FcStrCmpIgnoreCase -- compare UTF-8 strings ignoring case Synopsis -#include + #include + int FcStrCmpIgnoreCase(const FcChar8 *s1, const FcChar8 *s2); Description - Returns the usual <0, 0, >0 result of comparing s1 and s2. This - test is case-insensitive for all proper UTF-8 encoded strings. + Returns the usual <0, 0, >0 result of comparing s1 and s2. This test is + case-insensitive for all proper UTF-8 encoded strings. -FcStrStr + FcStrStr Name - FcStrStr -- locate UTF-8 substring + FcStrStr -- locate UTF-8 substring Synopsis -#include + #include + FcChar8 * FcStrStr(const FcChar8 *s1, const FcChar8 *s2); Description - Returns the location of s2 in s1. Returns NULL if s2 is not - present in s1. This test will operate properly with UTF8 - encoded strings. + Returns the location of s2 in s1. Returns NULL if s2 is not present in s1. + This test will operate properly with UTF8 encoded strings. -FcStrStrIgnoreCase + FcStrStrIgnoreCase Name - FcStrStrIgnoreCase -- locate UTF-8 substring ignoring ASCII - case + FcStrStrIgnoreCase -- locate UTF-8 substring ignoring ASCII case Synopsis -#include + #include + - FcChar8 * FcStrStrIgnoreCase(const FcChar8 *s1, const FcChar8 - *s2); + FcChar8 * FcStrStrIgnoreCase(const FcChar8 *s1, const FcChar8 *s2); Description - Returns the location of s2 in s1, ignoring case. Returns NULL - if s2 is not present in s1. This test is case-insensitive for - all proper UTF-8 encoded strings. + Returns the location of s2 in s1, ignoring case. Returns NULL if s2 is not + present in s1. This test is case-insensitive for all proper UTF-8 encoded + strings. -FcStrPlus + FcStrPlus Name - FcStrPlus -- concatenate two strings + FcStrPlus -- concatenate two strings Synopsis -#include + #include + FcChar8 * FcStrPlus(const FcChar8 *s1, const FcChar8 *s2); Description - This function allocates new storage and places the - concatenation of s1 and s2 there, returning the new string. + This function allocates new storage and places the concatenation of s1 and + s2 there, returning the new string. -FcStrFree + FcStrFree Name - FcStrFree -- free a string + FcStrFree -- free a string Synopsis -#include + #include + void FcStrFree(FcChar8 *s); Description - This is just a wrapper around free(3) which helps track memory - usage of strings within the fontconfig library. + This is just a wrapper around free(3) which helps track memory usage of + strings within the fontconfig library. -FcStrDirname + FcStrDirname Name - FcStrDirname -- directory part of filename + FcStrDirname -- directory part of filename Synopsis -#include + #include + FcChar8 * FcStrDirname(const FcChar8 *file); Description - Returns the directory containing file. This is returned in - newly allocated storage which should be freed when no longer - needed. + Returns the directory containing file. This is returned in newly allocated + storage which should be freed when no longer needed. -FcStrBasename + FcStrBasename Name - FcStrBasename -- last component of filename + FcStrBasename -- last component of filename Synopsis -#include + #include + FcChar8 * FcStrBasename(const FcChar8 *file); Description - Returns the filename of file stripped of any leading directory - names. This is returned in newly allocated storage which should - be freed when no longer needed. + Returns the filename of file stripped of any leading directory names. This + is returned in newly allocated storage which should be freed when no + longer needed. + +References + + Visible links + 1. file:///tmp/html-am902r#AEN16 + 2. file:///tmp/html-am902r#AEN19 + 3. file:///tmp/html-am902r#AEN31 + 4. file:///tmp/html-am902r#AEN103 + 5. file:///tmp/html-am902r#FCINITLOADCONFIG + 6. file:///tmp/html-am902r#FCINITLOADCONFIGANDFONTS + 7. file:///tmp/html-am902r#FCINIT + 8. file:///tmp/html-am902r#FCFINI + 9. file:///tmp/html-am902r#FCGETVERSION + 10. file:///tmp/html-am902r#FCINITREINITIALIZE + 11. file:///tmp/html-am902r#FCINITBRINGUPTODATE + 12. file:///tmp/html-am902r#FCPATTERNCREATE + 13. file:///tmp/html-am902r#FCPATTERNDUPLICATE + 14. file:///tmp/html-am902r#FCPATTERNREFERENCE + 15. file:///tmp/html-am902r#FCPATTERNDESTROY + 16. file:///tmp/html-am902r#FCPATTERNOBJECTCOUNT + 17. file:///tmp/html-am902r#FCPATTERNEQUAL + 18. file:///tmp/html-am902r#FCPATTERNEQUALSUBSET + 19. file:///tmp/html-am902r#FCPATTERNFILTER + 20. file:///tmp/html-am902r#FCPATTERNHASH + 21. file:///tmp/html-am902r#FCPATTERNADD + 22. file:///tmp/html-am902r#FCPATTERNADDWEAK + 23. file:///tmp/html-am902r#FCPATTERNADD-TYPE + 24. file:///tmp/html-am902r#FCPATTERNGETWITHBINDING + 25. file:///tmp/html-am902r#FCPATTERNGET + 26. file:///tmp/html-am902r#FCPATTERNGET-TYPE + 27. file:///tmp/html-am902r#FCPATTERNBUILD + 28. file:///tmp/html-am902r#FCPATTERNDEL + 29. file:///tmp/html-am902r#FCPATTERNREMOVE + 30. file:///tmp/html-am902r#FCPATTERNITERSTART + 31. file:///tmp/html-am902r#FCPATTERNITERNEXT + 32. file:///tmp/html-am902r#FCPATTERNITEREQUAL + 33. file:///tmp/html-am902r#FCPATTERNFINDITER + 34. file:///tmp/html-am902r#FCPATTERNITERISVALID + 35. file:///tmp/html-am902r#FCPATTERNITERGETOBJECT + 36. file:///tmp/html-am902r#FCPATTERNITERVALUECOUNT + 37. file:///tmp/html-am902r#FCPATTERNITERGETVALUE + 38. file:///tmp/html-am902r#FCPATTERNPRINT + 39. file:///tmp/html-am902r#FCDEFAULTSUBSTITUTE + 40. file:///tmp/html-am902r#FCNAMEPARSE + 41. file:///tmp/html-am902r#FCNAMEUNPARSE + 42. file:///tmp/html-am902r#FCPATTERNFORMAT + 43. file:///tmp/html-am902r#FCFONTSETCREATE + 44. file:///tmp/html-am902r#FCFONTSETDESTROY + 45. file:///tmp/html-am902r#FCFONTSETADD + 46. file:///tmp/html-am902r#FCFONTSETLIST + 47. file:///tmp/html-am902r#FCFONTSETMATCH + 48. file:///tmp/html-am902r#FCFONTSETPRINT + 49. file:///tmp/html-am902r#FCFONTSETSORT + 50. file:///tmp/html-am902r#FCFONTSETSORTDESTROY + 51. file:///tmp/html-am902r#FCOBJECTSETCREATE + 52. file:///tmp/html-am902r#FCOBJECTSETADD + 53. file:///tmp/html-am902r#FCOBJECTSETDESTROY + 54. file:///tmp/html-am902r#FCOBJECTSETBUILD + 55. file:///tmp/html-am902r#FCFREETYPECHARINDEX + 56. file:///tmp/html-am902r#FCFREETYPECHARSET + 57. file:///tmp/html-am902r#FCFREETYPECHARSETANDSPACING + 58. file:///tmp/html-am902r#FCFREETYPEQUERY + 59. file:///tmp/html-am902r#FCFREETYPEQUERYALL + 60. file:///tmp/html-am902r#FCFREETYPEQUERYFACE + 61. file:///tmp/html-am902r#FCVALUEDESTROY + 62. file:///tmp/html-am902r#FCVALUESAVE + 63. file:///tmp/html-am902r#FCVALUEPRINT + 64. file:///tmp/html-am902r#FCVALUEEQUAL + 65. file:///tmp/html-am902r#FCCHARSETCREATE + 66. file:///tmp/html-am902r#FCCHARSETDESTROY + 67. file:///tmp/html-am902r#FCCHARSETADDCHAR + 68. file:///tmp/html-am902r#FCCHARSETDELCHAR + 69. file:///tmp/html-am902r#FCCHARSETCOPY + 70. file:///tmp/html-am902r#FCCHARSETEQUAL + 71. file:///tmp/html-am902r#FCCHARSETINTERSECT + 72. file:///tmp/html-am902r#FCCHARSETUNION + 73. file:///tmp/html-am902r#FCCHARSETSUBTRACT + 74. file:///tmp/html-am902r#FCCHARSETMERGE + 75. file:///tmp/html-am902r#FCCHARSETHASCHAR + 76. file:///tmp/html-am902r#FCCHARSETCOUNT + 77. file:///tmp/html-am902r#FCCHARSETINTERSECTCOUNT + 78. file:///tmp/html-am902r#FCCHARSETSUBTRACTCOUNT + 79. file:///tmp/html-am902r#FCCHARSETISSUBSET + 80. file:///tmp/html-am902r#FCCHARSETFIRSTPAGE + 81. file:///tmp/html-am902r#FCCHARSETNEXTPAGE + 82. file:///tmp/html-am902r#FCCHARSETCOVERAGE + 83. file:///tmp/html-am902r#FCCHARSETNEW + 84. file:///tmp/html-am902r#FCLANGSETCREATE + 85. file:///tmp/html-am902r#FCLANGSETDESTROY + 86. file:///tmp/html-am902r#FCLANGSETCOPY + 87. file:///tmp/html-am902r#FCLANGSETADD + 88. file:///tmp/html-am902r#FCLANGSETDEL + 89. file:///tmp/html-am902r#FCLANGSETUNION + 90. file:///tmp/html-am902r#FCLANGSETSUBTRACT + 91. file:///tmp/html-am902r#FCLANGSETCOMPARE + 92. file:///tmp/html-am902r#FCLANGSETCONTAINS + 93. file:///tmp/html-am902r#FCLANGSETEQUAL + 94. file:///tmp/html-am902r#FCLANGSETHASH + 95. file:///tmp/html-am902r#FCLANGSETHASLANG + 96. file:///tmp/html-am902r#FCGETDEFAULTLANGS + 97. file:///tmp/html-am902r#FCLANGSETGETLANGS + 98. file:///tmp/html-am902r#FCGETLANGS + 99. file:///tmp/html-am902r#FCLANGNORMALIZE + 100. file:///tmp/html-am902r#FCLANGGETCHARSET + 101. file:///tmp/html-am902r#FCMATRIXINIT + 102. file:///tmp/html-am902r#FCMATRIXCOPY + 103. file:///tmp/html-am902r#FCMATRIXEQUAL + 104. file:///tmp/html-am902r#FCMATRIXMULTIPLY + 105. file:///tmp/html-am902r#FCMATRIXROTATE + 106. file:///tmp/html-am902r#FCMATRIXSCALE + 107. file:///tmp/html-am902r#FCMATRIXSHEAR + 108. file:///tmp/html-am902r#FCRANGECOPY + 109. file:///tmp/html-am902r#FCRANGECREATEDOUBLE + 110. file:///tmp/html-am902r#FCRANGECREATEINTEGER + 111. file:///tmp/html-am902r#FCRANGEDESTROY + 112. file:///tmp/html-am902r#FCRANGEGETDOUBLE + 113. file:///tmp/html-am902r#FCCONFIGCREATE + 114. file:///tmp/html-am902r#FCCONFIGREFERENCE + 115. file:///tmp/html-am902r#FCCONFIGDESTROY + 116. file:///tmp/html-am902r#FCCONFIGSETCURRENT + 117. file:///tmp/html-am902r#FCCONFIGGETCURRENT + 118. file:///tmp/html-am902r#FCCONFIGUPTODATE + 119. file:///tmp/html-am902r#FCCONFIGHOME + 120. file:///tmp/html-am902r#FCCONFIGENABLEHOME + 121. file:///tmp/html-am902r#FCCONFIGBUILDFONTS + 122. file:///tmp/html-am902r#FCCONFIGGETCONFIGDIRS + 123. file:///tmp/html-am902r#FCCONFIGGETFONTDIRS + 124. file:///tmp/html-am902r#FCCONFIGGETCONFIGFILES + 125. file:///tmp/html-am902r#FCCONFIGGETCACHE + 126. file:///tmp/html-am902r#FCCONFIGGETCACHEDIRS + 127. file:///tmp/html-am902r#FCCONFIGGETFONTS + 128. file:///tmp/html-am902r#FCCONFIGGETBLANKS + 129. file:///tmp/html-am902r#FCCONFIGGETRESCANINTERVAL + 130. file:///tmp/html-am902r#FCCONFIGSETRESCANINTERVAL + 131. file:///tmp/html-am902r#FCCONFIGAPPFONTADDFILE + 132. file:///tmp/html-am902r#FCCONFIGAPPFONTADDDIR + 133. file:///tmp/html-am902r#FCCONFIGAPPFONTCLEAR + 134. file:///tmp/html-am902r#FCCONFIGSUBSTITUTEWITHPAT + 135. file:///tmp/html-am902r#FCCONFIGSUBSTITUTE + 136. file:///tmp/html-am902r#FCFONTMATCH + 137. file:///tmp/html-am902r#FCFONTSORT + 138. file:///tmp/html-am902r#FCFONTRENDERPREPARE + 139. file:///tmp/html-am902r#FCFONTLIST + 140. file:///tmp/html-am902r#FCCONFIGFILENAME + 141. file:///tmp/html-am902r#FCCONFIGPARSEANDLOAD + 142. file:///tmp/html-am902r#FCCONFIGPARSEANDLOADFROMMEMORY + 143. file:///tmp/html-am902r#FCCONFIGGETSYSROOT + 144. file:///tmp/html-am902r#FCCONFIGSETSYSROOT + 145. file:///tmp/html-am902r#FCCONFIGFILEINFOITERINIT + 146. file:///tmp/html-am902r#FCCONFIGFILEINFOITERNEXT + 147. file:///tmp/html-am902r#FCCONFIGFILEINFOITERGET + 148. file:///tmp/html-am902r#FCNAMEREGISTEROBJECTTYPES + 149. file:///tmp/html-am902r#FCNAMEUNREGISTEROBJECTTYPES + 150. file:///tmp/html-am902r#FCNAMEGETOBJECTTYPE + 151. file:///tmp/html-am902r#FCNAMEREGISTERCONSTANTS + 152. file:///tmp/html-am902r#FCNAMEUNREGISTERCONSTANTS + 153. file:///tmp/html-am902r#FCNAMEGETCONSTANT + 154. file:///tmp/html-am902r#FCNAMECONSTANT + 155. file:///tmp/html-am902r#FCWEIGHTFROMOPENTYPEDOUBLE + 156. file:///tmp/html-am902r#FCWEIGHTTOOPENTYPEDOUBLE + 157. file:///tmp/html-am902r#FCWEIGHTFROMOPENTYPE + 158. file:///tmp/html-am902r#FCWEIGHTTOOPENTYPE + 159. file:///tmp/html-am902r#FCBLANKSCREATE + 160. file:///tmp/html-am902r#FCBLANKSDESTROY + 161. file:///tmp/html-am902r#FCBLANKSADD + 162. file:///tmp/html-am902r#FCBLANKSISMEMBER + 163. file:///tmp/html-am902r#FCATOMICCREATE + 164. file:///tmp/html-am902r#FCATOMICLOCK + 165. file:///tmp/html-am902r#FCATOMICNEWFILE + 166. file:///tmp/html-am902r#FCATOMICORIGFILE + 167. file:///tmp/html-am902r#FCATOMICREPLACEORIG + 168. file:///tmp/html-am902r#FCATOMICDELETENEW + 169. file:///tmp/html-am902r#FCATOMICUNLOCK + 170. file:///tmp/html-am902r#FCATOMICDESTROY + 171. file:///tmp/html-am902r#FCFILESCAN + 172. file:///tmp/html-am902r#FCFILEISDIR + 173. file:///tmp/html-am902r#FCDIRSCAN + 174. file:///tmp/html-am902r#FCDIRSAVE + 175. file:///tmp/html-am902r#FCDIRCACHEUNLINK + 176. file:///tmp/html-am902r#FCDIRCACHEVALID + 177. file:///tmp/html-am902r#FCDIRCACHELOAD + 178. file:///tmp/html-am902r#FCDIRCACHERESCAN + 179. file:///tmp/html-am902r#FCDIRCACHEREAD + 180. file:///tmp/html-am902r#FCDIRCACHELOADFILE + 181. file:///tmp/html-am902r#FCDIRCACHEUNLOAD + 182. file:///tmp/html-am902r#FCCACHEDIR + 183. file:///tmp/html-am902r#FCCACHECOPYSET + 184. file:///tmp/html-am902r#FCCACHESUBDIR + 185. file:///tmp/html-am902r#FCCACHENUMSUBDIR + 186. file:///tmp/html-am902r#FCCACHENUMFONT + 187. file:///tmp/html-am902r#FCDIRCACHECLEAN + 188. file:///tmp/html-am902r#FCCACHECREATETAGFILE + 189. file:///tmp/html-am902r#FCDIRCACHECREATEUUID + 190. file:///tmp/html-am902r#FCDIRCACHEDELETEUUID + 191. file:///tmp/html-am902r#FCSTRSETCREATE + 192. file:///tmp/html-am902r#FCSTRSETMEMBER + 193. file:///tmp/html-am902r#FCSTRSETEQUAL + 194. file:///tmp/html-am902r#FCSTRSETADD + 195. file:///tmp/html-am902r#FCSTRSETADDFILENAME + 196. file:///tmp/html-am902r#FCSTRSETDEL + 197. file:///tmp/html-am902r#FCSTRSETDESTROY + 198. file:///tmp/html-am902r#FCSTRLISTCREATE + 199. file:///tmp/html-am902r#FCSTRLISTFIRST + 200. file:///tmp/html-am902r#FCSTRLISTNEXT + 201. file:///tmp/html-am902r#FCSTRLISTDONE + 202. file:///tmp/html-am902r#FCUTF8TOUCS4 + 203. file:///tmp/html-am902r#FCUCS4TOUTF8 + 204. file:///tmp/html-am902r#FCUTF8LEN + 205. file:///tmp/html-am902r#FCUTF16TOUCS4 + 206. file:///tmp/html-am902r#FCUTF16LEN + 207. file:///tmp/html-am902r#FCISLOWER + 208. file:///tmp/html-am902r#FCISUPPER + 209. file:///tmp/html-am902r#FCTOLOWER + 210. file:///tmp/html-am902r#FCSTRCOPY + 211. file:///tmp/html-am902r#FCSTRDOWNCASE + 212. file:///tmp/html-am902r#FCSTRCOPYFILENAME + 213. file:///tmp/html-am902r#FCSTRCMP + 214. file:///tmp/html-am902r#FCSTRCMPIGNORECASE + 215. file:///tmp/html-am902r#FCSTRSTR + 216. file:///tmp/html-am902r#FCSTRSTRIGNORECASE + 217. file:///tmp/html-am902r#FCSTRPLUS + 218. file:///tmp/html-am902r#FCSTRFREE + 219. file:///tmp/html-am902r#FCSTRDIRNAME + 220. file:///tmp/html-am902r#FCSTRBASENAME diff --git a/doc/fontconfig-devel/fcatomiccreate.html b/doc/fontconfig-devel/fcatomiccreate.html index e62a080..cadefcd 100644 --- a/doc/fontconfig-devel/fcatomiccreate.html +++ b/doc/fontconfig-devel/fcatomiccreate.html @@ -10,7 +10,7 @@ REL="HOME" HREF="t1.html">

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Name

Synopsis

Description

Since

Up Next >>>

Name

Synopsis

force, FcConfig, FcConfig *config

Description

Since

 Next >>>
 FcDirCacheDeleteUUID
Up
+FcDirCacheDeleteUUID

FcDirCacheDeleteUUID

Name

FcDirCacheDeleteUUID -- Delete .uuid file

Synopsis

#include <fontconfig/fontconfig.h>
+	

FcBool FcDirCacheDeleteUUID(const FcChar8 *dir, FcConfig *config);

Description

This is to delete .uuid file containing an UUID at a font directory of +dir. +

Since

version 2.13.1


<<< PreviousHome 
FcDirCacheCreateUUIDUp 
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcdircacheload.html b/doc/fontconfig-devel/fcdircacheload.html index 9af0d0e..dae74d7 100644 --- a/doc/fontconfig-devel/fcdircacheload.html +++ b/doc/fontconfig-devel/fcdircacheload.html @@ -10,7 +10,7 @@ REL="HOME" HREF="t1.html">

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Name

Synopsis

Description

Name

Synopsis

Description

Name

Synopsis

Description

Name

Synopsis

Description

Next >>>Next >>>FcPatternEqualFcPatternObjectCount
<<< Previous

Name

Synopsis

Description

<<< PreviousFcPatternDestroyFcPatternObjectCount

Name

Synopsis

Name

Synopsis

Description

Name

Synopsis

Description

+FcPatternFindIter
<<< PreviousNext >>>

FcPatternFindIter

Name

FcPatternFindIter -- Set the iterator to point to the object in the pattern

Synopsis

#include <fontconfig/fontconfig.h>
+	

FcBool FcPatternFindIter(const FcPattern *p, FcPatternIter *iter, const char *object);

Description

Set iter to point to object in +p if any and returns FcTrue. returns FcFalse otherwise. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternIterEqualUpFcPatternIterIsValid
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatternformat.html b/doc/fontconfig-devel/fcpatternformat.html index 2632be5..4e397a1 100644 --- a/doc/fontconfig-devel/fcpatternformat.html +++ b/doc/fontconfig-devel/fcpatternformat.html @@ -68,7 +68,7 @@ NAME="FCPATTERNFORMAT" >

Name

Synopsis

Description

Since

Name

Synopsis

Description

Name

Synopsis

Description

Name

Synopsis

Description

Since

Name

Synopsis

Description

+FcPatternIterEqual
<<< PreviousNext >>>

FcPatternIterEqual

Name

FcPatternIterEqual -- Compare iterators

Synopsis

#include <fontconfig/fontconfig.h>
+	

FcBool FcPatternIterEqual(const FcPattern *p1, FcPatternIter *i1, const FcPattern *p2, FcPatternIter *i2);

Description

Return FcTrue if both i1 and i2 +point to same object and contains same values. return FcFalse otherwise. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternIterNextUpFcPatternFindIter
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatternitergetobject.html b/doc/fontconfig-devel/fcpatternitergetobject.html new file mode 100644 index 0000000..3835083 --- /dev/null +++ b/doc/fontconfig-devel/fcpatternitergetobject.html @@ -0,0 +1,236 @@ + +FcPatternIterGetObject

FcPatternIterGetObject

Name

FcPatternIterGetObject -- Returns an object name which the iterator point to

Synopsis

#include <fontconfig/fontconfig.h>
+	

const char * FcPatternIterGetObject(const FcPattern *p, FcPatternIter *iter);

Description

Returns an object name in p which +iter point to. returns NULL if +iter isn't valid. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternIterIsValidUpFcPatternIterValueCount
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatternitergetvalue.html b/doc/fontconfig-devel/fcpatternitergetvalue.html new file mode 100644 index 0000000..03a85ad --- /dev/null +++ b/doc/fontconfig-devel/fcpatternitergetvalue.html @@ -0,0 +1,258 @@ + +FcPatternIterGetValue

FcPatternIterGetValue

Name

FcPatternIterGetValue -- Returns a value which the iterator point to

Synopsis

#include <fontconfig/fontconfig.h>
+	

FcResult FcPatternIterGetValue(const FcPattern *p, FcPatternIter *iter, intid, FcValue *v, FcValueBinding *b);

Description

Returns in v the id'th value +which iter point to. also binding to b +if given. +The value returned is not a copy, but rather refers to the data stored +within the pattern directly. Applications must not free this value. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternIterValueCountUpFcPatternPrint
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatterniterisvalid.html b/doc/fontconfig-devel/fcpatterniterisvalid.html new file mode 100644 index 0000000..c2d0b6c --- /dev/null +++ b/doc/fontconfig-devel/fcpatterniterisvalid.html @@ -0,0 +1,230 @@ + +FcPatternIterIsValid

FcPatternIterIsValid

Name

FcPatternIterIsValid -- Check whether the iterator is valid or not

Synopsis

#include <fontconfig/fontconfig.h>
+	

FcBool FcPatternIterIsValid(const FcPattern *p, FcPatternIter :iter);

Description

Returns FcTrue if iter point to the valid entry +in p. returns FcFalse otherwise. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternFindIterUpFcPatternIterGetObject
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatterniternext.html b/doc/fontconfig-devel/fcpatterniternext.html new file mode 100644 index 0000000..0a73e77 --- /dev/null +++ b/doc/fontconfig-devel/fcpatterniternext.html @@ -0,0 +1,236 @@ + +FcPatternIterNext

FcPatternIterNext

Name

FcPatternIterNext -- 

Synopsis

#include <fontconfig/fontconfig.h>
+	

FcBool FcPatternIterNext(const FcPattern *p, FcPatternIter *iter);

Description

Set iter to point to the next object in p +and returns FcTrue if iter has been changed to the next object. +returns FcFalse otherwise. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternIterStartUpFcPatternIterEqual
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatterniterstart.html b/doc/fontconfig-devel/fcpatterniterstart.html new file mode 100644 index 0000000..22df744 --- /dev/null +++ b/doc/fontconfig-devel/fcpatterniterstart.html @@ -0,0 +1,241 @@ + +FcPatternIterStart

FcPatternIterStart

Name

FcPatternIterStart -- Initialize the iterator with the first iterator in the pattern

Synopsis

#include <fontconfig/fontconfig.h>
+	

void FcPatternIterStart(const FcPattern *p, FcPatternIter *iter);

Description

Initialize iter with the first iterator in p. +If there are no objects in p, iter +will not have any valid data. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternRemoveUpFcPatternIterNext
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatternitervaluecount.html b/doc/fontconfig-devel/fcpatternitervaluecount.html new file mode 100644 index 0000000..cb9db56 --- /dev/null +++ b/doc/fontconfig-devel/fcpatternitervaluecount.html @@ -0,0 +1,230 @@ + +FcPatternIterValueCount

FcPatternIterValueCount

Name

FcPatternIterValueCount -- Returns the number of the values which the iterator point to

Synopsis

#include <fontconfig/fontconfig.h>
+	

int FcPatternIterValueCount(const FcPattern *p, FcPatternIter *iter);

Description

Returns the number of the values in the object which iter +point to. if iter isn't valid, returns 0. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternIterGetObjectUpFcPatternIterGetValue
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatternobjectcount.html b/doc/fontconfig-devel/fcpatternobjectcount.html new file mode 100644 index 0000000..d8d9fbf --- /dev/null +++ b/doc/fontconfig-devel/fcpatternobjectcount.html @@ -0,0 +1,219 @@ + +FcPatternObjectCount

FcPatternObjectCount

Name

FcPatternObjectCount -- Returns the number of the object

Synopsis

#include <fontconfig/fontconfig.h>
+	

int FcPatternObjectCount(const FcPattern *p);

Description

Returns the number of the object p has. +

Since

version 2.13.1


<<< PreviousHomeNext >>>
FcPatternDestroyUpFcPatternEqual
\ No newline at end of file diff --git a/doc/fontconfig-devel/fcpatternprint.html b/doc/fontconfig-devel/fcpatternprint.html index c3291ad..6b4a9b5 100644 --- a/doc/fontconfig-devel/fcpatternprint.html +++ b/doc/fontconfig-devel/fcpatternprint.html @@ -12,8 +12,8 @@ REL="UP" TITLE="FcPattern" HREF="x103.html#AEN242"><<< Previous

Description

<<< PreviousFcPatternRemoveFcPatternIterGetValue

Name

Synopsis

Next >>>

Description

Next >>>FcPatternPrintFcPatternIterStart

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

Up

Name

Synopsis

Description

Since

UpFontconfig Developers Reference, Version 2.13.0 +>Fontconfig Developers Reference, Version 2.13.1 Fontconfig Developers Reference, Version 2.13.0Fontconfig Developers Reference, Version 2.13.1 -- Destroy a pattern
FcPatternObjectCount -- Returns the number of the object
FcPatternEqual -- Compare patterns
 -- Remove one object of the specified type from the pattern
FcPatternIterStart -- Initialize the iterator with the first iterator in the pattern
FcPatternIterNext -- 
FcPatternIterEqual -- Compare iterators
FcPatternFindIter -- Set the iterator to point to the object in the pattern
FcPatternIterIsValid -- Check whether the iterator is valid or not
FcPatternIterGetObject -- Returns an object name which the iterator point to
FcPatternIterValueCount -- Returns the number of the values which the iterator point to
FcPatternIterGetValue -- Returns a value which the iterator point to
FcPatternPrint -- Print a pattern for debugging

FcFontSet

FcObjectSet

FreeType specific functions

FcValue

FcCharSet

FcLangSet

FcMatrix

FcRange

FcConfig

FcObjectType

FcConstant

FcWeight

FcBlanks

FcAtomic

File and Directory routines

FcCache routines

FcDirCacheCreateUUID -- Create .uuid file at a directory
FcDirCacheDeleteUUID -- Delete .uuid file

FcStrSet and FcStrList

String utilities

See Also

fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) +>fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1), SOURCE_DATE_EPOCH.

Version

Fontconfig version 2.13.0 +>Fontconfig version 2.13.1

h?F)xYx)9Su!T@M+~o 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 lTh3B6`^tG3qu6Br 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 lZPCCBt&_wgWceTLQJP?6mKqTb%L5 +FONTCONFIG_SYSROOT +is used to set a default sysroot directory. + + FC_DEBUG is used to output the detailed debugging messages. see Debugging Applications section for more details. @@ -798,10 +802,14 @@ is used to specify the default language as the weak binding in the query. if thi FONTCONFIG_USE_MMAP is used to control the use of mmap(2) for the cache files if available. this take a boolean value. fontconfig will checks if the cache files are stored on the filesystem that is safe to use mmap(2). explicitly setting this environment variable will causes skipping this check and enforce to use or not use mmap(2) anyway. + +SOURCE_DATE_EPOCH +is used to ensure fc-cache(1) generates files in a deterministic manner in order to support reproducible builds. When set to a numeric representation of UNIX timestamp, fontconfig will prefer this value over using the modification timestamps of the input files in order to identify which cache files require regeneration. If SOURCE_DATE_EPOCH is not set (or is newer than the mtime of the directory), the existing behaviour is unchanged. + See Also -fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) +fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1), SOURCE_DATE_EPOCH. Version diff --git a/doc/fontconfig-user.txt b/doc/fontconfig-user.txt index 3e4a10b..b6aa7a8 100644 --- a/doc/fontconfig-user.txt +++ b/doc/fontconfig-user.txt @@ -1,18 +1,18 @@ - fonts-conf + fonts-conf Name - fonts.conf -- Font configuration files + fonts.conf -- Font configuration files Synopsis - /etc/fonts/fonts.conf - /etc/fonts/fonts.dtd - /etc/fonts/conf.d - $XDG_CONFIG_HOME/fontconfig/conf.d - $XDG_CONFIG_HOME/fontconfig/fonts.conf - ~/.fonts.conf.d - ~/.fonts.conf + /etc/fonts/fonts.conf + /etc/fonts/fonts.dtd + /etc/fonts/conf.d + $XDG_CONFIG_HOME/fontconfig/conf.d + $XDG_CONFIG_HOME/fontconfig/fonts.conf + ~/.fonts.conf.d + ~/.fonts.conf Description @@ -21,48 +21,44 @@ Description Functional Overview - Fontconfig contains two essential modules, the configuration - module which builds an internal configuration from XML files - and the matching module which accepts font patterns and returns - the nearest matching font. - -Font Configuration - - The configuration module consists of the FcConfig datatype, - libexpat and FcConfigParse which walks over an XML tree and - amends a configuration with data found within. From an external - perspective, configuration of the library consists of - generating a valid XML tree and feeding that to FcConfigParse. - The only other mechanism provided to applications for changing - the running configuration is to add fonts and directories to - the list of application-provided font files. - - The intent is to make font configurations relatively static, - and shared by as many applications as possible. It is hoped - that this will lead to more stable font selection when passing - names from one application to another. XML was chosen as a - configuration file format because it provides a format which is - easy for external agents to edit while retaining the correct + Fontconfig contains two essential modules, the configuration module which + builds an internal configuration from XML files and the matching module + which accepts font patterns and returns the nearest matching font. + + Font Configuration + + The configuration module consists of the FcConfig datatype, libexpat and + FcConfigParse which walks over an XML tree and amends a configuration with + data found within. From an external perspective, configuration of the + library consists of generating a valid XML tree and feeding that to + FcConfigParse. The only other mechanism provided to applications for + changing the running configuration is to add fonts and directories to the + list of application-provided font files. + + The intent is to make font configurations relatively static, and shared by + as many applications as possible. It is hoped that this will lead to more + stable font selection when passing names from one application to another. + XML was chosen as a configuration file format because it provides a format + which is easy for external agents to edit while retaining the correct structure and syntax. - Font configuration is separate from font matching; applications - needing to do their own matching can access the available fonts - from the library and perform private matching. The intent is to - permit applications to pick and choose appropriate - functionality from the library instead of forcing them to - choose between this library and a private configuration - mechanism. The hope is that this will ensure that configuration - of fonts for all applications can be centralized in one place. - Centralizing font configuration will simplify and regularize - font installation and customization. - -Font Properties - - While font patterns may contain essentially any properties, - there are some well known properties with associated types. - Fontconfig uses some of these properties for font matching and - font completion. Others are provided as a convenience for the - applications' rendering mechanism. + Font configuration is separate from font matching; applications needing to + do their own matching can access the available fonts from the library and + perform private matching. The intent is to permit applications to pick and + choose appropriate functionality from the library instead of forcing them + to choose between this library and a private configuration mechanism. The + hope is that this will ensure that configuration of fonts for all + applications can be centralized in one place. Centralizing font + configuration will simplify and regularize font installation and + customization. + + Font Properties + + While font patterns may contain essentially any properties, there are some + well known properties with associated types. Fontconfig uses some of these + properties for font matching and font completion. Others are provided as a + convenience for the applications' rendering mechanism. + Property Type Description -------------------------------------------------------------- family String Font family names @@ -77,8 +73,7 @@ Font Properties width Int Condensed, normal or expanded aspect Double Stretches glyphs horizontally before hinting pixelsize Double Pixel size - spacing Int Proportional, dual-width, monospace or charcel -l + spacing Int Proportional, dual-width, monospace or charcell foundry String Font foundry name antialias Bool Whether glyphs can be antialiased hinting Bool Whether the rasterizer should use hinting @@ -93,8 +88,7 @@ l outline Bool Whether the glyphs are outlines scalable Bool Whether glyphs can be scaled color Bool Whether any glyphs have color - scale Double Scale factor for point->pixel conversions (dep -recated) + scale Double Scale factor for point->pixel conversions (deprecated) dpi Double Target dots per inch rgba Int unknown, rgb, bgr, vrgb, vbgr, none - subpixel geometry @@ -106,491 +100,468 @@ recated) fontversion Int Version number of the font capability String List of layout capabilities in the font fontformat String String name of the font format - embolden Bool Rasterizer should synthetically embolden the f -ont + embolden Bool Rasterizer should synthetically embolden the font embeddedbitmap Bool Use the embedded bitmap instead of the outline decorative Bool Whether the style is a decorative variant - fontfeatures String List of the feature tags in OpenType to be ena -bled - namelang String Language name to be used for the default value - of + fontfeatures String List of the feature tags in OpenType to be enabled + namelang String Language name to be used for the default value of familylang, stylelang, and fullnamelang prgname String String Name of the running program postscriptname String Font family name in PostScript -Font Matching - Fontconfig performs matching by measuring the distance from a - provided pattern to all of the available fonts in the system. - The closest matching font is selected. This ensures that a font - will always be returned, but doesn't ensure that it is anything - like the requested pattern. + Font Matching - Font matching starts with an application constructed pattern. - The desired attributes of the resulting font are collected - together in a pattern. Each property of the pattern can contain - one or more values; these are listed in priority order; matches - earlier in the list are considered "closer" than matches later - in the list. + Fontconfig performs matching by measuring the distance from a provided + pattern to all of the available fonts in the system. The closest matching + font is selected. This ensures that a font will always be returned, but + doesn't ensure that it is anything like the requested pattern. + + Font matching starts with an application constructed pattern. The desired + attributes of the resulting font are collected together in a pattern. Each + property of the pattern can contain one or more values; these are listed + in priority order; matches earlier in the list are considered "closer" + than matches later in the list. The initial pattern is modified by applying the list of editing - instructions specific to patterns found in the configuration; - each consists of a match predicate and a set of editing - operations. They are executed in the order they appeared in the - configuration. Each match causes the associated sequence of - editing operations to be applied. - - After the pattern has been edited, a sequence of default - substitutions are performed to canonicalize the set of - available properties; this avoids the need for the lower layers - to constantly provide default values for various font - properties during rendering. - - The canonical font pattern is finally matched against all - available fonts. The distance from the pattern to the font is - measured for each of several properties: foundry, charset, - family, lang, spacing, pixelsize, style, slant, weight, - antialias, rasterizer and outline. This list is in priority - order -- results of comparing earlier elements of this list - weigh more heavily than later elements. - - There is one special case to this rule; family names are split - into two bindings; strong and weak. Strong family names are - given greater precedence in the match than lang elements while - weak family names are given lower precedence than lang - elements. This permits the document language to drive font - selection when any document specified font is unavailable. - - The pattern representing that font is augmented to include any - properties found in the pattern but not found in the font - itself; this permits the application to pass rendering - instructions or any other data through the matching system. - Finally, the list of editing instructions specific to fonts - found in the configuration are applied to the pattern. This - modified pattern is returned to the application. - - The return value contains sufficient information to locate and - rasterize the font, including the file name, pixel size and - other rendering data. As none of the information involved - pertains to the FreeType library, applications are free to use - any rasterization engine or even to take the identified font - file and access it directly. - - The match/edit sequences in the configuration are performed in - two passes because there are essentially two different - operations necessary -- the first is to modify how fonts are - selected; aliasing families and adding suitable defaults. The - second is to modify how the selected fonts are rasterized. - Those must apply to the selected font, not the original pattern - as false matches will often occur. - -Font Names - - Fontconfig provides a textual representation for patterns that - the library can both accept and generate. The representation is - in three parts, first a list of family names, second a list of - point sizes and finally a list of additional properties: - -:=:=... - - Values in a list are separated with commas. The name needn't - include either families or point sizes; they can be elided. In - addition, there are symbolic constants that simultaneously - indicate both a name and a value. Here are some examples: - Name Meaning - ---------------------------------------------------------- - Times-12 12 point Times Roman - Times-12:bold 12 point Times Bold - Courier:italic Courier Italic in the default size - Monospace:matrix=1 .1 0 1 The users preferred monospace font - with artificial obliquing - - The '\', '-', ':' and ',' characters in family names must be - preceded by a '\' character to avoid having them - misinterpreted. Similarly, values containing '\', '=', '_', ':' - and ',' must also have them preceded by a '\' character. The - '\' characters are stripped out of the family name and values - as the font name is read. + instructions specific to patterns found in the configuration; each + consists of a match predicate and a set of editing operations. They are + executed in the order they appeared in the configuration. Each match + causes the associated sequence of editing operations to be applied. + + After the pattern has been edited, a sequence of default substitutions are + performed to canonicalize the set of available properties; this avoids the + need for the lower layers to constantly provide default values for various + font properties during rendering. + + The canonical font pattern is finally matched against all available fonts. + The distance from the pattern to the font is measured for each of several + properties: foundry, charset, family, lang, spacing, pixelsize, style, + slant, weight, antialias, rasterizer and outline. This list is in priority + order -- results of comparing earlier elements of this list weigh more + heavily than later elements. + + There is one special case to this rule; family names are split into two + bindings; strong and weak. Strong family names are given greater + precedence in the match than lang elements while weak family names are + given lower precedence than lang elements. This permits the document + language to drive font selection when any document specified font is + unavailable. + + The pattern representing that font is augmented to include any properties + found in the pattern but not found in the font itself; this permits the + application to pass rendering instructions or any other data through the + matching system. Finally, the list of editing instructions specific to + fonts found in the configuration are applied to the pattern. This modified + pattern is returned to the application. + + The return value contains sufficient information to locate and rasterize + the font, including the file name, pixel size and other rendering data. As + none of the information involved pertains to the FreeType library, + applications are free to use any rasterization engine or even to take the + identified font file and access it directly. + + The match/edit sequences in the configuration are performed in two passes + because there are essentially two different operations necessary -- the + first is to modify how fonts are selected; aliasing families and adding + suitable defaults. The second is to modify how the selected fonts are + rasterized. Those must apply to the selected font, not the original + pattern as false matches will often occur. + + Font Names + + Fontconfig provides a textual representation for patterns that the library + can both accept and generate. The representation is in three parts, first + a list of family names, second a list of point sizes and finally a list of + additional properties: + + -:=:=... + + + Values in a list are separated with commas. The name needn't include + either families or point sizes; they can be elided. In addition, there are + symbolic constants that simultaneously indicate both a name and a value. + Here are some examples: + + Name Meaning + ---------------------------------------------------------- + Times-12 12 point Times Roman + Times-12:bold 12 point Times Bold + Courier:italic Courier Italic in the default size + Monospace:matrix=1 .1 0 1 The users preferred monospace font + with artificial obliquing + + + The '\', '-', ':' and ',' characters in family names must be preceded by a + '\' character to avoid having them misinterpreted. Similarly, values + containing '\', '=', '_', ':' and ',' must also have them preceded by a + '\' character. The '\' characters are stripped out of the family name and + values as the font name is read. Debugging Applications - To help diagnose font and applications problems, fontconfig is - built with a large amount of internal debugging left enabled. - It is controlled by means of the FC_DEBUG environment variable. - The value of this variable is interpreted as a number, and each - bit within that value controls different debugging messages. - Name Value Meaning - --------------------------------------------------------- - MATCH 1 Brief information about font matching - MATCHV 2 Extensive font matching information - EDIT 4 Monitor match/test/edit execution - FONTSET 8 Track loading of font information at startup - CACHE 16 Watch cache files being written - CACHEV 32 Extensive cache file writing information - PARSE 64 (no longer in use) - SCAN 128 Watch font files being scanned to build caches - SCANV 256 Verbose font file scanning information - MEMORY 512 Monitor fontconfig memory usage - CONFIG 1024 Monitor which config files are loaded - LANGSET 2048 Dump char sets used to construct lang values - MATCH2 4096 Display font-matching transformation in patterns - - Add the value of the desired debug levels together and assign - that (in base 10) to the FC_DEBUG environment variable before - running the application. Output from these statements is sent - to stdout. + To help diagnose font and applications problems, fontconfig is built with + a large amount of internal debugging left enabled. It is controlled by + means of the FC_DEBUG environment variable. The value of this variable is + interpreted as a number, and each bit within that value controls different + debugging messages. + + Name Value Meaning + --------------------------------------------------------- + MATCH 1 Brief information about font matching + MATCHV 2 Extensive font matching information + EDIT 4 Monitor match/test/edit execution + FONTSET 8 Track loading of font information at startup + CACHE 16 Watch cache files being written + CACHEV 32 Extensive cache file writing information + PARSE 64 (no longer in use) + SCAN 128 Watch font files being scanned to build caches + SCANV 256 Verbose font file scanning information + MEMORY 512 Monitor fontconfig memory usage + CONFIG 1024 Monitor which config files are loaded + LANGSET 2048 Dump char sets used to construct lang values + MATCH2 4096 Display font-matching transformation in patterns + + + Add the value of the desired debug levels together and assign that (in + base 10) to the FC_DEBUG environment variable before running the + application. Output from these statements is sent to stdout. Lang Tags - Each font in the database contains a list of languages it - supports. This is computed by comparing the Unicode coverage of - the font with the orthography of each language. Languages are - tagged using an RFC-3066 compatible naming and occur in two - parts -- the ISO 639 language tag followed a hyphen and then by - the ISO 3166 country code. The hyphen and country code may be - elided. - - Fontconfig has orthographies for several languages built into - the library. No provision has been made for adding new ones - aside from rebuilding the library. It currently supports 122 of - the 139 languages named in ISO 639-1, 141 of the languages with - two-letter codes from ISO 639-2 and another 30 languages with - only three-letter codes. Languages with both two and three - letter codes are provided with only the two letter code. - - For languages used in multiple territories with radically - different character sets, fontconfig includes per-territory - orthographies. This includes Azerbaijani, Kurdish, Pashto, - Tigrinya and Chinese. + Each font in the database contains a list of languages it supports. This + is computed by comparing the Unicode coverage of the font with the + orthography of each language. Languages are tagged using an RFC-3066 + compatible naming and occur in two parts -- the ISO 639 language tag + followed a hyphen and then by the ISO 3166 country code. The hyphen and + country code may be elided. -Configuration File Format + Fontconfig has orthographies for several languages built into the library. + No provision has been made for adding new ones aside from rebuilding the + library. It currently supports 122 of the 139 languages named in ISO + 639-1, 141 of the languages with two-letter codes from ISO 639-2 and + another 30 languages with only three-letter codes. Languages with both two + and three letter codes are provided with only the two letter code. - Configuration files for fontconfig are stored in XML format; - this format makes external configuration tools easier to write - and ensures that they will generate syntactically correct - configuration files. As XML files are plain text, they can also - be manipulated by the expert user using a text editor. - - The fontconfig document type definition resides in the external - entity "fonts.dtd"; this is normally stored in the default font - configuration directory (/etc/fonts). Each configuration file - should contain the following structure: - - - - ... - + For languages used in multiple territories with radically different + character sets, fontconfig includes per-territory orthographies. This + includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese. - +Configuration File Format - This is the top level element for a font configuration and can - contain , , , and - elements in any order. - - - - This element contains a directory name which will be scanned - for font files to include in the set of available fonts. If - 'prefix' is set to "xdg", the value in the XDG_DATA_HOME - environment variable will be added as the path prefix. please - see XDG Base Directory Specification for more details. - - - - This element contains a directory name that is supposed to be - stored or read the cache of font information. If multiple - elements are specified in the configuration file, the directory - that can be accessed first in the list will be used to store - the cache files. If it starts with '~', it refers to a - directory in the users home directory. If 'prefix' is set to - "xdg", the value in the XDG_CACHE_HOME environment variable - will be added as the path prefix. please see XDG Base Directory - Specification for more details. The default directory is - ``$XDG_CACHE_HOME/fontconfig'' and it contains the cache files - named ``-.cache-'', where - is the fontconfig cache file version number - (currently 7). - - - - This element contains the name of an additional configuration - file or directory. If a directory, every file within that - directory starting with an ASCII digit (U+0030 - U+0039) and - ending with the string ``.conf'' will be processed in sorted - order. When the XML datatype is traversed by FcConfigParse, the - contents of the file(s) will also be incorporated into the - configuration by passing the filename(s) to - FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" - instead of the default "no", a missing file or directory will - elicit no warning message from the library. If 'prefix' is set - to "xdg", the value in the XDG_CONFIG_HOME environment variable - will be added as the path prefix. please see XDG Base Directory + Configuration files for fontconfig are stored in XML format; this format + makes external configuration tools easier to write and ensures that they + will generate syntactically correct configuration files. As XML files are + plain text, they can also be manipulated by the expert user using a text + editor. + + The fontconfig document type definition resides in the external entity + "fonts.dtd"; this is normally stored in the default font configuration + directory (/etc/fonts). Each configuration file should contain the + following structure: + + + + + ... + + + + + + This is the top level element for a font configuration and can contain + , , , and elements in any order. + + + + This element contains a directory name which will be scanned for font + files to include in the set of available fonts. If 'prefix' is set to + "xdg", the value in the XDG_DATA_HOME environment variable will be added + as the path prefix. please see XDG Base Directory Specification for more + details. + + + + This element contains a directory name that is supposed to be stored or + read the cache of font information. If multiple elements are specified in + the configuration file, the directory that can be accessed first in the + list will be used to store the cache files. If it starts with '~', it + refers to a directory in the users home directory. If 'prefix' is set to + "xdg", the value in the XDG_CACHE_HOME environment variable will be added + as the path prefix. please see XDG Base Directory Specification for more + details. The default directory is ``$XDG_CACHE_HOME/fontconfig'' and it + contains the cache files named ``-.cache-'', where is the fontconfig + cache file version number (currently 7). + + + + This element contains the name of an additional configuration file or + directory. If a directory, every file within that directory starting with + an ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will + be processed in sorted order. When the XML datatype is traversed by + FcConfigParse, the contents of the file(s) will also be incorporated into + the configuration by passing the filename(s) to FcConfigLoadAndParse. If + 'ignore_missing' is set to "yes" instead of the default "no", a missing + file or directory will elicit no warning message from the library. If + 'prefix' is set to "xdg", the value in the XDG_CONFIG_HOME environment + variable will be added as the path prefix. please see XDG Base Directory Specification for more details. - - - This element provides a place to consolidate additional - configuration information. can contain and - elements in any order. - - - - Fonts often include "broken" glyphs which appear in the - encoding but are drawn as blanks on the screen. Within the - element, place each Unicode characters which is - supposed to be blank in an element. Characters outside of - this set which are drawn as blank will be elided from the set - of characters supported by the font. - - - - The element holds an element which indicates the - default interval between automatic checks for font - configuration changes. Fontconfig will validate all of the - configuration files and directories and automatically rebuild - the internal datastructures when this interval passes. - - + + + This element provides a place to consolidate additional configuration + information. can contain and elements in any + order. + + + + Fonts often include "broken" glyphs which appear in the encoding but are + drawn as blanks on the screen. Within the element, place each + Unicode characters which is supposed to be blank in an element. + Characters outside of this set which are drawn as blank will be elided + from the set of characters supported by the font. + + + + The element holds an element which indicates the default + interval between automatic checks for font configuration changes. + Fontconfig will validate all of the configuration files and directories + and automatically rebuild the internal datastructures when this interval + passes. + + + + This element is used to black/white list fonts from being listed or + matched against. It holds acceptfont and rejectfont elements. + + + + Fonts matched by an acceptfont element are "whitelisted"; such fonts are + explicitly included in the set of fonts used to resolve list and match + requests; including them in this list protects them from being + "blacklisted" by a rejectfont element. Acceptfont elements include glob + and pattern elements which are used to match fonts. + + - This element is used to black/white list fonts from being - listed or matched against. It holds acceptfont and rejectfont - elements. + Fonts matched by an rejectfont element are "blacklisted"; such fonts are + excluded from the set of fonts used to resolve list and match requests as + if they didn't exist in the system. Rejectfont elements include glob and + pattern elements which are used to match fonts. - + - Fonts matched by an acceptfont element are "whitelisted"; such - fonts are explicitly included in the set of fonts used to - resolve list and match requests; including them in this list - protects them from being "blacklisted" by a rejectfont element. - Acceptfont elements include glob and pattern elements which are - used to match fonts. + Glob elements hold shell-style filename matching patterns (including ? and + *) which match fonts based on their complete pathnames. This can be used + to exclude a set of directories (/usr/share/fonts/uglyfont*), or + particular font file types (*.pcf.gz), but the latter mechanism relies + rather heavily on filenaming conventions which can't be relied upon. Note + that globs only apply to directories, not to individual fonts. - + - Fonts matched by an rejectfont element are "blacklisted"; such - fonts are excluded from the set of fonts used to resolve list - and match requests as if they didn't exist in the system. - Rejectfont elements include glob and pattern elements which are - used to match fonts. + Pattern elements perform list-style matching on incoming fonts; that is, + they hold a list of elements and associated values. If all of those + elements have a matching value, then the pattern matches the font. This + can be used to select fonts based on attributes of the font (scalable, + bold, etc), which is a more reliable mechanism than using file extensions. + Pattern elements include patelt elements. - + - Glob elements hold shell-style filename matching patterns - (including ? and *) which match fonts based on their complete - pathnames. This can be used to exclude a set of directories - (/usr/share/fonts/uglyfont*), or particular font file types - (*.pcf.gz), but the latter mechanism relies rather heavily on - filenaming conventions which can't be relied upon. Note that - globs only apply to directories, not to individual fonts. - - - - Pattern elements perform list-style matching on incoming fonts; - that is, they hold a list of elements and associated values. If - all of those elements have a matching value, then the pattern - matches the font. This can be used to select fonts based on - attributes of the font (scalable, bold, etc), which is a more - reliable mechanism than using file extensions. Pattern elements - include patelt elements. - - - - Patelt elements hold a single pattern element and list of - values. They must have a 'name' attribute which indicates the - pattern element name. Patelt elements include int, double, - string, matrix, bool, charset and const elements. - - - - This element holds first a (possibly empty) list of - elements and then a (possibly empty) list of elements. - Patterns which match all of the tests are subjected to all the - edits. If 'target' is set to "font" instead of the default - "pattern", then this element applies to the font name resulting - from a match rather than a font pattern to be matched. If - 'target' is set to "scan", then this element applies when the - font is scanned to build the fontconfig database. - - - - This element contains a single value which is compared with the - target ('pattern', 'font', 'scan' or 'default') property - "property" (substitute any of the property names seen above). - 'compare' can be one of "eq", "not_eq", "less", "less_eq", - "more", "more_eq", "contains" or "not_contains". 'qual' may - either be the default, "any", in which case the match succeeds - if any value associated with the property matches the test - value, or "all", in which case all of the values associated - with the property must match the test value. 'ignore-blanks' - takes a boolean value. if 'ignore-blanks' is set "true", any - blanks in the string will be ignored on its comparison. this - takes effects only when compare="eq" or compare="not_eq". When - used in a element, the target= attribute - in the element selects between matching the original - pattern or the font. "default" selects whichever target the - outer element has selected. - - - - This element contains a list of expression elements (any of the - value or operator elements). The expression elements are - evaluated at run-time and modify the property "property". The - modification depends on whether "property" was matched by one - of the associated elements, if so, the modification may - affect the first matched value. Any values inserted into the - property are given the indicated binding ("strong", "weak" or - "same") with "same" binding using the value from the matched - pattern element. 'mode' is one of: - Mode With Match Without Match - --------------------------------------------------------------------- - "assign" Replace matching value Replace all values - "assign_replace" Replace all values Replace all values - "prepend" Insert before matching Insert at head of list - "prepend_first" Insert at head of list Insert at head of list - "append" Append after matching Append at end of list - "append_last" Append at end of list Append at end of list - "delete" Delete matching value Delete all values - "delete_all" Delete all values Delete all values - -, , , - - These elements hold a single value of the indicated type. - elements hold either true or false. An important - limitation exists in the parsing of floating point numbers -- - fontconfig requires that the mantissa start with a digit, not a - decimal point, so insert a leading zero for purely fractional - values (e.g. use 0.5 instead of .5 and -0.5 instead of -.5). - - - - This element holds four numerical expressions of an affine - transformation. At their simplest these will be four - elements but they can also be more involved expressions. - - - - This element holds the two elements of a range - representation. - - - - This element holds at least one element of an Unicode - code point or more. - - - - This element holds at least one element of a - RFC-3066-style languages or more. - - - - Holds a property name. Evaluates to the first value from the - property of the pattern. If the 'target' attribute is not - present, it will default to 'default', in which case the - property is returned from the font pattern during a - target="font" match, and to the pattern during a - target="pattern" match. The attribute can also take the values - 'font' or 'pattern' to explicitly choose which pattern to use. - It is an error to use a target of 'font' in a match that has - target="pattern". - - - - Holds the name of a constant; these are always integers and - serve as symbolic names for common font values: - Constant Property Value - ------------------------------------- - thin weight 0 - extralight weight 40 - ultralight weight 40 - light weight 50 - demilight weight 55 - semilight weight 55 - book weight 75 - regular weight 80 - normal weight 80 - medium weight 100 - demibold weight 180 - semibold weight 180 - bold weight 200 - extrabold weight 205 - black weight 210 - heavy weight 210 - roman slant 0 - italic slant 100 - oblique slant 110 - ultracondensed width 50 - extracondensed width 63 - condensed width 75 - semicondensed width 87 - normal width 100 - semiexpanded width 113 - expanded width 125 - extraexpanded width 150 - ultraexpanded width 200 - proportional spacing 0 - dual spacing 90 - mono spacing 100 - charcell spacing 110 - unknown rgba 0 - rgb rgba 1 - bgr rgba 2 - vrgb rgba 3 - vbgr rgba 4 - none rgba 5 - lcdnone lcdfilter 0 - lcddefault lcdfilter 1 - lcdlight lcdfilter 2 - lcdlegacy lcdfilter 3 - hintnone hintstyle 0 - hintslight hintstyle 1 - hintmedium hintstyle 2 - hintfull hintstyle 3 - -, , , , , - - These elements perform the specified operation on a list of - expression elements. and are boolean, not bitwise. - -, , , , , , , - + + This element holds first a (possibly empty) list of elements and + then a (possibly empty) list of elements. Patterns which match all + of the tests are subjected to all the edits. If 'target' is set to "font" + instead of the default "pattern", then this element applies to the font + name resulting from a match rather than a font pattern to be matched. If + 'target' is set to "scan", then this element applies when the font is + scanned to build the fontconfig database. + + + + This element contains a single value which is compared with the target + ('pattern', 'font', 'scan' or 'default') property "property" (substitute + any of the property names seen above). 'compare' can be one of "eq", + "not_eq", "less", "less_eq", "more", "more_eq", "contains" or + "not_contains". 'qual' may either be the default, "any", in which case the + match succeeds if any value associated with the property matches the test + value, or "all", in which case all of the values associated with the + property must match the test value. 'ignore-blanks' takes a boolean value. + if 'ignore-blanks' is set "true", any blanks in the string will be ignored + on its comparison. this takes effects only when compare="eq" or + compare="not_eq". When used in a element, the + target= attribute in the element selects between matching the + original pattern or the font. "default" selects whichever target the outer + element has selected. + + + + This element contains a list of expression elements (any of the value or + operator elements). The expression elements are evaluated at run-time and + modify the property "property". The modification depends on whether + "property" was matched by one of the associated elements, if so, + the modification may affect the first matched value. Any values inserted + into the property are given the indicated binding ("strong", "weak" or + "same") with "same" binding using the value from the matched pattern + element. 'mode' is one of: + + Mode With Match Without Match + --------------------------------------------------------------------- + "assign" Replace matching value Replace all values + "assign_replace" Replace all values Replace all values + "prepend" Insert before matching Insert at head of list + "prepend_first" Insert at head of list Insert at head of list + "append" Append after matching Append at end of list + "append_last" Append at end of list Append at end of list + "delete" Delete matching value Delete all values + "delete_all" Delete all values Delete all values + + + , , , + + These elements hold a single value of the indicated type. elements + hold either true or false. An important limitation exists in the parsing + of floating point numbers -- fontconfig requires that the mantissa start + with a digit, not a decimal point, so insert a leading zero for purely + fractional values (e.g. use 0.5 instead of .5 and -0.5 instead of -.5). + + + + This element holds four numerical expressions of an affine transformation. + At their simplest these will be four elements but they can also + be more involved expressions. + + + + This element holds the two elements of a range representation. + + + + This element holds at least one element of an Unicode code point or + more. + + + + This element holds at least one element of a RFC-3066-style + languages or more. + + + + Holds a property name. Evaluates to the first value from the property of + the pattern. If the 'target' attribute is not present, it will default to + 'default', in which case the property is returned from the font pattern + during a target="font" match, and to the pattern during a target="pattern" + match. The attribute can also take the values 'font' or 'pattern' to + explicitly choose which pattern to use. It is an error to use a target of + 'font' in a match that has target="pattern". + + + + Holds the name of a constant; these are always integers and serve as + symbolic names for common font values: + + Constant Property Value + ------------------------------------- + thin weight 0 + extralight weight 40 + ultralight weight 40 + light weight 50 + demilight weight 55 + semilight weight 55 + book weight 75 + regular weight 80 + normal weight 80 + medium weight 100 + demibold weight 180 + semibold weight 180 + bold weight 200 + extrabold weight 205 + black weight 210 + heavy weight 210 + roman slant 0 + italic slant 100 + oblique slant 110 + ultracondensed width 50 + extracondensed width 63 + condensed width 75 + semicondensed width 87 + normal width 100 + semiexpanded width 113 + expanded width 125 + extraexpanded width 150 + ultraexpanded width 200 + proportional spacing 0 + dual spacing 90 + mono spacing 100 + charcell spacing 110 + unknown rgba 0 + rgb rgba 1 + bgr rgba 2 + vrgb rgba 3 + vbgr rgba 4 + none rgba 5 + lcdnone lcdfilter 0 + lcddefault lcdfilter 1 + lcdlight lcdfilter 2 + lcdlegacy lcdfilter 3 + hintnone hintstyle 0 + hintslight hintstyle 1 + hintmedium hintstyle 2 + hintfull hintstyle 3 + + + , , , , , + + These elements perform the specified operation on a list of expression + elements. and are boolean, not bitwise. + + , , , , , , , + + Inverts the boolean sense of its one expression element - + - This element takes three expression elements; if the value of - the first is true, it produces the value of the second, - otherwise it produces the value of the third. + This element takes three expression elements; if the value of the first is + true, it produces the value of the second, otherwise it produces the value + of the third. - + - Alias elements provide a shorthand notation for the set of - common match operations needed to substitute one font family - for another. They contain a element followed by - optional , and elements. Fonts - matching the element are edited to prepend the list of - ed families before the matching , append the - able families after the matching and append - the families to the end of the family list. + Alias elements provide a shorthand notation for the set of common match + operations needed to substitute one font family for another. They contain + a element followed by optional , and + elements. Fonts matching the element are edited to prepend the + list of ed families before the matching , append the + able families after the matching and append the + families to the end of the family list. - + Holds a single font family name -, , + , , - These hold a list of elements to be used by the - element. + These hold a list of elements to be used by the element. EXAMPLE CONFIGURATION FILE -System configuration file + System configuration file This is an example of a system-wide configuration file + @@ -606,30 +577,24 @@ System configuration file --> mono - monospace + monospace - sans-serif< -/string> - serif - monospace - sans-serif + sans-serif + serif + monospace + sans-serif -fontconfig/fonts.conf +fontconfig/fonts.conf - + Courier New @@ -691,7 +656,7 @@ e> - + Courier @@ -701,137 +666,147 @@ e> -User configuration file - This is an example of a per-user configuration file that lives - in $XDG_CONFIG_HOME/fontconfig/fonts.conf - - - - + User configuration file - -fonts + This is an example of a per-user configuration file that lives in + $XDG_CONFIG_HOME/fontconfig/fonts.conf + + + + + + + + fonts + + + + rgb + + + + + + zh + + + serif + + + WenQuanYi Zen Hei + + + + + + ja + + + sans-serif + + + VL Gothic + + + - - - rgb - - - - - - zh - - - serif - - - WenQuanYi Zen Hei - - - - - - ja - - - sans-serif - - - VL Gothic - - - Files - fonts.conf contains configuration information for the - fontconfig library consisting of directories to look at for - font information as well as instructions on editing program - specified font patterns before attempting to match the - available fonts. It is in XML format. + fonts.conf contains configuration information for the fontconfig library + consisting of directories to look at for font information as well as + instructions on editing program specified font patterns before attempting + to match the available fonts. It is in XML format. conf.d is the conventional name for a directory of additional - configuration files managed by external applications or the - local administrator. The filenames starting with decimal digits - are sorted in lexicographic order and used as additional - configuration files. All of these files are in XML format. The - master fonts.conf file references this directory in an - directive. - - fonts.dtd is a DTD that describes the format of the - configuration files. - - $XDG_CONFIG_HOME/fontconfig/conf.d and ~/.fonts.conf.d is the - conventional name for a per-user directory of (typically - auto-generated) configuration files, although the actual - location is specified in the global fonts.conf file. please - note that ~/.fonts.conf.d is deprecated now. it will not be + configuration files managed by external applications or the local + administrator. The filenames starting with decimal digits are sorted in + lexicographic order and used as additional configuration files. All of + these files are in XML format. The master fonts.conf file references this + directory in an directive. + + fonts.dtd is a DTD that describes the format of the configuration files. + + $XDG_CONFIG_HOME/fontconfig/conf.d and ~/.fonts.conf.d is the conventional + name for a per-user directory of (typically auto-generated) configuration + files, although the actual location is specified in the global fonts.conf + file. please note that ~/.fonts.conf.d is deprecated now. it will not be read by default in the future version. $XDG_CONFIG_HOME/fontconfig/fonts.conf and ~/.fonts.conf is the - conventional location for per-user font configuration, although - the actual location is specified in the global fonts.conf file. - please note that ~/.fonts.conf is deprecated now. it will not - be read by default in the future version. - - $XDG_CACHE_HOME/fontconfig/*.cache-* and - ~/.fontconfig/*.cache-* is the conventional repository of font - information that isn't found in the per-directory caches. This - file is automatically maintained by fontconfig. please note - that ~/.fontconfig/*.cache-* is deprecated now. it will not be + conventional location for per-user font configuration, although the actual + location is specified in the global fonts.conf file. please note that + ~/.fonts.conf is deprecated now. it will not be read by default in the + future version. + + $XDG_CACHE_HOME/fontconfig/*.cache-* and ~/.fontconfig/*.cache-* is the + conventional repository of font information that isn't found in the + per-directory caches. This file is automatically maintained by fontconfig. + please note that ~/.fontconfig/*.cache-* is deprecated now. it will not be read by default in the future version. Environment variables - FONTCONFIG_FILE is used to override the default configuration - file. + FONTCONFIG_FILE is used to override the default configuration file. - FONTCONFIG_PATH is used to override the default configuration - directory. + FONTCONFIG_PATH is used to override the default configuration directory. - FC_DEBUG is used to output the detailed debugging messages. see - Debugging Applications section for more details. - - FC_DBG_MATCH_FILTER is used to filter out the patterns. this - takes a comma-separated list of object names and effects only - when FC_DEBUG has MATCH2. see Debugging Applications section - for more details. - - FC_LANG is used to specify the default language as the weak - binding in the query. if this isn't set, the default language - will be determined from current locale. + FONTCONFIG_SYSROOT is used to set a default sysroot directory. - FONTCONFIG_USE_MMAP is used to control the use of mmap(2) for - the cache files if available. this take a boolean value. - fontconfig will checks if the cache files are stored on the - filesystem that is safe to use mmap(2). explicitly setting this - environment variable will causes skipping this check and - enforce to use or not use mmap(2) anyway. + FC_DEBUG is used to output the detailed debugging messages. see + [1]Debugging Applications section for more details. + + FC_DBG_MATCH_FILTER is used to filter out the patterns. this takes a + comma-separated list of object names and effects only when FC_DEBUG has + MATCH2. see [2]Debugging Applications section for more details. + + FC_LANG is used to specify the default language as the weak binding in the + query. if this isn't set, the default language will be determined from + current locale. + + FONTCONFIG_USE_MMAP is used to control the use of mmap(2) for the cache + files if available. this take a boolean value. fontconfig will checks if + the cache files are stored on the filesystem that is safe to use mmap(2). + explicitly setting this environment variable will causes skipping this + check and enforce to use or not use mmap(2) anyway. + + SOURCE_DATE_EPOCH is used to ensure fc-cache(1) generates files in a + deterministic manner in order to support reproducible builds. When set to + a numeric representation of UNIX timestamp, fontconfig will prefer this + value over using the modification timestamps of the input files in order + to identify which cache files require regeneration. If SOURCE_DATE_EPOCH + is not set (or is newer than the mtime of the directory), the existing + behaviour is unchanged. See Also - fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) + fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1), + [3]SOURCE_DATE_EPOCH. Version - Fontconfig version 2.13.0 + Fontconfig version 2.13.1 + +References + + Visible links + 1. file:///tmp/html-cm5uzN#DEBUG + 2. file:///tmp/html-cm5uzN#DEBUG + 3. https://reproducible-builds.org/specs/source-date-epoch/ diff --git a/doc/fonts-conf.5 b/doc/fonts-conf.5 index f7887d2..e6a3cd9 100644 --- a/doc/fonts-conf.5 +++ b/doc/fonts-conf.5 @@ -1,5 +1,5 @@ .\" auto-generated by docbook2man-spec from docbook-utils package -.TH "FONTS-CONF" "5" "06 3月 2018" "" "" +.TH "FONTS-CONF" "5" "30 8月 2018" "" "" .SH NAME fonts.conf \- Font configuration files .SH SYNOPSIS @@ -552,9 +552,9 @@ This is an example of a system-wide configuration file Names not including any well known alias are given 'sans-serif' --> - sans-serif - serif - monospace + sans-serif + serif + monospace sans-serif @@ -616,7 +616,7 @@ This is an example of a system-wide configuration file add 'monospace' as the alternative --> - + Courier New @@ -624,7 +624,7 @@ This is an example of a system-wide configuration file - + Courier @@ -738,6 +738,9 @@ is used to override the default configuration file. \fBFONTCONFIG_PATH\fR is used to override the default configuration directory. .PP +\fBFONTCONFIG_SYSROOT\fR +is used to set a default sysroot directory. +.PP \fBFC_DEBUG\fR is used to output the detailed debugging messages. see Debugging Applications section for more details. .PP @@ -749,9 +752,12 @@ is used to specify the default language as the weak binding in the query. if thi .PP \fBFONTCONFIG_USE_MMAP\fR is used to control the use of mmap(2) for the cache files if available. this take a boolean value. fontconfig will checks if the cache files are stored on the filesystem that is safe to use mmap(2). explicitly setting this environment variable will causes skipping this check and enforce to use or not use mmap(2) anyway. +.PP +\fBSOURCE_DATE_EPOCH\fR +is used to ensure fc-cache(1) generates files in a deterministic manner in order to support reproducible builds. When set to a numeric representation of UNIX timestamp, fontconfig will prefer this value over using the modification timestamps of the input files in order to identify which cache files require regeneration. If SOURCE_DATE_EPOCH is not set (or is newer than the mtime of the directory), the existing behaviour is unchanged. .SH "SEE ALSO" .PP -fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) +fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1), SOURCE_DATE_EPOCH \&. .SH "VERSION" .PP -Fontconfig version 2.13.0 +Fontconfig version 2.13.1 diff --git a/fc-cache/Makefile.in b/fc-cache/Makefile.in index 8f3b88a..75393fa 100644 --- a/fc-cache/Makefile.in +++ b/fc-cache/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,7 +157,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-cache.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -293,6 +294,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -446,8 +449,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -518,7 +521,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-cache.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -642,7 +651,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -717,7 +729,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-cache.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -763,7 +775,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-cache.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -786,21 +798,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-data-local install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-local \ - uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-local uninstall-man uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-cache/fc-cache.c b/fc-cache/fc-cache.c index dc93c19..87e3020 100644 --- a/fc-cache/fc-cache.c +++ b/fc-cache/fc-cache.c @@ -41,6 +41,7 @@ #include #include #include +#include #if defined (_WIN32) #define STRICT @@ -302,6 +303,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "Efrsy:Vvh", longopts, NULL)) != -1) #else diff --git a/fc-case/CaseFolding.txt b/fc-case/CaseFolding.txt index 372ee68..cce350f 100644 --- a/fc-case/CaseFolding.txt +++ b/fc-case/CaseFolding.txt @@ -1,6 +1,6 @@ -# CaseFolding-9.0.0.txt -# Date: 2016-03-02, 18:54:54 GMT -# © 2016 Unicode®, Inc. +# CaseFolding-11.0.0.txt +# Date: 2018-01-31, 08:20:09 GMT +# © 2018 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -24,7 +24,7 @@ # # NOTE: case folding does not preserve normalization formats! # -# For information on case folding, including how to have case folding +# For information on case folding, including how to have case folding # preserve normalization formats, see Section 3.13 Default Case Algorithms in # The Unicode Standard. # @@ -603,6 +603,52 @@ 1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN 1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT 1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK +1C90; C; 10D0; # GEORGIAN MTAVRULI CAPITAL LETTER AN +1C91; C; 10D1; # GEORGIAN MTAVRULI CAPITAL LETTER BAN +1C92; C; 10D2; # GEORGIAN MTAVRULI CAPITAL LETTER GAN +1C93; C; 10D3; # GEORGIAN MTAVRULI CAPITAL LETTER DON +1C94; C; 10D4; # GEORGIAN MTAVRULI CAPITAL LETTER EN +1C95; C; 10D5; # GEORGIAN MTAVRULI CAPITAL LETTER VIN +1C96; C; 10D6; # GEORGIAN MTAVRULI CAPITAL LETTER ZEN +1C97; C; 10D7; # GEORGIAN MTAVRULI CAPITAL LETTER TAN +1C98; C; 10D8; # GEORGIAN MTAVRULI CAPITAL LETTER IN +1C99; C; 10D9; # GEORGIAN MTAVRULI CAPITAL LETTER KAN +1C9A; C; 10DA; # GEORGIAN MTAVRULI CAPITAL LETTER LAS +1C9B; C; 10DB; # GEORGIAN MTAVRULI CAPITAL LETTER MAN +1C9C; C; 10DC; # GEORGIAN MTAVRULI CAPITAL LETTER NAR +1C9D; C; 10DD; # GEORGIAN MTAVRULI CAPITAL LETTER ON +1C9E; C; 10DE; # GEORGIAN MTAVRULI CAPITAL LETTER PAR +1C9F; C; 10DF; # GEORGIAN MTAVRULI CAPITAL LETTER ZHAR +1CA0; C; 10E0; # GEORGIAN MTAVRULI CAPITAL LETTER RAE +1CA1; C; 10E1; # GEORGIAN MTAVRULI CAPITAL LETTER SAN +1CA2; C; 10E2; # GEORGIAN MTAVRULI CAPITAL LETTER TAR +1CA3; C; 10E3; # GEORGIAN MTAVRULI CAPITAL LETTER UN +1CA4; C; 10E4; # GEORGIAN MTAVRULI CAPITAL LETTER PHAR +1CA5; C; 10E5; # GEORGIAN MTAVRULI CAPITAL LETTER KHAR +1CA6; C; 10E6; # GEORGIAN MTAVRULI CAPITAL LETTER GHAN +1CA7; C; 10E7; # GEORGIAN MTAVRULI CAPITAL LETTER QAR +1CA8; C; 10E8; # GEORGIAN MTAVRULI CAPITAL LETTER SHIN +1CA9; C; 10E9; # GEORGIAN MTAVRULI CAPITAL LETTER CHIN +1CAA; C; 10EA; # GEORGIAN MTAVRULI CAPITAL LETTER CAN +1CAB; C; 10EB; # GEORGIAN MTAVRULI CAPITAL LETTER JIL +1CAC; C; 10EC; # GEORGIAN MTAVRULI CAPITAL LETTER CIL +1CAD; C; 10ED; # GEORGIAN MTAVRULI CAPITAL LETTER CHAR +1CAE; C; 10EE; # GEORGIAN MTAVRULI CAPITAL LETTER XAN +1CAF; C; 10EF; # GEORGIAN MTAVRULI CAPITAL LETTER JHAN +1CB0; C; 10F0; # GEORGIAN MTAVRULI CAPITAL LETTER HAE +1CB1; C; 10F1; # GEORGIAN MTAVRULI CAPITAL LETTER HE +1CB2; C; 10F2; # GEORGIAN MTAVRULI CAPITAL LETTER HIE +1CB3; C; 10F3; # GEORGIAN MTAVRULI CAPITAL LETTER WE +1CB4; C; 10F4; # GEORGIAN MTAVRULI CAPITAL LETTER HAR +1CB5; C; 10F5; # GEORGIAN MTAVRULI CAPITAL LETTER HOE +1CB6; C; 10F6; # GEORGIAN MTAVRULI CAPITAL LETTER FI +1CB7; C; 10F7; # GEORGIAN MTAVRULI CAPITAL LETTER YN +1CB8; C; 10F8; # GEORGIAN MTAVRULI CAPITAL LETTER ELIFI +1CB9; C; 10F9; # GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN +1CBA; C; 10FA; # GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD; C; 10FD; # GEORGIAN MTAVRULI CAPITAL LETTER AEN +1CBE; C; 10FE; # GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN +1CBF; C; 10FF; # GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN 1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW 1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW @@ -1180,6 +1226,7 @@ A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL A7B3; C; AB53; # LATIN CAPITAL LETTER CHI A7B4; C; A7B5; # LATIN CAPITAL LETTER BETA A7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA +A7B8; C; A7B9; # LATIN CAPITAL LETTER U WITH STROKE AB70; C; 13A0; # CHEROKEE SMALL LETTER A AB71; C; 13A1; # CHEROKEE SMALL LETTER E AB72; C; 13A2; # CHEROKEE SMALL LETTER I @@ -1457,6 +1504,38 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z 118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU 118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII 118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO +16E40; C; 16E60; # MEDEFAIDRIN CAPITAL LETTER M +16E41; C; 16E61; # MEDEFAIDRIN CAPITAL LETTER S +16E42; C; 16E62; # MEDEFAIDRIN CAPITAL LETTER V +16E43; C; 16E63; # MEDEFAIDRIN CAPITAL LETTER W +16E44; C; 16E64; # MEDEFAIDRIN CAPITAL LETTER ATIU +16E45; C; 16E65; # MEDEFAIDRIN CAPITAL LETTER Z +16E46; C; 16E66; # MEDEFAIDRIN CAPITAL LETTER KP +16E47; C; 16E67; # MEDEFAIDRIN CAPITAL LETTER P +16E48; C; 16E68; # MEDEFAIDRIN CAPITAL LETTER T +16E49; C; 16E69; # MEDEFAIDRIN CAPITAL LETTER G +16E4A; C; 16E6A; # MEDEFAIDRIN CAPITAL LETTER F +16E4B; C; 16E6B; # MEDEFAIDRIN CAPITAL LETTER I +16E4C; C; 16E6C; # MEDEFAIDRIN CAPITAL LETTER K +16E4D; C; 16E6D; # MEDEFAIDRIN CAPITAL LETTER A +16E4E; C; 16E6E; # MEDEFAIDRIN CAPITAL LETTER J +16E4F; C; 16E6F; # MEDEFAIDRIN CAPITAL LETTER E +16E50; C; 16E70; # MEDEFAIDRIN CAPITAL LETTER B +16E51; C; 16E71; # MEDEFAIDRIN CAPITAL LETTER C +16E52; C; 16E72; # MEDEFAIDRIN CAPITAL LETTER U +16E53; C; 16E73; # MEDEFAIDRIN CAPITAL LETTER YU +16E54; C; 16E74; # MEDEFAIDRIN CAPITAL LETTER L +16E55; C; 16E75; # MEDEFAIDRIN CAPITAL LETTER Q +16E56; C; 16E76; # MEDEFAIDRIN CAPITAL LETTER HP +16E57; C; 16E77; # MEDEFAIDRIN CAPITAL LETTER NY +16E58; C; 16E78; # MEDEFAIDRIN CAPITAL LETTER X +16E59; C; 16E79; # MEDEFAIDRIN CAPITAL LETTER D +16E5A; C; 16E7A; # MEDEFAIDRIN CAPITAL LETTER OE +16E5B; C; 16E7B; # MEDEFAIDRIN CAPITAL LETTER N +16E5C; C; 16E7C; # MEDEFAIDRIN CAPITAL LETTER R +16E5D; C; 16E7D; # MEDEFAIDRIN CAPITAL LETTER O +16E5E; C; 16E7E; # MEDEFAIDRIN CAPITAL LETTER AI +16E5F; C; 16E7F; # MEDEFAIDRIN CAPITAL LETTER Y 1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF 1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI 1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM diff --git a/fc-case/Makefile.in b/fc-case/Makefile.in index da345dd..6485973 100644 --- a/fc-case/Makefile.in +++ b/fc-case/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -259,6 +259,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -429,8 +431,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/Tools.mk $(am__empty): @@ -501,7 +503,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/fc-case/fccase.h b/fc-case/fccase.h index 5be716d..9cc0b9f 100644 --- a/fc-case/fccase.h +++ b/fc-case/fccase.h @@ -22,7 +22,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -#define FC_NUM_CASE_FOLD 288 +#define FC_NUM_CASE_FOLD 291 #define FC_NUM_CASE_FOLD_CHARS 471 #define FC_MAX_CASE_FOLD_CHARS 6 #define FC_MAX_CASE_FOLD_EXPAND 4 @@ -146,6 +146,8 @@ static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = { { 0x00001c86, FC_CASE_FOLD_RANGE, 0x0001, -6204 }, { 0x00001c87, FC_CASE_FOLD_RANGE, 0x0001, -6180 }, { 0x00001c88, FC_CASE_FOLD_RANGE, 0x0001, -30269 }, + { 0x00001c90, FC_CASE_FOLD_RANGE, 0x002b, -3008 }, + { 0x00001cbd, FC_CASE_FOLD_RANGE, 0x0003, -3008 }, { 0x00001e00, FC_CASE_FOLD_EVEN_ODD, 0x0095, 1 }, { 0x00001e96, FC_CASE_FOLD_FULL, 0x0003, 27 }, { 0x00001e97, FC_CASE_FOLD_FULL, 0x0003, 30 }, @@ -298,7 +300,7 @@ static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = { { 0x0000a7b1, FC_CASE_FOLD_RANGE, 0x0001, 23254 }, { 0x0000a7b2, FC_CASE_FOLD_RANGE, 0x0001, 23275 }, { 0x0000a7b3, FC_CASE_FOLD_RANGE, 0x0001, 928 }, - { 0x0000a7b4, FC_CASE_FOLD_EVEN_ODD, 0x0003, 1 }, + { 0x0000a7b4, FC_CASE_FOLD_EVEN_ODD, 0x0005, 1 }, { 0x0000ab70, FC_CASE_FOLD_RANGE, 0x0050, 26672 }, { 0x0000fb00, FC_CASE_FOLD_FULL, 0x0002, 435 }, { 0x0000fb01, FC_CASE_FOLD_FULL, 0x0002, 437 }, @@ -317,6 +319,7 @@ static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = { { 0x000104b0, FC_CASE_FOLD_RANGE, 0x0024, 40 }, { 0x00010c80, FC_CASE_FOLD_RANGE, 0x0033, 64 }, { 0x000118a0, FC_CASE_FOLD_RANGE, 0x0020, 32 }, + { 0x00016e40, FC_CASE_FOLD_RANGE, 0x0020, 32 }, { 0x0001e900, FC_CASE_FOLD_RANGE, 0x0022, 34 }, }; diff --git a/fc-cat/Makefile.in b/fc-cat/Makefile.in index 35c0502..75f5953 100644 --- a/fc-cat/Makefile.in +++ b/fc-cat/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,7 +157,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-cat.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -293,6 +294,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -446,8 +449,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -518,7 +521,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-cat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-cat.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -642,7 +651,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -715,7 +727,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-cat.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -761,7 +773,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-cat.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -784,20 +796,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-cat/fc-cat.c b/fc-cat/fc-cat.c index dfe30d7..69611bc 100644 --- a/fc-cat/fc-cat.c +++ b/fc-cat/fc-cat.c @@ -40,6 +40,7 @@ #include #include #include +#include #ifdef ENABLE_NLS #include @@ -271,6 +272,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1) #else diff --git a/fc-conflist/Makefile.in b/fc-conflist/Makefile.in index 2087171..212e2e9 100644 --- a/fc-conflist/Makefile.in +++ b/fc-conflist/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -159,7 +159,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-conflist.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -295,6 +296,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -448,8 +451,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -520,7 +523,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-conflist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-conflist.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -644,7 +653,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -717,7 +729,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-conflist.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -763,7 +775,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-conflist.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -786,20 +798,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-conflist/fc-conflist.c b/fc-conflist/fc-conflist.c index d02273b..5c40a0f 100644 --- a/fc-conflist/fc-conflist.c +++ b/fc-conflist/fc-conflist.c @@ -38,6 +38,7 @@ #include #include #include +#include #ifdef ENABLE_NLS #include @@ -102,6 +103,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "Vh", longopts, NULL)) != -1) #else diff --git a/fc-lang/Makefile.in b/fc-lang/Makefile.in index 5b3895b..eea0cbb 100644 --- a/fc-lang/Makefile.in +++ b/fc-lang/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -259,6 +259,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -684,8 +686,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/Tools.mk $(am__empty): @@ -756,7 +758,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/fc-lang/fc-lang.c b/fc-lang/fc-lang.c index 4a650e0..503d712 100644 --- a/fc-lang/fc-lang.c +++ b/fc-lang/fc-lang.c @@ -254,7 +254,7 @@ static int compare (const void *a, const void *b) #define MAX_LANG 1024 #define MAX_LANG_SET_MAP ((MAX_LANG + 31) / 32) -#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1 << ((entries[i].id) & 0x1f))) +#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1U << ((entries[i].id) & 0x1f))) int main (int argc FC_UNUSED, char **argv) diff --git a/fc-list/Makefile.in b/fc-list/Makefile.in index dd86470..e8ac374 100644 --- a/fc-list/Makefile.in +++ b/fc-list/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,7 +157,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-list.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -293,6 +294,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -446,8 +449,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -518,7 +521,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-list.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -642,7 +651,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -715,7 +727,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-list.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -761,7 +773,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-list.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -784,20 +796,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-list/fc-list.c b/fc-list/fc-list.c index 5cded50..2039acd 100644 --- a/fc-list/fc-list.c +++ b/fc-list/fc-list.c @@ -27,6 +27,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include #else @@ -117,6 +118,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "vbf:qVh", longopts, NULL)) != -1) #else diff --git a/fc-match/Makefile.in b/fc-match/Makefile.in index b611edd..c87053a 100644 --- a/fc-match/Makefile.in +++ b/fc-match/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,7 +157,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-match.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -293,6 +294,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -446,8 +449,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -518,7 +521,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-match.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-match.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -642,7 +651,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -715,7 +727,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-match.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -761,7 +773,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-match.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -784,20 +796,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-match/fc-match.c b/fc-match/fc-match.c index 7902707..dee6147 100644 --- a/fc-match/fc-match.c +++ b/fc-match/fc-match.c @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef ENABLE_NLS #include @@ -121,6 +122,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "asvbf:Vh", longopts, NULL)) != -1) #else diff --git a/fc-pattern/Makefile.in b/fc-pattern/Makefile.in index e053e37..7eb31b9 100644 --- a/fc-pattern/Makefile.in +++ b/fc-pattern/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,7 +157,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-pattern.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -293,6 +294,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -446,8 +449,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -518,7 +521,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-pattern.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-pattern.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -642,7 +651,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -715,7 +727,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-pattern.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -761,7 +773,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-pattern.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -784,20 +796,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-pattern/fc-pattern.c b/fc-pattern/fc-pattern.c index f63761c..7989b81 100644 --- a/fc-pattern/fc-pattern.c +++ b/fc-pattern/fc-pattern.c @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef ENABLE_NLS #include @@ -111,6 +112,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "cdf:Vh", longopts, NULL)) != -1) #else diff --git a/fc-query/Makefile.in b/fc-query/Makefile.in index ff7722c..c7e231e 100644 --- a/fc-query/Makefile.in +++ b/fc-query/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,7 +157,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-query.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -293,6 +294,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -446,8 +449,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -518,7 +521,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-query.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-query.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -642,7 +651,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -715,7 +727,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-query.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -761,7 +773,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-query.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -784,20 +796,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-query/fc-query.c b/fc-query/fc-query.c index 9da090d..fbffb84 100644 --- a/fc-query/fc-query.c +++ b/fc-query/fc-query.c @@ -39,6 +39,7 @@ #include #include #include +#include #ifdef ENABLE_NLS #include @@ -115,6 +116,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "i:bf:Vh", longopts, NULL)) != -1) #else diff --git a/fc-scan/Makefile.in b/fc-scan/Makefile.in index 776561c..153c33f 100644 --- a/fc-scan/Makefile.in +++ b/fc-scan/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,7 +157,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-scan.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -293,6 +294,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -446,8 +449,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -518,7 +521,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-scan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-scan.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -642,7 +651,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -715,7 +727,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-scan.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -761,7 +773,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-scan.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -784,20 +796,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fc-scan/fc-scan.c b/fc-scan/fc-scan.c index edb967c..9302ac5 100644 --- a/fc-scan/fc-scan.c +++ b/fc-scan/fc-scan.c @@ -39,6 +39,7 @@ #include #include #include +#include #ifdef ENABLE_NLS #include @@ -110,6 +111,7 @@ main (int argc, char **argv) #if HAVE_GETOPT_LONG || HAVE_GETOPT int c; + setlocale (LC_ALL, ""); #if HAVE_GETOPT_LONG while ((c = getopt_long (argc, argv, "bf:Vh", longopts, NULL)) != -1) #else diff --git a/fc-validate/Makefile.in b/fc-validate/Makefile.in index ede2808..dffa1a6 100644 --- a/fc-validate/Makefile.in +++ b/fc-validate/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -159,7 +159,8 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fc-validate.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -295,6 +296,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -448,8 +451,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -520,7 +523,13 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-validate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fc-validate.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -644,7 +653,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -717,7 +729,7 @@ clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-validate.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -763,7 +775,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fc-validate.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -786,20 +798,21 @@ uninstall-man: uninstall-man1 .MAKE: install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 .PRECIOUS: Makefile diff --git a/fontconfig.spec b/fontconfig.spec index e622914..c3f020f 100644 --- a/fontconfig.spec +++ b/fontconfig.spec @@ -4,7 +4,7 @@ Summary: Font configuration and customization library Name: fontconfig -Version: 2.13.0 +Version: 2.13.1 Release: 1 License: MIT Group: System Environment/Libraries diff --git a/fontconfig/Makefile.in b/fontconfig/Makefile.in index d79df21..6f3c47d 100644 --- a/fontconfig/Makefile.in +++ b/fontconfig/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -237,6 +237,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -387,8 +389,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -479,7 +481,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/fontconfig/fontconfig.h b/fontconfig/fontconfig.h index a89b22f..bac1dda 100644 --- a/fontconfig/fontconfig.h +++ b/fontconfig/fontconfig.h @@ -53,7 +53,7 @@ typedef int FcBool; #define FC_MAJOR 2 #define FC_MINOR 13 -#define FC_REVISION 0 +#define FC_REVISION 1 #define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION)) @@ -248,6 +248,11 @@ typedef enum _FcValueBinding { typedef struct _FcPattern FcPattern; +typedef struct _FcPatternIter { + void *dummy1; + void *dummy2; +} FcPatternIter; + typedef struct _FcLangSet FcLangSet; typedef struct _FcRange FcRange; @@ -376,6 +381,10 @@ FcDirCacheCreateUUID (FcChar8 *dir, FcBool force, FcConfig *config); +FcPublic FcBool +FcDirCacheDeleteUUID (const FcChar8 *dir, + FcConfig *config); + /* fccfg.c */ FcPublic FcChar8 * FcConfigHome (void); @@ -861,6 +870,9 @@ FcValueSave (FcValue v); FcPublic void FcPatternDestroy (FcPattern *p); +int +FcPatternObjectCount (const FcPattern *pat); + FcPublic FcBool FcPatternEqual (const FcPattern *pa, const FcPattern *pb); @@ -961,6 +973,31 @@ FcRangeCopy (const FcRange *r); FcPublic FcBool FcRangeGetDouble(const FcRange *range, double *begin, double *end); +FcPublic void +FcPatternIterStart (const FcPattern *pat, FcPatternIter *iter); + +FcPublic FcBool +FcPatternIterNext (const FcPattern *pat, FcPatternIter *iter); + +FcPublic FcBool +FcPatternIterEqual (const FcPattern *p1, FcPatternIter *i1, + const FcPattern *p2, FcPatternIter *i2); + +FcPublic FcBool +FcPatternFindIter (const FcPattern *pat, FcPatternIter *iter, const char *object); + +FcPublic FcBool +FcPatternIterIsValid (const FcPattern *pat, FcPatternIter *iter); + +FcPublic const char * +FcPatternIterGetObject (const FcPattern *pat, FcPatternIter *iter); + +FcPublic int +FcPatternIterValueCount (const FcPattern *pat, FcPatternIter *iter); + +FcPublic FcResult +FcPatternIterGetValue (const FcPattern *pat, FcPatternIter *iter, int id, FcValue *v, FcValueBinding *b); + /* fcweight.c */ FcPublic int diff --git a/install-sh b/install-sh index 0360b79..8175c64 100755 --- a/install-sh +++ b/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -271,15 +271,18 @@ do fi dst=$dst_arg - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. + # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst - dst=$dstdir/`basename "$src"` + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac dstdir_status=0 else dstdir=`dirname "$dst"` @@ -288,6 +291,11 @@ do fi fi + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + obsolete_mkdir_used=false if test $dstdir_status != 0; then @@ -324,34 +332,43 @@ do # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) + # Note that $RANDOM variable is not portable (e.g. dash); Use it + # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p' feature. if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi - rmdir "$tmpdir/d" "$tmpdir" + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; @@ -427,8 +444,8 @@ do else # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 @@ -493,7 +510,7 @@ do done # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/its/Makefile.in b/its/Makefile.in index ce751f1..8492db4 100644 --- a/its/Makefile.in +++ b/its/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -218,6 +218,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -371,8 +373,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -417,7 +419,10 @@ ctags CTAGS: cscope cscopelist: -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff --git a/missing b/missing index c6e3795..625aeb1 100755 --- a/missing +++ b/missing @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2016-01-11.22; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -101,9 +101,9 @@ else exit $st fi -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software program_details () { @@ -207,7 +207,7 @@ give_advice "$1" | sed -e '1s/^/WARNING: /' \ exit $st # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/po-conf/fontconfig-conf.pot b/po-conf/fontconfig-conf.pot index e9a16ea..9cfdd11 100644 --- a/po-conf/fontconfig-conf.pot +++ b/po-conf/fontconfig-conf.pot @@ -6,10 +6,10 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: fontconfig 2.13.0\n" +"Project-Id-Version: fontconfig 2.13.1\n" "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?" "product=fontconfig\n" -"POT-Creation-Date: 2018-03-06 12:50+0900\n" +"POT-Creation-Date: 2018-08-30 08:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/po-conf/zh_CN.gmo b/po-conf/zh_CN.gmo index 42b80774d25a264fdee6cd88bfe1bcb87ab3310a..2f7dbb9ae1c70eef59373ea88704095946723871 100644 GIT binary patch delta 26 hcmaDa`Cf8E7CWznuCalFfrXWUnYMw!=5qE5RseAO2WS8Q delta 26 hcmaDa`Cf8E7CW!8u7R0?p^=rTfwqC==5qE5Rse9q2WbER diff --git a/po-conf/zh_CN.po b/po-conf/zh_CN.po index 4c28289..f94f17a 100644 --- a/po-conf/zh_CN.po +++ b/po-conf/zh_CN.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: fontconfig 2.12.92\n" "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?" "product=fontconfig\n" -"POT-Creation-Date: 2018-03-06 12:50+0900\n" +"POT-Creation-Date: 2018-08-30 08:06+0000\n" "PO-Revision-Date: 2018-02-16 01:19-0600\n" "Last-Translator: Mingcong Bai \n" "Language-Team: AOSC\n" diff --git a/po/fontconfig.pot b/po/fontconfig.pot index b302227..5dd5883 100644 --- a/po/fontconfig.pot +++ b/po/fontconfig.pot @@ -6,10 +6,10 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: fontconfig 2.13.0\n" +"Project-Id-Version: fontconfig 2.13.1\n" "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?" "product=fontconfig\n" -"POT-Creation-Date: 2018-03-06 12:50+0900\n" +"POT-Creation-Date: 2018-08-30 08:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: fc-cache/fc-cache.c:98 +#: fc-cache/fc-cache.c:99 #, c-format msgid "" "usage: %s [-EfrsvVh] [-y SYSROOT] [--error-on-no-fonts] [--force|--really-" @@ -26,245 +26,245 @@ msgid "" "[dirs]\n" msgstr "" -#: fc-cache/fc-cache.c:101 +#: fc-cache/fc-cache.c:102 #, c-format msgid "usage: %s [-EfrsvVh] [-y SYSROOT] [dirs]\n" msgstr "" -#: fc-cache/fc-cache.c:104 +#: fc-cache/fc-cache.c:105 #, c-format msgid "" "Build font information caches in [dirs]\n" "(all directories in font configuration by default).\n" msgstr "" -#: fc-cache/fc-cache.c:108 +#: fc-cache/fc-cache.c:109 #, c-format msgid " -E, --error-on-no-fonts raise an error if no fonts in a directory\n" msgstr "" -#: fc-cache/fc-cache.c:109 +#: fc-cache/fc-cache.c:110 #, c-format msgid "" " -f, --force scan directories with apparently valid caches\n" msgstr "" -#: fc-cache/fc-cache.c:110 +#: fc-cache/fc-cache.c:111 #, c-format msgid " -r, --really-force erase all existing caches, then rescan\n" msgstr "" -#: fc-cache/fc-cache.c:111 +#: fc-cache/fc-cache.c:112 #, c-format msgid " -s, --system-only scan system-wide directories only\n" msgstr "" -#: fc-cache/fc-cache.c:112 +#: fc-cache/fc-cache.c:113 #, c-format msgid " -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\n" msgstr "" -#: fc-cache/fc-cache.c:113 +#: fc-cache/fc-cache.c:114 #, c-format msgid " -v, --verbose display status information while busy\n" msgstr "" -#: fc-cache/fc-cache.c:114 +#: fc-cache/fc-cache.c:115 #, c-format msgid " -V, --version display font config version and exit\n" msgstr "" -#: fc-cache/fc-cache.c:115 +#: fc-cache/fc-cache.c:116 #, c-format msgid " -h, --help display this help and exit\n" msgstr "" -#: fc-cache/fc-cache.c:117 +#: fc-cache/fc-cache.c:118 #, c-format msgid " -E (error-on-no-fonts)\n" msgstr "" -#: fc-cache/fc-cache.c:118 +#: fc-cache/fc-cache.c:119 #, c-format msgid " raise an error if no fonts in a directory\n" msgstr "" -#: fc-cache/fc-cache.c:119 +#: fc-cache/fc-cache.c:120 #, c-format msgid " -f (force) scan directories with apparently valid caches\n" msgstr "" -#: fc-cache/fc-cache.c:120 +#: fc-cache/fc-cache.c:121 #, c-format msgid " -r, (really force) erase all existing caches, then rescan\n" msgstr "" -#: fc-cache/fc-cache.c:121 +#: fc-cache/fc-cache.c:122 #, c-format msgid " -s (system) scan system-wide directories only\n" msgstr "" -#: fc-cache/fc-cache.c:122 +#: fc-cache/fc-cache.c:123 #, c-format msgid " -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\n" msgstr "" -#: fc-cache/fc-cache.c:123 +#: fc-cache/fc-cache.c:124 #, c-format msgid " -v (verbose) display status information while busy\n" msgstr "" -#: fc-cache/fc-cache.c:124 fc-cat/fc-cat.c:178 fc-list/fc-list.c:99 -#: fc-match/fc-match.c:103 fc-pattern/fc-pattern.c:97 +#: fc-cache/fc-cache.c:125 fc-cat/fc-cat.c:179 fc-list/fc-list.c:100 +#: fc-match/fc-match.c:104 fc-pattern/fc-pattern.c:98 #, c-format msgid " -V (version) display font config version and exit\n" msgstr "" -#: fc-cache/fc-cache.c:125 fc-cat/fc-cat.c:179 fc-list/fc-list.c:100 -#: fc-match/fc-match.c:104 fc-pattern/fc-pattern.c:98 +#: fc-cache/fc-cache.c:126 fc-cat/fc-cat.c:180 fc-list/fc-list.c:101 +#: fc-match/fc-match.c:105 fc-pattern/fc-pattern.c:99 #, c-format msgid " -h (help) display this help and exit\n" msgstr "" -#: fc-cache/fc-cache.c:162 +#: fc-cache/fc-cache.c:163 #, c-format msgid "skipping, looped directory detected\n" msgstr "" -#: fc-cache/fc-cache.c:172 +#: fc-cache/fc-cache.c:173 #, c-format msgid "skipping, no such directory\n" msgstr "" -#: fc-cache/fc-cache.c:185 +#: fc-cache/fc-cache.c:186 #, c-format msgid "\"%s\": not a directory, skipping\n" msgstr "" -#: fc-cache/fc-cache.c:210 +#: fc-cache/fc-cache.c:211 #, c-format msgid "\"%s\": scanning error\n" msgstr "" -#: fc-cache/fc-cache.c:219 +#: fc-cache/fc-cache.c:220 #, c-format msgid "skipping, existing cache is valid: %d fonts, %d dirs\n" msgstr "" -#: fc-cache/fc-cache.c:225 +#: fc-cache/fc-cache.c:226 #, c-format msgid "caching, new cache contents: %d fonts, %d dirs\n" msgstr "" -#: fc-cache/fc-cache.c:230 +#: fc-cache/fc-cache.c:231 #, c-format msgid "%s: failed to write cache\n" msgstr "" -#: fc-cache/fc-cache.c:239 +#: fc-cache/fc-cache.c:240 #, c-format msgid "%s: Can't create subdir set\n" msgstr "" -#: fc-cache/fc-cache.c:253 +#: fc-cache/fc-cache.c:254 #, c-format msgid "%s: Can't create subdir list\n" msgstr "" -#: fc-cache/fc-cache.c:359 fc-cat/fc-cat.c:305 +#: fc-cache/fc-cache.c:361 fc-cat/fc-cat.c:307 #, c-format msgid "%s: Can't initialize font config library\n" msgstr "" -#: fc-cache/fc-cache.c:369 +#: fc-cache/fc-cache.c:371 #, c-format msgid "%s: Can't create list of directories\n" msgstr "" -#: fc-cache/fc-cache.c:377 +#: fc-cache/fc-cache.c:379 #, c-format msgid "%s: Can't add directory\n" msgstr "" -#: fc-cache/fc-cache.c:389 +#: fc-cache/fc-cache.c:391 #, c-format msgid "Out of Memory\n" msgstr "" -#: fc-cache/fc-cache.c:421 +#: fc-cache/fc-cache.c:423 msgid "failed" msgstr "" -#: fc-cache/fc-cache.c:421 +#: fc-cache/fc-cache.c:423 msgid "succeeded" msgstr "" -#: fc-cat/fc-cat.c:159 +#: fc-cat/fc-cat.c:160 #, c-format msgid "usage: %s [-rv] [--recurse] [--verbose] [*-%s" msgstr "" -#: fc-cat/fc-cat.c:163 +#: fc-cat/fc-cat.c:164 #, c-format msgid "usage: %s [-rvVh] [*-%s" msgstr "" -#: fc-cat/fc-cat.c:166 +#: fc-cat/fc-cat.c:167 #, c-format msgid "Reads font information cache from:\n" msgstr "" -#: fc-cat/fc-cat.c:167 +#: fc-cat/fc-cat.c:168 #, c-format msgid " 1) specified fontconfig cache file\n" msgstr "" -#: fc-cat/fc-cat.c:168 +#: fc-cat/fc-cat.c:169 #, c-format msgid " 2) related to a particular font directory\n" msgstr "" -#: fc-cat/fc-cat.c:171 +#: fc-cat/fc-cat.c:172 #, c-format msgid " -r, --recurse recurse into subdirectories\n" msgstr "" -#: fc-cat/fc-cat.c:172 +#: fc-cat/fc-cat.c:173 #, c-format msgid " -v, --verbose be verbose\n" msgstr "" -#: fc-cat/fc-cat.c:173 fc-conflist/fc-conflist.c:87 fc-list/fc-list.c:92 -#: fc-match/fc-match.c:95 fc-pattern/fc-pattern.c:91 fc-query/fc-query.c:94 -#: fc-scan/fc-scan.c:92 fc-validate/fc-validate.c:95 +#: fc-cat/fc-cat.c:174 fc-conflist/fc-conflist.c:88 fc-list/fc-list.c:93 +#: fc-match/fc-match.c:96 fc-pattern/fc-pattern.c:92 fc-query/fc-query.c:95 +#: fc-scan/fc-scan.c:93 fc-validate/fc-validate.c:95 #, c-format msgid " -V, --version display font config version and exit\n" msgstr "" -#: fc-cat/fc-cat.c:174 fc-conflist/fc-conflist.c:88 fc-list/fc-list.c:93 -#: fc-match/fc-match.c:96 fc-pattern/fc-pattern.c:92 fc-query/fc-query.c:95 -#: fc-scan/fc-scan.c:93 fc-validate/fc-validate.c:96 +#: fc-cat/fc-cat.c:175 fc-conflist/fc-conflist.c:89 fc-list/fc-list.c:94 +#: fc-match/fc-match.c:97 fc-pattern/fc-pattern.c:93 fc-query/fc-query.c:96 +#: fc-scan/fc-scan.c:94 fc-validate/fc-validate.c:96 #, c-format msgid " -h, --help display this help and exit\n" msgstr "" -#: fc-cat/fc-cat.c:176 +#: fc-cat/fc-cat.c:177 #, c-format msgid " -r (recurse) recurse into subdirectories\n" msgstr "" -#: fc-cat/fc-cat.c:177 +#: fc-cat/fc-cat.c:178 #, c-format msgid " -v (verbose) be verbose\n" msgstr "" -#: fc-cat/fc-cat.c:314 fc-cat/fc-cat.c:323 fc-cat/fc-cat.c:335 -#: fc-cat/fc-cat.c:343 +#: fc-cat/fc-cat.c:316 fc-cat/fc-cat.c:325 fc-cat/fc-cat.c:337 +#: fc-cat/fc-cat.c:345 #, c-format msgid "%s: malloc failure\n" msgstr "" -#: fc-cat/fc-cat.c:383 +#: fc-cat/fc-cat.c:385 #, c-format msgid "" "Directory: %s\n" @@ -272,243 +272,243 @@ msgid "" "--------\n" msgstr "" -#: fc-conflist/fc-conflist.c:78 +#: fc-conflist/fc-conflist.c:79 #, c-format msgid "usage: %s [-Vh] [--version] [--help]\n" msgstr "" -#: fc-conflist/fc-conflist.c:81 +#: fc-conflist/fc-conflist.c:82 #, c-format msgid "usage: %s [-Vh]\n" msgstr "" -#: fc-conflist/fc-conflist.c:84 +#: fc-conflist/fc-conflist.c:85 #, c-format msgid "Show the ruleset files information on the system\n" msgstr "" -#: fc-conflist/fc-conflist.c:90 fc-validate/fc-validate.c:101 +#: fc-conflist/fc-conflist.c:91 fc-validate/fc-validate.c:101 #, c-format msgid " -V (version) display font config version and exit\n" msgstr "" -#: fc-conflist/fc-conflist.c:91 fc-validate/fc-validate.c:102 +#: fc-conflist/fc-conflist.c:92 fc-validate/fc-validate.c:102 #, c-format msgid " -h (help) display this help and exit\n" msgstr "" -#: fc-list/fc-list.c:79 +#: fc-list/fc-list.c:80 #, c-format msgid "" "usage: %s [-vbqVh] [-f FORMAT] [--verbose] [--brief] [--format=FORMAT] [--" "quiet] [--version] [--help] [pattern] {element ...} \n" msgstr "" -#: fc-list/fc-list.c:82 +#: fc-list/fc-list.c:83 #, c-format msgid "usage: %s [-vbqVh] [-f FORMAT] [pattern] {element ...} \n" msgstr "" -#: fc-list/fc-list.c:85 +#: fc-list/fc-list.c:86 #, c-format msgid "List fonts matching [pattern]\n" msgstr "" -#: fc-list/fc-list.c:88 fc-match/fc-match.c:92 +#: fc-list/fc-list.c:89 fc-match/fc-match.c:93 #, c-format msgid " -v, --verbose display entire font pattern verbosely\n" msgstr "" -#: fc-list/fc-list.c:89 fc-match/fc-match.c:93 +#: fc-list/fc-list.c:90 fc-match/fc-match.c:94 #, c-format msgid " -b, --brief display entire font pattern briefly\n" msgstr "" -#: fc-list/fc-list.c:90 fc-match/fc-match.c:94 fc-pattern/fc-pattern.c:90 -#: fc-query/fc-query.c:93 fc-scan/fc-scan.c:91 +#: fc-list/fc-list.c:91 fc-match/fc-match.c:95 fc-pattern/fc-pattern.c:91 +#: fc-query/fc-query.c:94 fc-scan/fc-scan.c:92 #, c-format msgid " -f, --format=FORMAT use the given output format\n" msgstr "" -#: fc-list/fc-list.c:91 +#: fc-list/fc-list.c:92 #, c-format msgid "" " -q, --quiet suppress all normal output, exit 1 if no fonts " "matched\n" msgstr "" -#: fc-list/fc-list.c:95 fc-match/fc-match.c:100 +#: fc-list/fc-list.c:96 fc-match/fc-match.c:101 #, c-format msgid " -v (verbose) display entire font pattern verbosely\n" msgstr "" -#: fc-list/fc-list.c:96 fc-match/fc-match.c:101 +#: fc-list/fc-list.c:97 fc-match/fc-match.c:102 #, c-format msgid " -b (brief) display entire font pattern briefly\n" msgstr "" -#: fc-list/fc-list.c:97 fc-match/fc-match.c:102 fc-pattern/fc-pattern.c:96 +#: fc-list/fc-list.c:98 fc-match/fc-match.c:103 fc-pattern/fc-pattern.c:97 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr "" -#: fc-list/fc-list.c:98 +#: fc-list/fc-list.c:99 #, c-format msgid "" " -q, (quiet) suppress all normal output, exit 1 if no fonts " "matched\n" msgstr "" -#: fc-list/fc-list.c:159 fc-match/fc-match.c:166 fc-pattern/fc-pattern.c:150 +#: fc-list/fc-list.c:161 fc-match/fc-match.c:168 fc-pattern/fc-pattern.c:152 #, c-format msgid "Unable to parse the pattern\n" msgstr "" -#: fc-match/fc-match.c:81 +#: fc-match/fc-match.c:82 #, c-format msgid "" "usage: %s [-savbVh] [-f FORMAT] [--sort] [--all] [--verbose] [--brief] [--" "format=FORMAT] [--version] [--help] [pattern] {element...}\n" msgstr "" -#: fc-match/fc-match.c:84 +#: fc-match/fc-match.c:85 #, c-format msgid "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n" msgstr "" -#: fc-match/fc-match.c:87 fc-pattern/fc-pattern.c:85 +#: fc-match/fc-match.c:88 fc-pattern/fc-pattern.c:86 #, c-format msgid "List best font matching [pattern]\n" msgstr "" -#: fc-match/fc-match.c:90 +#: fc-match/fc-match.c:91 #, c-format msgid " -s, --sort display sorted list of matches\n" msgstr "" -#: fc-match/fc-match.c:91 +#: fc-match/fc-match.c:92 #, c-format msgid " -a, --all display unpruned sorted list of matches\n" msgstr "" -#: fc-match/fc-match.c:98 +#: fc-match/fc-match.c:99 #, c-format msgid " -s, (sort) display sorted list of matches\n" msgstr "" -#: fc-match/fc-match.c:99 +#: fc-match/fc-match.c:100 #, c-format msgid " -a (all) display unpruned sorted list of matches\n" msgstr "" -#: fc-match/fc-match.c:195 +#: fc-match/fc-match.c:197 #, c-format msgid "No fonts installed on the system\n" msgstr "" -#: fc-pattern/fc-pattern.c:79 +#: fc-pattern/fc-pattern.c:80 #, c-format msgid "" "usage: %s [-cdVh] [-f FORMAT] [--config] [--default] [--verbose] [--" "format=FORMAT] [--version] [--help] [pattern] {element...}\n" msgstr "" -#: fc-pattern/fc-pattern.c:82 +#: fc-pattern/fc-pattern.c:83 #, c-format msgid "usage: %s [-cdVh] [-f FORMAT] [pattern] {element...}\n" msgstr "" -#: fc-pattern/fc-pattern.c:88 +#: fc-pattern/fc-pattern.c:89 #, c-format msgid " -c, --config perform config substitution on pattern\n" msgstr "" -#: fc-pattern/fc-pattern.c:89 +#: fc-pattern/fc-pattern.c:90 #, c-format msgid " -d, --default perform default substitution on pattern\n" msgstr "" -#: fc-pattern/fc-pattern.c:94 +#: fc-pattern/fc-pattern.c:95 #, c-format msgid " -c, (config) perform config substitution on pattern\n" msgstr "" -#: fc-pattern/fc-pattern.c:95 +#: fc-pattern/fc-pattern.c:96 #, c-format msgid " -d, (default) perform default substitution on pattern\n" msgstr "" -#: fc-query/fc-query.c:82 +#: fc-query/fc-query.c:83 #, c-format msgid "" "usage: %s [-bVh] [-i index] [-f FORMAT] [--index index] [--brief] [--format " "FORMAT] [--version] [--help] font-file...\n" msgstr "" -#: fc-query/fc-query.c:85 +#: fc-query/fc-query.c:86 #, c-format msgid "usage: %s [-bVh] [-i index] [-f FORMAT] font-file...\n" msgstr "" -#: fc-query/fc-query.c:88 +#: fc-query/fc-query.c:89 #, c-format msgid "Query font files and print resulting pattern(s)\n" msgstr "" -#: fc-query/fc-query.c:91 fc-validate/fc-validate.c:92 +#: fc-query/fc-query.c:92 fc-validate/fc-validate.c:92 #, c-format msgid " -i, --index INDEX display the INDEX face of each font file only\n" msgstr "" -#: fc-query/fc-query.c:92 fc-scan/fc-scan.c:90 +#: fc-query/fc-query.c:93 fc-scan/fc-scan.c:91 #, c-format msgid " -b, --brief display font pattern briefly\n" msgstr "" -#: fc-query/fc-query.c:97 +#: fc-query/fc-query.c:98 #, c-format msgid "" " -i INDEX (index) display the INDEX face of each font file only\n" msgstr "" -#: fc-query/fc-query.c:98 fc-scan/fc-scan.c:95 +#: fc-query/fc-query.c:99 fc-scan/fc-scan.c:96 #, c-format msgid " -b (brief) display font pattern briefly\n" msgstr "" -#: fc-query/fc-query.c:99 fc-scan/fc-scan.c:96 +#: fc-query/fc-query.c:100 fc-scan/fc-scan.c:97 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr "" -#: fc-query/fc-query.c:100 fc-scan/fc-scan.c:97 +#: fc-query/fc-query.c:101 fc-scan/fc-scan.c:98 #, c-format msgid " -V (version) display font config version and exit\n" msgstr "" -#: fc-query/fc-query.c:101 fc-scan/fc-scan.c:98 +#: fc-query/fc-query.c:102 fc-scan/fc-scan.c:99 #, c-format msgid " -h (help) display this help and exit\n" msgstr "" -#: fc-query/fc-query.c:158 +#: fc-query/fc-query.c:160 #, c-format msgid "Can't query face %u of font file %s\n" msgstr "" -#: fc-scan/fc-scan.c:81 +#: fc-scan/fc-scan.c:82 #, c-format msgid "" "usage: %s [-bVh] [-f FORMAT] [--brief] [--format FORMAT] [--version] [--" "help] font-file...\n" msgstr "" -#: fc-scan/fc-scan.c:84 +#: fc-scan/fc-scan.c:85 #, c-format msgid "usage: %s [-bVh] [-f FORMAT] font-file...\n" msgstr "" -#: fc-scan/fc-scan.c:87 +#: fc-scan/fc-scan.c:88 #, c-format msgid "Scan font files and directories, and print resulting pattern(s)\n" msgstr "" @@ -576,6 +576,6 @@ msgstr "" msgid "%s:%d Satisfy the coverage for %s language\n" msgstr "" -#: src/fccfg.c:2657 +#: src/fccfg.c:2701 msgid "No description" msgstr "" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo index 8eb2175083786559bf5001db6ab8abc88028f1b2..788f6fb65c4205aa5c0daa7f2c3c13d1ee300641 100644 GIT binary patch delta 26 hcmexZ^s#6|tpcxwuCalFfrXWUnYMw!<}QWj5&(x92>1X1 delta 26 hcmexZ^s#6|tpcyHu7R0?p^=rTfwqC=<}QWj5&(wb2>Ad2 diff --git a/po/zh_CN.po b/po/zh_CN.po index 4bb67c2..ebb192d 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: fontconfig 2.12.92\n" "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?" "product=fontconfig\n" -"POT-Creation-Date: 2018-03-06 12:50+0900\n" +"POT-Creation-Date: 2018-08-30 08:06+0000\n" "PO-Revision-Date: 2018-02-16 01:41-0600\n" "Last-Translator: Mingcong Bai \n" "Language-Team: AOSC\n" @@ -23,7 +23,7 @@ msgstr "" "X-Generator: Poedit 2.0.5\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: fc-cache/fc-cache.c:98 +#: fc-cache/fc-cache.c:99 #, c-format msgid "" "usage: %s [-EfrsvVh] [-y SYSROOT] [--error-on-no-fonts] [--force|--really-" @@ -34,12 +34,12 @@ msgstr "" "force] [--sysroot=<系统根>] [--system-only] [--verbose] [--version] [--help] " "[目录]\n" -#: fc-cache/fc-cache.c:101 +#: fc-cache/fc-cache.c:102 #, c-format msgid "usage: %s [-EfrsvVh] [-y SYSROOT] [dirs]\n" msgstr "用法:%s [-EfrsvVh] [-y <系统根>] [目录]\n" -#: fc-cache/fc-cache.c:104 +#: fc-cache/fc-cache.c:105 #, c-format msgid "" "Build font information caches in [dirs]\n" @@ -48,233 +48,233 @@ msgstr "" "在 [目录] 构建字体信息缓存\n" "(默认为所有字体配置中定义的目录)。\n" -#: fc-cache/fc-cache.c:108 +#: fc-cache/fc-cache.c:109 #, c-format msgid " -E, --error-on-no-fonts raise an error if no fonts in a directory\n" msgstr " -E, --error-on-no-fonts 在目录中无字体时报错\n" -#: fc-cache/fc-cache.c:109 +#: fc-cache/fc-cache.c:110 #, c-format msgid "" " -f, --force scan directories with apparently valid caches\n" msgstr " -f, --force 强制扫描已有有效缓存的目录\n" -#: fc-cache/fc-cache.c:110 +#: fc-cache/fc-cache.c:111 #, c-format msgid " -r, --really-force erase all existing caches, then rescan\n" msgstr " -r, --really-force 清空所有缓存并重新扫描\n" -#: fc-cache/fc-cache.c:111 +#: fc-cache/fc-cache.c:112 #, c-format msgid " -s, --system-only scan system-wide directories only\n" msgstr " -s, --system-only 仅扫描系统全局目录\n" -#: fc-cache/fc-cache.c:112 +#: fc-cache/fc-cache.c:113 #, c-format msgid " -y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning\n" msgstr " -y, --sysroot=<系统根> 扫描时将 <系统根> 值附加到路径开头\n" -#: fc-cache/fc-cache.c:113 +#: fc-cache/fc-cache.c:114 #, c-format msgid " -v, --verbose display status information while busy\n" msgstr " -v, --verbose 在程序工作时显示状态信息\n" -#: fc-cache/fc-cache.c:114 +#: fc-cache/fc-cache.c:115 #, c-format msgid " -V, --version display font config version and exit\n" msgstr " -V, --version 显示 Fontconfig 版本并退出\n" -#: fc-cache/fc-cache.c:115 +#: fc-cache/fc-cache.c:116 #, c-format msgid " -h, --help display this help and exit\n" msgstr " -h, --help 显示该帮助信息并退出\n" -#: fc-cache/fc-cache.c:117 +#: fc-cache/fc-cache.c:118 #, c-format msgid " -E (error-on-no-fonts)\n" msgstr " -E (error-on-no-fonts)\n" -#: fc-cache/fc-cache.c:118 +#: fc-cache/fc-cache.c:119 #, c-format msgid " raise an error if no fonts in a directory\n" msgstr " 在目录中无字体时报错\n" -#: fc-cache/fc-cache.c:119 +#: fc-cache/fc-cache.c:120 #, c-format msgid " -f (force) scan directories with apparently valid caches\n" msgstr " -f (force) 强制扫描带有有效缓存的目录\n" -#: fc-cache/fc-cache.c:120 +#: fc-cache/fc-cache.c:121 #, c-format msgid " -r, (really force) erase all existing caches, then rescan\n" msgstr " -r, (really-force) 清空所有缓存并重新扫描\n" -#: fc-cache/fc-cache.c:121 +#: fc-cache/fc-cache.c:122 #, c-format msgid " -s (system) scan system-wide directories only\n" msgstr " -s (system) 仅扫描系统全局目录\n" -#: fc-cache/fc-cache.c:122 +#: fc-cache/fc-cache.c:123 #, c-format msgid " -y SYSROOT (sysroot) prepend SYSROOT to all paths for scanning\n" msgstr " -y <系统根> (sysroot) 扫描时将 <系统根> 值附加到路径开头\n" -#: fc-cache/fc-cache.c:123 +#: fc-cache/fc-cache.c:124 #, c-format msgid " -v (verbose) display status information while busy\n" msgstr " -v (verbose) 在程序工作时显示状态信息\n" -#: fc-cache/fc-cache.c:124 fc-cat/fc-cat.c:178 fc-list/fc-list.c:99 -#: fc-match/fc-match.c:103 fc-pattern/fc-pattern.c:97 +#: fc-cache/fc-cache.c:125 fc-cat/fc-cat.c:179 fc-list/fc-list.c:100 +#: fc-match/fc-match.c:104 fc-pattern/fc-pattern.c:98 #, c-format msgid " -V (version) display font config version and exit\n" msgstr " -V (version) 显示 Fontconfig 版本并退出\n" -#: fc-cache/fc-cache.c:125 fc-cat/fc-cat.c:179 fc-list/fc-list.c:100 -#: fc-match/fc-match.c:104 fc-pattern/fc-pattern.c:98 +#: fc-cache/fc-cache.c:126 fc-cat/fc-cat.c:180 fc-list/fc-list.c:101 +#: fc-match/fc-match.c:105 fc-pattern/fc-pattern.c:99 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (help) 显示该帮助信息并退出\n" -#: fc-cache/fc-cache.c:162 +#: fc-cache/fc-cache.c:163 #, c-format msgid "skipping, looped directory detected\n" msgstr "跳过,探测到循环目录\n" -#: fc-cache/fc-cache.c:172 +#: fc-cache/fc-cache.c:173 #, c-format msgid "skipping, no such directory\n" msgstr "跳过,无此目录\n" -#: fc-cache/fc-cache.c:185 +#: fc-cache/fc-cache.c:186 #, c-format msgid "\"%s\": not a directory, skipping\n" msgstr "“%s”:不是一个目录,跳过\n" -#: fc-cache/fc-cache.c:210 +#: fc-cache/fc-cache.c:211 #, c-format msgid "\"%s\": scanning error\n" msgstr "“%s”:扫描错误\n" -#: fc-cache/fc-cache.c:219 +#: fc-cache/fc-cache.c:220 #, c-format msgid "skipping, existing cache is valid: %d fonts, %d dirs\n" msgstr "跳过,当前缓存有效:%d 个字体,%d 个目录\n" -#: fc-cache/fc-cache.c:225 +#: fc-cache/fc-cache.c:226 #, c-format msgid "caching, new cache contents: %d fonts, %d dirs\n" msgstr "正在生成缓存,新增缓存内容:%d 个字体,%d 个目录\n" -#: fc-cache/fc-cache.c:230 +#: fc-cache/fc-cache.c:231 #, c-format msgid "%s: failed to write cache\n" msgstr "%s:无法写入缓存\n" -#: fc-cache/fc-cache.c:239 +#: fc-cache/fc-cache.c:240 #, c-format msgid "%s: Can't create subdir set\n" msgstr "%s:无法创建子目录集\n" -#: fc-cache/fc-cache.c:253 +#: fc-cache/fc-cache.c:254 #, c-format msgid "%s: Can't create subdir list\n" msgstr "%s:无法创建子目录列表\n" -#: fc-cache/fc-cache.c:359 fc-cat/fc-cat.c:305 +#: fc-cache/fc-cache.c:361 fc-cat/fc-cat.c:307 #, c-format msgid "%s: Can't initialize font config library\n" msgstr "%s:无法初始化 Fontconfig 库\n" -#: fc-cache/fc-cache.c:369 +#: fc-cache/fc-cache.c:371 #, c-format msgid "%s: Can't create list of directories\n" msgstr "%s:无法创建目录列表\n" -#: fc-cache/fc-cache.c:377 +#: fc-cache/fc-cache.c:379 #, c-format msgid "%s: Can't add directory\n" msgstr "%s:无法添加目录\n" -#: fc-cache/fc-cache.c:389 +#: fc-cache/fc-cache.c:391 #, c-format msgid "Out of Memory\n" msgstr "内存耗尽\n" -#: fc-cache/fc-cache.c:421 +#: fc-cache/fc-cache.c:423 msgid "failed" msgstr "缓存生成失败" -#: fc-cache/fc-cache.c:421 +#: fc-cache/fc-cache.c:423 msgid "succeeded" msgstr "缓存生成成功" -#: fc-cat/fc-cat.c:159 +#: fc-cat/fc-cat.c:160 #, c-format msgid "usage: %s [-rv] [--recurse] [--verbose] [*-%s" msgstr "用法:%s [-rv] [--recurse] [--verbose] [*-%s" -#: fc-cat/fc-cat.c:163 +#: fc-cat/fc-cat.c:164 #, c-format msgid "usage: %s [-rvVh] [*-%s" msgstr "用法:%s [-rvVh] [*-%s" -#: fc-cat/fc-cat.c:166 +#: fc-cat/fc-cat.c:167 #, c-format msgid "Reads font information cache from:\n" msgstr "从此处读取字体信息缓存:\n" -#: fc-cat/fc-cat.c:167 +#: fc-cat/fc-cat.c:168 #, c-format msgid " 1) specified fontconfig cache file\n" msgstr "1. 指定的 Fontconfig 缓存文件\n" -#: fc-cat/fc-cat.c:168 +#: fc-cat/fc-cat.c:169 #, c-format msgid " 2) related to a particular font directory\n" msgstr "2. 相对于某个字体目录\n" -#: fc-cat/fc-cat.c:171 +#: fc-cat/fc-cat.c:172 #, c-format msgid " -r, --recurse recurse into subdirectories\n" msgstr " -r, --recurse 递归进入子目录\n" -#: fc-cat/fc-cat.c:172 +#: fc-cat/fc-cat.c:173 #, c-format msgid " -v, --verbose be verbose\n" msgstr " -v, --verbose 输出详尽信息\n" -#: fc-cat/fc-cat.c:173 fc-conflist/fc-conflist.c:87 fc-list/fc-list.c:92 -#: fc-match/fc-match.c:95 fc-pattern/fc-pattern.c:91 fc-query/fc-query.c:94 -#: fc-scan/fc-scan.c:92 fc-validate/fc-validate.c:95 +#: fc-cat/fc-cat.c:174 fc-conflist/fc-conflist.c:88 fc-list/fc-list.c:93 +#: fc-match/fc-match.c:96 fc-pattern/fc-pattern.c:92 fc-query/fc-query.c:95 +#: fc-scan/fc-scan.c:93 fc-validate/fc-validate.c:95 #, c-format msgid " -V, --version display font config version and exit\n" msgstr " -V, --version 显示 Fontconfig 版本并退出\n" -#: fc-cat/fc-cat.c:174 fc-conflist/fc-conflist.c:88 fc-list/fc-list.c:93 -#: fc-match/fc-match.c:96 fc-pattern/fc-pattern.c:92 fc-query/fc-query.c:95 -#: fc-scan/fc-scan.c:93 fc-validate/fc-validate.c:96 +#: fc-cat/fc-cat.c:175 fc-conflist/fc-conflist.c:89 fc-list/fc-list.c:94 +#: fc-match/fc-match.c:97 fc-pattern/fc-pattern.c:93 fc-query/fc-query.c:96 +#: fc-scan/fc-scan.c:94 fc-validate/fc-validate.c:96 #, c-format msgid " -h, --help display this help and exit\n" msgstr " -h, --help 显示该帮助信息并退出\n" -#: fc-cat/fc-cat.c:176 +#: fc-cat/fc-cat.c:177 #, c-format msgid " -r (recurse) recurse into subdirectories\n" msgstr " -r (recurse) 递归进入子目录\n" -#: fc-cat/fc-cat.c:177 +#: fc-cat/fc-cat.c:178 #, c-format msgid " -v (verbose) be verbose\n" msgstr " -v (verbose) 输出详尽信息\n" -#: fc-cat/fc-cat.c:314 fc-cat/fc-cat.c:323 fc-cat/fc-cat.c:335 -#: fc-cat/fc-cat.c:343 +#: fc-cat/fc-cat.c:316 fc-cat/fc-cat.c:325 fc-cat/fc-cat.c:337 +#: fc-cat/fc-cat.c:345 #, c-format msgid "%s: malloc failure\n" msgstr "%s:无法分配内存 (malloc)\n" -#: fc-cat/fc-cat.c:383 +#: fc-cat/fc-cat.c:385 #, c-format msgid "" "Directory: %s\n" @@ -285,32 +285,32 @@ msgstr "" "缓存:%s\n" "--------\n" -#: fc-conflist/fc-conflist.c:78 +#: fc-conflist/fc-conflist.c:79 #, c-format msgid "usage: %s [-Vh] [--version] [--help]\n" msgstr "用法:%s [-Vh] [--version] [--help]\n" -#: fc-conflist/fc-conflist.c:81 +#: fc-conflist/fc-conflist.c:82 #, c-format msgid "usage: %s [-Vh]\n" msgstr "用法:%s [-Vh]\n" -#: fc-conflist/fc-conflist.c:84 +#: fc-conflist/fc-conflist.c:85 #, c-format msgid "Show the ruleset files information on the system\n" msgstr "显示当前系统中的规则集文件\n" -#: fc-conflist/fc-conflist.c:90 fc-validate/fc-validate.c:101 +#: fc-conflist/fc-conflist.c:91 fc-validate/fc-validate.c:101 #, c-format msgid " -V (version) display font config version and exit\n" msgstr " -V (版本) 显示 Fontconfig 版本并退出\n" -#: fc-conflist/fc-conflist.c:91 fc-validate/fc-validate.c:102 +#: fc-conflist/fc-conflist.c:92 fc-validate/fc-validate.c:102 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (帮助) 显示该帮助信息并退出\n" -#: fc-list/fc-list.c:79 +#: fc-list/fc-list.c:80 #, c-format msgid "" "usage: %s [-vbqVh] [-f FORMAT] [--verbose] [--brief] [--format=FORMAT] [--" @@ -319,67 +319,67 @@ msgstr "" "用法:%s [-vbqVh] [-f <输出格式>] [--verbose] [--brief] [--format=<输出格式" ">] [--quiet] [--version] [--help] [匹配模式] {元素 …} \n" -#: fc-list/fc-list.c:82 +#: fc-list/fc-list.c:83 #, c-format msgid "usage: %s [-vbqVh] [-f FORMAT] [pattern] {element ...} \n" msgstr "用法:%s [-vbqVh] [-f <输出格式>] [匹配模式] {元素 …} \n" -#: fc-list/fc-list.c:85 +#: fc-list/fc-list.c:86 #, c-format msgid "List fonts matching [pattern]\n" msgstr "列出符合 [匹配模式] 的字体\n" -#: fc-list/fc-list.c:88 fc-match/fc-match.c:92 +#: fc-list/fc-list.c:89 fc-match/fc-match.c:93 #, c-format msgid " -v, --verbose display entire font pattern verbosely\n" msgstr " -v, --verbose 详尽显示整个字体匹配模式\n" -#: fc-list/fc-list.c:89 fc-match/fc-match.c:93 +#: fc-list/fc-list.c:90 fc-match/fc-match.c:94 #, c-format msgid " -b, --brief display entire font pattern briefly\n" msgstr " -b, --brief 简略显示整个字体匹配模式\n" -#: fc-list/fc-list.c:90 fc-match/fc-match.c:94 fc-pattern/fc-pattern.c:90 -#: fc-query/fc-query.c:93 fc-scan/fc-scan.c:91 +#: fc-list/fc-list.c:91 fc-match/fc-match.c:95 fc-pattern/fc-pattern.c:91 +#: fc-query/fc-query.c:94 fc-scan/fc-scan.c:92 #, c-format msgid " -f, --format=FORMAT use the given output format\n" msgstr " -f, --format=<输出格式> 使用指定的输出格式\n" -#: fc-list/fc-list.c:91 +#: fc-list/fc-list.c:92 #, c-format msgid "" " -q, --quiet suppress all normal output, exit 1 if no fonts " "matched\n" msgstr " -q, --quiet 静默所有正常输出,无匹配字体时返回退出代码 1\n" -#: fc-list/fc-list.c:95 fc-match/fc-match.c:100 +#: fc-list/fc-list.c:96 fc-match/fc-match.c:101 #, c-format msgid " -v (verbose) display entire font pattern verbosely\n" msgstr " -v (verbose) 详尽显示整个字体匹配模式\n" -#: fc-list/fc-list.c:96 fc-match/fc-match.c:101 +#: fc-list/fc-list.c:97 fc-match/fc-match.c:102 #, c-format msgid " -b (brief) display entire font pattern briefly\n" msgstr " -b (brief) 简略显示整个字体匹配模式\n" -#: fc-list/fc-list.c:97 fc-match/fc-match.c:102 fc-pattern/fc-pattern.c:96 +#: fc-list/fc-list.c:98 fc-match/fc-match.c:103 fc-pattern/fc-pattern.c:97 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr " -f <输出格式> (format) 使用指定的输出格式\n" -#: fc-list/fc-list.c:98 +#: fc-list/fc-list.c:99 #, c-format msgid "" " -q, (quiet) suppress all normal output, exit 1 if no fonts " "matched\n" msgstr " -q, (quiet) 静默所有正常输出,无匹配字体时返回退出代码 1\n" -#: fc-list/fc-list.c:159 fc-match/fc-match.c:166 fc-pattern/fc-pattern.c:150 +#: fc-list/fc-list.c:161 fc-match/fc-match.c:168 fc-pattern/fc-pattern.c:152 #, c-format msgid "Unable to parse the pattern\n" msgstr "无法解析匹配模式\n" -#: fc-match/fc-match.c:81 +#: fc-match/fc-match.c:82 #, c-format msgid "" "usage: %s [-savbVh] [-f FORMAT] [--sort] [--all] [--verbose] [--brief] [--" @@ -388,42 +388,42 @@ msgstr "" "用法:%s [-savbVh] [-f <输出格式>] [--sort] [--all] [--verbose] [--brief] [--" "format=<输出格式>] [--version] [--help] [匹配模式] {元素…}\n" -#: fc-match/fc-match.c:84 +#: fc-match/fc-match.c:85 #, c-format msgid "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n" msgstr "用法:%s [-savVh] [-f <输出格式>] [匹配模式] {元素…}\n" -#: fc-match/fc-match.c:87 fc-pattern/fc-pattern.c:85 +#: fc-match/fc-match.c:88 fc-pattern/fc-pattern.c:86 #, c-format msgid "List best font matching [pattern]\n" msgstr "列出符合 [匹配模式] 的最佳字体\n" -#: fc-match/fc-match.c:90 +#: fc-match/fc-match.c:91 #, c-format msgid " -s, --sort display sorted list of matches\n" msgstr " -s, --sort 显示已排序的匹配列表\n" -#: fc-match/fc-match.c:91 +#: fc-match/fc-match.c:92 #, c-format msgid " -a, --all display unpruned sorted list of matches\n" msgstr " -a, --all 显示未修剪而已排序的匹配列表\n" -#: fc-match/fc-match.c:98 +#: fc-match/fc-match.c:99 #, c-format msgid " -s, (sort) display sorted list of matches\n" msgstr " -s, (sort) 显示已排序的匹配列表\n" -#: fc-match/fc-match.c:99 +#: fc-match/fc-match.c:100 #, c-format msgid " -a (all) display unpruned sorted list of matches\n" msgstr " -a (all) 显示未修剪而已排序的匹配列表\n" -#: fc-match/fc-match.c:195 +#: fc-match/fc-match.c:197 #, c-format msgid "No fonts installed on the system\n" msgstr "系统中未安装任何字体\n" -#: fc-pattern/fc-pattern.c:79 +#: fc-pattern/fc-pattern.c:80 #, c-format msgid "" "usage: %s [-cdVh] [-f FORMAT] [--config] [--default] [--verbose] [--" @@ -432,32 +432,32 @@ msgstr "" "用法:%s [-cdVh] [-f <输出格式>] [--config] [--default] [--verbose] [--" "format=<输出格式>] [--version] [--help] [匹配模式] {元素…}\n" -#: fc-pattern/fc-pattern.c:82 +#: fc-pattern/fc-pattern.c:83 #, c-format msgid "usage: %s [-cdVh] [-f FORMAT] [pattern] {element...}\n" msgstr "用法:%s [-cdVh] [-f <输出格式>] [匹配模式] {元素…}\n" -#: fc-pattern/fc-pattern.c:88 +#: fc-pattern/fc-pattern.c:89 #, c-format msgid " -c, --config perform config substitution on pattern\n" msgstr " -c, --config 根据匹配模式进行配置替换\n" -#: fc-pattern/fc-pattern.c:89 +#: fc-pattern/fc-pattern.c:90 #, c-format msgid " -d, --default perform default substitution on pattern\n" msgstr " -d, --default 根据匹配模式进行默认值替换\n" -#: fc-pattern/fc-pattern.c:94 +#: fc-pattern/fc-pattern.c:95 #, c-format msgid " -c, (config) perform config substitution on pattern\n" msgstr " -c, (config) 根据匹配模式进行配置替换\n" -#: fc-pattern/fc-pattern.c:95 +#: fc-pattern/fc-pattern.c:96 #, c-format msgid " -d, (default) perform default substitution on pattern\n" msgstr " -d, (default) 根据匹配模式进行默认值替换\n" -#: fc-query/fc-query.c:82 +#: fc-query/fc-query.c:83 #, c-format msgid "" "usage: %s [-bVh] [-i index] [-f FORMAT] [--index index] [--brief] [--format " @@ -466,60 +466,60 @@ msgstr "" "用法:%s [-bVh] [-i index] [-f <输出格式>] [--index index] [--brief] [--" "format <输出格式>] [--version] [--help] 字体文件…\n" -#: fc-query/fc-query.c:85 +#: fc-query/fc-query.c:86 #, c-format msgid "usage: %s [-bVh] [-i index] [-f FORMAT] font-file...\n" msgstr "用法:%s [-bVh] [-i index] [-f <输出格式>] 字体文件…\n" -#: fc-query/fc-query.c:88 +#: fc-query/fc-query.c:89 #, c-format msgid "Query font files and print resulting pattern(s)\n" msgstr "" "查询字体文件并输出匹配模式\n" "\n" -#: fc-query/fc-query.c:91 fc-validate/fc-validate.c:92 +#: fc-query/fc-query.c:92 fc-validate/fc-validate.c:92 #, c-format msgid " -i, --index INDEX display the INDEX face of each font file only\n" msgstr " -i, --index <编号> 仅显示每个字体文件的 <编号> 样式\n" -#: fc-query/fc-query.c:92 fc-scan/fc-scan.c:90 +#: fc-query/fc-query.c:93 fc-scan/fc-scan.c:91 #, c-format msgid " -b, --brief display font pattern briefly\n" msgstr " -b, --brief 简略显示字体匹配模式\n" -#: fc-query/fc-query.c:97 +#: fc-query/fc-query.c:98 #, c-format msgid "" " -i INDEX (index) display the INDEX face of each font file only\n" msgstr " -i <编号> (index) 仅显示每个字体文件的 <编号> 样式\n" -#: fc-query/fc-query.c:98 fc-scan/fc-scan.c:95 +#: fc-query/fc-query.c:99 fc-scan/fc-scan.c:96 #, c-format msgid " -b (brief) display font pattern briefly\n" msgstr " -b (brief) 简略显示字体匹配模式\n" -#: fc-query/fc-query.c:99 fc-scan/fc-scan.c:96 +#: fc-query/fc-query.c:100 fc-scan/fc-scan.c:97 #, c-format msgid " -f FORMAT (format) use the given output format\n" msgstr " -f <输出格式> (format) 使用指定的输出格式\n" -#: fc-query/fc-query.c:100 fc-scan/fc-scan.c:97 +#: fc-query/fc-query.c:101 fc-scan/fc-scan.c:98 #, c-format msgid " -V (version) display font config version and exit\n" msgstr " -V (version) 显示 Fontconfig 版本并退出\n" -#: fc-query/fc-query.c:101 fc-scan/fc-scan.c:98 +#: fc-query/fc-query.c:102 fc-scan/fc-scan.c:99 #, c-format msgid " -h (help) display this help and exit\n" msgstr " -h (help) 显示此帮助信息并退出\n" -#: fc-query/fc-query.c:158 +#: fc-query/fc-query.c:160 #, c-format msgid "Can't query face %u of font file %s\n" msgstr "无法查询字体文件 %2$s 的样式 %1$u\n" -#: fc-scan/fc-scan.c:81 +#: fc-scan/fc-scan.c:82 #, c-format msgid "" "usage: %s [-bVh] [-f FORMAT] [--brief] [--format FORMAT] [--version] [--" @@ -528,12 +528,12 @@ msgstr "" "用法:%s [-bVh] [-f <输出格式>] [--brief] [--format <输出格式>] [--version] " "[--help] 字体文件…\n" -#: fc-scan/fc-scan.c:84 +#: fc-scan/fc-scan.c:85 #, c-format msgid "usage: %s [-bVh] [-f FORMAT] font-file...\n" msgstr "用法:%s [-bVh] [-f <输出格式>] 字体文件…\n" -#: fc-scan/fc-scan.c:87 +#: fc-scan/fc-scan.c:88 #, c-format msgid "Scan font files and directories, and print resulting pattern(s)\n" msgstr "扫描字体文件和目录并输出匹配模式\n" @@ -603,6 +603,6 @@ msgstr "%s:%d 尚需 %d 个字形以满足 %s 语言的覆盖需求\n" msgid "%s:%d Satisfy the coverage for %s language\n" msgstr "%s:%d 完全满足 %s 语言的覆盖需求\n" -#: src/fccfg.c:2657 +#: src/fccfg.c:2701 msgid "No description" msgstr "无描述" diff --git a/src/Makefile.am b/src/Makefile.am index 1ff065b..7b414df 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -82,7 +82,7 @@ AM_CPPFLAGS = \ -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \ -DFONTCONFIG_PATH='"$(BASECONFIGDIR)"' \ -DFC_TEMPLATEDIR='"$(TEMPLATEDIR)"' -LDADD = $(INTLLIBS) +LDADD = $(LIBINTL) EXTRA_DIST += makealias @@ -94,7 +94,7 @@ BUILT_SOURCES = $(ALIAS_FILES) \ ../fc-case/fccase.h \ ../fc-lang/fclang.h \ stamp-fcstdint \ - fcobjshash.h \ + $(builddir)/fcobjshash.h \ fcobjshash.gperf noinst_PROGRAMS = fcarch @@ -111,15 +111,15 @@ fcobjshash.gperf: Makefile stamp-fcobjshash.gperf stamp-fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h $(AM_V_GEN) $(CPP) -I$(top_srcdir) $(CPPFLAGS) $< | \ $(SED) 's/^ *//;s/ *, */,/' | \ - $(GREP) '^[^#]' | \ awk ' \ /CUT_OUT_BEGIN/ { no_write=1; next; }; \ /CUT_OUT_END/ { no_write=0; next; }; \ + /^$$/||/^#/ { next; }; \ { if (!no_write) print; next; }; \ ' - > $@.tmp && \ mv -f $@.tmp fcobjshash.gperf && touch $@ || ( $(RM) $@.tmp && false ) -fcobjshash.h: Makefile fcobjshash.gperf +$(builddir)/fcobjshash.h: Makefile fcobjshash.gperf $(AM_V_GEN) $(GPERF) --pic -m 100 fcobjshash.gperf > $@.tmp && \ mv -f $@.tmp $@ || ( $(RM) $@.tmp && false ) @@ -151,7 +151,6 @@ libfontconfig_la_SOURCES = \ fcname.c \ fcobjs.c \ fcobjs.h \ - fcobjshash.h \ fcpat.c \ fcrange.c \ fcserialize.c \ @@ -168,7 +167,7 @@ lib_LTLIBRARIES = libfontconfig.la libfontconfig_la_LDFLAGS = \ -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols) -libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) $(UUID_LIBS) $(INTLLIBS) +libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) $(UUID_LIBS) $(LTLIBINTL) libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency) @@ -201,12 +200,15 @@ stamp-fcstdint: $(top_builddir)/config.status $(SHELL) ./config.status src/fcstdint.h @touch $@ -CLEANFILES = $(ALIAS_FILES) fontconfig.def +CLEANFILES = \ + $(ALIAS_FILES) \ + fontconfig.def \ + $(builddir)/fcobjshash.h + DISTCLEANFILES = \ stamp-fcstdint \ fcstdint.h \ stamp-fcobjshash.gperf \ - fcobjshash.h \ fcobjshash.gperf fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES) diff --git a/src/Makefile.in b/src/Makefile.in index d0d32ac..70b1161 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -137,6 +137,7 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -182,7 +183,6 @@ libfontconfig_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libfontconfig_la_LDFLAGS) $(LDFLAGS) \ -o $@ -PROGRAMS = $(noinst_PROGRAMS) fcarch_SOURCES = fcarch.c fcarch_OBJECTS = fcarch.$(OBJEXT) fcarch_LDADD = $(LDADD) @@ -201,7 +201,22 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/fcarch.Po ./$(DEPDIR)/fcatomic.Plo \ + ./$(DEPDIR)/fccache.Plo ./$(DEPDIR)/fccfg.Plo \ + ./$(DEPDIR)/fccharset.Plo ./$(DEPDIR)/fccompat.Plo \ + ./$(DEPDIR)/fcdbg.Plo ./$(DEPDIR)/fcdefault.Plo \ + ./$(DEPDIR)/fcdir.Plo ./$(DEPDIR)/fcformat.Plo \ + ./$(DEPDIR)/fcfreetype.Plo ./$(DEPDIR)/fcfs.Plo \ + ./$(DEPDIR)/fchash.Plo ./$(DEPDIR)/fcinit.Plo \ + ./$(DEPDIR)/fclang.Plo ./$(DEPDIR)/fclist.Plo \ + ./$(DEPDIR)/fcmatch.Plo ./$(DEPDIR)/fcmatrix.Plo \ + ./$(DEPDIR)/fcname.Plo ./$(DEPDIR)/fcobjs.Plo \ + ./$(DEPDIR)/fcpat.Plo ./$(DEPDIR)/fcptrlist.Plo \ + ./$(DEPDIR)/fcrange.Plo ./$(DEPDIR)/fcserialize.Plo \ + ./$(DEPDIR)/fcstat.Plo ./$(DEPDIR)/fcstr.Plo \ + ./$(DEPDIR)/fcweight.Plo ./$(DEPDIR)/fcxml.Plo \ + ./$(DEPDIR)/ftglue.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -309,6 +324,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -452,14 +469,14 @@ AM_CPPFLAGS = \ -DFONTCONFIG_PATH='"$(BASECONFIGDIR)"' \ -DFC_TEMPLATEDIR='"$(TEMPLATEDIR)"' -LDADD = $(INTLLIBS) +LDADD = $(LIBINTL) noinst_HEADERS = fcint.h fcftint.h fcdeprecate.h fcstdint.h ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h BUILT_SOURCES = $(ALIAS_FILES) \ ../fc-case/fccase.h \ ../fc-lang/fclang.h \ stamp-fcstdint \ - fcobjshash.h \ + $(builddir)/fcobjshash.h \ fcobjshash.gperf libfontconfig_la_SOURCES = \ @@ -487,7 +504,6 @@ libfontconfig_la_SOURCES = \ fcname.c \ fcobjs.c \ fcobjs.h \ - fcobjshash.h \ fcpat.c \ fcrange.c \ fcserialize.c \ @@ -503,7 +519,7 @@ lib_LTLIBRARIES = libfontconfig.la libfontconfig_la_LDFLAGS = \ -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols) -libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) $(UUID_LIBS) $(INTLLIBS) +libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) $(UUID_LIBS) $(LTLIBINTL) libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency) PUBLIC_FILES = \ $(top_srcdir)/fontconfig/fontconfig.h \ @@ -513,12 +529,15 @@ PUBLIC_FILES = \ PUBLIC_FT_FILES = \ $(top_srcdir)/fontconfig/fcfreetype.h -CLEANFILES = $(ALIAS_FILES) fontconfig.def +CLEANFILES = \ + $(ALIAS_FILES) \ + fontconfig.def \ + $(builddir)/fcobjshash.h + DISTCLEANFILES = \ stamp-fcstdint \ fcstdint.h \ stamp-fcobjshash.gperf \ - fcobjshash.h \ fcobjshash.gperf all: $(BUILT_SOURCES) @@ -543,8 +562,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -556,6 +575,15 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ @@ -594,15 +622,6 @@ clean-libLTLIBRARIES: libfontconfig.la: $(libfontconfig_la_OBJECTS) $(libfontconfig_la_DEPENDENCIES) $(EXTRA_libfontconfig_la_DEPENDENCIES) $(AM_V_CCLD)$(libfontconfig_la_LINK) -rpath $(libdir) $(libfontconfig_la_OBJECTS) $(libfontconfig_la_LIBADD) $(LIBS) -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - fcarch$(EXEEXT): $(fcarch_OBJECTS) $(fcarch_DEPENDENCIES) $(EXTRA_fcarch_DEPENDENCIES) @rm -f fcarch$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fcarch_OBJECTS) $(fcarch_LDADD) $(LIBS) @@ -613,35 +632,41 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcarch.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcatomic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccache.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccfg.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccharset.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccompat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcdbg.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcdefault.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcdir.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcformat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcfreetype.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcfs.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchash.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcinit.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fclang.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fclist.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcmatch.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcmatrix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcname.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcobjs.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcpat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcptrlist.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcrange.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcserialize.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcstat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcstr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcweight.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcxml.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftglue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcarch.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcatomic.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccache.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccfg.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccharset.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fccompat.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcdbg.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcdefault.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcdir.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcformat.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcfreetype.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcfs.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchash.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcinit.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fclang.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fclist.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcmatch.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcmatrix.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcname.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcobjs.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcpat.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcptrlist.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcserialize.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcstat.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcstr.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcweight.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcxml.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftglue.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -722,7 +747,10 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -755,7 +783,7 @@ distdir: $(DISTFILES) check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -794,15 +822,43 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -@ENABLE_SHARED_FALSE@uninstall-local: @ENABLE_SHARED_FALSE@install-data-local: +@ENABLE_SHARED_FALSE@uninstall-local: clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fcarch.Po + -rm -f ./$(DEPDIR)/fcatomic.Plo + -rm -f ./$(DEPDIR)/fccache.Plo + -rm -f ./$(DEPDIR)/fccfg.Plo + -rm -f ./$(DEPDIR)/fccharset.Plo + -rm -f ./$(DEPDIR)/fccompat.Plo + -rm -f ./$(DEPDIR)/fcdbg.Plo + -rm -f ./$(DEPDIR)/fcdefault.Plo + -rm -f ./$(DEPDIR)/fcdir.Plo + -rm -f ./$(DEPDIR)/fcformat.Plo + -rm -f ./$(DEPDIR)/fcfreetype.Plo + -rm -f ./$(DEPDIR)/fcfs.Plo + -rm -f ./$(DEPDIR)/fchash.Plo + -rm -f ./$(DEPDIR)/fcinit.Plo + -rm -f ./$(DEPDIR)/fclang.Plo + -rm -f ./$(DEPDIR)/fclist.Plo + -rm -f ./$(DEPDIR)/fcmatch.Plo + -rm -f ./$(DEPDIR)/fcmatrix.Plo + -rm -f ./$(DEPDIR)/fcname.Plo + -rm -f ./$(DEPDIR)/fcobjs.Plo + -rm -f ./$(DEPDIR)/fcpat.Plo + -rm -f ./$(DEPDIR)/fcptrlist.Plo + -rm -f ./$(DEPDIR)/fcrange.Plo + -rm -f ./$(DEPDIR)/fcserialize.Plo + -rm -f ./$(DEPDIR)/fcstat.Plo + -rm -f ./$(DEPDIR)/fcstr.Plo + -rm -f ./$(DEPDIR)/fcweight.Plo + -rm -f ./$(DEPDIR)/fcxml.Plo + -rm -f ./$(DEPDIR)/ftglue.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -848,7 +904,35 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/fcarch.Po + -rm -f ./$(DEPDIR)/fcatomic.Plo + -rm -f ./$(DEPDIR)/fccache.Plo + -rm -f ./$(DEPDIR)/fccfg.Plo + -rm -f ./$(DEPDIR)/fccharset.Plo + -rm -f ./$(DEPDIR)/fccompat.Plo + -rm -f ./$(DEPDIR)/fcdbg.Plo + -rm -f ./$(DEPDIR)/fcdefault.Plo + -rm -f ./$(DEPDIR)/fcdir.Plo + -rm -f ./$(DEPDIR)/fcformat.Plo + -rm -f ./$(DEPDIR)/fcfreetype.Plo + -rm -f ./$(DEPDIR)/fcfs.Plo + -rm -f ./$(DEPDIR)/fchash.Plo + -rm -f ./$(DEPDIR)/fcinit.Plo + -rm -f ./$(DEPDIR)/fclang.Plo + -rm -f ./$(DEPDIR)/fclist.Plo + -rm -f ./$(DEPDIR)/fcmatch.Plo + -rm -f ./$(DEPDIR)/fcmatrix.Plo + -rm -f ./$(DEPDIR)/fcname.Plo + -rm -f ./$(DEPDIR)/fcobjs.Plo + -rm -f ./$(DEPDIR)/fcpat.Plo + -rm -f ./$(DEPDIR)/fcptrlist.Plo + -rm -f ./$(DEPDIR)/fcrange.Plo + -rm -f ./$(DEPDIR)/fcserialize.Plo + -rm -f ./$(DEPDIR)/fcstat.Plo + -rm -f ./$(DEPDIR)/fcstr.Plo + -rm -f ./$(DEPDIR)/fcweight.Plo + -rm -f ./$(DEPDIR)/fcxml.Plo + -rm -f ./$(DEPDIR)/ftglue.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -869,17 +953,17 @@ uninstall-am: uninstall-libLTLIBRARIES uninstall-local .MAKE: all check install install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-data-local install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ @@ -925,15 +1009,15 @@ fcobjshash.gperf: Makefile stamp-fcobjshash.gperf stamp-fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h $(AM_V_GEN) $(CPP) -I$(top_srcdir) $(CPPFLAGS) $< | \ $(SED) 's/^ *//;s/ *, */,/' | \ - $(GREP) '^[^#]' | \ awk ' \ /CUT_OUT_BEGIN/ { no_write=1; next; }; \ /CUT_OUT_END/ { no_write=0; next; }; \ + /^$$/||/^#/ { next; }; \ { if (!no_write) print; next; }; \ ' - > $@.tmp && \ mv -f $@.tmp fcobjshash.gperf && touch $@ || ( $(RM) $@.tmp && false ) -fcobjshash.h: Makefile fcobjshash.gperf +$(builddir)/fcobjshash.h: Makefile fcobjshash.gperf $(AM_V_GEN) $(GPERF) --pic -m 100 fcobjshash.gperf > $@.tmp && \ mv -f $@.tmp $@ || ( $(RM) $@.tmp && false ) diff --git a/src/fccache.c b/src/fccache.c index 7abb750..2b60401 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -51,13 +51,23 @@ FcDirCacheCreateUUID (FcChar8 *dir, FcBool force, FcConfig *config) { + const FcChar8 *sysroot = FcConfigGetSysRoot (config); + FcChar8 *target; FcBool ret = FcTrue; #ifndef _WIN32 FcChar8 *uuidname; - uuidname = FcStrBuildFilename (dir, ".uuid", NULL); + if (sysroot) + target = FcStrBuildFilename (sysroot, dir, NULL); + else + target = FcStrdup (dir); + uuidname = FcStrBuildFilename (target, ".uuid", NULL); + if (!uuidname) + { + FcStrFree (target); return FcFalse; + } if (force || access ((const char *) uuidname, F_OK) < 0) { @@ -69,7 +79,7 @@ FcDirCacheCreateUUID (FcChar8 *dir, struct stat statb; struct timeval times[2]; - if (FcStat (dir, &statb) != 0) + if (FcStat (target, &statb) != 0) { ret = FcFalse; goto bail1; @@ -96,9 +106,11 @@ FcDirCacheCreateUUID (FcChar8 *dir, hash_add = FcHashTableReplace; else hash_add = FcHashTableAdd; - if (!hash_add (config->uuid_table, dir, uuid)) + if (!hash_add (config->uuid_table, target, uuid)) { ret = FcFalse; + FcAtomicDeleteNew (atomic); + close (fd); goto bail3; } uuid_unparse (uuid, out); @@ -124,19 +136,40 @@ FcDirCacheCreateUUID (FcChar8 *dir, times[0].tv_usec = 0; times[1].tv_usec = 0; #endif - if (utimes ((const char *) dir, times) != 0) + if (utimes ((const char *) target, times) != 0) { - fprintf (stderr, "Unable to revert mtime: %s\n", dir); + fprintf (stderr, "Unable to revert mtime: %s\n", target); } } } - bail1: +bail1: FcStrFree (uuidname); + FcStrFree (target); #endif return ret; } +FcBool +FcDirCacheDeleteUUID (const FcChar8 *dir, + FcConfig *config) +{ + const FcChar8 *sysroot = FcConfigGetSysRoot (config); + FcChar8 *target; + FcBool ret = FcTrue; + + if (sysroot) + target = FcStrBuildFilename (sysroot, dir, ".uuid", NULL); + else + target = FcStrBuildFilename (dir, ".uuid", NULL); + + ret = unlink ((char *) target) == 0; + FcHashTableRemove (config->uuid_table, target); + FcStrFree(target); + + return ret; +} + #ifndef _WIN32 static void FcDirCacheReadUUID (FcChar8 *dir, @@ -144,25 +177,35 @@ FcDirCacheReadUUID (FcChar8 *dir, { void *u; uuid_t uuid; + const FcChar8 *sysroot = FcConfigGetSysRoot (config); + FcChar8 *target; - if (!FcHashTableFind (config->uuid_table, dir, &u)) + if (sysroot) + target = FcStrBuildFilename (sysroot, dir, NULL); + else + target = FcStrdup (dir); + + if (!FcHashTableFind (config->uuid_table, target, &u)) { - FcChar8 *uuidname = FcStrBuildFilename (dir, ".uuid", NULL); + FcChar8 *uuidname = FcStrBuildFilename (target, ".uuid", NULL); int fd; if ((fd = FcOpen ((char *) uuidname, O_RDONLY)) >= 0) { char suuid[37]; + ssize_t len; memset (suuid, 0, sizeof (suuid)); - if (read (fd, suuid, 36) > 0) + len = read (fd, suuid, 36); + if (len != -1) { + suuid[len] = 0; memset (uuid, 0, sizeof (uuid)); if (uuid_parse (suuid, uuid) == 0) { if (FcDebug () & FC_DBG_CACHE) printf ("FcDirCacheReadUUID %s -> %s\n", uuidname, suuid); - FcHashTableAdd (config->uuid_table, dir, uuid); + FcHashTableAdd (config->uuid_table, target, uuid); } } close (fd); @@ -176,6 +219,7 @@ FcDirCacheReadUUID (FcChar8 *dir, } else FcHashUuidFree (u); + FcStrFree (target); } #endif @@ -259,19 +303,22 @@ static FcChar8 * FcDirCacheBasenameUUID (const FcChar8 *dir, FcChar8 cache_base[CACHEBASE_LEN], FcConfig *config) { void *u; - FcChar8 *alias; + FcChar8 *target; + const FcChar8 *sysroot = FcConfigGetSysRoot (config); - if (!FcHashTableFind (config->alias_table, dir, (void **)&alias)) - alias = FcStrdup (dir); - if (FcHashTableFind (config->uuid_table, alias, &u)) + if (sysroot) + target = FcStrBuildFilename (sysroot, dir, NULL); + else + target = FcStrdup (dir); + if (FcHashTableFind (config->uuid_table, target, &u)) { uuid_unparse (u, (char *) cache_base); strcat ((char *) cache_base, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX); FcHashUuidFree (u); - FcStrFree (alias); + FcStrFree (target); return cache_base; } - FcStrFree (alias); + FcStrFree (target); return NULL; } #endif @@ -303,6 +350,7 @@ FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config) if (!cache_hashed) break; (void) unlink ((char *) cache_hashed); + FcDirCacheDeleteUUID (dir, config); FcStrFree (cache_hashed); } FcStrListDone (list); @@ -417,6 +465,7 @@ struct _FcCacheSkip { FcCache *cache; FcRef ref; intptr_t size; + void *allocated; dev_t cache_dev; ino_t cache_ino; time_t cache_mtime; @@ -542,6 +591,7 @@ FcCacheInsert (FcCache *cache, struct stat *cache_stat) s->cache = cache; s->size = cache->size; + s->allocated = NULL; FcRefInit (&s->ref, 1); if (cache_stat) { @@ -616,6 +666,7 @@ FcCacheRemoveUnlocked (FcCache *cache) FcCacheSkip **update[FC_CACHE_MAX_LEVEL]; FcCacheSkip *s, **next; int i; + void *allocated; /* * Find links along each chain @@ -633,6 +684,15 @@ FcCacheRemoveUnlocked (FcCache *cache) *update[i] = s->next[i]; while (fcCacheMaxLevel > 0 && fcCacheChains[fcCacheMaxLevel - 1] == NULL) fcCacheMaxLevel--; + + allocated = s->allocated; + while (allocated) + { + /* First element in allocated chunk is the free list */ + next = *(void **)allocated; + free (allocated); + allocated = next; + } free (s); } @@ -648,7 +708,7 @@ FcCacheFindByStat (struct stat *cache_stat) s->cache_mtime == cache_stat->st_mtime) { #ifdef HAVE_STRUCT_STAT_ST_MTIM - if (s->cache_mtime != cache_stat->st_mtim.tv_nsec) + if (s->cache_mtime_nano != cache_stat->st_mtim.tv_nsec) continue; #endif FcRefInc (&s->ref); @@ -702,6 +762,30 @@ FcCacheObjectDereference (void *object) unlock_cache (); } +void * +FcCacheAllocate (FcCache *cache, size_t len) +{ + FcCacheSkip *skip; + void *allocated = NULL; + + lock_cache (); + skip = FcCacheFindByAddrUnlocked (cache); + if (skip) + { + void *chunk = malloc (sizeof (void *) + len); + if (chunk) + { + /* First element in allocated chunk is the free list */ + *(void **)chunk = skip->allocated; + skip->allocated = chunk; + /* Return the rest */ + allocated = ((FcChar8 *)chunk) + sizeof (void *); + } + } + unlock_cache (); + return allocated; +} + void FcCacheFini (void) { @@ -795,7 +879,7 @@ FcCacheOffsetsValid (FcCache *cache) if (fs->nfont > (end - (char *) fs) / sizeof (FcPattern)) return FcFalse; - if (fs->fonts != 0 && !FcIsEncodedOffset(fs->fonts)) + if (!FcIsEncodedOffset(fs->fonts)) return FcFalse; for (i = 0; i < fs->nfont; i++) @@ -955,7 +1039,6 @@ FcCache * FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file) { FcCache *cache = NULL; - const FcChar8 *d; #ifndef _WIN32 FcDirCacheReadUUID ((FcChar8 *) dir, config); @@ -965,10 +1048,6 @@ FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file) &cache, cache_file)) return NULL; - d = FcCacheDir (cache); - if (FcStrCmp (dir, d)) - FcHashTableAdd (config->alias_table, (FcChar8 *) d, (FcChar8 *) dir); - return cache; } @@ -989,6 +1068,55 @@ FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat) return cache; } +static int +FcDirChecksum (struct stat *statb) +{ + int ret = (int) statb->st_mtime; + char *endptr; + char *source_date_epoch; + unsigned long long epoch; + + source_date_epoch = getenv("SOURCE_DATE_EPOCH"); + if (source_date_epoch) + { + epoch = strtoull(source_date_epoch, &endptr, 10); + + if (endptr == source_date_epoch) + fprintf (stderr, + "Fontconfig: SOURCE_DATE_EPOCH invalid\n"); + else if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0)) + || (errno != 0 && epoch == 0)) + fprintf (stderr, + "Fontconfig: SOURCE_DATE_EPOCH: strtoull: %s: %llu\n", + strerror(errno), epoch); + else if (*endptr != '\0') + fprintf (stderr, + "Fontconfig: SOURCE_DATE_EPOCH has trailing garbage\n"); + else if (epoch > ULONG_MAX) + fprintf (stderr, + "Fontconfig: SOURCE_DATE_EPOCH must be <= %lu but saw: %llu\n", + ULONG_MAX, epoch); + else if (epoch < ret) + /* Only override if directory is newer */ + ret = (int) epoch; + } + + return ret; +} + +static int64_t +FcDirChecksumNano (struct stat *statb) +{ +#ifdef HAVE_STRUCT_STAT_ST_MTIM + /* No nanosecond component to parse */ + if (getenv("SOURCE_DATE_EPOCH")) + return 0; + return statb->st_mtim.tv_nsec; +#else + return 0; +#endif +} + /* * Validate a cache file by reading the header and checking * the magic number and the size field @@ -1007,10 +1135,10 @@ FcDirCacheValidateHelper (FcConfig *config, int fd, struct stat *fd_stat, struct ret = FcFalse; else if (fd_stat->st_size != c.size) ret = FcFalse; - else if (c.checksum != (int) dir_stat->st_mtime) + else if (c.checksum != FcDirChecksum (dir_stat)) ret = FcFalse; #ifdef HAVE_STRUCT_STAT_ST_MTIM - else if (c.checksum_nano != dir_stat->st_mtim.tv_nsec) + else if (c.checksum_nano != FcDirChecksumNano (dir_stat)) ret = FcFalse; #endif return ret; @@ -1086,10 +1214,8 @@ FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcSt cache->magic = FC_CACHE_MAGIC_ALLOC; cache->version = FC_CACHE_VERSION_NUMBER; cache->size = serialize->size; - cache->checksum = (int) dir_stat->st_mtime; -#ifdef HAVE_STRUCT_STAT_ST_MTIM - cache->checksum_nano = dir_stat->st_mtim.tv_nsec; -#endif + cache->checksum = FcDirChecksum (dir_stat); + cache->checksum_nano = FcDirChecksumNano (dir_stat); /* * Serialize directory name @@ -1225,9 +1351,9 @@ FcDirCacheWrite (FcCache *cache, FcConfig *config) #endif FcDirCacheBasenameMD5 (dir, cache_base); cache_hashed = FcStrBuildFilename (cache_dir, cache_base, NULL); + FcStrFree (cache_dir); if (!cache_hashed) return FcFalse; - FcStrFree (cache_dir); if (FcDebug () & FC_DBG_CACHE) printf ("FcDirCacheWriteDir dir \"%s\" file \"%s\"\n", diff --git a/src/fccfg.c b/src/fccfg.c index eb0b76d..d7c48e8 100644 --- a/src/fccfg.c +++ b/src/fccfg.c @@ -26,7 +26,6 @@ #include "fcint.h" #include -#include #include #if defined (_WIN32) && !defined (R_OK) @@ -39,19 +38,7 @@ static FcConfig * FcConfigEnsure (void) { FcConfig *config; - FcBool is_locale_initialized; - static void *static_is_locale_initialized; -retry_locale: - is_locale_initialized = (intptr_t) fc_atomic_ptr_get (&static_is_locale_initialized); - if (!is_locale_initialized) - { - is_locale_initialized = FcTrue; - if (!fc_atomic_ptr_cmpexch (&static_is_locale_initialized, NULL, - (void *)(intptr_t) is_locale_initialized)) - goto retry_locale; - setlocale (LC_ALL, ""); - } -retry_config: +retry: config = fc_atomic_ptr_get (&_fcConfig); if (!config) { @@ -59,12 +46,42 @@ retry_config: if (!fc_atomic_ptr_cmpexch (&_fcConfig, NULL, config)) { FcConfigDestroy (config); - goto retry_config; + goto retry; } } return config; } +static FcChar32 +FcHashAsStrIgnoreCase (const void *data) +{ + return FcStrHashIgnoreCase (data); +} + +static int +FcCompareAsStr (const void *v1, const void *v2) +{ + return FcStrCmp (v1, v2); +} + +static void +FcDestroyAsRule (void *data) +{ + FcRuleDestroy (data); +} + +static void +FcDestroyAsRuleSet (void *data) +{ + FcRuleSetDestroy (data); +} + +static void +FcDestroyAsStr (void *data) +{ + FcStrFree (data); +} + FcBool FcConfigInit (void) { @@ -126,7 +143,7 @@ FcConfigCreate (void) for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) { - config->subst[k] = FcPtrListCreate ((FcDestroyFunc) FcRuleSetDestroy); + config->subst[k] = FcPtrListCreate (FcDestroyAsRuleSet); if (!config->subst[k]) err = FcTrue; } @@ -144,25 +161,19 @@ FcConfigCreate (void) config->sysRoot = NULL; - config->rulesetList = FcPtrListCreate ((FcDestroyFunc) FcRuleSetDestroy); + config->rulesetList = FcPtrListCreate (FcDestroyAsRuleSet); if (!config->rulesetList) goto bail9; config->availConfigFiles = FcStrSetCreate (); if (!config->availConfigFiles) goto bail10; - config->uuid_table = FcHashTableCreate ((FcHashFunc) FcStrHashIgnoreCase, - (FcCompareFunc) FcStrCmp, + config->uuid_table = FcHashTableCreate (FcHashAsStrIgnoreCase, + FcCompareAsStr, FcHashStrCopy, FcHashUuidCopy, - (FcDestroyFunc) FcStrFree, + FcDestroyAsStr, FcHashUuidFree); - config->alias_table = FcHashTableCreate ((FcHashFunc) FcStrHashIgnoreCase, - (FcCompareFunc) FcStrCmp, - FcHashStrCopy, - FcHashStrCopy, - (FcDestroyFunc) FcStrFree, - (FcDestroyFunc) FcStrFree); FcRefInit (&config->ref, 1); @@ -326,7 +337,6 @@ FcConfigDestroy (FcConfig *config) FcStrFree (config->sysRoot); FcHashTableDestroy (config->uuid_table); - FcHashTableDestroy (config->alias_table); free (config); } @@ -337,11 +347,15 @@ FcConfigDestroy (FcConfig *config) FcBool FcConfigAddCache (FcConfig *config, FcCache *cache, - FcSetName set, FcStrSet *dirSet) + FcSetName set, FcStrSet *dirSet, FcChar8 *forDir) { FcFontSet *fs; intptr_t *dirs; int i; + FcBool relocated = FcFalse; + + if (strcmp ((char *)FcCacheDir(cache), (char *)forDir) != 0) + relocated = FcTrue; /* * Add fonts @@ -355,23 +369,43 @@ FcConfigAddCache (FcConfig *config, FcCache *cache, { FcPattern *font = FcFontSetFont (fs, i); FcChar8 *font_file; + FcChar8 *relocated_font_file = NULL; - /* - * Check to see if font is banned by filename - */ if (FcPatternObjectGetString (font, FC_FILE_OBJECT, - 0, &font_file) == FcResultMatch && - !FcConfigAcceptFilename (config, font_file)) + 0, &font_file) == FcResultMatch) { - continue; + if (relocated) + { + FcChar8 *slash = FcStrLastSlash (font_file); + relocated_font_file = FcStrBuildFilename (forDir, slash + 1, NULL); + font_file = relocated_font_file; + } + + /* + * Check to see if font is banned by filename + */ + if (!FcConfigAcceptFilename (config, font_file)) + { + free (relocated_font_file); + continue; + } } - + /* * Check to see if font is banned by pattern */ if (!FcConfigAcceptFont (config, font)) + { + free (relocated_font_file); continue; - + } + + if (relocated_font_file) + { + font = FcPatternCacheRewriteFile (font, cache, relocated_font_file); + free (relocated_font_file); + } + if (FcFontSetAdd (config->fonts[set], font)) nref++; } @@ -387,18 +421,14 @@ FcConfigAddCache (FcConfig *config, FcCache *cache, for (i = 0; i < cache->dirs_count; i++) { const FcChar8 *dir = FcCacheSubdir (cache, i); - FcChar8 *alias; - FcChar8 *d = FcStrDirname (dir); FcChar8 *s = NULL; - if (FcHashTableFind (config->alias_table, d, (void **)&alias)) + if (relocated) { FcChar8 *base = FcStrBasename (dir); - dir = s = FcStrBuildFilename (alias, base, NULL); - FcStrFree (alias); + dir = s = FcStrBuildFilename (forDir, base, NULL); FcStrFree (base); } - FcStrFree (d); if (FcConfigAcceptFilename (config, dir)) FcStrSetAddFilename (dirSet, dir); if (s) @@ -426,7 +456,7 @@ FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet) cache = FcDirCacheRead (dir, FcFalse, config); if (!cache) continue; - FcConfigAddCache (config, cache, set, dirSet); + FcConfigAddCache (config, cache, set, dirSet, dir); FcDirCacheUnload (cache); } FcStrListDone (dirlist); @@ -718,12 +748,12 @@ FcConfigPromote (FcValue v, FcValue u, FcValuePromotionBuffer *buf) v.u.l = FcLangSetPromote (v.u.s, buf); v.type = FcTypeLangSet; } - else if (v.type == FcTypeVoid && u.type == FcTypeLangSet) + else if (buf && v.type == FcTypeVoid && u.type == FcTypeLangSet) { v.u.l = FcLangSetPromote (NULL, buf); v.type = FcTypeLangSet; } - else if (v.type == FcTypeVoid && u.type == FcTypeCharSet) + else if (buf && v.type == FcTypeVoid && u.type == FcTypeCharSet) { v.u.c = FcCharSetPromote (buf); v.type = FcTypeCharSet; @@ -1802,11 +1832,13 @@ FcConfigSubstituteWithPat (FcConfig *config, if (value[object]) { FcConfigDel (&elt[object]->values, value[object]); + FcValueListDestroy (l); break; } /* fall through ... */ case FcOpDeleteAll: FcConfigPatternDel (p, r->u.edit->object); + FcValueListDestroy (l); break; default: FcValueListDestroy (l); @@ -2077,7 +2109,8 @@ FcConfigXdgCacheHome (void) ret = malloc (len + 7 + 1); if (ret) { - memcpy (ret, home, len); + if (home) + memcpy (ret, home, len); memcpy (&ret[len], FC_DIR_SEPARATOR_S ".cache", 7); ret[len + 7] = 0; } @@ -2104,7 +2137,8 @@ FcConfigXdgConfigHome (void) ret = malloc (len + 8 + 1); if (ret) { - memcpy (ret, home, len); + if (home) + memcpy (ret, home, len); memcpy (&ret[len], FC_DIR_SEPARATOR_S ".config", 8); ret[len + 8] = 0; } @@ -2131,7 +2165,8 @@ FcConfigXdgDataHome (void) ret = malloc (len + 13 + 1); if (ret) { - memcpy (ret, home, len); + if (home) + memcpy (ret, home, len); memcpy (&ret[len], FC_DIR_SEPARATOR_S ".local" FC_DIR_SEPARATOR_S "share", 13); ret[len + 13] = 0; } @@ -2161,42 +2196,28 @@ FcConfigFilename (const FcChar8 *url) } file = 0; -#ifdef _WIN32 - if (isalpha (*url) && - url[1] == ':' && - (url[2] == '/' || url[2] == '\\')) - goto absolute_path; -#endif + if (FcStrIsAbsoluteFilename(url)) + return FcConfigFileExists (0, url); - switch (*url) { - case '~': + if (*url == '~') + { dir = FcConfigHome (); if (dir) file = FcConfigFileExists (dir, url + 1); else file = 0; - break; -#ifdef _WIN32 - case '\\': - absolute_path: -#endif - case '/': - file = FcConfigFileExists (0, url); - break; - default: - path = FcConfigGetPath (); - if (!path) - return NULL; - for (p = path; *p; p++) - { - file = FcConfigFileExists (*p, url); - if (file) - break; - } - FcConfigFreePath (path); - break; } + path = FcConfigGetPath (); + if (!path) + return NULL; + for (p = path; *p; p++) + { + file = FcConfigFileExists (*p, url); + if (file) + break; + } + FcConfigFreePath (path); return file; } @@ -2222,8 +2243,27 @@ FcConfigRealFilename (FcConfig *config, if ((len = FcReadLink (nn, buf, sizeof (buf) - 1)) != -1) { buf[len] = 0; - FcStrFree (nn); - nn = FcStrdup (buf); + + if (!FcStrIsAbsoluteFilename (buf)) + { + FcChar8 *dirname = FcStrDirname (nn); + FcStrFree (nn); + if (!dirname) + return NULL; + + FcChar8 *path = FcStrBuildFilename (dirname, buf, NULL); + FcStrFree (dirname); + if (!path) + return NULL; + + nn = FcStrCanonFilename (path); + FcStrFree (path); + } + else + { + FcStrFree (nn); + nn = FcStrdup (buf); + } } } @@ -2421,7 +2461,10 @@ FcConfigGetSysRoot (const FcConfig *config) return NULL; } - return config->sysRoot; + if (config->sysRoot) + return config->sysRoot; + + return (FcChar8 *) getenv ("FONTCONFIG_SYSROOT"); } void @@ -2488,7 +2531,7 @@ FcRuleSetCreate (const FcChar8 *name) ret->description = NULL; ret->domain = NULL; for (k = FcMatchKindBegin; k < FcMatchKindEnd; k++) - ret->subst[k] = FcPtrListCreate ((FcDestroyFunc) FcRuleDestroy); + ret->subst[k] = FcPtrListCreate (FcDestroyAsRule); FcRefInit (&ret->ref, 1); } @@ -2573,12 +2616,13 @@ FcRuleSetAdd (FcRuleSet *rs, switch (r->type) { case FcRuleTest: - if (r->u.test && - r->u.test->kind == FcMatchDefault) - r->u.test->kind = kind; - - if (n < r->u.test->object) - n = r->u.test->object; + if (r->u.test) + { + if (r->u.test->kind == FcMatchDefault) + r->u.test->kind = kind; + if (n < r->u.test->object) + n = r->u.test->object; + } break; case FcRuleEdit: if (n < r->u.edit->object) diff --git a/src/fcdbg.c b/src/fcdbg.c index 2e16a31..e2c6b56 100644 --- a/src/fcdbg.c +++ b/src/fcdbg.c @@ -187,22 +187,21 @@ FcCharSetPrint (const FcCharSet *c) void FcPatternPrint (const FcPattern *p) { - int i; - FcPatternElt *e; + FcPatternIter iter; if (!p) { printf ("Null pattern\n"); return; } - printf ("Pattern has %d elts (size %d)\n", p->num, p->size); - for (i = 0; i < p->num; i++) + printf ("Pattern has %d elts (size %d)\n", FcPatternObjectCount (p), p->size); + FcPatternIterStart (p, &iter); + do { - e = &FcPatternElts(p)[i]; - printf ("\t%s:", FcObjectName(e->object)); - FcValueListPrint (FcPatternEltValues(e)); + printf ("\t%s:", FcPatternIterGetObject (p, &iter)); + FcValueListPrint (FcPatternIterGetValues (p, &iter)); printf ("\n"); - } + } while (FcPatternIterNext (p, &iter)); printf ("\n"); } diff --git a/src/fcdefault.c b/src/fcdefault.c index 35973d7..f3addca 100644 --- a/src/fcdefault.c +++ b/src/fcdefault.c @@ -238,21 +238,22 @@ FcDefaultFini (void) void FcDefaultSubstitute (FcPattern *pattern) { + FcPatternIter iter; FcValue v, namelang, v2; int i; double dpi, size, scale, pixelsize; - if (FcPatternObjectGet (pattern, FC_WEIGHT_OBJECT, 0, &v) == FcResultNoMatch ) + if (!FcPatternFindObjectIter (pattern, &iter, FC_WEIGHT_OBJECT)) FcPatternObjectAddInteger (pattern, FC_WEIGHT_OBJECT, FC_WEIGHT_NORMAL); - if (FcPatternObjectGet (pattern, FC_SLANT_OBJECT, 0, &v) == FcResultNoMatch) + if (!FcPatternFindObjectIter (pattern, &iter, FC_SLANT_OBJECT)) FcPatternObjectAddInteger (pattern, FC_SLANT_OBJECT, FC_SLANT_ROMAN); - if (FcPatternObjectGet (pattern, FC_WIDTH_OBJECT, 0, &v) == FcResultNoMatch) + if (!FcPatternFindObjectIter (pattern, &iter, FC_WIDTH_OBJECT)) FcPatternObjectAddInteger (pattern, FC_WIDTH_OBJECT, FC_WIDTH_NORMAL); for (i = 0; i < NUM_FC_BOOL_DEFAULTS; i++) - if (FcPatternObjectGet (pattern, FcBoolDefaults[i].field, 0, &v) == FcResultNoMatch) + if (!FcPatternFindObjectIter (pattern, &iter, FcBoolDefaults[i].field)) FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value); if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch) @@ -269,7 +270,7 @@ FcDefaultSubstitute (FcPattern *pattern) if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch) dpi = 75.0; - if (FcPatternObjectGet (pattern, FC_PIXEL_SIZE_OBJECT, 0, &v) != FcResultMatch) + if (!FcPatternFindObjectIter (pattern, &iter, FC_PIXEL_SIZE_OBJECT)) { (void) FcPatternObjectDel (pattern, FC_SCALE_OBJECT); FcPatternObjectAddDouble (pattern, FC_SCALE_OBJECT, scale); @@ -281,25 +282,22 @@ FcDefaultSubstitute (FcPattern *pattern) } else { + FcPatternIterGetValue(pattern, &iter, 0, &v, NULL); size = v.u.d; size = size / dpi * 72.0 / scale; } (void) FcPatternObjectDel (pattern, FC_SIZE_OBJECT); FcPatternObjectAddDouble (pattern, FC_SIZE_OBJECT, size); - if (FcPatternObjectGet (pattern, FC_FONTVERSION_OBJECT, 0, &v) == FcResultNoMatch) - { + if (!FcPatternFindObjectIter (pattern, &iter, FC_FONTVERSION_OBJECT)) FcPatternObjectAddInteger (pattern, FC_FONTVERSION_OBJECT, 0x7fffffff); - } - if (FcPatternObjectGet (pattern, FC_HINT_STYLE_OBJECT, 0, &v) == FcResultNoMatch) - { + if (!FcPatternFindObjectIter (pattern, &iter, FC_HINT_STYLE_OBJECT)) FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL); - } - if (FcPatternObjectGet (pattern, FC_NAMELANG_OBJECT, 0, &v) == FcResultNoMatch) - { + + if (!FcPatternFindObjectIter (pattern, &iter, FC_NAMELANG_OBJECT)) FcPatternObjectAddString (pattern, FC_NAMELANG_OBJECT, FcGetDefaultLang ()); - } + /* shouldn't be failed. */ FcPatternObjectGet (pattern, FC_NAMELANG_OBJECT, 0, &namelang); /* Add a fallback to ensure the english name when the requested language @@ -315,17 +313,17 @@ FcDefaultSubstitute (FcPattern *pattern) */ v2.type = FcTypeString; v2.u.s = (FcChar8 *) "en-us"; - if (FcPatternObjectGet (pattern, FC_FAMILYLANG_OBJECT, 0, &v) == FcResultNoMatch) + if (!FcPatternFindObjectIter (pattern, &iter, FC_FAMILYLANG_OBJECT)) { FcPatternObjectAdd (pattern, FC_FAMILYLANG_OBJECT, namelang, FcTrue); FcPatternObjectAddWithBinding (pattern, FC_FAMILYLANG_OBJECT, v2, FcValueBindingWeak, FcTrue); } - if (FcPatternObjectGet (pattern, FC_STYLELANG_OBJECT, 0, &v) == FcResultNoMatch) + if (!FcPatternFindObjectIter (pattern, &iter, FC_STYLELANG_OBJECT)) { FcPatternObjectAdd (pattern, FC_STYLELANG_OBJECT, namelang, FcTrue); FcPatternObjectAddWithBinding (pattern, FC_STYLELANG_OBJECT, v2, FcValueBindingWeak, FcTrue); } - if (FcPatternObjectGet (pattern, FC_FULLNAMELANG_OBJECT, 0, &v) == FcResultNoMatch) + if (!FcPatternFindObjectIter (pattern, &iter, FC_FULLNAMELANG_OBJECT)) { FcPatternObjectAdd (pattern, FC_FULLNAMELANG_OBJECT, namelang, FcTrue); FcPatternObjectAddWithBinding (pattern, FC_FULLNAMELANG_OBJECT, v2, FcValueBindingWeak, FcTrue); diff --git a/src/fcdir.c b/src/fcdir.c index bfcdf95..93f220c 100644 --- a/src/fcdir.c +++ b/src/fcdir.c @@ -421,6 +421,13 @@ FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config) /* Not using existing cache file, construct new cache */ if (!cache) cache = FcDirCacheScan (dir, config); + if (cache) + { + FcFontSet *fs = FcCacheSet (cache); + + if (cache->dirs_count == 0 && (!fs || fs->nfont == 0)) + FcDirCacheDeleteUUID (dir, config); + } return cache; } diff --git a/src/fcformat.c b/src/fcformat.c index 59f8681..c76dc5e 100644 --- a/src/fcformat.c +++ b/src/fcformat.c @@ -544,7 +544,7 @@ interpret_count (FcFormatContext *c, FcStrBuf *buf) { int count; - FcPatternElt *e; + FcPatternIter iter; FcChar8 buf_static[64]; if (!expect_char (c, '#')) @@ -554,16 +554,9 @@ interpret_count (FcFormatContext *c, return FcFalse; count = 0; - e = FcPatternObjectFindElt (pat, - FcObjectFromName ((const char *) c->word)); - if (e) + if (FcPatternFindIter (pat, &iter, (const char *) c->word)) { - FcValueListPtr l; - count++; - for (l = FcPatternEltValues(e); - l->next; - l = l->next) - count++; + count = FcPatternIterValueCount (pat, &iter); } snprintf ((char *) buf_static, sizeof (buf_static), "%d", count); @@ -695,7 +688,7 @@ interpret_simple (FcFormatContext *c, FcPattern *pat, FcStrBuf *buf) { - FcPatternElt *e; + FcPatternIter iter; FcBool add_colon = FcFalse; FcBool add_elt_name = FcFalse; int idx; @@ -743,9 +736,7 @@ interpret_simple (FcFormatContext *c, c->word = orig; } - e = FcPatternObjectFindElt (pat, - FcObjectFromName ((const char *) c->word)); - if (e || else_string) + if (FcPatternFindIter (pat, &iter, (const char *) c->word) || else_string) { FcValueListPtr l = NULL; @@ -757,8 +748,7 @@ interpret_simple (FcFormatContext *c, FcStrBufChar (buf, '='); } - if (e) - l = FcPatternEltValues(e); + l = FcPatternIterGetValues (pat, &iter); if (idx != -1) { diff --git a/src/fcfreetype.c b/src/fcfreetype.c index 36f5aed..07978cf 100644 --- a/src/fcfreetype.c +++ b/src/fcfreetype.c @@ -1136,30 +1136,65 @@ static const FT_UShort nameid_order[] = { #define NUM_NAMEID_ORDER (sizeof (nameid_order) / sizeof (nameid_order[0])) -static FcBool -FcFreeTypeGetName (const FT_Face face, - unsigned int platform, - unsigned int nameid, - FT_SfntName *sname) +typedef struct +{ + unsigned int platform_id; + unsigned int name_id; + unsigned int encoding_id; + unsigned int language_id; + unsigned int idx; +} FcNameMapping; + +static int +name_mapping_cmp (const void *pa, const void *pb) { - int min = 0, max = (int) FT_Get_Sfnt_Name_Count (face) - 1; + const FcNameMapping *a = (const FcNameMapping *) pa; + const FcNameMapping *b = (const FcNameMapping *) pb; + + if (a->platform_id != b->platform_id) return (int) a->platform_id - (int) b->platform_id; + if (a->name_id != b->name_id) return (int) a->name_id - (int) b->name_id; + if (a->encoding_id != b->encoding_id) return (int) a->encoding_id - (int) b->encoding_id; + if (a->language_id != b->language_id) return (int) a->language_id - (int) b->language_id; + if (a->idx != b->idx) return (int) a->idx - (int) b->idx; + + return 0; +} + +static int +FcFreeTypeGetFirstName (const FT_Face face, + unsigned int platform, + unsigned int nameid, + FcNameMapping *mapping, + unsigned int count, + FT_SfntName *sname) +{ + int min = 0, max = (int) count - 1; while (min <= max) { int mid = (min + max) / 2; - if (FT_Get_Sfnt_Name (face, mid, sname) != 0) + if (FT_Get_Sfnt_Name (face, mapping[mid].idx, sname) != 0) return FcFalse; - if (platform < sname->platform_id || (platform == sname->platform_id && nameid < sname->name_id)) + if (platform < sname->platform_id || + (platform == sname->platform_id && + (nameid < sname->name_id || + (nameid == sname->name_id && + (mid && + platform == mapping[mid - 1].platform_id && + nameid == mapping[mid - 1].name_id + ))))) max = mid - 1; - else if (platform > sname->platform_id || (platform == sname->platform_id && nameid > sname->name_id)) + else if (platform > sname->platform_id || + (platform == sname->platform_id && + nameid > sname->name_id)) min = mid + 1; else - return FcTrue; + return mid; } - return FcFalse; + return -1; } static FcPattern * @@ -1167,7 +1202,8 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, const FcChar8 *file, unsigned int id, FcCharSet **cs_share, - FcLangSet **ls_share) + FcLangSet **ls_share, + FcNameMapping **nm_share) { FcPattern *pat; int slant = -1; @@ -1180,6 +1216,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, FcBool variable_size = FcFalse; FcCharSet *cs; FcLangSet *ls; + FcNameMapping *name_mapping = NULL; #if 0 FcChar8 *family = 0; #endif @@ -1203,6 +1240,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, TT_Header *head; const FcChar8 *exclusiveLang = 0; + int name_count = 0; int nfamily = 0; int nfamily_lang = 0; int nstyle = 0; @@ -1229,7 +1267,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, if (!FcPatternAddBool (pat, FC_OUTLINE, has_outline)) goto bail1; - has_color = !!(face->face_flags & FT_FACE_FLAG_COLOR); + has_color = FT_HAS_COLOR (face); if (!FcPatternAddBool (pat, FC_COLOR, has_color)) goto bail1; @@ -1252,9 +1290,9 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, for (i = 0; i < master->num_axis; i++) { - double min_value = master->axis[i].minimum / (double) (1 << 16); - double def_value = master->axis[i].def / (double) (1 << 16); - double max_value = master->axis[i].maximum / (double) (1 << 16); + double min_value = master->axis[i].minimum / (double) (1U << 16); + double def_value = master->axis[i].def / (double) (1U << 16); + double max_value = master->axis[i].maximum / (double) (1U << 16); const char *elt = NULL; if (min_value > def_value || def_value > max_value || min_value == max_value) @@ -1311,8 +1349,8 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, for (i = 0; i < master->num_axis; i++) { - double value = instance->coords[i] / (double) (1 << 16); - double default_value = master->axis[i].def / (double) (1 << 16); + double value = instance->coords[i] / (double) (1U << 16); + double default_value = master->axis[i].def / (double) (1U << 16); double mult = default_value ? value / default_value : 1; //printf ("named-instance, axis %d tag %lx value %g\n", i, master->axis[i].tag, value); switch (master->axis[i].tag) @@ -1369,6 +1407,41 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, * and style names. FreeType makes quite a hash * of them */ + name_count = FT_Get_Sfnt_Name_Count (face); + if (nm_share) + name_mapping = *nm_share; + if (!name_mapping) + { + int i = 0; + name_mapping = malloc (name_count * sizeof (FcNameMapping)); + if (!name_mapping) + name_count = 0; + for (i = 0; i < name_count; i++) + { + FcNameMapping *p = &name_mapping[i]; + FT_SfntName sname; + if (FT_Get_Sfnt_Name (face, i, &sname) == 0) + { + p->platform_id = sname.platform_id; + p->name_id = sname.name_id; + p->encoding_id = sname.encoding_id; + p->language_id = sname.language_id; + p->idx = i; + } + else + { + p->platform_id = + p->name_id = + p->encoding_id = + p->language_id = + p->idx = (unsigned int) -1; + } + } + qsort (name_mapping, name_count, sizeof(FcNameMapping), name_mapping_cmp); + + if (nm_share) + *nm_share = name_mapping; + } for (p = 0; p < NUM_PLATFORM_ORDER; p++) { int platform = platform_order[p]; @@ -1380,6 +1453,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, for (n = 0; n < NUM_NAMEID_ORDER; n++) { FT_SfntName sname; + int nameidx; const FcChar8 *lang; const char *elt = 0, *eltlang = 0; int *np = 0, *nlangp = 0; @@ -1401,119 +1475,129 @@ FcFreeTypeQueryFaceInternal (const FT_Face face, lookupid = instance->strid; } - if (!FcFreeTypeGetName (face, platform, lookupid, &sname)) + nameidx = FcFreeTypeGetFirstName (face, platform, lookupid, + name_mapping, name_count, + &sname); + if (nameidx == -1) continue; - - switch (nameid) { - case TT_NAME_ID_WWS_FAMILY: - case TT_NAME_ID_PREFERRED_FAMILY: - case TT_NAME_ID_FONT_FAMILY: + do + { + switch (nameid) { + case TT_NAME_ID_WWS_FAMILY: + case TT_NAME_ID_PREFERRED_FAMILY: + case TT_NAME_ID_FONT_FAMILY: #if 0 - case TT_NAME_ID_UNIQUE_ID: + case TT_NAME_ID_UNIQUE_ID: #endif - if (FcDebug () & FC_DBG_SCANV) - printf ("found family (n %2d p %d e %d l 0x%04x)", - sname.name_id, sname.platform_id, - sname.encoding_id, sname.language_id); - - elt = FC_FAMILY; - eltlang = FC_FAMILYLANG; - np = &nfamily; - nlangp = &nfamily_lang; - break; - case TT_NAME_ID_MAC_FULL_NAME: - case TT_NAME_ID_FULL_NAME: - if (FcDebug () & FC_DBG_SCANV) - printf ("found full (n %2d p %d e %d l 0x%04x)", - sname.name_id, sname.platform_id, - sname.encoding_id, sname.language_id); - - elt = FC_FULLNAME; - eltlang = FC_FULLNAMELANG; - np = &nfullname; - nlangp = &nfullname_lang; - break; - case TT_NAME_ID_WWS_SUBFAMILY: - case TT_NAME_ID_PREFERRED_SUBFAMILY: - case TT_NAME_ID_FONT_SUBFAMILY: - if (variable) + if (FcDebug () & FC_DBG_SCANV) + printf ("found family (n %2d p %d e %d l 0x%04x)", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id); + + elt = FC_FAMILY; + eltlang = FC_FAMILYLANG; + np = &nfamily; + nlangp = &nfamily_lang; + break; + case TT_NAME_ID_MAC_FULL_NAME: + case TT_NAME_ID_FULL_NAME: + if (FcDebug () & FC_DBG_SCANV) + printf ("found full (n %2d p %d e %d l 0x%04x)", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id); + + elt = FC_FULLNAME; + eltlang = FC_FULLNAMELANG; + np = &nfullname; + nlangp = &nfullname_lang; + break; + case TT_NAME_ID_WWS_SUBFAMILY: + case TT_NAME_ID_PREFERRED_SUBFAMILY: + case TT_NAME_ID_FONT_SUBFAMILY: + if (variable) + break; + if (FcDebug () & FC_DBG_SCANV) + printf ("found style (n %2d p %d e %d l 0x%04x) ", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id); + + elt = FC_STYLE; + eltlang = FC_STYLELANG; + np = &nstyle; + nlangp = &nstyle_lang; + break; + case TT_NAME_ID_TRADEMARK: + case TT_NAME_ID_MANUFACTURER: + /* If the foundry wasn't found in the OS/2 table, look here */ + if(!foundry) + { + FcChar8 *utf8; + utf8 = FcSfntNameTranscode (&sname); + foundry = FcNoticeFoundry((FT_String *) utf8); + free (utf8); + } break; - if (FcDebug () & FC_DBG_SCANV) - printf ("found style (n %2d p %d e %d l 0x%04x) ", - sname.name_id, sname.platform_id, - sname.encoding_id, sname.language_id); - - elt = FC_STYLE; - eltlang = FC_STYLELANG; - np = &nstyle; - nlangp = &nstyle_lang; - break; - case TT_NAME_ID_TRADEMARK: - case TT_NAME_ID_MANUFACTURER: - /* If the foundry wasn't found in the OS/2 table, look here */ - if(!foundry) - { - FcChar8 *utf8; - utf8 = FcSfntNameTranscode (&sname); - foundry = FcNoticeFoundry((FT_String *) utf8); - free (utf8); } - break; - } - if (elt) - { - FcChar8 *utf8, *pp; - - utf8 = FcSfntNameTranscode (&sname); - lang = FcSfntNameLanguage (&sname); - - if (FcDebug () & FC_DBG_SCANV) - printf ("%s\n", utf8); - - if (!utf8) - continue; - - /* Trim surrounding whitespace. */ - pp = utf8; - while (*pp == ' ') - pp++; - len = strlen ((const char *) pp); - memmove (utf8, pp, len + 1); - pp = utf8 + len; - while (pp > utf8 && *(pp - 1) == ' ') - pp--; - *pp = 0; - - if (FcStringInPatternElement (pat, elt, utf8)) + if (elt) { - free (utf8); - continue; - } + FcChar8 *utf8, *pp; - /* add new element */ - if (!FcPatternAddString (pat, elt, utf8)) - { + utf8 = FcSfntNameTranscode (&sname); + lang = FcSfntNameLanguage (&sname); + + if (FcDebug () & FC_DBG_SCANV) + printf ("%s\n", utf8); + + if (!utf8) + continue; + + /* Trim surrounding whitespace. */ + pp = utf8; + while (*pp == ' ') + pp++; + len = strlen ((const char *) pp); + memmove (utf8, pp, len + 1); + pp = utf8 + len; + while (pp > utf8 && *(pp - 1) == ' ') + pp--; + *pp = 0; + + if (FcStringInPatternElement (pat, elt, utf8)) + { + free (utf8); + continue; + } + + /* add new element */ + if (!FcPatternAddString (pat, elt, utf8)) + { + free (utf8); + goto bail1; + } free (utf8); - goto bail1; - } - free (utf8); - if (lang) - { - /* pad lang list with 'und' to line up with elt */ - while (*nlangp < *np) + if (lang) { - if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "und")) + /* pad lang list with 'und' to line up with elt */ + while (*nlangp < *np) + { + if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "und")) + goto bail1; + ++*nlangp; + } + if (!FcPatternAddString (pat, eltlang, lang)) goto bail1; ++*nlangp; } - if (!FcPatternAddString (pat, eltlang, lang)) - goto bail1; - ++*nlangp; + ++*np; } - ++*np; } + while (++nameidx < name_count && + FT_Get_Sfnt_Name (face, name_mapping[nameidx].idx, &sname) == 0 && + platform == sname.platform_id && lookupid == sname.name_id); } } + if (!nm_share) + free (name_mapping); if (!nfamily && face->family_name && FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->family_name, (FcChar8 *) "") != 0) @@ -2035,7 +2119,7 @@ FcFreeTypeQueryFace (const FT_Face face, unsigned int id, FcBlanks *blanks FC_UNUSED) { - return FcFreeTypeQueryFaceInternal (face, file, id, NULL, NULL); + return FcFreeTypeQueryFaceInternal (face, file, id, NULL, NULL, NULL); } FcPattern * @@ -2057,7 +2141,7 @@ FcFreeTypeQuery(const FcChar8 *file, if (count) *count = face->num_faces; - pat = FcFreeTypeQueryFaceInternal (face, file, id, NULL, NULL); + pat = FcFreeTypeQueryFaceInternal (face, file, id, NULL, NULL, NULL); FT_Done_Face (face); bail: @@ -2076,6 +2160,7 @@ FcFreeTypeQueryAll(const FcChar8 *file, FT_Library ftLibrary = NULL; FcCharSet *cs = NULL; FcLangSet *ls = NULL; + FcNameMapping *nm = NULL; FT_MM_Var *mm_var = NULL; FcBool index_set = id != (unsigned int) -1; unsigned int set_face_num = index_set ? id & 0xFFFF : 0; @@ -2135,7 +2220,7 @@ FcFreeTypeQueryAll(const FcChar8 *file, } id = ((instance_num << 16) + face_num); - pat = FcFreeTypeQueryFaceInternal (face, (const FcChar8 *) file, id, &cs, &ls); + pat = FcFreeTypeQueryFaceInternal (face, (const FcChar8 *) file, id, &cs, &ls, &nm); if (pat) { @@ -2154,6 +2239,8 @@ skip: instance_num = 0x8000; /* variable font */ else { + free (nm); + nm = NULL; FcLangSetDestroy (ls); ls = NULL; FcCharSetDestroy (cs); @@ -2527,7 +2614,7 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags) ftglue_stream_frame_exit( stream ); *stags = malloc(script_count * sizeof (FT_ULong)); - if (!stags) + if (!*stags) return 0; p = 0; diff --git a/src/fchash.c b/src/fchash.c index 396f452..2f06f1a 100644 --- a/src/fchash.c +++ b/src/fchash.c @@ -214,3 +214,32 @@ FcHashTableReplace (FcHashTable *table, { return FcHashTableAddInternal (table, key, value, FcTrue); } + +FcBool +FcHashTableRemove (FcHashTable *table, + void *key) +{ + FcHashBucket **prev, *bucket; + FcChar32 hash = table->hash_func (key); + FcBool ret = FcFalse; + +retry: + for (prev = &table->buckets[hash % FC_HASH_SIZE]; + (bucket = fc_atomic_ptr_get (prev)); prev = &(bucket->next)) + { + if (!table->compare_func (bucket->key, key)) + { + if (!fc_atomic_ptr_cmpexch (prev, bucket, bucket->next)) + goto retry; + if (table->key_destroy_func) + table->key_destroy_func (bucket->key); + if (table->value_destroy_func) + table->value_destroy_func (bucket->value); + free (bucket); + ret = FcTrue; + break; + } + } + + return ret; +} diff --git a/src/fcint.h b/src/fcint.h index 5de311f..de78cd8 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -242,7 +242,7 @@ typedef enum _FcOp { } FcOp; typedef enum _FcOpFlags { - FcOpFlagIgnoreBlanks = 1 << 0 + FcOpFlagIgnoreBlanks = 1U << 0 } FcOpFlags; #define FC_OP_GET_OP(_x_) ((_x_) & 0xffff) @@ -566,7 +566,6 @@ struct _FcConfig { FcStrSet *availConfigFiles; /* config files available */ FcPtrList *rulesetList; /* List of rulesets being installed */ FcHashTable *uuid_table; /* UUID table for cachedirs */ - FcHashTable *alias_table; /* alias table for cachedirs */ }; typedef struct _FcFileTime { @@ -617,9 +616,13 @@ FcCacheObjectReference (void *object); FcPrivate void FcCacheObjectDereference (void *object); +FcPrivate void * +FcCacheAllocate (FcCache *cache, size_t len); + FcPrivate void FcCacheFini (void); + FcPrivate void FcDirCacheReference (FcCache *cache, int nref); @@ -708,7 +711,7 @@ FcConfigModifiedTime (FcConfig *config); FcPrivate FcBool FcConfigAddCache (FcConfig *config, FcCache *cache, - FcSetName set, FcStrSet *dirSet); + FcSetName set, FcStrSet *dirSet, FcChar8 *forDir); FcPrivate FcRuleSet * FcRuleSetCreate (const FcChar8 *name); @@ -1150,6 +1153,18 @@ FcPatternAppend (FcPattern *p, FcPattern *s); FcPrivate int FcPatternPosition (const FcPattern *p, const char *object); +FcPrivate FcBool +FcPatternFindObjectIter (const FcPattern *pat, FcPatternIter *iter, FcObject object); + +FcPrivate FcObject +FcPatternIterGetObjectId (const FcPattern *pat, FcPatternIter *iter); + +FcPrivate FcValueListPtr +FcPatternIterGetValues (const FcPattern *pat, FcPatternIter *iter); + +FcPrivate FcPattern * +FcPatternCacheRewriteFile (const FcPattern *pat, FcCache *cache, const FcChar8 *relocated_font_file); + FcPrivate FcChar32 FcStringHash (const FcChar8 *s); @@ -1264,6 +1279,9 @@ FcStrGlobMatch (const FcChar8 *glob, FcPrivate FcBool FcStrUsesHome (const FcChar8 *s); +FcPrivate FcBool +FcStrIsAbsoluteFilename (const FcChar8 *s); + FcPrivate FcChar8 * FcStrBuildFilename (const FcChar8 *path, ...); @@ -1341,4 +1359,8 @@ FcHashTableReplace (FcHashTable *table, void *key, void *value); +FcPrivate FcBool +FcHashTableRemove (FcHashTable *table, + void *key); + #endif /* _FC_INT_H_ */ diff --git a/src/fclang.c b/src/fclang.c index eadf34b..687e2a7 100644 --- a/src/fclang.c +++ b/src/fclang.c @@ -59,7 +59,7 @@ FcLangSetBitSet (FcLangSet *ls, if (bucket >= ls->map_size) return; /* shouldn't happen really */ - ls->map[bucket] |= ((FcChar32) 1 << (id & 0x1f)); + ls->map[bucket] |= ((FcChar32) 1U << (id & 0x1f)); } static FcBool @@ -87,7 +87,7 @@ FcLangSetBitReset (FcLangSet *ls, if (bucket >= ls->map_size) return; /* shouldn't happen really */ - ls->map[bucket] &= ~((FcChar32) 1 << (id & 0x1f)); + ls->map[bucket] &= ~((FcChar32) 1U << (id & 0x1f)); } FcLangSet * @@ -157,7 +157,7 @@ FcFreeTypeLangSet (const FcCharSet *charset, if (map[i]) { for (j = 0; j < 32; j++) - if (map[i] & (1 << j)) + if (map[i] & (1U << j)) printf (" %04x", ucs4 + i * 32 + j); } } @@ -848,7 +848,7 @@ FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls) if ((bits = ls->map[i])) { for (bit = 0; bit <= 31; bit++) - if (bits & (1 << bit)) + if (bits & (1U << bit)) { int id = (i << 5) | bit; if (!first) @@ -982,7 +982,7 @@ FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb) if (missing) { for (j = 0; j < 32; j++) - if (missing & (1 << j)) + if (missing & (1U << j)) { if (!FcLangSetContainsLang (lsa, fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang)) diff --git a/src/fclist.c b/src/fclist.c index 5f92a72..494bdea 100644 --- a/src/fclist.c +++ b/src/fclist.c @@ -448,41 +448,6 @@ FcListAppend (FcListHashTable *table, e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o])); if (e) { - if (FcRefIsConst (&font->ref) && !strcmp (os->objects[o], FC_FILE)) - { - FcChar8 *dir, *alias; - FcConfig *config = FcConfigGetCurrent (); /* FIXME: this may need to be exported as API? */ - - for (v = FcPatternEltValues (e); v->value.type != FcTypeString; v = FcValueListNext (v)); - if (!v) - goto bail2; - dir = FcStrDirname (FcValueString (&v->value)); - if (FcHashTableFind (config->alias_table, dir, (void **) &alias)) - { - FcChar8 *base = FcStrBasename (FcValueString (&v->value)); - FcChar8 *s = FcStrBuildFilename (alias, base, NULL); - FcValue vv; - - FcStrFree (alias); - FcStrFree (base); - vv.type = FcTypeString; - vv.u.s = s; - if (!FcPatternAdd (bucket->pattern, - os->objects[o], - FcValueCanonicalize (&vv), - FcTrue)) - { - FcStrFree (s); - FcStrFree (dir); - goto bail2; - } - FcStrFree (s); - FcStrFree (dir); - goto bail3; - } - else - FcStrFree (dir); - } for (v = FcPatternEltValues(e), idx = 0; v; v = FcValueListNext(v), ++idx) { @@ -491,7 +456,6 @@ FcListAppend (FcListHashTable *table, FcValueCanonicalize(&v->value), defidx != idx)) goto bail2; } - bail3:; } } *prev = bucket; @@ -604,6 +568,9 @@ FcFontSetList (FcConfig *config, free (bucket); } + if (destroy_os) + FcObjectSetDestroy (os); + return ret; bail2: diff --git a/src/fcmatch.c b/src/fcmatch.c index 62f8e58..c3d2b8a 100644 --- a/src/fcmatch.c +++ b/src/fcmatch.c @@ -682,43 +682,9 @@ FcFontRenderPrepare (FcConfig *config, } else { - if (FcRefIsConst (&font->ref) && fe->object == FC_FILE_OBJECT) - { - FcValueListPtr l = FcPatternEltValues (fe); - FcChar8 *dir, *alias; - - while (l->value.type != FcTypeString) - l = FcValueListNext (l); - if (!l) - goto bail0; - dir = FcStrDirname (FcValueString (&l->value)); - if (!config) - config = FcConfigGetCurrent (); - if (config && FcHashTableFind (config->alias_table, dir, (void **) &alias)) - { - FcChar8 *base = FcStrBasename (FcValueString (&l->value)); - FcChar8 *s = FcStrBuildFilename (alias, base, NULL); - FcValue v; - - FcStrFree (alias); - FcStrFree (base); - v.type = FcTypeString; - v.u.s = s; - FcPatternObjectAddWithBinding (new, fe->object, - FcValueCanonicalize (&v), - l->binding, - FcTrue); - FcStrFree (s); - FcStrFree (dir); - goto bail0; - } - else - FcStrFree (dir); - } FcPatternObjectListAdd (new, fe->object, FcValueListDuplicate (FcPatternEltValues (fe)), FcTrue); - bail0:; } } for (i = 0; i < pat->num; i++) @@ -841,19 +807,21 @@ FcFontSetMatchInternal (FcFontSet **sets, if (!(p = strchr (s, ','))) { f = FcFalse; - len = strlen (s) + 1; + len = strlen (s); } else { - len = (p - s) + 1; + len = (p - s); + } + x = malloc (sizeof (char) * (len + 1)); + if (x) + { + strcpy (x, s); + if (FcObjectFromName (x) > 0) + FcObjectSetAdd (os, x); + s = p + 1; + free (x); } - x = malloc (sizeof (char) * len); - strncpy (x, s, len - 1); - x[len - 1] = 0; - if (FcObjectFromName (x) > 0) - FcObjectSetAdd (os, x); - s = p + 1; - free (x); } free (ss); } diff --git a/src/fcname.c b/src/fcname.c index 79e413e..711bb9b 100644 --- a/src/fcname.c +++ b/src/fcname.c @@ -330,13 +330,37 @@ FcNameConvert (FcType type, FcChar8 *string) case FcTypeRange: if (sscanf ((char *) string, "[%lg %lg]", &b, &e) != 2) { - v.u.d = strtod ((char *) string, &p); - if (p != NULL && p[0] != 0) + char *sc, *ec; + size_t len = strlen ((const char *) string); + int si, ei; + + sc = malloc (len + 1); + ec = malloc (len + 1); + if (sc && ec && sscanf ((char *) string, "[%s %[^]]]", sc, ec) == 2) { - v.type = FcTypeVoid; - break; + if (FcNameConstant ((const FcChar8 *) sc, &si) && + FcNameConstant ((const FcChar8 *) ec, &ei)) + v.u.r = FcRangeCreateDouble (si, ei); + else + goto bail1; + } + else + { + bail1: + v.type = FcTypeDouble; + if (FcNameConstant (string, &si)) + { + v.u.d = (double) si; + } else { + v.u.d = strtod ((char *) string, &p); + if (p != NULL && p[0] != 0) + v.type = FcTypeVoid; + } } - v.type = FcTypeDouble; + if (sc) + free (sc); + if (ec) + free (ec); } else v.u.r = FcRangeCreateDouble (b, e); @@ -466,6 +490,10 @@ FcNameParse (const FcChar8 *name) if (!FcPatternAddBool (pat, c->object, c->value)) goto bail2; break; + case FcTypeRange: + if (!FcPatternAddInteger (pat, c->object, c->value)) + goto bail2; + break; default: break; } diff --git a/src/fcobjshash.h b/src/fcobjshash.h deleted file mode 100644 index 867a369..0000000 --- a/src/fcobjshash.h +++ /dev/null @@ -1,332 +0,0 @@ -/* ANSI-C code produced by gperf version 3.1 */ -/* Command-line: gperf --pic -m 100 fcobjshash.gperf */ -/* Computed positions: -k'2-3' */ - -#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ - && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ - && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ - && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ - && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ - && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ - && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ - && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ - && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ - && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ - && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ - && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ - && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ - && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ - && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ - && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ - && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ - && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ - && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ - && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ - && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ - && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ - && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) -/* The character set is not based on ISO-646. */ -#error "gperf generated tables don't work with this execution character set. Please report a bug to ." -#endif - -#line 1 "fcobjshash.gperf" - -#line 13 "fcobjshash.gperf" -struct FcObjectTypeInfo { -int name; -int id; -}; -#include -/* maximum key range = 65, duplicates = 0 */ - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static unsigned int -FcObjectTypeHash (register const char *str, register size_t len) -{ - static const unsigned char asso_values[] = - { - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 9, 21, 18, - 33, 21, 69, 6, 36, 0, 69, 69, 0, 24, - 9, 0, 21, 69, 33, 15, 18, 0, 69, 69, - 0, 21, 6, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69 - }; - return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[1]]; -} - -struct FcObjectTypeNamePool_t - { - char FcObjectTypeNamePool_str4[sizeof("file")]; - char FcObjectTypeNamePool_str5[sizeof("color")]; - char FcObjectTypeNamePool_str7[sizeof("foundry")]; - char FcObjectTypeNamePool_str8[sizeof("fullname")]; - char FcObjectTypeNamePool_str9[sizeof("pixelsize")]; - char FcObjectTypeNamePool_str10[sizeof("size")]; - char FcObjectTypeNamePool_str12[sizeof("fullnamelang")]; - char FcObjectTypeNamePool_str13[sizeof("globaladvance")]; - char FcObjectTypeNamePool_str14[sizeof("slant")]; - char FcObjectTypeNamePool_str16[sizeof("hinting")]; - char FcObjectTypeNamePool_str17[sizeof("minspace")]; - char FcObjectTypeNamePool_str18[sizeof("hintstyle")]; - char FcObjectTypeNamePool_str19[sizeof("fontformat")]; - char FcObjectTypeNamePool_str20[sizeof("fontversion")]; - char FcObjectTypeNamePool_str21[sizeof("fontfeatures")]; - char FcObjectTypeNamePool_str22[sizeof("lang")]; - char FcObjectTypeNamePool_str23[sizeof("fontvariations")]; - char FcObjectTypeNamePool_str24[sizeof("dpi")]; - char FcObjectTypeNamePool_str25[sizeof("outline")]; - char FcObjectTypeNamePool_str26[sizeof("autohint")]; - char FcObjectTypeNamePool_str27[sizeof("weight")]; - char FcObjectTypeNamePool_str28[sizeof("hash")]; - char FcObjectTypeNamePool_str29[sizeof("postscriptname")]; - char FcObjectTypeNamePool_str31[sizeof("rgba")]; - char FcObjectTypeNamePool_str32[sizeof("scale")]; - char FcObjectTypeNamePool_str33[sizeof("matrix")]; - char FcObjectTypeNamePool_str34[sizeof("rasterizer")]; - char FcObjectTypeNamePool_str35[sizeof("scalable")]; - char FcObjectTypeNamePool_str36[sizeof("antialias")]; - char FcObjectTypeNamePool_str37[sizeof("spacing")]; - char FcObjectTypeNamePool_str38[sizeof("width")]; - char FcObjectTypeNamePool_str39[sizeof("family")]; - char FcObjectTypeNamePool_str40[sizeof("capability")]; - char FcObjectTypeNamePool_str41[sizeof("namelang")]; - char FcObjectTypeNamePool_str42[sizeof("aspect")]; - char FcObjectTypeNamePool_str43[sizeof("familylang")]; - char FcObjectTypeNamePool_str44[sizeof("style")]; - char FcObjectTypeNamePool_str46[sizeof("prgname")]; - char FcObjectTypeNamePool_str47[sizeof("index")]; - char FcObjectTypeNamePool_str48[sizeof("stylelang")]; - char FcObjectTypeNamePool_str49[sizeof("decorative")]; - char FcObjectTypeNamePool_str50[sizeof("variable")]; - char FcObjectTypeNamePool_str51[sizeof("symbol")]; - char FcObjectTypeNamePool_str52[sizeof("charset")]; - char FcObjectTypeNamePool_str53[sizeof("embolden")]; - char FcObjectTypeNamePool_str54[sizeof("charwidth")]; - char FcObjectTypeNamePool_str55[sizeof("charheight")]; - char FcObjectTypeNamePool_str59[sizeof("embeddedbitmap")]; - char FcObjectTypeNamePool_str60[sizeof("lcdfilter")]; - char FcObjectTypeNamePool_str68[sizeof("verticallayout")]; - }; -static const struct FcObjectTypeNamePool_t FcObjectTypeNamePool_contents = - { - "file", - "color", - "foundry", - "fullname", - "pixelsize", - "size", - "fullnamelang", - "globaladvance", - "slant", - "hinting", - "minspace", - "hintstyle", - "fontformat", - "fontversion", - "fontfeatures", - "lang", - "fontvariations", - "dpi", - "outline", - "autohint", - "weight", - "hash", - "postscriptname", - "rgba", - "scale", - "matrix", - "rasterizer", - "scalable", - "antialias", - "spacing", - "width", - "family", - "capability", - "namelang", - "aspect", - "familylang", - "style", - "prgname", - "index", - "stylelang", - "decorative", - "variable", - "symbol", - "charset", - "embolden", - "charwidth", - "charheight", - "embeddedbitmap", - "lcdfilter", - "verticallayout" - }; -#define FcObjectTypeNamePool ((const char *) &FcObjectTypeNamePool_contents) -const struct FcObjectTypeInfo * -FcObjectTypeLookup (register const char *str, register size_t len) -{ - enum - { - TOTAL_KEYWORDS = 50, - MIN_WORD_LENGTH = 3, - MAX_WORD_LENGTH = 14, - MIN_HASH_VALUE = 4, - MAX_HASH_VALUE = 68 - }; - - static const struct FcObjectTypeInfo wordlist[] = - { - {-1}, {-1}, {-1}, {-1}, -#line 38 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str4,FC_FILE_OBJECT}, -#line 64 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str5,FC_COLOR_OBJECT}, - {-1}, -#line 31 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str7,FC_FOUNDRY_OBJECT}, -#line 22 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str8,FC_FULLNAME_OBJECT}, -#line 29 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str9,FC_PIXEL_SIZE_OBJECT}, -#line 27 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str10,FC_SIZE_OBJECT}, - {-1}, -#line 23 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str12,FC_FULLNAMELANG_OBJECT}, -#line 37 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str13,FC_GLOBAL_ADVANCE_OBJECT}, -#line 24 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str14,FC_SLANT_OBJECT}, - {-1}, -#line 34 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str16,FC_HINTING_OBJECT}, -#line 46 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str17,FC_MINSPACE_OBJECT}, -#line 33 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str18,FC_HINT_STYLE_OBJECT}, -#line 54 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str19,FC_FONTFORMAT_OBJECT}, -#line 52 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str20,FC_FONTVERSION_OBJECT}, -#line 60 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str21,FC_FONT_FEATURES_OBJECT}, -#line 51 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str22,FC_LANG_OBJECT}, -#line 66 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str23,FC_FONT_VARIATIONS_OBJECT}, -#line 43 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str24,FC_DPI_OBJECT}, -#line 41 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str25,FC_OUTLINE_OBJECT}, -#line 36 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str26,FC_AUTOHINT_OBJECT}, -#line 25 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str27,FC_WEIGHT_OBJECT}, -#line 62 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str28,FC_HASH_OBJECT}, -#line 63 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str29,FC_POSTSCRIPT_NAME_OBJECT}, - {-1}, -#line 44 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str31,FC_RGBA_OBJECT}, -#line 45 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str32,FC_SCALE_OBJECT}, -#line 49 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str33,FC_MATRIX_OBJECT}, -#line 40 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str34,FC_RASTERIZER_OBJECT}, -#line 42 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str35,FC_SCALABLE_OBJECT}, -#line 32 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str36,FC_ANTIALIAS_OBJECT}, -#line 30 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str37,FC_SPACING_OBJECT}, -#line 26 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str38,FC_WIDTH_OBJECT}, -#line 18 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str39,FC_FAMILY_OBJECT}, -#line 53 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str40,FC_CAPABILITY_OBJECT}, -#line 59 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str41,FC_NAMELANG_OBJECT}, -#line 28 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str42,FC_ASPECT_OBJECT}, -#line 19 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str43,FC_FAMILYLANG_OBJECT}, -#line 20 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str44,FC_STYLE_OBJECT}, - {-1}, -#line 61 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str46,FC_PRGNAME_OBJECT}, -#line 39 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str47,FC_INDEX_OBJECT}, -#line 21 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str48,FC_STYLELANG_OBJECT}, -#line 57 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str49,FC_DECORATIVE_OBJECT}, -#line 67 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str50,FC_VARIABLE_OBJECT}, -#line 65 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str51,FC_SYMBOL_OBJECT}, -#line 50 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str52,FC_CHARSET_OBJECT}, -#line 55 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str53,FC_EMBOLDEN_OBJECT}, -#line 47 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str54,FC_CHARWIDTH_OBJECT}, -#line 48 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str55,FC_CHAR_HEIGHT_OBJECT}, - {-1}, {-1}, {-1}, -#line 56 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str59,FC_EMBEDDED_BITMAP_OBJECT}, -#line 58 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str60,FC_LCD_FILTER_OBJECT}, - {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, -#line 35 "fcobjshash.gperf" - {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str68,FC_VERTICAL_LAYOUT_OBJECT} - }; - - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - register unsigned int key = FcObjectTypeHash (str, len); - - if (key <= MAX_HASH_VALUE) - { - register int o = wordlist[key].name; - if (o >= 0) - { - register const char *s = o + FcObjectTypeNamePool; - - if (*str == *s && !strcmp (str + 1, s + 1)) - return &wordlist[key]; - } - } - } - return 0; -} diff --git a/src/fcpat.c b/src/fcpat.c index e624aea..0861b8f 100644 --- a/src/fcpat.c +++ b/src/fcpat.c @@ -373,6 +373,71 @@ FcValueListHash (FcValueListPtr l) return hash; } +static void * +FcPatternGetCacheObject (FcPattern *p) +{ + /* We use a value to find the cache, instead of the FcPattern object + * because the pattern itself may be a cache allocation if we rewrote the path, + * so the p may not be in the cached region. */ + return FcPatternEltValues(&FcPatternElts (p)[0]); +} + +FcPattern * +FcPatternCacheRewriteFile (const FcPattern *p, + FcCache *cache, + const FcChar8 *relocated_font_file) +{ + FcPatternElt *elts = FcPatternElts (p); + size_t i,j; + FcChar8 *data; + FcPattern *new_p; + FcPatternElt *new_elts; + FcValueList *new_value_list; + size_t new_path_len = strlen ((char *)relocated_font_file); + FcChar8 *new_path; + + /* Allocate space for the patter, the PatternElt headers and + * the FC_FILE FcValueList and path that will be freed with the + * cache */ + data = FcCacheAllocate (cache, + sizeof (FcPattern) + + p->num * sizeof (FcPatternElt) + + sizeof (FcValueList) + + new_path_len + 1); + + new_p = (FcPattern *)data; + data += sizeof (FcPattern); + new_elts = (FcPatternElt *)(data); + data += p->num * sizeof (FcPatternElt); + new_value_list = (FcValueList *)data; + data += sizeof (FcValueList); + new_path = data; + + *new_p = *p; + new_p->elts_offset = FcPtrToOffset (new_p, new_elts); + + /* Copy all but the FILE values from the cache */ + for (i = 0, j = 0; i < p->num; i++) + { + FcPatternElt *elt = &elts[i]; + new_elts[j].object = elt->object; + if (elt->object != FC_FILE_OBJECT) + new_elts[j++].values = FcPatternEltValues(elt); + else + new_elts[j++].values = new_value_list; + } + + new_value_list->next = NULL; + new_value_list->value.type = FcTypeString; + new_value_list->value.u.s = new_path; + new_value_list->binding = FcValueBindingWeak; + + /* Add rewritten path at the end */ + strcpy ((char *)new_path, (char *)relocated_font_file); + + return new_p; +} + void FcPatternDestroy (FcPattern *p) { @@ -384,21 +449,31 @@ FcPatternDestroy (FcPattern *p) if (FcRefIsConst (&p->ref)) { - FcCacheObjectDereference (p); + FcCacheObjectDereference (FcPatternGetCacheObject(p)); return; } - + if (FcRefDec (&p->ref) != 1) return; elts = FcPatternElts (p); - for (i = 0; i < p->num; i++) + for (i = 0; i < FcPatternObjectCount (p); i++) FcValueListDestroy (FcPatternEltValues(&elts[i])); free (elts); free (p); } +int +FcPatternObjectCount (const FcPattern *pat) +{ + if (pat) + return pat->num; + + return 0; +} + + static int FcPatternObjectPosition (const FcPattern *p, FcObject object) { @@ -406,7 +481,7 @@ FcPatternObjectPosition (const FcPattern *p, FcObject object) FcPatternElt *elts = FcPatternElts(p); low = 0; - high = p->num - 1; + high = FcPatternObjectCount (p) - 1; c = 1; mid = 0; while (low <= high) @@ -452,7 +527,7 @@ FcPatternObjectInsertElt (FcPattern *p, FcObject object) i = -i - 1; /* reallocate array */ - if (p->num + 1 >= p->size) + if (FcPatternObjectCount (p) + 1 >= p->size) { int s = p->size + 16; if (p->size) @@ -463,7 +538,7 @@ FcPatternObjectInsertElt (FcPattern *p, FcObject object) { e = malloc(s * sizeof (FcPatternElt)); if (e) - memcpy(e, e0, p->num * sizeof (FcPatternElt)); + memcpy(e, e0, FcPatternObjectCount (p) * sizeof (FcPatternElt)); } } else @@ -484,7 +559,7 @@ FcPatternObjectInsertElt (FcPattern *p, FcObject object) memmove (e + i + 1, e + i, sizeof (FcPatternElt) * - (p->num - i)); + (FcPatternObjectCount (p) - i)); /* bump count */ p->num++; @@ -499,24 +574,26 @@ FcPatternObjectInsertElt (FcPattern *p, FcObject object) FcBool FcPatternEqual (const FcPattern *pa, const FcPattern *pb) { - int i; - FcPatternElt *pae, *pbe; + FcPatternIter ia, ib; if (pa == pb) return FcTrue; - if (pa->num != pb->num) + if (FcPatternObjectCount (pa) != FcPatternObjectCount (pb)) return FcFalse; - pae = FcPatternElts(pa); - pbe = FcPatternElts(pb); - for (i = 0; i < pa->num; i++) - { - if (pae[i].object != pbe[i].object) - return FcFalse; - if (!FcValueListEqual (FcPatternEltValues(&pae[i]), - FcPatternEltValues(&pbe[i]))) + FcPatternIterStart (pa, &ia); + FcPatternIterStart (pb, &ib); + do { + FcBool ra, rb; + + if (!FcPatternIterEqual (pa, &ia, pb, &ib)) return FcFalse; - } + ra = FcPatternIterNext (pa, &ia); + rb = FcPatternIterNext (pb, &ib); + if (!ra && !rb) + break; + } while (1); + return FcTrue; } @@ -527,7 +604,7 @@ FcPatternHash (const FcPattern *p) FcChar32 h = 0; FcPatternElt *pe = FcPatternElts(p); - for (i = 0; i < p->num; i++) + for (i = 0; i < FcPatternObjectCount (p); i++) { h = (((h << 1) | (h >> 31)) ^ pe[i].object ^ @@ -713,10 +790,10 @@ FcPatternObjectDel (FcPattern *p, FcObject object) /* shuffle existing ones down */ memmove (e, e+1, - (FcPatternElts(p) + p->num - (e + 1)) * + (FcPatternElts(p) + FcPatternObjectCount (p) - (e + 1)) * sizeof (FcPatternElt)); p->num--; - e = FcPatternElts(p) + p->num; + e = FcPatternElts(p) + FcPatternObjectCount (p); e->object = 0; e->values = NULL; return FcTrue; @@ -1115,8 +1192,7 @@ FcPattern * FcPatternDuplicate (const FcPattern *orig) { FcPattern *new; - FcPatternElt *e; - int i; + FcPatternIter iter; FcValueListPtr l; if (!orig) @@ -1126,20 +1202,18 @@ FcPatternDuplicate (const FcPattern *orig) if (!new) goto bail0; - e = FcPatternElts(orig); - - for (i = 0; i < orig->num; i++) + FcPatternIterStart (orig, &iter); + do { - for (l = FcPatternEltValues(e + i); l; l = FcValueListNext(l)) + for (l = FcPatternIterGetValues (orig, &iter); l; l = FcValueListNext (l)) { - if (!FcPatternObjectAddWithBinding (new, e[i].object, + if (!FcPatternObjectAddWithBinding (new, FcPatternIterGetObjectId (orig, &iter), FcValueCanonicalize(&l->value), l->binding, FcTrue)) goto bail1; - } - } + } while (FcPatternIterNext (orig, &iter)); return new; @@ -1155,7 +1229,7 @@ FcPatternReference (FcPattern *p) if (!FcRefIsConst (&p->ref)) FcRefInc (&p->ref); else - FcCacheObjectReference (p); + FcCacheObjectReference (FcPatternGetCacheObject(p)); } FcPattern * @@ -1184,21 +1258,21 @@ FcPatternBuild (FcPattern *p, ...) FcBool FcPatternAppend (FcPattern *p, FcPattern *s) { - int i; - FcPatternElt *e; - FcValueListPtr v; + FcPatternIter iter; + FcValueListPtr v; - for (i = 0; i < s->num; i++) + FcPatternIterStart (s, &iter); + do { - e = FcPatternElts(s)+i; - for (v = FcPatternEltValues(e); v; v = FcValueListNext(v)) + for (v = FcPatternIterGetValues (s, &iter); v; v = FcValueListNext (v)) { - if (!FcPatternObjectAddWithBinding (p, e->object, + if (!FcPatternObjectAddWithBinding (p, FcPatternIterGetObjectId (s, &iter), FcValueCanonicalize(&v->value), v->binding, FcTrue)) return FcFalse; } - } + } while (FcPatternIterNext (s, &iter)); + return FcTrue; } @@ -1239,6 +1313,148 @@ bail0: return NULL; } +typedef struct _FcPatternPrivateIter { + FcPatternElt *elt; + int pos; +} FcPatternPrivateIter; + +static void +FcPatternIterSet (const FcPattern *pat, FcPatternPrivateIter *iter) +{ + iter->elt = FcPatternObjectCount (pat) > 0 && iter->pos < FcPatternObjectCount (pat) ? &FcPatternElts (pat)[iter->pos] : NULL; +} + +void +FcPatternIterStart (const FcPattern *pat, FcPatternIter *iter) +{ + FcPatternPrivateIter *priv = (FcPatternPrivateIter *) iter; + + priv->pos = 0; + FcPatternIterSet (pat, priv); +} + +FcBool +FcPatternIterNext (const FcPattern *pat, FcPatternIter *iter) +{ + FcPatternPrivateIter *priv = (FcPatternPrivateIter *) iter; + + priv->pos++; + if (priv->pos >= FcPatternObjectCount (pat)) + return FcFalse; + FcPatternIterSet (pat, priv); + + return FcTrue; +} + +FcBool +FcPatternIterEqual (const FcPattern *p1, FcPatternIter *i1, + const FcPattern *p2, FcPatternIter *i2) +{ + FcBool b1 = FcPatternIterIsValid (p1, i1); + FcBool b2 = FcPatternIterIsValid (p2, i2); + + if (!i1 && !i2) + return FcTrue; + if (!b1 || !b2) + return FcFalse; + if (FcPatternIterGetObjectId (p1, i1) != FcPatternIterGetObjectId (p2, i2)) + return FcFalse; + + return FcValueListEqual (FcPatternIterGetValues (p1, i1), + FcPatternIterGetValues (p2, i2)); +} + +FcBool +FcPatternFindObjectIter (const FcPattern *pat, FcPatternIter *iter, FcObject object) +{ + FcPatternPrivateIter *priv = (FcPatternPrivateIter *) iter; + int i = FcPatternObjectPosition (pat, object); + + priv->elt = NULL; + if (i < 0) + return FcFalse; + + priv->pos = i; + FcPatternIterSet (pat, priv); + + return FcTrue; +} + +FcBool +FcPatternFindIter (const FcPattern *pat, FcPatternIter *iter, const char *object) +{ + return FcPatternFindObjectIter (pat, iter, FcObjectFromName (object)); +} + +FcBool +FcPatternIterIsValid (const FcPattern *pat, FcPatternIter *iter) +{ + FcPatternPrivateIter *priv = (FcPatternPrivateIter *)iter; + + if (priv && priv->elt) + return FcTrue; + + return FcFalse; +} + +FcObject +FcPatternIterGetObjectId (const FcPattern *pat, FcPatternIter *iter) +{ + FcPatternPrivateIter *priv = (FcPatternPrivateIter *) iter; + + if (priv && priv->elt) + return priv->elt->object; + + return 0; +} + +const char * +FcPatternIterGetObject (const FcPattern *pat, FcPatternIter *iter) +{ + return FcObjectName (FcPatternIterGetObjectId (pat, iter)); +} + +FcValueListPtr +FcPatternIterGetValues (const FcPattern *pat, FcPatternIter *iter) +{ + FcPatternPrivateIter *priv = (FcPatternPrivateIter *) iter; + + if (priv && priv->elt) + return FcPatternEltValues (priv->elt); + + return NULL; +} + +int +FcPatternIterValueCount (const FcPattern *pat, FcPatternIter *iter) +{ + int count = 0; + FcValueListPtr l; + + for (l = FcPatternIterGetValues (pat, iter); l; l = FcValueListNext (l)) + count++; + + return count; +} + +FcResult +FcPatternIterGetValue (const FcPattern *pat, FcPatternIter *iter, int id, FcValue *v, FcValueBinding *b) +{ + FcValueListPtr l; + + for (l = FcPatternIterGetValues (pat, iter); l; l = FcValueListNext (l)) + { + if (id == 0) + { + *v = FcValueCanonicalize (&l->value); + if (b) + *b = l->binding; + return FcResultMatch; + } + id--; + } + return FcResultNoId; +} FcBool FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat) @@ -1248,9 +1464,9 @@ FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat) if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern))) return FcFalse; - if (!FcSerializeAlloc (serialize, elts, pat->num * sizeof (FcPatternElt))) + if (!FcSerializeAlloc (serialize, elts, FcPatternObjectCount (pat) * sizeof (FcPatternElt))) return FcFalse; - for (i = 0; i < pat->num; i++) + for (i = 0; i < FcPatternObjectCount (pat); i++) if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues(elts+i))) return FcFalse; return FcTrue; @@ -1269,7 +1485,7 @@ FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) if (!pat_serialized) return NULL; *pat_serialized = *pat; - pat_serialized->size = pat->num; + pat_serialized->size = FcPatternObjectCount (pat); FcRefSetConst (&pat_serialized->ref); elts_serialized = FcSerializePtr (serialize, elts); @@ -1279,7 +1495,7 @@ FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) pat_serialized->elts_offset = FcPtrToOffset (pat_serialized, elts_serialized); - for (i = 0; i < pat->num; i++) + for (i = 0; i < FcPatternObjectCount (pat); i++) { values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts+i)); if (!values_serialized) diff --git a/src/fcptrlist.c b/src/fcptrlist.c index a0688dd..bb88832 100644 --- a/src/fcptrlist.c +++ b/src/fcptrlist.c @@ -143,6 +143,8 @@ FcPtrListIterAdd (FcPtrList *list, return FcFalse; e = (FcPtrListEntry *) malloc (sizeof (FcPtrListEntry)); + if (!e) + return FcFalse; e->data = data; if (priv->entry) diff --git a/src/fcstat.c b/src/fcstat.c index f6e1aaa..5aa1643 100644 --- a/src/fcstat.c +++ b/src/fcstat.c @@ -218,6 +218,14 @@ FcScandir (const char *dirp, size_t dentlen = FcPtrToOffset (dent, dent->d_name) + strlen (dent->d_name) + 1; dentlen = ((dentlen + ALIGNOF_VOID_P - 1) & ~(ALIGNOF_VOID_P - 1)); p = (struct dirent *) malloc (dentlen); + if (!p) + { + free_dirent (dlist); + closedir (d); + errno = ENOMEM; + + return -1; + } memcpy (p, dent, dentlen); if ((n + 1) >= lsize) { @@ -225,6 +233,7 @@ FcScandir (const char *dirp, dlp = (struct dirent **) realloc (dlist, sizeof (struct dirent *) * lsize); if (!dlp) { + free (p); free_dirent (dlist); closedir (d); errno = ENOMEM; diff --git a/src/fcstdint.h b/src/fcstdint.h index 8fac49a..72a0c79 100644 --- a/src/fcstdint.h +++ b/src/fcstdint.h @@ -1,8 +1,8 @@ #ifndef _FONTCONFIG_SRC_FCSTDINT_H #define _FONTCONFIG_SRC_FCSTDINT_H 1 #ifndef _GENERATED_STDINT_H -#define _GENERATED_STDINT_H "fontconfig 2.13.0" -/* generated using gnu compiler gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2) */ +#define _GENERATED_STDINT_H "fontconfig 2.13.1" +/* generated using gnu compiler gcc (GCC) 8.2.1 20180801 (Red Hat 8.2.1-2) */ #define _STDINT_HAVE_STDINT_H 1 #include #endif diff --git a/src/fcstr.c b/src/fcstr.c index b65492d..4247c85 100644 --- a/src/fcstr.c +++ b/src/fcstr.c @@ -867,6 +867,17 @@ FcStrUsesHome (const FcChar8 *s) return *s == '~'; } +FcBool +FcStrIsAbsoluteFilename (const FcChar8 *s) +{ +#ifdef _WIN32 + if (*s == '\\' || + (isalpha (*s) && s[1] == ':' && (s[2] == '/' || s[2] == '\\'))) + return FcTrue; +#endif + return *s == '/'; +} + FcChar8 * FcStrBuildFilename (const FcChar8 *path, ...) @@ -942,7 +953,7 @@ FcStrCopyFilename (const FcChar8 *s) if (!home) return NULL; size = strlen ((char *) home) + strlen ((char *) s); - full = (FcChar8 *) malloc (size); + full = (FcChar8 *) malloc (size + 1); if (!full) return NULL; strcpy ((char *) full, (char *) home); diff --git a/src/fcxml.c b/src/fcxml.c index 7c8aaac..7797502 100644 --- a/src/fcxml.c +++ b/src/fcxml.c @@ -22,6 +22,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ +#include #include "fcint.h" #include #include @@ -645,7 +646,6 @@ FcTypecheckValue (FcConfigParse *parse, FcType value, FcType type) { if ((value == FcTypeLangSet && type == FcTypeString) || (value == FcTypeString && type == FcTypeLangSet) || - (value == FcTypeInteger && type == FcTypeRange) || (value == FcTypeDouble && type == FcTypeRange)) return; if (type == FcTypeUnknown) @@ -1834,6 +1834,8 @@ FcParseAlias (FcConfigParse *parse) !def) { FcExprDestroy (family); + if (rule) + FcRuleDestroy (rule); return; } else @@ -2186,6 +2188,7 @@ FcParseCacheDir (FcConfigParse *parse) if (!data) { FcConfigMessage (parse, FcSevereError, "out of memory"); + data = prefix; goto bail; } if (prefix) @@ -2197,7 +2200,7 @@ FcParseCacheDir (FcConfigParse *parse) if (!p) { FcConfigMessage (parse, FcSevereError, "out of memory"); - data = prefix; + FcStrFree (prefix); goto bail; } prefix = p; @@ -2229,6 +2232,7 @@ FcParseCacheDir (FcConfigParse *parse) else if (strcmp ((const char *) data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0) { int rc; + FcStrFree (data); data = malloc (1000); if (!data) @@ -2773,6 +2777,14 @@ FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element) { FcConfigMessage (parse, FcSevereError, "out of memory"); } + else + { + if (parse->scanOnly && vstack->u.string) + { + FcStrFree (vstack->u.string); + vstack->tag = FcVStackNone; + } + } break; case FcVStackPattern: if (!parse->scanOnly && !FcConfigPatternsAdd (parse->config, @@ -2782,7 +2794,11 @@ FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element) FcConfigMessage (parse, FcSevereError, "out of memory"); } else + { + if (parse->scanOnly && vstack->u.pattern) + FcPatternDestroy (vstack->u.pattern); vstack->tag = FcVStackNone; + } break; default: FcConfigMessage (parse, FcSevereWarning, "bad font selector"); @@ -3443,7 +3459,7 @@ _FcConfigParse (FcConfig *config, FcStrBufInit (&sbuf, NULL, 0); - fd = FcOpen ((char *) filename, O_RDONLY); + fd = FcOpen ((char *) realfilename, O_RDONLY); if (fd == -1) goto bail1; @@ -3451,7 +3467,20 @@ _FcConfigParse (FcConfig *config, len = read (fd, buf, BUFSIZ); if (len < 0) { - FcConfigMessage (0, FcSevereError, "failed reading config file"); + int errno_ = errno; + char ebuf[BUFSIZ+1]; + +#if HAVE_STRERROR_R + strerror_r (errno_, ebuf, BUFSIZ); +#elif HAVE_STRERROR + char *tmp = strerror (errno_); + size_t len = strlen (tmp); + strncpy (ebuf, tmp, FC_MIN (BUFSIZ, len)); + ebuf[FC_MIN (BUFSIZ, len)] = 0; +#else + ebuf[0] = 0; +#endif + FcConfigMessage (0, FcSevereError, "failed reading config file: %s: %s (errno %d)", realfilename, ebuf, errno_); close (fd); goto bail1; } diff --git a/test-driver b/test-driver index 0218a01..b8521a4 100755 --- a/test-driver +++ b/test-driver @@ -1,9 +1,9 @@ #! /bin/sh # test-driver - basic testsuite driver script. -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 2011-2017 Free Software Foundation, Inc. +# Copyright (C) 2011-2018 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ scriptversion=2016-01-11.22; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -140,7 +140,7 @@ echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/test/Makefile.am b/test/Makefile.am index 75e326c..79bcede 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -8,19 +8,24 @@ AM_TESTS_ENVIRONMENT= \ EXEEXT=${EXEEXT}; export EXEEXT; \ $(NULL) -BUILT_SOURCES = out.expected +BUILT_SOURCES = $(builddir)/out.expected SH_LOG_COMPILER = sh TESTS=run-test.sh -TESTDATA=4x6.pcf 8x16.pcf out.expected fonts.conf.in +TESTDATA = \ + 4x6.pcf \ + 8x16.pcf \ + fonts.conf.in \ + test-90-synthetic.json \ + $(NULL) if FREETYPE_PCF_LONG_FAMILY_NAMES -$(srcdir)/out.expected: $(srcdir)/out.expected-long-family-names - cp $(srcdir)/out.expected-long-family-names $(srcdir)/out.expected +$(builddir)/out.expected: $(srcdir)/out.expected-long-family-names Makefile + cp $(srcdir)/out.expected-long-family-names $(builddir)/out.expected else -$(srcdir)/out.expected: $(srcdir)/out.expected-no-long-family-names - cp $(srcdir)/out.expected-no-long-family-names $(srcdir)/out.expected +$(builddir)/out.expected: $(srcdir)/out.expected-no-long-family-names Makefile + cp $(srcdir)/out.expected-no-long-family-names $(builddir)/out.expected endif AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir) @@ -55,10 +60,39 @@ check_PROGRAMS += test-bz96676 test_bz96676_LDADD = $(top_builddir)/src/libfontconfig.la TESTS += test-bz96676 -EXTRA_DIST=run-test.sh $(TESTDATA) out.expected-long-family-names out.expected-no-long-family-names +check_PROGRAMS += test-name-parse +test_name_parse_LDADD = $(top_builddir)/src/libfontconfig.la +TESTS += test-name-parse + +if ENABLE_JSONC +check_PROGRAMS += test-conf +test_conf_CFLAGS = $(JSONC_CFLAGS) +test_conf_LDADD = $(top_builddir)/src/libfontconfig.la $(JSONC_LIBS) +TESTS += run-test-conf.sh +endif + +check_PROGRAMS += test-bz106618 +test_bz106618_LDADD = $(top_builddir)/src/libfontconfig.la + +check_PROGRAMS += test-hash +test_hash_CFLAGS = -I$(top_builddir) -I$(top_builddir)/src $(UUID_CFLAGS) +test_hash_LDADD = $(UUID_LIBS) +TESTS += test-hash + +check_PROGRAMS += test-bz106632 +test_bz106632_CFLAGS = \ + -I$(top_builddir) \ + -I$(top_builddir)/src \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src \ + -DFONTFILE='"$(abs_top_srcdir)/test/4x6.pcf"' \ + -DHAVE_CONFIG_H \ + $(NULL) +test_bz106632_LDADD = $(top_builddir)/src/libfontconfig.la +TESTS += test-bz106632 -CLEANFILES=out fonts.conf +EXTRA_DIST=run-test.sh run-test-conf.sh $(TESTDATA) out.expected-long-family-names out.expected-no-long-family-names -MAINTAINERCLEANFILES=out.expected +CLEANFILES=out out1 out2 fonts.conf out.expected -include $(top_srcdir)/git.mk diff --git a/test/Makefile.in b/test/Makefile.in index 7ed1c78..013abb4 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -89,11 +89,17 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ TESTS = run-test.sh test-bz89617$(EXEEXT) test-bz131804$(EXEEXT) \ - test-bz96676$(EXEEXT) + test-bz96676$(EXEEXT) test-name-parse$(EXEEXT) $(am__append_4) \ + test-hash$(EXEEXT) test-bz106632$(EXEEXT) check_PROGRAMS = $(am__EXEEXT_1) test-bz89617$(EXEEXT) \ - test-bz131804$(EXEEXT) $(am__EXEEXT_2) test-bz96676$(EXEEXT) + test-bz131804$(EXEEXT) $(am__EXEEXT_2) test-bz96676$(EXEEXT) \ + test-name-parse$(EXEEXT) $(am__EXEEXT_3) \ + test-bz106618$(EXEEXT) test-hash$(EXEEXT) \ + test-bz106632$(EXEEXT) @HAVE_PTHREAD_TRUE@am__append_1 = test-pthread @OS_WIN32_FALSE@am__append_2 = test-migration +@ENABLE_JSONC_TRUE@am__append_3 = test-conf +@ENABLE_JSONC_TRUE@am__append_4 = run-test-conf.sh subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_symbol.m4 \ @@ -117,14 +123,24 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @HAVE_PTHREAD_TRUE@am__EXEEXT_1 = test-pthread$(EXEEXT) @OS_WIN32_FALSE@am__EXEEXT_2 = test-migration$(EXEEXT) +@ENABLE_JSONC_TRUE@am__EXEEXT_3 = test-conf$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) -test_bz131804_SOURCES = test-bz131804.c -test_bz131804_OBJECTS = test-bz131804.$(OBJEXT) -test_bz131804_DEPENDENCIES = $(top_builddir)/src/libfontconfig.la +test_bz106618_SOURCES = test-bz106618.c +test_bz106618_OBJECTS = test-bz106618.$(OBJEXT) +test_bz106618_DEPENDENCIES = $(top_builddir)/src/libfontconfig.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = +test_bz106632_SOURCES = test-bz106632.c +test_bz106632_OBJECTS = test_bz106632-test-bz106632.$(OBJEXT) +test_bz106632_DEPENDENCIES = $(top_builddir)/src/libfontconfig.la +test_bz106632_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_bz106632_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +test_bz131804_SOURCES = test-bz131804.c +test_bz131804_OBJECTS = test-bz131804.$(OBJEXT) +test_bz131804_DEPENDENCIES = $(top_builddir)/src/libfontconfig.la test_bz89617_SOURCES = test-bz89617.c test_bz89617_OBJECTS = test_bz89617-test-bz89617.$(OBJEXT) test_bz89617_DEPENDENCIES = $(top_builddir)/src/libfontconfig.la @@ -134,10 +150,28 @@ test_bz89617_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ test_bz96676_SOURCES = test-bz96676.c test_bz96676_OBJECTS = test-bz96676.$(OBJEXT) test_bz96676_DEPENDENCIES = $(top_builddir)/src/libfontconfig.la +test_conf_SOURCES = test-conf.c +test_conf_OBJECTS = test_conf-test-conf.$(OBJEXT) +am__DEPENDENCIES_1 = +@ENABLE_JSONC_TRUE@test_conf_DEPENDENCIES = \ +@ENABLE_JSONC_TRUE@ $(top_builddir)/src/libfontconfig.la \ +@ENABLE_JSONC_TRUE@ $(am__DEPENDENCIES_1) +test_conf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_conf_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +test_hash_SOURCES = test-hash.c +test_hash_OBJECTS = test_hash-test-hash.$(OBJEXT) +test_hash_DEPENDENCIES = $(am__DEPENDENCIES_1) +test_hash_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_hash_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ test_migration_SOURCES = test-migration.c test_migration_OBJECTS = test-migration.$(OBJEXT) @OS_WIN32_FALSE@test_migration_DEPENDENCIES = \ @OS_WIN32_FALSE@ $(top_builddir)/src/libfontconfig.la +test_name_parse_SOURCES = test-name-parse.c +test_name_parse_OBJECTS = test-name-parse.$(OBJEXT) +test_name_parse_DEPENDENCIES = $(top_builddir)/src/libfontconfig.la test_pthread_SOURCES = test-pthread.c test_pthread_OBJECTS = test-pthread.$(OBJEXT) @HAVE_PTHREAD_TRUE@test_pthread_DEPENDENCIES = \ @@ -156,7 +190,15 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/test-bz106618.Po \ + ./$(DEPDIR)/test-bz131804.Po ./$(DEPDIR)/test-bz96676.Po \ + ./$(DEPDIR)/test-migration.Po ./$(DEPDIR)/test-name-parse.Po \ + ./$(DEPDIR)/test-pthread.Po \ + ./$(DEPDIR)/test_bz106632-test-bz106632.Po \ + ./$(DEPDIR)/test_bz89617-test-bz89617.Po \ + ./$(DEPDIR)/test_conf-test-conf.Po \ + ./$(DEPDIR)/test_hash-test-hash.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -176,10 +218,12 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = test-bz131804.c test-bz89617.c test-bz96676.c \ - test-migration.c test-pthread.c -DIST_SOURCES = test-bz131804.c test-bz89617.c test-bz96676.c \ - test-migration.c test-pthread.c +SOURCES = test-bz106618.c test-bz106632.c test-bz131804.c \ + test-bz89617.c test-bz96676.c test-conf.c test-hash.c \ + test-migration.c test-name-parse.c test-pthread.c +DIST_SOURCES = test-bz106618.c test-bz106632.c test-bz131804.c \ + test-bz89617.c test-bz96676.c test-conf.c test-hash.c \ + test-migration.c test-name-parse.c test-pthread.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -467,6 +511,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JSONC_CFLAGS = @JSONC_CFLAGS@ +JSONC_LIBS = @JSONC_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ @@ -600,9 +646,15 @@ AM_TESTS_ENVIRONMENT = \ EXEEXT=${EXEEXT}; export EXEEXT; \ $(NULL) -BUILT_SOURCES = out.expected +BUILT_SOURCES = $(builddir)/out.expected SH_LOG_COMPILER = sh -TESTDATA = 4x6.pcf 8x16.pcf out.expected fonts.conf.in +TESTDATA = \ + 4x6.pcf \ + 8x16.pcf \ + fonts.conf.in \ + test-90-synthetic.json \ + $(NULL) + AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir) @HAVE_PTHREAD_TRUE@test_pthread_LDADD = $(top_builddir)/src/libfontconfig.la test_bz89617_CFLAGS = \ @@ -613,9 +665,24 @@ test_bz131804_LDADD = $(top_builddir)/src/libfontconfig.la noinst_PROGRAMS = $(check_PROGRAMS) @OS_WIN32_FALSE@test_migration_LDADD = $(top_builddir)/src/libfontconfig.la test_bz96676_LDADD = $(top_builddir)/src/libfontconfig.la -EXTRA_DIST = run-test.sh $(TESTDATA) out.expected-long-family-names out.expected-no-long-family-names -CLEANFILES = out fonts.conf -MAINTAINERCLEANFILES = out.expected +test_name_parse_LDADD = $(top_builddir)/src/libfontconfig.la +@ENABLE_JSONC_TRUE@test_conf_CFLAGS = $(JSONC_CFLAGS) +@ENABLE_JSONC_TRUE@test_conf_LDADD = $(top_builddir)/src/libfontconfig.la $(JSONC_LIBS) +test_bz106618_LDADD = $(top_builddir)/src/libfontconfig.la +test_hash_CFLAGS = -I$(top_builddir) -I$(top_builddir)/src $(UUID_CFLAGS) +test_hash_LDADD = $(UUID_LIBS) +test_bz106632_CFLAGS = \ + -I$(top_builddir) \ + -I$(top_builddir)/src \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src \ + -DFONTFILE='"$(abs_top_srcdir)/test/4x6.pcf"' \ + -DHAVE_CONFIG_H \ + $(NULL) + +test_bz106632_LDADD = $(top_builddir)/src/libfontconfig.la +EXTRA_DIST = run-test.sh run-test-conf.sh $(TESTDATA) out.expected-long-family-names out.expected-no-long-family-names +CLEANFILES = out out1 out2 fonts.conf out.expected all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am @@ -638,8 +705,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -669,6 +736,14 @@ clean-noinstPROGRAMS: echo " rm -f" $$list; \ rm -f $$list +test-bz106618$(EXEEXT): $(test_bz106618_OBJECTS) $(test_bz106618_DEPENDENCIES) $(EXTRA_test_bz106618_DEPENDENCIES) + @rm -f test-bz106618$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_bz106618_OBJECTS) $(test_bz106618_LDADD) $(LIBS) + +test-bz106632$(EXEEXT): $(test_bz106632_OBJECTS) $(test_bz106632_DEPENDENCIES) $(EXTRA_test_bz106632_DEPENDENCIES) + @rm -f test-bz106632$(EXEEXT) + $(AM_V_CCLD)$(test_bz106632_LINK) $(test_bz106632_OBJECTS) $(test_bz106632_LDADD) $(LIBS) + test-bz131804$(EXEEXT): $(test_bz131804_OBJECTS) $(test_bz131804_DEPENDENCIES) $(EXTRA_test_bz131804_DEPENDENCIES) @rm -f test-bz131804$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_bz131804_OBJECTS) $(test_bz131804_LDADD) $(LIBS) @@ -681,10 +756,22 @@ test-bz96676$(EXEEXT): $(test_bz96676_OBJECTS) $(test_bz96676_DEPENDENCIES) $(EX @rm -f test-bz96676$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_bz96676_OBJECTS) $(test_bz96676_LDADD) $(LIBS) +test-conf$(EXEEXT): $(test_conf_OBJECTS) $(test_conf_DEPENDENCIES) $(EXTRA_test_conf_DEPENDENCIES) + @rm -f test-conf$(EXEEXT) + $(AM_V_CCLD)$(test_conf_LINK) $(test_conf_OBJECTS) $(test_conf_LDADD) $(LIBS) + +test-hash$(EXEEXT): $(test_hash_OBJECTS) $(test_hash_DEPENDENCIES) $(EXTRA_test_hash_DEPENDENCIES) + @rm -f test-hash$(EXEEXT) + $(AM_V_CCLD)$(test_hash_LINK) $(test_hash_OBJECTS) $(test_hash_LDADD) $(LIBS) + test-migration$(EXEEXT): $(test_migration_OBJECTS) $(test_migration_DEPENDENCIES) $(EXTRA_test_migration_DEPENDENCIES) @rm -f test-migration$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_migration_OBJECTS) $(test_migration_LDADD) $(LIBS) +test-name-parse$(EXEEXT): $(test_name_parse_OBJECTS) $(test_name_parse_DEPENDENCIES) $(EXTRA_test_name_parse_DEPENDENCIES) + @rm -f test-name-parse$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_name_parse_OBJECTS) $(test_name_parse_LDADD) $(LIBS) + test-pthread$(EXEEXT): $(test_pthread_OBJECTS) $(test_pthread_DEPENDENCIES) $(EXTRA_test_pthread_DEPENDENCIES) @rm -f test-pthread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pthread_OBJECTS) $(test_pthread_LDADD) $(LIBS) @@ -695,11 +782,22 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bz131804.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bz96676.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-migration.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_bz89617-test-bz89617.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bz106618.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bz131804.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bz96676.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-migration.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-name-parse.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_bz106632-test-bz106632.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_bz89617-test-bz89617.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_conf-test-conf.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hash-test-hash.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -722,6 +820,20 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +test_bz106632-test-bz106632.o: test-bz106632.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bz106632_CFLAGS) $(CFLAGS) -MT test_bz106632-test-bz106632.o -MD -MP -MF $(DEPDIR)/test_bz106632-test-bz106632.Tpo -c -o test_bz106632-test-bz106632.o `test -f 'test-bz106632.c' || echo '$(srcdir)/'`test-bz106632.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_bz106632-test-bz106632.Tpo $(DEPDIR)/test_bz106632-test-bz106632.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-bz106632.c' object='test_bz106632-test-bz106632.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bz106632_CFLAGS) $(CFLAGS) -c -o test_bz106632-test-bz106632.o `test -f 'test-bz106632.c' || echo '$(srcdir)/'`test-bz106632.c + +test_bz106632-test-bz106632.obj: test-bz106632.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bz106632_CFLAGS) $(CFLAGS) -MT test_bz106632-test-bz106632.obj -MD -MP -MF $(DEPDIR)/test_bz106632-test-bz106632.Tpo -c -o test_bz106632-test-bz106632.obj `if test -f 'test-bz106632.c'; then $(CYGPATH_W) 'test-bz106632.c'; else $(CYGPATH_W) '$(srcdir)/test-bz106632.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_bz106632-test-bz106632.Tpo $(DEPDIR)/test_bz106632-test-bz106632.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-bz106632.c' object='test_bz106632-test-bz106632.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bz106632_CFLAGS) $(CFLAGS) -c -o test_bz106632-test-bz106632.obj `if test -f 'test-bz106632.c'; then $(CYGPATH_W) 'test-bz106632.c'; else $(CYGPATH_W) '$(srcdir)/test-bz106632.c'; fi` + test_bz89617-test-bz89617.o: test-bz89617.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bz89617_CFLAGS) $(CFLAGS) -MT test_bz89617-test-bz89617.o -MD -MP -MF $(DEPDIR)/test_bz89617-test-bz89617.Tpo -c -o test_bz89617-test-bz89617.o `test -f 'test-bz89617.c' || echo '$(srcdir)/'`test-bz89617.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_bz89617-test-bz89617.Tpo $(DEPDIR)/test_bz89617-test-bz89617.Po @@ -736,6 +848,34 @@ test_bz89617-test-bz89617.obj: test-bz89617.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bz89617_CFLAGS) $(CFLAGS) -c -o test_bz89617-test-bz89617.obj `if test -f 'test-bz89617.c'; then $(CYGPATH_W) 'test-bz89617.c'; else $(CYGPATH_W) '$(srcdir)/test-bz89617.c'; fi` +test_conf-test-conf.o: test-conf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_conf_CFLAGS) $(CFLAGS) -MT test_conf-test-conf.o -MD -MP -MF $(DEPDIR)/test_conf-test-conf.Tpo -c -o test_conf-test-conf.o `test -f 'test-conf.c' || echo '$(srcdir)/'`test-conf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_conf-test-conf.Tpo $(DEPDIR)/test_conf-test-conf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-conf.c' object='test_conf-test-conf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_conf_CFLAGS) $(CFLAGS) -c -o test_conf-test-conf.o `test -f 'test-conf.c' || echo '$(srcdir)/'`test-conf.c + +test_conf-test-conf.obj: test-conf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_conf_CFLAGS) $(CFLAGS) -MT test_conf-test-conf.obj -MD -MP -MF $(DEPDIR)/test_conf-test-conf.Tpo -c -o test_conf-test-conf.obj `if test -f 'test-conf.c'; then $(CYGPATH_W) 'test-conf.c'; else $(CYGPATH_W) '$(srcdir)/test-conf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_conf-test-conf.Tpo $(DEPDIR)/test_conf-test-conf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-conf.c' object='test_conf-test-conf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_conf_CFLAGS) $(CFLAGS) -c -o test_conf-test-conf.obj `if test -f 'test-conf.c'; then $(CYGPATH_W) 'test-conf.c'; else $(CYGPATH_W) '$(srcdir)/test-conf.c'; fi` + +test_hash-test-hash.o: test-hash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hash_CFLAGS) $(CFLAGS) -MT test_hash-test-hash.o -MD -MP -MF $(DEPDIR)/test_hash-test-hash.Tpo -c -o test_hash-test-hash.o `test -f 'test-hash.c' || echo '$(srcdir)/'`test-hash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hash-test-hash.Tpo $(DEPDIR)/test_hash-test-hash.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-hash.c' object='test_hash-test-hash.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hash_CFLAGS) $(CFLAGS) -c -o test_hash-test-hash.o `test -f 'test-hash.c' || echo '$(srcdir)/'`test-hash.c + +test_hash-test-hash.obj: test-hash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hash_CFLAGS) $(CFLAGS) -MT test_hash-test-hash.obj -MD -MP -MF $(DEPDIR)/test_hash-test-hash.Tpo -c -o test_hash-test-hash.obj `if test -f 'test-hash.c'; then $(CYGPATH_W) 'test-hash.c'; else $(CYGPATH_W) '$(srcdir)/test-hash.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hash-test-hash.Tpo $(DEPDIR)/test_hash-test-hash.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-hash.c' object='test_hash-test-hash.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hash_CFLAGS) $(CFLAGS) -c -o test_hash-test-hash.obj `if test -f 'test-hash.c'; then $(CYGPATH_W) 'test-hash.c'; else $(CYGPATH_W) '$(srcdir)/test-hash.c'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -914,7 +1054,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS) fi; \ $$success || exit 1 -check-TESTS: +check-TESTS: $(check_PROGRAMS) $(check_SCRIPTS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @@ -956,6 +1096,27 @@ test-bz96676.log: test-bz96676$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-name-parse.log: test-name-parse$(EXEEXT) + @p='test-name-parse$(EXEEXT)'; \ + b='test-name-parse'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-hash.log: test-hash$(EXEEXT) + @p='test-hash$(EXEEXT)'; \ + b='test-hash'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test-bz106632.log: test-bz106632$(EXEEXT) + @p='test-bz106632$(EXEEXT)'; \ + b='test-bz106632'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) .sh.log: @p='$<'; \ $(am__set_b); \ @@ -971,7 +1132,10 @@ test-bz96676.log: test-bz96676$(EXEEXT) @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1044,14 +1208,22 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/test-bz106618.Po + -rm -f ./$(DEPDIR)/test-bz131804.Po + -rm -f ./$(DEPDIR)/test-bz96676.Po + -rm -f ./$(DEPDIR)/test-migration.Po + -rm -f ./$(DEPDIR)/test-name-parse.Po + -rm -f ./$(DEPDIR)/test-pthread.Po + -rm -f ./$(DEPDIR)/test_bz106632-test-bz106632.Po + -rm -f ./$(DEPDIR)/test_bz89617-test-bz89617.Po + -rm -f ./$(DEPDIR)/test_conf-test-conf.Po + -rm -f ./$(DEPDIR)/test_hash-test-hash.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -1097,7 +1269,16 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) + -rm -f ./$(DEPDIR)/test-bz106618.Po + -rm -f ./$(DEPDIR)/test-bz131804.Po + -rm -f ./$(DEPDIR)/test-bz96676.Po + -rm -f ./$(DEPDIR)/test-migration.Po + -rm -f ./$(DEPDIR)/test-name-parse.Po + -rm -f ./$(DEPDIR)/test-pthread.Po + -rm -f ./$(DEPDIR)/test_bz106632-test-bz106632.Po + -rm -f ./$(DEPDIR)/test_bz89617-test-bz89617.Po + -rm -f ./$(DEPDIR)/test_conf-test-conf.Po + -rm -f ./$(DEPDIR)/test_hash-test-hash.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -1118,8 +1299,8 @@ uninstall-am: .MAKE: all check check-am install install-am install-strip -.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ - clean-checkPROGRAMS clean-generic clean-libtool \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ + check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ @@ -1136,10 +1317,10 @@ uninstall-am: .PRECIOUS: Makefile -@FREETYPE_PCF_LONG_FAMILY_NAMES_TRUE@$(srcdir)/out.expected: $(srcdir)/out.expected-long-family-names -@FREETYPE_PCF_LONG_FAMILY_NAMES_TRUE@ cp $(srcdir)/out.expected-long-family-names $(srcdir)/out.expected -@FREETYPE_PCF_LONG_FAMILY_NAMES_FALSE@$(srcdir)/out.expected: $(srcdir)/out.expected-no-long-family-names -@FREETYPE_PCF_LONG_FAMILY_NAMES_FALSE@ cp $(srcdir)/out.expected-no-long-family-names $(srcdir)/out.expected +@FREETYPE_PCF_LONG_FAMILY_NAMES_TRUE@$(builddir)/out.expected: $(srcdir)/out.expected-long-family-names Makefile +@FREETYPE_PCF_LONG_FAMILY_NAMES_TRUE@ cp $(srcdir)/out.expected-long-family-names $(builddir)/out.expected +@FREETYPE_PCF_LONG_FAMILY_NAMES_FALSE@$(builddir)/out.expected: $(srcdir)/out.expected-no-long-family-names Makefile +@FREETYPE_PCF_LONG_FAMILY_NAMES_FALSE@ cp $(srcdir)/out.expected-no-long-family-names $(builddir)/out.expected -include $(top_srcdir)/git.mk diff --git a/test/out.expected b/test/out.expected deleted file mode 100644 index 39634c5..0000000 --- a/test/out.expected +++ /dev/null @@ -1,8 +0,0 @@ -Fixed:pixelsize=16 -Fixed:pixelsize=6 -= -Fixed:pixelsize=16 -Fixed:pixelsize=6 -= -Fixed:pixelsize=16 -Fixed:pixelsize=6 diff --git a/test/run-test-conf.sh b/test/run-test-conf.sh new file mode 100644 index 0000000..4bcc29c --- /dev/null +++ b/test/run-test-conf.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# test/run-test-conf.sh +# +# Copyright © 2000 Keith Packard +# Copyright © 2018 Akira TAGOH +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +set -eu + +case "$OSTYPE" in + msys ) MyPWD=`pwd -W` ;; # On Msys/MinGW, returns a MS Windows style path. + * ) MyPWD=`pwd` ;; # On any other platforms, returns a Unix style path. +esac + +TESTDIR=${srcdir-"$MyPWD"} +BUILDTESTDIR=${builddir-"$MyPWD"} + +RUNNER=../test/test-conf$EXEEXT + +$RUNNER $TESTDIR/../conf.d/90-synthetic.conf $TESTDIR/test-90-synthetic.json diff --git a/test/run-test.sh b/test/run-test.sh index 436dee1..e76e39b 100644 --- a/test/run-test.sh +++ b/test/run-test.sh @@ -26,6 +26,7 @@ case "$OSTYPE" in esac TESTDIR=${srcdir-"$MyPWD"} +BUILDTESTDIR=${builddir-"$MyPWD"} FONTDIR="$MyPWD"/fonts CACHEDIR="$MyPWD"/cache.dir @@ -51,12 +52,12 @@ check () { echo "=" >> out $FCLIST - family pixelsize | sort >> out tr -d '\015' out.tmp; mv out.tmp out - if cmp out $TESTDIR/$EXPECTED > /dev/null ; then : ; else + if cmp out $BUILDTESTDIR/$EXPECTED > /dev/null ; then : ; else echo "*** Test failed: $TEST" echo "*** output is in 'out', expected output in '$EXPECTED'" exit 1 fi - rm out + rm -f out } prep() { @@ -140,7 +141,7 @@ if cmp out1 out2 > /dev/null ; then echo "*** .uuid wasn't modified" exit 1 fi -rm out1 out2 +rm -f out1 out2 dotest "Consistency between .uuid and cache name" prep @@ -188,6 +189,8 @@ TESTTMPDIR=`mktemp -d /tmp/fontconfig.XXXXXXXX` sed "s!@FONTDIR@!$TESTTMPDIR/fonts! s!@CACHEDIR@!$TESTTMPDIR/cache.dir!" < $TESTDIR/fonts.conf.in > bind-fonts.conf $BWRAP --bind / / --bind $CACHEDIR $TESTTMPDIR/cache.dir --bind $FONTDIR $TESTTMPDIR/fonts --bind .. $TESTTMPDIR/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE $TESTTMPDIR/build/test/bind-fonts.conf $TESTTMPDIR/build/fc-match/fc-match$EXEEXT -f "%{file}\n" ":foundry=Misc" > xxx +$BWRAP --bind / / --bind $CACHEDIR $TESTTMPDIR/cache.dir --bind $FONTDIR $TESTTMPDIR/fonts --bind .. $TESTTMPDIR/build --dev-bind /dev /dev --setenv FONTCONFIG_FILE $TESTTMPDIR/build/test/bind-fonts.conf $TESTTMPDIR/build/test/test-bz106618$EXEEXT | sort > flist1 +$BWRAP --bind / / --bind $CACHEDIR $TESTTMPDIR/cache.dir --bind $FONTDIR $TESTTMPDIR/fonts --bind .. $TESTTMPDIR/build --dev-bind /dev /dev find $TESTTMPDIR/fonts/ -type f -name '*.pcf' | sort > flist2 ls -l $CACHEDIR > out2 if cmp out1 out2 > /dev/null ; then : ; else echo "*** Test failed: $TEST" @@ -196,10 +199,59 @@ if cmp out1 out2 > /dev/null ; then : ; else fi if [ x`cat xxx` != "x$TESTTMPDIR/fonts/4x6.pcf" ]; then echo "*** Test failed: $TEST" - echo "file property doesn't points to the new place: $TESTTMPDIR/fonts/4x6.pcf" + echo "file property doesn't point to the new place: $TESTTMPDIR/fonts/4x6.pcf" exit 1 fi -rm -rf $TESTTMPDIR out1 out2 xxx bind-fonts.conf +if cmp flist1 flist2 > /dev/null ; then : ; else + echo "*** Test failed: $TEST" + echo "file properties doesn't point to the new places" + echo "Expected result:" + cat flist2 + echo "Actual result:" + cat flist1 + exit 1 +fi +rm -rf $TESTTMPDIR out1 out2 xxx flist1 flist2 bind-fonts.conf +fi + +dotest "sysroot option" +prep +mkdir -p $MyPWD/sysroot/$FONTDIR +mkdir -p $MyPWD/sysroot/$CACHEDIR +cp $FONT1 $MyPWD/sysroot/$FONTDIR +cp $MyPWD/fonts.conf $MyPWD/sysroot/$MyPWD/fonts.conf +$FCCACHE -y $MyPWD/sysroot +stat $MyPWD/sysroot/$FONTDIR/.uuid +if test $? != 0; then + echo "*** Test failed: $TEST" + exit 1 +fi + +dotest "creating uuid-based cache file on sysroot" +uuid=`cat $MyPWD/sysroot/$FONTDIR/.uuid` +ls $MyPWD/sysroot/$CACHEDIR/$uuid* +if [ $? != 0 ]; then + echo "*** Test failed: $TEST" + echo "No cache for $uuid" + ls $MyPWD/sysroot/$CACHEDIR + exit 1 +fi + +rm -rf $MyPWD/sysroot + +dotest "deleting .uuid file on empty dir" +prep +cp $FONT1 $FONT2 $FONTDIR +$FCCACHE $FONTDIR +sleep 1 +rm -f $FONTDIR/*pcf +$FCCACHE $FONTDIR +rmdir $FONTDIR > /dev/null 2>&1 +if [ $? != 0 ]; then + echo "*** Test failed: $TEST" + echo "$FONTDIR isn't empty" + ls -al $FONTDIR + exit 1 fi rm -rf $FONTDIR $CACHEFILE $CACHEDIR $FONTCONFIG_FILE out diff --git a/test/test-90-synthetic.json b/test/test-90-synthetic.json new file mode 100644 index 0000000..4205402 --- /dev/null +++ b/test/test-90-synthetic.json @@ -0,0 +1,68 @@ +{ + "fonts": [ + { + "family": "Foo", + "style": "Medium", + "weight": 100 + }, + { + "family": "Bar", + "style": "Regular", + "weight": 80 + }, + { + "family": "Baz", + "style": "Bold", + "weight": 200 + } + ], + "tests": [ + { + "method": "match", + "query": { + "family": "Foo", + "weight": 200 + }, + "result": { + "family": "Foo", + "weight": 200, + "embolden": true + } + }, + { + "method": "match", + "query": { + "family": "Bar", + "weight": 102 + }, + "result": { + "family": "Bar", + "weight": 80 + } + }, + { + "method": "match", + "query": { + "family": "Bar", + "weight": 200 + }, + "result": { + "family": "Bar", + "weight": 200, + "embolden": true + } + }, + { + "method": "match", + "query": { + "family": "Baz", + "weight": 200 + }, + "result": { + "family": "Baz", + "weight": 200, + "embolden": null + } + } + ] +} diff --git a/test/test-bz106618.c b/test/test-bz106618.c new file mode 100644 index 0000000..86f8eae --- /dev/null +++ b/test/test-bz106618.c @@ -0,0 +1,47 @@ +/* + * fontconfig/test/test-bz89617.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +#include +#include + +int +main (int argc, char **argv) +{ + FcFontSet *fs = FcConfigGetFonts (NULL, FcSetSystem); + int i; + + if (!fs) + return 1; + for (i = 0; i < fs->nfont; i++) + { + FcPattern *p = fs->fonts[i]; + FcChar8 *file; + + if (FcPatternGetString (p, FC_FILE, 0, &file) != FcResultMatch) + return 1; + printf ("%s\n", file); + } + FcFontSetDestroy (fs); + + return 0; +} diff --git a/test/test-bz106632.c b/test/test-bz106632.c new file mode 100644 index 0000000..daa0c1e --- /dev/null +++ b/test/test-bz106632.c @@ -0,0 +1,316 @@ +/* + * fontconfig/test/test-bz89617.c + * + * Copyright © 2000 Keith Packard + * Copyright © 2018 Akira TAGOH + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include +#ifndef HAVE_STRUCT_DIRENT_D_TYPE +#include +#include +#include +#endif +#include "fcstr.c" +#undef FcConfigBuildFonts +#undef FcConfigCreate +#undef FcConfigGetCurrent +#undef FcConfigParseAndLoadFromMemory +#undef FcConfigUptoDate +#undef FcFontList +#undef FcInitReinitialize +#undef FcPatternCreate +#undef FcPatternDestroy +#include + +#ifdef HAVE_MKDTEMP +#define fc_mkdtemp mkdtemp +#else +char * +fc_mkdtemp (char *template) +{ + if (!mktemp (template) || mkdir (template, 0700)) + return NULL; + + return template; +} +#endif + +FcBool +mkdir_p (const char *dir) +{ + char *parent; + FcBool ret; + + if (strlen (dir) == 0) + return FcFalse; + parent = (char *) FcStrDirname ((const FcChar8 *) dir); + if (!parent) + return FcFalse; + if (access (parent, F_OK) == 0) + ret = mkdir (dir, 0755) == 0 && chmod (dir, 0755) == 0; + else if (access (parent, F_OK) == -1) + ret = mkdir_p (parent) && (mkdir (dir, 0755) == 0) && chmod (dir, 0755) == 0; + else + ret = FcFalse; + free (parent); + + return ret; +} + +FcBool +unlink_dirs (const char *dir) +{ + DIR *d = opendir (dir); + struct dirent *e; + size_t len = strlen (dir); + char *n = NULL; + FcBool ret = FcTrue; +#ifndef HAVE_STRUCT_DIRENT_D_TYPE + struct stat statb; +#endif + + if (!d) + return FcFalse; + while ((e = readdir (d)) != NULL) + { + size_t l; + + if (strcmp (e->d_name, ".") == 0 || + strcmp (e->d_name, "..") == 0) + continue; + l = strlen (e->d_name) + 1; + if (n) + free (n); + n = malloc (l + len + 1); + if (!n) + { + ret = FcFalse; + break; + } + strcpy (n, dir); + n[len] = FC_DIR_SEPARATOR; + strcpy (&n[len + 1], e->d_name); +#ifdef HAVE_STRUCT_DIRENT_D_TYPE + if (e->d_type == DT_DIR) +#else + if (stat (n, &statb) == -1) + { + fprintf (stderr, "E: %s\n", n); + ret = FcFalse; + break; + } + if (S_ISDIR (statb.st_mode)) +#endif + { + if (!unlink_dirs (n)) + { + fprintf (stderr, "E: %s\n", n); + ret = FcFalse; + break; + } + } + else + { + if (unlink (n) == -1) + { + fprintf (stderr, "E: %s\n", n); + ret = FcFalse; + break; + } + } + } + if (n) + free (n); + closedir (d); + + if (rmdir (dir) == -1) + { + fprintf (stderr, "E: %s\n", dir); + return FcFalse; + } + + return ret; +} + +FcChar8 * +FcLangNormalize (const FcChar8 *lang) +{ + return NULL; +} + +FcChar8 * +FcConfigHome (void) +{ + return NULL; +} + +int +main (void) +{ + FcChar8 *fontdir = NULL, *cachedir = NULL, *fontname; + char *basedir, template[512] = "/tmp/bz106632-XXXXXX"; + char cmd[512]; + FcConfig *config; + const FcChar8 *tconf = "\n" + " %s\n" + " %s\n" + "\n"; + char conf[1024]; + int ret = 0; + FcFontSet *fs; + FcPattern *pat; + + fprintf (stderr, "D: Creating tmp dir\n"); + basedir = fc_mkdtemp (template); + if (!basedir) + { + fprintf (stderr, "%s: %s\n", template, strerror (errno)); + goto bail; + } + fontdir = FcStrBuildFilename (basedir, "fonts", NULL); + cachedir = FcStrBuildFilename (basedir, "cache", NULL); + fprintf (stderr, "D: Creating %s\n", fontdir); + mkdir_p (fontdir); + fprintf (stderr, "D: Creating %s\n", cachedir); + mkdir_p (cachedir); + + fprintf (stderr, "D: Copying %s to %s\n", FONTFILE, fontdir); + snprintf (cmd, 512, "cp -a %s %s", FONTFILE, fontdir); + system (cmd); + + fprintf (stderr, "D: Loading a config\n"); + snprintf (conf, 1024, tconf, fontdir, cachedir); + config = FcConfigCreate (); + if (!FcConfigParseAndLoadFromMemory (config, conf, FcTrue)) + { + printf ("E: Unable to load config\n"); + ret = 1; + goto bail; + } + if (!FcConfigBuildFonts (config)) + { + printf ("E: unable to build fonts\n"); + ret = 1; + goto bail; + } + fprintf (stderr, "D: Obtaining fonts information\n"); + pat = FcPatternCreate (); + fs = FcFontList (config, pat, NULL); + FcPatternDestroy (pat); + if (!fs || fs->nfont != 1) + { + printf ("E: Unexpected the number of fonts: %d\n", !fs ? -1 : fs->nfont); + ret = 1; + goto bail; + } + fprintf (stderr, "D: Removing %s\n", fontdir); + snprintf (cmd, 512, "rm -f %s%s*", fontdir, FC_DIR_SEPARATOR_S); + system (cmd); + fprintf (stderr, "D: Reinitializing\n"); + if (!FcConfigUptoDate (config) || !FcInitReinitialize ()) + { + fprintf (stderr, "E: Unable to reinitialize\n"); + ret = 2; + goto bail; + } + if (FcConfigGetCurrent () == config) + { + fprintf (stderr, "E: config wasn't reloaded\n"); + ret = 3; + goto bail; + } + config = FcConfigCreate (); + if (!FcConfigParseAndLoadFromMemory (config, conf, FcTrue)) + { + printf ("E: Unable to load config again\n"); + ret = 4; + goto bail; + } + if (!FcConfigBuildFonts (config)) + { + printf ("E: unable to build fonts again\n"); + ret = 5; + goto bail; + } + fprintf (stderr, "D: Obtaining fonts information again\n"); + pat = FcPatternCreate (); + fs = FcFontList (config, pat, NULL); + FcPatternDestroy (pat); + if (!fs || fs->nfont != 0) + { + printf ("E: Unexpected the number of fonts: %d\n", !fs ? -1 : fs->nfont); + ret = 1; + goto bail; + } + fprintf (stderr, "D: Copying %s to %s\n", FONTFILE, fontdir); + snprintf (cmd, 512, "cp -a %s %s", FONTFILE, fontdir); + system (cmd); + fprintf (stderr, "D: Reinitializing\n"); + if (!FcConfigUptoDate (config) || !FcInitReinitialize ()) + { + fprintf (stderr, "E: Unable to reinitialize\n"); + ret = 2; + goto bail; + } + if (FcConfigGetCurrent () == config) + { + fprintf (stderr, "E: config wasn't reloaded\n"); + ret = 3; + goto bail; + } + config = FcConfigCreate (); + if (!FcConfigParseAndLoadFromMemory (config, conf, FcTrue)) + { + printf ("E: Unable to load config again\n"); + ret = 4; + goto bail; + } + if (!FcConfigBuildFonts (config)) + { + printf ("E: unable to build fonts again\n"); + ret = 5; + goto bail; + } + fprintf (stderr, "D: Obtaining fonts information\n"); + pat = FcPatternCreate (); + fs = FcFontList (config, pat, NULL); + FcPatternDestroy (pat); + if (!fs || fs->nfont != 1) + { + printf ("E: Unexpected the number of fonts: %d\n", !fs ? -1 : fs->nfont); + ret = 1; + goto bail; + } + +bail: + fprintf (stderr, "Cleaning up\n"); + unlink_dirs (basedir); + if (fontdir) + FcStrFree (fontdir); + if (cachedir) + FcStrFree (cachedir); + + return ret; +} diff --git a/test/test-conf.c b/test/test-conf.c new file mode 100644 index 0000000..6619ea7 --- /dev/null +++ b/test/test-conf.c @@ -0,0 +1,328 @@ +/* + * fontconfig/test/test-conf.c + * + * Copyright © 2000 Keith Packard + * Copyright © 2018 Akira TAGOH + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +#include +#include +#include +#include + +struct _FcConfig { + FcStrSet *configDirs; /* directories to scan for fonts */ + FcStrSet *fontDirs; + FcStrSet *cacheDirs; + FcStrSet *configFiles; /* config files loaded */ + void *subst[FcMatchKindEnd]; + int maxObjects; /* maximum number of tests in all substs */ + FcStrSet *acceptGlobs; + FcStrSet *rejectGlobs; + FcFontSet *acceptPatterns; + FcFontSet *rejectPatterns; + FcFontSet *fonts[FcSetApplication + 1]; +}; + +static FcPattern * +build_pattern (json_object *obj) +{ + json_object_iter iter; + FcPattern *pat = FcPatternCreate (); + + json_object_object_foreachC (obj, iter) + { + FcValue v; + + if (json_object_get_type (iter.val) == json_type_boolean) + { + v.type = FcTypeBool; + v.u.b = json_object_get_boolean (iter.val); + } + else if (json_object_get_type (iter.val) == json_type_double) + { + v.type = FcTypeDouble; + v.u.d = json_object_get_double (iter.val); + } + else if (json_object_get_type (iter.val) == json_type_int) + { + v.type = FcTypeInteger; + v.u.i = json_object_get_int (iter.val); + } + else if (json_object_get_type (iter.val) == json_type_string) + { + v.type = FcTypeString; + v.u.s = json_object_get_string (iter.val); + } + else if (json_object_get_type (iter.val) == json_type_null) + { + v.type = FcTypeVoid; + } + else + { + fprintf (stderr, "W: unexpected object to build a pattern: (%s %s)", iter.key, json_type_to_name (json_object_get_type (iter.val))); + continue; + } + FcPatternAdd (pat, iter.key, v, FcTrue); + } + return pat; +} + +static FcBool +build_fonts (FcConfig *config, json_object *root) +{ + json_object *fonts; + FcFontSet *fs; + int i, n; + + if (!json_object_object_get_ex (root, "fonts", &fonts) || + json_object_get_type (fonts) != json_type_array) + { + fprintf (stderr, "W: No fonts defined\n"); + return FcFalse; + } + fs = FcFontSetCreate (); + n = json_object_array_length (fonts); + for (i = 0; i < n; i++) + { + json_object *obj = json_object_array_get_idx (fonts, i); + FcPattern *pat; + + if (json_object_get_type (obj) != json_type_object) + continue; + pat = build_pattern (obj); + FcFontSetAdd (fs, pat); + } + /* FcConfigSetFonts (config, fs, FcSetSystem); */ + if (config->fonts[FcSetSystem]) + FcFontSetDestroy (config->fonts[FcSetSystem]); + config->fonts[FcSetSystem] = fs; + + return FcTrue; +} + +static FcBool +run_test (FcConfig *config, json_object *root) +{ + json_object *tests; + FcFontSet *fs; + int i, n, fail = 0; + + if (!json_object_object_get_ex (root, "tests", &tests) || + json_object_get_type (tests) != json_type_array) + { + fprintf (stderr, "W: No test cases defined\n"); + return FcFalse; + } + fs = FcFontSetCreate (); + n = json_object_array_length (tests); + for (i = 0; i < n; i++) + { + json_object *obj = json_object_array_get_idx (tests, i); + json_object_iter iter; + FcPattern *query, *result; + const char *method; + + if (json_object_get_type (obj) != json_type_object) + continue; + json_object_object_foreachC (obj, iter) + { + if (strcmp (iter.key, "method") == 0) + { + if (json_object_get_type (iter.val) != json_type_string) + { + fprintf (stderr, "W: invalid type of method: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); + continue; + } + method = json_object_get_string (iter.val); + } + else if (strcmp (iter.key, "query") == 0) + { + if (json_object_get_type (iter.val) != json_type_object) + { + fprintf (stderr, "W: invalid type of query: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); + continue; + } + query = build_pattern (iter.val); + } + else if (strcmp (iter.key, "result") == 0) + { + if (json_object_get_type (iter.val) != json_type_object) + { + fprintf (stderr, "W: invalid type of result: (%s)\n", json_type_to_name (json_object_get_type (iter.val))); + continue; + } + result = build_pattern (iter.val); + } + else + { + fprintf (stderr, "W: unknown object: %s\n", iter.key); + } + } + if (strcmp (method, "match") == 0) + { + FcPattern *match; + FcResult res; + + FcConfigSubstitute (config, query, FcMatchPattern); + FcDefaultSubstitute (query); + match = FcFontMatch (config, query, &res); + if (match) + { + FcPatternIter iter; + int x, vc; + + FcPatternIterStart (result, &iter); + do + { + vc = FcPatternIterValueCount (result, &iter); + for (x = 0; x < vc; x++) + { + FcValue vr, vm; + + if (FcPatternIterGetValue (result, &iter, x, &vr, NULL) != FcResultMatch) + { + fprintf (stderr, "E: unable to obtain a value from the expected result\n"); + fail++; + goto bail; + } + if (FcPatternGet (match, FcPatternIterGetObject (result, &iter), x, &vm) != FcResultMatch) + { + vm.type = FcTypeVoid; + } + if (!FcValueEqual (vm, vr)) + { + printf ("E: failed to compare %s:\n", FcPatternIterGetObject (result, &iter)); + printf (" actual result:"); + FcValuePrint (vm); + printf ("\n expected result:"); + FcValuePrint (vr); + printf ("\n"); + fail++; + goto bail; + } + } + } while (FcPatternIterNext (result, &iter)); + bail:; + } + else + { + fprintf (stderr, "E: no match\n"); + fail++; + } + } + else + { + fprintf (stderr, "W: unknown testing method: %s\n", method); + } + } + + return fail == 0; +} + +static FcBool +run_scenario (FcConfig *config, char *file) +{ + FcBool ret = FcTrue; + json_object *root, *scenario; + + root = json_object_from_file (file); + if (!root) + { + fprintf (stderr, "E: Unable to read the file: %s\n", file); + return FcFalse; + } + if (!build_fonts (config, root)) + { + ret = FcFalse; + goto bail1; + } + if (!run_test (config, root)) + { + ret = FcFalse; + goto bail1; + } + +bail1: + json_object_put (root); + + return ret; +} + +static FcBool +load_config (FcConfig *config, char *file) +{ + FILE *fp; + long len; + char *buf = NULL; + FcBool ret = FcTrue; + + if ((fp = fopen(file, "rb")) == NULL) + return FcFalse; + fseek (fp, 0L, SEEK_END); + len = ftell (fp); + fseek (fp, 0L, SEEK_SET); + buf = malloc (sizeof (char) * (len + 1)); + if (!buf) + { + ret = FcFalse; + goto bail1; + } + fread (buf, (size_t)len, sizeof (char), fp); + buf[len] = 0; + + ret = FcConfigParseAndLoadFromMemory (config, buf, FcTrue); +bail1: + fclose (fp); + if (buf) + free (buf); + + return ret; +} + +int +main (int argc, char **argv) +{ + FcConfig *config; + int retval = 0; + + if (argc < 3) + { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + + config = FcConfigCreate (); + if (!load_config (config, argv[1])) + { + fprintf(stderr, "E: Failed to load config\n"); + retval = 1; + goto bail1; + } + if (!run_scenario (config, argv[2])) + { + retval = 1; + goto bail1; + } +bail1: + FcConfigDestroy (config); + + return retval; +} diff --git a/test/test-hash.c b/test/test-hash.c new file mode 100644 index 0000000..7530e82 --- /dev/null +++ b/test/test-hash.c @@ -0,0 +1,187 @@ +#include "../src/fchash.c" +#include "../src/fcstr.c" + +FcChar8 * +FcLangNormalize (const FcChar8 *lang) +{ + return NULL; +} + +FcChar8 * +FcConfigHome (void) +{ + return NULL; +} + +typedef struct _Test +{ + FcHashTable *table; +} Test; + +static Test * +init (void) +{ + Test *ret; + + ret = malloc (sizeof (Test)); + if (ret) + { + ret->table = FcHashTableCreate ((FcHashFunc) FcStrHashIgnoreCase, + (FcCompareFunc) FcStrCmp, + FcHashStrCopy, + FcHashUuidCopy, + (FcDestroyFunc) FcStrFree, + FcHashUuidFree); + } + + return ret; +} + +static void +fini (Test *test) +{ + FcHashTableDestroy (test->table); + free (test); +} + +static FcBool +test_add (Test *test, FcChar8 *key, FcBool replace) +{ + uuid_t uuid; + void *u; + FcBool (*hash_add) (FcHashTable *, void *, void *); + FcBool ret = FcFalse; + + uuid_generate_random (uuid); + if (replace) + hash_add = FcHashTableReplace; + else + hash_add = FcHashTableAdd; + if (!hash_add (test->table, key, uuid)) + return FcFalse; + if (!FcHashTableFind (test->table, key, &u)) + return FcFalse; + ret = (uuid_compare (uuid, u) == 0); + FcHashUuidFree (u); + + return ret; +} + +static FcBool +test_remove (Test *test, FcChar8 *key) +{ + void *u; + + if (!FcHashTableFind (test->table, key, &u)) + return FcFalse; + FcHashUuidFree (u); + if (!FcHashTableRemove (test->table, key)) + return FcFalse; + if (FcHashTableFind (test->table, key, &u)) + return FcFalse; + + return FcTrue; +} + +int +main (void) +{ + Test *test; + uuid_t uuid; + int ret = 0; + + test = init (); + /* first op to add */ + if (!test_add (test, "foo", FcFalse)) + { + ret = 1; + goto bail; + } + /* second op to add */ + if (!test_add (test, "bar", FcFalse)) + { + ret = 1; + goto bail; + } + /* dup not allowed */ + if (test_add (test, "foo", FcFalse)) + { + ret = 1; + goto bail; + } + /* replacement */ + if (!test_add (test, "foo", FcTrue)) + { + ret = 1; + goto bail; + } + /* removal */ + if (!test_remove (test, "foo")) + { + ret = 1; + goto bail; + } + /* not found to remove */ + if (test_remove (test, "foo")) + { + ret = 1; + goto bail; + } + /* complex op in pointer */ + if (!test_add (test, "foo", FcFalse)) + { + ret = 1; + goto bail; + } + if (test_add (test, "foo", FcFalse)) + { + ret = 1; + goto bail; + } + if (!test_remove (test, "foo")) + { + ret = 1; + goto bail; + } + if (!test_add (test, "foo", FcFalse)) + { + ret = 1; + goto bail; + } + if (!test_remove (test, "bar")) + { + ret = 1; + goto bail; + } + /* completely remove */ + if (!test_remove (test, "foo")) + { + ret = 1; + goto bail; + } + /* completely remove from the last one */ + if (!test_add (test, "foo", FcFalse)) + { + ret = 1; + goto bail; + } + if (!test_add (test, "bar", FcFalse)) + { + ret = 1; + goto bail; + } + if (!test_remove (test, "bar")) + { + ret = 1; + goto bail; + } + if (!test_remove (test, "foo")) + { + ret = 1; + goto bail; + } +bail: + fini (test); + + return ret; +} diff --git a/test/test-name-parse.c b/test/test-name-parse.c new file mode 100644 index 0000000..7382360 --- /dev/null +++ b/test/test-name-parse.c @@ -0,0 +1,90 @@ +#include +#include + +static int +test (const FcChar8 *query, const FcPattern *expect) +{ + FcPattern *pat; + int c = 0; + + c++; + pat = FcNameParse (query); + if (!pat) + goto bail; + c++; + if (!FcPatternEqual (pat, expect)) + goto bail; + c = 0; +bail: + FcPatternDestroy (pat); + + return c; +} + +#define BEGIN(x) (x) = FcPatternCreate (); c++; +#define END(x) FcPatternDestroy (x); (x) = NULL +int +main (void) +{ + FcPattern *expect; + int c = 0, ret; + + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"sans-serif"); + if ((ret = test ((const FcChar8 *)"sans\\-serif", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddInteger (expect, FC_SIZE, 10); + if ((ret = test ((const FcChar8 *)"Foo-10", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Bar"); + FcPatternAddInteger (expect, FC_SIZE, 10); + if ((ret = test ((const FcChar8 *)"Foo,Bar-10", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); + if ((ret = test ((const FcChar8 *)"Foo:weight=medium", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddString (expect, FC_FAMILY, (const FcChar8 *)"Foo"); + FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); + if ((ret = test ((const FcChar8 *)"Foo:weight_medium", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddInteger (expect, FC_WEIGHT, FC_WEIGHT_MEDIUM); + if ((ret = test ((const FcChar8 *)":medium", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL); + if ((ret = test ((const FcChar8 *)":normal", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcPatternAddInteger (expect, FC_WIDTH, FC_WIDTH_NORMAL); + if ((ret = test ((const FcChar8 *)":normal", expect)) != 0) + goto bail; + } END (expect); + BEGIN (expect) { + FcRange *r = FcRangeCreateDouble (FC_WEIGHT_MEDIUM, FC_WEIGHT_BOLD); + FcPatternAddRange (expect, FC_WEIGHT, r); + FcRangeDestroy (r); + if ((ret = test ((const FcChar8 *)":weight=[medium bold]", expect)) != 0) + goto bail; + } END (expect); + +bail: + if (expect) + FcPatternDestroy (expect); + + return ret == 0 ? 0 : (c - 1) * 2 + ret; +} -- 2.7.4