Diff
Modified: trunk/LayoutTests/ChangeLog (228876 => 228877)
--- trunk/LayoutTests/ChangeLog 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/LayoutTests/ChangeLog 2018-02-21 17:34:45 UTC (rev 228877)
@@ -1,3 +1,19 @@
+2018-02-21 Myles C. Maxfield <[email protected]>
+
+ [Cocoa] Make system-ui obey the user-installed-font policy
+ https://bugs.webkit.org/show_bug.cgi?id=182860
+ <rdar://problem/36158249>
+
+ Reviewed by Antti Koivisto.
+
+ FakeHelvetica-ArmenianCharacter.ttf is a font which supports a particular Armenian character which
+ isn't supported by any other font on the system. Installing this font will cause it to be added to
+ the 'system-ui' font cascade list. When we disable user-installed-fonts, this font should not be
+ used to render the character.
+
+ * fast/text/user-installed-fonts/system-ui-expected-mismatch.html:
+ * fast/text/user-installed-fonts/system-ui.html:
+
2018-02-20 Nan Wang <[email protected]>
AX: Keyboard focus not following VoiceOver cursor into web content or within web content.
Added: trunk/LayoutTests/fast/text/user-installed-fonts/system-ui-expected-mismatch.html (0 => 228877)
--- trunk/LayoutTests/fast/text/user-installed-fonts/system-ui-expected-mismatch.html (rev 0)
+++ trunk/LayoutTests/fast/text/user-installed-fonts/system-ui-expected-mismatch.html 2018-02-21 17:34:45 UTC (rev 228877)
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+if (window.testRunner)
+ testRunner.installFakeHelvetica("ArmenianCharacter");
+</script>
+</head>
+<body>
+<div style="font: 48px 'Helvetica2';">֍</div>
+</html>
Added: trunk/LayoutTests/fast/text/user-installed-fonts/system-ui.html (0 => 228877)
--- trunk/LayoutTests/fast/text/user-installed-fonts/system-ui.html (rev 0)
+++ trunk/LayoutTests/fast/text/user-installed-fonts/system-ui.html 2018-02-21 17:34:45 UTC (rev 228877)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+if (window.internals)
+ internals.settings.setShouldAllowUserInstalledFonts(false);
+if (window.testRunner)
+ testRunner.installFakeHelvetica("ArmenianCharacter");
+</script>
+</head>
+<body>
+<div style="font: 48px 'system-ui';">֍</div>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (228876 => 228877)
--- trunk/Source/WebCore/ChangeLog 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Source/WebCore/ChangeLog 2018-02-21 17:34:45 UTC (rev 228877)
@@ -1,3 +1,47 @@
+2018-02-21 Myles C. Maxfield <[email protected]>
+
+ [Cocoa] Make system-ui obey the user-installed-font policy
+ https://bugs.webkit.org/show_bug.cgi?id=182860
+ <rdar://problem/36158249>
+
+ Reviewed by Antti Koivisto.
+
+ We have a completely different codepath for system-ui which makes it follow the system's
+ font cascade list. This codepath (along with all the other relevant places which create
+ system fonts) needs to obey the AllowUserInstalledFonts enum. This patch is fairly
+ mechanical; we simply are hooking up the flag across SystemFontDatabase.
+
+ There are a few places which creates system fonts which this patch doesn't touch. This is
+ not a problem because all the remaining places either:
+ 1) Simply pull out some attributes of the font (name, weight, size, etc.) and then throw
+ away the font object itself, or
+ 2) Use the font in an environment where script cannot access the characters rendered (such
+ as DragImages or the fullscreen placeholder view or the inside of the attachment element).
+
+ Test: fast/text/user-installed-fonts/system-ui.html
+
+ * platform/graphics/cocoa/FontCacheCoreText.cpp:
+ (WebCore::FontDatabase::collectionForFamily):
+ (WebCore::FontDatabase::fontForPostScriptName):
+ (WebCore::fontWithFamily):
+ (WebCore::installedFontMandatoryAttributes):
+ (WebCore::createSpecificFontForInstalledFonts):
+ * platform/graphics/cocoa/FontCacheCoreText.h:
+ * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
+ (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::operator== const):
+ (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::hash const):
+ (WebCore::SystemFontDatabase::systemFontCascadeList):
+ (WebCore::SystemFontDatabase::removeCascadeList):
+ (WebCore::SystemFontDatabase::computeCascadeList):
+ (WebCore::systemFontParameters):
+ (WebCore::systemFontCascadeList):
+ (WebCore::FontCascadeDescription::effectiveFamilyCount const):
+ (WebCore::FontCascadeDescription::effectiveFamilyAt const):
+ * platform/graphics/ios/FontCacheIOS.mm:
+ (WebCore::platformFontWithFamilySpecialCase):
+ * platform/graphics/mac/FontCacheMac.mm:
+ (WebCore::platformFontWithFamilySpecialCase):
+
2018-02-21 Chris Dumez <[email protected]>
Unreviewed attempt to fix build after r228867.
Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp (228876 => 228877)
--- trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp 2018-02-21 17:34:45 UTC (rev 228877)
@@ -893,7 +893,7 @@
CFDictionaryAddValue(attributes.get(), kCTFontFamilyNameAttribute, familyNameString.get());
addAttributesForInstalledFonts(attributes.get(), m_allowUserInstalledFonts);
auto fontDescriptorToMatch = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
- RetainPtr<CFSetRef> mandatoryAttributes = installedFontMandatoryAttributes(m_allowUserInstalledFonts);
+ auto mandatoryAttributes = installedFontMandatoryAttributes(m_allowUserInstalledFonts);
if (auto matches = adoptCF(CTFontDescriptorCreateMatchingFontDescriptors(fontDescriptorToMatch.get(), mandatoryAttributes.get()))) {
auto count = CFArrayGetCount(matches.get());
Vector<InstalledFont> result;
@@ -923,7 +923,7 @@
CFDictionaryAddValue(attributes.get(), nameAttribute, postScriptNameString.get());
addAttributesForInstalledFonts(attributes.get(), m_allowUserInstalledFonts);
auto fontDescriptorToMatch = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
- RetainPtr<CFSetRef> mandatoryAttributes = installedFontMandatoryAttributes(m_allowUserInstalledFonts);
+ auto mandatoryAttributes = installedFontMandatoryAttributes(m_allowUserInstalledFonts);
auto match = adoptCF(CTFontDescriptorCreateMatchingFontDescriptor(fontDescriptorToMatch.get(), mandatoryAttributes.get()));
return InstalledFont(match.get());
}).iterator->value;
@@ -1201,7 +1201,7 @@
const auto& request = fontDescription.fontSelectionRequest();
FontLookup fontLookup;
- fontLookup.result = platformFontWithFamilySpecialCase(family, request, size);
+ fontLookup.result = platformFontWithFamilySpecialCase(family, request, size, fontDescription.shouldAllowUserInstalledFonts());
if (!fontLookup.result)
fontLookup = platformFontLookupWithFamily(family, request, size, fontDescription.shouldAllowUserInstalledFonts());
return preparePlatformFont(fontLookup.result.get(), fontDescription, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities, size, !fontLookup.createdFromPostScriptName);
@@ -1428,6 +1428,28 @@
#endif
}
+RetainPtr<CTFontRef> createFontForInstalledFonts(CTFontDescriptorRef fontDescriptor, CGFloat size, AllowUserInstalledFonts allowUserInstalledFonts)
+{
+ auto attributes = adoptCF(CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ addAttributesForInstalledFonts(attributes.get(), allowUserInstalledFonts);
+ if (CFDictionaryGetCount(attributes.get())) {
+ auto resultFontDescriptor = adoptCF(CTFontDescriptorCreateCopyWithAttributes(fontDescriptor, attributes.get()));
+ return adoptCF(CTFontCreateWithFontDescriptor(resultFontDescriptor.get(), size, nullptr));
+ }
+ return adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor, size, nullptr));
+}
+
+RetainPtr<CTFontRef> createFontForInstalledFonts(CTFontRef font, AllowUserInstalledFonts allowUserInstalledFonts)
+{
+ auto attributes = adoptCF(CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ addAttributesForInstalledFonts(attributes.get(), allowUserInstalledFonts);
+ if (CFDictionaryGetCount(attributes.get())) {
+ auto modification = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
+ return adoptCF(CTFontCreateCopyWithAttributes(font, CTFontGetSize(font), nullptr, modification.get()));
+ }
+ return font;
+}
+
void addAttributesForWebFonts(CFMutableDictionaryRef attributes, AllowUserInstalledFonts allowUserInstalledFonts)
{
#if CAN_DISALLOW_USER_INSTALLED_FONTS
@@ -1451,8 +1473,8 @@
}
#else
UNUSED_PARAM(allowUserInstalledFonts);
+ return nullptr;
#endif
- return nullptr;
}
Ref<Font> FontCache::lastResortFallbackFont(const FontDescription& fontDescription)
Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.h (228876 => 228877)
--- trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.h 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.h 2018-02-21 17:34:45 UTC (rev 228877)
@@ -52,11 +52,13 @@
RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, const FontDescription&, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities, float size, bool applyWeightWidthSlopeVariations = true);
SynthesisPair computeNecessarySynthesis(CTFontRef, const FontDescription&, bool isPlatformFont = false);
-RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest, float size);
+RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest, float size, AllowUserInstalledFonts);
RetainPtr<CTFontRef> platformFontWithFamily(const AtomicString& family, FontSelectionRequest, TextRenderingMode, float size);
bool requiresCustomFallbackFont(UChar32 character);
FontSelectionCapabilities capabilitiesForFontDescriptor(CTFontDescriptorRef);
void addAttributesForInstalledFonts(CFMutableDictionaryRef attributes, AllowUserInstalledFonts);
+RetainPtr<CTFontRef> createFontForInstalledFonts(CTFontDescriptorRef, CGFloat size, AllowUserInstalledFonts);
+RetainPtr<CTFontRef> createFontForInstalledFonts(CTFontRef, AllowUserInstalledFonts);
void addAttributesForWebFonts(CFMutableDictionaryRef attributes, AllowUserInstalledFonts);
RetainPtr<CFSetRef> installedFontMandatoryAttributes(AllowUserInstalledFonts);
Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp (228876 => 228877)
--- trunk/Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontDescriptionCocoa.cpp 2018-02-21 17:34:45 UTC (rev 228877)
@@ -65,6 +65,7 @@
&& locale == other.locale
&& weight == other.weight
&& size == other.size
+ && allowUserInstalledFonts == other.allowUserInstalledFonts
&& italic == other.italic;
}
@@ -76,6 +77,7 @@
hasher.add(locale.isNull() ? 0 : locale.existingHash());
hasher.add(weight);
hasher.add(size);
+ hasher.add(static_cast<unsigned>(allowUserInstalledFonts));
hasher.add(italic);
return hasher.hash();
}
@@ -96,6 +98,7 @@
AtomicString locale;
CGFloat weight { 0 };
float size { 0 };
+ AllowUserInstalledFonts allowUserInstalledFonts { AllowUserInstalledFonts::No };
bool italic { false };
};
@@ -116,8 +119,8 @@
if (clientUse == ClientUse::ForSystemUI) {
systemFont = adoptCF(CTFontCreateUIFontForLanguage(kCTFontUIFontSystem, parameters.size, localeString.get()));
ASSERT(systemFont);
- // FIXME: Use applyWeightAndItalics() in both cases once <rdar://problem/33046041> is fixed.
- systemFont = applyWeightAndItalics(systemFont.get(), parameters.weight, parameters.italic, parameters.size);
+ // FIXME: Use applyWeightItalicsAndFallbackBehavior() in both cases once <rdar://problem/33046041> is fixed.
+ systemFont = applyWeightItalicsAndFallbackBehavior(systemFont.get(), parameters.weight, parameters.italic, parameters.size, parameters.allowUserInstalledFonts);
} else {
#if PLATFORM(IOS)
ASSERT(clientUse == ClientUse::ForTextStyle);
@@ -125,7 +128,7 @@
CTFontSymbolicTraits traits = (parameters.weight >= kCTFontWeightSemibold ? kCTFontTraitBold : 0) | (parameters.italic ? kCTFontTraitItalic : 0);
if (traits)
fontDescriptor = adoptCF(CTFontDescriptorCreateCopyWithSymbolicTraits(fontDescriptor.get(), traits, traits));
- systemFont = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), parameters.size, nullptr));
+ systemFont = createFontForInstalledFonts(fontDescriptor.get(), parameters.size, parameters.allowUserInstalledFonts);
#else
ASSERT_NOT_REACHED();
#endif
@@ -147,7 +150,7 @@
{
}
- static RetainPtr<CTFontRef> applyWeightAndItalics(CTFontRef font, CGFloat weight, bool italic, float size)
+ static RetainPtr<CTFontRef> applyWeightItalicsAndFallbackBehavior(CTFontRef font, CGFloat weight, bool italic, float size, AllowUserInstalledFonts allowUserInstalledFonts)
{
auto weightNumber = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &weight));
const float systemFontItalicSlope = 0.07;
@@ -156,9 +159,9 @@
CFTypeRef traitsKeys[] = { kCTFontWeightTrait, kCTFontSlantTrait, kCTFontUIFontDesignTrait };
CFTypeRef traitsValues[] = { weightNumber.get(), italicsNumber.get(), kCFBooleanTrue };
auto traitsDictionary = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, traitsKeys, traitsValues, WTF_ARRAY_LENGTH(traitsKeys), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
- CFTypeRef modificationKeys[] = { kCTFontTraitsAttribute };
- CFTypeRef modificationValues[] = { traitsDictionary.get() };
- auto attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, modificationKeys, modificationValues, WTF_ARRAY_LENGTH(modificationKeys), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ auto attributes = adoptCF(CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ CFDictionaryAddValue(attributes.get(), kCTFontTraitsAttribute, traitsDictionary.get());
+ addAttributesForInstalledFonts(attributes.get(), allowUserInstalledFonts);
auto modification = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
return adoptCF(CTFontCreateCopyWithAttributes(font, size, nullptr, modification.get()));
}
@@ -241,7 +244,7 @@
}
#endif
-static inline SystemFontDatabase::CoreTextCascadeListParameters systemFontParameters(const FontCascadeDescription& description, const AtomicString& familyName, SystemFontDatabase::ClientUse clientUse)
+static inline SystemFontDatabase::CoreTextCascadeListParameters systemFontParameters(const FontCascadeDescription& description, const AtomicString& familyName, SystemFontDatabase::ClientUse clientUse, AllowUserInstalledFonts allowUserInstalledFonts)
{
SystemFontDatabase::CoreTextCascadeListParameters result;
result.locale = description.locale();
@@ -279,6 +282,8 @@
result.fontName = familyName;
}
+ result.allowUserInstalledFonts = allowUserInstalledFonts;
+
return result;
}
@@ -287,9 +292,9 @@
SystemFontDatabase::singleton().clear();
}
-static inline Vector<RetainPtr<CTFontDescriptorRef>> systemFontCascadeList(const FontCascadeDescription& description, const AtomicString& cssFamily, SystemFontDatabase::ClientUse clientUse)
+static inline Vector<RetainPtr<CTFontDescriptorRef>> systemFontCascadeList(const FontCascadeDescription& description, const AtomicString& cssFamily, SystemFontDatabase::ClientUse clientUse, AllowUserInstalledFonts allowUserInstalledFonts)
{
- return SystemFontDatabase::singleton().systemFontCascadeList(systemFontParameters(description, cssFamily, clientUse), clientUse);
+ return SystemFontDatabase::singleton().systemFontCascadeList(systemFontParameters(description, cssFamily, clientUse, allowUserInstalledFonts), clientUse);
}
unsigned FontCascadeDescription::effectiveFamilyCount() const
@@ -299,10 +304,10 @@
for (unsigned i = 0; i < familyCount(); ++i) {
const auto& cssFamily = familyAt(i);
if (isSystemFontString(cssFamily))
- result += systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForSystemUI).size();
+ result += systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForSystemUI, shouldAllowUserInstalledFonts()).size();
#if PLATFORM(IOS)
else if (isUIFontTextStyle(cssFamily))
- result += systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForTextStyle).size();
+ result += systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForTextStyle, shouldAllowUserInstalledFonts()).size();
#endif
else
++result;
@@ -322,7 +327,7 @@
for (unsigned i = 0; i < familyCount(); ++i) {
const auto& cssFamily = familyAt(i);
if (isSystemFontString(cssFamily)) {
- auto cascadeList = systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForSystemUI);
+ auto cascadeList = systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForSystemUI, shouldAllowUserInstalledFonts());
if (index < cascadeList.size())
return FontFamilySpecification(cascadeList[index].get());
index -= cascadeList.size();
@@ -329,7 +334,7 @@
}
#if PLATFORM(IOS)
else if (isUIFontTextStyle(cssFamily)) {
- auto cascadeList = systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForTextStyle);
+ auto cascadeList = systemFontCascadeList(*this, cssFamily, SystemFontDatabase::ClientUse::ForTextStyle, shouldAllowUserInstalledFonts());
if (index < cascadeList.size())
return FontFamilySpecification(cascadeList[index].get());
index -= cascadeList.size();
Modified: trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm (228876 => 228877)
--- trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm 2018-02-21 17:34:45 UTC (rev 228877)
@@ -132,7 +132,7 @@
return adoptCF(CTFontDescriptorCreateCopyWithAttributes(fontDescriptor.get(), static_cast<CFDictionaryRef>(attributes.get())));
}
-RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest request, float size)
+RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest request, float size, AllowUserInstalledFonts allowUserInstalledFonts)
{
// FIXME: See comment in FontCascadeDescription::effectiveFamilyAt() in FontDescriptionCocoa.cpp
if (family.startsWith("UICTFontTextStyle")) {
@@ -141,18 +141,18 @@
RetainPtr<CTFontDescriptorRef> fontDescriptor = adoptCF(CTFontDescriptorCreateWithTextStyle(familyNameStr.get(), RenderThemeIOS::contentSizeCategory(), nullptr));
if (traits)
fontDescriptor = adoptCF(CTFontDescriptorCreateCopyWithSymbolicTraits(fontDescriptor.get(), traits, traits));
-
- return adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), size, nullptr));
+ return createFontForInstalledFonts(fontDescriptor.get(), size, allowUserInstalledFonts);
}
if (equalLettersIgnoringASCIICase(family, "-webkit-system-font") || equalLettersIgnoringASCIICase(family, "-apple-system") || equalLettersIgnoringASCIICase(family, "-apple-system-font") || equalLettersIgnoringASCIICase(family, "system-ui")) {
- return adoptCF(CTFontCreateWithFontDescriptor(systemFontDescriptor(request.weight, isFontWeightBold(request.weight), isItalic(request.slope), size).get(), size, nullptr));
+ auto fontDescriptor = systemFontDescriptor(request.weight, isFontWeightBold(request.weight), isItalic(request.slope), size);
+ return createFontForInstalledFonts(fontDescriptor.get(), size, allowUserInstalledFonts);
}
if (equalLettersIgnoringASCIICase(family, "-apple-system-monospaced-numbers")) {
RetainPtr<CTFontDescriptorRef> systemFontDescriptor = adoptCF(CTFontDescriptorCreateForUIType(kCTFontUIFontSystem, size, nullptr));
RetainPtr<CTFontDescriptorRef> monospaceFontDescriptor = adoptCF(CTFontDescriptorCreateCopyWithFeature(systemFontDescriptor.get(), (CFNumberRef)@(kNumberSpacingType), (CFNumberRef)@(kMonospacedNumbersSelector)));
- return adoptCF(CTFontCreateWithFontDescriptor(monospaceFontDescriptor.get(), size, nullptr));
+ return createFontForInstalledFonts(monospaceFontDescriptor.get(), size, allowUserInstalledFonts);
}
if (equalLettersIgnoringASCIICase(family, "lastresort")) {
Modified: trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm (228876 => 228877)
--- trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm 2018-02-21 17:34:45 UTC (rev 228877)
@@ -73,7 +73,7 @@
return NSFontWeightBlack;
}
-RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest request, float size)
+RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest request, float size, AllowUserInstalledFonts allowUserInstalledFonts)
{
// FIXME: See comment in FontCascadeDescription::effectiveFamilyAt() in FontDescriptionCocoa.cpp
if (equalLettersIgnoringASCIICase(family, "-webkit-system-font") || equalLettersIgnoringASCIICase(family, "-apple-system") || equalLettersIgnoringASCIICase(family, "-apple-system-font") || equalLettersIgnoringASCIICase(family, "system-ui")) {
@@ -85,7 +85,7 @@
if (auto italicizedFont = adoptCF(CTFontCreateCopyWithSymbolicTraits(result.get(), size, nullptr, desiredTraits, desiredTraits)))
result = italicizedFont;
}
- return result;
+ return createFontForInstalledFonts(result.get(), allowUserInstalledFonts);
}
if (equalLettersIgnoringASCIICase(family, "-apple-system-monospaced-numbers")) {
@@ -98,19 +98,23 @@
RetainPtr<CFDictionaryRef> featureIdentifier = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, featureKeys, featureValues, WTF_ARRAY_LENGTH(featureKeys), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
CFTypeRef featureIdentifiers[] = { featureIdentifier.get() };
RetainPtr<CFArrayRef> featureArray = adoptCF(CFArrayCreate(kCFAllocatorDefault, featureIdentifiers, 1, &kCFTypeArrayCallBacks));
- CFTypeRef attributesKeys[] = { kCTFontFeatureSettingsAttribute };
- CFTypeRef attributesValues[] = { featureArray.get() };
- RetainPtr<CFDictionaryRef> attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, attributesKeys, attributesValues, WTF_ARRAY_LENGTH(attributesKeys), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
-
+ auto attributes = adoptCF(CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
+ CFDictionaryAddValue(attributes.get(), kCTFontFeatureSettingsAttribute, featureArray.get());
+ addAttributesForInstalledFonts(attributes.get(), allowUserInstalledFonts);
RetainPtr<CTFontRef> result = toCTFont([NSFont systemFontOfSize:size]);
- return adoptCF(CTFontCreateCopyWithAttributes(result.get(), size, nullptr, adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get())).get()));
+ auto modification = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
+ return adoptCF(CTFontCreateCopyWithAttributes(result.get(), size, nullptr, modification.get()));
}
- if (equalLettersIgnoringASCIICase(family, "-apple-menu"))
- return toCTFont([NSFont menuFontOfSize:size]);
+ if (equalLettersIgnoringASCIICase(family, "-apple-menu")) {
+ RetainPtr<CTFontRef> result = toCTFont([NSFont menuFontOfSize:size]);
+ return createFontForInstalledFonts(result.get(), allowUserInstalledFonts);
+ }
- if (equalLettersIgnoringASCIICase(family, "-apple-status-bar"))
- return toCTFont([NSFont labelFontOfSize:size]);
+ if (equalLettersIgnoringASCIICase(family, "-apple-status-bar")) {
+ RetainPtr<CTFontRef> result = toCTFont([NSFont labelFontOfSize:size]);
+ return createFontForInstalledFonts(result.get(), allowUserInstalledFonts);
+ }
if (equalLettersIgnoringASCIICase(family, "lastresort")) {
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300
Modified: trunk/Tools/ChangeLog (228876 => 228877)
--- trunk/Tools/ChangeLog 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Tools/ChangeLog 2018-02-21 17:34:45 UTC (rev 228877)
@@ -1,3 +1,17 @@
+2018-02-21 Myles C. Maxfield <[email protected]>
+
+ [Cocoa] Make system-ui obey the user-installed-font policy
+ https://bugs.webkit.org/show_bug.cgi?id=182860
+ <rdar://problem/36158249>
+
+ Reviewed by Antti Koivisto.
+
+ Create a font, FakeHelvetica-ArmenianCharacter.ttf, which supports a particular Armenian
+ character which isn't isn't supported by any other font on the system.
+
+ * WebKitTestRunner/FakeHelvetica-ArmenianCharacter.ttf:
+ * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
+
2018-02-20 Timothy Horton <[email protected]>
Try to fix the 32-bit build after r228857
Added: trunk/Tools/WebKitTestRunner/FakeHelvetica-ArmenianCharacter.ttf (0 => 228877)
--- trunk/Tools/WebKitTestRunner/FakeHelvetica-ArmenianCharacter.ttf (rev 0)
+++ trunk/Tools/WebKitTestRunner/FakeHelvetica-ArmenianCharacter.ttf 2018-02-21 17:34:45 UTC (rev 228877)
@@ -0,0 +1,49 @@
+����������\x80����0OS/2sf\xF8������\xBC������`cmap88\xDE#��������gasp���� ����(������glyf0* \xFD����8����\xA8head\xDBP͵���� \xE0������6hhea
+7����!������$hmtx+����!<����Xloca\xBEԸ7����%\x94����.maxp�� ����'\xC4������ name\x8D\xBBX\xEB����'\xE4����*>postc\xA1[#����R$������\xD6\x90������\xBC\x8A������\x8F\xBC\x8A����\xC5��2��������������������\x80����\xAF�� H����������������W3C ��@�� \xFE\xFF \xFF8���� ��\xC8\xFF\xFC����\xFF\xFF ������ ����������������������������������\xF8����:������:��&��~��\xA0��\xA1��\xA3��\xA4��\xA5��\xA6��\xA7��\xA8��\xA9��\xAA��\xAB��\xAC��\xAD��\xAE��\xAF��\xB0��\xB1��\xB3��\xB4��\xB5��\xB6��\xB7��\xB8��\xB9��\xBA��\xBB��\xBC��\xBD��\xBE��\xBF��\xC0��\xC1��\xC2��\xC3��\xC5��\xC6��\xC7��\xC8��\xC9��\xCA��\xCB��\xCC��\xCF��\xD0��\xD1��\xD2��\xD4��\xD5��\xD6��\xD7��\xD8��\xD9��\xDB��\xDC��\xDD��\xDE��\xDF��\xE0��\xE1��\xE2��\xE3��\xE4��\xE5��\xE6��\xE7��\xE8��\xE9��\xEB��\xEC��\xED��\xEF��\xF0��\xF1��\xF2��\xF3��\xF4��\xF5��\xF6��\xF7��\xF8��\xF9��\xFA��\xFC��\xFD��\xFE��\xFF1Sx\x92\xC6\xC7\xC9\xDA\xDB\xDC\xDD\x94\xA5\xA7\xA9\xBC\x
C0\x8D + " & 0 : D!"!&"""""""""+"H"`"e"\xF2%\xCA0��0N��NN N]N\x8CN\x94
QkQmSAV\xD7V\xDBWg(j*l4pk\x91\xD1\xF0\xFE\xFF\xFF\xFF������ ��(��\xA0��\xA1��\xA2��\xA4��\xA5��\xA6��\xA7��\xA8��\xA9��\xAA��\xAB��\xAC��\xAD��\xAE��\xAF��\xB0��\xB1��\xB2��\xB4��\xB5��\xB6��\xB7��\xB8��\xB9��\xBA��\xBB��\xBC��\xBD��\xBE��\xBF��\xC0��\xC1��\xC2��\xC3��\xC4��\xC6��\xC7��\xC8��\xC9��\xCA��\xCB��\xCC��\xCD��\xD0��\xD1��\xD2��\xD3��\xD5��\xD6��\xD7��\xD8��\xD9��\xDA��\xDC��\xDD��\xDE��\xDF��\xE0��\xE1��\xE2��\xE3��\xE4��\xE5��\xE6��\xE7��\xE8��\xE9��\xEA��\xEC��\xED��\xEE��\xF0��\xF1��\xF2��\xF3��\xF4��\xF5��\xF6��\xF7��\xF8��\xF9��\xFA��\xFB��\xFD��\xFE��\xFF1Rx\x92\xC6\xC7\xC9\xD8\xDB\xDC\xDD\x94\xA5\xA7\xA9\xBC\xC0\x8D & 0 9 D!"!&"""""""""+"H"`"d"\xF2%\xCA0��0N��NN N]N\x8CN\x94QkQmSAV\xD7V\xDBWg(j*l4pk\x91\xD1\xF0��\xFE\xFF\xFF\xFF\xFF\xE3\xFF\xE2\xFF\xF9\xFF\xF4\xFF\xE0\xFF\xFD\xFF\xE9��\xFF\xDD\xFF\xE2\xFF\xDF\xFF\xE6\xFF\xEC\xFF\xEA��\xF
F\xD9��\xFF\xD1\xFF\xDC��\xFF\xD5\xFF\xDA\xFF\xCF\xFF\xEB����+\xFF\xD7\xFF\xDD������+\xFF\xD5\x
FF\xDA\xFF\xE4\xFF\xE1\xFF\xD8\xFF\x9D\xFF\xC5\xFF\x9C\xFF\xDF\xFF\x9B\xFF\xDA\xFF\xDB\xFF\xDF\xFF\xDB\xFF\xEE\xFF\x94\xFF\xDC\xFF\xD9\xFF\xC7\xFF\x90\xFF\xEE\xFF\xB4\xFF\xD8\xFF\xD5\xFF\x8B\xFF\xE3\xFF\xE4\xFF\xA7\xFF\x89\xFF\x87\xFF\x88\xFF\x89\xFF\x87\xFF\x88\xFF\xAC\xFF\x87\xFF\x88\xFF\x86\xFF\x87\xFF\x88\xFF\x86\xFF\x87\xFF\xCF\xFF\x86\xFF\x87\xFF\x85\xFF\x86\xFF\x87\xFF\x85\xFF\xA8\xFF\x9B\xFF\x85\xFF\x83\xFF\x84\xFF\xC4\xFF\xC5\xFF\xA1\xFF\x81\xFF|\xFFX\xFF?\xFD\xED\xFD\xF5\xFD\xEC\xFD\xDE\xFD\xE0\xFD\xD8\xFD\xDD\xFD>\xFDo\xFDk\xFD*\xFC\xD3\xFD\xFB\x88\xE0\xF4\xE0\xF2\xE0\xF3\xDF\xFF\xE0\xC2\xE0\x85\xE0\xBD\xE0\xBC\xE0\xBB\xE0\xB8\xE0\xAF\xE0\xA7\xE0\x9E\xDF\xC1߭\xDE\xE2\xDE\xCC\xDE\xD6\xDE\xD5މ\xDE\xCD\xDE\xCAޥފއ\xDD\xFB\xDB$\xD0\xFE\xD1\xB3\xB3\xB2\xFA\xB2\xAC\xB2v\xB2q\xAF\x9D\xAF\x99\xADɪ5\xAA)\xA9\xF2\x99\xE7\x96\xE9\x94ڐ\xA2o?\xEF\xF6���������������������������������������������������������������������������������������������������������������������
���������������������������������������������������������������������������������������������������������������������
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\xFF\xFF������}����k ��������3!%!!}\xEE\xFD\x8F\xF4\xFE \xFC\xE0}&������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!
!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8
������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!
!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE
8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \x
FC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC
������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8����������1!!\xE8\xFC\xC8��������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\x
FF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8
������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xE8 ������!!\xE8\xFC \xFC\xE0������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������
!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE
8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \x
FC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC
������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xF
F8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE
8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������
!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\
xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC
\xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xF
C������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\
xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\
xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\xFF8\xE8 ������!!\xE8\xFC \xFC������\x90\xE8X����
��!!\xE8\xFCX\xC8��������\x90\xE8X������!!\xE8\xFCX\xC8������\xC8\xFF8\x90 ������3#\xC8\xC8\xC8 \xFC������\xC8\xFF8\x90
������3#\xC8\xC8\xC8 \xFC����������\x80��-j _<\xF5�� \xE8��������\xB3o_Y��������\xC4ݫ$����\xFF8\xE8 ���������������������������� \xFF8����\xE8��������\xE8������������������������������\xE8��}��������\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8��
��\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8��
��\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8
����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8������������\xF4����\xE8����M������\xFA������\xA7������\xC8������d������������\xE8��������������������\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8��
��\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8��\xC8\xE8��\xC8��������������!��.��;��H��U��b��o��|��\x89��\x96��\xA3��\xB0��\xBD��\xCA��\xD7��\xE4��\xF1��\xFE%2?LYfs\x80\x8D\x9A\xA7\xB4\xC1\xCE\xDB\xE8\xF5)6CP]jw\x84\x91\x9E\xAB\xB8\xC5\xD2\xDF\xEC\xF9 -:GTan{\x88\x95\xA2\xAF\xBC\xC9\xD6\xE3\xF0\xFD
+#0=JWdq~\x8B\x98\xA5\xB2\xBF\xCC\xD9\xE6\xF3��+'4AN[hu\x82\x8F\x9C\xA9\xB6\xC3\xD0\xDD\xEA\xF7+8ER_ly\x86\x93\xA0\xAD\xBA\xC7\xD4\xE1\xEE\xFB"/<IVcp}\x8A\x97\xA4\xA4\xB1\xBE\xCB\xD8\xE5\xF2\xFF&3@MZgt\x81\x8E\x9B\xA8\xB5\xC2\xCF\xDC\xE9\xF6 * 7 D Q ^ k x \x85 \x92 \x9F \xAC \xB9 \xC6 \xD3 \xE0 \xED \xFA
+
+
+!
+.
+;
+H
+U
+b
+o
+|
+\x89
+\x96
+\xA3
+\xB0
+\xBD
+\xCA
+\xD7
+\xE4
+\xF1
+\xFE%2?LYfs\x80\x8D\x9A\xA7\xB4\xC1\xCE\xDB\xE8\xF5)6CCCCCCCCCCCCCP]jw\x84\x91\x9E\xAB\xB8\xC5\xD2\xDF\xEC\xF9+++ +-+:+G+T��������������������������������������������������������������$\xB6����������������\xF0��������������������\xF0��������������������������������.����������������@����������������T����������������l��������������
+h\x80����������������$\xE8����������������R����������������\xF8^��������������
+V��������������`��������������g��������������
+~��������������\x88��������������
+\x94������������
+����\x9E��������������\x9E��������������)\xB0��������������
+\xD9��������������\xE3��������������
+\xEA���� ����\xF0\xF4���� ����\xE4���� ����\xF8���� ����.���� ����4���� ����H���� ����`���� ��
+ht���� ����$'\xDC���� ����R(������ ����(R���� ����(f���� ����(t��T��h��e�� ��A��h��e��m�� ��f��o��n��t�� ��b��e��l��o��n��g��s�� ��t��o�� ��t��h��e�� ��p��u��b��l��i��c�� ��d��o��m��a��i��n��.�� ��I��n�� ��j��u��r��i��s��d��i��c��t��i��o��n��s�� ��t��h��a��t�� ��d��o�� ��n��o��t�� ��r��e��c��o��g��n��i��z��e�� ��p��u��b��l��i��c�� ��d��o��m��a��i��n�� ��o��w��n��e��r��s��h��i��p�� ��o��f�� ��t��h��e��s��e�� ��f��i��l��e��s��,�� ��t��h��e�� ��f��o��l��l��o��w��i��n��g�� ��C��r��e��a��t��i��v��e�� ��C��o��m��m��o��n��s�� ��Z��e��r��o�� ��d��e��c��l��a��r��a��t��i��o��n�� ��a��p��p��l��i��e��s��:�� ��h��t��t��p��:��/��/��l��a��b��s��.��c��r��e��a��t��i��v��e��c��o��m��m��o��n��s��.��o��r��g��/��l��i��c��e��n��s��e��s��/��z��e��r��o��-��w��a��i��v��e��/��1��.��0��/��u��s��/��l��e��g��a��l��c��o��d��e��H��e��l��v��e��t��i��c��a��2��R��e��g��u��l��a��r��V��e��r��s��i��o��n�� ��1��.��5��0�� ��H��e��l��v��e��t��i��c��a��2��H��e��l��v��e��t��i��c��a��2��V��e��r��s��i
��o��n�� ��1��.��5��0��H��e��l��v��e��t��i��c��a��2��T��h��e�� ��A��h��e��m�� ��f��o��n��t�� ��w��a��s�� ��d��e��v��e��l��o��p��e��d�� ��b��y�� ��T��o��d��d�� ��F��a��h��r��n��e��r�� ��a��n��d�� ��M��y��l��e��s�� ��C��.�� ��M��a��x��f��i��e��l��d�� ��t��o�� ��h��e��l��p�� ��t��e��s��t�� ��w��r��i��t��e��r��s�� ��d��e��v��e��l��o��p�� ��p��r��e��d��i��c��t��a��b��l��e�� ��t��e��s��t��s��.�� ��T��h��e�� ��u��n��i��t��s�� ��p��e��r�� ��e��m�� ��i��s�� ��1��0��0��0��,�� ��t��h��e�� ��a
��d��v��a��n��c��e�� ��i��s�� ��8��0��0��,�� ��a��n��d�� ��t��h��e�� ��d��e��s��c��e��n��t�� ��i��s�� ��2��0��0��,�� ��t��h��e��r��e��b��y�� ��m��a��k��i��n��g�� ��t��h��e�� ��e��m�� ��s��q��u��a��r��e�� ��e��x��a��c��t��l��y�� ��s��q��u��a��r��e��.�� ��T��h��e�� ��g��l��y��p��h��s�� ��f��o��r�� ��m��o��s��t�� ��c��h��a��r��a��c��t��e��r��s�� ��i��s�� ��s��i��m��p��l��y�� ��a�� ��b��o��x�� ��w��h��i��c��h�� ��f��i��l��l��s�� ��t��h��i��s�� ��s��q��u��a��r��e��.�� ��T��h��e�� ��c��o��d��e��p��o��i��n��t��s�� ��m��a��p��p��e��d�� ��t��o�� ��t��h��i��s�� ��f��u��l��l�� ��s��q��u��a��r��e�� ��w��i��t��h�� ��a�� ��f��u��l��l�� ��a��d��v��a��n��c��e�� ��a��r��e�� ��t��h��e�� ��f��o��l��l��o��w��i��n��g�� ��r��a��n��g��e��s��:�� ��U��+��2��0��-��U��+��2��6��,�� ��U��+��2��8��-��U��+��6��F��,�� ��U��+��7��1��-��U��+��7��E��,�� ��U��+��A��0��-��U��+��C��8��,�� ��U��+��C��A��-��U��+��F��F��,�� ��U��+��1��3��1��,�� ��U��+��1��5��2��-��U��+��1��5��3��,�� ��U��+��1��7��8��,�� ��U��+��1��9��2��,�
� ��U��+��2��C��6��-��U��+��2��C��7��,�� ��U��+��2��C��9��,�� ��U��+��2��D��8��-��U��+��2��D��D��,�� ��U��+��3��9��4��,�� ��U��+��3��A��5��,�� ��U��+��3��A��7��,�� ��U��+��3��A��9��,�� ��U��+��3��B��C��,�� ��U��+��3��C��0��,�� ��U��+��2��0��1��3��-��U��+��2��0��1��4��,�� ��U��+��2��0��1��8��-��U��+��2��0��1��A��,�� ��U��+��2��0��1��C��-��U��+��2��0��1��E��,�� ��U��+��2��0��2��0��-��U��+��2��0��2��2��,�� ��U��+��2��0��2��6��,�� ��U��+��2��0��3��0��,�� ��U��+��2��0��3��9��-��U��+��2��0��3��A��,��
��U��+��2��0��4��4��,�� ��U��+��2��1��2��2��,�� ��U��+��2��1��2��6��,�� ��U��+��2��2��0��2��,�� ��U��+��2��2��0��6��,�� ��U��+��2��2��0��F��,�� ��U��+��2��2��1��1��-��U��+��2��2��1��2��,�� ��U��+��2��2��1��9��-��U��+��2��2��1��A��,�� ��U��+��2��2��1��E��,�� ��U��+��2��2��2��B��,�� ��U��+��2��2��4��8��,�� ��U��+��2��2��6��0��,�� ��U��+��2��2��6��4��-��U��+��2��2��6��5��,�� ��U��+��2��2��F��2��,�� ��U��+��2��5��C��A��,�� ��U��+��3��0��0��7��,�� ��U��+��4��E��0��0��,�� ��U��+��4��E��0��3��,�� ��U��+��4��E��0��9��,�� ��U��+��4��E��5��D��,�� ��U��+��4��E��8��C��,�� ��U��+��4��E��9��4��,�� ��U��+��5��1��6��B��,�� ��U��+��5��1��6��D��,�� ��U��+��5��3��4��1��,�� ��U��+��5��6��D��7��,�� ��U��+��5��6��D��B��,�� ��U��+��5��7��1��F��,�� ��U��+��6��7��2��8��,�� ��U��+��6��C��3��4��,�� ��U��+��7��0��6��B��,�� ��U��+��9��1��D��1��,�� ��U��+��F��0��0��0��-��U��+��F��0��0��2��.�� ��T��h��e�� ��c��o��d��e��p��o��i��n��t��s�� ��w��h��i��c��h�� ��a��r��e�� ��m��a��p��p��e��d�� ��t��o�� ��s��o��m��e��t
��h��i��n��g�� ��e��l��s��e�� ��a��r��e�� ��t��h��e�� ��f��o��l��l��o��w��i��n��g��:�� ��"�� ��"�� ��(��U��+��2��0��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��"��p��"�� ��(��U��+��7��0��)��:�� ��P��a��t��h�� ��h��a��s�� ��0�� ��a��s��c��e��n��t�� ��b��u��t�� ��f��u��l��l�� ��d��e��s��c��e��n��t��;�� ��"��\xC9��"�� ��(��U��+��C��9��)��:�� ��P��a��t��h�� ��h��a��s�� ��0�� ��d��e��s��c��e��n��t�� ��b��u��t��
��f��u��l��l�� ��a��s��c��e��n��t��;�� ��N��o��n��-��b��r��e��a��k��i��n��g�� ��s��p��a��c��e�� ��(��U��+��A��0��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��Z��e��r��o��-��w��i��d��t��h�� ��n��o��n��-��b��r��e��a��k��i��n��g�� ��s��p��a��c��e�� ��(��U��+��F��E��F��F��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��0�� ��a��d��v��a��n��c��e��;�� ��E��n�� ��s��p��a��c��e�� ��(��U��+��2��0��0��2��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��h��a��l��f�� ��a��d��v��a��n��c��e��;�� ��E��m�� ��s��p��a��c��e�� ��(��U��+��2��0��0��3��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��T��h��r��e��e��-��p��e��r��-��e��m�� ��s��p��a��c��e�� ��(��U��+��2��0��0��4��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��t��h��i��r��d�� ��a��d��v��a��n��c��e��;�� ��F��o��u��r��-��p��e��r��-��e��m�� ��s��p��a��c��e�� ��(��U��+��2��0��0��5��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��q��u��a��r��t��e��r�� ��a
��d��v��a��n��c��e��;�� ��S��i��x��-��p��e��r��-��e��m�� ��s��p��a��c��e�� ��(��U��+��2��0��0��6��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��s��i��x��t��h�� ��a��d��v��a��n��c��e��;�� ��T��h��i��n�� ��s��p��a��c��e�� ��(��U��+��2��0��0��9��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��f��i��f��t��h�� ��a��d��v��a��n��c��e��;�� ��H��a��i��r�� ��s��p��a��c��e�� ��(��U��+��2��0��0��A��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��t��e��n��t��h�� ��a��d��v��a��n
��c��e��;�� ��Z��e��r��o�� ��w��i��d��t��h�� ��s��p��a��c��e�� ��(��U��+��2��0��0��B��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��n��o�� ��a��d��v��a��n��c��e��;�� ��I��d��e��o��g��r��a��p��h��i��c�� ��s��p��a��c��e�� ��(��U��+��3��0��0��0��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��Z��e��r��o�� ��w��i��d��t��h�� ��n��o��n��-��j��o��i��n��e��r�� ��(��U��+��2��0��0��C��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��n��o�� ��a��d��v��a��n��c��e��;�� ��Z��e��r��o�� ��w��i��d��t��h�� ��j��o��i��n��e��r�� ��(��U��+��2��0��0��D��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��n��o�� ��a��d��v��a��n��c��e��;�� ��G��r��e��e��k�� ��c��a��p��i��t��a��l�� ��l��e��t��t��e��r�� ��C��h��i�� ��(��U��+��3��A��7��)��:�� ��T��h��i��n�� ��h��o��r��i��z��o��n��t��a��l�� ��s��t��r��i��p��e�� ��a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��"j*��"�� ��(��U��+��6��A��2��A��)��:�� ��T��h��i��n�� ��h��o��r��i��z��o��n��t��a��l�� ��s��t��r��i��p��e�� �
�a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��G��r��e��e��k�� ��c��a��p��i��t��a��l�� ��l��e��t��t��e��r�� ��U��p��s��i��l��o��n�� ��(��U��+��3��A��5��)��:�� ��T��h��i��n�� ��v��e��r��t��i��c��a��l�� ��s��t��r��i��p��e�� ��a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��"~\xB5��"�� ��(��U��+��7��E��B��5��)��:�� ��T��h��i��n�� ��v��e��r��t��i��c��a��l�� ��s��t��r��i��p��e�� ��a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��.��h��t��t��p��:��/��/��w��w��w��.
��w��3��c��.��o��r��g��h��t��t��p��:��/��/��d��e��v��.��w��3��.��o��r��g��/��C��S��S��/��f��o��n��t��s��/��a��h��e��m��/��C��O��P��Y��I��N��G��
+The Ahem font belongs to the public domain. In jurisdictions that do not recognize public domain ownership of these files, the following Creative Commons Zero declaration applies: http://labs.creativecommons.org/licenses/zero-waive/1.0/us/legalcodeHelvetica2RegularVersion 1.50 Helvetica2Helvetica2Version 1.50Helvetica2http://www.w3c.orghttp://dev.w3.org/CSS/fonts/ahem/COPYING
+Helvetica2RegularHelvetica2��T��h��e�� ��A��h��e��m�� ��f��o��n��t�� ��b��e��l��o��n��g��s�� ��t��o�� ��t��h��e�� ��p��u��b��l��i��c�� ��d��o��m��a��i��n��.�� ��I��n�� ��j��u��r��i��s��d��i��c��t��i��o��n��s�� ��t��h��a��t�� ��d��o�� ��n��o��t�� ��r��e��c��o��g��n��i��z��e�� ��p��u��b��l��i��c�� ��d��o��m��a��i��n�� ��o��w��n��e��r��s��h��i��p�� ��o��f�� ��t��h��e��s��e�� ��f��i��l��e��s��,�� ��t��h��e�� ��f��o��l��l��o��w��i��n��g�� ��C��r��e��a��t��i��v��e�� ��C��o��m��m��o��n��s�� ��Z��e��r��o�� ��d��e��c��l��a��r��a��t��i��o��n�� ��a��p��p��l��i��e��s��:�� ��h��t��t��p��:��/��/��l��a��b��s��.��c��r��e��a��t��i��v��e��c��o��m��m��o��n��s��.��o��r��g��/��l��i��c��e��n��s��e��s��/��z��e��r��o��-��w��a��i��v��e��/��1��.��0��/��u��s��/��l��e��g��a��l��c��o��d��e��H��e��l��v��e��t��i��c��a��2��R��e��g��u��l��a��r��V��e��r��s��i��o��n�� ��1��.��5��0�� ��H��e��l��v��e��t��i��c��a��2��H��e��l��v��e��t��i��c��a��2��V��e��r��s��i��o��n�� ��1��.��5��0��H��e��l��v��e��t��i��c��a��2��T��h��e�
� ��A��h��e��m�� ��f��o��n��t�� ��w��a��s�� ��d��e��v��e��l��o��p��e��d�� ��b��y�� ��T��o��d��d�� ��F��a��h��r��n��e��r�� ��a��n��d�� ��M��y��l��e��s�� ��C��.�� ��M��a��x��f��i��e��l��d�� ��t��o�� ��h��e��l��p�� ��t��e��s��t�� ��w��r��i��t��e��r��s�� ��d��e��v��e��l��o��p�� ��p��r��e��d��i��c��t��a��b��l��e�� ��t��e��s��t��s��.�� ��T��h��e�� ��u��n��i��t��s�� ��p��e��r�� ��e��m�� ��i��s�� ��1��0��0��0��,�� ��t��h��e�� ��a��d��v��a��n��c��e�� ��i��s�� ��8��0��0��,�� ��a��n��d�� ��t
��h��e�� ��d��e��s��c��e��n��t�� ��i��s�� ��2��0��0��,�� ��t��h��e��r��e��b��y�� ��m��a��k��i��n��g�� ��t��h��e�� ��e��m�� ��s��q��u��a��r��e�� ��e��x��a��c��t��l��y�� ��s��q��u��a��r��e��.�� ��T��h��e�� ��g��l��y��p��h��s�� ��f��o��r�� ��m��o��s��t�� ��c��h��a��r��a��c��t��e��r��s�� ��i��s�� ��s��i��m��p��l��y�� ��a�� ��b��o��x�� ��w��h��i��c��h�� ��f��i��l��l��s�� ��t��h��i��s�� ��s��q��u��a��r��e��.�� ��T��h��e�� ��c��o��d��e��p��o��i��n��t��s�� ��m��a��p��p��e��d�� ��t��o�� ��t��h��i��s�� ��f��u��l��l�� ��s��q��u��a��r��e�� ��w��i��t��h�� ��a�� ��f��u��l��l�� ��a��d��v��a��n��c��e�� ��a��r��e�� ��t��h��e�� ��f��o��l��l��o��w��i��n��g�� ��r��a��n��g��e��s��:�� ��U��+��2��0��-��U��+��2��6��,�� ��U��+��2��8��-��U��+��6��F��,�� ��U��+��7��1��-��U��+��7��E��,�� ��U��+��A��0��-��U��+��C��8��,�� ��U��+��C��A��-��U��+��F��F��,�� ��U��+��1��3��1��,�� ��U��+��1��5��2��-��U��+��1��5��3��,�� ��U��+��1��7��8��,�� ��U��+��1��9��2��,�� ��U��+��2��C��6��-��U��+��2��C��7��,�� ��U��+��2��C��9��,�
� ��U��+��2��D��8��-��U��+��2��D��D��,�� ��U��+��3��9��4��,�� ��U��+��3��A��5��,�� ��U��+��3��A��7��,�� ��U��+��3��A��9��,�� ��U��+��3��B��C��,�� ��U��+��3��C��0��,�� ��U��+��2��0��1��3��-��U��+��2��0��1��4��,�� ��U��+��2��0��1��8��-��U��+��2��0��1��A��,�� ��U��+��2��0��1��C��-��U��+��2��0��1��E��,�� ��U��+��2��0��2��0��-��U��+��2��0��2��2��,�� ��U��+��2��0��2��6��,�� ��U��+��2��0��3��0��,�� ��U��+��2��0��3��9��-��U��+��2��0��3��A��,�� ��U��+��2��0��4��4��,�� ��U��+��2��1��2��2��,�� ��U��+��2��
1��2��6��,�� ��U��+��2��2��0��2��,�� ��U��+��2��2��0��6��,�� ��U��+��2��2��0��F��,�� ��U��+��2��2��1��1��-��U��+��2��2��1��2��,�� ��U��+��2��2��1��9��-��U��+��2��2��1��A��,�� ��U��+��2��2��1��E��,�� ��U��+��2��2��2��B��,�� ��U��+��2��2��4��8��,�� ��U��+��2��2��6��0��,�� ��U��+��2��2��6��4��-��U��+��2��2��6��5��,�� ��U��+��2��2��F��2��,�� ��U��+��2��5��C��A��,�� ��U��+��3��0��0��7��,�� ��U��+��4��E��0��0��,�� ��U��+��4��E��0��3��,�� ��U��+��4��E��0��9��,�� ��U��+��4��E��5��D��,�� ��U��+��4��E��8��C��,�� ��U��+��4��E��9��4��,�� ��U��+��5��1��6��B��,�� ��U��+��5��1��6��D��,�� ��U��+��5��3��4��1��,�� ��U��+��5��6��D��7��,�� ��U��+��5��6��D��B��,�� ��U��+��5��7��1��F��,�� ��U��+��6��7��2��8��,�� ��U��+��6��C��3��4��,�� ��U��+��7��0��6��B��,�� ��U��+��9��1��D��1��,�� ��U��+��F��0��0��0��-��U��+��F��0��0��2��.�� ��T��h��e�� ��c��o��d��e��p��o��i��n��t��s�� ��w��h��i��c��h�� ��a��r��e�� ��m��a��p��p��e��d�� ��t��o�� ��s��o��m��e��t��h��i��n��g�� ��e��l��s��e�� ��a��r��e�� ��t��h��e�� ��f��o
��l��l��o��w��i��n��g��:�� ��"�� ��"�� ��(��U��+��2��0��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��"��p��"�� ��(��U��+��7��0��)��:�� ��P��a��t��h�� ��h��a��s�� ��0�� ��a��s��c��e��n��t�� ��b��u��t�� ��f��u��l��l�� ��d��e��s��c��e��n��t��;�� ��"��\xC9��"�� ��(��U��+��C��9��)��:�� ��P��a��t��h�� ��h��a��s�� ��0�� ��d��e��s��c��e��n��t�� ��b��u��t�� ��f��u��l��l�� ��a��s��c��e��n��t��;�� ��N��o��n��-��b��r��
e��a��k��i��n��g�� ��s��p��a��c��e�� ��(��U��+��A��0��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��Z��e��r��o��-��w��i��d��t��h�� ��n��o��n��-��b��r��e��a��k��i��n��g�� ��s��p��a��c��e�� ��(��U��+��F��E��F��F��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��0�� ��a��d��v��a��n��c��e��;�� ��E��n�� ��s��p��a��c��e�� ��(��U��+��2��0��0��2��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��h��a��l��f�� ��a��d��v��a��n��c��e��;�� ��E��m�� ��s��p��a��c��e�� ��(��U��+��2��0��0��3��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��T��h��r��e��e��-��p��e��r��-��e��m�� ��s��p��a��c��e�� ��(��U��+��2��0��0��4��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��t��h��i��r��d�� ��a��d��v��a��n��c��e��;�� ��F��o��u��r��-��p��e��r��-��e��m�� ��s��p��a��c��e�� ��(��U��+��2��0��0��5��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��q��u��a��r��t��e��r�� ��a��d��v��a��n��c��e��;�� ��S��i��x��-��p��e��r��-��e��m�� ��s
��p��a��c��e�� ��(��U��+��2��0��0��6��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��s��i��x��t��h�� ��a��d��v��a��n��c��e��;�� ��T��h��i��n�� ��s��p��a��c��e�� ��(��U��+��2��0��0��9��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��f��i��f��t��h�� ��a��d��v��a��n��c��e��;�� ��H��a��i��r�� ��s��p��a��c��e�� ��(��U��+��2��0��0��A��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��o��n��e�� ��t��e��n��t��h�� ��a��d��v��a��n��c��e��;�� ��Z��e��r��o�� ��w��i��d��t��h�� ��s��p��a��c��e
�� ��(��U��+��2��0��0��B��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��n��o�� ��a��d��v��a��n��c��e��;�� ��I��d��e��o��g��r��a��p��h��i��c�� ��s��p��a��c��e�� ��(��U��+��3��0��0��0��)��:�� ��N��o�� ��p��a��t��h�� ��b��u��t�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��Z��e��r��o�� ��w��i��d��t��h�� ��n��o��n��-��j��o��i��n��e��r�� ��(��U��+��2��0��0��C��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��n��o�� ��a��d��v��a��n��c��e��;�� ��Z��e��r��o�� ��w��i��d��t��h�� ��j��o��i��n��e��r�� ��(��U��+��2��0��0��D��)��:�� ��N��o�� ��p��a��t��h�� ��a��n��d�� ��n��o�� ��a��d��v��a��n��c��e��;�� ��G��r��e��e��k�� ��c��a��p��i��t��a��l�� ��l��e��t��t��e��r�� ��C��h��i�� ��(��U��+��3��A��7��)��:�� ��T��h��i��n�� ��h��o��r��i��z��o��n��t��a��l�� ��s��t��r��i��p��e�� ��a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��"j*��"�� ��(��U��+��6��A��2��A��)��:�� ��T��h��i��n�� ��h��o��r��i��z��o��n��t��a��l�� ��s��t��r��i��p��e�� ��a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��G��r�
�e��e��k�� ��c��a��p��i��t��a��l�� ��l��e��t��t��e��r�� ��U��p��s��i��l��o��n�� ��(��U��+��3��A��5��)��:�� ��T��h��i��n�� ��v��e��r��t��i��c��a��l�� ��s��t��r��i��p��e�� ��a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��;�� ��"~\xB5��"�� ��(��U��+��7��E��B��5��)��:�� ��T��h��i��n�� ��v��e��r��t��i��c��a��l�� ��s��t��r��i��p��e�� ��a��n��d�� ��f��u��l��l�� ��a��d��v��a��n��c��e��.��h��t��t��p��:��/��/��w��w��w��.��w��3��c��.��o��r��g��h��t��t��p��:��/��/��d��e��v��.��w��3
��.��o��r��g��/��C��S��S��/��f��o��n��t��s��/��a��h��e��m��/��C��O��P��Y��I��N��G��
+��H��e��l��v��e��t��i��c��a��2��R��e��g��u��l��a��r��H��e��l��v��e��t��i��c��a��2������������������\xFF{������������������������������������������������������������ ������+�������������������������������������� ��!��"��#��$��%��&��'��(��)��*��+��,��-��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��S��T��U��V��W��X��Y��Z��[��\��]��^��_��`��a��b��c��d��e��f��g��h��i��j��k��l��m��n��o��p��q��r��s��t��u��v��w��x��y��z��{��|��}��~����\x80��\x81��\x83��\x84��\x85��\x86��\x88��\x89��\x8A��\x8B��\x8D��\x8E��\x90��\x91��\x93��\x96��\x97��\x9D��\x9E��\xA0��\xA1��\xA2��\xA3��\xA4��\xA9��\xAA��\xAC��\xAD��\xAE��\xAF��\xB6��\xB7��\xB8��\xBA��\xBD��\xC3��\xC7��\xC8��\xC9��\xCA��\xCB��\xCC��\xCD��\xCE��\xCF��\xD0��\xD1��\xD3��\xD4��\xD5��\xD6��\xD7��\xD8��\xD9��\xDA��\xDB��\xDC��\xDD��\xDE��\xDF��\xE0��\xE1��\xE8��\xE9��\xEA��\xEB��\xEC��\xED��\xEE��\xEF��\xF0��\xF1��\xF2��\xF3��\xF4��
\xF5��\xF6��\xB0��\xB1��\xBB��\xA6��\xA8��\x9F��\x9B��\xB2��\xB3��\xC4��\xB4��\xB5��\xC5��\x82��\xC2��\x87��\xAB��\xC6��\xBE��\xBF��\xBC��\x8C��\x98��\x9A��\x99��\xA5��\x92��\x9C��\x8F��\x94��\x95��\xA7��\xB9��\xD2��\xC0��\xC1��
++ !"#$%&'(NULLglyph243glyph204glyph205HTDELuniFEFFuni2002uni2003uni2004uni2005uni2006uni2009uni200Auni200Buni3000 afii61664afii301uni4E00uni4E8Cuni4E09uni56DBuni4E94uni516Duni4E03uni516Buni4E5Duni5341uni3007uni56D7uni706Buni6C34uni6728uni91D1uni571Funi03A7uni6A2Auni03A5uni7EB5��
\ No newline at end of file
Modified: trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj (228876 => 228877)
--- trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj 2018-02-21 17:08:45 UTC (rev 228876)
+++ trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj 2018-02-21 17:34:45 UTC (rev 228877)
@@ -54,6 +54,7 @@
1CBA02971FD87DEE00179C7D /* FakeHelvetica-Helvetica2-400.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1CBA02921FD86EA100179C7D /* FakeHelvetica-Helvetica2-400.ttf */; };
1CBA02981FD87DF000179C7D /* FakeHelvetica-Helvetica-500.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1CBA02931FD86EA100179C7D /* FakeHelvetica-Helvetica-500.ttf */; };
1CBA02991FD87DF300179C7D /* FakeHelvetica-Helvetica-400.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1CBA02941FD86EA100179C7D /* FakeHelvetica-Helvetica-400.ttf */; };
+ 1CEA84DD203782ED00440D08 /* FakeHelvetica-ArmenianCharacter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1CEA84DC203782ED00440D08 /* FakeHelvetica-ArmenianCharacter.ttf */; };
29210EAE144CACB700835BB5 /* AccessibilityUIElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29210EA9144CACB200835BB5 /* AccessibilityUIElement.cpp */; };
29210EB0144CACBD00835BB5 /* AccessibilityController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29210EA2144CAAA500835BB5 /* AccessibilityController.cpp */; };
29210EB4144CACD500835BB5 /* AccessibilityTextMarker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29210EB1144CACD400835BB5 /* AccessibilityTextMarker.cpp */; };
@@ -226,6 +227,7 @@
1CBA02931FD86EA100179C7D /* FakeHelvetica-Helvetica-500.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "FakeHelvetica-Helvetica-500.ttf"; path = "fonts/FakeHelvetica-Helvetica-500.ttf"; sourceTree = "<group>"; };
1CBA02941FD86EA100179C7D /* FakeHelvetica-Helvetica-400.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "FakeHelvetica-Helvetica-400.ttf"; path = "fonts/FakeHelvetica-Helvetica-400.ttf"; sourceTree = "<group>"; };
1CBA02951FD86EA100179C7D /* FakeHelvetica-Helvetica2-500.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "FakeHelvetica-Helvetica2-500.ttf"; path = "fonts/FakeHelvetica-Helvetica2-500.ttf"; sourceTree = "<group>"; };
+ 1CEA84DC203782ED00440D08 /* FakeHelvetica-ArmenianCharacter.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "FakeHelvetica-ArmenianCharacter.ttf"; sourceTree = "<group>"; };
26D758E5160BECDC00268472 /* GeolocationProviderMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeolocationProviderMock.cpp; sourceTree = "<group>"; };
26D758E6160BECDD00268472 /* GeolocationProviderMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationProviderMock.h; sourceTree = "<group>"; };
29210EA2144CAAA500835BB5 /* AccessibilityController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityController.cpp; sourceTree = "<group>"; };
@@ -705,6 +707,7 @@
isa = PBXGroup;
children = (
6510A77711EC643800410867 /* AHEM____.TTF */,
+ 1CEA84DC203782ED00440D08 /* FakeHelvetica-ArmenianCharacter.ttf */,
1CBA02941FD86EA100179C7D /* FakeHelvetica-Helvetica-400.ttf */,
1CBA02931FD86EA100179C7D /* FakeHelvetica-Helvetica-500.ttf */,
1CBA02921FD86EA100179C7D /* FakeHelvetica-Helvetica2-400.ttf */,
@@ -962,6 +965,7 @@
buildActionMask = 2147483647;
files = (
6510A78211EC643800410867 /* AHEM____.TTF in Resources */,
+ 1CEA84DD203782ED00440D08 /* FakeHelvetica-ArmenianCharacter.ttf in Resources */,
1CBA02991FD87DF300179C7D /* FakeHelvetica-Helvetica-400.ttf in Resources */,
1CBA02981FD87DF000179C7D /* FakeHelvetica-Helvetica-500.ttf in Resources */,
1CBA02971FD87DEE00179C7D /* FakeHelvetica-Helvetica2-400.ttf in Resources */,