Diff
Modified: trunk/Source/WTF/ChangeLog (226217 => 226218)
--- trunk/Source/WTF/ChangeLog 2017-12-21 10:08:14 UTC (rev 226217)
+++ trunk/Source/WTF/ChangeLog 2017-12-21 10:56:58 UTC (rev 226218)
@@ -1,3 +1,15 @@
+2017-12-21 Jeremy Jones <jere...@apple.com>
+
+ Element fullscreen interface should display the location
+ https://bugs.webkit.org/show_bug.cgi?id=181006
+ rdar://problem/36143176
+
+ Reviewed by Simon Fraser.
+
+ Add SecTrustCopyInfo SPI.
+
+ * wtf/spi/cocoa/SecuritySPI.h:
+
2017-12-20 Fujii Hironori <hironori.fu...@sony.com>
[CMake][WTF] Lowercase ForwardingHeaders directory name of WTF
Modified: trunk/Source/WTF/wtf/spi/cocoa/SecuritySPI.h (226217 => 226218)
--- trunk/Source/WTF/wtf/spi/cocoa/SecuritySPI.h 2017-12-21 10:08:14 UTC (rev 226217)
+++ trunk/Source/WTF/wtf/spi/cocoa/SecuritySPI.h 2017-12-21 10:56:58 UTC (rev 226218)
@@ -81,4 +81,10 @@
CF_RETURNS_RETAINED SecTrustRef SecTrustDeserialize(CFDataRef serializedTrust, CFErrorRef *);
#endif
+CF_RETURNS_RETAINED CFDictionaryRef SecTrustCopyInfo(SecTrustRef);
+
+extern const CFStringRef kSecTrustInfoExtendedValidationKey;
+extern const CFStringRef kSecTrustInfoCompanyNameKey;
+extern const CFStringRef kSecTrustInfoRevocationKey;
+
WTF_EXTERN_C_END
Modified: trunk/Source/WebCore/English.lproj/Localizable.strings (226217 => 226218)
--- trunk/Source/WebCore/English.lproj/Localizable.strings 2017-12-21 10:08:14 UTC (rev 226217)
+++ trunk/Source/WebCore/English.lproj/Localizable.strings 2017-12-21 10:56:58 UTC (rev 226218)
@@ -1254,3 +1254,6 @@
/* Label for the auto fill strong confirmation password button inside a text field. */
"strong confirmation password auto fill" = "strong confirmation password auto fill";
+
+/* Text of button that exits element fullscreen. */
+"Done" = "Done";
Modified: trunk/Source/WebCore/PAL/ChangeLog (226217 => 226218)
--- trunk/Source/WebCore/PAL/ChangeLog 2017-12-21 10:08:14 UTC (rev 226217)
+++ trunk/Source/WebCore/PAL/ChangeLog 2017-12-21 10:56:58 UTC (rev 226218)
@@ -1,3 +1,15 @@
+2017-12-21 Jeremy Jones <jere...@apple.com>
+
+ Element fullscreen interface should display the location
+ https://bugs.webkit.org/show_bug.cgi?id=181006
+ rdar://problem/36143176
+
+ Reviewed by Simon Fraser.
+
+ Add iOS availability check.
+
+ * pal/spi/cocoa/LinkPresentationSPI.h:
+
2017-12-20 Daniel Bates <daba...@apple.com>
Remove Alternative Presentation Button
Modified: trunk/Source/WebCore/PAL/pal/spi/cocoa/LinkPresentationSPI.h (226217 => 226218)
--- trunk/Source/WebCore/PAL/pal/spi/cocoa/LinkPresentationSPI.h 2017-12-21 10:08:14 UTC (rev 226217)
+++ trunk/Source/WebCore/PAL/pal/spi/cocoa/LinkPresentationSPI.h 2017-12-21 10:56:58 UTC (rev 226218)
@@ -23,7 +23,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || PLATFORM(IOS)
#if USE(APPLE_INTERNAL_SDK)
@@ -37,4 +37,4 @@
#endif
-#endif // __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300
+#endif // (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || PLATFORM(IOS)
Modified: trunk/Source/WebKit/ChangeLog (226217 => 226218)
--- trunk/Source/WebKit/ChangeLog 2017-12-21 10:08:14 UTC (rev 226217)
+++ trunk/Source/WebKit/ChangeLog 2017-12-21 10:56:58 UTC (rev 226218)
@@ -1,5 +1,45 @@
2017-12-21 Jeremy Jones <jere...@apple.com>
+ Element fullscreen interface should display the location
+ https://bugs.webkit.org/show_bug.cgi?id=181006
+ rdar://problem/36143176
+
+ Reviewed by Simon Fraser.
+
+ Show a short user visible location string with a lock if secure and green when trusted.
+
+ Includes other interface cleanup and tweaks.
+
+ * UIProcess/ios/WKFullScreenWindowControllerIOS.mm:
+ (-[_WKFullScreenViewController viewWillTransitionToSize:withTransitionCoordinator:]):
+ (-[_WKFullScreenViewController visualEffectViewWithFrame:]):
+ (mirrorEdgeInsets):
+ (-[_WKFullScreenViewController _updateLayoutMargins]):
+ (-[_WKFullScreenViewController viewDidLayoutSubviews]):
+ (-[_WKFullScreenViewController setLocation:secure:trustedName:trustedSite:]):
+ (-[_WKFullScreenViewController createSubviews]):
+ (-[_WKFullScreenViewController loadView]):
+ (-[_WKFullScreenViewController viewDidAppear:]):
+ (-[_WKFullScreenViewController hideCancelButton]):
+ (-[_WKFullScreenViewController showCancelButton:]):
+ (-[_WKFullscreenRootViewController setShowsStatusBar:]):
+ (-[_WKFullscreenRootViewController prefersStatusBarHidden]):
+ (-[WKFullScreenWindowController _invalidateEVOrganizationName]):
+ (-[WKFullScreenWindowController isSecure]):
+ (-[WKFullScreenWindowController _serverTrust]):
+ (-[WKFullScreenWindowController _EVOrganizationName]):
+ (-[WKFullScreenWindowController updateLocationInfo]):
+ (-[WKFullScreenWindowController enterFullScreen]):
+ (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
+ (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
+ (-[_WKFullScreenViewController prefersStatusBarHidden]): Deleted.
+ * WebKit.xcassets/Done.imageset/Contents.json: Removed.
+ * WebKit.xcassets/LockMini.imageset/Contents.json: Added.
+ * WebKit.xcassets/LockMini.imageset/navigationbarlockm...@2x.pdf: Copied from Source/WebKit/WebKit.xcassets/Done.imageset/Done.pdf.
+ * WebKit.xcassets/LockMini.imageset/navigationbarlockm...@3x.pdf: Renamed from Source/WebKit/WebKit.xcassets/Done.imageset/Done.pdf.
+
+2017-12-21 Jeremy Jones <jere...@apple.com>
+
Enable picture-in-picture from inline element on suspend.
https://bugs.webkit.org/show_bug.cgi?id=180942
rdar://problem/34745234
Modified: trunk/Source/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm (226217 => 226218)
--- trunk/Source/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm 2017-12-21 10:08:14 UTC (rev 226217)
+++ trunk/Source/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm 2017-12-21 10:56:58 UTC (rev 226218)
@@ -35,17 +35,31 @@
#import "WebFullScreenManagerProxy.h"
#import "WebPageProxy.h"
#import <Foundation/Foundation.h>
+#import <Security/SecCertificate.h>
+#import <Security/SecTrust.h>
#import <UIKit/UIVisualEffectView.h>
#import <WebCore/FloatRect.h>
#import <WebCore/GeometryUtilities.h>
#import <WebCore/IntRect.h>
+#import <WebCore/LocalizedStrings.h>
+#import <WebCore/WebCoreNSURLExtras.h>
+#import <pal/spi/cf/CFNetworkSPI.h>
+#import <pal/spi/cocoa/LinkPresentationSPI.h>
+#import <pal/spi/cocoa/NSStringSPI.h>
#import <pal/spi/cocoa/QuartzCoreSPI.h>
+#import <wtf/SoftLinking.h>
+#import <wtf/spi/cocoa/SecuritySPI.h>
using namespace WebKit;
using namespace WebCore;
+SOFT_LINK_PRIVATE_FRAMEWORK_OPTIONAL(LinkPresentation)
+
namespace WebKit {
+static const NSTimeInterval showHideAnimationDuration = 0.1;
+static const NSTimeInterval autoHideDelay = 4.0;
+
static void replaceViewWithView(UIView *view, UIView *otherView)
{
[CATransaction begin];
@@ -115,6 +129,7 @@
RetainPtr<UIView> _backgroundView;
RetainPtr<UILongPressGestureRecognizer> _touchGestureRecognizer;
RetainPtr<UIButton> _cancelButton;
+ RetainPtr<UIButton> _locationButton;
RetainPtr<UIVisualEffectView> _visualEffectView;
}
@@ -129,8 +144,17 @@
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
- [self contentView].frame = self.view.bounds;
- [(WKWebView *)[self contentView] _overrideLayoutParametersWithMinimumLayoutSize:size maximumUnobscuredSizeOverride:size];
+ [coordinator animateAlongsideTransition: ^(id<UIViewControllerTransitionCoordinatorContext> context) {
+
+ void (^webViewUpdateBlock)() = ^{
+ [(WKWebView *)[self contentView] _overrideLayoutParametersWithMinimumLayoutSize:size maximumUnobscuredSizeOverride:size];
+ };
+
+ [(WKWebView *)[self contentView] _beginAnimatedResizeWithUpdates:webViewUpdateBlock];
+ [(WKWebView *)[self contentView] _setInterfaceOrientationOverride:[UIApp statusBarOrientation]];
+ } completion:^(id <UIViewControllerTransitionCoordinatorContext>context) {
+ [(WKWebView *)[self contentView] _endAnimatedResize];
+ }];
}
+ (void)configureView:(UIView *)view withBackgroundFillOfColor:(UIColor *)fillColor opacity:(CGFloat)opacity filter:(NSString *)filter
@@ -160,9 +184,6 @@
- (UIVisualEffectView *)visualEffectViewWithFrame:(CGRect)frame
{
RetainPtr<UIVisualEffectView> visualEffectView = adoptNS([[UIVisualEffectView alloc] initWithEffect:[UIVisualEffect emptyEffect]]);
- [visualEffectView setFrame:frame];
- [visualEffectView _setContinuousCornerRadius:((CGRectGetHeight([visualEffectView bounds]) > 40.0) ? 16.0 : 8.0)];
- [visualEffectView setAutoresizingMask:(UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin)];
[self _updateTransparencyOfVisualEffectView:visualEffectView.get()];
RetainPtr<UIView> backLayerTintView = adoptNS([[UIView alloc] initWithFrame:[visualEffectView bounds]]);
@@ -182,39 +203,131 @@
return visualEffectView.autorelease();
}
-- (void)loadView
+static UIEdgeInsets mirrorEdgeInsets(UIEdgeInsets insets)
{
- [self setView:adoptNS([[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]).get()];
- [[self view] setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
+ return UIEdgeInsetsMake(insets.top, insets.right, insets.bottom, insets.left);
+}
- CGRect doneButtonRect = CGRectMake(10, 20, 60, 47);
-
- _visualEffectView = [self visualEffectViewWithFrame:doneButtonRect];
- [_visualEffectView setAlpha:0];
+- (void)_updateLayoutMargins
+{
+ UIView *view = [self view];
+ [view setPreservesSuperviewLayoutMargins:NO];
+
+ UIEdgeInsets targetInsets = [view safeAreaInsets];
+ targetInsets.top = std::max(targetInsets.top, 20.0);
+ [view setLayoutMargins:targetInsets];
+}
+
+- (void)viewDidLayoutSubviews
+{
+ [self _updateLayoutMargins];
+}
+
+- (void)setLocation:(NSString *)locationName secure:(BOOL)secure trustedName:(BOOL)trustedName trustedSite:(BOOL)trustedSite
+{
+ UIColor *greenTint = [UIColor colorWithRed:100 / 255.0 green:175 / 255.0 blue:99 / 255.0 alpha:1.0];
+ UIColor *whiteTint = [UIColor whiteColor];
+
+ float hPadding = 14;
+ NSString *lockImageName = @"LockMini";
+
+ float lockSpacing = secure ? 10 : 0;
+
+ UIEdgeInsets locationContentEdgeInsets = UIEdgeInsetsMake(0, hPadding+lockSpacing, 0, hPadding);
+ UIEdgeInsets locationImageEdgeInsets = UIEdgeInsetsMake(0, -lockSpacing, 0, 0);
+
+ if ([UIView userInterfaceLayoutDirectionForSemanticContentAttribute:[[self view] semanticContentAttribute]] == UIUserInterfaceLayoutDirectionRightToLeft) {
+ locationContentEdgeInsets = mirrorEdgeInsets(locationContentEdgeInsets);
+ locationImageEdgeInsets = mirrorEdgeInsets(locationImageEdgeInsets);
+ [_locationButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight];
+ }
+
+ [_locationButton setTitleColor:(trustedName ? greenTint : whiteTint) forState:UIControlStateNormal];
+
+ if (secure) {
+ NSBundle *bundle = [NSBundle bundleForClass:[WKFullScreenWindowController class]];
+ UIImage *lockImage = [UIImage imageNamed:lockImageName inBundle:bundle compatibleWithTraitCollection:nil];
+ [_locationButton setImage:[lockImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
+ [[_locationButton imageView] setTintColor:trustedSite ? greenTint : whiteTint];
+ [_locationButton setTintColor:trustedSite ? greenTint : whiteTint];
+ } else
+ [_locationButton setImage:nil forState:UIControlStateNormal];
+
+ [_locationButton setContentEdgeInsets:locationContentEdgeInsets];
+ [_locationButton setImageEdgeInsets:locationImageEdgeInsets];
+ [_locationButton setTitle:locationName forState:UIControlStateNormal];
+ [[_locationButton titleLabel] setLineBreakMode:NSLineBreakByTruncatingTail];
+ [[_locationButton titleLabel] setAdjustsFontSizeToFitWidth:NO];
+}
+
+- (void)createSubviews
+{
+ _visualEffectView = [self visualEffectViewWithFrame:CGRectMake(0, 0, 20, 20)];
+
+ [_visualEffectView setTranslatesAutoresizingMaskIntoConstraints:NO];
[[self view] addSubview:_visualEffectView.get()];
_cancelButton = [UIButton buttonWithType:UIButtonTypeSystem];
- [_cancelButton setAutoresizingMask:(UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin)];
- [_cancelButton setFrame:doneButtonRect];
- [_cancelButton addTarget:self action:@selector(cancelAction:) forControlEvents:UIControlEventTouchUpInside];
+ [_cancelButton setTranslatesAutoresizingMaskIntoConstraints:NO];
[_cancelButton setAdjustsImageWhenHighlighted:NO];
[_cancelButton setBackgroundColor: [UIColor blackColor]];
- [[_cancelButton layer] setCornerRadius:6];
- [_cancelButton setAlpha:0];
- NSBundle *bundle = [NSBundle bundleForClass:[WKFullScreenWindowController class]];
- RetainPtr<UIImage> image = [UIImage imageNamed:@"Done" inBundle:bundle compatibleWithTraitCollection:nil];
- [_cancelButton setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
-
- [_cancelButton setTintColor:[UIColor colorWithWhite:1.0 alpha:0.55]];
[[_cancelButton layer] setCompositingFilter:[CAFilter filterWithType:kCAFilterPlusL]];
+ [_cancelButton setTitle:WEB_UI_STRING("Done", "Text of button that exits element fullscreen.") forState:UIControlStateNormal];
+ [_cancelButton setTintColor:[UIColor whiteColor]];
+ [_cancelButton addTarget:self action:@selector(cancelAction:) forControlEvents:UIControlEventTouchUpInside];
[[self view] addSubview:_cancelButton.get()];
+ _locationButton = [UIButton buttonWithType:UIButtonTypeSystem];
+ [_locationButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [_locationButton setAdjustsImageWhenHighlighted:NO];
+ [_locationButton setBackgroundColor:[UIColor blackColor]];
+ [[_locationButton layer] setCompositingFilter:[CAFilter filterWithType:kCAFilterPlusL]];
+ [[self view] addSubview:_locationButton.get()];
+
+ UILayoutGuide* containerGuide = [[self view] layoutMarginsGuide];
+
+ [[[_visualEffectView leftAnchor] constraintEqualToAnchor:[[self view] leftAnchor]] setActive:YES];
+ [[[_visualEffectView rightAnchor] constraintEqualToAnchor:[[self view] rightAnchor]] setActive:YES];
+ [[[_visualEffectView topAnchor] constraintEqualToAnchor:[[self view] topAnchor]] setActive:YES];
+ [[[_visualEffectView heightAnchor] constraintGreaterThanOrEqualToConstant:20] setActive:YES];
+
+ NSLayoutConstraint *bottom = [[_visualEffectView bottomAnchor] constraintEqualToAnchor:[containerGuide topAnchor]];
+ [bottom setPriority:UILayoutPriorityRequired - 1];
+ [bottom setActive:YES];
+
+ [[[_cancelButton leadingAnchor] constraintEqualToAnchor:[containerGuide leadingAnchor]] setActive:YES];
+ [[[_cancelButton topAnchor] constraintEqualToAnchor:[[self view] topAnchor]] setActive:YES];
+ [[[_cancelButton bottomAnchor] constraintEqualToAnchor:[_visualEffectView bottomAnchor]] setActive:YES];
+
+ [[[_locationButton heightAnchor] constraintEqualToConstant:20] setActive:YES];
+ [[[_locationButton bottomAnchor] constraintEqualToAnchor:[_visualEffectView bottomAnchor]] setActive:YES];
+ [[[_locationButton leadingAnchor] constraintGreaterThanOrEqualToAnchor:[_cancelButton trailingAnchor]] setActive:YES];
+ [[[_locationButton trailingAnchor] constraintLessThanOrEqualToAnchor:[[self view] trailingAnchor]] setActive:YES];
+ NSLayoutConstraint *centeringConstraint = [[_locationButton centerXAnchor] constraintEqualToAnchor:[[self view] centerXAnchor]];
+ [centeringConstraint setPriority:UILayoutPriorityDefaultLow];
+ [centeringConstraint setActive:YES];
+
+ [_visualEffectView setAlpha:0];
+ [_cancelButton setAlpha:0];
+ [_locationButton setAlpha:0];
+
+ [_visualEffectView setHidden:YES];
+ [_cancelButton setHidden:YES];
+ [_locationButton setHidden:YES];
+}
+
+- (void)loadView
+{
+ [self setView:adoptNS([[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]).get()];
+ [[self view] setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
+
_touchGestureRecognizer = adoptNS([[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(showCancelButton:)]);
[_touchGestureRecognizer setDelegate:self];
[_touchGestureRecognizer setCancelsTouchesInView:NO];
[_touchGestureRecognizer setMinimumPressDuration:0];
[[self view] addGestureRecognizer:_touchGestureRecognizer.get()];
+ [self createSubviews];
}
- (void)viewWillAppear:(BOOL)animated
@@ -224,6 +337,11 @@
[[self view] insertSubview:[self contentView] atIndex:0];
}
+- (void)viewDidAppear:(BOOL)animated
+{
+ [self _updateLayoutMargins];
+}
+
- (void)cancelAction:(id)sender
{
[[self target] performSelector:[self action]];
@@ -232,12 +350,14 @@
- (void)hideCancelButton
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideCancelButton) object:nil];
- [UIView animateWithDuration:0.2 animations:^{
+ [UIView animateWithDuration:showHideAnimationDuration animations:^{
[_visualEffectView setAlpha:0];
[_cancelButton setAlpha:0];
+ [_locationButton setAlpha:0];
} completion:^(BOOL finished){
if (finished) {
[_cancelButton setHidden:YES];
+ [_locationButton setHidden:YES];
[_visualEffectView setHidden:YES];
}
}];
@@ -246,12 +366,14 @@
- (void)showCancelButton:(id)sender
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideCancelButton) object:nil];
- [self performSelector:@selector(hideCancelButton) withObject:nil afterDelay:3.0];
- [UIView animateWithDuration:0.2 animations: ^{
+ [self performSelector:@selector(hideCancelButton) withObject:nil afterDelay:autoHideDelay];
+ [UIView animateWithDuration:showHideAnimationDuration animations: ^{
[_visualEffectView setHidden:NO];
[_cancelButton setHidden:NO];
+ [_locationButton setHidden:NO];
[_visualEffectView setAlpha:1];
[_cancelButton setAlpha:1];
+ [_locationButton setAlpha:1];
}];
}
@@ -261,11 +383,6 @@
[self setAction:action];
}
-- (BOOL)prefersStatusBarHidden
-{
- return YES;
-}
-
// MARK - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
@@ -278,11 +395,19 @@
@interface _WKFullscreenRootViewController : UIViewController
@end
-@implementation _WKFullscreenRootViewController : UIViewController
+@implementation _WKFullscreenRootViewController {
+ BOOL _showsStatusBar;
+}
+- (void)setShowsStatusBar:(BOOL)value
+{
+ _showsStatusBar = value;
+ [self setNeedsStatusBarAppearanceUpdate];
+}
+
- (BOOL)prefersStatusBarHidden
{
- return YES;
+ return !_showsStatusBar;
}
@end
@@ -359,6 +484,7 @@
WKWebViewState _viewState;
RetainPtr<UIWindow> _window;
+ RetainPtr<_WKFullscreenRootViewController> _rootViewController;
RefPtr<WebKit::VoidCallback> _repaintCallback;
RetainPtr<UIViewController> _viewControllerForPresentation;
@@ -366,6 +492,10 @@
CGRect _initialFrame;
CGRect _finalFrame;
+
+ RetainPtr<NSString> _EVOrganizationName;
+ BOOL _EVOrganizationNameIsValid;
+
}
#pragma mark -
@@ -405,16 +535,100 @@
#pragma mark -
#pragma mark Exposed Interface
+- (void)_invalidateEVOrganizationName
+{
+ _EVOrganizationName = nil;
+ _EVOrganizationNameIsValid = NO;
+}
+
+- (BOOL)isSecure
+{
+ return _webView.hasOnlySecureContent;
+}
+
+- (SecTrustRef)_serverTrust
+{
+ return _webView.serverTrust;
+}
+
+- (NSString *)_EVOrganizationName
+{
+ if (!self.isSecure)
+ return nil;
+
+ if (_EVOrganizationNameIsValid)
+ return _EVOrganizationName.get();
+
+ ASSERT(!_EVOrganizationName.get());
+ _EVOrganizationNameIsValid = YES;
+
+ SecTrustRef trust = [self _serverTrust];
+ if (!trust)
+ return nil;
+
+ NSDictionary *infoDictionary = [(__bridge NSDictionary *)SecTrustCopyInfo(trust) autorelease];
+ // If SecTrustCopyInfo returned NULL then it's likely that the SecTrustRef has not been evaluated
+ // and the only way to get the information we need is to call SecTrustEvaluate ourselves.
+ if (!infoDictionary) {
+ OSStatus err = SecTrustEvaluate(trust, NULL);
+ if (err == noErr)
+ infoDictionary = [(__bridge NSDictionary *)SecTrustCopyInfo(trust) autorelease];
+ if (!infoDictionary)
+ return nil;
+ }
+
+ // Make sure that the EV certificate is valid against our certificate chain.
+ id hasEV = [infoDictionary objectForKey:(__bridge NSString *)kSecTrustInfoExtendedValidationKey];
+ if (![hasEV isKindOfClass:[NSValue class]] || ![hasEV boolValue])
+ return nil;
+
+ // Make sure that we could contact revocation server and it is still valid.
+ id isNotRevoked = [infoDictionary objectForKey:(__bridge NSString *)kSecTrustInfoRevocationKey];
+ if (![isNotRevoked isKindOfClass:[NSValue class]] || ![isNotRevoked boolValue])
+ return nil;
+
+ _EVOrganizationName = [infoDictionary objectForKey:(__bridge NSString *)kSecTrustInfoCompanyNameKey];
+ return _EVOrganizationName.get();
+}
+
+- (void)updateLocationInfo
+{
+ NSURL* url = ""
+
+ NSString *EVOrganizationName = [self _EVOrganizationName];
+ BOOL showsEVOrganizationName = [EVOrganizationName length] > 0;
+
+ NSString *domain = nil;
+
+ if (LinkPresentationLibrary())
+ domain = [url _lp_simplifiedDisplayString];
+ else
+ domain = userVisibleString(url);
+
+ NSString *text = nil;
+ if ([[url scheme] caseInsensitiveCompare:@"data"] == NSOrderedSame)
+ text = @"data:";
+ else if (showsEVOrganizationName)
+ text = EVOrganizationName;
+ else
+ text = domain;
+
+ [_fullscreenViewController setLocation:text secure:self.isSecure trustedName:showsEVOrganizationName trustedSite:!!EVOrganizationName];
+}
+
- (void)enterFullScreen
{
if ([self isFullScreen])
return;
+ [self _invalidateEVOrganizationName];
+
_fullScreenState = WaitingToEnterFullScreen;
_window = adoptNS([[UIWindow alloc] init]);
[_window setBackgroundColor:[UIColor clearColor]];
- [_window setRootViewController:adoptNS([[_WKFullscreenRootViewController alloc] init]).get()];
+ _rootViewController = adoptNS([[_WKFullscreenRootViewController alloc] init]);
+ [_window setRootViewController:_rootViewController.get()];
[[_window rootViewController] setView:adoptNS([[UIView alloc] initWithFrame:[_window bounds]]).get()];
[[[_window rootViewController] view] setBackgroundColor:[UIColor clearColor]];
[[[_window rootViewController] view] setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
@@ -427,6 +641,7 @@
[_fullscreenViewController setModalPresentationStyle:UIModalPresentationCustom];
[_fullscreenViewController setTarget:self action:@selector(requestExitFullScreen)];
[[_fullscreenViewController view] setFrame:[[_viewControllerForPresentation view] bounds]];
+ [self updateLocationInfo];
[self _manager]->saveScrollPosition();
@@ -461,6 +676,7 @@
[self _manager]->setAnimatingFullScreen(true);
_repaintCallback = VoidCallback::create([protectedSelf = retainPtr(self), self](WebKit::CallbackBase::Error) {
+ _repaintCallback = nullptr;
if (![_webView _page])
return;
@@ -489,11 +705,13 @@
[_window setWindowLevel:UIWindowLevelNormal];
[_window makeKeyAndVisible];
+ [_rootViewController setShowsStatusBar:YES];
[CATransaction commit];
[_viewControllerForPresentation presentViewController:_fullscreenViewController.get() animated:YES completion:^{
[self completedEnterFullScreen];
+ [_rootViewController setShowsStatusBar:NO];
}];
}
@@ -536,11 +754,13 @@
[_webView _page]->setSuppressVisibilityUpdates(true);
+ [_rootViewController setShowsStatusBar:YES];
[_fullscreenViewController dismissViewControllerAnimated:YES completion:^{
if (![_webView _page])
return;
[self completedExitFullScreen];
+ [_rootViewController setShowsStatusBar:NO];
}];
}
Added: trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/Contents.json (0 => 226218)
--- trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/Contents.json (rev 0)
+++ trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/Contents.json 2017-12-21 10:56:58 UTC (rev 226218)
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "navigationbarlockm...@2x.pdf",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "navigationbarlockm...@3x.pdf",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
Copied: trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/navigationbarlockm...@2x.pdf (from rev 226217, trunk/Source/WebKit/WebKit.xcassets/Done.imageset/Done.pdf) (0 => 226218)
--- trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/navigationbarlockm...@2x.pdf (rev 0)
+++ trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/navigationbarlockm...@2x.pdf 2017-12-21 10:56:58 UTC (rev 226218)
@@ -0,0 +1,121 @@
+%PDF-1.3
+%\xC4\xE5\xF2\xE5\xEB\xA7\xF3\xA0\xD0\xC4\xC6
+4 0 obj
+<< /Length 5 0 R /Filter /FlateDecode >>
+stream
+xmR\xCBN1\xBC\xE7+|F\xAAk\xE7\x9D3\x88{O\xFD\x80\xA4mQ\xE9\xFFKL\xB2\x9B\xA4\xAA\xD8\xF6\x8F_\xE3\xB1ot\xA2E\x8E\xDE\xE6\x90H#\xA7@
+\xECBR\xEFv`%Ƕ!;\xA0H\x8B\x86\x84\xA4jX\xCE%j0K3q\xD9GZ7/\xA7쭛U\x84\xC5|\xD6\xCFV\xD82\x99t\xA5̩\x8D\xF4\x80\xAA\xD4\xF6{\x83f\x8C\xE6\xE0Ҝ\x9D\xC84\xBB嶱\x9FT\x98$\xEA\xA8\xD6K\xC8P&qq\xB1\xD8b\x96\xB9\xE4RI\xA9g\xCDE-hvd\xEFL\xCB\xC4\xBB:\xCEg,G\x95\x9CG\xF1*Z(\xDEڡ\xC3D\x96\xA9؈ZɳD'I\xCD\xC0\xB6\xC0S/>\x80\xC1`\xC1B\xF6\xA0\xBE?,\xACcf\xCCӋO\xE6}te\xFESk\xA5\xF3]I\xF0\x83*\x9A\xCC\xEF\x9D+\xC0\x91\xBE\xE9\xF8zWZ\xEE\xCD-t_\xE8\xE0\xB0Ƀ\xE7DDIY\x9C#!\xE9\xB3])J6 \xF5\xD2\x9EB\x85U|\x8C \xCF\x8D\x85,\xF8Á\x88\xE0\xF0m\xB1+\xF8[\x8E@[Z\xCD\xADl`\xD8\x85ֻ\xB5\xB3\xFC\xC8@\x85\xED\xBF \xAF\x95\xBE\x9Ef\xACt\xCF\xE6J\xC7\xF7\x8B\xD2\xDB\x9D\xFEI]\xAB\x87
+endstream
+endobj
+5 0 obj
+366
+endobj
+2 0 obj
+<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 12 17]
+>>
+endobj
+6 0 obj
+<< /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> /XObject << /Fm1 8 0 R >>
+>>
+endobj
+8 0 obj
+<< /Length 9 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType
+1 /BBox [-10 -10 22 20] /Resources 10 0 R /Group << /S /Transparency /CS 11 0 R
+/I true /K false >> >>
+stream
+x+TT(T\xD054\xE3\##0#\xC402P\xC8\xF3\xC0\x8Cp-\x85< 44R*/JU \xE8\x99)d*\xE8;r%\x83\xA5+\x8A\x93\x81\xBAL\xC1\xD8\xC4H\xC1\xAC6M!\xBA\xCC\xCF
+endstream
+endobj
+9 0 obj
+84
+endobj
+10 0 obj
+<< /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> >>
+endobj
+12 0 obj
+<< /Length 13 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >>
+stream
+x\x9D\x96wTS\xD9\x87Ͻ7\xBD\xD0" %\xF4z \xD2;HQ\x89I\x80P\x86\x84&vDF)VdT\xC0G\x87"cE\x83\x82b\xD7 \xF2P\xC6\xC1QDE\xE5k \xEF\xAD5\xF3ޚ\xFD\xC7Y\xDF\xD9\xE7\xB7\xD7\xD9g\xEF}P\xFC\x82\xC2tX\x804\xA1X\xEE\xEB\xC1\\xCB\xC4\xF7X\xC0\xE1ffG\xF8D\xD4\xFC\xBD=\x99\x99\xA8HƳ\xF6\xEE.\x80d\xBB\xDB,\xBFP&s\xD6\xFF\x91"7C$
+E\xD56<~&\xE5\x94S\xB3\xC52\xFF\xCA\xF4\x95)2\x8612\xA1 \xA2\xAC"\xE3įl\xF6\xA7\xE6+\xBBɘ\x97&\xE4\xA1Y\xCE\xBC4\x9E\x8C\xBBPޚ%ᣌ\xA1\\x98%\xE0g\xA3|e\xBDTI\x9A\xE5\xF7(\xD3\xD3\xF8\x9CL0\x99_\xCC\xE7&\xA1l\x892E\xEE\x89\xF2\x94\xC49\xBCr\x8B\xF99h\x9Ex\xA6g\xE4\x8A\x89Ib\xA6טi\xE5\xE8\xC8f\xFA\xF1\xB3S\xF9b1+\x94\xC3M\xE1\x88xL\xCF\xF4\xB4\x8E0\x80\xAFo\x96E%Ym\x99h\x91\xED\xAD\xED\xEDY\xD6\xE6h\xF9\xBF\xD9\xDF~S\xFD=\xC8z\xFBU\xF1&\xECϞA\x8C\x9EY\xDFl\xEC\xAC/\xBD\xF6$Z\x9B\xB3\xBE\x95U\xB4m@\xE5\xE1\xACO\xEF \xF2\xB4ޜ\xF3\x86l^\x92\xC4\xE2'\x8B\xEC\xECls\x9Fk.+\xE87\xFB\x9F\x82oʿ\x869\xF7\x99\xCB\xEE\xFBV;\xA6?\x81#I3eE妧\xA6KD\xCC\xCC\x97\xCFd\xFD\xF7\xFF\xE3\xC09i\xCD\xC9\xC3,\x9C\x9F\xC0\xF1\x85\xE8UQ\xE8\x94 \x84\x89h\xBB\x85<\x81X\x90.d
+\x84\xD5\xE16'~\x9Dkhu_}\x859P\xB8I\xC8o=C#$n?z}\xEB[1
+Ⱦ\xBCh\xAD\x91\xAFs\x8F2z\xFE\xE7\xFA\\x8An\xE1LA"S\xE6\xF6\x8Fdr%\xA2,\xA3߄l\xC1\x90t\xA0
+4\x81.0,`+\x803p\xDE \x84\x80H\x96.Hi@\xB2A>\xD8
+A1\xD8v\x83jpԁz\xD0N\x826p\W\xC0+p\x80G@
+\x86\xC1K0ށi\x82\xF0\xA2A\xAA\x90\xA4\x99B\xD6ZyCAP8\xC5C\x89\x90\x92@\xF9\xD0&\xA8*\x83\xAA\xA1CP=\xF4#t\xBA]\x83\xFA\xA0\xD0 4\xFD}\x84\x98\xD3a+\xD8\xB6\x80ٰ;G\xC2\xCB\xE0Dx\x9C\xC0\xDB\xE1J\xB8>\xB7\xC2\xE1\xF0,\x85_@\xC8\xD1FX\xF1DB\x90X$!k\x91"\xA4\xA9E\x9A\x90\xA4\xB9\x8DH\x91q\xE4\x87\xA1a\x98\xC6\xE3\x87Y\x8C\xE1bVa\xD6bJ0c\x98VL\xE66f3\x81\xF9\x82\xA5bձ\xA6X'\xAC?v 6\x9B\x8D-\xC4V`\x8F`[\xB0\x97\xB1\xD8a\xEC;\xC7\xC0\xE2p~\xB8\2n5\xAE\xB7\xBB\x80\xEB\xC3+\xE1&\xF1x\xBC*\xDE\xEF\x82\xC1s\xF0b|!\xBE
+ߏƿ'\x90 Zk\x82!\x96 $l$T\xE7\xFD\x84\xC24Q\x81\xA8Ot"\x86y\xC4\b)\xB1\x8E\xD8A\xBCI&N\x93I\x86$R$)\x99\xB4\x81TIj"]&=&\xBD!\x93\xC9:dGrY@^O\xAE$\x9F _%\x92?P\x94(&OJEB\xD9N9J\xB9@y@yC\xA5R+\xA8n\xD4X\xAA\x98\xBA\x9DZO\xBDD}J}/G\x933\x97\xF3\x97\xE3ɭ\x93\xAB\x91k\x95\xEB\x97{%O\x94חw\x97_.\x9F'_!J\xFE\xA6\xFC\xB8Q\xC1@\xC1S\x81\xA3\xB0V\xA1F\xE1\xB4\xC2=\x85IE\x9A\xA2\x95b\x88b\x9Ab\x89b\x83\xE25\xC5Q%\xBC\x92\x81\x92\xB7O\xA9@\xE9\xB0\xD2%\xA5!BӥyҸ\xB4M\xB4:\xDAe\xDA0G7\xA4\xFBӓ\xE9\xC5\xF4\xE8\xBD\xF4 e%e[\xE5(\xE5\xE5\xE5\xB3\xCAR\xC20`\xF83R\xA5\x8C\x93\x8C\xBB\x8C\x8F\xF34\xE6\xB9\xCF\xE3\xCF\xDB6\xAFi^\xFF\xBC)\x95\xF9*n*|\x95"\x95f\x95\x95\x8F\xAALUo\xD5՝\xAAm\xAAO\xD40j&jaj\xD9j\xFB\xD5.\xAB\x8Dϧ\xCFw\x9Eϝ_4\xFF\xE4\xFC\x87갺\x89z\xB8\xFAj\xF5\xC3\xEA=\xEA\x93\x9A\xBEU\x974\xC65\x9An\x9Aɚ\xE5\x9A\xE74ǴhZ\xB5Z\xE5Z\xE7\xB5^0\x95\x99\xEE\xCCTf%\xB3\x8B9\xA1\xAD\xAE\xED\xA7-\xD1>\xA4ݫ=\
xADc\xA8\xB3Xg\xA3N\xB3\xCE]\x92.[7A\xB7\\xB7SwBOK/X/_\xAFQ\xEF\xA1>Q\x9F\xAD\x9F\xA4\xBFG\xBF[\xCA\xC0\xD0 \xDA`\x8BA\x9B\xC1\xA8\xA1\x8A\xA1\xBFa\x9Ea\xA3\xE1c#\xAA\x91\xAB\xD1*\xA3Z\xA3;\xC68c\xB6q\x8A\xF1>\xE3[&\xB0\x89\x9DI\x92I\x8D\xC9MS\xD8\xD4\xDET`\xBAϴ\xCFk\xE6h&4\xAB5\xBBǢ\xB0\xDCYY\xACF֠9\xC3<\xC8|\xA3y\x9B\xF9+=\x8BX\x8B\x9D\xDD_,\xED,S-\xEB,Y)YXm\xB4\xEA\xB0\xFA\xC3\xDAĚk]c}džj\xE3c\xB3Φ\xDD浭\xA9-\xDFv\xBF\xED};\x9A]\xB0\xDD\xBBN\xBB\xCF\xF6\xF6"\xFB&\xFB1=\x87x\x87\xBD\xF7\xD8tv(\xBB\x84}\xD5\xEB\xE8\xE1\xB8\xCE\xF1\x8C\xE3'{'\xB1\xD3I\xA7ߝY\xCE)\xCE+Σ\xF0\xD4-r\xD1q\xE1\xB8r\x91.d.\x8C_xp\xA1\xD4Uە\xE3Z\xEB\xFA\xCCM\xE7v\xC4m\xC4\xDD\xD8=\xD9\xFD\xB8\xFB+K\x91G\x8Bǔ\xA7\x93\xE7\xCF^\x88\x97\xAFW\x91W\xAF\xB7\x92\xF7b\xEFj\xEF\xA7>:>\x89>\x8D>\xBEv\xBE\xAB}/\xF8a\xFD\xFDv\xFA\xDD\xF3\xD7\xF0\xE7\xFA\xD7\xFBO8\xAC \xE8
+\xA4FV>2 u\xC3\xC1\xC1\xBB\x82/\xD2_$\\xD4B\xFCCv\x85< 5]\xFAs.,4\xAC&\xECy\xB8Ux~xw-bEDCĻH\x8F\xC8\xD2\xC8G\x8B\x8DKwF\xC9G\xC5E\xD5GME{E\x97EK\x97X,Y\xB3\xE4F\x8CZ\x8C \xA6={$vr\xA9\xF7\xD2\xDDK\x87\xE3\xEC\xE2
+\xE3\xEE.3\\x96\xB3\xEC\xDAr\xB5\xE5\xA9\xCBϮ\x90_\xC1Yq*\xDF\xFF\x89©\xE5L\xAE\xF4_\xB9w\xE5ד\xBB\x87\xFB\x92\xE7\xC6+\xE7\x8D\xF1]\xF8e\xFC\x91\x97\x84\xB2\x84\xD1D\x97\xC4]\x89cI\xAEII\xE3OA\xB5\xE0u\xB2_\xF2\x81䩔\x90\x94\xA3)3\xA9ѩ\xCDi\x84\xB4\xF8\xB4\xD3B%a\x8A\xB0+]3='\xBD/\xC34\xA30C\xBA\xCAi\xD5\xEEU\xA2@ёL(sYf\xBB\x98\x8E\xFEL\xF5H\x8C$\x9B%\x83Y\xB3j\xB2\xDEgGe\x9F\xCAQ\xCC\xE6\xF4\xE4\x9A\xE4n\xCB\xC9\xF3\xC9\xFB~5f5wug\xBEv\xFE\x86\xFC\xC15\xEEk\xAD\x85֮\۹Nw]\xC1\xBA\xE1\xF5\xBE\xEB\x8Fm mH\xD9\xF0\xCBFˍe\xDFn\x8A\xDE\xD4Q\xA0Q\xB0\xBE`h\xB3\xEF\xE6\xC6B\xB9BQ\xE1\xBD-\xCE[l\xC5ll\xED\xDDf\xB3\xADjۗ"^\xD1\xF5b\xCB\xE2\x8A\xE2O%ܒ\xEB\xDFY}W\xF9\xDD\xCC\xF6\x84\x{DF65}\xF6\xA5\xFBw\xE0vw\xDC\xDD\xE9\xBA\xF3X\x99bY^\xD9Ю\xE0]\xAD\xE5\xCC\xF2\xA2\xF2\xB7\xBBW\xEC\xBEVa[q`i\x8Fd\x8F\xB42\xA8\xB2\xBDJ\xAFjGէ\xEA\xA4\xEA\x81\x8F\x9A\xE6\xBD\xEA{\xB7\xED\x9D\xDA\xC7\xDB\xDFm\xD3\x8D\xC5>\xBC\xC8\xF7Pk\xADAm\xC5a\xDC\xE1\xAC\x
C3\xCF\xEB\xA2꺿g_D\xEDH\xF1\x91\xCFG\x85G\xA5\xC7u\xD5;\xD4\xD77\xA87\x946\x92Ʊ\xE3q\xC7o\xFD\xE0\xF5C{\xAB\xE9P3\xA3\xB9\xF88!9\xF1\xE2\xC7\xF8\xEF\x9E<\xD9y\x8A}\xAA\xE9'\xFD\x9F\xF6\xB6\xD0Z\x8AZ\xA1\xD6\xDC։\xB6\xA46i{L{\xDF\xE9\x80ӝ\xCE-?\x9B\xFF|\xF4\x8C\x{1996B3}\xCAgKϑ\xCE\x9C\x9B9\x9Fw~\xF2Bƅ\xF1\x8B\x89\x87:Wt>\xBA\xB4\xE4ҝ\xAE\xB0\xAE\xDEˁ\x97\xAF^\xF1\xB9r\xA9۽\xFB\xFCU\x97\xABg\xAE9];}\x9D}\xBD\xED\x86\xFD\x8D\xD6\xBB\x9E\x96_\xEC~i\xE9\xB5\xEFm\xBD\xE9p\xB3\xFD\x96㭎\xBE}\xE7\xFA]\xFB/\xDE\xF6\xBA}\xE5\x8E\xFF\x9D\x8B\xFA\xEE.\xBE{\xFF^\xDC=\xE9}\xDE\xFD\xD1\xA9^?\xCCz8\xFDh\xFDc\xEC\xE3\xA2'
+O*\x9E\xAA?\xAD\xFD\xD5\xF8\xD7f\xA9\xBD\xF4\xEC\xA0\xD7`ϳ\x88g\x8F\x86\xB8C/\xFF\x95\xF9\xAFO\xC3ϩ\xCF+F\xB4F\xEAG\xADGό\xF9\x8C\xDDz\xB1\xF4\xC5\xF0ˌ\x97\xD3ㅿ)\xFE\xB6\xF7\x95ѫ\x9F~w\xFB\xBDgb\xC9\xC4\xF0k\xD1\xEB\x99?Jި\xBE9\xFA\xD6\xF6m\xE7d\xE8\xE4\xD3wi獵\x8Aޫ\xBE?\xF6\x81\xFD\xA1\xFBc\xF4Ǒ\xE9\xECO\xF8O\x95\x9F\x8D?w| \xFC\xF2x&mf\xE6\xDF\xF7\x84\xF3\xFB
+endstream
+endobj
+13 0 obj
+2612
+endobj
+7 0 obj
+[ /ICCBased 12 0 R ]
+endobj
+14 0 obj
+<< /Length 15 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >>
+stream
+x\x85U[\x88U\xFE\x939\xC9
+\xBB\xCE\xD3\xDA\xD5-\xA4C\xBDt)\xBBK\xB6ݥ\xB4\x9A[\x93\xB4k\xB2\xD9\xD5A\xB3\x93\x93d\xCC\xEC$\xCEL\xD2}*\x82⋫\xBEIA\xBC\xBD-\x82\xD2z\xC1\xD6\xFBR\xA9PVw\xEB"(>\xB4xA(\xF4E\xB7\xF1;\x93d&Yj\x9Be\xCF|\xF3\xFD\xDF\xF9o\xE7\x9F\xA2\x81\xB5B\xBD\xAE\xFB\xA2%\xC36sɨ\xF2\xDC\xD1c\xCA\xC0:\xF9\xE9!\xA4Q,\xA8V=\x92\xCD\xCE~B+\xAE\xFD\xBF[?\x90O0W'\xEEl\xEFWo\xB9,rK%\xF2\xDD\xBEV\xB4\xD4%\xE0D\x81\xB3jݴ\x89\x86\xC1O\xB7\xEB\x8B\x86M$\xFC\xA2\xC0\xE56\x86\x8D\x86\xDB\xF85G\x93\xCFŠ9,\xAB\x95Bxx|\xB1\x87/\xF7\xE0vP\xC0O\x92\xDC\xD4TE\xF4"k\xD6J\x9A\xCEC{\xB9\x87\xB9Gy7\xB8\xA47P\xB3\xF3ہuȪ\xCE\xC6u\xB5\xBFR,\xC4\x9E^Q\x899\xE0G\x80\xAF5\xB5\x85L߮\xDB\xD1\xF0cD\xFE\x9D\x8D\xEA|x7p\xAAd\x9C\x86\xBFYi\xA4\xBA\xF8\x9DS\x95\xFC\xB3ශ\xFF\xC6X\xCC\xE9\xEC]S\xADzI;\xC1߮\xF0\xB4\xE8o\x88HR4;\x9D\x86\xE9\x80Y\xCB =r\x90JEO\x8F\xBF^\xAD9\xC0\xA7\xF4\x99՜\xBC\xC8g\xEDT%&\xF2\xFC\xE5\x97
+\x87\xB2\xC0\xA3\xC0\xBFr=)\xF4\x88%\xFD[\xB7\xB3\x9DX\xC8\xD03".b\xB18\xB7\x9Czᇅ\xECJ>q\x99n\x9B\xF9\xCE^\xB6\\xD2\xA6;\xFAO*fJ\xF0bﵺ\xEE\xCC(r\xF8\xCDFNԎX\x81ɂ\x99H\xC3g ˍy\xD1O\x81\x9B\xB4\xE0+\xA7-bUɠMR(GI\x8A\xE2Z'\x96i\xA4\x83\xE1\xB0r0w]̈́\xB3Ϣ*x\x8D\x9A\x8E\xCDu\x94\xED\x9D]\xADBe\xB0]w\xB4*\xC5BQ\x9E*\xF4؊\xEBS\xA1\xEE\xE0\xCA\xFF㧝ˍ\x8E\x9Faa\xB6\xFF\xFB\xD8,\xDBϦ\xD9)\xEC)\xF64;\xC0\xE2`g\xD8>\xD7w{\xBA\x89|n J\xDB\xCFˈ\xC8\xDDj\xBF\x88m*`\xFD\x8AY\xAE\x87\xBE\xAE,\x8F6\xC6<\xCB\xF3M\xBD\xF2\xC6\xDF=\xBDҰ\xB3\xEA*&\xFA:z\xE4^=\xFC\xB8Xź\xD8p}(\x81\x9F\xF8[Go\xBCZj\x9E\xBD\xD3eqRN\xB4֧\xDBz]U\x95\xEA\xCE\xCE%tACͼ\xA7\xE6\x89^\x97N\xF9\xA0m\x95\x9D{\xFE\xEAХ\xD3%cy\xD4cE\xF8\xAB\x99[:3\xEE\xB1\xE1\xC3\x86W\xC3\xEF\x85?\xFF.\xBD-}*}%\x9D\x97>\x97.\x93"]\x90.J_K\xDFJK_\xB8\xFA\xBB͐{\xF6$2s%\xF2\xD3խ\xB0\xB7טX9*o\x97\x96\xE3\xF2\xF9Qy\xD6U)\xF2\x88<%\xA7\xE4]\xB0lw\xCF͛o\x
A5\xB7r\xF4\xE5(\xA2u\xFBs\xE7X\xE2Y\xD1\O8\xDF\xFD\x98͋\xD87\xF3\xC8X\xA3\xE3\xF0i\xA2\xDFb\xDE: m\xEF\x93ש\x88\x85\xD8Ko\x99\xEEi1\xF3]\xDF\xC1D0\x8C\x90\xDC\x9C N \xDC}\x96\x83\xBB`\x9B\xC1\x9A\xE8\xCD+\xF3\xE1*\xFA*\xE56?!\xBE'\xAB\xD5O\x9AZ\xB9b+{\xC2\xE1'\x95>}\I\xEA\xE4\xB8R\xD0u\xC51Y\x8A\xC9-n6yq\x92\xC4wS\xEC#\xBA\x99s\xBE\x87\xBEmW<\xCE~\x86h\xFF_x\xF7}\xEFq\xC7D+\xD1\xC8\xE37\x86w\xE5\xEF\x9D{Bm\x98Ͷ?\xF2\xF9\xBE#\xB2J{\xF78\xF7\xBE\xA1(\xDE_?\xB7Z7\xF1x\x8Bh\xF3\xCDV\xEB\x9F\xF7[\xAD\xCD\xE0\x83\xE8\x82\xFE\xA0\x9F|U
+endstream
+endobj
+15 0 obj
+1079
+endobj
+11 0 obj
+[ /ICCBased 14 0 R ]
+endobj
+3 0 obj
+<< /Type /Pages /MediaBox [0 0 12 17] /Count 1 /Kids [ 2 0 R ] >>
+endobj
+16 0 obj
+<< /Type /Catalog /Pages 3 0 R /Version /1.4 >>
+endobj
+17 0 obj
+(Mac OS X 10.12.5 Quartz PDFContext)
+endobj
+18 0 obj
+(D:20170710230227Z00'00')
+endobj
+1 0 obj
+<< /Producer 17 0 R /CreationDate 18 0 R /ModDate 18 0 R >>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000005314 00000 n
+0000000481 00000 n
+0000005074 00000 n
+0000000022 00000 n
+0000000462 00000 n
+0000000583 00000 n
+0000003798 00000 n
+0000000677 00000 n
+0000000975 00000 n
+0000000993 00000 n
+0000005037 00000 n
+0000001062 00000 n
+0000003777 00000 n
+0000003834 00000 n
+0000005016 00000 n
+0000005155 00000 n
+0000005219 00000 n
+0000005272 00000 n
+trailer
+<< /Size 19 /Root 16 0 R /Info 1 0 R /ID [ <cec3d6fa08f0b75041dbcb1f3d77bad9>
+<cec3d6fa08f0b75041dbcb1f3d77bad9> ] >>
+startxref
+5389
+%%EOF
Copied: trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/navigationbarlockm...@3x.pdf (from rev 226217, trunk/Source/WebKit/WebKit.xcassets/Done.imageset/Done.pdf) (0 => 226218)
--- trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/navigationbarlockm...@3x.pdf (rev 0)
+++ trunk/Source/WebKit/WebKit.xcassets/LockMini.imageset/navigationbarlockm...@3x.pdf 2017-12-21 10:56:58 UTC (rev 226218)
@@ -0,0 +1,120 @@
+%PDF-1.3
+%\xC4\xE5\xF2\xE5\xEB\xA7\xF3\xA0\xD0\xC4\xC6
+4 0 obj
+<< /Length 5 0 R /Filter /FlateDecode >>
+stream
+x]RAj\xC40\xBC\xFBs.\xACײl\xC79\xB7\xF4\xBE\xA7}@hi!۲\xCD\xFF\xA1#'q\xB6\x85@F\xF2h\xA4\x91}\xC7wH@̾D\xDCP74#\xF9a\xC3Q}\x90JB\x84\x8C\xBE\xEA(\x83\xE25\x874V\xCC.B\xBDTZe\xF0\xB9\x8C%\xD5@\xC5O\xD6\xEAg\x88z}HH\xE9*\x8E\xB8˳\xAE\x9DYV\x8E\x91\x9A\xC4:~\xF7\xD1\xFAph\xAA\xBBA"\xE7W\xABik[2\xA2\xF8a0Wk\xF8\xE0lM\xF4\xF6mN$\x9FDBT\xB7\xEBqZ%\xB5\xEEx\xB2\xEE\xC1\x8C\xEC\xC7\xCAE\xEE\x89\xC4 \xBA\x81f\xD7\xDBL-~\xF4\xD9\xD8}\xCCMj7\xC16;\xFC\xEBw\xC6\xF5 _\xE0\xA6!$\xFC\xBC\xE1j _\xF0\x89\xF3\xF3"\x98\x96v\xB0L8)Nt\xA6A3/8A\xB3\x99\xCB\xDC{{
+\xDE7\xB7\xE85\xD1k6][\xE0` \xF2!(fH \xB7\xD1,x\xD6\xE8vcV\xE0\xDAD\xAD\x92\xC1\xF3j$T+\\xBF\x89<\xA2\xFF|\xB9\xCD\xD7\xF9\xF5&x\xF9\xC6\xE5\xDEʍt
+endstream
+endobj
+5 0 obj
+328
+endobj
+2 0 obj
+<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 18 26]
+>>
+endobj
+6 0 obj
+<< /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> /XObject << /Fm1 8 0 R >>
+>>
+endobj
+8 0 obj
+<< /Length 9 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType
+1 /BBox [-15 -15 33 30] /Resources 10 0 R /Group << /S /Transparency /CS 11 0 R
+/I true /K false >> >>
+stream
+x+TT(T\xD054\xE3\cc0#\xC406P\xC8\xF3\xC0\x8Cp-\x85< 4\xB4P*/JU \xE8\x99)d*\xE8;r%\x83\xA5+\x8A\x93t\x8D\xC0\xD8\xD4B\xC1\xAC6M!\xC5\xE8\xF9
+endstream
+endobj
+9 0 obj
+85
+endobj
+10 0 obj
+<< /ProcSet [ /PDF ] /ColorSpace << /Cs1 7 0 R >> >>
+endobj
+12 0 obj
+<< /Length 13 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >>
+stream
+x\x9D\x96wTS\xD9\x87Ͻ7\xBD\xD0" %\xF4z \xD2;HQ\x89I\x80P\x86\x84&vDF)VdT\xC0G\x87"cE\x83\x82b\xD7 \xF2P\xC6\xC1QDE\xE5k \xEF\xAD5\xF3ޚ\xFD\xC7Y\xDF\xD9\xE7\xB7\xD7\xD9g\xEF}P\xFC\x82\xC2tX\x804\xA1X\xEE\xEB\xC1\\xCB\xC4\xF7X\xC0\xE1ffG\xF8D\xD4\xFC\xBD=\x99\x99\xA8HƳ\xF6\xEE.\x80d\xBB\xDB,\xBFP&s\xD6\xFF\x91"7C$
+E\xD56<~&\xE5\x94S\xB3\xC52\xFF\xCA\xF4\x95)2\x8612\xA1 \xA2\xAC"\xE3įl\xF6\xA7\xE6+\xBBɘ\x97&\xE4\xA1Y\xCE\xBC4\x9E\x8C\xBBPޚ%ᣌ\xA1\\x98%\xE0g\xA3|e\xBDTI\x9A\xE5\xF7(\xD3\xD3\xF8\x9CL0\x99_\xCC\xE7&\xA1l\x892E\xEE\x89\xF2\x94\xC49\xBCr\x8B\xF99h\x9Ex\xA6g\xE4\x8A\x89Ib\xA6טi\xE5\xE8\xC8f\xFA\xF1\xB3S\xF9b1+\x94\xC3M\xE1\x88xL\xCF\xF4\xB4\x8E0\x80\xAFo\x96E%Ym\x99h\x91\xED\xAD\xED\xEDY\xD6\xE6h\xF9\xBF\xD9\xDF~S\xFD=\xC8z\xFBU\xF1&\xECϞA\x8C\x9EY\xDFl\xEC\xAC/\xBD\xF6$Z\x9B\xB3\xBE\x95U\xB4m@\xE5\xE1\xACO\xEF \xF2\xB4ޜ\xF3\x86l^\x92\xC4\xE2'\x8B\xEC\xECls\x9Fk.+\xE87\xFB\x9F\x82oʿ\x869\xF7\x99\xCB\xEE\xFBV;\xA6?\x81#I3eE妧\xA6KD\xCC\xCC\x97\xCFd\xFD\xF7\xFF\xE3\xC09i\xCD\xC9\xC3,\x9C\x9F\xC0\xF1\x85\xE8UQ\xE8\x94 \x84\x89h\xBB\x85<\x81X\x90.d
+\x84\xD5\xE16'~\x9Dkhu_}\x859P\xB8I\xC8o=C#$n?z}\xEB[1
+Ⱦ\xBCh\xAD\x91\xAFs\x8F2z\xFE\xE7\xFA\\x8An\xE1LA"S\xE6\xF6\x8Fdr%\xA2,\xA3߄l\xC1\x90t\xA0
+4\x81.0,`+\x803p\xDE \x84\x80H\x96.Hi@\xB2A>\xD8
+A1\xD8v\x83jpԁz\xD0N\x826p\W\xC0+p\x80G@
+\x86\xC1K0ށi\x82\xF0\xA2A\xAA\x90\xA4\x99B\xD6ZyCAP8\xC5C\x89\x90\x92@\xF9\xD0&\xA8*\x83\xAA\xA1CP=\xF4#t\xBA]\x83\xFA\xA0\xD0 4\xFD}\x84\x98\xD3a+\xD8\xB6\x80ٰ;G\xC2\xCB\xE0Dx\x9C\xC0\xDB\xE1J\xB8>\xB7\xC2\xE1\xF0,\x85_@\xC8\xD1FX\xF1DB\x90X$!k\x91"\xA4\xA9E\x9A\x90\xA4\xB9\x8DH\x91q\xE4\x87\xA1a\x98\xC6\xE3\x87Y\x8C\xE1bVa\xD6bJ0c\x98VL\xE66f3\x81\xF9\x82\xA5bձ\xA6X'\xAC?v 6\x9B\x8D-\xC4V`\x8F`[\xB0\x97\xB1\xD8a\xEC;\xC7\xC0\xE2p~\xB8\2n5\xAE\xB7\xBB\x80\xEB\xC3+\xE1&\xF1x\xBC*\xDE\xEF\x82\xC1s\xF0b|!\xBE
+ߏƿ'\x90 Zk\x82!\x96 $l$T\xE7\xFD\x84\xC24Q\x81\xA8Ot"\x86y\xC4\b)\xB1\x8E\xD8A\xBCI&N\x93I\x86$R$)\x99\xB4\x81TIj"]&=&\xBD!\x93\xC9:dGrY@^O\xAE$\x9F _%\x92?P\x94(&OJEB\xD9N9J\xB9@y@yC\xA5R+\xA8n\xD4X\xAA\x98\xBA\x9DZO\xBDD}J}/G\x933\x97\xF3\x97\xE3ɭ\x93\xAB\x91k\x95\xEB\x97{%O\x94חw\x97_.\x9F'_!J\xFE\xA6\xFC\xB8Q\xC1@\xC1S\x81\xA3\xB0V\xA1F\xE1\xB4\xC2=\x85IE\x9A\xA2\x95b\x88b\x9Ab\x89b\x83\xE25\xC5Q%\xBC\x92\x81\x92\xB7O\xA9@\xE9\xB0\xD2%\xA5!BӥyҸ\xB4M\xB4:\xDAe\xDA0G7\xA4\xFBӓ\xE9\xC5\xF4\xE8\xBD\xF4 e%e[\xE5(\xE5\xE5\xE5\xB3\xCAR\xC20`\xF83R\xA5\x8C\x93\x8C\xBB\x8C\x8F\xF34\xE6\xB9\xCF\xE3\xCF\xDB6\xAFi^\xFF\xBC)\x95\xF9*n*|\x95"\x95f\x95\x95\x8F\xAALUo\xD5՝\xAAm\xAAO\xD40j&jaj\xD9j\xFB\xD5.\xAB\x8Dϧ\xCFw\x9Eϝ_4\xFF\xE4\xFC\x87갺\x89z\xB8\xFAj\xF5\xC3\xEA=\xEA\x93\x9A\xBEU\x974\xC65\x9An\x9Aɚ\xE5\x9A\xE74ǴhZ\xB5Z\xE5Z\xE7\xB5^0\x95\x99\xEE\xCCTf%\xB3\x8B9\xA1\xAD\xAE\xED\xA7-\xD1>\xA4ݫ=\
xADc\xA8\xB3Xg\xA3N\xB3\xCE]\x92.[7A\xB7\\xB7SwBOK/X/_\xAFQ\xEF\xA1>Q\x9F\xAD\x9F\xA4\xBFG\xBF[\xCA\xC0\xD0 \xDA`\x8BA\x9B\xC1\xA8\xA1\x8A\xA1\xBFa\x9Ea\xA3\xE1c#\xAA\x91\xAB\xD1*\xA3Z\xA3;\xC68c\xB6q\x8A\xF1>\xE3[&\xB0\x89\x9DI\x92I\x8D\xC9MS\xD8\xD4\xDET`\xBAϴ\xCFk\xE6h&4\xAB5\xBBǢ\xB0\xDCYY\xACF֠9\xC3<\xC8|\xA3y\x9B\xF9+=\x8BX\x8B\x9D\xDD_,\xED,S-\xEB,Y)YXm\xB4\xEA\xB0\xFA\xC3\xDAĚk]c}džj\xE3c\xB3Φ\xDD浭\xA9-\xDFv\xBF\xED};\x9A]\xB0\xDD\xBBN\xBB\xCF\xF6\xF6"\xFB&\xFB1=\x87x\x87\xBD\xF7\xD8tv(\xBB\x84}\xD5\xEB\xE8\xE1\xB8\xCE\xF1\x8C\xE3'{'\xB1\xD3I\xA7ߝY\xCE)\xCE+Σ\xF0\xD4-r\xD1q\xE1\xB8r\x91.d.\x8C_xp\xA1\xD4Uە\xE3Z\xEB\xFA\xCCM\xE7v\xC4m\xC4\xDD\xD8=\xD9\xFD\xB8\xFB+K\x91G\x8Bǔ\xA7\x93\xE7\xCF^\x88\x97\xAFW\x91W\xAF\xB7\x92\xF7b\xEFj\xEF\xA7>:>\x89>\x8D>\xBEv\xBE\xAB}/\xF8a\xFD\xFDv\xFA\xDD\xF3\xD7\xF0\xE7\xFA\xD7\xFBO8\xAC \xE8
+\xA4FV>2 u\xC3\xC1\xC1\xBB\x82/\xD2_$\\xD4B\xFCCv\x85< 5]\xFAs.,4\xAC&\xECy\xB8Ux~xw-bEDCĻH\x8F\xC8\xD2\xC8G\x8B\x8DKwF\xC9G\xC5E\xD5GME{E\x97EK\x97X,Y\xB3\xE4F\x8CZ\x8C \xA6={$vr\xA9\xF7\xD2\xDDK\x87\xE3\xEC\xE2
+\xE3\xEE.3\\x96\xB3\xEC\xDAr\xB5\xE5\xA9\xCBϮ\x90_\xC1Yq*\xDF\xFF\x89©\xE5L\xAE\xF4_\xB9w\xE5ד\xBB\x87\xFB\x92\xE7\xC6+\xE7\x8D\xF1]\xF8e\xFC\x91\x97\x84\xB2\x84\xD1D\x97\xC4]\x89cI\xAEII\xE3OA\xB5\xE0u\xB2_\xF2\x81䩔\x90\x94\xA3)3\xA9ѩ\xCDi\x84\xB4\xF8\xB4\xD3B%a\x8A\xB0+]3='\xBD/\xC34\xA30C\xBA\xCAi\xD5\xEEU\xA2@ёL(sYf\xBB\x98\x8E\xFEL\xF5H\x8C$\x9B%\x83Y\xB3j\xB2\xDEgGe\x9F\xCAQ\xCC\xE6\xF4\xE4\x9A\xE4n\xCB\xC9\xF3\xC9\xFB~5f5wug\xBEv\xFE\x86\xFC\xC15\xEEk\xAD\x85֮\۹Nw]\xC1\xBA\xE1\xF5\xBE\xEB\x8Fm mH\xD9\xF0\xCBFˍe\xDFn\x8A\xDE\xD4Q\xA0Q\xB0\xBE`h\xB3\xEF\xE6\xC6B\xB9BQ\xE1\xBD-\xCE[l\xC5ll\xED\xDDf\xB3\xADjۗ"^\xD1\xF5b\xCB\xE2\x8A\xE2O%ܒ\xEB\xDFY}W\xF9\xDD\xCC\xF6\x84\x{DF65}\xF6\xA5\xFBw\xE0vw\xDC\xDD\xE9\xBA\xF3X\x99bY^\xD9Ю\xE0]\xAD\xE5\xCC\xF2\xA2\xF2\xB7\xBBW\xEC\xBEVa[q`i\x8Fd\x8F\xB42\xA8\xB2\xBDJ\xAFjGէ\xEA\xA4\xEA\x81\x8F\x9A\xE6\xBD\xEA{\xB7\xED\x9D\xDA\xC7\xDB\xDFm\xD3\x8D\xC5>\xBC\xC8\xF7Pk\xADAm\xC5a\xDC\xE1\xAC\x
C3\xCF\xEB\xA2꺿g_D\xEDH\xF1\x91\xCFG\x85G\xA5\xC7u\xD5;\xD4\xD77\xA87\x946\x92Ʊ\xE3q\xC7o\xFD\xE0\xF5C{\xAB\xE9P3\xA3\xB9\xF88!9\xF1\xE2\xC7\xF8\xEF\x9E<\xD9y\x8A}\xAA\xE9'\xFD\x9F\xF6\xB6\xD0Z\x8AZ\xA1\xD6\xDC։\xB6\xA46i{L{\xDF\xE9\x80ӝ\xCE-?\x9B\xFF|\xF4\x8C\x{1996B3}\xCAgKϑ\xCE\x9C\x9B9\x9Fw~\xF2Bƅ\xF1\x8B\x89\x87:Wt>\xBA\xB4\xE4ҝ\xAE\xB0\xAE\xDEˁ\x97\xAF^\xF1\xB9r\xA9۽\xFB\xFCU\x97\xABg\xAE9];}\x9D}\xBD\xED\x86\xFD\x8D\xD6\xBB\x9E\x96_\xEC~i\xE9\xB5\xEFm\xBD\xE9p\xB3\xFD\x96㭎\xBE}\xE7\xFA]\xFB/\xDE\xF6\xBA}\xE5\x8E\xFF\x9D\x8B\xFA\xEE.\xBE{\xFF^\xDC=\xE9}\xDE\xFD\xD1\xA9^?\xCCz8\xFDh\xFDc\xEC\xE3\xA2'
+O*\x9E\xAA?\xAD\xFD\xD5\xF8\xD7f\xA9\xBD\xF4\xEC\xA0\xD7`ϳ\x88g\x8F\x86\xB8C/\xFF\x95\xF9\xAFO\xC3ϩ\xCF+F\xB4F\xEAG\xADGό\xF9\x8C\xDDz\xB1\xF4\xC5\xF0ˌ\x97\xD3ㅿ)\xFE\xB6\xF7\x95ѫ\x9F~w\xFB\xBDgb\xC9\xC4\xF0k\xD1\xEB\x99?Jި\xBE9\xFA\xD6\xF6m\xE7d\xE8\xE4\xD3wi獵\x8Aޫ\xBE?\xF6\x81\xFD\xA1\xFBc\xF4Ǒ\xE9\xECO\xF8O\x95\x9F\x8D?w| \xFC\xF2x&mf\xE6\xDF\xF7\x84\xF3\xFB
+endstream
+endobj
+13 0 obj
+2612
+endobj
+7 0 obj
+[ /ICCBased 12 0 R ]
+endobj
+14 0 obj
+<< /Length 15 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >>
+stream
+x\x85U[\x88U\xFE\x939\xC9
+\xBB\xCE\xD3\xDA\xD5-\xA4C\xBDt)\xBBK\xB6ݥ\xB4\x9A[\x93\xB4k\xB2\xD9\xD5A\xB3\x93\x93d\xCC\xEC$\xCEL\xD2}*\x82⋫\xBEIA\xBC\xBD-\x82\xD2z\xC1\xD6\xFBR\xA9PVw\xEB"(>\xB4xA(\xF4E\xB7\xF1;\x93d&Yj\x9Be\xCF|\xF3\xFD\xDF\xF9o\xE7\x9F\xA2\x81\xB5B\xBD\xAE\xFB\xA2%\xC36sɨ\xF2\xDC\xD1c\xCA\xC0:\xF9\xE9!\xA4Q,\xA8V=\x92\xCD\xCE~B+\xAE\xFD\xBF[?\x90O0W'\xEEl\xEFWo\xB9,rK%\xF2\xDD\xBEV\xB4\xD4%\xE0D\x81\xB3jݴ\x89\x86\xC1O\xB7\xEB\x8B\x86M$\xFC\xA2\xC0\xE56\x86\x8D\x86\xDB\xF85G\x93\xCFŠ9,\xAB\x95Bxx|\xB1\x87/\xF7\xE0vP\xC0O\x92\xDC\xD4TE\xF4"k\xD6J\x9A\xCEC{\xB9\x87\xB9Gy7\xB8\xA47P\xB3\xF3ہuȪ\xCE\xC6u\xB5\xBFR,\xC4\x9E^Q\x899\xE0G\x80\xAF5\xB5\x85L߮\xDB\xD1\xF0cD\xFE\x9D\x8D\xEA|x7p\xAAd\x9C\x86\xBFYi\xA4\xBA\xF8\x9DS\x95\xFC\xB3ශ\xFF\xC6X\xCC\xE9\xEC]S\xADzI;\xC1߮\xF0\xB4\xE8o\x88HR4;\x9D\x86\xE9\x80Y\xCB =r\x90JEO\x8F\xBF^\xAD9\xC0\xA7\xF4\x99՜\xBC\xC8g\xEDT%&\xF2\xFC\xE5\x97
+\x87\xB2\xC0\xA3\xC0\xBFr=)\xF4\x88%\xFD[\xB7\xB3\x9DX\xC8\xD03".b\xB18\xB7\x9Czᇅ\xECJ>q\x99n\x9B\xF9\xCE^\xB6\\xD2\xA6;\xFAO*fJ\xF0bﵺ\xEE\xCC(r\xF8\xCDFNԎX\x81ɂ\x99H\xC3g ˍy\xD1O\x81\x9B\xB4\xE0+\xA7-bUɠMR(GI\x8A\xE2Z'\x96i\xA4\x83\xE1\xB0r0w]̈́\xB3Ϣ*x\x8D\x9A\x8E\xCDu\x94\xED\x9D]\xADBe\xB0]w\xB4*\xC5BQ\x9E*\xF4؊\xEBS\xA1\xEE\xE0\xCA\xFF㧝ˍ\x8E\x9Faa\xB6\xFF\xFB\xD8,\xDBϦ\xD9)\xEC)\xF64;\xC0\xE2`g\xD8>\xD7w{\xBA\x89|n J\xDB\xCFˈ\xC8\xDDj\xBF\x88m*`\xFD\x8AY\xAE\x87\xBE\xAE,\x8F6\xC6<\xCB\xF3M\xBD\xF2\xC6\xDF=\xBDҰ\xB3\xEA*&\xFA:z\xE4^=\xFC\xB8Xź\xD8p}(\x81\x9F\xF8[Go\xBCZj\x9E\xBD\xD3eqRN\xB4֧\xDBz]U\x95\xEA\xCE\xCE%tACͼ\xA7\xE6\x89^\x97N\xF9\xA0m\x95\x9D{\xFE\xEAХ\xD3%cy\xD4cE\xF8\xAB\x99[:3\xEE\xB1\xE1\xC3\x86W\xC3\xEF\x85?\xFF.\xBD-}*}%\x9D\x97>\x97.\x93"]\x90.J_K\xDFJK_\xB8\xFA\xBB͐{\xF6$2s%\xF2\xD3խ\xB0\xB7טX9*o\x97\x96\xE3\xF2\xF9Qy\xD6U)\xF2\x88<%\xA7\xE4]\xB0lw\xCF͛o\x
A5\xB7r\xF4\xE5(\xA2u\xFBs\xE7X\xE2Y\xD1\O8\xDF\xFD\x98͋\xD87\xF3\xC8X\xA3\xE3\xF0i\xA2\xDFb\xDE: m\xEF\x93ש\x88\x85\xD8Ko\x99\xEEi1\xF3]\xDF\xC1D0\x8C\x90\xDC\x9C N \xDC}\x96\x83\xBB`\x9B\xC1\x9A\xE8\xCD+\xF3\xE1*\xFA*\xE56?!\xBE'\xAB\xD5O\x9AZ\xB9b+{\xC2\xE1'\x95>}\I\xEA\xE4\xB8R\xD0u\xC51Y\x8A\xC9-n6yq\x92\xC4wS\xEC#\xBA\x99s\xBE\x87\xBEmW<\xCE~\x86h\xFF_x\xF7}\xEFq\xC7D+\xD1\xC8\xE37\x86w\xE5\xEF\x9D{Bm\x98Ͷ?\xF2\xF9\xBE#\xB2J{\xF78\xF7\xBE\xA1(\xDE_?\xB7Z7\xF1x\x8Bh\xF3\xCDV\xEB\x9F\xF7[\xAD\xCD\xE0\x83\xE8\x82\xFE\xA0\x9F|U
+endstream
+endobj
+15 0 obj
+1079
+endobj
+11 0 obj
+[ /ICCBased 14 0 R ]
+endobj
+3 0 obj
+<< /Type /Pages /MediaBox [0 0 18 26] /Count 1 /Kids [ 2 0 R ] >>
+endobj
+16 0 obj
+<< /Type /Catalog /Pages 3 0 R /Version /1.4 >>
+endobj
+17 0 obj
+(Mac OS X 10.12.5 Quartz PDFContext)
+endobj
+18 0 obj
+(D:20170710230806Z00'00')
+endobj
+1 0 obj
+<< /Producer 17 0 R /CreationDate 18 0 R /ModDate 18 0 R >>
+endobj
+xref
+0 19
+0000000000 65535 f
+0000005277 00000 n
+0000000443 00000 n
+0000005037 00000 n
+0000000022 00000 n
+0000000424 00000 n
+0000000545 00000 n
+0000003761 00000 n
+0000000639 00000 n
+0000000938 00000 n
+0000000956 00000 n
+0000005000 00000 n
+0000001025 00000 n
+0000003740 00000 n
+0000003797 00000 n
+0000004979 00000 n
+0000005118 00000 n
+0000005182 00000 n
+0000005235 00000 n
+trailer
+<< /Size 19 /Root 16 0 R /Info 1 0 R /ID [ <2ada6beae13a9d4654da044325b9e908>
+<2ada6beae13a9d4654da044325b9e908> ] >>
+startxref
+5352
+%%EOF