diff --git a/DEPS b/DEPS
index 41b948d..8541fba92 100644
--- a/DEPS
+++ b/DEPS
@@ -100,7 +100,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '4ab1cadef13b0f085cddfae744ba9c99421ea2cc',
+  'catapult_revision': 'f4ac632c50f310f3a863bd0342e70aca7420d669',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
diff --git a/android_webview/browser/aw_browser_context.cc b/android_webview/browser/aw_browser_context.cc
index 959d2b4d..d5252bd2 100644
--- a/android_webview/browser/aw_browser_context.cc
+++ b/android_webview/browser/aw_browser_context.cc
@@ -269,30 +269,6 @@
   visitedlink_master_->AddURLs(urls);
 }
 
-net::URLRequestContextGetter* AwBrowserContext::CreateRequestContext(
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  // This function cannot actually create the request context because
-  // there is a reentrant dependency on GetResourceContext() via
-  // content::StoragePartitionImplMap::Create(). This is not fixable
-  // until http://crbug.com/159193. Until then, assert that the context
-  // has already been allocated and just handle setting the protocol_handlers.
-  DCHECK(url_request_context_getter_.get());
-  url_request_context_getter_->SetHandlersAndInterceptors(
-      protocol_handlers, std::move(request_interceptors));
-  return url_request_context_getter_.get();
-}
-
-net::URLRequestContextGetter*
-AwBrowserContext::CreateRequestContextForStoragePartition(
-    const base::FilePath& partition_path,
-    bool in_memory,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  NOTREACHED();
-  return NULL;
-}
-
 AwQuotaManagerBridge* AwBrowserContext::GetQuotaManagerBridge() {
   if (!quota_manager_bridge_.get()) {
     quota_manager_bridge_ = native_factory_->CreateAwQuotaManagerBridge(this);
@@ -439,6 +415,30 @@
   return nullptr;
 }
 
+net::URLRequestContextGetter* AwBrowserContext::CreateRequestContext(
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  // This function cannot actually create the request context because
+  // there is a reentrant dependency on GetResourceContext() via
+  // content::StoragePartitionImplMap::Create(). This is not fixable
+  // until http://crbug.com/159193. Until then, assert that the context
+  // has already been allocated and just handle setting the protocol_handlers.
+  DCHECK(url_request_context_getter_.get());
+  url_request_context_getter_->SetHandlersAndInterceptors(
+      protocol_handlers, std::move(request_interceptors));
+  return url_request_context_getter_.get();
+}
+
+net::URLRequestContextGetter*
+AwBrowserContext::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  NOTREACHED();
+  return NULL;
+}
+
 policy::URLBlacklistManager* AwBrowserContext::GetURLBlacklistManager() {
   // Should not be called until the end of PreMainMessageLoopRun, where
   // blacklist_manager_ is initialized.
diff --git a/android_webview/browser/aw_browser_context.h b/android_webview/browser/aw_browser_context.h
index 2db1831..bd6418f1 100644
--- a/android_webview/browser/aw_browser_context.h
+++ b/android_webview/browser/aw_browser_context.h
@@ -86,15 +86,6 @@
   // These methods map to Add methods in visitedlink::VisitedLinkMaster.
   void AddVisitedURLs(const std::vector<GURL>& urls);
 
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors);
-  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      const base::FilePath& partition_path,
-      bool in_memory,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors);
-
   AwQuotaManagerBridge* GetQuotaManagerBridge();
   AwFormDatabaseService* GetFormDatabaseService();
   data_reduction_proxy::DataReductionProxySettings*
@@ -126,6 +117,14 @@
   content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   content::PermissionManager* GetPermissionManager() override;
   content::BackgroundSyncController* GetBackgroundSyncController() override;
+  net::URLRequestContextGetter* CreateRequestContext(
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
   // visitedlink::VisitedLinkDelegate implementation.
   void RebuildTable(const scoped_refptr<URLEnumerator>& enumerator) override;
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 5ce8414f6..c6954077 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -232,30 +232,6 @@
   host->AddFilter(new AwPrintingMessageFilter(host->GetID()));
 }
 
-net::URLRequestContextGetter* AwContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  DCHECK_EQ(browser_context_.get(), browser_context);
-  return browser_context_->CreateRequestContext(
-      protocol_handlers, std::move(request_interceptors));
-}
-
-net::URLRequestContextGetter*
-AwContentBrowserClient::CreateRequestContextForStoragePartition(
-    content::BrowserContext* browser_context,
-    const base::FilePath& partition_path,
-    bool in_memory,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  DCHECK_EQ(browser_context_.get(), browser_context);
-  // TODO(mkosiba,kinuko): request_interceptors should be hooked up in the
-  // downstream. (crbug.com/350286)
-  return browser_context_->CreateRequestContextForStoragePartition(
-      partition_path, in_memory, protocol_handlers,
-      std::move(request_interceptors));
-}
-
 bool AwContentBrowserClient::IsHandledURL(const GURL& url) {
   if (!url.is_valid()) {
     // We handle error cases.
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h
index 7be439e..414de96 100644
--- a/android_webview/browser/aw_content_browser_client.h
+++ b/android_webview/browser/aw_content_browser_client.h
@@ -41,16 +41,6 @@
   content::WebContentsViewDelegate* GetWebContentsViewDelegate(
       content::WebContents* web_contents) override;
   void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
-  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      content::BrowserContext* browser_context,
-      const base::FilePath& partition_path,
-      bool in_memory,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   bool IsHandledURL(const GURL& url) override;
   std::string GetCanonicalEncodingNameByAliasName(
       const std::string& alias_name) override;
diff --git a/android_webview/browser/aw_render_thread_context_provider.cc b/android_webview/browser/aw_render_thread_context_provider.cc
index e89b78a..6a28b82 100644
--- a/android_webview/browser/aw_render_thread_context_provider.cc
+++ b/android_webview/browser/aw_render_thread_context_provider.cc
@@ -52,9 +52,9 @@
   attributes.bind_generates_resource = false;
   context_.reset(gpu::GLInProcessContext::Create(
       service, surface, surface->IsOffscreen(), gfx::kNullAcceleratedWidget,
-      surface->GetSize(), nullptr /* share_context */,
-      false /* share_resources */, attributes, gfx::PreferDiscreteGpu,
-      gpu::GLInProcessContextSharedMemoryLimits(), nullptr, nullptr));
+      surface->GetSize(), nullptr /* share_context */, attributes,
+      gfx::PreferDiscreteGpu, gpu::GLInProcessContextSharedMemoryLimits(),
+      nullptr, nullptr));
 
   context_->SetContextLostCallback(base::Bind(
       &AwRenderThreadContextProvider::OnLostContext, base::Unretained(this)));
@@ -116,11 +116,14 @@
 }
 
 void AwRenderThreadContextProvider::SetupLock() {
-  context_->SetLock(&context_lock_);
+  // This context provider is not used on multiple threads.
+  NOTREACHED();
 }
 
 base::Lock* AwRenderThreadContextProvider::GetLock() {
-  return &context_lock_;
+  // This context provider is not used on multiple threads.
+  NOTREACHED();
+  return nullptr;
 }
 
 void AwRenderThreadContextProvider::DeleteCachedResources() {
diff --git a/android_webview/browser/aw_render_thread_context_provider.h b/android_webview/browser/aw_render_thread_context_provider.h
index f9df881..dcf5ca4 100644
--- a/android_webview/browser/aw_render_thread_context_provider.h
+++ b/android_webview/browser/aw_render_thread_context_provider.h
@@ -10,7 +10,6 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "base/synchronization/lock.h"
 #include "base/threading/thread_checker.h"
 #include "cc/output/context_provider.h"
 #include "gpu/command_buffer/service/in_process_command_buffer.h"
@@ -63,8 +62,6 @@
 
   LostContextCallback lost_context_callback_;
 
-  base::Lock context_lock_;
-
   DISALLOW_COPY_AND_ASSIGN(AwRenderThreadContextProvider);
 };
 
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index 5c292e4..9f91213d 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -25,6 +25,7 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkPicture.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
+#include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/scroll_offset.h"
 #include "ui/gfx/geometry/vector2d_conversions.h"
 
@@ -404,10 +405,11 @@
   UpdateCompositorIsActive();
 }
 
-void BrowserViewRenderer::SynchronizeRendererScroll() {
+void BrowserViewRenderer::ZoomBy(float delta) {
   if (!compositor_)
     return;
-  compositor_->SynchronizeWithRenderer();
+  compositor_->SynchronouslyZoomBy(
+      delta, gfx::Point(size_.width() / 2, size_.height() / 2));
 }
 
 void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) {
diff --git a/android_webview/browser/browser_view_renderer.h b/android_webview/browser/browser_view_renderer.h
index baf76c2..fe6cad7 100644
--- a/android_webview/browser/browser_view_renderer.h
+++ b/android_webview/browser/browser_view_renderer.h
@@ -82,7 +82,7 @@
   void OnSizeChanged(int width, int height);
   void OnAttachedToWindow(int width, int height);
   void OnDetachedFromWindow();
-  void SynchronizeRendererScroll();
+  void ZoomBy(float delta);
   void OnComputeScroll(base::TimeTicks animation_time);
 
   // Sets the scale for logical<->physical pixel conversions.
diff --git a/android_webview/browser/net/aw_url_request_context_getter.h b/android_webview/browser/net/aw_url_request_context_getter.h
index 64ac984..daa5147 100644
--- a/android_webview/browser/net/aw_url_request_context_getter.h
+++ b/android_webview/browser/net/aw_url_request_context_getter.h
@@ -11,6 +11,7 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "components/prefs/pref_member.h"
+#include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_job_factory.h"
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 657f1f81..0ea766ef 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -2104,8 +2104,7 @@
         if (delta < 0.01f || delta > 100.0f) {
             throw new IllegalStateException("zoom delta value outside [0.01, 100] range.");
         }
-        mContentViewCore.pinchByDelta(delta);
-        nativeSynchronizeRendererScroll(mNativeAwContents);
+        nativeZoomBy(mNativeAwContents, delta);
     }
 
     /**
@@ -3239,7 +3238,7 @@
             long nativeAwContents, String path, ValueCallback<String> callback);
 
     private native void nativeAddVisitedLinks(long nativeAwContents, String[] visitedLinks);
-    private native void nativeSynchronizeRendererScroll(long nativeAwContents);
+    private native void nativeZoomBy(long nativeAwContents, float delta);
     private native void nativeOnComputeScroll(
             long nativeAwContents, long currentAnimationTimeMillis);
     private native boolean nativeOnDraw(long nativeAwContents, Canvas canvas,
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 35fca8b..1f41bb6 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -1016,11 +1016,11 @@
   render_view_host_ext_->SetBackgroundColor(color);
 }
 
-void AwContents::SynchronizeRendererScroll(
-    JNIEnv* env,
-    const base::android::JavaParamRef<jobject>& obj) {
+void AwContents::ZoomBy(JNIEnv* env,
+                        const base::android::JavaParamRef<jobject>& obj,
+                        jfloat delta) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  browser_view_renderer_.SynchronizeRendererScroll();
+  browser_view_renderer_.ZoomBy(delta);
 }
 
 void AwContents::OnComputeScroll(JNIEnv* env,
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index 75e07e7..bb3469fd 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -164,9 +164,9 @@
   void SetBackgroundColor(JNIEnv* env,
                           const base::android::JavaParamRef<jobject>& obj,
                           jint color);
-  void SynchronizeRendererScroll(
-      JNIEnv* env,
-      const base::android::JavaParamRef<jobject>& obj);
+  void ZoomBy(JNIEnv* env,
+              const base::android::JavaParamRef<jobject>& obj,
+              jfloat delta);
   void OnComputeScroll(JNIEnv* env,
                        const base::android::JavaParamRef<jobject>& obj,
                        jlong animation_time_millis);
diff --git a/ash/ash.gyp b/ash/ash.gyp
index fee27ca..af7a2426 100644
--- a/ash/ash.gyp
+++ b/ash/ash.gyp
@@ -74,10 +74,6 @@
       'display/display_error_observer_chromeos.h',
       'display/display_info.cc',
       'display/display_info.h',
-      'display/display_layout.cc',
-      'display/display_layout.h',
-      'display/display_layout_builder.cc',
-      'display/display_layout_builder.h',
       'display/display_layout_store.cc',
       'display/display_layout_store.h',
       'display/display_manager.cc',
@@ -829,7 +825,6 @@
       'display/display_color_manager_chromeos_unittest.cc',
       'display/display_error_observer_chromeos_unittest.cc',
       'display/display_info_unittest.cc',
-      'display/display_layout_builder_unittest.cc',
       'display/display_manager_unittest.cc',
       'display/display_util_unittest.cc',
       'display/extended_mouse_warp_controller_unittest.cc',
@@ -978,6 +973,7 @@
         '../ui/base/ui_base.gyp:ui_base',
         '../ui/base/ui_base.gyp:ui_data_pack',
         '../ui/compositor/compositor.gyp:compositor',
+        '../ui/display/display.gyp:display',
         '../ui/events/devices/events_devices.gyp:events_devices',
         '../ui/events/events.gyp:events',
         '../ui/events/events.gyp:events_base',
@@ -1038,7 +1034,6 @@
             '../ui/chromeos/ui_chromeos.gyp:ui_chromeos_resources',
             '../ui/chromeos/ui_chromeos.gyp:ui_chromeos_strings',
             '../ui/chromeos/ui_chromeos.gyp:ui_chromeos',
-            '../ui/display/display.gyp:display',
             '../ui/display/display.gyp:display_util',
           ],
         }, { # else: chromeos!=1
@@ -1176,6 +1171,7 @@
         '../ui/base/ui_base.gyp:ui_base_test_support',
         '../ui/compositor/compositor.gyp:compositor',
         '../ui/compositor/compositor.gyp:compositor_test_support',
+        '../ui/display/display.gyp:display',
         '../ui/events/devices/events_devices.gyp:events_devices',
         '../ui/events/events.gyp:events',
         '../ui/events/events.gyp:events_test_support',
@@ -1237,7 +1233,6 @@
             '../chromeos/chromeos.gyp:power_manager_proto',
             '../components/components.gyp:quirks',
             '../device/bluetooth/bluetooth.gyp:device_bluetooth',
-            '../ui/display/display.gyp:display',
             '../ui/display/display.gyp:display_test_support',
             '../ui/display/display.gyp:display_test_util',
             '../ui/display/display.gyp:display_types',
diff --git a/ash/display/display_change_observer_chromeos.cc b/ash/display/display_change_observer_chromeos.cc
index 23f3665..8e92ff0 100644
--- a/ash/display/display_change_observer_chromeos.cc
+++ b/ash/display/display_change_observer_chromeos.cc
@@ -24,6 +24,7 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/user_activity/user_activity_detector.h"
 #include "ui/compositor/dip_util.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/display/types/display_mode.h"
 #include "ui/display/types/display_snapshot.h"
 #include "ui/display/util/display_util.h"
@@ -156,16 +157,16 @@
   UpdateInternalDisplayId(display_states);
   if (display_states.size() == 1)
     return ui::MULTIPLE_DISPLAY_STATE_SINGLE;
-  DisplayIdList list =
+  display::DisplayIdList list =
       GenerateDisplayIdList(display_states.begin(), display_states.end(),
                             [](const ui::DisplaySnapshot* display_state) {
                               return display_state->display_id();
                             });
 
-  const DisplayLayout& layout = Shell::GetInstance()
-                                    ->display_manager()
-                                    ->layout_store()
-                                    ->GetRegisteredDisplayLayout(list);
+  const display::DisplayLayout& layout = Shell::GetInstance()
+                                             ->display_manager()
+                                             ->layout_store()
+                                             ->GetRegisteredDisplayLayout(list);
   return layout.mirrored ? ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR :
                            ui::MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED;
 }
diff --git a/ash/display/display_configuration_controller.cc b/ash/display/display_configuration_controller.cc
index 9fdf8bea..3110858b 100644
--- a/ash/display/display_configuration_controller.cc
+++ b/ash/display/display_configuration_controller.cc
@@ -5,11 +5,11 @@
 #include "ash/display/display_configuration_controller.h"
 
 #include "ash/display/display_animator.h"
-#include "ash/display/display_layout.h"
 #include "ash/display/display_manager.h"
 #include "ash/rotator/screen_rotation_animator.h"
 #include "ash/screen_util.h"
 #include "base/time/time.h"
+#include "ui/display/manager/display_layout.h"
 
 #if defined(OS_CHROMEOS)
 #include "ash/display/display_animator_chromeos.h"
@@ -68,7 +68,7 @@
 }
 
 void DisplayConfigurationController::SetDisplayLayout(
-    scoped_ptr<DisplayLayout> layout,
+    scoped_ptr<display::DisplayLayout> layout,
     bool user_action) {
   if (user_action && display_animator_) {
     display_animator_->StartFadeOutAnimation(
@@ -147,7 +147,7 @@
 }
 
 void DisplayConfigurationController::SetDisplayLayoutImpl(
-    scoped_ptr<DisplayLayout> layout) {
+    scoped_ptr<display::DisplayLayout> layout) {
   // TODO(oshima/stevenjb): Add support for 3+ displays.
   display_manager_->SetLayoutForCurrentDisplays(std::move(layout));
   if (display_animator_)
diff --git a/ash/display/display_configuration_controller.h b/ash/display/display_configuration_controller.h
index 2c3f5b1..2256b6db 100644
--- a/ash/display/display_configuration_controller.h
+++ b/ash/display/display_configuration_controller.h
@@ -17,6 +17,10 @@
 #include "base/memory/weak_ptr.h"
 #include "ui/gfx/display.h"
 
+namespace display {
+class DisplayLayout;
+}
+
 namespace ash {
 
 namespace test {
@@ -25,7 +29,6 @@
 
 class DisplayAnimator;
 class DisplayManager;
-class DisplayLayout;
 
 class ASH_EXPORT DisplayConfigurationController
     : public WindowTreeHostManager::Observer {
@@ -38,7 +41,8 @@
   // Sets the layout for the current displays with a fade in/out
   // animation. Currently |display_id| is assumed to be the secondary
   // display.  TODO(oshima/stevenjb): Support 3+ displays.
-  void SetDisplayLayout(scoped_ptr<DisplayLayout> layout, bool user_action);
+  void SetDisplayLayout(scoped_ptr<display::DisplayLayout> layout,
+                        bool user_action);
 
   // Sets the mirror mode with a fade-in/fade-out animation. Affects all
   // displays.
@@ -69,7 +73,7 @@
   // *before* starting any animations.
   void SetThrottleTimeout(int64_t throttle_ms);
   bool IsLimited();
-  void SetDisplayLayoutImpl(scoped_ptr<DisplayLayout> layout);
+  void SetDisplayLayoutImpl(scoped_ptr<display::DisplayLayout> layout);
   void SetMirrorModeImpl(bool mirror);
   void SetPrimaryDisplayIdImpl(int64_t display_id);
 
diff --git a/ash/display/display_layout_store.cc b/ash/display/display_layout_store.cc
index 5ede80b..7b074e00 100644
--- a/ash/display/display_layout_store.cc
+++ b/ash/display/display_layout_store.cc
@@ -16,7 +16,7 @@
 namespace ash {
 
 DisplayLayoutStore::DisplayLayoutStore()
-    : default_display_placement_(DisplayPlacement::RIGHT, 0) {
+    : default_display_placement_(display::DisplayPlacement::RIGHT, 0) {
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   if (command_line->HasSwitch(switches::kAshSecondaryDisplayLayout)) {
     std::string value = command_line->GetSwitchValueASCII(
@@ -25,13 +25,13 @@
     int offset = 0;
     if (sscanf(value.c_str(), "%c,%d", &layout, &offset) == 2) {
       if (layout == 't')
-        default_display_placement_.position = DisplayPlacement::TOP;
+        default_display_placement_.position = display::DisplayPlacement::TOP;
       else if (layout == 'b')
-        default_display_placement_.position = DisplayPlacement::BOTTOM;
+        default_display_placement_.position = display::DisplayPlacement::BOTTOM;
       else if (layout == 'r')
-        default_display_placement_.position = DisplayPlacement::RIGHT;
+        default_display_placement_.position = display::DisplayPlacement::RIGHT;
       else if (layout == 'l')
-        default_display_placement_.position = DisplayPlacement::LEFT;
+        default_display_placement_.position = display::DisplayPlacement::LEFT;
       default_display_placement_.offset = offset;
     }
   }
@@ -41,15 +41,15 @@
 }
 
 void DisplayLayoutStore::SetDefaultDisplayPlacement(
-    const DisplayPlacement& placement) {
+    const display::DisplayPlacement& placement) {
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   if (!command_line->HasSwitch(switches::kAshSecondaryDisplayLayout))
     default_display_placement_ = placement;
 }
 
 void DisplayLayoutStore::RegisterLayoutForDisplayIdList(
-    const DisplayIdList& list,
-    scoped_ptr<DisplayLayout> layout) {
+    const display::DisplayIdList& list,
+    scoped_ptr<display::DisplayLayout> layout) {
   // m50/51 dev/beta channel may have bad layout data saved in local state.
   // TODO(oshima): Consider removing this after m53.
   if (list.size() == 2 && layout->placement_list.size() > 1)
@@ -71,27 +71,28 @@
       layout->placement_list[0].parent_display_id = list[0];
     }
   }
-  DCHECK(DisplayLayout::Validate(list, *layout.get()))
+  DCHECK(display::DisplayLayout::Validate(list, *layout.get()))
       << "ids=" << DisplayIdListToString(list)
       << ", layout=" << layout->ToString();
   layouts_[list] = std::move(layout);
 }
 
-const DisplayLayout& DisplayLayoutStore::GetRegisteredDisplayLayout(
-    const DisplayIdList& list) {
+const display::DisplayLayout& DisplayLayoutStore::GetRegisteredDisplayLayout(
+    const display::DisplayIdList& list) {
   DCHECK_NE(1u, list.size());
   const auto iter = layouts_.find(list);
-  const DisplayLayout* layout = iter != layouts_.end()
-                                    ? iter->second.get()
-                                    : CreateDefaultDisplayLayout(list);
-  DCHECK(DisplayLayout::Validate(list, *layout)) << layout->ToString();
+  const display::DisplayLayout* layout = iter != layouts_.end()
+                                             ? iter->second.get()
+                                             : CreateDefaultDisplayLayout(list);
+  DCHECK(display::DisplayLayout::Validate(list, *layout)) << layout->ToString();
   DCHECK_NE(layout->primary_id, gfx::Display::kInvalidDisplayID);
   return *layout;
 }
 
-void DisplayLayoutStore::UpdateMultiDisplayState(const DisplayIdList& list,
-                                                 bool mirrored,
-                                                 bool default_unified) {
+void DisplayLayoutStore::UpdateMultiDisplayState(
+    const display::DisplayIdList& list,
+    bool mirrored,
+    bool default_unified) {
   DCHECK(layouts_.find(list) != layouts_.end());
   if (layouts_.find(list) == layouts_.end())
     CreateDefaultDisplayLayout(list);
@@ -100,14 +101,14 @@
   layouts_[list]->default_unified = default_unified;
 }
 
-DisplayLayout* DisplayLayoutStore::CreateDefaultDisplayLayout(
-    const DisplayIdList& list) {
-  scoped_ptr<DisplayLayout> layout(new DisplayLayout);
+display::DisplayLayout* DisplayLayoutStore::CreateDefaultDisplayLayout(
+    const display::DisplayIdList& list) {
+  scoped_ptr<display::DisplayLayout> layout(new display::DisplayLayout);
   // The first display is the primary by default.
   layout->primary_id = list[0];
   layout->placement_list.clear();
   for (size_t i = 0; i < list.size() - 1; i++) {
-    DisplayPlacement placement(default_display_placement_);
+    display::DisplayPlacement placement(default_display_placement_);
     placement.display_id = list[i + 1];
     placement.parent_display_id = list[i];
     layout->placement_list.push_back(placement);
diff --git a/ash/display/display_layout_store.h b/ash/display/display_layout_store.h
index 6dd7b8a..ab93ca1b 100644
--- a/ash/display/display_layout_store.h
+++ b/ash/display/display_layout_store.h
@@ -10,9 +10,9 @@
 #include <map>
 
 #include "ash/ash_export.h"
-#include "ash/display/display_layout.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
+#include "ui/display/manager/display_layout.h"
 
 namespace ash {
 
@@ -21,32 +21,35 @@
   DisplayLayoutStore();
   ~DisplayLayoutStore();
 
-  void SetDefaultDisplayPlacement(const DisplayPlacement& placement);
+  void SetDefaultDisplayPlacement(const display::DisplayPlacement& placement);
 
   // Registeres the display layout info for the specified display(s).
-  void RegisterLayoutForDisplayIdList(const DisplayIdList& list,
-                                      scoped_ptr<DisplayLayout> layout);
+  void RegisterLayoutForDisplayIdList(
+      const display::DisplayIdList& list,
+      scoped_ptr<display::DisplayLayout> layout);
 
   // If no layout is registered, it creatas new layout using
   // |default_display_layout_|.
-  const DisplayLayout& GetRegisteredDisplayLayout(const DisplayIdList& list);
+  const display::DisplayLayout& GetRegisteredDisplayLayout(
+      const display::DisplayIdList& list);
 
   // Update the multi display state in the display layout for
   // |display_list|.  This creates new display layout if no layout is
   // registered for |display_list|.
-  void UpdateMultiDisplayState(const DisplayIdList& display_list,
+  void UpdateMultiDisplayState(const display::DisplayIdList& display_list,
                                bool mirrored,
                                bool default_unified);
 
  private:
   // Creates new layout for display list from |default_display_layout_|.
-  DisplayLayout* CreateDefaultDisplayLayout(const DisplayIdList& display_list);
+  display::DisplayLayout* CreateDefaultDisplayLayout(
+      const display::DisplayIdList& display_list);
 
   // The default display placement.
-  DisplayPlacement default_display_placement_;
+  display::DisplayPlacement default_display_placement_;
 
   // Display layout per list of devices.
-  std::map<DisplayIdList, scoped_ptr<DisplayLayout>> layouts_;
+  std::map<display::DisplayIdList, scoped_ptr<display::DisplayLayout>> layouts_;
 
   DISALLOW_COPY_AND_ASSIGN(DisplayLayoutStore);
 };
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
index 1b79b9de..6ec4e4f 100644
--- a/ash/display/display_manager.cc
+++ b/ash/display/display_manager.cc
@@ -52,7 +52,6 @@
 #endif
 
 namespace ash {
-typedef std::vector<gfx::Display> DisplayList;
 typedef std::vector<DisplayInfo> DisplayInfoList;
 
 namespace {
@@ -118,7 +117,7 @@
   return size;
 }
 
-gfx::Display* FindDisplayById(DisplayList* display_list, int64_t id) {
+gfx::Display* FindDisplayById(display::DisplayList* display_list, int64_t id) {
   auto iter = std::find_if(
       display_list->begin(), display_list->end(),
       [id](const gfx::Display& display) { return display.id() == id; });
@@ -211,20 +210,20 @@
 #endif  // OS_CHROMEOS
 }
 
-const DisplayLayout& DisplayManager::GetCurrentDisplayLayout() const {
+const display::DisplayLayout& DisplayManager::GetCurrentDisplayLayout() const {
   DCHECK_LE(2U, num_connected_displays());
   if (num_connected_displays() > 1) {
-    DisplayIdList list = GetCurrentDisplayIdList();
+    display::DisplayIdList list = GetCurrentDisplayIdList();
     return layout_store_->GetRegisteredDisplayLayout(list);
   }
   LOG(ERROR) << "DisplayLayout is requested for single display";
   // On release build, just fallback to default instead of blowing up.
-  static DisplayLayout layout;
+  static display::DisplayLayout layout;
   layout.primary_id = active_display_list_[0].id();
   return layout;
 }
 
-DisplayIdList DisplayManager::GetCurrentDisplayIdList() const {
+display::DisplayIdList DisplayManager::GetCurrentDisplayIdList() const {
   if (IsInUnifiedMode()) {
     return CreateDisplayIdList(software_mirroring_display_list_);
   } else if (IsInMirrorMode()) {
@@ -243,14 +242,14 @@
 }
 
 void DisplayManager::SetLayoutForCurrentDisplays(
-    scoped_ptr<DisplayLayout> layout) {
+    scoped_ptr<display::DisplayLayout> layout) {
   if (GetNumDisplays() == 1)
     return;
-  const DisplayIdList list = GetCurrentDisplayIdList();
+  const display::DisplayIdList list = GetCurrentDisplayIdList();
 
-  DCHECK(DisplayLayout::Validate(list, *layout));
+  DCHECK(display::DisplayLayout::Validate(list, *layout));
 
-  const DisplayLayout& current_layout =
+  const display::DisplayLayout& current_layout =
       layout_store_->GetRegisteredDisplayLayout(list);
 
   if (layout->HasSamePlacementList(current_layout))
@@ -614,11 +613,11 @@
 #if defined(OS_CHROMEOS)
   if (!base::SysInfo::IsRunningOnChromeOS() &&
       new_display_info_list.size() > 1) {
-    DisplayIdList list = GenerateDisplayIdList(
+    display::DisplayIdList list = GenerateDisplayIdList(
         new_display_info_list.begin(), new_display_info_list.end(),
         [](const DisplayInfo& info) { return info.id(); });
 
-    const DisplayLayout& layout =
+    const display::DisplayLayout& layout =
         layout_store_->GetRegisteredDisplayLayout(list);
     // Mirror mode is set by DisplayConfigurator on the device.
     // Emulate it when running on linux desktop.
@@ -654,10 +653,10 @@
             DisplayInfoSortFunctor());
 
   if (new_display_info_list.size() > 1) {
-    DisplayIdList list = GenerateDisplayIdList(
+    display::DisplayIdList list = GenerateDisplayIdList(
         new_display_info_list.begin(), new_display_info_list.end(),
         [](const DisplayInfo& info) { return info.id(); });
-    const DisplayLayout& layout =
+    const display::DisplayLayout& layout =
         layout_store_->GetRegisteredDisplayLayout(list);
     current_default_multi_display_mode_ =
         (layout.default_unified && unified_desktop_enabled_) ? UNIFIED
@@ -674,12 +673,12 @@
   if (delegate_)
     delegate_->CloseMirroringDisplayIfNotNecessary();
 
-  DisplayList new_displays;
-  DisplayList removed_displays;
+  display::DisplayList new_displays;
+  display::DisplayList removed_displays;
   std::map<size_t, uint32_t> display_changes;
   std::vector<size_t> added_display_indices;
 
-  DisplayList::iterator curr_iter = active_display_list_.begin();
+  display::DisplayList::iterator curr_iter = active_display_list_.begin();
   DisplayInfoList::const_iterator new_info_iter = new_display_info_list.begin();
 
   while (curr_iter != active_display_list_.end() ||
@@ -854,7 +853,7 @@
 const gfx::Display& DisplayManager::GetPrimaryDisplayCandidate() const {
   if (GetNumDisplays() != 2)
     return active_display_list_[0];
-  const DisplayLayout& layout =
+  const display::DisplayLayout& layout =
       layout_store_->GetRegisteredDisplayLayout(GetCurrentDisplayIdList());
   return GetDisplayForId(layout.primary_id);
 }
@@ -971,7 +970,7 @@
 void DisplayManager::ToggleDisplayScaleFactor() {
   DCHECK(!active_display_list_.empty());
   std::vector<DisplayInfo> new_display_info_list;
-  for (DisplayList::const_iterator iter = active_display_list_.begin();
+  for (display::DisplayList::const_iterator iter = active_display_list_.begin();
        iter != active_display_list_.end(); ++iter) {
     DisplayInfo display_info = GetDisplayInfo(iter->id());
     display_info.set_device_scale_factor(
@@ -996,7 +995,7 @@
 void DisplayManager::SetDefaultMultiDisplayModeForCurrentDisplays(
     MultiDisplayMode mode) {
   DCHECK_NE(MIRRORING, mode);
-  DisplayIdList list = GetCurrentDisplayIdList();
+  display::DisplayIdList list = GetCurrentDisplayIdList();
   layout_store_->UpdateMultiDisplayState(list, IsInMirrorMode(),
                                          mode == UNIFIED);
   ReconfigureDisplays();
@@ -1221,8 +1220,10 @@
 
 void DisplayManager::AddMirrorDisplayInfoIfAny(
     std::vector<DisplayInfo>* display_info_list) {
-  if (software_mirroring_enabled() && IsInMirrorMode())
+  if (software_mirroring_enabled() && IsInMirrorMode()) {
     display_info_list->push_back(GetDisplayInfo(mirroring_display_id_));
+    software_mirroring_display_list_.clear();
+  }
 }
 
 void DisplayManager::InsertAndUpdateDisplayInfo(const DisplayInfo& new_info) {
@@ -1282,13 +1283,14 @@
 }
 
 void DisplayManager::UpdateNonPrimaryDisplayBoundsForLayout(
-    DisplayList* display_list,
+    display::DisplayList* display_list,
     std::vector<size_t>* updated_indices) {
   if (display_list->size() == 1u)
     return;
 
-  const DisplayLayout& layout = layout_store_->GetRegisteredDisplayLayout(
-      CreateDisplayIdList(*display_list));
+  const display::DisplayLayout& layout =
+      layout_store_->GetRegisteredDisplayLayout(
+          CreateDisplayIdList(*display_list));
 
   // Ignore if a user has a old format (should be extremely rare)
   // and this will be replaced with DCHECK.
@@ -1317,8 +1319,8 @@
   delegate_->CreateOrUpdateMirroringDisplay(list);
 }
 
-void DisplayManager::ApplyDisplayLayout(const DisplayLayout& layout,
-                                        DisplayList* display_list,
+void DisplayManager::ApplyDisplayLayout(const display::DisplayLayout& layout,
+                                        display::DisplayList* display_list,
                                         std::vector<int64_t>* updated_ids) {
   // Layout from primary, then dependent displays.
   std::set<int64_t> parents;
@@ -1326,7 +1328,7 @@
   while (parents.size()) {
     int64_t parent_id = *parents.begin();
     parents.erase(parent_id);
-    for (const DisplayPlacement& placement : layout.placement_list) {
+    for (const display::DisplayPlacement& placement : layout.placement_list) {
       if (placement.parent_display_id == parent_id) {
         if (ApplyDisplayPlacement(placement, display_list) && updated_ids)
           updated_ids->push_back(placement.display_id);
@@ -1336,8 +1338,9 @@
   }
 }
 
-bool DisplayManager::ApplyDisplayPlacement(const DisplayPlacement& placement,
-                                           DisplayList* display_list) {
+bool DisplayManager::ApplyDisplayPlacement(
+    const display::DisplayPlacement& placement,
+    display::DisplayList* display_list) {
   const gfx::Display& parent_display =
       *FindDisplayById(display_list, placement.parent_display_id);
   DCHECK(parent_display.is_valid());
@@ -1349,13 +1352,13 @@
   const gfx::Rect& target_bounds = target_display->bounds();
   gfx::Point new_target_origin = parent_bounds.origin();
 
-  DisplayPlacement::Position position = placement.position;
+  display::DisplayPlacement::Position position = placement.position;
 
   // Ignore the offset in case the target display doesn't share edges with
   // the parent display.
   int offset = placement.offset;
-  if (position == DisplayPlacement::TOP ||
-      position == DisplayPlacement::BOTTOM) {
+  if (position == display::DisplayPlacement::TOP ||
+      position == display::DisplayPlacement::BOTTOM) {
     offset = std::min(
         offset, parent_bounds.width() - kMinimumOverlapForInvalidOffset);
     offset = std::max(
@@ -1367,16 +1370,16 @@
         offset, -target_bounds.height() + kMinimumOverlapForInvalidOffset);
   }
   switch (position) {
-    case DisplayPlacement::TOP:
+    case display::DisplayPlacement::TOP:
       new_target_origin.Offset(offset, -target_bounds.height());
       break;
-    case DisplayPlacement::RIGHT:
+    case display::DisplayPlacement::RIGHT:
       new_target_origin.Offset(parent_bounds.width(), offset);
       break;
-    case DisplayPlacement::BOTTOM:
+    case display::DisplayPlacement::BOTTOM:
       new_target_origin.Offset(offset, parent_bounds.height());
       break;
-    case DisplayPlacement::LEFT:
+    case display::DisplayPlacement::LEFT:
       new_target_origin.Offset(-target_bounds.width(), offset);
       break;
   }
diff --git a/ash/display/display_manager.h b/ash/display/display_manager.h
index 6a437bc2..1ef1ea4 100644
--- a/ash/display/display_manager.h
+++ b/ash/display/display_manager.h
@@ -13,12 +13,12 @@
 
 #include "ash/ash_export.h"
 #include "ash/display/display_info.h"
-#include "ash/display/display_layout.h"
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/display.h"
 
 #if defined(OS_CHROMEOS)
@@ -131,14 +131,14 @@
   void RefreshFontParams();
 
   // Returns the display layout used for current displays.
-  const DisplayLayout& GetCurrentDisplayLayout() const;
+  const display::DisplayLayout& GetCurrentDisplayLayout() const;
 
   // Returns the current display list.
-  DisplayIdList GetCurrentDisplayIdList() const;
+  display::DisplayIdList GetCurrentDisplayIdList() const;
 
   // Sets the layout for the current display pair. The |layout| specifies
   // the locaion of the displays relative to their parents.
-  void SetLayoutForCurrentDisplays(scoped_ptr<DisplayLayout> layout);
+  void SetLayoutForCurrentDisplays(scoped_ptr<display::DisplayLayout> layout);
 
   // Returns display for given |id|;
   const gfx::Display& GetDisplayForId(int64_t id) const;
@@ -237,7 +237,7 @@
   // when displays are mirrored.
   size_t GetNumDisplays() const;
 
-  const DisplayList& active_display_list() const {
+  const display::DisplayList& active_display_list() const {
     return active_display_list_;
   }
 
@@ -252,7 +252,7 @@
   // Returns the mirroring status.
   bool IsInMirrorMode() const;
   int64_t mirroring_display_id() const { return mirroring_display_id_; }
-  const DisplayList& software_mirroring_display_list() const {
+  const display::DisplayList& software_mirroring_display_list() const {
     return software_mirroring_display_list_;
   }
 
@@ -389,7 +389,7 @@
   // the layout registered for the display pair. For more than 2 displays,
   // the bounds are updated using horizontal layout.
   void UpdateNonPrimaryDisplayBoundsForLayout(
-      DisplayList* display_list,
+      display::DisplayList* display_list,
       std::vector<size_t>* updated_indices);
 
   void CreateMirrorWindowIfAny();
@@ -398,14 +398,14 @@
 
   // Applies the |layout| and updates the bounds of displays in |display_list|.
   // |updated_ids| contains the ids for displays whose bounds have changed.
-  void ApplyDisplayLayout(const DisplayLayout& layout,
-                          DisplayList* display_list,
+  void ApplyDisplayLayout(const display::DisplayLayout& layout,
+                          display::DisplayList* display_list,
                           std::vector<int64_t>* updated_ids);
 
   // Apply the display placement to the display layout.
   // Returns true if the display bounds has been updated.
-  bool ApplyDisplayPlacement(const DisplayPlacement& placement,
-                             DisplayList* display_list);
+  bool ApplyDisplayPlacement(const display::DisplayPlacement& placement,
+                             display::DisplayList* display_list);
 
   Delegate* delegate_;  // not owned.
 
@@ -416,7 +416,7 @@
   int64_t first_display_id_;
 
   // List of current active displays.
-  DisplayList active_display_list_;
+  display::DisplayList active_display_list_;
 
   int num_connected_displays_;
 
@@ -439,7 +439,7 @@
   MultiDisplayMode current_default_multi_display_mode_;
 
   int64_t mirroring_display_id_;
-  DisplayList software_mirroring_display_list_;
+  display::DisplayList software_mirroring_display_list_;
 
   // User preference for rotation lock of the internal display.
   bool registered_internal_display_rotation_lock_;
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc
index 88cb314..e2762428ce3 100644
--- a/ash/display/display_manager_unittest.cc
+++ b/ash/display/display_manager_unittest.cc
@@ -7,7 +7,6 @@
 #include "ash/accelerators/accelerator_commands.h"
 #include "ash/ash_switches.h"
 #include "ash/display/display_info.h"
-#include "ash/display/display_layout_builder.h"
 #include "ash/display/display_layout_store.h"
 #include "ash/display/display_util.h"
 #include "ash/display/mirror_window_controller.h"
@@ -26,6 +25,7 @@
 #include "ui/aura/env.h"
 #include "ui/aura/window_observer.h"
 #include "ui/aura/window_tree_host.h"
+#include "ui/display/manager/display_layout_builder.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/display_observer.h"
@@ -314,7 +314,8 @@
   EXPECT_EQ("960,0 400x300",
             display_manager()->GetDisplayAt(2).bounds().ToString());
 
-  DisplayPlacement default_placement(DisplayPlacement::BOTTOM, 10);
+  display::DisplayPlacement default_placement(display::DisplayPlacement::BOTTOM,
+                                              10);
   display_manager()->layout_store()->SetDefaultDisplayPlacement(
       default_placement);
 
@@ -335,15 +336,16 @@
     return;
 
   int64_t primary_id = gfx::Screen::GetScreen()->GetPrimaryDisplay().id();
-  DisplayIdList list = ash::test::CreateDisplayIdListN(
+  display::DisplayIdList list = ash::test::CreateDisplayIdListN(
       3, primary_id, primary_id + 1, primary_id + 2);
   {
     // Layout: [2]
     //         [1][P]
-    DisplayLayoutBuilder builder(primary_id);
-    builder.AddDisplayPlacement(list[1], primary_id, DisplayPlacement::LEFT,
-                                10);
-    builder.AddDisplayPlacement(list[2], list[1], DisplayPlacement::TOP, 10);
+    display::DisplayLayoutBuilder builder(primary_id);
+    builder.AddDisplayPlacement(list[1], primary_id,
+                                display::DisplayPlacement::LEFT, 10);
+    builder.AddDisplayPlacement(list[2], list[1],
+                                display::DisplayPlacement::TOP, 10);
     display_manager()->layout_store()->RegisterLayoutForDisplayIdList(
         list, builder.Build());
 
@@ -361,10 +363,11 @@
   {
     // Layout: [1]
     //         [P][2]
-    DisplayLayoutBuilder builder(primary_id);
-    builder.AddDisplayPlacement(list[1], primary_id, DisplayPlacement::TOP, 10);
-    builder.AddDisplayPlacement(list[2], primary_id, DisplayPlacement::RIGHT,
-                                10);
+    display::DisplayLayoutBuilder builder(primary_id);
+    builder.AddDisplayPlacement(list[1], primary_id,
+                                display::DisplayPlacement::TOP, 10);
+    builder.AddDisplayPlacement(list[2], primary_id,
+                                display::DisplayPlacement::RIGHT, 10);
     display_manager()->layout_store()->RegisterLayoutForDisplayIdList(
         list, builder.Build());
 
@@ -383,10 +386,11 @@
     // Layout: [P]
     //         [2]
     //         [1]
-    DisplayLayoutBuilder builder(primary_id);
-    builder.AddDisplayPlacement(list[1], list[2], DisplayPlacement::BOTTOM, 10);
-    builder.AddDisplayPlacement(list[2], primary_id, DisplayPlacement::BOTTOM,
-                                10);
+    display::DisplayLayoutBuilder builder(primary_id);
+    builder.AddDisplayPlacement(list[1], list[2],
+                                display::DisplayPlacement::BOTTOM, 10);
+    builder.AddDisplayPlacement(list[2], primary_id,
+                                display::DisplayPlacement::BOTTOM, 10);
     display_manager()->layout_store()->RegisterLayoutForDisplayIdList(
         list, builder.Build());
 
@@ -409,13 +413,15 @@
     // Layout: [P][2]
     //      [3][4]
     //      [1]
-    DisplayLayoutBuilder builder(primary_id);
-    builder.AddDisplayPlacement(list[2], primary_id, DisplayPlacement::RIGHT,
-                                10);
-    builder.AddDisplayPlacement(list[1], list[3], DisplayPlacement::BOTTOM, 10);
-    builder.AddDisplayPlacement(list[3], list[4], DisplayPlacement::LEFT, 10);
-    builder.AddDisplayPlacement(list[4], primary_id, DisplayPlacement::BOTTOM,
-                                10);
+    display::DisplayLayoutBuilder builder(primary_id);
+    builder.AddDisplayPlacement(list[2], primary_id,
+                                display::DisplayPlacement::RIGHT, 10);
+    builder.AddDisplayPlacement(list[1], list[3],
+                                display::DisplayPlacement::BOTTOM, 10);
+    builder.AddDisplayPlacement(list[3], list[4],
+                                display::DisplayPlacement::LEFT, 10);
+    builder.AddDisplayPlacement(list[4], primary_id,
+                                display::DisplayPlacement::BOTTOM, 10);
     display_manager()->layout_store()->RegisterLayoutForDisplayIdList(
         list, builder.Build());
 
@@ -1484,6 +1490,21 @@
   gfx::Screen::GetScreen()->RemoveObserver(&display_observer);
 }
 
+TEST_F(DisplayManagerTest, RotateInSoftwareMirroring) {
+  if (!SupportsMultipleDisplays())
+    return;
+
+  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+  UpdateDisplay("600x400,500x300");
+  display_manager->SetMirrorMode(true);
+
+  EXPECT_EQ(1U, display_manager->GetNumDisplays());
+  int64_t primary_id = gfx::Screen::GetScreen()->GetPrimaryDisplay().id();
+  display_manager->SetDisplayRotation(primary_id, gfx::Display::ROTATE_180,
+                                      gfx::Display::ROTATION_SOURCE_ACTIVE);
+  display_manager->SetMirrorMode(false);
+}
+
 TEST_F(DisplayManagerTest, SingleDisplayToSoftwareMirroring) {
   if (!SupportsMultipleDisplays())
     return;
@@ -1570,32 +1591,56 @@
 
 TEST_F(DisplayManagerTest, InvertLayout) {
   EXPECT_EQ("left, 0",
-            DisplayPlacement(DisplayPlacement::RIGHT, 0).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::RIGHT, 0)
+                .Swap()
+                .ToString());
   EXPECT_EQ("left, -100",
-            DisplayPlacement(DisplayPlacement::RIGHT, 100).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::RIGHT, 100)
+                .Swap()
+                .ToString());
   EXPECT_EQ("left, 50",
-            DisplayPlacement(DisplayPlacement::RIGHT, -50).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::RIGHT, -50)
+                .Swap()
+                .ToString());
 
   EXPECT_EQ("right, 0",
-            DisplayPlacement(DisplayPlacement::LEFT, 0).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::LEFT, 0)
+                .Swap()
+                .ToString());
   EXPECT_EQ("right, -90",
-            DisplayPlacement(DisplayPlacement::LEFT, 90).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::LEFT, 90)
+                .Swap()
+                .ToString());
   EXPECT_EQ("right, 60",
-            DisplayPlacement(DisplayPlacement::LEFT, -60).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::LEFT, -60)
+                .Swap()
+                .ToString());
 
   EXPECT_EQ("bottom, 0",
-            DisplayPlacement(DisplayPlacement::TOP, 0).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::TOP, 0)
+                .Swap()
+                .ToString());
   EXPECT_EQ("bottom, -80",
-            DisplayPlacement(DisplayPlacement::TOP, 80).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::TOP, 80)
+                .Swap()
+                .ToString());
   EXPECT_EQ("bottom, 70",
-            DisplayPlacement(DisplayPlacement::TOP, -70).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::TOP, -70)
+                .Swap()
+                .ToString());
 
   EXPECT_EQ("top, 0",
-            DisplayPlacement(DisplayPlacement::BOTTOM, 0).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::BOTTOM, 0)
+                .Swap()
+                .ToString());
   EXPECT_EQ("top, -70",
-            DisplayPlacement(DisplayPlacement::BOTTOM, 70).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::BOTTOM, 70)
+                .Swap()
+                .ToString());
   EXPECT_EQ("top, 80",
-            DisplayPlacement(DisplayPlacement::BOTTOM, -80).Swap().ToString());
+            display::DisplayPlacement(display::DisplayPlacement::BOTTOM, -80)
+                .Swap()
+                .ToString());
 }
 
 TEST_F(DisplayManagerTest, NotifyPrimaryChange) {
@@ -1766,8 +1811,8 @@
   // if the displays are configured to use mirroring when running on desktop.
   // This is a workdaround to force the display manager to forget
   // the mirroing layout.
-  DisplayIdList list = test::CreateDisplayIdList2(1, 2);
-  DisplayLayoutBuilder builder(
+  display::DisplayIdList list = test::CreateDisplayIdList2(1, 2);
+  display::DisplayLayoutBuilder builder(
       display_manager()->layout_store()->GetRegisteredDisplayLayout(list));
   builder.SetMirrored(false);
   display_manager()->layout_store()->RegisterLayoutForDisplayIdList(
@@ -1790,8 +1835,8 @@
   Shell::GetPrimaryRootWindow()->RemoveObserver(this);
 
   UpdateDisplay("400x500,300x200");
-  DisplayIdList list = display_manager()->GetCurrentDisplayIdList();
-  DisplayLayoutBuilder builder(
+  display::DisplayIdList list = display_manager()->GetCurrentDisplayIdList();
+  display::DisplayLayoutBuilder builder(
       display_manager()->layout_store()->GetRegisteredDisplayLayout(list));
   builder.SetDefaultUnified(false);
   display_manager()->layout_store()->RegisterLayoutForDisplayIdList(
@@ -2011,10 +2056,10 @@
 TEST_F(DisplayManagerTest, DontRegisterBadConfig) {
   if (!SupportsMultipleDisplays())
     return;
-  DisplayIdList list = ash::test::CreateDisplayIdList2(1, 2);
-  DisplayLayoutBuilder builder(1);
-  builder.AddDisplayPlacement(2, 1, ash::DisplayPlacement::LEFT, 0);
-  builder.AddDisplayPlacement(3, 1, ash::DisplayPlacement::BOTTOM, 0);
+  display::DisplayIdList list = ash::test::CreateDisplayIdList2(1, 2);
+  display::DisplayLayoutBuilder builder(1);
+  builder.AddDisplayPlacement(2, 1, display::DisplayPlacement::LEFT, 0);
+  builder.AddDisplayPlacement(3, 1, display::DisplayPlacement::BOTTOM, 0);
 
   display_manager()->layout_store()->RegisterLayoutForDisplayIdList(
       list, builder.Build());
@@ -2199,17 +2244,17 @@
   int64_t id1 = 10001;
   int64_t id2 = 10002;
   ASSERT_TRUE(CompareDisplayIds(id1, id2));
-  DisplayLayoutBuilder good_builder(id1);
-  good_builder.SetSecondaryPlacement(id2, DisplayPlacement::LEFT, 0);
-  scoped_ptr<DisplayLayout> good(good_builder.Build());
+  display::DisplayLayoutBuilder good_builder(id1);
+  good_builder.SetSecondaryPlacement(id2, display::DisplayPlacement::LEFT, 0);
+  scoped_ptr<display::DisplayLayout> good(good_builder.Build());
 
-  DisplayIdList good_list = test::CreateDisplayIdList2(id1, id2);
+  display::DisplayIdList good_list = test::CreateDisplayIdList2(id1, id2);
   layout_store->RegisterLayoutForDisplayIdList(good_list, good->Copy());
 
-  DisplayLayoutBuilder bad(id1);
-  bad.SetSecondaryPlacement(id2, DisplayPlacement::BOTTOM, 0);
+  display::DisplayLayoutBuilder bad(id1);
+  bad.SetSecondaryPlacement(id2, display::DisplayPlacement::BOTTOM, 0);
 
-  DisplayIdList bad_list(2);
+  display::DisplayIdList bad_list(2);
   bad_list[0] = id2;
   bad_list[1] = id1;
   layout_store->RegisterLayoutForDisplayIdList(bad_list, bad.Build());
@@ -2222,14 +2267,15 @@
   int64_t id1 = 10001;
   int64_t id2 = 10002;
 
-  scoped_ptr<DisplayLayout> old_layout(new DisplayLayout);
-  old_layout->placement_list.emplace_back(DisplayPlacement::BOTTOM, 0);
+  scoped_ptr<display::DisplayLayout> old_layout(new display::DisplayLayout);
+  old_layout->placement_list.emplace_back(display::DisplayPlacement::BOTTOM, 0);
   old_layout->primary_id = id1;
 
   DisplayLayoutStore* layout_store = display_manager()->layout_store();
-  DisplayIdList list = test::CreateDisplayIdList2(id1, id2);
+  display::DisplayIdList list = test::CreateDisplayIdList2(id1, id2);
   layout_store->RegisterLayoutForDisplayIdList(list, std::move(old_layout));
-  const DisplayLayout& stored = layout_store->GetRegisteredDisplayLayout(list);
+  const display::DisplayLayout& stored =
+      layout_store->GetRegisteredDisplayLayout(list);
 
   EXPECT_EQ(id1, stored.placement_list[0].parent_display_id);
   EXPECT_EQ(id2, stored.placement_list[0].display_id);
diff --git a/ash/display/display_util.cc b/ash/display/display_util.cc
index 02fa6c9..0fa95e6 100644
--- a/ash/display/display_util.cc
+++ b/ash/display/display_util.cc
@@ -235,22 +235,22 @@
   int rr = std::min(a_bounds.right(), b_bounds.right());
   int rb = std::min(a_bounds.bottom(), b_bounds.bottom());
 
-  DisplayPlacement::Position position;
+  display::DisplayPlacement::Position position;
   if ((rb - ry) == 0) {
     // top bottom
     if (a_bounds.bottom() == b_bounds.y()) {
-      position = DisplayPlacement::BOTTOM;
+      position = display::DisplayPlacement::BOTTOM;
     } else if (a_bounds.y() == b_bounds.bottom()) {
-      position = DisplayPlacement::TOP;
+      position = display::DisplayPlacement::TOP;
     } else {
       return false;
     }
   } else {
     // left right
     if (a_bounds.right() == b_bounds.x()) {
-      position = DisplayPlacement::RIGHT;
+      position = display::DisplayPlacement::RIGHT;
     } else if (a_bounds.x() == b_bounds.right()) {
-      position = DisplayPlacement::LEFT;
+      position = display::DisplayPlacement::LEFT;
     } else {
       DCHECK_NE(rr, rx);
       return false;
@@ -258,11 +258,11 @@
   }
 
   switch (position) {
-    case DisplayPlacement::TOP:
-    case DisplayPlacement::BOTTOM: {
+    case display::DisplayPlacement::TOP:
+    case display::DisplayPlacement::BOTTOM: {
       int left = std::max(a_bounds.x(), b_bounds.x());
       int right = std::min(a_bounds.right(), b_bounds.right());
-      if (position == DisplayPlacement::TOP) {
+      if (position == display::DisplayPlacement::TOP) {
         a_edge_in_screen->SetRect(left, a_bounds.y(), right - left, 1);
         b_edge_in_screen->SetRect(left, b_bounds.bottom() - 1, right - left, 1);
       } else {
@@ -271,11 +271,11 @@
       }
       break;
     }
-    case DisplayPlacement::LEFT:
-    case DisplayPlacement::RIGHT: {
+    case display::DisplayPlacement::LEFT:
+    case display::DisplayPlacement::RIGHT: {
       int top = std::max(a_bounds.y(), b_bounds.y());
       int bottom = std::min(a_bounds.bottom(), b_bounds.bottom());
-      if (position == DisplayPlacement::LEFT) {
+      if (position == display::DisplayPlacement::LEFT) {
         a_edge_in_screen->SetRect(a_bounds.x(), top, 1, bottom - top);
         b_edge_in_screen->SetRect(b_bounds.right() - 1, top, 1, bottom - top);
       } else {
@@ -374,18 +374,18 @@
   return iter == displays.end() ? -1 : (iter - displays.begin());
 }
 
-DisplayIdList CreateDisplayIdList(const DisplayList& list) {
+display::DisplayIdList CreateDisplayIdList(const display::DisplayList& list) {
   return GenerateDisplayIdList(
       list.begin(), list.end(),
       [](const gfx::Display& display) { return display.id(); });
 }
 
-void SortDisplayIdList(DisplayIdList* ids) {
+void SortDisplayIdList(display::DisplayIdList* ids) {
   std::sort(ids->begin(), ids->end(),
             [](int64_t a, int64_t b) { return CompareDisplayIds(a, b); });
 }
 
-std::string DisplayIdListToString(const ash::DisplayIdList& list) {
+std::string DisplayIdListToString(const display::DisplayIdList& list) {
   std::stringstream s;
   const char* sep = "";
   for (int64_t id : list) {
diff --git a/ash/display/display_util.h b/ash/display/display_util.h
index fc331cb..7c1a5b7 100644
--- a/ash/display/display_util.h
+++ b/ash/display/display_util.h
@@ -12,7 +12,7 @@
 #include <vector>
 
 #include "ash/ash_export.h"
-#include "ash/display/display_layout.h"
+#include "ui/display/manager/display_layout.h"
 
 namespace gfx {
 class Display;
@@ -89,7 +89,7 @@
     const gfx::Point& point_in_screen);
 
 // Sorts id list using |CompareDisplayIds| below.
-ASH_EXPORT void SortDisplayIdList(DisplayIdList* list);
+ASH_EXPORT void SortDisplayIdList(display::DisplayIdList* list);
 
 // Default id generator.
 class DefaultDisplayIdGenerator {
@@ -97,12 +97,13 @@
   int64_t operator()(int64_t id) { return id; }
 };
 
-// Generate sorted DisplayIdList from iterators.
+// Generate sorted display::DisplayIdList from iterators.
 template <class ForwardIterator, class Generator = DefaultDisplayIdGenerator>
-DisplayIdList GenerateDisplayIdList(ForwardIterator first,
-                                    ForwardIterator last,
-                                    Generator generator = Generator()) {
-  DisplayIdList list;
+display::DisplayIdList GenerateDisplayIdList(
+    ForwardIterator first,
+    ForwardIterator last,
+    Generator generator = Generator()) {
+  display::DisplayIdList list;
   while (first != last) {
     list.push_back(generator(*first));
     ++first;
@@ -111,10 +112,12 @@
   return list;
 }
 
-// Creates sorted DisplayIdList.
-ASH_EXPORT DisplayIdList CreateDisplayIdList(const DisplayList& list);
+// Creates sorted display::DisplayIdList.
+ASH_EXPORT display::DisplayIdList CreateDisplayIdList(
+    const display::DisplayList& list);
 
-ASH_EXPORT std::string DisplayIdListToString(const DisplayIdList& list);
+ASH_EXPORT std::string DisplayIdListToString(
+    const display::DisplayIdList& list);
 
 // Returns true if one of following conditinos is met.
 // 1) id1 is internal.
diff --git a/ash/display/display_util_unittest.cc b/ash/display/display_util_unittest.cc
index 10866ba..2e70a1b4 100644
--- a/ash/display/display_util_unittest.cc
+++ b/ash/display/display_util_unittest.cc
@@ -92,7 +92,7 @@
 }
 
 TEST_F(DisplayUtilTest, GenerateDisplayIdList) {
-  DisplayIdList list;
+  display::DisplayIdList list;
   {
     int64_t ids[] = {10, 1};
     list = GenerateDisplayIdList(std::begin(ids), std::end(ids));
@@ -162,13 +162,15 @@
 TEST_F(DisplayUtilTest, DisplayIdListToString) {
   {
     int64_t ids[] = {10, 1, 16};
-    DisplayIdList list = GenerateDisplayIdList(std::begin(ids), std::end(ids));
+    display::DisplayIdList list =
+        GenerateDisplayIdList(std::begin(ids), std::end(ids));
     EXPECT_EQ("1,10,16", DisplayIdListToString(list));
   }
   {
     test::ScopedSetInternalDisplayId set_internal(16);
     int64_t ids[] = {10, 1, 16};
-    DisplayIdList list = GenerateDisplayIdList(std::begin(ids), std::end(ids));
+    display::DisplayIdList list =
+        GenerateDisplayIdList(std::begin(ids), std::end(ids));
     EXPECT_EQ("16,1,10", DisplayIdListToString(list));
   }
 }
diff --git a/ash/display/extended_mouse_warp_controller.cc b/ash/display/extended_mouse_warp_controller.cc
index 6e5273f3..78e80951 100644
--- a/ash/display/extended_mouse_warp_controller.cc
+++ b/ash/display/extended_mouse_warp_controller.cc
@@ -14,6 +14,7 @@
 #include "ash/screen_util.h"
 #include "ash/shell.h"
 #include "ui/aura/window.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event_utils.h"
 #include "ui/gfx/screen.h"
 #include "ui/wm/core/coordinate_conversion.h"
@@ -103,7 +104,7 @@
       Shell::GetInstance()->display_manager();
   int64_t drag_source_id = drag_source ? GetDisplayIdFromWindow(drag_source)
                                        : gfx::Display::kInvalidDisplayID;
-  DisplayList display_list = display_manager->active_display_list();
+  display::DisplayList display_list = display_manager->active_display_list();
   // Try to create a Warp region for all possible two displays combination.
   // The following code does it by poping the last element in the list
   // and then pairing with remaining displays in the list, until the list
diff --git a/ash/display/extended_mouse_warp_controller.h b/ash/display/extended_mouse_warp_controller.h
index 05a6988..540b4d2 100644
--- a/ash/display/extended_mouse_warp_controller.h
+++ b/ash/display/extended_mouse_warp_controller.h
@@ -9,7 +9,6 @@
 
 #include <vector>
 
-#include "ash/display/display_layout.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
diff --git a/ash/display/extended_mouse_warp_controller_unittest.cc b/ash/display/extended_mouse_warp_controller_unittest.cc
index 85988cc..20aef5b 100644
--- a/ash/display/extended_mouse_warp_controller_unittest.cc
+++ b/ash/display/extended_mouse_warp_controller_unittest.cc
@@ -4,13 +4,14 @@
 
 #include "ash/display/extended_mouse_warp_controller.h"
 
-#include "ash/display/display_layout_builder.h"
 #include "ash/display/display_layout_store.h"
 #include "ash/display/display_manager.h"
 #include "ash/display/mouse_cursor_event_filter.h"
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/display_manager_test_api.h"
+#include "ui/display/manager/display_layout.h"
+#include "ui/display/manager/display_layout_builder.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/screen.h"
@@ -61,8 +62,8 @@
       gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
 
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
-  scoped_ptr<DisplayLayout> layout(
-      test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0));
+  scoped_ptr<display::DisplayLayout> layout(
+      test::CreateDisplayLayout(display::DisplayPlacement::RIGHT, 0));
 
   display_manager->SetLayoutForCurrentDisplays(layout->Copy());
   event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
@@ -133,8 +134,8 @@
       gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
 
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
-  scoped_ptr<DisplayLayout> layout(
-      test::CreateDisplayLayout(DisplayPlacement::LEFT, 0));
+  scoped_ptr<display::DisplayLayout> layout(
+      test::CreateDisplayLayout(display::DisplayPlacement::LEFT, 0));
   display_manager->SetLayoutForCurrentDisplays(layout->Copy());
 
   event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
@@ -174,8 +175,8 @@
       gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id();
 
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
-  scoped_ptr<DisplayLayout> layout(
-      test::CreateDisplayLayout(DisplayPlacement::TOP, 0));
+  scoped_ptr<display::DisplayLayout> layout(
+      test::CreateDisplayLayout(display::DisplayPlacement::TOP, 0));
   display_manager->SetLayoutForCurrentDisplays(layout->Copy());
   event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
   ASSERT_EQ(1U, GetWarpRegionsCount());
@@ -199,7 +200,7 @@
   EXPECT_EQ(gfx::Rect(250, 0, 110, 1), GetIndicatorBounds(display_0_id));
   EXPECT_EQ(gfx::Rect(250, -1, 110, 1), GetIndicatorBounds(display_1_id));
 
-  layout->placement_list[0].position = DisplayPlacement::BOTTOM;
+  layout->placement_list[0].position = display::DisplayPlacement::BOTTOM;
   layout->placement_list[0].offset = 0;
   display_manager->SetLayoutForCurrentDisplays(layout->Copy());
   event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
@@ -289,11 +290,11 @@
   //  +-+---+--++
   //    |  2   |
   //    +------+
-  ash::DisplayLayoutBuilder builder(display_0_id);
+  display::DisplayLayoutBuilder builder(display_0_id);
   builder.AddDisplayPlacement(display_1_id, display_0_id,
-                              ash::DisplayPlacement::RIGHT, 0);
+                              display::DisplayPlacement::RIGHT, 0);
   builder.AddDisplayPlacement(display_2_id, display_0_id,
-                              ash::DisplayPlacement::BOTTOM, 100);
+                              display::DisplayPlacement::BOTTOM, 100);
 
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
   display_manager->SetLayoutForCurrentDisplays(builder.Build());
@@ -340,11 +341,11 @@
   //  +-+---+-+++
   //    |  2   |
   //    +------+
-  ash::DisplayLayoutBuilder builder(display_0_id);
+  display::DisplayLayoutBuilder builder(display_0_id);
   builder.AddDisplayPlacement(display_2_id, display_0_id,
-                              ash::DisplayPlacement::BOTTOM, 100);
+                              display::DisplayPlacement::BOTTOM, 100);
   builder.AddDisplayPlacement(display_1_id, display_2_id,
-                              ash::DisplayPlacement::TOP, 800);
+                              display::DisplayPlacement::TOP, 800);
 
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
   display_manager->SetLayoutForCurrentDisplays(builder.Build());
diff --git a/ash/display/json_converter.cc b/ash/display/json_converter.cc
index 63a7efe76..352a2ff 100644
--- a/ash/display/json_converter.cc
+++ b/ash/display/json_converter.cc
@@ -6,11 +6,11 @@
 
 #include <string>
 
-#include "ash/display/display_layout.h"
 #include "ash/display/display_pref_util.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
+#include "ui/display/manager/display_layout.h"
 
 namespace ash {
 
@@ -28,17 +28,18 @@
 const char kDisplayPlacementDisplayIdKey[] = "display_id";
 const char kDisplayPlacementParentDisplayIdKey[] = "parent_display_id";
 
-bool AddLegacyValuesFromValue(const base::Value& value, DisplayLayout* layout) {
+bool AddLegacyValuesFromValue(const base::Value& value,
+                              display::DisplayLayout* layout) {
   const base::DictionaryValue* dict_value = nullptr;
   if (!value.GetAsDictionary(&dict_value))
     return false;
   int offset;
   if (dict_value->GetInteger(kOffsetKey, &offset)) {
-    DisplayPlacement::Position position;
+    display::DisplayPlacement::Position position;
     std::string position_str;
     if (!dict_value->GetString(kPositionKey, &position_str))
       return false;
-    DisplayPlacement::StringToPosition(position_str, &position);
+    display::DisplayPlacement::StringToPosition(position_str, &position);
     layout->placement_list.emplace_back(position, offset);
   }
   return true;
@@ -86,14 +87,14 @@
 template <>
 bool UpdateFromDict(const base::DictionaryValue* dict_value,
                     const std::string& field_name,
-                    DisplayPlacement::Position* output) {
+                    display::DisplayPlacement::Position* output) {
   bool (base::Value::*getter)(std::string*) const = &base::Value::GetAsString;
   std::string value;
   if (!UpdateFromDict(dict_value, field_name, getter, &value))
     return false;
 
-  return value.empty() ? true
-                       : DisplayPlacement::StringToPosition(value, output);
+  return value.empty() ? true : display::DisplayPlacement::StringToPosition(
+                                    value, output);
 }
 
 template <>
@@ -111,7 +112,7 @@
 template <>
 bool UpdateFromDict(const base::DictionaryValue* dict_value,
                     const std::string& field_name,
-                    std::vector<DisplayPlacement>* output) {
+                    std::vector<display::DisplayPlacement>* output) {
   bool (base::Value::*getter)(const base::ListValue**) const =
       &base::Value::GetAsList;
   const base::ListValue* list = nullptr;
@@ -127,7 +128,7 @@
     if (!list_item->GetAsDictionary(&item_values))
       return false;
 
-    DisplayPlacement item;
+    display::DisplayPlacement item;
     if (!UpdateFromDict(item_values, kOffsetKey, &item.offset) ||
         !UpdateFromDict(item_values, kPositionKey, &item.position) ||
         !UpdateFromDict(item_values, kDisplayPlacementDisplayIdKey,
@@ -144,7 +145,8 @@
 
 }  // namespace
 
-bool JsonToDisplayLayout(const base::Value& value, DisplayLayout* layout) {
+bool JsonToDisplayLayout(const base::Value& value,
+                         display::DisplayLayout* layout) {
   layout->placement_list.clear();
   const base::DictionaryValue* dict_value = nullptr;
   if (!value.GetAsDictionary(&dict_value))
@@ -166,7 +168,8 @@
   return AddLegacyValuesFromValue(value, layout);
 }
 
-bool DisplayLayoutToJson(const DisplayLayout& layout, base::Value* value) {
+bool DisplayLayoutToJson(const display::DisplayLayout& layout,
+                         base::Value* value) {
   base::DictionaryValue* dict_value = nullptr;
   if (!value->GetAsDictionary(&dict_value))
     return false;
@@ -180,7 +183,8 @@
     scoped_ptr<base::DictionaryValue> placement_value(
         new base::DictionaryValue);
     placement_value->SetString(
-        kPositionKey, DisplayPlacement::PositionToString(placement.position));
+        kPositionKey,
+        display::DisplayPlacement::PositionToString(placement.position));
     placement_value->SetInteger(kOffsetKey, placement.offset);
     placement_value->SetString(kDisplayPlacementDisplayIdKey,
                                base::Int64ToString(placement.display_id));
diff --git a/ash/display/json_converter.h b/ash/display/json_converter.h
index 4c88eb0..0125f23 100644
--- a/ash/display/json_converter.h
+++ b/ash/display/json_converter.h
@@ -11,14 +11,16 @@
 class Value;
 }
 
+namespace display {
+class DisplayLayout;
+}
+
 namespace ash {
 
-class DisplayLayout;
-
 ASH_EXPORT bool JsonToDisplayLayout(const base::Value& value,
-                                    DisplayLayout* layout);
+                                    display::DisplayLayout* layout);
 
-ASH_EXPORT bool DisplayLayoutToJson(const DisplayLayout& layout,
+ASH_EXPORT bool DisplayLayoutToJson(const display::DisplayLayout& layout,
                                     base::Value* value);
 
 }  // namespace ash
diff --git a/ash/display/json_converter_unittest.cc b/ash/display/json_converter_unittest.cc
index 0ac13d8..1d14ef1 100644
--- a/ash/display/json_converter_unittest.cc
+++ b/ash/display/json_converter_unittest.cc
@@ -4,27 +4,27 @@
 
 #include "ash/display/json_converter.h"
 
-#include "ash/display/display_layout.h"
 #include "base/json/json_reader.h"
 #include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/display/manager/display_layout.h"
 
 namespace ash {
 
 TEST(JsonConverterTest, JsonFromToDisplayLayout) {
-  DisplayLayout layout;
+  display::DisplayLayout layout;
   layout.primary_id = 1;
   layout.mirrored = true;
   layout.default_unified = false;
-  layout.placement_list.push_back(DisplayPlacement());
-  layout.placement_list.push_back(DisplayPlacement());
+  layout.placement_list.push_back(display::DisplayPlacement());
+  layout.placement_list.push_back(display::DisplayPlacement());
   layout.placement_list[0].display_id = 2;
   layout.placement_list[0].parent_display_id = 1;
-  layout.placement_list[0].position = DisplayPlacement::BOTTOM;
+  layout.placement_list[0].position = display::DisplayPlacement::BOTTOM;
 
   layout.placement_list[1].display_id = 3;
   layout.placement_list[1].parent_display_id = 2;
-  layout.placement_list[1].position = DisplayPlacement::LEFT;
+  layout.placement_list[1].position = display::DisplayPlacement::LEFT;
   layout.placement_list[1].offset = 30;
 
   base::DictionaryValue value;
@@ -55,7 +55,7 @@
                            << error_column;
   EXPECT_TRUE(value.Equals(read_value.get()));
 
-  DisplayLayout read_layout;
+  display::DisplayLayout read_layout;
   EXPECT_TRUE(JsonToDisplayLayout(*read_value, &read_layout));
   EXPECT_EQ(read_layout.mirrored, layout.mirrored);
   EXPECT_EQ(read_layout.primary_id, layout.primary_id);
@@ -79,13 +79,14 @@
   ASSERT_EQ(0, error_code) << error_msg << " at " << error_line << ":"
                            << error_column;
 
-  DisplayLayout read_layout;
+  display::DisplayLayout read_layout;
   EXPECT_TRUE(JsonToDisplayLayout(*read_value, &read_layout));
   EXPECT_EQ(true, read_layout.mirrored);
   EXPECT_EQ(1, read_layout.primary_id);
   EXPECT_EQ(false, read_layout.default_unified);
   ASSERT_EQ(1u, read_layout.placement_list.size());
-  EXPECT_EQ(DisplayPlacement::BOTTOM, read_layout.placement_list[0].position);
+  EXPECT_EQ(display::DisplayPlacement::BOTTOM,
+            read_layout.placement_list[0].position);
   EXPECT_EQ(20, read_layout.placement_list[0].offset);
 }
 
diff --git a/ash/display/mirror_window_controller.cc b/ash/display/mirror_window_controller.cc
index ce7fba1..b042c85 100644
--- a/ash/display/mirror_window_controller.cc
+++ b/ash/display/mirror_window_controller.cc
@@ -34,6 +34,7 @@
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/layout.h"
 #include "ui/compositor/reflector.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/native_widget_types.h"
 #include "ui/gfx/screen.h"
@@ -332,9 +333,10 @@
     if (pair.second->ash_host->AsWindowTreeHost()->window() == root) {
       // Sanity check to catch an error early.
       int64_t id = pair.first;
-      const DisplayList& list = Shell::GetInstance()
-                                    ->display_manager()
-                                    ->software_mirroring_display_list();
+      const display::DisplayList& list =
+          Shell::GetInstance()
+              ->display_manager()
+              ->software_mirroring_display_list();
       auto iter = std::find_if(
           list.begin(), list.end(),
           [id](const gfx::Display& display) { return display.id() == id; });
diff --git a/ash/display/mouse_cursor_event_filter_unittest.cc b/ash/display/mouse_cursor_event_filter_unittest.cc
index 0842c694..401cf14 100644
--- a/ash/display/mouse_cursor_event_filter_unittest.cc
+++ b/ash/display/mouse_cursor_event_filter_unittest.cc
@@ -11,6 +11,7 @@
 #include "ash/test/cursor_manager_test_api.h"
 #include "ash/test/display_manager_test_api.h"
 #include "ui/aura/env.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/test/event_generator.h"
 
 namespace ash {
@@ -42,11 +43,11 @@
 
   UpdateDisplay("500x500,500x500");
 
-  ASSERT_EQ(DisplayPlacement::RIGHT, Shell::GetInstance()
-                                         ->display_manager()
-                                         ->GetCurrentDisplayLayout()
-                                         .placement_list[0]
-                                         .position);
+  ASSERT_EQ(display::DisplayPlacement::RIGHT, Shell::GetInstance()
+                                                  ->display_manager()
+                                                  ->GetCurrentDisplayLayout()
+                                                  .placement_list[0]
+                                                  .position);
 
   EXPECT_FALSE(TestIfMouseWarpsAt(gfx::Point(11, 11)));
 
@@ -82,11 +83,11 @@
 
   UpdateDisplay("500x500,600x600");  // the second one is larger.
 
-  ASSERT_EQ(DisplayPlacement::RIGHT, Shell::GetInstance()
-                                         ->display_manager()
-                                         ->GetCurrentDisplayLayout()
-                                         .placement_list[0]
-                                         .position);
+  ASSERT_EQ(display::DisplayPlacement::RIGHT, Shell::GetInstance()
+                                                  ->display_manager()
+                                                  ->GetCurrentDisplayLayout()
+                                                  .placement_list[0]
+                                                  .position);
 
   // Touch the left edge of the secondary root window. Pointer should NOT warp
   // because 1px left of (0, 500) is outside the primary root window.
@@ -110,11 +111,11 @@
 
   UpdateDisplay("500x500,600x600*2");
 
-  ASSERT_EQ(DisplayPlacement::RIGHT, Shell::GetInstance()
-                                         ->display_manager()
-                                         ->GetCurrentDisplayLayout()
-                                         .placement_list[0]
-                                         .position);
+  ASSERT_EQ(display::DisplayPlacement::RIGHT, Shell::GetInstance()
+                                                  ->display_manager()
+                                                  ->GetCurrentDisplayLayout()
+                                                  .placement_list[0]
+                                                  .position);
 
   aura::Env::GetInstance()->set_last_mouse_location(gfx::Point(900, 123));
 
@@ -159,7 +160,7 @@
   UpdateDisplay("400x400,800x800*2");
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
   display_manager->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::RIGHT, 0));
   test::CursorManagerTestApi cursor_test_api(
       Shell::GetInstance()->cursor_manager());
 
diff --git a/ash/display/root_window_transformers_unittest.cc b/ash/display/root_window_transformers_unittest.cc
index 9223a54..01dab0ee 100644
--- a/ash/display/root_window_transformers_unittest.cc
+++ b/ash/display/root_window_transformers_unittest.cc
@@ -21,6 +21,7 @@
 #include "ui/aura/env.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/aura/window_tracker.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event_handler.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/display.h"
@@ -193,7 +194,7 @@
   magnifier->SetEnabled(false);
 
   display_manager->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::BOTTOM, 50));
+      test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 50));
   EXPECT_EQ("50,120 150x200",
             ScreenUtil::GetSecondaryDisplay().bounds().ToString());
 
diff --git a/ash/display/screen_position_controller_unittest.cc b/ash/display/screen_position_controller_unittest.cc
index 333379c..a4eeca65 100644
--- a/ash/display/screen_position_controller_unittest.cc
+++ b/ash/display/screen_position_controller_unittest.cc
@@ -15,6 +15,7 @@
 #include "ui/aura/window_tracker.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/layout.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/screen.h"
 
@@ -41,11 +42,11 @@
 
 namespace {
 
-void SetSecondaryDisplayLayout(DisplayPlacement::Position position) {
-  scoped_ptr<DisplayLayout> layout(Shell::GetInstance()
-                                       ->display_manager()
-                                       ->GetCurrentDisplayLayout()
-                                       .Copy());
+void SetSecondaryDisplayLayout(display::DisplayPlacement::Position position) {
+  scoped_ptr<display::DisplayLayout> layout(Shell::GetInstance()
+                                                ->display_manager()
+                                                ->GetCurrentDisplayLayout()
+                                                .Copy());
   layout->placement_list[0].position = position;
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
       std::move(layout));
@@ -117,7 +118,7 @@
   window_->SetBoundsInScreen(
       gfx::Rect(window_pos, gfx::Size(100, 100)),
       gfx::Screen::GetScreen()->GetDisplayNearestPoint(window_pos));
-  SetSecondaryDisplayLayout(DisplayPlacement::RIGHT);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::RIGHT);
   // The point is on the primary root window.
   EXPECT_EQ("50,50", ConvertHostPointToScreen(50, 50));
   // The point is out of the all root windows.
@@ -125,7 +126,7 @@
   // The point is on the secondary display.
   EXPECT_EQ("250,0", ConvertHostPointToScreen(50, 400));
 
-  SetSecondaryDisplayLayout(DisplayPlacement::BOTTOM);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::BOTTOM);
   // The point is on the primary root window.
   EXPECT_EQ("50,50", ConvertHostPointToScreen(50, 50));
   // The point is out of the all root windows.
@@ -133,7 +134,7 @@
   // The point is on the secondary display.
   EXPECT_EQ("50,200", ConvertHostPointToScreen(50, 400));
 
-  SetSecondaryDisplayLayout(DisplayPlacement::LEFT);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::LEFT);
   // The point is on the primary root window.
   EXPECT_EQ("50,50", ConvertHostPointToScreen(50, 50));
   // The point is out of the all root windows.
@@ -141,7 +142,7 @@
   // The point is on the secondary display.
   EXPECT_EQ("-150,0", ConvertHostPointToScreen(50, 400));
 
-  SetSecondaryDisplayLayout(DisplayPlacement::TOP);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::TOP);
   // The point is on the primary root window.
   EXPECT_EQ("50,50", ConvertHostPointToScreen(50, 50));
   // The point is out of the all root windows.
@@ -149,7 +150,7 @@
   // The point is on the secondary display.
   EXPECT_EQ("50,-200", ConvertHostPointToScreen(50, 400));
 
-  SetSecondaryDisplayLayout(DisplayPlacement::RIGHT);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::RIGHT);
   const gfx::Point window_pos2(300, 100);
   window_->SetBoundsInScreen(
       gfx::Rect(window_pos2, gfx::Size(100, 100)),
@@ -161,7 +162,7 @@
   // The point is on the primary root window.
   EXPECT_EQ("50,0", ConvertHostPointToScreen(50, -400));
 
-  SetSecondaryDisplayLayout(DisplayPlacement::BOTTOM);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::BOTTOM);
   // The point is on the secondary display.
   EXPECT_EQ("50,250", ConvertHostPointToScreen(50, 50));
   // The point is out of the all root windows.
@@ -169,7 +170,7 @@
   // The point is on the primary root window.
   EXPECT_EQ("50,0", ConvertHostPointToScreen(50, -400));
 
-  SetSecondaryDisplayLayout(DisplayPlacement::LEFT);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::LEFT);
   // The point is on the secondary display.
   EXPECT_EQ("-150,50", ConvertHostPointToScreen(50, 50));
   // The point is out of the all root windows.
@@ -177,7 +178,7 @@
   // The point is on the primary root window.
   EXPECT_EQ("50,0", ConvertHostPointToScreen(50, -400));
 
-  SetSecondaryDisplayLayout(DisplayPlacement::TOP);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::TOP);
   // The point is on the secondary display.
   EXPECT_EQ("50,-150", ConvertHostPointToScreen(50, 50));
   // The point is out of the all root windows.
diff --git a/ash/display/unified_mouse_warp_controller.cc b/ash/display/unified_mouse_warp_controller.cc
index fec9b60..702b53a 100644
--- a/ash/display/unified_mouse_warp_controller.cc
+++ b/ash/display/unified_mouse_warp_controller.cc
@@ -16,6 +16,7 @@
 #include "ui/aura/window.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/layout.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event_utils.h"
 #include "ui/gfx/screen.h"
 #include "ui/wm/core/coordinate_conversion.h"
@@ -37,9 +38,10 @@
 // the |point_in_screen|. Returns nullptr if such WTH does not exist.
 aura::WindowTreeHost* FindMirroringWindowTreeHostFromScreenPoint(
     const gfx::Point& point_in_screen) {
-  DisplayList mirroring_display_list = Shell::GetInstance()
-                                           ->display_manager()
-                                           ->software_mirroring_display_list();
+  display::DisplayList mirroring_display_list =
+      Shell::GetInstance()
+          ->display_manager()
+          ->software_mirroring_display_list();
   int index =
       FindDisplayIndexContainingPoint(mirroring_display_list, point_in_screen);
   if (index < 0)
@@ -75,7 +77,7 @@
     aura::client::CursorClient* cursor_client =
         aura::client::GetCursorClient(target->GetRootWindow());
     if (cursor_client) {
-      DisplayList mirroring_display_list =
+      display::DisplayList mirroring_display_list =
           Shell::GetInstance()
               ->display_manager()
               ->software_mirroring_display_list();
@@ -119,9 +121,9 @@
 }
 
 void UnifiedMouseWarpController::ComputeBounds() {
-  DisplayList display_list = Shell::GetInstance()
-                                 ->display_manager()
-                                 ->software_mirroring_display_list();
+  display::DisplayList display_list = Shell::GetInstance()
+                                          ->display_manager()
+                                          ->software_mirroring_display_list();
 
   if (display_list.size() < 2) {
     LOG(ERROR) << "Mirroring Display lost during re-configuration";
@@ -152,9 +154,9 @@
   bool in_second_edge = second_edge_bounds_in_native_.Contains(point_in_native);
   if (!in_first_edge && !in_second_edge)
     return false;
-  DisplayList display_list = Shell::GetInstance()
-                                 ->display_manager()
-                                 ->software_mirroring_display_list();
+  display::DisplayList display_list = Shell::GetInstance()
+                                          ->display_manager()
+                                          ->software_mirroring_display_list();
   // Wait updating the cursor until the cursor moves to the new display
   // to avoid showing the wrong sized cursor at the source display.
   current_cursor_display_id_ =
diff --git a/ash/display/window_tree_host_manager.cc b/ash/display/window_tree_host_manager.cc
index e919e9b..9336dfc 100644
--- a/ash/display/window_tree_host_manager.cc
+++ b/ash/display/window_tree_host_manager.cc
@@ -44,6 +44,7 @@
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/ime/input_method_factory.h"
 #include "ui/compositor/compositor.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/screen.h"
 #include "ui/wm/core/coordinate_conversion.h"
@@ -439,15 +440,16 @@
   GetRootWindowSettings(GetWindow(non_primary_host))->display_id =
       old_primary_display.id();
 
-  const DisplayLayout& layout = GetDisplayManager()->GetCurrentDisplayLayout();
+  const display::DisplayLayout& layout =
+      GetDisplayManager()->GetCurrentDisplayLayout();
   // The requested primary id can be same as one in the stored layout
   // when the primary id is set after new displays are connected.
   // Only update the layout if it is requested to swap primary display.
   if (layout.primary_id != new_primary_display.id()) {
-    scoped_ptr<DisplayLayout> swapped_layout(layout.Copy());
+    scoped_ptr<display::DisplayLayout> swapped_layout(layout.Copy());
     swapped_layout->placement_list[0].Swap();
     swapped_layout->primary_id = new_primary_display.id();
-    DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+    display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
     GetDisplayManager()->layout_store()->RegisterLayoutForDisplayIdList(
         list, std::move(swapped_layout));
   }
@@ -764,8 +766,8 @@
   DisplayManager* display_manager = GetDisplayManager();
   DisplayLayoutStore* layout_store = display_manager->layout_store();
   if (display_manager->num_connected_displays() > 1) {
-    DisplayIdList list = display_manager->GetCurrentDisplayIdList();
-    const DisplayLayout& layout =
+    display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+    const display::DisplayLayout& layout =
         layout_store->GetRegisteredDisplayLayout(list);
     layout_store->UpdateMultiDisplayState(
         list, display_manager->IsInMirrorMode(), layout.default_unified);
diff --git a/ash/display/window_tree_host_manager_unittest.cc b/ash/display/window_tree_host_manager_unittest.cc
index 0fdcb58..faa8f4d 100644
--- a/ash/display/window_tree_host_manager_unittest.cc
+++ b/ash/display/window_tree_host_manager_unittest.cc
@@ -27,6 +27,7 @@
 #include "ui/aura/window_observer.h"
 #include "ui/aura/window_tracker.h"
 #include "ui/aura/window_tree_host.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event_handler.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/display.h"
@@ -183,20 +184,22 @@
       Shell::GetAllRootWindows()[1]);
 }
 
-void SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::Position position,
-                                        int offset) {
-  scoped_ptr<DisplayLayout> layout(test::CreateDisplayLayout(position, offset));
+void SetSecondaryDisplayLayoutAndOffset(
+    display::DisplayPlacement::Position position,
+    int offset) {
+  scoped_ptr<display::DisplayLayout> layout(
+      test::CreateDisplayLayout(position, offset));
   ASSERT_GT(gfx::Screen::GetScreen()->GetNumDisplays(), 1);
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
       std::move(layout));
 }
 
-void SetSecondaryDisplayLayout(DisplayPlacement::Position position) {
+void SetSecondaryDisplayLayout(display::DisplayPlacement::Position position) {
   SetSecondaryDisplayLayoutAndOffset(position, 0);
 }
 
-void SetDefaultDisplayLayout(DisplayPlacement::Position position) {
-  DisplayPlacement default_placement(position, 0);
+void SetDefaultDisplayLayout(display::DisplayPlacement::Position position) {
+  display::DisplayPlacement default_placement(position, 0);
 
   Shell::GetInstance()
       ->display_manager()
@@ -416,7 +419,7 @@
   EXPECT_EQ(0, observer.GetActivationChangedCountAndReset());
 
   // Layout the secondary display to the bottom of the primary.
-  SetSecondaryDisplayLayout(DisplayPlacement::BOTTOM);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::BOTTOM);
   EXPECT_EQ(1, observer.CountAndReset());
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -428,7 +431,7 @@
   EXPECT_EQ("5,505 390x390", GetSecondaryDisplay().work_area().ToString());
 
   // Layout the secondary display to the left of the primary.
-  SetSecondaryDisplayLayout(DisplayPlacement::LEFT);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::LEFT);
   EXPECT_EQ(1, observer.CountAndReset());
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -440,7 +443,7 @@
   EXPECT_EQ("-395,5 390x390", GetSecondaryDisplay().work_area().ToString());
 
   // Layout the secondary display to the top of the primary.
-  SetSecondaryDisplayLayout(DisplayPlacement::TOP);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::TOP);
   EXPECT_EQ(1, observer.CountAndReset());
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -452,7 +455,7 @@
   EXPECT_EQ("5,-395 390x390", GetSecondaryDisplay().work_area().ToString());
 
   // Layout to the right with an offset.
-  SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::RIGHT, 300);
+  SetSecondaryDisplayLayoutAndOffset(display::DisplayPlacement::RIGHT, 300);
   EXPECT_EQ(1, observer.CountAndReset());  // resize and add
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -463,7 +466,7 @@
   EXPECT_EQ("500,300 400x400", GetSecondaryDisplay().bounds().ToString());
 
   // Keep the minimum 100.
-  SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::RIGHT, 490);
+  SetSecondaryDisplayLayoutAndOffset(display::DisplayPlacement::RIGHT, 490);
   EXPECT_EQ(1, observer.CountAndReset());  // resize and add
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -473,7 +476,7 @@
   EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString());
   EXPECT_EQ("500,400 400x400", GetSecondaryDisplay().bounds().ToString());
 
-  SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::RIGHT, -400);
+  SetSecondaryDisplayLayoutAndOffset(display::DisplayPlacement::RIGHT, -400);
   EXPECT_EQ(secondary_display_id, observer.GetChangedDisplayIdAndReset());
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -484,7 +487,7 @@
   EXPECT_EQ("500,-300 400x400", GetSecondaryDisplay().bounds().ToString());
 
   //  Layout to the bottom with an offset.
-  SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::BOTTOM, -200);
+  SetSecondaryDisplayLayoutAndOffset(display::DisplayPlacement::BOTTOM, -200);
   EXPECT_EQ(secondary_display_id, observer.GetChangedDisplayIdAndReset());
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -495,7 +498,7 @@
   EXPECT_EQ("-200,500 400x400", GetSecondaryDisplay().bounds().ToString());
 
   // Keep the minimum 100.
-  SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::BOTTOM, 490);
+  SetSecondaryDisplayLayoutAndOffset(display::DisplayPlacement::BOTTOM, 490);
   EXPECT_EQ(secondary_display_id, observer.GetChangedDisplayIdAndReset());
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -505,7 +508,7 @@
   EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString());
   EXPECT_EQ("400,500 400x400", GetSecondaryDisplay().bounds().ToString());
 
-  SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::BOTTOM, -400);
+  SetSecondaryDisplayLayoutAndOffset(display::DisplayPlacement::BOTTOM, -400);
   EXPECT_EQ(secondary_display_id, observer.GetChangedDisplayIdAndReset());
   EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset());
@@ -516,7 +519,7 @@
   EXPECT_EQ("-300,500 400x400", GetSecondaryDisplay().bounds().ToString());
 
   // Setting the same layout shouldn't invoke observers.
-  SetSecondaryDisplayLayoutAndOffset(DisplayPlacement::BOTTOM, -400);
+  SetSecondaryDisplayLayoutAndOffset(display::DisplayPlacement::BOTTOM, -400);
   EXPECT_EQ(0, observer.GetChangedDisplayIdAndReset());
   EXPECT_EQ(0, observer.GetBoundsChangedCountAndReset());
   EXPECT_EQ(0, observer.GetWorkareaChangedCountAndReset());
@@ -609,7 +612,7 @@
   w1->Focus();
 
   TestObserver observer;
-  SetDefaultDisplayLayout(DisplayPlacement::BOTTOM);
+  SetDefaultDisplayLayout(display::DisplayPlacement::BOTTOM);
   UpdateDisplay("200x200,300x300");  // layout, resize and add.
   EXPECT_EQ(1, observer.CountAndReset());
   EXPECT_EQ(0, observer.GetFocusChangedCountAndReset());
@@ -717,7 +720,7 @@
 
   UpdateDisplay("200x200,300x300");
   display_manager->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::RIGHT, 50));
+      test::CreateDisplayLayout(display::DisplayPlacement::RIGHT, 50));
 
   gfx::Display primary_display = gfx::Screen::GetScreen()->GetPrimaryDisplay();
   gfx::Display secondary_display = ScreenUtil::GetSecondaryDisplay();
@@ -781,7 +784,7 @@
   gfx::Display secondary_display = ScreenUtil::GetSecondaryDisplay();
 
   display_manager->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::RIGHT, 50));
+      test::CreateDisplayLayout(display::DisplayPlacement::RIGHT, 50));
 
   EXPECT_NE(primary_display.id(), secondary_display.id());
   aura::Window* primary_root =
@@ -824,7 +827,7 @@
   EXPECT_TRUE(primary_root->Contains(shelf_window));
   EXPECT_FALSE(secondary_root->Contains(shelf_window));
 
-  const DisplayLayout& inverted_layout =
+  const display::DisplayLayout& inverted_layout =
       display_manager->GetCurrentDisplayLayout();
 
   EXPECT_EQ("id=2200000000, parent=2200000001, left, -50",
@@ -1005,7 +1008,7 @@
   EXPECT_EQ(1, observer.GetRotationChangedCountAndReset());
 
   display_manager->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::BOTTOM, 50));
+      test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 50));
   EXPECT_EQ("50,120 150x200",
             ScreenUtil::GetSecondaryDisplay().bounds().ToString());
 
@@ -1364,7 +1367,7 @@
   // Set the 2nd display on the left.
   DisplayLayoutStore* layout_store =
       Shell::GetInstance()->display_manager()->layout_store();
-  DisplayPlacement new_default(DisplayPlacement::LEFT, 0);
+  display::DisplayPlacement new_default(display::DisplayPlacement::LEFT, 0);
   layout_store->SetDefaultDisplayPlacement(new_default);
 
   UpdateDisplay("200x200,300x300");
diff --git a/ash/extended_desktop_unittest.cc b/ash/extended_desktop_unittest.cc
index 035e925d..b42f2d44 100644
--- a/ash/extended_desktop_unittest.cc
+++ b/ash/extended_desktop_unittest.cc
@@ -21,6 +21,7 @@
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/base/cursor/cursor.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event_handler.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/display.h"
@@ -33,8 +34,8 @@
 namespace ash {
 namespace {
 
-void SetSecondaryDisplayLayout(DisplayPlacement::Position position) {
-  scoped_ptr<DisplayLayout> layout =
+void SetSecondaryDisplayLayout(display::DisplayPlacement::Position position) {
+  scoped_ptr<display::DisplayLayout> layout =
       Shell::GetInstance()->display_manager()->GetCurrentDisplayLayout().Copy();
   layout->placement_list[0].position = position;
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
@@ -310,7 +311,7 @@
     return;
 
   UpdateDisplay("700x500,500x500");
-  SetSecondaryDisplayLayout(DisplayPlacement::LEFT);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::LEFT);
   aura::Window::Windows root_windows = Shell::GetAllRootWindows();
 
   EXPECT_EQ(root_windows[1], wm::GetRootWindowAt(gfx::Point(-400, 100)));
@@ -331,7 +332,7 @@
     return;
 
   UpdateDisplay("700x500,500x500");
-  SetSecondaryDisplayLayout(DisplayPlacement::LEFT);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::LEFT);
 
   aura::Window::Windows root_windows = Shell::GetAllRootWindows();
 
@@ -732,7 +733,7 @@
   EXPECT_EQ("-1010,-10", p.ToString());
 
   // Move the 2nd display to the bottom and test again.
-  SetSecondaryDisplayLayout(DisplayPlacement::BOTTOM);
+  SetSecondaryDisplayLayout(display::DisplayPlacement::BOTTOM);
 
   display_2 = screen->GetDisplayNearestWindow(root_windows[1]);
   EXPECT_EQ("0,600", display_2.bounds().origin().ToString());
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index d2f1d0b..1c73328 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -666,17 +666,12 @@
 TEST_F(NoSessionRootWindowControllerTest, Event) {
   aura::Window* root = Shell::GetPrimaryRootWindow();
   const gfx::Size size = root->bounds().size();
-  aura::Window* event_target = root->GetEventHandlerForPoint(gfx::Point(0, 0));
-  EXPECT_TRUE(event_target);
-  EXPECT_EQ(event_target,
-            root->GetEventHandlerForPoint(gfx::Point(0, size.height() - 1)));
-  EXPECT_EQ(event_target,
-            root->GetEventHandlerForPoint(gfx::Point(size.width() - 1, 0)));
-  EXPECT_EQ(event_target,
-            root->GetEventHandlerForPoint(gfx::Point(0, size.height() - 1)));
-  EXPECT_EQ(event_target,
-            root->GetEventHandlerForPoint(
-                gfx::Point(size.width() - 1, size.height() - 1)));
+  EXPECT_TRUE(root->GetEventHandlerForPoint(gfx::Point(0, 0)));
+  EXPECT_TRUE(root->GetEventHandlerForPoint(gfx::Point(0, size.height() - 1)));
+  EXPECT_TRUE(root->GetEventHandlerForPoint(gfx::Point(size.width() - 1, 0)));
+  EXPECT_TRUE(root->GetEventHandlerForPoint(gfx::Point(0, size.height() - 1)));
+  EXPECT_TRUE(root->GetEventHandlerForPoint(
+      gfx::Point(size.width() - 1, size.height() - 1)));
 }
 
 class VirtualKeyboardRootWindowControllerTest
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 5dc36f4..f0330e7 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -245,15 +245,13 @@
 }
 
 void ShelfLayoutManager::LayoutShelf() {
-  if (shelf_->shelf()) {
-    TargetBounds target_bounds;
-    CalculateTargetBounds(state_, &target_bounds);
-    UpdateBoundsAndOpacity(target_bounds, false, NULL);
+  TargetBounds target_bounds;
+  CalculateTargetBounds(state_, &target_bounds);
+  UpdateBoundsAndOpacity(target_bounds, false, NULL);
 
-    // Update insets in ShelfWindowTargeter when shelf bounds change.
-    FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_,
-                      WillChangeVisibilityState(visibility_state()));
-  }
+  // Update insets in ShelfWindowTargeter when shelf bounds change.
+  FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_,
+                    WillChangeVisibilityState(visibility_state()));
 }
 
 ShelfVisibilityState ShelfLayoutManager::CalculateShelfVisibility() {
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc
index 8703963..6969695 100644
--- a/ash/shelf/shelf_layout_manager_unittest.cc
+++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -35,6 +35,7 @@
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animator.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/gesture_detection/gesture_configuration.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/display.h"
@@ -947,7 +948,7 @@
 
   UpdateDisplay("800x600,800x600");
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::RIGHT, 0));
   // Put the primary monitor's shelf on the display boundary.
   ShelfLayoutManager* shelf = GetShelfLayoutManager();
   shelf->SetAlignment(SHELF_ALIGNMENT_RIGHT);
diff --git a/ash/shell/content/client/shell_content_browser_client.cc b/ash/shell/content/client/shell_content_browser_client.cc
index 1329a65..60da706 100644
--- a/ash/shell/content/client/shell_content_browser_client.cc
+++ b/ash/shell/content/client/shell_content_browser_client.cc
@@ -8,7 +8,6 @@
 
 #include "ash/shell/content/client/shell_browser_main_parts.h"
 #include "base/command_line.h"
-#include "content/shell/browser/shell_browser_context.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 namespace ash {
@@ -25,19 +24,5 @@
   return shell_browser_main_parts_;
 }
 
-net::URLRequestContextGetter* ShellContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* content_browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  content::ShellBrowserContext* shell_context =
-      static_cast<content::ShellBrowserContext*>(content_browser_context);
-  return shell_context->CreateRequestContext(protocol_handlers,
-                                             std::move(request_interceptors));
-}
-
-content::ShellBrowserContext* ShellContentBrowserClient::browser_context() {
-  return shell_browser_main_parts_->browser_context();
-}
-
 }  // namespace examples
 }  // namespace views
diff --git a/ash/shell/content/client/shell_content_browser_client.h b/ash/shell/content/client/shell_content_browser_client.h
index bef621a6..116c4b6 100644
--- a/ash/shell/content/client/shell_content_browser_client.h
+++ b/ash/shell/content/client/shell_content_browser_client.h
@@ -30,12 +30,6 @@
   // Overridden from content::ContentBrowserClient:
   content::BrowserMainParts* CreateBrowserMainParts(
       const content::MainFunctionParams& parameters) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
-
-  content::ShellBrowserContext* browser_context();
 
  private:
   ShellBrowserMainParts* shell_browser_main_parts_;
diff --git a/ash/sticky_keys/sticky_keys_overlay_unittest.cc b/ash/sticky_keys/sticky_keys_overlay_unittest.cc
index 8fb0d1f7..ac67d4f 100644
--- a/ash/sticky_keys/sticky_keys_overlay_unittest.cc
+++ b/ash/sticky_keys/sticky_keys_overlay_unittest.cc
@@ -10,6 +10,7 @@
 #include "ash/sticky_keys/sticky_keys_controller.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/display_manager_test_api.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event.h"
 #include "ui/views/widget/widget.h"
 
@@ -47,11 +48,12 @@
   // Add a secondary display to the left of the primary one.
   UpdateDisplay("1280x1024,1980x1080");
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
-  DisplayIdList display_ids = display_manager->GetCurrentDisplayIdList();
+  display::DisplayIdList display_ids =
+      display_manager->GetCurrentDisplayIdList();
   int64_t primary_display_id = display_ids[0];
   int64_t secondary_display_id = display_ids[1];
   display_manager->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::LEFT, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::LEFT, 0));
 
   // The overlay should belong to the secondary root window.
   StickyKeysOverlay overlay;
diff --git a/ash/test/display_manager_test_api.cc b/ash/test/display_manager_test_api.cc
index 0e49e6d0..10ef37f7 100644
--- a/ash/test/display_manager_test_api.cc
+++ b/ash/test/display_manager_test_api.cc
@@ -9,7 +9,6 @@
 
 #include "ash/ash_switches.h"
 #include "ash/display/display_info.h"
-#include "ash/display/display_layout_builder.h"
 #include "ash/display/display_layout_store.h"
 #include "ash/display/display_manager.h"
 #include "ash/display/display_util.h"
@@ -22,15 +21,12 @@
 #include "base/strings/string_split.h"
 #include "ui/aura/env.h"
 #include "ui/aura/window_event_dispatcher.h"
+#include "ui/display/manager/display_layout_builder.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/display.h"
 
 namespace ash {
 namespace test {
-typedef std::vector<gfx::Display> DisplayList;
-typedef DisplayInfo DisplayInfo;
-typedef std::vector<DisplayInfo> DisplayInfoList;
-
 namespace {
 
 std::vector<DisplayInfo> CreateDisplayInfoListFromString(
@@ -41,9 +37,10 @@
       specs, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   size_t index = 0;
 
-  DisplayList list = display_manager->IsInUnifiedMode()
-                         ? display_manager->software_mirroring_display_list()
-                         : display_manager->active_display_list();
+  display::DisplayList list =
+      display_manager->IsInUnifiedMode()
+          ? display_manager->software_mirroring_display_list()
+          : display_manager->active_display_list();
 
   for (std::vector<std::string>::const_iterator iter = parts.begin();
        iter != parts.end(); ++iter, ++index) {
@@ -174,29 +171,29 @@
       ScreenUtil::GetSecondaryDisplay().id());
 }
 
-scoped_ptr<DisplayLayout> CreateDisplayLayout(
-    DisplayPlacement::Position position,
+scoped_ptr<display::DisplayLayout> CreateDisplayLayout(
+    display::DisplayPlacement::Position position,
     int offset) {
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
-  DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+  display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
 
-  DisplayLayoutBuilder builder(
+  display::DisplayLayoutBuilder builder(
       gfx::Screen::GetScreen()->GetPrimaryDisplay().id());
   builder.SetSecondaryPlacement(ScreenUtil::GetSecondaryDisplay().id(),
                                 position, offset);
   return builder.Build();
 }
 
-DisplayIdList CreateDisplayIdList2(int64_t id1, int64_t id2) {
-  DisplayIdList list;
+display::DisplayIdList CreateDisplayIdList2(int64_t id1, int64_t id2) {
+  display::DisplayIdList list;
   list.push_back(id1);
   list.push_back(id2);
   SortDisplayIdList(&list);
   return list;
 }
 
-DisplayIdList CreateDisplayIdListN(size_t count, ...) {
-  DisplayIdList list;
+display::DisplayIdList CreateDisplayIdListN(size_t count, ...) {
+  display::DisplayIdList list;
   va_list args;
   va_start(args, count);
   for (size_t i = 0; i < count; i++) {
diff --git a/ash/test/display_manager_test_api.h b/ash/test/display_manager_test_api.h
index 573f212..b72818c9 100644
--- a/ash/test/display_manager_test_api.h
+++ b/ash/test/display_manager_test_api.h
@@ -10,8 +10,8 @@
 #include <string>
 #include <vector>
 
-#include "ash/display/display_layout.h"
 #include "base/macros.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/display/types/display_constants.h"
 
 namespace gfx {
@@ -98,13 +98,13 @@
 // independent of current displays, use DisplayLayoutBuilder or simply
 // create a new DisplayLayout and set display id fields (primary, ids
 // in placement) manually.
-scoped_ptr<DisplayLayout> CreateDisplayLayout(
-    DisplayPlacement::Position position,
+scoped_ptr<display::DisplayLayout> CreateDisplayLayout(
+    display::DisplayPlacement::Position position,
     int offset);
 
 // Creates the DisplayIdList from ints.
-DisplayIdList CreateDisplayIdList2(int64_t id1, int64_t id2);
-DisplayIdList CreateDisplayIdListN(size_t count, ...);
+display::DisplayIdList CreateDisplayIdList2(int64_t id1, int64_t id2);
+display::DisplayIdList CreateDisplayIdListN(size_t count, ...);
 
 }  // namespace test
 }  // namespace ash
diff --git a/ash/touch/touch_transformer_controller.cc b/ash/touch/touch_transformer_controller.cc
index 8bea2bf5..2fac6625 100644
--- a/ash/touch/touch_transformer_controller.cc
+++ b/ash/touch/touch_transformer_controller.cc
@@ -11,6 +11,7 @@
 #include "ash/shell.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/display/chromeos/display_configurator.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/display/types/display_snapshot.h"
 #include "ui/events/devices/device_data_manager.h"
 
@@ -174,7 +175,7 @@
     single_display = display_manager->GetDisplayInfo(single_display_id);
     UpdateTouchRadius(single_display);
   } else {
-    DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+    display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
     display1_id = list[0];
     display2_id = list[1];
     DCHECK(display1_id != gfx::Display::kInvalidDisplayID &&
diff --git a/ash/wm/dock/docked_window_layout_manager_unittest.cc b/ash/wm/dock/docked_window_layout_manager_unittest.cc
index 5ff61a1..9755749 100644
--- a/ash/wm/dock/docked_window_layout_manager_unittest.cc
+++ b/ash/wm/dock/docked_window_layout_manager_unittest.cc
@@ -31,6 +31,7 @@
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/base/hit_test.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/screen.h"
 #include "ui/views/widget/widget.h"
 #include "ui/wm/core/coordinate_conversion.h"
@@ -544,7 +545,7 @@
   // Layout the secondary display to the bottom of the primary.
   ASSERT_GT(gfx::Screen::GetScreen()->GetNumDisplays(), 1);
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::BOTTOM, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 0));
 
   scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 1000, 201, 310)));
   DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 1000 + 20);
diff --git a/ash/wm/drag_window_resizer_unittest.cc b/ash/wm/drag_window_resizer_unittest.cc
index 9705c75d..24da2889 100644
--- a/ash/wm/drag_window_resizer_unittest.cc
+++ b/ash/wm/drag_window_resizer_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "ash/wm/drag_window_resizer.h"
 
-#include "ash/display/display_layout_builder.h"
 #include "ash/display/display_manager.h"
 #include "ash/display/mouse_cursor_event_filter.h"
 #include "ash/root_window_controller.h"
@@ -24,6 +23,8 @@
 #include "ui/base/hit_test.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/compositor/layer_tree_owner.h"
+#include "ui/display/manager/display_layout.h"
+#include "ui/display/manager/display_layout_builder.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/views/widget/widget.h"
 #include "ui/wm/core/window_util.h"
@@ -425,12 +426,14 @@
 
   // Layout so that all three displays touch each other.
   DisplayManager* display_manager = Shell::GetInstance()->display_manager();
-  DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+  display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
   ASSERT_EQ(3u, list.size());
   ASSERT_EQ(gfx::Screen::GetScreen()->GetPrimaryDisplay().id(), list[0]);
-  DisplayLayoutBuilder builder(list[0]);
-  builder.AddDisplayPlacement(list[1], list[0], DisplayPlacement::RIGHT, 0);
-  builder.AddDisplayPlacement(list[2], list[0], DisplayPlacement::BOTTOM, 0);
+  display::DisplayLayoutBuilder builder(list[0]);
+  builder.AddDisplayPlacement(list[1], list[0],
+                              display::DisplayPlacement::RIGHT, 0);
+  builder.AddDisplayPlacement(list[2], list[0],
+                              display::DisplayPlacement::BOTTOM, 0);
   display_manager->SetLayoutForCurrentDisplays(builder.Build());
   // Sanity check.
   ASSERT_EQ(gfx::Rect(0, 000, 400, 600),
diff --git a/ash/wm/immersive_fullscreen_controller_unittest.cc b/ash/wm/immersive_fullscreen_controller_unittest.cc
index 381b7b0b..7e1f1fb 100644
--- a/ash/wm/immersive_fullscreen_controller_unittest.cc
+++ b/ash/wm/immersive_fullscreen_controller_unittest.cc
@@ -19,6 +19,7 @@
 #include "ui/aura/test/test_window_delegate.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/events/test/test_event_handler.h"
@@ -504,7 +505,7 @@
   // Set up initial state.
   UpdateDisplay("800x600,800x600");
   ash::Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(ash::DisplayPlacement::TOP, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::TOP, 0));
 
   SetEnabled(true);
   ASSERT_TRUE(controller()->IsEnabled());
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc
index e45fb7b0..ff5d1be6 100644
--- a/ash/wm/overview/window_selector_unittest.cc
+++ b/ash/wm/overview/window_selector_unittest.cc
@@ -7,7 +7,6 @@
 
 #include "ash/accessibility_delegate.h"
 #include "ash/ash_switches.h"
-#include "ash/display/display_layout.h"
 #include "ash/drag_drop/drag_drop_controller.h"
 #include "ash/root_window_controller.h"
 #include "ash/screen_util.h"
@@ -47,6 +46,7 @@
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/geometry/point_conversions.h"
@@ -1383,7 +1383,7 @@
 
   UpdateDisplay("400x400,400x400");
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::LEFT, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::LEFT, 0));
   aura::Window::Windows root_windows = Shell::GetAllRootWindows();
   gfx::Rect bounds1(-350, 0, 100, 100);
   gfx::Rect bounds2(0, 0, 100, 100);
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc
index 918b2fd0..0f0e82e 100644
--- a/ash/wm/workspace/workspace_layout_manager_unittest.cc
+++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -7,7 +7,6 @@
 #include <string>
 #include <utility>
 
-#include "ash/display/display_layout.h"
 #include "ash/display/display_manager.h"
 #include "ash/root_window_controller.h"
 #include "ash/screen_util.h"
@@ -30,6 +29,7 @@
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/base/ui_base_types.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/screen.h"
 #include "ui/views/widget/widget.h"
@@ -145,7 +145,7 @@
   aura::Window::Windows root_windows = Shell::GetAllRootWindows();
 
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(DisplayPlacement::TOP, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::TOP, 0));
   EXPECT_EQ("0,-500 400x500", root_windows[1]->GetBoundsInScreen().ToString());
 
   scoped_ptr<aura::Window> window1(
diff --git a/ash/wm/workspace/workspace_window_resizer_unittest.cc b/ash/wm/workspace/workspace_window_resizer_unittest.cc
index 91973fe1..c6e844ed 100644
--- a/ash/wm/workspace/workspace_window_resizer_unittest.cc
+++ b/ash/wm/workspace/workspace_window_resizer_unittest.cc
@@ -24,6 +24,7 @@
 #include "ui/aura/test/test_window_delegate.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/base/hit_test.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/events/gesture_detection/gesture_configuration.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/gfx/geometry/insets.h"
@@ -822,7 +823,7 @@
 
   // Positions the secondary display at the bottom the primary display.
   Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
-      test::CreateDisplayLayout(ash::DisplayPlacement::BOTTOM, 0));
+      test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 0));
 
   {
     window_->SetBounds(gfx::Rect(100, 200, 300, 20));
diff --git a/base/debug/dump_without_crashing.cc b/base/debug/dump_without_crashing.cc
index 4b338ca29..47fd873c 100644
--- a/base/debug/dump_without_crashing.cc
+++ b/base/debug/dump_without_crashing.cc
@@ -18,12 +18,9 @@
 
 namespace debug {
 
-bool DumpWithoutCrashing() {
-  if (dump_without_crashing_function_) {
+void DumpWithoutCrashing() {
+  if (dump_without_crashing_function_)
     (*dump_without_crashing_function_)();
-    return true;
-  }
-  return false;
 }
 
 void SetDumpWithoutCrashingFunction(void (CDECL *function)()) {
diff --git a/base/debug/dump_without_crashing.h b/base/debug/dump_without_crashing.h
index a5c85d5e..b8ed174 100644
--- a/base/debug/dump_without_crashing.h
+++ b/base/debug/dump_without_crashing.h
@@ -17,8 +17,7 @@
 // Before calling this function, call SetDumpWithoutCrashingFunction to pass a
 // function pointer, typically chrome!DumpProcessWithoutCrash.  See example code
 // in chrome_main.cc that does this for chrome.dll.
-// Returns false if called before SetDumpWithoutCrashingFunction.
-BASE_EXPORT bool DumpWithoutCrashing();
+BASE_EXPORT void DumpWithoutCrashing();
 
 // Sets a function that'll be invoked to dump the current process when
 // DumpWithoutCrashing() is called.
diff --git a/base/logging.cc b/base/logging.cc
index 4790ca8..a5f9e11 100644
--- a/base/logging.cc
+++ b/base/logging.cc
@@ -59,7 +59,6 @@
 #include "base/command_line.h"
 #include "base/debug/alias.h"
 #include "base/debug/debugger.h"
-#include "base/debug/dump_without_crashing.h"
 #include "base/debug/stack_trace.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/strings/string_piece.h"
@@ -334,19 +333,6 @@
 
 }  // namespace
 
-#if defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-// Used to implement dump-on-DCHECK. See crbug.com/596231.
-void DCheckDumpWithoutCrashing() {
-  // To ensure we don't risk spamming Crash with dump-on-DCHECK reports we log
-  // only the first[*] DCHECK to fail once DumpWithoutCrashing() is working.
-  // [*] This is racey, but in the pathological case still only results in one
-  // dump per-racing-thread, rather than our aim of one per-process.
-  static bool dump_on_dcheck = true;
-  if (dump_on_dcheck)
-    dump_on_dcheck = !base::debug::DumpWithoutCrashing();
-}
-#endif
-
 LoggingSettings::LoggingSettings()
     : logging_dest(LOG_DEFAULT),
       log_file(nullptr),
diff --git a/base/logging.h b/base/logging.h
index 84d6cc33..07674698 100644
--- a/base/logging.h
+++ b/base/logging.h
@@ -637,17 +637,11 @@
 
 #if DCHECK_IS_ON()
 
-// If DCHECK is configured to dump-without-crashing then omit these, so that
-// anything using them directly will break the build. See crbug.com/596231.
-#if !defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-
 #define COMPACT_GOOGLE_LOG_EX_DCHECK(ClassName, ...) \
   COMPACT_GOOGLE_LOG_EX_FATAL(ClassName , ##__VA_ARGS__)
 #define COMPACT_GOOGLE_LOG_DCHECK COMPACT_GOOGLE_LOG_FATAL
 const LogSeverity LOG_DCHECK = LOG_FATAL;
 
-#endif  // !defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-
 #else  // DCHECK_IS_ON()
 
 // These are just dummy values.
@@ -666,10 +660,6 @@
 #if defined(_PREFAST_) && defined(OS_WIN)
 // See comments on the previous use of __analysis_assume.
 
-#if defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-#error "Only one of _PREFAST_ and DCHECK_IS_DUMP_WITHOUT_CRASH may be set"
-#endif  // defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-
 #define DCHECK(condition)                                               \
   __analysis_assume(!!(condition)),                                     \
   LAZY_STREAM(LOG_STREAM(DCHECK), false)                                \
@@ -680,20 +670,7 @@
   LAZY_STREAM(PLOG_STREAM(DCHECK), false)                               \
   << "Check failed: " #condition ". "
 
-#elif DCHECK_IS_ON() && defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-// DCHECK is configured to dump-without-crashing, rather than logging.
-// See crbug.com/596231.
-
-BASE_EXPORT void DCheckDumpWithoutCrashing();
-
-#define DCHECK(condition)                                       \
-  (condition) ? (void)0 : logging::DCheckDumpWithoutCrashing(), \
-      EAT_STREAM_PARAMETERS
-
-// Since we're uploading a crash dump, not logging, DPCHECK behaves identically.
-#define DPCHECK(condition) DCHECK(condition)
-
-#else  // DCHECK_IS_ON() && defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
+#else  // _PREFAST_
 
 #define DCHECK(condition)                                                \
   LAZY_STREAM(LOG_STREAM(DCHECK), DCHECK_IS_ON() ? !(condition) : false) \
@@ -703,21 +680,10 @@
   LAZY_STREAM(PLOG_STREAM(DCHECK), DCHECK_IS_ON() ? !(condition) : false) \
       << "Check failed: " #condition ". "
 
-#endif  // DCHECK_IS_ON() && defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
+#endif  // _PREFAST_
 
 // Helper macro for binary operators.
 // Don't use this macro directly in your code, use DCHECK_EQ et al below.
-
-#if DCHECK_IS_ON() && defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-// DCHECK is configured to dump-without-crashing, rather than logging.
-// See crbug.com/596231.
-
-// Use logging::Check*Impl() to ensure that operator<<()s don't go unused.
-#define DCHECK_OP(name, op, val1, val2) \
-  DCHECK(logging::Check##name##Impl((val1), (val2), #val1 " " #op " " #val2))
-
-#else  // DCHECK_IS_ON() && defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-
 // The 'switch' is used to prevent the 'else' from being ambiguous when the
 // macro is used in an 'if' clause such as:
 // if (a == 1)
@@ -733,8 +699,6 @@
     logging::LogMessage(__FILE__, __LINE__, ::logging::LOG_DCHECK,    \
                         true_if_passed.message()).stream()
 
-#endif  // DCHECK_IS_ON() && defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-
 // Equality/Inequality checks - compare two values, and log a
 // LOG_DCHECK message including the two values when the result is not
 // as expected.  The values must have operator<<(ostream, ...)
diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc
index e8756f1..22fb855 100644
--- a/base/logging_unittest.cc
+++ b/base/logging_unittest.cc
@@ -234,19 +234,13 @@
   EXPECT_TRUE(DLOG_IS_ON(DCHECK));
 #endif
 
-#if defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-  const bool kDCheckLogsOutput = false;
-#else
-  const bool kDCheckLogsOutput = DCHECK_IS_ON();
-#endif
-
   EXPECT_EQ(0, log_sink_call_count);
   DCHECK(false);
-  EXPECT_EQ(kDCheckLogsOutput ? 1 : 0, log_sink_call_count);
+  EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count);
   DPCHECK(false);
-  EXPECT_EQ(kDCheckLogsOutput ? 2 : 0, log_sink_call_count);
+  EXPECT_EQ(DCHECK_IS_ON() ? 2 : 0, log_sink_call_count);
   DCHECK_EQ(0, 1);
-  EXPECT_EQ(kDCheckLogsOutput ? 3 : 0, log_sink_call_count);
+  EXPECT_EQ(DCHECK_IS_ON() ? 3 : 0, log_sink_call_count);
 }
 
 TEST_F(LoggingTest, DcheckReleaseBehavior) {
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc
index 460c75e..b19a897a 100644
--- a/base/metrics/statistics_recorder.cc
+++ b/base/metrics/statistics_recorder.cc
@@ -113,11 +113,11 @@
       histogram_to_return = histogram;
     } else {
       const std::string& name = histogram->histogram_name();
-      const uint64_t name_hash = histogram->name_hash();
-      DCHECK_NE(0U, name_hash);
-      HistogramMap::iterator it = histograms_->find(name_hash);
+      HistogramMap::iterator it = histograms_->find(name);
       if (histograms_->end() == it) {
-        (*histograms_)[name_hash] = histogram;
+        // The StringKey references the name within |histogram| rather than
+        // making a copy.
+        (*histograms_)[name] = histogram;
         ANNOTATE_LEAKING_OBJECT_PTR(histogram);  // see crbug.com/79322
         // If there are callbacks for this histogram, we set the kCallbackExists
         // flag.
@@ -261,7 +261,6 @@
     return;
 
   for (const auto& entry : *histograms_) {
-    DCHECK_EQ(entry.first, entry.second->name_hash());
     output->push_back(entry.second);
   }
 }
@@ -298,10 +297,9 @@
   if (allocator)
     allocator->ImportHistogramsToStatisticsRecorder();
 
-  HistogramMap::iterator it = histograms_->find(HashMetricName(name));
+  HistogramMap::iterator it = histograms_->find(name);
   if (histograms_->end() == it)
     return NULL;
-  DCHECK_EQ(name, it->second->histogram_name()) << "hash collision";
   return it->second;
 }
 
@@ -346,11 +344,9 @@
     return false;
   callbacks_->insert(std::make_pair(name, cb));
 
-  auto it = histograms_->find(HashMetricName(name));
-  if (it != histograms_->end()) {
-    DCHECK_EQ(name, it->second->histogram_name()) << "hash collision";
+  auto it = histograms_->find(name);
+  if (it != histograms_->end())
     it->second->SetFlags(HistogramBase::kCallbackExists);
-  }
 
   return true;
 }
@@ -366,11 +362,9 @@
   callbacks_->erase(name);
 
   // We also clear the flag from the histogram (if it exists).
-  auto it = histograms_->find(HashMetricName(name));
-  if (it != histograms_->end()) {
-    DCHECK_EQ(name, it->second->histogram_name()) << "hash collision";
+  auto it = histograms_->find(name);
+  if (it != histograms_->end())
     it->second->ClearFlags(HistogramBase::kCallbackExists);
-  }
 }
 
 // static
@@ -407,7 +401,7 @@
 // static
 void StatisticsRecorder::ForgetHistogramForTesting(base::StringPiece name) {
   if (histograms_)
-    histograms_->erase(HashMetricName(name.as_string()));
+    histograms_->erase(name);
 }
 
 // This singleton instance should be started during the single threaded portion
diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h
index 6eaf079..12543b8 100644
--- a/base/metrics/statistics_recorder.h
+++ b/base/metrics/statistics_recorder.h
@@ -32,7 +32,36 @@
 
 class BASE_EXPORT StatisticsRecorder {
  public:
-  typedef std::map<uint64_t, HistogramBase*> HistogramMap;  // Key is name-hash.
+  // A class used as a key for the histogram map below. It always references
+  // a string owned outside of this class, likely in the value of the map.
+  class StringKey : public StringPiece {
+   public:
+    // Constructs the StringKey using various sources. The source must live
+    // at least as long as the created object.
+    StringKey(const std::string& str) : StringPiece(str) {}
+    StringKey(StringPiece str) : StringPiece(str) {}
+
+    // Though StringPiece is better passed by value than by reference, in
+    // this case it's being passed many times and likely already been stored
+    // in memory (not just registers) so the benefit of pass-by-value is
+    // negated.
+    bool operator<(const StringKey& rhs) const {
+      // Since order is unimportant in the map and string comparisons can be
+      // slow, use the length as the primary sort value.
+      if (length() < rhs.length())
+        return true;
+      if (length() > rhs.length())
+        return false;
+
+      // Fall back to an actual string comparison. The lengths are the same
+      // so a simple memory-compare is sufficient. This is slightly more
+      // efficient than calling operator<() for StringPiece which would
+      // again have to check lengths before calling wordmemcmp().
+      return wordmemcmp(data(), rhs.data(), length()) < 0;
+    }
+  };
+
+  typedef std::map<StringKey, HistogramBase*> HistogramMap;
   typedef std::vector<HistogramBase*> Histograms;
 
   // A class for iterating over the histograms held within this global resource.
diff --git a/base/task_scheduler/scheduler_worker_thread.cc b/base/task_scheduler/scheduler_worker_thread.cc
index e03726a..49dde51d 100644
--- a/base/task_scheduler/scheduler_worker_thread.cc
+++ b/base/task_scheduler/scheduler_worker_thread.cc
@@ -17,14 +17,10 @@
 std::unique_ptr<SchedulerWorkerThread>
 SchedulerWorkerThread::CreateSchedulerWorkerThread(
     ThreadPriority thread_priority,
-    const Closure& main_entry_callback,
-    const GetWorkCallback& get_work_callback,
-    const RanTaskFromSequenceCallback& ran_task_from_sequence_callback,
+    Delegate* delegate,
     TaskTracker* task_tracker) {
   std::unique_ptr<SchedulerWorkerThread> worker_thread(
-      new SchedulerWorkerThread(thread_priority, main_entry_callback,
-                                get_work_callback,
-                                ran_task_from_sequence_callback, task_tracker));
+      new SchedulerWorkerThread(thread_priority, delegate, task_tracker));
 
   if (worker_thread->thread_handle_.is_null())
     return nullptr;
@@ -48,36 +44,29 @@
   PlatformThread::Join(thread_handle_);
 }
 
-SchedulerWorkerThread::SchedulerWorkerThread(
-    ThreadPriority thread_priority,
-    const Closure& main_entry_callback,
-    const GetWorkCallback& get_work_callback,
-    const RanTaskFromSequenceCallback& ran_task_from_sequence_callback,
-    TaskTracker* task_tracker)
+SchedulerWorkerThread::SchedulerWorkerThread(ThreadPriority thread_priority,
+                                             Delegate* delegate,
+                                             TaskTracker* task_tracker)
     : wake_up_event_(false, false),
-      main_entry_callback_(main_entry_callback),
-      get_work_callback_(get_work_callback),
-      ran_task_from_sequence_callback_(ran_task_from_sequence_callback),
+      delegate_(delegate),
       task_tracker_(task_tracker) {
-  DCHECK(!main_entry_callback_.is_null());
-  DCHECK(!get_work_callback_.is_null());
-  DCHECK(!ran_task_from_sequence_callback_.is_null());
+  DCHECK(delegate_);
   DCHECK(task_tracker_);
 
-  static const size_t kDefaultStackSize = 0;
+  const size_t kDefaultStackSize = 0;
   PlatformThread::CreateWithPriority(kDefaultStackSize, this, &thread_handle_,
                                      thread_priority);
 }
 
 void SchedulerWorkerThread::ThreadMain() {
-  main_entry_callback_.Run();
+  delegate_->OnMainEntry();
 
   // A SchedulerWorkerThread starts out sleeping.
   wake_up_event_.Wait();
 
   while (!task_tracker_->shutdown_completed() && !ShouldExitForTesting()) {
     // Get the sequence containing the next task to execute.
-    scoped_refptr<Sequence> sequence = get_work_callback_.Run(this);
+    scoped_refptr<Sequence> sequence = delegate_->GetWork(this);
 
     if (!sequence) {
       wake_up_event_.Wait();
@@ -85,15 +74,17 @@
     }
 
     task_tracker_->RunTask(sequence->PeekTask());
-    ran_task_from_sequence_callback_.Run(this, std::move(sequence));
+    delegate_->RanTaskFromSequence(std::move(sequence));
 
     // Calling WakeUp() guarantees that this SchedulerWorkerThread will run
-    // Tasks from Sequences returned by |get_work_callback_| until the callback
-    // returns nullptr. Resetting |wake_up_event_| here doesn't break this
-    // invariant and avoids a useless loop iteration before going to sleep if
-    // WakeUp() is called while this SchedulerWorkerThread is awake.
+    // Tasks from Sequences returned by the GetWork() method of |delegate_|
+    // until it returns nullptr. Resetting |wake_up_event_| here doesn't break
+    // this invariant and avoids a useless loop iteration before going to sleep
+    // if WakeUp() is called while this SchedulerWorkerThread is awake.
     wake_up_event_.Reset();
   }
+
+  delegate_->OnMainExit();
 }
 
 bool SchedulerWorkerThread::ShouldExitForTesting() const {
diff --git a/base/task_scheduler/scheduler_worker_thread.h b/base/task_scheduler/scheduler_worker_thread.h
index 8b129a3..cc3b1b5 100644
--- a/base/task_scheduler/scheduler_worker_thread.h
+++ b/base/task_scheduler/scheduler_worker_thread.h
@@ -8,7 +8,6 @@
 #include <memory>
 
 #include "base/base_export.h"
-#include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/waitable_event.h"
@@ -21,40 +20,46 @@
 
 class TaskTracker;
 
-// A thread that runs Tasks from Sequences returned by a callback.
+// A thread that runs Tasks from Sequences returned by a delegate.
 //
-// A SchedulerWorkerThread is woken up when its WakeUp() method is called. After
-// a wake- up, a SchedulerWorkerThread runs Tasks from Sequences returned by its
-// "get work" callback as long as it doesn't return nullptr. It also
-// periodically checks with its TaskTracker whether shutdown has completed and
-// exits when it has.
+// A SchedulerWorkerThread starts out sleeping. It is woken up by a call to
+// WakeUp(). After a wake-up, a SchedulerWorkerThread runs Tasks from Sequences
+// returned by the GetWork() method of its delegate as long as it doesn't return
+// nullptr. It also periodically checks with its TaskTracker whether shutdown
+// has completed and exits when it has.
 //
 // This class is thread-safe.
 class BASE_EXPORT SchedulerWorkerThread : public PlatformThread::Delegate {
  public:
-  // Callback invoked to get a Sequence from which to run a Task on
-  // |worker_thread|.
-  using GetWorkCallback =
-      Callback<scoped_refptr<Sequence>(SchedulerWorkerThread* worker_thread)>;
+  // Delegate interface for SchedulerWorkerThread. The methods are always called
+  // from the thread managed by the SchedulerWorkerThread instance.
+  class Delegate {
+   public:
+    virtual ~Delegate() = default;
 
-  // Callback invoked after |worker_thread| has tried to run a Task from
-  // |sequence| (a TaskTracker might have prevented the Task from running).
-  using RanTaskFromSequenceCallback =
-      Callback<void(const SchedulerWorkerThread* worker_thread,
-                    scoped_refptr<Sequence> sequence)>;
+    // Called when the main function of the SchedulerWorkerThread enters.
+    virtual void OnMainEntry() = 0;
+
+    // Called when the main function of the SchedulerWorkerThread exits.
+    virtual void OnMainExit() = 0;
+
+    // Called by |worker_thread| to get a Sequence from which to run a Task.
+    virtual scoped_refptr<Sequence> GetWork(
+        SchedulerWorkerThread* worker_thread) = 0;
+
+    // Called after the SchedulerWorkerThread has tried to run a Task from
+    // |sequence| (a TaskTracker might have prevented the Task from running).
+    // The Task is still in |sequence| when this is called.
+    virtual void RanTaskFromSequence(scoped_refptr<Sequence> sequence) = 0;
+  };
 
   // Creates a SchedulerWorkerThread with priority |thread_priority| that runs
-  // Tasks from Sequences returned by |get_work_callback|. |main_entry_callback|
-  // is invoked when the main function of the SchedulerWorkerThread is entered.
-  // |ran_task_from_sequence_callback| is invoked after the
-  // SchedulerWorkerThread has tried to run a Task from a Sequence returned by
-  // |get_work_callback|. |task_tracker| is used to handle shutdown behavior of
-  // Tasks. Returns nullptr if creating the underlying platform thread fails.
+  // Tasks from Sequences returned by |delegate|. |task_tracker| is used to
+  // handle shutdown behavior of Tasks. Returns nullptr if creating the
+  // underlying platform thread fails.
   static std::unique_ptr<SchedulerWorkerThread> CreateSchedulerWorkerThread(
       ThreadPriority thread_priority,
-      const Closure& main_entry_callback,
-      const GetWorkCallback& get_work_callback,
-      const RanTaskFromSequenceCallback& ran_task_from_sequence_callback,
+      Delegate* delegate,
       TaskTracker* task_tracker);
 
   // Destroying a SchedulerWorkerThread in production is not allowed; it is
@@ -62,9 +67,9 @@
   // has returned.
   ~SchedulerWorkerThread() override;
 
-  // Wakes up this SchedulerWorkerThread. After this is called, this
-  // SchedulerWorkerThread will run Tasks from Sequences returned by
-  // |get_work_callback_| until it returns nullptr.
+  // Wakes up this SchedulerWorkerThread if it wasn't already awake. After this
+  // is called, this SchedulerWorkerThread will run Tasks from Sequences
+  // returned by the GetWork() method of its delegate until it returns nullptr.
   void WakeUp();
 
   // Joins this SchedulerWorkerThread. If a Task is already running, it will be
@@ -72,12 +77,9 @@
   void JoinForTesting();
 
  private:
-  SchedulerWorkerThread(
-      ThreadPriority thread_priority,
-      const Closure& main_entry_callback,
-      const GetWorkCallback& get_work_callback,
-      const RanTaskFromSequenceCallback& ran_task_from_sequence_callback,
-      TaskTracker* task_tracker);
+  SchedulerWorkerThread(ThreadPriority thread_priority,
+                        Delegate* delegate,
+                        TaskTracker* task_tracker);
 
   // PlatformThread::Delegate:
   void ThreadMain() override;
@@ -90,9 +92,7 @@
   // Event signaled to wake up this SchedulerWorkerThread.
   WaitableEvent wake_up_event_;
 
-  const Closure main_entry_callback_;
-  const GetWorkCallback get_work_callback_;
-  const RanTaskFromSequenceCallback ran_task_from_sequence_callback_;
+  Delegate* const delegate_;
   TaskTracker* const task_tracker_;
 
   // Synchronizes access to |should_exit_for_testing_|.
diff --git a/base/task_scheduler/scheduler_worker_thread_unittest.cc b/base/task_scheduler/scheduler_worker_thread_unittest.cc
index fcccda1..2796388 100644
--- a/base/task_scheduler/scheduler_worker_thread_unittest.cc
+++ b/base/task_scheduler/scheduler_worker_thread_unittest.cc
@@ -26,51 +26,42 @@
 
 const size_t kNumSequencesPerTest = 150;
 
-class TaskSchedulerWorkerThreadTest : public testing::Test {
+class TaskSchedulerWorkerThreadTest : public testing::Test,
+                                      public SchedulerWorkerThread::Delegate {
  protected:
   TaskSchedulerWorkerThreadTest()
-      : num_main_entry_callback_cv_(lock_.CreateConditionVariable()),
-        num_get_work_callback_cv_(lock_.CreateConditionVariable()),
+      : main_entry_called_(true, false),
+        num_get_work_cv_(lock_.CreateConditionVariable()),
         run_sequences_cv_(lock_.CreateConditionVariable()) {}
 
   void SetUp() override {
     worker_thread_ = SchedulerWorkerThread::CreateSchedulerWorkerThread(
-        ThreadPriority::NORMAL,
-        Bind(&TaskSchedulerWorkerThreadTest::MainEntryCallback,
-             Unretained(this)),
-        Bind(&TaskSchedulerWorkerThreadTest::GetWorkCallback, Unretained(this)),
-        Bind(&TaskSchedulerWorkerThreadTest::RanTaskFromSequenceCallback,
-             Unretained(this)),
-        &task_tracker_);
+        ThreadPriority::NORMAL, this, &task_tracker_);
     ASSERT_TRUE(worker_thread_);
-    WaitForNumMainEntryCallback(1);
+    main_entry_called_.Wait();
   }
 
   void TearDown() override {
+    {
+      AutoSchedulerLock auto_lock(lock_);
+      EXPECT_FALSE(main_exit_called_);
+    }
+
     worker_thread_->JoinForTesting();
 
     AutoSchedulerLock auto_lock(lock_);
-    EXPECT_EQ(1U, num_main_entry_callback_);
+    EXPECT_TRUE(main_exit_called_);
   }
 
-  // Wait until MainEntryCallback() has been called |num_main_entry_callback|
-  // times.
-  void WaitForNumMainEntryCallback(size_t num_main_entry_callback) {
+  // Wait until GetWork() has been called |num_get_work| times.
+  void WaitForNumGetWork(size_t num_get_work) {
     AutoSchedulerLock auto_lock(lock_);
-    while (num_main_entry_callback_ < num_main_entry_callback)
-      num_main_entry_callback_cv_->Wait();
+    while (num_get_work_ < num_get_work)
+      num_get_work_cv_->Wait();
   }
 
-  // Wait until GetWorkCallback() has been called |num_get_work_callback| times.
-  void WaitForNumGetWorkCallback(size_t num_get_work_callback) {
-    AutoSchedulerLock auto_lock(lock_);
-    while (num_get_work_callback_ < num_get_work_callback)
-      num_get_work_callback_cv_->Wait();
-  }
-
-  // Wait until there is no more Sequences to create and
-  // RanTaskFromSequenceCallback() has been invoked once for each Sequence
-  // returned by GetWorkCallback().
+  // Wait until there are no more Sequences to create and RanTaskFromSequence()
+  // has been invoked once for each Sequence returned by GetWork().
   void WaitForAllSequencesToRun() {
     AutoSchedulerLock auto_lock(lock_);
 
@@ -79,12 +70,12 @@
       run_sequences_cv_->Wait();
     }
 
-    // Verify that RanTaskFromSequenceCallback() has been invoked with the
-    // same Sequences that were returned by GetWorkCallback().
+    // Verify that RanTaskFromSequence() has been invoked with the same
+    // Sequences that were returned by GetWork().
     EXPECT_EQ(created_sequences_, run_sequences_);
 
     // Verify that RunTaskCallback() has been invoked once for each Sequence
-    // returned by GetWorkCallback().
+    // returned by GetWork().
     EXPECT_EQ(created_sequences_.size(), num_run_tasks_);
   }
 
@@ -94,32 +85,42 @@
     num_sequences_to_create_ = num_sequences_to_create;
   }
 
-  size_t NumGetWorkCallback() const {
+  void SetMaxGetWork(size_t max_get_work) {
     AutoSchedulerLock auto_lock(lock_);
-    return num_get_work_callback_;
+    max_get_work_ = max_get_work;
   }
 
   std::unique_ptr<SchedulerWorkerThread> worker_thread_;
 
  private:
-  void MainEntryCallback() {
+  // SchedulerWorkerThread::Delegate:
+  void OnMainEntry() override {
+    // Without this |auto_lock|, OnMainEntry() could be called twice without
+    // generating an error.
     AutoSchedulerLock auto_lock(lock_);
-    ++num_main_entry_callback_;
-    num_main_entry_callback_cv_->Signal();
+    EXPECT_FALSE(main_entry_called_.IsSignaled());
+    main_entry_called_.Signal();
   }
 
-  // Returns a Sequence that contains 1 Task if |num_sequences_to_create_| is
-  // greater than 0.
-  scoped_refptr<Sequence> GetWorkCallback(
-      SchedulerWorkerThread* worker_thread) {
+  void OnMainExit() override {
+    AutoSchedulerLock auto_lock(lock_);
+    EXPECT_FALSE(main_exit_called_);
+    main_exit_called_ = true;
+  }
+
+  scoped_refptr<Sequence> GetWork(
+      SchedulerWorkerThread* worker_thread) override {
     EXPECT_EQ(worker_thread_.get(), worker_thread);
 
     {
       AutoSchedulerLock auto_lock(lock_);
 
-      // Increment the number of times that this callback has been invoked.
-      ++num_get_work_callback_;
-      num_get_work_callback_cv_->Signal();
+      // Increment the number of times that this method has been called.
+      ++num_get_work_;
+      num_get_work_cv_->Signal();
+
+      // Verify that this method isn't called more times than expected.
+      EXPECT_LE(num_get_work_, max_get_work_);
 
       // Check if a Sequence should be returned.
       if (num_sequences_to_create_ == 0)
@@ -127,7 +128,7 @@
       --num_sequences_to_create_;
     }
 
-    // Create a Sequence that contains 1 Task.
+    // Create a Sequence that contains one Task.
     scoped_refptr<Sequence> sequence(new Sequence);
     task_tracker_.PostTask(
         Bind(IgnoreResult(&Sequence::PushTask), Unretained(sequence.get())),
@@ -145,18 +146,17 @@
     return sequence;
   }
 
-  void RanTaskFromSequenceCallback(const SchedulerWorkerThread* worker_thread,
-                                   scoped_refptr<Sequence> sequence) {
-    EXPECT_EQ(worker_thread_.get(), worker_thread);
-
+  void RanTaskFromSequence(scoped_refptr<Sequence> sequence) override {
     AutoSchedulerLock auto_lock(lock_);
     run_sequences_.push_back(std::move(sequence));
+    EXPECT_LE(run_sequences_.size(), created_sequences_.size());
     run_sequences_cv_->Signal();
   }
 
   void RunTaskCallback() {
     AutoSchedulerLock auto_lock(lock_);
     ++num_run_tasks_;
+    EXPECT_LE(num_run_tasks_, created_sequences_.size());
   }
 
   TaskTracker task_tracker_;
@@ -164,26 +164,29 @@
   // Synchronizes access to all members below.
   mutable SchedulerLock lock_;
 
-  // Number of times that MainEntryCallback() has been called.
-  size_t num_main_entry_callback_ = 0;
+  // Signaled once OnMainEntry() has been called.
+  WaitableEvent main_entry_called_;
 
-  // Condition variable signaled when |num_main_entry_callback_| is incremented.
-  std::unique_ptr<ConditionVariable> num_main_entry_callback_cv_;
+  // True once OnMainExit() has been called.
+  bool main_exit_called_ = false;
 
-  // Number of Sequences that should be created by GetWorkCallback(). When this
-  // is 0, GetWorkCallback() returns nullptr.
+  // Number of Sequences that should be created by GetWork(). When this
+  // is 0, GetWork() returns nullptr.
   size_t num_sequences_to_create_ = 0;
 
-  // Number of times that GetWorkCallback() has been called.
-  size_t num_get_work_callback_ = 0;
+  // Number of times that GetWork() has been called.
+  size_t num_get_work_ = 0;
 
-  // Condition variable signaled when |num_get_work_callback_| is incremented.
-  std::unique_ptr<ConditionVariable> num_get_work_callback_cv_;
+  // Maximum number of times that GetWork() can be called.
+  size_t max_get_work_ = 0;
 
-  // Sequences created by GetWorkCallback().
+  // Condition variable signaled when |num_get_work_| is incremented.
+  std::unique_ptr<ConditionVariable> num_get_work_cv_;
+
+  // Sequences created by GetWork().
   std::vector<scoped_refptr<Sequence>> created_sequences_;
 
-  // Sequences passed to RanTaskFromSequenceCallback().
+  // Sequences passed to RanTaskFromSequence().
   std::vector<scoped_refptr<Sequence>> run_sequences_;
 
   // Condition variable signaled when a Sequence is added to |run_sequences_|.
@@ -195,45 +198,44 @@
   DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerThreadTest);
 };
 
-// Verify that when GetWorkCallback() continuously returns Sequences, all Tasks
-// in these Sequences run successfully. The SchedulerWorkerThread is woken up
-// once.
-TEST_F(TaskSchedulerWorkerThreadTest, ContinousWork) {
-  // Set GetWorkCallback() to return |kNumSequencesPerTest| Sequences before
-  // starting to return nullptr.
+// Verify that when GetWork() continuously returns Sequences, all Tasks in these
+// Sequences run successfully. The test wakes up the SchedulerWorkerThread once.
+TEST_F(TaskSchedulerWorkerThreadTest, ContinuousWork) {
+  // Set GetWork() to return |kNumSequencesPerTest| Sequences before starting to
+  // return nullptr.
   SetNumSequencesToCreate(kNumSequencesPerTest);
 
+  // Expect |kNumSequencesPerTest| calls to GetWork() in which it returns a
+  // Sequence and one call in which its returns nullptr.
+  const size_t kExpectedNumGetWork = kNumSequencesPerTest + 1;
+  SetMaxGetWork(kExpectedNumGetWork);
+
   // Wake up |worker_thread_| and wait until it has run all the Tasks returned
-  // by GetWorkCallback().
+  // by GetWork().
   worker_thread_->WakeUp();
   WaitForAllSequencesToRun();
-
-  // Expect |kNumSequencesPerTest| calls to GetWorkCallback() in which it
-  // returned a Sequence and 1 call in which it returned nullptr.
-  const size_t expected_num_get_work_callback = kNumSequencesPerTest + 1;
-  WaitForNumGetWorkCallback(expected_num_get_work_callback);
-  EXPECT_EQ(expected_num_get_work_callback, NumGetWorkCallback());
+  WaitForNumGetWork(kExpectedNumGetWork);
 }
 
-// Verify that when GetWorkCallback() alternates between returning a Sequence
-// and returning nullptr, all Tasks in the returned Sequences run successfully.
-// The SchedulerWorkerThread is woken up once for each Sequence.
+// Verify that when GetWork() alternates between returning a Sequence and
+// returning nullptr, all Tasks in the returned Sequences run successfully. The
+// test wakes up the SchedulerWorkerThread once for each Sequence.
 TEST_F(TaskSchedulerWorkerThreadTest, IntermittentWork) {
   for (size_t i = 0; i < kNumSequencesPerTest; ++i) {
-    // Set GetWorkCallback() to return 1 Sequence before starting to return
+    // Set GetWork() to return 1 Sequence before starting to return
     // nullptr.
     SetNumSequencesToCreate(1);
 
-    // Wake up |worker_thread_| and wait until it has run all the Tasks returned
-    // by GetWorkCallback().
+    // Expect |i + 1| calls to GetWork() in which it returns a Sequence and
+    // |i + 1| calls in which it returns nullptr.
+    const size_t expected_num_get_work = 2 * (i + 1);
+    SetMaxGetWork(expected_num_get_work);
+
+    // Wake up |worker_thread_| and wait until it has run the Task returned by
+    // GetWork().
     worker_thread_->WakeUp();
     WaitForAllSequencesToRun();
-
-    // Expect |i| calls to GetWorkCallback() in which it returned a Sequence and
-    // |i| calls in which it returned nullptr.
-    const size_t expected_num_get_work_callback = 2 * (i + 1);
-    WaitForNumGetWorkCallback(expected_num_get_work_callback);
-    EXPECT_EQ(expected_num_get_work_callback, NumGetWorkCallback());
+    WaitForNumGetWork(expected_num_get_work);
   }
 }
 
diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc
index 4ab0d35..e2e250ed5 100644
--- a/base/trace_event/trace_event_impl.cc
+++ b/base/trace_event/trace_event_impl.cc
@@ -293,10 +293,10 @@
   // Category group checked at category creation time.
   DCHECK(!strchr(name_, '"'));
   StringAppendF(out, "{\"pid\":%i,\"tid\":%i,\"ts\":%" PRId64
-                     ","
-                     "\"ph\":\"%c\",\"cat\":\"%s\",\"name\":\"%s\",\"args\":",
-                process_id, thread_id, time_int64, phase_, category_group_name,
-                name_);
+                     ",\"ph\":\"%c\",\"cat\":\"%s\",\"name\":",
+                process_id, thread_id, time_int64, phase_, category_group_name);
+  EscapeJSONString(name_, true, out);
+  *out += ",\"args\":";
 
   // Output argument names and values, stop at first NULL argument name.
   // TODO(oysteine): The dual predicates here is a bit ugly; if the filtering
diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc
index 91155ea..6a1d8a4 100644
--- a/base/trace_event/trace_event_unittest.cc
+++ b/base/trace_event/trace_event_unittest.cc
@@ -2330,6 +2330,16 @@
   EXPECT_EQ(1, int_value);
 }
 
+TEST_F(TraceEventTestFixture, NameIsEscaped) {
+  TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
+                                      TraceLog::RECORDING_MODE);
+  TRACE_EVENT0("category", "name\\with\\backspaces");
+  EndTraceAndFlush();
+
+  EXPECT_TRUE(FindMatchingValue("cat", "category"));
+  EXPECT_TRUE(FindMatchingValue("name", "name\\with\\backspaces"));
+}
+
 namespace {
 
 bool IsArgNameWhitelisted(const char* arg_name) {
diff --git a/base/win/win_util.cc b/base/win/win_util.cc
index b10d5554..4e18d406 100644
--- a/base/win/win_util.cc
+++ b/base/win/win_util.cc
@@ -22,6 +22,8 @@
 #include <signal.h>
 #include <stddef.h>
 #include <stdlib.h>
+#include <tchar.h> // Must be before tpcshrd.h or for any use of _T macro
+#include <tpcshrd.h>
 #include <uiviewsettingsinterop.h>
 #include <windows.ui.viewmanagement.h>
 #include <winstring.h>
@@ -115,12 +117,14 @@
   return PowerDeterminePlatformRoleEx(POWER_PLATFORM_ROLE_V2);
 }
 
+}  // namespace
+
 // Uses the Windows 10 WRL API's to query the current system state. The API's
 // we are using in the function below are supported in Win32 apps as per msdn.
 // It looks like the API implementation is buggy at least on Surface 4 causing
 // it to always return UserInteractionMode_Touch which as per documentation
 // indicates tablet mode.
-bool IsWindows10TabletDevice() {
+bool IsWindows10TabletMode(HWND hwnd) {
   if (GetVersion() < VERSION_WIN10)
     return false;
 
@@ -179,7 +183,7 @@
   // Avoid using GetForegroundWindow here and pass in the HWND of the window
   // intiating the request to display the keyboard.
   hr = view_settings_interop->GetForWindow(
-      ::GetForegroundWindow(),
+      hwnd,
       __uuidof(ABI::Windows::UI::ViewManagement::IUIViewSettings),
       view_settings.ReceiveVoid());
   if (FAILED(hr))
@@ -191,8 +195,6 @@
   return mode == ABI::Windows::UI::ViewManagement::UserInteractionMode_Touch;
 }
 
-}  // namespace
-
 // Returns true if a physical keyboard is detected on Windows 8 and up.
 // Uses the Setup APIs to enumerate the attached keyboards and returns true
 // if the keyboard count is 1 or more.. While this will work in most cases
@@ -476,7 +478,7 @@
     return false;
   }
 
-  if (IsWindows10TabletDevice())
+  if (IsWindows10TabletMode(::GetForegroundWindow()))
     return true;
 
   if (GetSystemMetrics(SM_MAXIMUMTOUCHES) == 0) {
@@ -695,5 +697,15 @@
   return false;
 }
 
+void EnableFlicks(HWND hwnd) {
+  ::RemoveProp(hwnd, MICROSOFT_TABLETPENSERVICE_PROPERTY);
+}
+
+void DisableFlicks(HWND hwnd) {
+  ::SetProp(hwnd, MICROSOFT_TABLETPENSERVICE_PROPERTY,
+      reinterpret_cast<HANDLE>(TABLET_DISABLE_FLICKS |
+          TABLET_DISABLE_FLICKFALLBACKKEYS));
+}
+
 }  // namespace win
 }  // namespace base
diff --git a/base/win/win_util.h b/base/win/win_util.h
index b261ce7..08e0112 100644
--- a/base/win/win_util.h
+++ b/base/win/win_util.h
@@ -123,6 +123,10 @@
 // process is aborted.
 BASE_EXPORT void SetAbortBehaviorForCrashReporting();
 
+// Checks whether the supplied |hwnd| is in Windows 10 tablet mode. Will return
+// false on versions below 10.
+BASE_EXPORT bool IsWindows10TabletMode(HWND hwnd);
+
 // A tablet is a device that is touch enabled and also is being used
 // "like a tablet". This is used by the following:-
 // 1. Metrics:- To gain insight into how users use Chrome.
@@ -174,6 +178,12 @@
 BASE_EXPORT bool GetLoadedModulesSnapshot(HANDLE process,
                                           std::vector<HMODULE>* snapshot);
 
+// Adds or removes the MICROSOFT_TABLETPENSERVICE_PROPERTY property with the
+// TABLET_DISABLE_FLICKS & TABLET_DISABLE_FLICKFALLBACKKEYS flags in order to
+// disable pen flick gestures for the given HWND.
+BASE_EXPORT void EnableFlicks(HWND hwnd);
+BASE_EXPORT void DisableFlicks(HWND hwnd);
+
 }  // namespace win
 }  // namespace base
 
diff --git a/blimp/client/feature/compositor/blimp_context_provider.cc b/blimp/client/feature/compositor/blimp_context_provider.cc
index f4a963e8..43bdd77 100644
--- a/blimp/client/feature/compositor/blimp_context_provider.cc
+++ b/blimp/client/feature/compositor/blimp_context_provider.cc
@@ -42,9 +42,8 @@
 
   context_.reset(gpu::GLInProcessContext::Create(
       nullptr /* service */, nullptr /* surface */, false /* is_offscreen */,
-      widget, gfx::Size(1, 1), nullptr /* share_context */,
-      false /* share_resources */, attribs_for_gles2, gfx::PreferDiscreteGpu,
-      gpu::GLInProcessContextSharedMemoryLimits(),
+      widget, gfx::Size(1, 1), nullptr /* share_context */, attribs_for_gles2,
+      gfx::PreferDiscreteGpu, gpu::GLInProcessContextSharedMemoryLimits(),
       gpu_memory_buffer_manager, nullptr /* memory_limits */));
   context_->SetContextLostCallback(
       base::Bind(&BlimpContextProvider::OnLostContext, base::Unretained(this)));
diff --git a/blimp/engine/app/blimp_content_browser_client.cc b/blimp/engine/app/blimp_content_browser_client.cc
index 55fcb17..8e88f5d 100644
--- a/blimp/engine/app/blimp_content_browser_client.cc
+++ b/blimp/engine/app/blimp_content_browser_client.cc
@@ -5,7 +5,6 @@
 #include "blimp/engine/app/blimp_content_browser_client.h"
 #include "blimp/engine/app/blimp_browser_main_parts.h"
 #include "blimp/engine/app/settings_manager.h"
-#include "blimp/engine/common/blimp_browser_context.h"
 #include "blimp/engine/mojo/blob_channel_service.h"
 #include "content/public/common/service_registry.h"
 
@@ -23,17 +22,6 @@
   return blimp_browser_main_parts_;
 }
 
-net::URLRequestContextGetter* BlimpContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* content_browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  BlimpBrowserContext* blimp_context =
-      static_cast<BlimpBrowserContext*>(content_browser_context);
-  return blimp_context->CreateRequestContext(protocol_handlers,
-                                             std::move(request_interceptors))
-      .get();
-}
-
 void BlimpContentBrowserClient::OverrideWebkitPrefs(
     content::RenderViewHost* render_view_host,
     content::WebPreferences* prefs) {
diff --git a/blimp/engine/app/blimp_content_browser_client.h b/blimp/engine/app/blimp_content_browser_client.h
index f743258..87d174c 100644
--- a/blimp/engine/app/blimp_content_browser_client.h
+++ b/blimp/engine/app/blimp_content_browser_client.h
@@ -22,10 +22,6 @@
   // content::ContentBrowserClient implementation.
   content::BrowserMainParts* CreateBrowserMainParts(
       const content::MainFunctionParams& parameters) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   void OverrideWebkitPrefs(content::RenderViewHost* render_view_host,
                            content::WebPreferences* prefs) override;
   void RegisterRenderProcessMojoServices(
diff --git a/blimp/engine/app/blimp_url_request_context_getter.h b/blimp/engine/app/blimp_url_request_context_getter.h
index 087e70a..43d5395 100644
--- a/blimp/engine/app/blimp_url_request_context_getter.h
+++ b/blimp/engine/app/blimp_url_request_context_getter.h
@@ -9,6 +9,7 @@
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
+#include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
 #include "net/url_request/url_request_context_getter.h"
 
diff --git a/blimp/engine/common/blimp_browser_context.cc b/blimp/engine/common/blimp_browser_context.cc
index f91426a..98a1201f 100644
--- a/blimp/engine/common/blimp_browser_context.cc
+++ b/blimp/engine/common/blimp_browser_context.cc
@@ -101,23 +101,6 @@
   return GetDefaultStoragePartition(this)->GetURLRequestContext();
 }
 
-const scoped_refptr<BlimpURLRequestContextGetter>&
-BlimpBrowserContext::CreateRequestContext(
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  DCHECK(!resource_context_->url_request_context_getter());
-  // net_log_ is owned by BrowserMainParts.
-  resource_context_->set_url_request_context_getter(
-      new BlimpURLRequestContextGetter(
-          ignore_certificate_errors_, GetPath(),
-          content::BrowserThread::GetMessageLoopProxyForThread(
-              content::BrowserThread::IO),
-          content::BrowserThread::GetMessageLoopProxyForThread(
-              content::BrowserThread::FILE),
-          protocol_handlers, std::move(request_interceptors), net_log_));
-  return resource_context_->url_request_context_getter();
-}
-
 net::URLRequestContextGetter* BlimpBrowserContext::GetMediaRequestContext() {
   return GetRequestContext();
 }
@@ -166,5 +149,30 @@
   return nullptr;
 }
 
+net::URLRequestContextGetter* BlimpBrowserContext::CreateRequestContext(
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  DCHECK(!resource_context_->url_request_context_getter());
+  // net_log_ is owned by BrowserMainParts.
+  resource_context_->set_url_request_context_getter(
+      new BlimpURLRequestContextGetter(
+          ignore_certificate_errors_, GetPath(),
+          content::BrowserThread::GetMessageLoopProxyForThread(
+              content::BrowserThread::IO),
+          content::BrowserThread::GetMessageLoopProxyForThread(
+              content::BrowserThread::FILE),
+          protocol_handlers, std::move(request_interceptors), net_log_));
+  return resource_context_->url_request_context_getter().get();
+}
+
+net::URLRequestContextGetter*
+BlimpBrowserContext::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return nullptr;
+}
+
 }  // namespace engine
 }  // namespace blimp
diff --git a/blimp/engine/common/blimp_browser_context.h b/blimp/engine/common/blimp_browser_context.h
index e859a3c..e6caa4e 100644
--- a/blimp/engine/common/blimp_browser_context.h
+++ b/blimp/engine/common/blimp_browser_context.h
@@ -51,12 +51,14 @@
   content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   content::PermissionManager* GetPermissionManager() override;
   content::BackgroundSyncController* GetBackgroundSyncController() override;
-
-  // The content of |protocol_handlers| is swapped into the returned instance.
-  // Caller should take a reference to the returned instance via scoped_refptr.
-  const scoped_refptr<BlimpURLRequestContextGetter>& CreateRequestContext(
+  net::URLRequestContextGetter* CreateRequestContext(
       content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors);
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
  private:
   // Performs initialization of the BlimpBrowserContext while IO is still
diff --git a/build/android/buildbot/bb_host_steps.py b/build/android/buildbot/bb_host_steps.py
index 11f5032..04a0e38 100755
--- a/build/android/buildbot/bb_host_steps.py
+++ b/build/android/buildbot/bb_host_steps.py
@@ -50,8 +50,25 @@
   RunCmd(['gclient', 'runhooks'], halt_on_failure=True)
 
 
+def GenerateBuildFiles(options):
+  cmd = [SrcPath('tools', 'mb', 'mb.py'),
+         'gen',
+         '-m', options.build_properties['mastername'],
+         '-b', options.build_properties['buildername'],
+         '--goma-dir', bb_utils.GOMA_DIR,
+         '//out/%s' % options.target]
+  bb_annotations.PrintNamedStep('generate_build_files')
+  RunCmd(cmd, halt_on_failure=True)
+
+
 def Compile(options):
-  RunHooks(options.target)
+  if options.run_mb:
+    os.environ['GYP_CHROMIUM_NO_ACTION'] = '1'
+    RunHooks(options.target)
+    GenerateBuildFiles(options)
+  else:
+    RunHooks(options.target)
+
   cmd = [os.path.join(SLAVE_SCRIPTS_DIR, 'compile.py'),
          '--build-tool=ninja',
          '--compiler=goma',
@@ -111,6 +128,8 @@
   parser.add_option('--extra_src', default='',
                     help='Path to extra source file. If this is supplied, '
                     'bisect script will use it to override default behavior.')
+  parser.add_option('--run-mb', action='store_true',
+                    help='Use mb to generate build files.')
 
   return parser
 
diff --git a/build/android/buildbot/bb_run_bot.py b/build/android/buildbot/bb_run_bot.py
index 5f57c9bb..4cdb572 100755
--- a/build/android/buildbot/bb_run_bot.py
+++ b/build/android/buildbot/bb_run_bot.py
@@ -129,6 +129,7 @@
   flakiness_server = (
       '--flakiness-server=%s' % constants.UPSTREAM_FLAKINESS_SERVER)
   experimental = ['--experimental']
+  run_mb = ['--run-mb']
   bisect_chrome_output_dir = os.path.abspath(
       os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir,
                    os.pardir, 'bisect', 'src', 'out'))
@@ -180,7 +181,7 @@
         H(compile_step, extra_gyp='component=shared_library'),
         T(std_tests, ['--experimental', flakiness_server])),
       B('gpu-builder-tests-dbg',
-        H(compile_step),
+        H(compile_step, extra_args=run_mb),
         T(['gpu'], ['--install=ContentShell'])),
       # Pass empty T([]) so that logcat monitor and device status check are run.
       B('perf-bisect-builder-tests-dbg',
diff --git a/build/args/blimp_engine.gn b/build/args/blimp_engine.gn
index ef990cd60..b2abe14 100644
--- a/build/args/blimp_engine.gn
+++ b/build/args/blimp_engine.gn
@@ -10,6 +10,7 @@
 use_aura = true
 use_ozone = true
 metrics_use_blimp = true
+use_low_quality_image_interpolation = true
 
 # Not available within docker container.
 use_alsa = false
diff --git a/build/common.gypi b/build/common.gypi
index 0e88c8b..aefad50 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -722,15 +722,6 @@
       'optimize_jni_generation%': 1,
 
       'conditions': [
-        # In Windows official builds, enable DCHECK as dump-without-crashing.
-        ['OS=="win" and buildtype=="Official"', {
-          'dcheck_always_on%': 1,
-          'dcheck_is_dump_without_crash': 1,
-        }, {
-          'dcheck_always_on%': 0,
-          'dcheck_is_dump_without_crash': 0,
-        }],
-
         # A flag for POSIX platforms
         ['OS=="win"', {
           'os_posix%': 0,
@@ -1202,7 +1193,6 @@
     'fastbuild%': '<(fastbuild)',
     'win_z7%': '<(win_z7)',
     'dcheck_always_on%': '<(dcheck_always_on)',
-    'dcheck_is_dump_without_crash%': '<(dcheck_is_dump_without_crash)',
     'tracing_like_official_build%': '<(tracing_like_official_build)',
     'fieldtrial_testing_like_official_build%': '<(fieldtrial_testing_like_official_build)',
     'arm_version%': '<(arm_version)',
@@ -2846,9 +2836,6 @@
       ['dcheck_always_on!=0', {
         'defines': ['DCHECK_ALWAYS_ON=1'],
       }],  # dcheck_always_on!=0
-      ['dcheck_is_dump_without_crash!=0', {
-        'defines': ['DCHECK_IS_DUMP_WITHOUT_CRASH=1'],
-      }],  # dcheck_is_dump_without_crash!=0
       ['tracing_like_official_build!=0', {
         'defines': ['TRACING_IS_OFFICIAL_BUILD=1'],
       }],  # tracing_like_official_build!=0
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn
index 58893181..b6d0b71f 100644
--- a/build/config/BUILD.gn
+++ b/build/config/BUILD.gn
@@ -92,14 +92,6 @@
   if (use_browser_spellchecker) {
     defines += [ "USE_BROWSER_SPELLCHECKER=1" ]
   }
-
-  # In Windows official builds, this will cause DCHECKs to
-  # dump-without-crashing. See crbug.com/596231.
-  if (is_official_build && is_win) {
-    dcheck_always_on = true
-    defines += [ "DCHECK_IS_DUMP_WITHOUT_CRASH=1" ]
-  }
-
   if (dcheck_always_on) {
     defines += [ "DCHECK_ALWAYS_ON=1" ]
   }
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 073f00725..b94134c 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -2180,6 +2180,10 @@
       depfile,
       generated_script,
     ]
+    data = [
+      generated_script,
+    ]
+
     args = [
       "--depfile",
       rebase_path(depfile, root_build_dir),
diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni
index 32f3d99..7055e1e 100644
--- a/build/config/mac/rules.gni
+++ b/build/config/mac/rules.gni
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/toolchain/toolchain.gni")
+
 mac_app_script = "//build/config/mac/mac_app.py"
 
 template("code_sign_mac") {
@@ -210,3 +212,145 @@
     ]
   }
 }
+
+# Template to package a shared library into a Mac framework bundle.
+#
+# Arguments
+#
+#     info_plist:
+#         string, path to the Info.plist file that will be used for the bundle.
+#
+#     output_name:
+#         (optional) string, name of the generated framework without the
+#         .framework suffix. If omitted, defaults to target_name.
+#
+#     framework_version:
+#         (optional) string, version of the framework. Typically this is a
+#         single letter, like "A". If omitted, the Versions/ subdirectory
+#         structure will not be created, and build output will go directly
+#         into the framework subdirectory.
+template("mac_framework") {
+  assert(defined(invoker.deps),
+         "Dependencies must be specified for $target_name")
+  assert(defined(invoker.info_plist),
+         "The Info.plist file must be specified for $target_name")
+
+  _target_name = target_name
+  _output_name = target_name
+  if (defined(invoker.output_name)) {
+    _output_name = invoker.output_name
+  }
+  _framework_name = _output_name + ".framework"
+  _framework_version = ""
+  if (defined(invoker.framework_version)) {
+    _framework_version = invoker.framework_version
+  }
+  _framework_target = _output_name + "_framework"
+
+  _shared_library_target = target_name + "_shared_library"
+  _shared_library_bundle_data = _shared_library_target + "_bundle_data"
+
+  shared_library(_shared_library_target) {
+    visibility = [ ":$_shared_library_bundle_data" ]
+    forward_variables_from(invoker,
+                           "*",
+                           [
+                             "assert_no_deps",
+                             "data_deps",
+                             "info_plist",
+                             "output_name",
+                             "visibility",
+                           ])
+  }
+
+  bundle_data(_shared_library_bundle_data) {
+    visibility = [ ":$_framework_target" ]
+    forward_variables_from(invoker, [ "testonly" ])
+    sources = [
+      "$root_out_dir/${shlib_prefix}${_shared_library_target}${shlib_extension}",
+    ]
+    outputs = [
+      "{{bundle_executable_dir}}/$_output_name",
+    ]
+    public_deps = [
+      ":$_shared_library_target",
+    ]
+  }
+
+  _info_plist_target = target_name + "_info_plist"
+
+  # TODO(rsesek): Process Info.plist variables.
+
+  _info_plist_bundle_data = _info_plist_target + "_bundle_data"
+
+  bundle_data(_info_plist_bundle_data) {
+    visibility = [ ":$_framework_target" ]
+    forward_variables_from(invoker, [ "testonly" ])
+    sources = [
+      invoker.info_plist,
+    ]
+    outputs = [
+      "{{bundle_root_dir}}/Info.plist",
+    ]
+  }
+
+  create_bundle(_framework_target) {
+    visibility = [ ":$_target_name" ]
+    forward_variables_from(invoker,
+                           [
+                             "data_deps",
+                             "deps",
+                             "public_deps",
+                             "testonly",
+                             "visibility",
+                           ])
+
+    if (!defined(deps)) {
+      deps = []
+    }
+    deps += [
+      ":$_info_plist_bundle_data",
+      ":$_shared_library_bundle_data",
+    ]
+
+    bundle_root_dir = "$root_out_dir/$_framework_name"
+    if (_framework_version != "") {
+      bundle_root_dir += "/Versions/$_framework_version"
+    }
+    bundle_resources_dir = "$bundle_root_dir/Resources"
+    bundle_executable_dir = "$bundle_root_dir"
+  }
+
+  if (_framework_version != "") {
+    action(_target_name) {
+      forward_variables_from(invoker,
+                             [
+                               "visibility",
+                               "testonly",
+                             ])
+      script = "$root_out_dir/gyp-mac-tool"
+      outputs = [
+        "$root_out_dir/$_framework_name/Versions/Current",
+      ]
+      args = [
+        "package-framework",
+        "$_framework_name",
+        "$_framework_version",
+      ]
+      deps = [
+        ":$_framework_target",
+      ]
+    }
+  } else {
+    group(_target_name) {
+      forward_variables_from(invoker,
+                             [
+                               "visibility",
+                               "testonly",
+                             ])
+      deps = [
+        ":$_framework_target",
+      ]
+    }
+  }
+}
diff --git a/build/gn_migration.gypi b/build/gn_migration.gypi
index 00fc23f..16fa4cf 100644
--- a/build/gn_migration.gypi
+++ b/build/gn_migration.gypi
@@ -696,7 +696,6 @@
         ['OS=="linux" or OS=="win"', {
           'dependencies': [
             # TODO(GYP): Figure out which of these run on android/mac/win/ios/etc.
-            '../net/net.gyp:net_docs',
             '../remoting/remoting.gyp:ar_sample_test_driver',
 
             # TODO(GYP): in progress - see tfarina.
@@ -724,7 +723,6 @@
             '../content/content_shell_and_tests.gyp:content_shell_crash_service',
             '../gpu/gpu.gyp:angle_end2end_tests',
             '../gpu/gpu.gyp:angle_perftests',
-            '../net/net.gyp:net_docs',
             '../ppapi/ppapi_internal.gyp:ppapi_perftests',
             '../remoting/remoting.gyp:ar_sample_test_driver',
             '../remoting/remoting.gyp:remoting_breakpad_tester',
diff --git a/build/win/copy_cdb_to_output.py b/build/win/copy_cdb_to_output.py
new file mode 100755
index 0000000..d41dd40a
--- /dev/null
+++ b/build/win/copy_cdb_to_output.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import hashlib
+import os
+import shutil
+import sys
+
+script_dir = os.path.dirname(os.path.realpath(__file__))
+src_build_dir = os.path.abspath(os.path.join(script_dir, os.pardir))
+sys.path.insert(0, src_build_dir)
+
+import vs_toolchain
+
+
+def _HexDigest(file_name):
+  hasher = hashlib.sha256()
+  afile = open(file_name, 'rb')
+  blocksize = 65536
+  buf = afile.read(blocksize)
+  while len(buf) > 0:
+    hasher.update(buf)
+    buf = afile.read(blocksize)
+  afile.close()
+  return hasher.hexdigest()
+
+
+def _CopyImpl(file_name, target_dir, source_dir, verbose=True):
+  """Copy |source| to |target| if it doesn't already exist or if it
+  needs to be updated.
+  """
+  target = os.path.join(target_dir, file_name)
+  source = os.path.join(source_dir, file_name)
+  if (os.path.isdir(os.path.dirname(target)) and
+      ((not os.path.isfile(target)) or
+       _HexDigest(source) != _HexDigest(target))):
+    if verbose:
+      print 'Copying %s to %s...' % (source, target)
+    if os.path.exists(target):
+      os.unlink(target)
+    shutil.copy(source, target)
+
+
+def _CopyCDBToOutput(output_dir, target_arch):
+  """Copies the Windows debugging executable cdb.exe to the output
+  directory, which is created if it does not exist. The output
+  directory, and target architecture that should be copied, are
+  passed. Supported values for the target architecture are the GYP
+  values "ia32" and "x64".
+  """
+  if not os.path.isdir(output_dir):
+    os.makedirs(output_dir)
+  vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs()
+  win_sdk_dir = os.path.normpath(os.environ['WINDOWSSDKDIR'])
+  if target_arch == 'ia32':
+    src_arch = 'x86'
+  elif target_arch == 'x64':
+    src_arch = 'x64'
+  else:
+    print 'copy_cdb_to_output.py: unknown target_arch %s' % target_arch
+    sys.exit(1)
+  # We need to copy multiple files, so cache the computed source directory.
+  src_dir = os.path.join(win_sdk_dir, 'Debuggers', src_arch)
+  # Note that the outputs from the "copy_cdb_to_output" target need to
+  # be kept in sync with this list.
+  _CopyImpl('cdb.exe', output_dir, src_dir)
+  _CopyImpl('dbgeng.dll', output_dir, src_dir)
+  _CopyImpl('dbghelp.dll', output_dir, src_dir)
+  _CopyImpl('dbgmodel.dll', output_dir, src_dir)
+  return 0
+
+
+def main():
+  if len(sys.argv) < 2:
+    print >>sys.stderr, 'Usage: copy_cdb_to_output.py <output_dir> ' + \
+        '<target_arch>'
+    return 1
+  return _CopyCDBToOutput(sys.argv[1], sys.argv[2])
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/cc/debug/picture_debug_util.cc b/cc/debug/picture_debug_util.cc
index 50ae60b..dda4dce 100644
--- a/cc/debug/picture_debug_util.cc
+++ b/cc/debug/picture_debug_util.cc
@@ -73,8 +73,8 @@
   size_t serialized_size = stream.bytesWritten();
   scoped_ptr<char[]> serialized_picture(new char[serialized_size]);
   stream.copyTo(serialized_picture.get());
-  base::Base64Encode(std::string(serialized_picture.get(), serialized_size),
-                     output);
+  base::Base64Encode(
+      base::StringPiece(serialized_picture.get(), serialized_size), output);
 }
 
 }  // namespace cc
diff --git a/cc/test/layer_tree_pixel_test.cc b/cc/test/layer_tree_pixel_test.cc
index 82045a4..db86e75 100644
--- a/cc/test/layer_tree_pixel_test.cc
+++ b/cc/test/layer_tree_pixel_test.cc
@@ -54,9 +54,12 @@
     }
     case PIXEL_TEST_GL: {
       bool flipped_output_surface = false;
+      scoped_refptr<TestInProcessContextProvider> compositor(
+          new TestInProcessContextProvider(nullptr));
+      scoped_refptr<TestInProcessContextProvider> worker(
+          new TestInProcessContextProvider(compositor.get()));
       output_surface = make_scoped_ptr(new PixelTestOutputSurface(
-          new TestInProcessContextProvider, new TestInProcessContextProvider,
-          flipped_output_surface));
+          std::move(compositor), std::move(worker), flipped_output_surface));
       break;
     }
   }
diff --git a/cc/test/pixel_test.cc b/cc/test/pixel_test.cc
index 58e5564..f33a6bf 100644
--- a/cc/test/pixel_test.cc
+++ b/cc/test/pixel_test.cc
@@ -124,9 +124,12 @@
                                 bool flipped_output_surface) {
   enable_pixel_output_.reset(new gfx::DisableNullDrawGLBindings);
 
+  scoped_refptr<TestInProcessContextProvider> compositor(
+      new TestInProcessContextProvider(nullptr));
+  scoped_refptr<TestInProcessContextProvider> worker(
+      new TestInProcessContextProvider(compositor.get()));
   output_surface_.reset(new PixelTestOutputSurface(
-      new TestInProcessContextProvider, new TestInProcessContextProvider,
-      flipped_output_surface));
+      std::move(compositor), std::move(worker), flipped_output_surface));
   output_surface_->BindToClient(output_surface_client_.get());
 
   shared_bitmap_manager_.reset(new TestSharedBitmapManager);
diff --git a/cc/test/test_in_process_context_provider.cc b/cc/test/test_in_process_context_provider.cc
index dd05be3..ab9c2ab 100644
--- a/cc/test/test_in_process_context_provider.cc
+++ b/cc/test/test_in_process_context_provider.cc
@@ -26,9 +26,9 @@
 // static
 scoped_ptr<gpu::GLInProcessContext> CreateTestInProcessContext(
     TestGpuMemoryBufferManager* gpu_memory_buffer_manager,
-    TestImageFactory* image_factory) {
+    TestImageFactory* image_factory,
+    gpu::GLInProcessContext* shared_context) {
   const bool is_offscreen = true;
-  const bool share_resources = true;
   gpu::gles2::ContextCreationAttribHelper attribs;
   attribs.alpha_size = 8;
   attribs.blue_size = 8;
@@ -44,31 +44,25 @@
 
   scoped_ptr<gpu::GLInProcessContext> context =
       make_scoped_ptr(gpu::GLInProcessContext::Create(
-          NULL,
-          NULL,
-          is_offscreen,
-          gfx::kNullAcceleratedWidget,
-          gfx::Size(1, 1),
-          NULL,
-          share_resources,
-          attribs,
-          gpu_preference,
+          nullptr, nullptr, is_offscreen, gfx::kNullAcceleratedWidget,
+          gfx::Size(1, 1), shared_context, attribs, gpu_preference,
           gpu::GLInProcessContextSharedMemoryLimits(),
-          gpu_memory_buffer_manager,
-          image_factory));
+          gpu_memory_buffer_manager, image_factory));
 
   DCHECK(context);
   return context;
 }
 
 scoped_ptr<gpu::GLInProcessContext> CreateTestInProcessContext() {
-  return CreateTestInProcessContext(nullptr, nullptr);
+  return CreateTestInProcessContext(nullptr, nullptr, nullptr);
 }
 
-TestInProcessContextProvider::TestInProcessContextProvider()
-    : context_(CreateTestInProcessContext(&gpu_memory_buffer_manager_,
-                                          &image_factory_)) {
-}
+TestInProcessContextProvider::TestInProcessContextProvider(
+    TestInProcessContextProvider* shared_context)
+    : context_(CreateTestInProcessContext(
+          &gpu_memory_buffer_manager_,
+          &image_factory_,
+          (shared_context ? shared_context->context_.get() : nullptr))) {}
 
 TestInProcessContextProvider::~TestInProcessContextProvider() {
   if (gr_context_)
diff --git a/cc/test/test_in_process_context_provider.h b/cc/test/test_in_process_context_provider.h
index b8e1bf8..3303420 100644
--- a/cc/test/test_in_process_context_provider.h
+++ b/cc/test/test_in_process_context_provider.h
@@ -24,11 +24,13 @@
 scoped_ptr<gpu::GLInProcessContext> CreateTestInProcessContext();
 scoped_ptr<gpu::GLInProcessContext> CreateTestInProcessContext(
     TestGpuMemoryBufferManager* gpu_memory_buffer_manager,
-    TestImageFactory* image_factory);
+    TestImageFactory* image_factory,
+    gpu::GLInProcessContext* shared_context);
 
 class TestInProcessContextProvider : public ContextProvider {
  public:
-  TestInProcessContextProvider();
+  explicit TestInProcessContextProvider(
+      TestInProcessContextProvider* shared_context);
 
   bool BindToCurrentThread() override;
   gpu::gles2::GLES2Interface* ContextGL() override;
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc
index 5104bab..64769853 100644
--- a/cc/trees/layer_tree_host_common.cc
+++ b/cc/trees/layer_tree_host_common.cc
@@ -541,29 +541,28 @@
       draw_property_utils::LayerShouldBeSkipped(
           layer, layer_is_drawn, property_trees->transform_tree)) {
     layer->draw_properties().render_target = nullptr;
-    return;
-  }
-
-  bool render_to_separate_surface =
-      IsRootLayer(layer) ||
-      (can_render_to_separate_surface && layer->render_surface());
-
-  if (render_to_separate_surface) {
-    DCHECK(layer->render_surface()) << IsRootLayer(layer)
-                                    << can_render_to_separate_surface
-                                    << layer->has_render_surface();
-    layer->draw_properties().render_target = layer;
-
-    if (layer->mask_layer())
-      layer->mask_layer()->draw_properties().render_target = layer;
-
-    if (layer->replica_layer() && layer->replica_layer()->mask_layer())
-      layer->replica_layer()->mask_layer()->draw_properties().render_target =
-          layer;
-
   } else {
-    DCHECK(!IsRootLayer(layer));
-    layer->draw_properties().render_target = layer->parent()->render_target();
+    bool render_to_separate_surface =
+        IsRootLayer(layer) ||
+        (can_render_to_separate_surface && layer->render_surface());
+
+    if (render_to_separate_surface) {
+      DCHECK(layer->render_surface()) << IsRootLayer(layer)
+                                      << can_render_to_separate_surface
+                                      << layer->has_render_surface();
+      layer->draw_properties().render_target = layer;
+
+      if (layer->mask_layer())
+        layer->mask_layer()->draw_properties().render_target = layer;
+
+      if (layer->replica_layer() && layer->replica_layer()->mask_layer())
+        layer->replica_layer()->mask_layer()->draw_properties().render_target =
+            layer;
+
+    } else {
+      DCHECK(!IsRootLayer(layer));
+      layer->draw_properties().render_target = layer->parent()->render_target();
+    }
   }
   for (size_t i = 0; i < layer->children().size(); ++i) {
     CalculateRenderTarget(
@@ -609,6 +608,13 @@
     if (layer->render_surface())
       layer->ClearRenderSurfaceLayerList();
     layer->draw_properties().render_target = nullptr;
+    for (auto* child_layer : layer->children()) {
+      CalculateRenderSurfaceLayerList(
+          child_layer, property_trees, render_surface_layer_list, descendants,
+          nearest_occlusion_immune_ancestor, layer_is_drawn,
+          can_render_to_separate_surface, current_render_surface_layer_list_id,
+          max_texture_size);
+    }
     return;
   }
 
@@ -655,11 +661,10 @@
     descendants = &(layer->render_surface()->layer_list());
   }
 
-  size_t descendants_size = descendants->size();
-
   bool layer_should_be_skipped = !draw_property_utils::LayerNeedsUpdate(
       layer, layer_is_drawn, property_trees->transform_tree);
   if (!layer_should_be_skipped) {
+    DCHECK(layer->draw_properties().render_target);
     MarkLayerWithRenderSurfaceLayerListId(layer,
                                           current_render_surface_layer_list_id);
     descendants->push_back(layer);
@@ -738,7 +743,7 @@
       layer->render_surface()->SetContentRect(surface_content_rect);
     }
     const LayerImpl* parent_target = layer->parent()->render_target();
-    if (!IsRootLayer(parent_target)) {
+    if (parent_target && !IsRootLayer(parent_target)) {
       gfx::Rect surface_content_rect =
           parent_target->render_surface()->accumulated_content_rect();
       if (render_to_separate_surface) {
@@ -766,13 +771,6 @@
   if (render_to_separate_surface && !IsRootLayer(layer) &&
       layer->render_surface()->DrawableContentRect().IsEmpty()) {
     RemoveSurfaceForEarlyExit(layer, render_surface_layer_list);
-    return;
-  }
-
-  // If neither this layer nor any of its children were added, early out.
-  if (descendants_size == descendants->size()) {
-    DCHECK(!render_to_separate_surface || IsRootLayer(layer));
-    return;
   }
 }
 
@@ -873,8 +871,6 @@
   DCHECK(inputs->can_render_to_separate_surface ==
          inputs->property_trees->non_root_surfaces_enabled);
   const bool subtree_visible_from_ancestor = true;
-  for (auto* layer : *inputs->root_layer->layer_tree_impl())
-    layer->draw_properties().render_target = nullptr;
   CalculateRenderTarget(inputs->root_layer, inputs->property_trees,
                         subtree_visible_from_ancestor,
                         inputs->can_render_to_separate_surface);
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 39b6c33..bdacfa1 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -266,6 +266,7 @@
     "junit/src/org/chromium/chrome/browser/crash/LogcatExtractionCallableTest.java",
     "junit/src/org/chromium/chrome/browser/bookmarks/BookmarkModelUnitTest.java",
     "junit/src/org/chromium/chrome/browser/bookmarks/BookmarkUtilsTest.java",
+    "junit/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionControllerTest.java",
     "junit/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtilsTest.java",
     "junit/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencerTest.java",
     "junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index 661a4db32..a7e90b29 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -79,7 +79,6 @@
 import org.chromium.chrome.browser.signin.SigninPromoScreen;
 import org.chromium.chrome.browser.snackbar.undo.UndoBarController;
 import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
 import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
 import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
 import org.chromium.chrome.browser.tabmodel.TabModel;
@@ -88,7 +87,6 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
-import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
 import org.chromium.chrome.browser.tabmodel.TabWindowManager;
 import org.chromium.chrome.browser.toolbar.ToolbarControlContainer;
 import org.chromium.chrome.browser.util.FeatureUtilities;
@@ -241,6 +239,11 @@
                     closeIfNoTabsAndHomepageEnabled();
                 }
 
+                @Override
+                public void tabRemoved(Tab tab) {
+                    closeIfNoTabsAndHomepageEnabled();
+                }
+
                 private void closeIfNoTabsAndHomepageEnabled() {
                     // If the last tab is closed, and homepage is enabled, then exit Chrome.
                     if (HomepageManager.isHomepageEnabled(getApplicationContext())
@@ -471,9 +474,8 @@
                 mTabModelSelectorImpl.getCurrentTab().setFullscreenManager(getFullscreenManager());
             }
 
-            mFindToolbarManager = new FindToolbarManager(this, getTabModelSelector(),
-                    getToolbarManager()
-                            .getActionModeController().getActionModeCallback());
+            mFindToolbarManager = new FindToolbarManager(this,
+                    getToolbarManager().getActionModeController().getActionModeCallback());
             if (getContextualSearchManager() != null) {
                 getContextualSearchManager().setFindToolbarManager(mFindToolbarManager);
             }
@@ -1089,24 +1091,15 @@
     }
 
     private void moveTabToOtherWindow(Tab tab) {
-        getCurrentTabModel().removeTab(tab);
-        tab.getContentViewCore().updateWindowAndroid(null);
-        tab.attachTabContentManager(null);
-
         Class<? extends Activity> targetActivity =
                 MultiWindowUtils.getInstance().getOpenInOtherWindowActivity(this);
         if (targetActivity == null) return;
 
-        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tab.getUrl()));
+        Intent intent = new Intent(this, targetActivity);
         intent.setClass(this, targetActivity);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
-                | MultiWindowUtils.FLAG_ACTIVITY_LAUNCH_ADJACENT);
-        intent.putExtra(IntentHandler.EXTRA_TAB_ID, tab.getId());
+        intent.setFlags(MultiWindowUtils.FLAG_ACTIVITY_LAUNCH_ADJACENT);
 
-        AsyncTabParamsManager.add(tab.getId(),
-                new TabReparentingParams(tab, intent, null));
-
-        startActivity(intent);
+        tab.detachAndStartReparenting(intent, null, null);
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
index 072a6a7d..4989b9c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
@@ -10,6 +10,7 @@
 
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.ChromeVersionInfo;
 import org.chromium.chrome.browser.ShortcutHelper;
 import org.chromium.chrome.browser.UrlConstants;
 import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
@@ -111,7 +112,7 @@
                     UpdateMenuItemHelper.getInstance().shouldShowMenuItem(mActivity));
 
             // TODO(newt): change this to a flag when command line flags work on Android N.
-            boolean enableMoveToOtherWindow = false;
+            boolean enableMoveToOtherWindow = ChromeVersionInfo.isLocalBuild();
             menu.findItem(R.id.move_to_other_window_menu_id).setVisible(enableMoveToOtherWindow
                     && MultiWindowUtils.getInstance().isOpenInOtherWindowSupported(mActivity));
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
index e8ae88b82..b84119b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
@@ -34,6 +34,8 @@
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.net.NetworkChangeNotifier;
 
+import java.util.List;
+
 /**
  * The activity that enables the user to modify the title, url and parent folder of a bookmark.
  */
@@ -52,6 +54,7 @@
     }
 
     private BookmarkModel mModel;
+    private OfflinePageBridge mOfflinePageBridge;
     private BookmarkId mBookmarkId;
     private EmptyAlertEditText mTitleEditText;
     private EmptyAlertEditText mUrlEditText;
@@ -86,6 +89,7 @@
         setTitle(title);
         BookmarkUtils.setTaskDescriptionInDocumentMode(this, getString(title));
         mModel = new BookmarkModel();
+        mOfflinePageBridge = mModel.getOfflinePageBridge();
         mBookmarkId = BookmarkId.getBookmarkIdFromString(
                 getIntent().getStringExtra(INTENT_BOOKMARK_ID));
         mModel.addObserver(mBookmarkModelObserver);
@@ -108,7 +112,7 @@
             }
         });
 
-        if (OfflinePageBridge.isEnabled() && OfflinePageBridge.canSavePage(
+        if (mOfflinePageBridge != null && OfflinePageBridge.canSavePage(
                 mModel.getBookmarkById(mBookmarkId).getUrl())) {
             mConnectionObserver = new NetworkChangeNotifier.ConnectionTypeObserver() {
                 public void onConnectionTypeChanged(int connectionType) {
@@ -128,7 +132,7 @@
                 }
             };
 
-            mModel.getOfflinePageBridge().addObserver(mOfflinePageModelObserver);
+            mOfflinePageBridge.addObserver(mOfflinePageModelObserver);
             // Make offline page section visible and find controls.
             findViewById(R.id.offline_page_group).setVisibility(View.VISIBLE);
             getIntent().setExtrasClassLoader(WebContents.class.getClassLoader());
@@ -202,10 +206,21 @@
                 String fixedUrl = UrlUtilities.fixupUrl(url);
                 if (fixedUrl != null && !fixedUrl.equals(originalUrl)) {
                     ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
-                    boolean hasOfflinePage = OfflinePageBridge.isEnabled()
-                            && mModel.getOfflinePageBridge().getPageByClientId(clientId) != null;
-                    RecordHistogram.recordBooleanHistogram(
-                            "OfflinePages.Edit.BookmarkUrlChangedForOfflinePage", hasOfflinePage);
+                    if (mOfflinePageBridge != null) {
+                        mOfflinePageBridge.getPagesByClientId(
+                                clientId, new OfflinePageBridge.MultipleOfflinePageItemCallback() {
+                                    @Override
+                                    public void onResult(List<OfflinePageItem> items) {
+                                        // Bookmarks ensures only one item will be present per
+                                        // client ID.
+                                        assert items.size() <= 1;
+
+                                        recordUrlChangeHistogram(!items.isEmpty());
+                                    }
+                                });
+                    } else {
+                        recordUrlChangeHistogram(false);
+                    }
                     mModel.setBookmarkUrl(mBookmarkId, fixedUrl);
                 }
             }
@@ -214,12 +229,17 @@
         super.onStop();
     }
 
+    private void recordUrlChangeHistogram(boolean hasOfflinePage) {
+        RecordHistogram.recordBooleanHistogram(
+                "OfflinePages.Edit.BookmarkUrlChangedForOfflinePage", hasOfflinePage);
+    }
+
     @Override
     protected void onDestroy() {
         recordOfflineButtonAction(false);
-        if (OfflinePageBridge.isEnabled()) {
-            mModel.getOfflinePageBridge().removeObserver(
-                    mOfflinePageModelObserver);
+        if (mOfflinePageBridge != null) {
+            mOfflinePageBridge.removeObserver(mOfflinePageModelObserver);
+            mOfflinePageBridge = null;
         }
 
         if (mConnectionObserver != null) {
@@ -233,20 +253,36 @@
     }
 
     private void updateOfflineSection() {
-        assert OfflinePageBridge.isEnabled();
+        assert mOfflinePageBridge != null;
 
         // It is possible that callback arrives after the activity was dismissed.
         // See http://crbug.com/566939
         if (mModel == null) return;
 
-        OfflinePageBridge offlinePageBridge = mModel.getOfflinePageBridge();
-        offlinePageBridge.checkOfflinePageMetadata();
+        mOfflinePageBridge.checkOfflinePageMetadata();
+
+        ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
+        mOfflinePageBridge.getPagesByClientId(
+                clientId, new OfflinePageBridge.MultipleOfflinePageItemCallback() {
+                    @Override
+                    public void onResult(List<OfflinePageItem> items) {
+                        offlineItemsRetrieved(items);
+                    }
+                });
+    }
+
+    private void offlineItemsRetrieved(List<OfflinePageItem> items) {
+        // It is possible that callback arrives after the activity was dismissed.
+        // See http://crbug.com/566939
+        if (mModel == null || mOfflinePageBridge == null) return;
 
         Button saveRemoveVisitButton = (Button) findViewById(R.id.offline_page_save_remove_button);
         TextView offlinePageInfoTextView = (TextView) findViewById(R.id.offline_page_info_text);
 
-        ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
-        OfflinePageItem offlinePage = offlinePageBridge.getPageByClientId(clientId);
+        // Bookmarks should enforce that only one item exists per client ID.
+        OfflinePageItem offlinePage = null;
+        if (items.size() > 0) offlinePage = items.get(0);
+
         if (offlinePage != null) {
             // Offline page exists. Show information and button to remove.
             offlinePageInfoTextView.setText(
@@ -255,8 +291,8 @@
                             Formatter.formatFileSize(this, offlinePage.getFileSize())));
             updateButtonToDeleteOfflinePage(saveRemoveVisitButton);
             saveRemoveVisitButton.setVisibility(View.VISIBLE);
-        } else if (mWebContents != null && !mWebContents.isDestroyed()
-                && offlinePageBridge.canSavePage(mWebContents.getLastCommittedUrl())) {
+        } else if (mWebContents != null && !mWebContents.isDestroyed() && mOfflinePageBridge != null
+                && mOfflinePageBridge.canSavePage(mWebContents.getLastCommittedUrl())) {
             // Offline page is not saved, but a bookmarked page is opened. Show save button.
             offlinePageInfoTextView.setText(
                     getString(OfflinePageUtils.getStringId(R.string.bookmark_offline_page_none)));
@@ -286,7 +322,7 @@
                 recordOfflineButtonAction(true);
                 button.setEnabled(false);
                 ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
-                mModel.getOfflinePageBridge().deletePage(clientId, new DeletePageCallback() {
+                mOfflinePageBridge.deletePage(clientId, new DeletePageCallback() {
                     @Override
                     public void onDeletePageDone(int deletePageResult) {
                         // TODO(fgorski): Add snackbar upon failure.
@@ -307,16 +343,14 @@
                 recordOfflineButtonAction(true);
                 ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
                 button.setEnabled(false);
-                mModel.getOfflinePageBridge().savePage(
-                        mWebContents, clientId, new SavePageCallback() {
-                            @Override
-                            public void onSavePageDone(
-                                    int savePageResult, String url, long offlineId) {
-                                // TODO(fgorski): Add snackbar upon failure.
-                                // Always update UI, as buttons might be disabled.
-                                updateOfflineSection();
-                            }
-                        });
+                mOfflinePageBridge.savePage(mWebContents, clientId, new SavePageCallback() {
+                    @Override
+                    public void onSavePageDone(int savePageResult, String url, long offlineId) {
+                        // TODO(fgorski): Add snackbar upon failure.
+                        // Always update UI, as buttons might be disabled.
+                        updateOfflineSection();
+                    }
+                });
             }
         });
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
index 34a93ab7..a837258 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
@@ -15,6 +15,7 @@
 import android.widget.TextView;
 
 import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.Callback;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
@@ -24,6 +25,8 @@
 import org.chromium.chrome.browser.widget.RoundedIconGenerator;
 import org.chromium.components.bookmarks.BookmarkId;
 
+import java.util.List;
+
 /**
  * A row view that shows bookmark info in the bookmarks UI.
  */
@@ -83,34 +86,67 @@
         mIconImageView.setImageDrawable(null);
         mTitleView.setText(item.getTitle());
         mDelegate.getLargeIconBridge().getLargeIconForUrl(mUrl, mMinIconSize, this);
-        updateOfflinePageSize(bookmarkId);
+
+        updateOfflineSectionForBookmark(bookmarkId);
+
         return item;
     }
 
-    private void updateOfflinePageSize(BookmarkId bookmarkId) {
-        OfflinePageItem offlinePage = null;
-        OfflinePageBridge bridge = mDelegate.getModel().getOfflinePageBridge();
-        if (mDelegate.getCurrentState() == BookmarkUIState.STATE_FILTER && bridge != null) {
-            offlinePage =
-                    bridge.getPageByClientId(ClientId.createClientIdForBookmarkId(bookmarkId));
+    private void updateOfflineSectionForBookmark(BookmarkId bookmarkId) {
+        boolean hasOfflineSection = mDelegate.getCurrentState() == BookmarkUIState.STATE_FILTER;
+        updateOfflinePageSizeTextVisibility(hasOfflineSection);
+        if (hasOfflineSection) {
+            getOfflinePageItemForBookmark(bookmarkId, new Callback<OfflinePageItem>() {
+                @Override
+                public void onResult(OfflinePageItem offlinePage) {
+                    if (offlinePage == null) {
+                        updateOfflinePageSizeTextVisibility(false);
+                        return;
+                    }
+                    updateOfflinePageSizeText(offlinePage.getFileSize());
+                }
+            });
         }
+    }
+
+    private void getOfflinePageItemForBookmark(
+            BookmarkId bookmarkId, final Callback<OfflinePageItem> callback) {
+        OfflinePageBridge bridge = mDelegate.getModel().getOfflinePageBridge();
+        if (bridge == null) return;
+
+        bridge.getPagesByClientId(ClientId.createClientIdForBookmarkId(bookmarkId),
+                new OfflinePageBridge.MultipleOfflinePageItemCallback() {
+                    @Override
+                    public void onResult(List<OfflinePageItem> items) {
+                        // Offline pages generated by bookmarking a page will have a one-to-one
+                        // mapping from Client ID to Bookmark ID.
+                        assert items.size() <= 1;
+
+                        callback.onResult(items.isEmpty() ? null : items.get(0));
+                    }
+                });
+    }
+
+    private void updateOfflinePageSizeTextVisibility(boolean visible) {
         TextView textView = (TextView) findViewById(R.id.offline_page_size);
+        textView.setVisibility(visible ? View.VISIBLE : View.GONE);
         View bookmarkRowView = findViewById(R.id.bookmark_row);
-        if (offlinePage != null) {
+        if (visible) {
             int verticalPadding = textView.getResources().getDimensionPixelSize(
                     R.dimen.offline_page_item_vertical_spacing);
-            textView.setText(Formatter.formatFileSize(getContext(), offlinePage.getFileSize()));
             // Get the embedded bookmark_row layout, and add padding.  This is because the entries
             // in filter view are larger (contain more items) than normal bookmark view.
             bookmarkRowView.setPadding(0, verticalPadding / 2, 0, verticalPadding / 2);
-            textView.setVisibility(View.VISIBLE);
         } else {
-            textView.setVisibility(View.GONE);
-            // Remove padding when we leave filter view.
             bookmarkRowView.setPadding(0, 0, 0, 0);
         }
     }
 
+    private void updateOfflinePageSizeText(long size) {
+        TextView textView = (TextView) findViewById(R.id.offline_page_size);
+        textView.setText(Formatter.formatFileSize(getContext(), size));
+    }
+
     // LargeIconCallback implementation.
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
index 328fd4f..326e3403 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
@@ -275,9 +275,7 @@
         String url = getBookmarkById(bookmarkId).getUrl();
         if (mOfflinePageBridge == null) return url;
 
-        ClientId clientId = ClientId.createClientIdForBookmarkId(bookmarkId);
-        return mOfflinePageBridge.getLaunchUrlAndMarkAccessed(
-                mOfflinePageBridge.getPageByClientId(clientId), url);
+        return mOfflinePageBridge.getLaunchUrlFromOnlineUrl(url);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
index 9c346bf..5606864c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
@@ -306,6 +306,8 @@
      * Perform any initialization necessary for showing a reparented tab.
      */
     public void prepareForTabReparenting() {
+        if (mHasDrawnOnce) return;
+
         // Set the background to white while we wait for the first swap of buffers. This gets
         // corrected inside the view.
         mCompositorView.setBackgroundColor(Color.WHITE);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
index fa24c6b..026a87e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
@@ -533,6 +533,13 @@
         mPanelMetrics.setDidSearchInvolvePromo();
     }
 
+    /**
+     * @param wasPartOfUrl Whether the selected text was part of a URL.
+     */
+    public void setWasSelectionPartOfUrl(boolean wasPartOfUrl) {
+        mPanelMetrics.setWasSelectionPartOfUrl(wasPartOfUrl);
+    }
+
     // ============================================================================================
     // Panel Rendering
     // ============================================================================================
@@ -705,6 +712,13 @@
     private ContextualSearchPromoHost mPromoHost;
 
     /**
+     * @return Whether the Promo reached a state in which it could be interacted.
+     */
+    public boolean wasPromoInteractive() {
+        return getPromoControl().wasInteractive();
+    }
+
+    /**
      * @return Height of the promo in pixels.
      */
     private float getPromoHeightPx() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelMetrics.java
index 9fc6851..050662a9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelMetrics.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelMetrics.java
@@ -28,6 +28,7 @@
     private boolean mIsSearchPanelFullyPreloaded;
     private boolean mWasIconSpriteAnimated;
     private boolean mWasPanelOpenedBeyondPeek;
+    private boolean mWasSelectionPartOfUrl;
     // Time when the panel peeks into view (not reset by a chained search).
     // Used to log total time the panel is showing (not closed).
     private long mFirstPeekTimeNs;
@@ -84,6 +85,11 @@
                 ContextualSearchUma.logResultsSeen(mWasSearchContentViewSeen, mWasActivatedByTap);
             }
 
+            if (mWasSelectionPartOfUrl) {
+                ContextualSearchUma.logResultsSeenSelectionIsUrl(mWasSearchContentViewSeen,
+                        mWasActivatedByTap);
+            }
+
             ContextualSearchUma.logIconSpriteAnimated(mWasIconSpriteAnimated,
                     mWasSearchContentViewSeen, mWasActivatedByTap);
         }
@@ -157,6 +163,7 @@
             mHasExitedExpanded = false;
             mHasExitedMaximized = false;
             mIsSerpNavigation = false;
+            mWasSelectionPartOfUrl = false;
         }
 
         // TODO(manzagop): When the user opts in, we should replay his actions for the current
@@ -194,6 +201,13 @@
     }
 
     /**
+     * @param wasPartOfUrl Whether the selected text was part of a URL.
+     */
+    public void setWasSelectionPartOfUrl(boolean wasPartOfUrl) {
+        mWasSelectionPartOfUrl = wasPartOfUrl;
+    }
+
+    /**
      * Called to record the time when a search request started, for resolve and prefetch timing.
      */
     public void onSearchRequestStarted() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPromoControl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPromoControl.java
index 16ae169..87cb2cb4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPromoControl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPromoControl.java
@@ -80,6 +80,11 @@
     private float mPromoViewY;
 
     /**
+     * Whether the Promo was in a state that could be interacted.
+     */
+    private boolean mWasInteractive;
+
+    /**
      * Whether the user's choice has been handled.
      */
     private boolean mHasHandledChoice;
@@ -146,6 +151,8 @@
 
         mIsVisible = true;
         mIsMandatory = isMandatory;
+        mWasInteractive = false;
+
         mHeightPx = mContentHeightPx;
     }
 
@@ -201,6 +208,13 @@
     }
 
     /**
+     * @return Whether the Promo reached a state in which it could be interacted.
+     */
+    public boolean wasInteractive() {
+        return mWasInteractive;
+    }
+
+    /**
      * @return The Promo height in pixels.
      */
     public float getHeightPx() {
@@ -425,7 +439,8 @@
         View view = getView();
         if (view == null
                 || !mIsVisible
-                || (mIsShowingView && mPromoViewY == y)) return;
+                || (mIsShowingView && mPromoViewY == y)
+                || mHeightPx == 0.f) return;
 
         float offsetX = mOverlayPanel.getOffsetX() * mDpToPx;
         if (LocalizationUtils.isLayoutRtl()) {
@@ -442,6 +457,9 @@
 
         mIsShowingView = true;
         mPromoViewY = y;
+
+        // The Promo can only be interacted when the View is being displayed.
+        mWasInteractive = true;
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagementDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagementDelegate.java
index a5a39d8a..1809d59 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagementDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagementDelegate.java
@@ -20,11 +20,6 @@
     ChromeActivity getChromeActivity();
 
     /**
-     * Called when the promo Panel gets closed, to log the outcome.
-     */
-    void logPromoOutcome();
-
-    /**
      * Promotes the current Content View Core in the Contextual Search Panel to its own Tab.
      */
     void promoteToTab();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
index 7b86b523..767b4aa 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
@@ -120,6 +120,7 @@
     private boolean mIsShowingPeekPromo;
     private boolean mWouldShowPeekPromo;
     private boolean mIsShowingPromo;
+    private boolean mIsMandatoryPromo;
     private boolean mDidLogPromoOutcome;
 
     /**
@@ -343,9 +344,9 @@
             mPolicy.logPeekPromoMetrics(mIsShowingPeekPromo, mWouldShowPeekPromo);
         }
 
-        if (mIsShowingPromo && !mDidLogPromoOutcome) {
-            // TODO(pedrosimonetti): add separate metric for the mandatory promo.
-            logPromoOutcome();
+        if (mIsShowingPromo && !mDidLogPromoOutcome && mSearchPanel.wasPromoInteractive()) {
+            ContextualSearchUma.logPromoOutcome(mWasActivatedByTap, mIsMandatoryPromo);
+            mDidLogPromoOutcome = true;
         }
 
         mIsShowingPromo = false;
@@ -459,8 +460,9 @@
         // Note: now that the contextual search has properly started, set the promo involvement.
         if (mPolicy.isPromoAvailable()) {
             mIsShowingPromo = true;
+            mIsMandatoryPromo = mPolicy.isMandatoryPromoAvailable();
             mDidLogPromoOutcome = false;
-            mSearchPanel.setIsPromoActive(true, mPolicy.isMandatoryPromoAvailable());
+            mSearchPanel.setIsPromoActive(true, mIsMandatoryPromo);
             mSearchPanel.setDidSearchInvolvePromo();
         }
 
@@ -602,6 +604,9 @@
             final String encoding, final String surroundingText, int startOffset, int endOffset) {
         GSAContextDisplaySelection selection =
                 new GSAContextDisplaySelection(encoding, surroundingText, startOffset, endOffset);
+        mSearchPanel.setWasSelectionPartOfUrl(
+                ContextualSearchSelectionController.isSelectionPartOfUrl(
+                        surroundingText, startOffset, endOffset));
         notifyShowContextualSearch(selection);
     }
 
@@ -1009,12 +1014,6 @@
         }
     }
 
-    @Override
-    public void logPromoOutcome() {
-        ContextualSearchUma.logPromoOutcome(mWasActivatedByTap);
-        mDidLogPromoOutcome = true;
-    }
-
     /**
      * @return Whether the given HTTP result code represents a failure or not.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionController.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionController.java
index 5e665f7b..c79c532 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionController.java
@@ -14,6 +14,7 @@
 import org.chromium.content_public.browser.GestureStateListener;
 import org.chromium.ui.touch_selection.SelectionEventType;
 
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
@@ -42,6 +43,14 @@
 
     private static final String CONTAINS_WORD_PATTERN = "(\\w|\\p{L}|\\p{N})+";
     private static final String SINGLE_DIGIT_PATTERN = "^\\d$";
+    // A URL is:
+    //   0-1:  schema://
+    //   1+:   any word char, _ or -
+    //   1+:   . followed by 1+ of any word char, _ or -
+    //   0-1:  0+ of any word char or .,@?^=%&:/~#- followed by any word char or @?^-%&/~+#-
+    // TODO(twellington): expand accepted schemas? Require a schema?
+    private static final Pattern URL_PATTERN = Pattern.compile("((http|https|file)://)?"
+            + "([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?");
 
     // Max selection length must be limited or the entire request URL can go past the 2K limit.
     private static final int MAX_SELECTION_LENGTH = 100;
@@ -468,6 +477,30 @@
     }
 
     /**
+     * @param selectionContext The String including the surrounding text and the selection.
+     * @param startOffset The offset to the start of the selection (inclusive).
+     * @param endOffset The offset to the end of the selection (non-inclusive).
+     * @return Whether the selection is part of URL. A valid URL is:
+     *         0-1:  schema://
+     *         1+:   any word char, _ or -
+     *         1+:   . followed by 1+ of any word char, _ or -
+     *         0-1:  0+ of any word char or .,@?^=%&:/~#- followed by any word char or @?^-%&/~+#-
+     */
+    public static boolean isSelectionPartOfUrl(String selectionContext, int startOffset,
+            int endOffset) {
+        Matcher matcher = URL_PATTERN.matcher(selectionContext);
+
+        // Starts are inclusive and ends are non-inclusive for both GSAContext & matcher.
+        while (matcher.find()) {
+            if (startOffset >= matcher.start() && endOffset <= matcher.end()) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * @param word A given word.
      * @return Whether the given word is blacklisted.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java
index bbe4c01..1bb7186 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java
@@ -649,17 +649,26 @@
     }
 
     /**
-     * Logs the outcome of the promo (first run flow).
+     * Logs the outcome of the Promo.
      * Logs multiple histograms; with and without the originating gesture.
      * @param wasTap Whether the gesture that originally caused the panel to show was a Tap.
+     * @param wasMandatory Whether the Promo was mandatory.
      */
-    public static void logPromoOutcome(boolean wasTap) {
+    public static void logPromoOutcome(boolean wasTap, boolean wasMandatory) {
         int preferenceCode = getPreferenceValue();
         RecordHistogram.recordEnumeratedHistogram("Search.ContextualSearchFirstRunFlowOutcome",
                 preferenceCode, PREFERENCE_HISTOGRAM_BOUNDARY);
+
         int preferenceByGestureCode = getPromoByGestureStateCode(preferenceCode, wasTap);
-        RecordHistogram.recordEnumeratedHistogram("Search.ContextualSearchPromoOutcomeByGesture",
-                preferenceByGestureCode, PROMO_BY_GESTURE_BOUNDARY);
+        if (wasMandatory) {
+            RecordHistogram.recordEnumeratedHistogram(
+                    "Search.ContextualSearchMandatoryPromoOutcomeByGesture",
+                    preferenceByGestureCode, PROMO_BY_GESTURE_BOUNDARY);
+        } else {
+            RecordHistogram.recordEnumeratedHistogram(
+                    "Search.ContextualSearchPromoOutcomeByGesture",
+                    preferenceByGestureCode, PROMO_BY_GESTURE_BOUNDARY);
+        }
     }
 
     /**
@@ -761,6 +770,20 @@
     }
 
     /**
+     * Logs whether search results were seen when the selection was part of a URL.
+     * Unlike ContextualSearchResultsSeen, this histogram is logged for both decided and undecided
+     * users.
+     * @param wasPanelSeen Whether the panel was seen.
+     * @param wasTap Whether the gesture that originally caused the panel to show was a Tap.
+     */
+    public static void logResultsSeenSelectionIsUrl(boolean wasPanelSeen, boolean wasTap) {
+        int result = wasPanelSeen ? (wasTap ? RESULTS_SEEN_FROM_TAP : RESULTS_SEEN_FROM_LONG_PRESS)
+                : (wasTap ? RESULTS_NOT_SEEN_FROM_TAP : RESULTS_NOT_SEEN_FROM_LONG_PRESS);
+        RecordHistogram.recordEnumeratedHistogram(
+                "Search.ContextualSearchResultsSeenSelectionWasUrl", result, RESULTS_SEEN_BOUNDARY);
+    }
+
+    /**
      * Logs whether search results were seen, whether the search provider icon sprite was animated
      * when the panel first appeared, and the triggering gesture.
      * @param wasIconSpriteAnimated Whether the search provider icon sprite was animated when the
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
index 788662b..0f59feee 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -8,6 +8,7 @@
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.IBinder;
 import android.os.StrictMode;
 import android.support.customtabs.CustomTabsCallback;
@@ -23,7 +24,6 @@
 import android.widget.RemoteViews;
 
 import org.chromium.base.ApiCompatibilityUtils;
-import org.chromium.base.FieldTrialList;
 import org.chromium.base.Log;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.VisibleForTesting;
@@ -33,7 +33,6 @@
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
-import org.chromium.chrome.browser.ChromeVersionInfo;
 import org.chromium.chrome.browser.IntentHandler;
 import org.chromium.chrome.browser.IntentHandler.ExternalAppId;
 import org.chromium.chrome.browser.KeyboardShortcuts;
@@ -49,12 +48,10 @@
 import org.chromium.chrome.browser.rappor.RapporServiceBridge;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabIdManager;
-import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
 import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
 import org.chromium.chrome.browser.tabmodel.TabModelObserver;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
-import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
 import org.chromium.chrome.browser.toolbar.ToolbarControlContainer;
 import org.chromium.chrome.browser.util.ColorUtils;
 import org.chromium.chrome.browser.util.FeatureUtilities;
@@ -268,7 +265,7 @@
         LayoutManagerDocument layoutDriver = new CustomTabLayoutManager(getCompositorViewHolder());
         initializeCompositorContent(layoutDriver, findViewById(R.id.url_bar),
                 (ViewGroup) findViewById(android.R.id.content), controlContainer);
-        mFindToolbarManager = new FindToolbarManager(this, getTabModelSelector(),
+        mFindToolbarManager = new FindToolbarManager(this,
                 getToolbarManager().getActionModeController().getActionModeCallback());
         if (getContextualSearchManager() != null) {
             getContextualSearchManager().setFindToolbarManager(mFindToolbarManager);
@@ -703,9 +700,10 @@
      * @return Whether or not the tab was sent over successfully.
      */
     boolean openCurrentUrlInBrowser(boolean forceReparenting) {
-        if (getActivityTab() == null) return false;
+        Tab tab = getActivityTab();
+        if (tab == null) return false;
 
-        String url = getActivityTab().getUrl();
+        String url = tab.getUrl();
         if (DomDistillerUrlUtils.isDistilledPage(url)) {
             url = DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(url);
         }
@@ -723,45 +721,28 @@
             StrictMode.setThreadPolicy(oldPolicy);
         }
 
+        Bundle startActivityOptions = ActivityOptionsCompat.makeCustomAnimation(
+                this, R.anim.abc_fade_in, R.anim.abc_fade_out).toBundle();
         if (willChromeHandleIntent || forceReparenting) {
-            intent.setPackage(getPackageName());
+            Runnable finalizeCallback = new Runnable() {
+                @Override
+                public void run() {
+                    finishAndClose();
+                }
+            };
 
-            boolean enableTabReparenting = ChromeVersionInfo.isLocalBuild()
-                    || ChromeVersionInfo.isCanaryBuild() || ChromeVersionInfo.isDevBuild()
-                    || FieldTrialList.findFullName("TabReparenting").startsWith("Enabled")
-                    || forceReparenting;
-            if (enableTabReparenting) {
-                // Take the activity tab and set it aside for reparenting.
-                final Tab tab = getActivityTab();
-                // TODO(yusufo): The removal should happen as a part of the callback or as a part of
-                // onDestroy when finish() gets called. Find a way to do this properly without
-                // confusing the TabModel and without hiding the tab. crbug.com/590278
-                getCurrentTabModel().removeTab(getActivityTab());
-                mMainTab = null;
-                tab.getContentViewCore().updateWindowAndroid(null);
-                tab.attachTabContentManager(null);
-
-                Runnable finalizeCallback = new Runnable() {
-                    @Override
-                    public void run() {
-                        finishAndClose();
-                    }
-                };
-                AsyncTabParamsManager.add(
-                        tab.getId(), new TabReparentingParams(tab, intent, finalizeCallback));
-                intent.putExtra(IntentHandler.EXTRA_TAB_ID, tab.getId());
+            mMainTab = null;
+            tab.detachAndStartReparenting(intent, startActivityOptions, finalizeCallback);
+        } else {
+            // Temporarily allowing disk access while fixing. TODO: http://crbug.com/581860
+            StrictMode.allowThreadDiskReads();
+            StrictMode.allowThreadDiskWrites();
+            try {
+                startActivity(intent, startActivityOptions);
+            } finally {
+                StrictMode.setThreadPolicy(oldPolicy);
             }
         }
-
-        // Temporarily allowing disk access while fixing. TODO: http://crbug.com/581860
-        StrictMode.allowThreadDiskReads();
-        StrictMode.allowThreadDiskWrites();
-        try {
-            startActivity(intent, ActivityOptionsCompat.makeCustomAnimation(
-                    this, R.anim.abc_fade_in, R.anim.abc_fade_out).toBundle());
-        } finally {
-            StrictMode.setThreadPolicy(oldPolicy);
-        }
         return true;
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java
index dad262aa..e38fb571d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java
@@ -54,6 +54,7 @@
 import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
 import org.chromium.chrome.browser.tabmodel.SingleTabModelSelector;
 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
+import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
 import org.chromium.chrome.browser.tabmodel.document.ActivityDelegate;
 import org.chromium.chrome.browser.tabmodel.document.AsyncTabCreationParams;
 import org.chromium.chrome.browser.tabmodel.document.DocumentTabModel;
@@ -611,7 +612,8 @@
 
         if (params != null && params.getTabToReparent() != null) {
             mTab = params.getTabToReparent();
-            mTab.reparentToActivity(this, new DocumentTabDelegateFactory());
+            mTab.attachAndFinishReparenting(this, new DocumentTabDelegateFactory(),
+                    (TabReparentingParams) params);
         } else {
             mTab = createActivityTab(asyncParams);
         }
@@ -718,9 +720,8 @@
         initializeCompositorContent(layoutDriver, findViewById(R.id.url_bar),
                 (ViewGroup) findViewById(android.R.id.content), controlContainer);
 
-        mFindToolbarManager = new FindToolbarManager(this, getTabModelSelector(),
-                getToolbarManager().getActionModeController()
-                        .getActionModeCallback());
+        mFindToolbarManager = new FindToolbarManager(this,
+                getToolbarManager().getActionModeController().getActionModeCallback());
 
         if (getContextualSearchManager() != null) {
             getContextualSearchManager().setFindToolbarManager(mFindToolbarManager);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
index a76da29..2591170e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
@@ -58,7 +58,7 @@
 
     public ExternalNavigationDelegateImpl(Tab tab) {
         mTab = tab;
-        mApplicationContext = tab.getContentViewCore().getContext().getApplicationContext();
+        mApplicationContext = tab.getWindowAndroid().getApplicationContext();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java
index dc02b4f1..5a8fbb2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java
@@ -284,43 +284,22 @@
 
     /**
      * Gets the offline pages associated with a provided client ID.
-     * TODO(http://crbug.com/589526): Rename to just OfflinePageBridge#getPagesByClientId and
-     * remove the synchronous method OfflinePageBridge#getPageByClientId.
      *
      * @param clientId Client's ID associated with an offline page.
      * @return A {@link OfflinePageItem} matching the bookmark Id or <code>null</code> if none
      * exist.
      */
-    @VisibleForTesting
-    public void getPagesByClientIdAsync(
+    public void getPagesByClientId(
             final ClientId clientId, final MultipleOfflinePageItemCallback callback) {
         runWhenLoaded(new Runnable() {
             @Override
             public void run() {
-                callback.onResult(getPagesByClientId(clientId));
+                callback.onResult(getPagesByClientIdInternal(clientId));
             }
         });
     }
 
-    /**
-     * Gets an offline page associated with a provided client ID.
-     * This method is deprecated.  Use OfflinePageBridge#getPagesByClientIdAsync.
-     *
-     * @param clientId Client's ID associated with an offline page.
-     * @return A {@link OfflinePageItem} matching the bookmark Id or <code>null</code> if none
-     * exist.
-     */
-    public OfflinePageItem getPageByClientId(ClientId clientId) {
-        List<OfflinePageItem> result = getPagesByClientId(clientId);
-        if (result.isEmpty()) {
-            return null;
-        }
-
-        // TODO: a better job of choosing which page (e.g. timestamp?)
-        return result.get(0);
-    }
-
-    private List<OfflinePageItem> getPagesByClientId(ClientId clientId) {
+    private List<OfflinePageItem> getPagesByClientIdInternal(ClientId clientId) {
         Set<Long> ids = getOfflineIdsForClientId(clientId);
         List<OfflinePageItem> result = new ArrayList<>();
         for (long offlineId : ids) {
@@ -362,17 +341,6 @@
     }
 
     /**
-     * Gets an offline page associated with a provided online URL.
-     * This method is deprecated. Use OfflinePageBridge#getPagesByOnlineUrl.
-     *
-     * @param onlineURL URL of the page.
-     * @return An {@link OfflinePageItem} matching the URL or <code>null</code> if none exist.
-     */
-    public OfflinePageItem getPageByOnlineUrl(String onlineUrl) {
-        return nativeGetPageByOnlineURL(mNativeOfflinePageBridge, onlineUrl);
-    }
-
-    /**
      * Gets the offline pages associated with the provided offline URL.
      *
      * @param string URL pointing to the offline copy of the web page.
@@ -559,7 +527,8 @@
      * @param onlineUrl Online URL to launch if offline is not available.
      * @return The launch URL.
      */
-    public String getLaunchUrlAndMarkAccessed(OfflinePageItem page, String onlineUrl) {
+    @VisibleForTesting
+    String getLaunchUrlAndMarkAccessed(OfflinePageItem page, String onlineUrl) {
         if (page == null) return onlineUrl;
 
         boolean isOnline = OfflinePageUtils.isConnected();
@@ -585,7 +554,7 @@
      */
     public String getOfflineUrlForOnlineUrl(String onlineUrl) {
         assert mIsNativeOfflinePageModelLoaded;
-        OfflinePageItem item = getPageByOnlineUrl(onlineUrl);
+        OfflinePageItem item = nativeGetPageByOnlineURL(mNativeOfflinePageBridge, onlineUrl);
         if (item == null) return null;
 
         return item.getOfflineUrl();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java
index 78318e3..867f56f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java
@@ -26,6 +26,7 @@
 @ThreadSafe
 public class PhysicalWebUma {
     private static final String TAG = "PhysicalWeb";
+    private static final String HAS_DEFERRED_METRICS_KEY = "PhysicalWeb.HasDeferredMetrics";
     private static final String OPT_IN_DECLINE_BUTTON_PRESS_COUNT =
             "PhysicalWeb.OptIn.DeclineButtonPressed";
     private static final String OPT_IN_ENABLE_BUTTON_PRESS_COUNT =
@@ -205,65 +206,19 @@
         sUploadAllowed = true;
 
         // Read the metrics.
-        UmaUploader uploader = new UmaUploader();
         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
-        uploader.urlSelectedCount = prefs.getInt(URL_SELECTED_COUNT, 0);
-        uploader.optInDeclineButtonTapCount = prefs.getInt(OPT_IN_DECLINE_BUTTON_PRESS_COUNT, 0);
-        uploader.optInEnableButtonTapCount = prefs.getInt(OPT_IN_ENABLE_BUTTON_PRESS_COUNT, 0);
-        uploader.optInHighPriorityNotificationCount =
-                prefs.getInt(OPT_IN_HIGH_PRIORITY_NOTIFICATION_COUNT, 0);
-        uploader.optInMinPriorityNotificationCount =
-                prefs.getInt(OPT_IN_MIN_PRIORITY_NOTIFICATION_COUNT, 0);
-        uploader.optInNotificationPressCount = prefs.getInt(OPT_IN_NOTIFICATION_PRESS_COUNT, 0);
-        uploader.prefsFeatureDisabledCount = prefs.getInt(PREFS_FEATURE_DISABLED_COUNT, 0);
-        uploader.prefsFeatureEnabledCount = prefs.getInt(PREFS_FEATURE_ENABLED_COUNT, 0);
-        uploader.prefsLocationDeniedCount = prefs.getInt(PREFS_LOCATION_DENIED_COUNT, 0);
-        uploader.prefsLocationGrantedCount = prefs.getInt(PREFS_LOCATION_GRANTED_COUNT, 0);
-        uploader.pwsBackgroundResolveTimes = prefs.getString(PWS_BACKGROUND_RESOLVE_TIMES, "[]");
-        uploader.pwsForegroundResolveTimes = prefs.getString(PWS_FOREGROUND_RESOLVE_TIMES, "[]");
-        uploader.standardNotificationPressDelays =
-                prefs.getString(STANDARD_NOTIFICATION_PRESS_DELAYS, "[]");
-        uploader.optInNotificationPressDelays =
-                prefs.getString(OPT_IN_NOTIFICATION_PRESS_DELAYS, "[]");
-        uploader.totalUrlsInitialCounts = prefs.getString(TOTAL_URLS_INITIAL_COUNTS, "[]");
-        uploader.totalUrlsRefreshCounts = prefs.getString(TOTAL_URLS_REFRESH_COUNTS, "[]");
-        uploader.activityReferrals = prefs.getString(ACTIVITY_REFERRALS, "[]");
-
-        // If the metrics are empty, we are done.
-        if (uploader.isEmpty()) {
-            return;
+        if (prefs.getBoolean(HAS_DEFERRED_METRICS_KEY, false)) {
+            AsyncTask.THREAD_POOL_EXECUTOR.execute(new UmaUploader(prefs));
         }
-
-        // Clear out the stored deferred metrics that we are about to upload.
-        prefs.edit()
-                .remove(URL_SELECTED_COUNT)
-                .remove(OPT_IN_DECLINE_BUTTON_PRESS_COUNT)
-                .remove(OPT_IN_ENABLE_BUTTON_PRESS_COUNT)
-                .remove(OPT_IN_HIGH_PRIORITY_NOTIFICATION_COUNT)
-                .remove(OPT_IN_MIN_PRIORITY_NOTIFICATION_COUNT)
-                .remove(OPT_IN_NOTIFICATION_PRESS_COUNT)
-                .remove(PREFS_FEATURE_DISABLED_COUNT)
-                .remove(PREFS_FEATURE_ENABLED_COUNT)
-                .remove(PREFS_LOCATION_DENIED_COUNT)
-                .remove(PREFS_LOCATION_GRANTED_COUNT)
-                .remove(PWS_BACKGROUND_RESOLVE_TIMES)
-                .remove(PWS_FOREGROUND_RESOLVE_TIMES)
-                .remove(STANDARD_NOTIFICATION_PRESS_DELAYS)
-                .remove(OPT_IN_NOTIFICATION_PRESS_DELAYS)
-                .remove(TOTAL_URLS_INITIAL_COUNTS)
-                .remove(TOTAL_URLS_REFRESH_COUNTS)
-                .remove(ACTIVITY_REFERRALS)
-                .apply();
-
-        // Finally, upload the metrics.
-        AsyncTask.THREAD_POOL_EXECUTOR.execute(uploader);
     }
 
     private static void storeAction(Context context, String key) {
         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
-        SharedPreferences.Editor prefsEditor = prefs.edit();
         int count = prefs.getInt(key, 0);
-        prefsEditor.putInt(key, count + 1).apply();
+        prefs.edit()
+                .putBoolean(HAS_DEFERRED_METRICS_KEY, true)
+                .putInt(key, count + 1)
+                .apply();
     }
 
     private static void storeValue(Context context, String key, Object value) {
@@ -273,6 +228,10 @@
         try {
             values = new JSONArray(prefs.getString(key, "[]"));
             values.put(value);
+            prefsEditor
+                    .putBoolean(HAS_DEFERRED_METRICS_KEY, true)
+                    .putString(key, values.toString())
+                    .apply();
         } catch (JSONException e) {
             Log.e(TAG, "JSONException when storing " + key + " stats", e);
             prefsEditor.remove(key).apply();
@@ -298,78 +257,38 @@
     }
 
     private static class UmaUploader implements Runnable {
-        public int urlSelectedCount;
-        public int optInDeclineButtonTapCount;
-        public int optInEnableButtonTapCount;
-        public int optInHighPriorityNotificationCount;
-        public int optInMinPriorityNotificationCount;
-        public int optInNotificationPressCount;
-        public int prefsFeatureDisabledCount;
-        public int prefsFeatureEnabledCount;
-        public int prefsLocationDeniedCount;
-        public int prefsLocationGrantedCount;
-        public String pwsBackgroundResolveTimes;
-        public String pwsForegroundResolveTimes;
-        public String standardNotificationPressDelays;
-        public String optInNotificationPressDelays;
-        public String totalUrlsInitialCounts;
-        public String totalUrlsRefreshCounts;
-        public String activityReferrals;
+        SharedPreferences mPrefs;
 
-        public boolean isEmpty() {
-            return urlSelectedCount == 0
-                    && optInDeclineButtonTapCount == 0
-                    && optInEnableButtonTapCount == 0
-                    && optInHighPriorityNotificationCount == 0
-                    && optInMinPriorityNotificationCount == 0
-                    && optInNotificationPressCount == 0
-                    && prefsFeatureDisabledCount == 0
-                    && prefsFeatureEnabledCount == 0
-                    && prefsLocationDeniedCount == 0
-                    && prefsLocationGrantedCount == 0
-                    && pwsBackgroundResolveTimes.equals("[]")
-                    && pwsForegroundResolveTimes.equals("[]")
-                    && standardNotificationPressDelays.equals("[]")
-                    && optInNotificationPressDelays.equals("[]")
-                    && totalUrlsInitialCounts.equals("[]")
-                    && totalUrlsRefreshCounts.equals("[]")
-                    && activityReferrals.equals("[]");
-        }
-
-        UmaUploader() {
+        UmaUploader(SharedPreferences prefs) {
+            mPrefs = prefs;
         }
 
         @Override
         public void run() {
-            uploadActions(urlSelectedCount, URL_SELECTED_COUNT);
-            uploadActions(optInDeclineButtonTapCount, OPT_IN_DECLINE_BUTTON_PRESS_COUNT);
-            uploadActions(optInEnableButtonTapCount, OPT_IN_ENABLE_BUTTON_PRESS_COUNT);
-            uploadActions(optInHighPriorityNotificationCount,
-                    OPT_IN_HIGH_PRIORITY_NOTIFICATION_COUNT);
-            uploadActions(optInMinPriorityNotificationCount,
-                    OPT_IN_MIN_PRIORITY_NOTIFICATION_COUNT);
-            uploadActions(optInNotificationPressCount, OPT_IN_NOTIFICATION_PRESS_COUNT);
-            uploadActions(prefsFeatureDisabledCount, PREFS_FEATURE_DISABLED_COUNT);
-            uploadActions(prefsFeatureEnabledCount, PREFS_FEATURE_ENABLED_COUNT);
-            uploadActions(prefsLocationDeniedCount, PREFS_LOCATION_DENIED_COUNT);
-            uploadActions(prefsLocationGrantedCount, PREFS_LOCATION_GRANTED_COUNT);
-            uploadTimes(pwsBackgroundResolveTimes, PWS_BACKGROUND_RESOLVE_TIMES,
-                    TimeUnit.MILLISECONDS);
-            uploadTimes(pwsForegroundResolveTimes, PWS_FOREGROUND_RESOLVE_TIMES,
-                    TimeUnit.MILLISECONDS);
-            uploadTimes(standardNotificationPressDelays, STANDARD_NOTIFICATION_PRESS_DELAYS,
-                    TimeUnit.MILLISECONDS);
-            uploadTimes(optInNotificationPressDelays, OPT_IN_NOTIFICATION_PRESS_DELAYS,
-                    TimeUnit.MILLISECONDS);
-            uploadCounts(totalUrlsInitialCounts, TOTAL_URLS_INITIAL_COUNTS);
-            uploadCounts(totalUrlsRefreshCounts, TOTAL_URLS_REFRESH_COUNTS);
-            uploadEnums(activityReferrals, ACTIVITY_REFERRALS, ListUrlsActivity.REFERER_BOUNDARY);
+            uploadActions(URL_SELECTED_COUNT);
+            uploadActions(OPT_IN_DECLINE_BUTTON_PRESS_COUNT);
+            uploadActions(OPT_IN_ENABLE_BUTTON_PRESS_COUNT);
+            uploadActions(OPT_IN_HIGH_PRIORITY_NOTIFICATION_COUNT);
+            uploadActions(OPT_IN_MIN_PRIORITY_NOTIFICATION_COUNT);
+            uploadActions(OPT_IN_NOTIFICATION_PRESS_COUNT);
+            uploadActions(PREFS_FEATURE_DISABLED_COUNT);
+            uploadActions(PREFS_FEATURE_ENABLED_COUNT);
+            uploadActions(PREFS_LOCATION_DENIED_COUNT);
+            uploadActions(PREFS_LOCATION_GRANTED_COUNT);
+            uploadTimes(PWS_BACKGROUND_RESOLVE_TIMES, TimeUnit.MILLISECONDS);
+            uploadTimes(PWS_FOREGROUND_RESOLVE_TIMES, TimeUnit.MILLISECONDS);
+            uploadTimes(STANDARD_NOTIFICATION_PRESS_DELAYS, TimeUnit.MILLISECONDS);
+            uploadTimes(OPT_IN_NOTIFICATION_PRESS_DELAYS, TimeUnit.MILLISECONDS);
+            uploadCounts(TOTAL_URLS_INITIAL_COUNTS);
+            uploadCounts(TOTAL_URLS_REFRESH_COUNTS);
+            uploadEnums(ACTIVITY_REFERRALS, ListUrlsActivity.REFERER_BOUNDARY);
+            removePref(HAS_DEFERRED_METRICS_KEY);
         }
 
-        private static void uploadActions(int count, String key) {
-            for (int i = 0; i < count; i++) {
-                RecordUserAction.record(key);
-            }
+        private void removePref(String key) {
+            mPrefs.edit()
+                    .remove(key)
+                    .apply();
         }
 
         private static Number[] parseJsonNumberArray(String jsonArrayStr) {
@@ -413,7 +332,17 @@
             return array;
         }
 
-        private static void uploadTimes(String jsonTimesStr, final String key, final TimeUnit tu) {
+        private void uploadActions(String key) {
+            int count = mPrefs.getInt(key, 0);
+            removePref(key);
+            for (int i = 0; i < count; i++) {
+                RecordUserAction.record(key);
+            }
+        }
+
+        private void uploadTimes(final String key, final TimeUnit tu) {
+            String jsonTimesStr = mPrefs.getString(key, "[]");
+            removePref(key);
             Long[] times = parseJsonLongArray(jsonTimesStr);
             if (times == null) {
                 Log.e(TAG, "Error reporting " + key + " with values: " + jsonTimesStr);
@@ -424,7 +353,9 @@
             }
         }
 
-        private static void uploadCounts(String jsonCountsStr, final String key) {
+        private void uploadCounts(final String key) {
+            String jsonCountsStr = mPrefs.getString(key, "[]");
+            removePref(key);
             Integer[] counts = parseJsonIntegerArray(jsonCountsStr);
             if (counts == null) {
                 Log.e(TAG, "Error reporting " + key + " with values: " + jsonCountsStr);
@@ -435,7 +366,9 @@
             }
         }
 
-        private static void uploadEnums(String jsonEnumsStr, final String key, int boundary) {
+        private void uploadEnums(final String key, int boundary) {
+            String jsonEnumsStr = mPrefs.getString(key, "[]");
+            removePref(key);
             Integer[] values = parseJsonIntegerArray(jsonEnumsStr);
             if (values == null) {
                 Log.e(TAG, "Error reporting " + key + " with values: " + jsonEnumsStr);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
index 14136d35..f0d54629 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -10,7 +10,9 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Color;
+import android.net.Uri;
 import android.os.Build;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.provider.Browser;
@@ -37,6 +39,7 @@
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeApplication;
 import org.chromium.chrome.browser.FrozenNativePage;
+import org.chromium.chrome.browser.IntentHandler;
 import org.chromium.chrome.browser.IntentHandler.TabOpenType;
 import org.chromium.chrome.browser.NativePage;
 import org.chromium.chrome.browser.SwipeRefreshHandler;
@@ -69,12 +72,14 @@
 import org.chromium.chrome.browser.snackbar.SnackbarManager;
 import org.chromium.chrome.browser.ssl.SecurityStateModel;
 import org.chromium.chrome.browser.tab.TabUma.TabCreationState;
+import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
 import org.chromium.chrome.browser.tabmodel.SingleTabModelSelector;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
 import org.chromium.chrome.browser.tabmodel.TabModelImpl;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
 import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
 import org.chromium.components.navigation_interception.InterceptNavigationDelegate;
 import org.chromium.components.security_state.ConnectionSecurityLevel;
@@ -1395,13 +1400,54 @@
     }
 
     /**
-     * Detaches tab and related objects from an existing activity and attaches to a new one. This
-     * updates many delegates inside the tab and {@link ContentViewCore} both on java and native
-     * sides.
+     * Begins the tab reparenting process. Detaches the tab from its current activity and fires
+     * an Intent to reparent the tab into its new host activity.
+     *
+     * @param intent An optional intent with the desired component, flags, or extras to use when
+     *               launching the new host activity. This intent's URI and action will be
+     *               overriden. This may be null if no intent customization is needed.
+     * @param startActivityOptions Options to pass to {@link Activity#startActivity(Intent, Bundle)}
+     * @param finalizeCallback A callback that will be called after the tab is attached to the new
+     *                         host activity in {@link #attachAndFinishReparenting}.
+     * @return Whether reparenting succeeded. If false, the tab was not removed and the intent was
+     *         not fired.
+     */
+    public boolean detachAndStartReparenting(Intent intent, Bundle startActivityOptions,
+            Runnable finalizeCallback) {
+        ChromeActivity activity = getActivity();
+        if (activity == null) return false;
+        TabModelSelector tabModelSelector = getTabModelSelector();
+        if (tabModelSelector == null) return false;
+        tabModelSelector.getModel(mIncognito).removeTab(this);
+
+        if (mContentViewCore != null) mContentViewCore.updateWindowAndroid(null);
+        attachTabContentManager(null);
+
+        if (intent == null) intent = new Intent();
+        intent.setPackage(activity.getPackageName());
+        intent.setAction(Intent.ACTION_VIEW);
+        intent.setData(Uri.parse(getUrl()));
+        intent.putExtra(IntentHandler.EXTRA_TAB_ID, mId);
+        IntentHandler.addTrustedIntentExtras(intent, activity);
+
+        AsyncTabParamsManager.add(mId,
+                new TabReparentingParams(this, intent, finalizeCallback));
+
+        activity.startActivity(intent, startActivityOptions);
+        return true;
+    }
+
+    /**
+     * Finishes the tab reparenting process. Attaches the tab to the new activity, and updates the
+     * tab and related objects to reference the new activity. This updates many delegates inside the
+     * tab and {@link ContentViewCore} both on java and native sides.
+     *
      * @param activity The new activity this tab should be associated with.
      * @param tabDelegateFactory The new delegate factory this tab should be using.
+     * @Param reparentingParams The TabReparentingParams associated with this reparenting process.
      */
-    public void reparentToActivity(ChromeActivity activity, TabDelegateFactory tabDelegateFactory) {
+    public void attachAndFinishReparenting(ChromeActivity activity,
+            TabDelegateFactory tabDelegateFactory, TabReparentingParams reparentingParams) {
         // TODO(yusufo): Share these calls with the construction related calls.
         // crbug.com/590281
 
@@ -1422,6 +1468,8 @@
         mTopControlsVisibilityDelegate = mDelegateFactory.createTopControlsVisibilityDelegate(this);
         setInterceptNavigationDelegate(mDelegateFactory.createInterceptNavigationDelegate(this));
         mAppBannerManager = mDelegateFactory.createAppBannerManager(this);
+
+        reparentingParams.finalizeTabReparenting();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
index d476c3c4..8f825f6b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -121,8 +121,7 @@
 
                 TabReparentingParams params = (TabReparentingParams) asyncParams;
                 tab = params.getTabToReparent();
-                tab.reparentToActivity(mActivity, new TabDelegateFactory());
-                params.finalizeTabReparenting();
+                tab.attachAndFinishReparenting(mActivity, new TabDelegateFactory(), params);
             } else if (asyncParams != null && asyncParams.getWebContents() != null) {
                 openInForeground = true;
                 WebContents webContents = asyncParams.getWebContents();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
index ba7bc66..d795155 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
@@ -85,9 +85,9 @@
 
     @Override
     public void removeTab(Tab tab) {
-        for (TabModelObserver obs : mObservers) obs.tabRemoved(tab);
-
         removeTabAndSelectNext(tab, TabSelectionType.FROM_USER, true, true);
+
+        for (TabModelObserver obs : mObservers) obs.tabRemoved(tab);
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java
index b75f132..63d44f1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelObserver.java
@@ -102,7 +102,7 @@
     void allTabsClosureCommitted();
 
     /**
-     * Called when a tab is removed.
+     * Called after a tab has been removed. At this point, the tab is no longer in the tab model.
      *
      * @param tab The tab that has been removed.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index edc07ba..f744e33 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -287,6 +287,12 @@
                 updateTabCount();
                 refreshSelectedTab();
             }
+
+            @Override
+            public void tabRemoved(Tab tab) {
+                updateTabCount();
+                refreshSelectedTab();
+            }
         };
 
         mTabObserver = new EmptyTabObserver() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java
index a661eb6..87842a4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/UpgradeIntentService.java
@@ -23,7 +23,7 @@
 public class UpgradeIntentService extends IntentService {
 
     private static final String TAG = "UpgradeIntentService";
-    private static final long TIMEOUT_MS = 15000;
+    private static final long TIMEOUT_MS = 10000;
 
     public static void startMigrationIfNecessary(Context context) {
         if (!DocumentModeAssassin.getInstance().isMigrationNecessary()) return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewWrapper.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewWrapper.java
index 549d127d..c3cd962 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewWrapper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewWrapper.java
@@ -82,6 +82,11 @@
             public void allTabsPendingClosure(List<Integer> tabIds) {
                 updateEmptyContainerState();
             }
+
+            @Override
+            public void tabRemoved(Tab tab) {
+                updateEmptyContainerState();
+            }
         };
         mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() {
             @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java
index 932f598..ccc4919c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbar.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.widget.findinpage;
 
+import android.animation.Animator;
 import android.annotation.SuppressLint;
 import android.content.ClipData;
 import android.content.ClipboardManager;
@@ -45,6 +46,7 @@
 import org.chromium.chrome.browser.widget.TintedImageButton;
 import org.chromium.chrome.browser.widget.VerticallyFixedEditText;
 import org.chromium.ui.UiUtils;
+import org.chromium.ui.base.WindowAndroid;
 
 /** A toolbar providing find in page functionality. */
 public class FindToolbar extends LinearLayout
@@ -61,11 +63,12 @@
 
     private FindResultBar mResultBar = null;
 
-    protected TabModelSelector mTabModelSelector;
+    private TabModelSelector mTabModelSelector;
     private final TabModelSelectorObserver mTabModelSelectorObserver;
     private final TabModelObserver mTabModelObserver;
     private Tab mCurrentTab;
     private final TabObserver mTabObserver;
+    private WindowAndroid mWindowAndroid;
     private FindInPageBridge mFindInPageBridge;
     private FindToolbarObserver mObserver;
 
@@ -489,6 +492,13 @@
     }
 
     /**
+     * Sets the WindowAndroid in which the find toolbar will be shown. Needed for animations.
+     */
+    public void setWindowAndroid(WindowAndroid windowAndroid) {
+        mWindowAndroid = windowAndroid;
+    }
+
+    /**
      * Handles updating any visual elements of the find toolbar based on changes to the tab model.
      * @param isIncognito Whether the current tab model is incognito or not.
      */
@@ -588,6 +598,7 @@
 
         mFindInPageBridge.destroy();
         mFindInPageBridge = null;
+        mCurrentTab = null;
         mActive = false;
     }
 
@@ -605,6 +616,13 @@
         setResultsBarVisibility(false);
     }
 
+    /**
+     * @see WindowAndroid#startAnimationOverContent(Animator)
+     */
+    protected void startAnimationOverContent(Animator animation) {
+        mWindowAndroid.startAnimationOverContent(animation);
+    }
+
     @VisibleForTesting
     public FindResultBar getFindResultBar() {
         return mResultBar;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java
index 946c4468..1d3152b9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarManager.java
@@ -4,14 +4,13 @@
 
 package org.chromium.chrome.browser.widget.findinpage;
 
-import android.app.Activity;
 import android.view.ActionMode;
 import android.view.View;
 import android.view.ViewStub;
 
 import org.chromium.base.ObserverList;
 import org.chromium.chrome.R;
-import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.ui.base.DeviceFormFactor;
 
 /**
@@ -19,22 +18,18 @@
  */
 public class FindToolbarManager {
     private FindToolbar mFindToolbar;
-    private final Activity mActivity;
-    private final TabModelSelector mTabModelSelector;
+    private final ChromeActivity mActivity;
     private final ActionMode.Callback mCallback;
     private final ObserverList<FindToolbarObserver> mObservers;
 
     /**
      * Creates an instance of a {@link FindToolbarManager}.
-     * @param activity An Activity that represents a parent of the {@link android.view.ViewStub}.
-     * @param selector The {@link TabModelSelector} that will interact with the {@link FindToolbar}.
+     * @param activity The ChromeActivity that contains the {@link FindToolbar}.
      * @param callback The ActionMode.Callback that will be used when selection occurs on the
      *         {@link FindToolbar}.
      */
-    public FindToolbarManager(
-            Activity activity, TabModelSelector selector, ActionMode.Callback callback) {
+    public FindToolbarManager(ChromeActivity activity, ActionMode.Callback callback) {
         mActivity = activity;
-        mTabModelSelector = selector;
         mCallback = callback;
         mObservers = new ObserverList<FindToolbarObserver>();
     }
@@ -73,7 +68,8 @@
                 stubId = R.id.find_toolbar_tablet_stub;
             }
             mFindToolbar = (FindToolbar) ((ViewStub) mActivity.findViewById(stubId)).inflate();
-            mFindToolbar.setTabModelSelector(mTabModelSelector);
+            mFindToolbar.setTabModelSelector(mActivity.getTabModelSelector());
+            mFindToolbar.setWindowAndroid(mActivity.getWindowAndroid());
             mFindToolbar.setActionModeCallbackForTextEdit(mCallback);
             mFindToolbar.setObserver(new FindToolbarObserver() {
                 @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java
index 4880104..8085737 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java
@@ -150,9 +150,7 @@
                     mCurrentAnimation = null;
                 }
             });
-            mTabModelSelector.getCurrentTab()
-                             .getWindowAndroid()
-                             .startAnimationOverContent(mCurrentAnimation);
+            startAnimationOverContent(mCurrentAnimation);
         }
     }
 
@@ -172,9 +170,7 @@
 
         if (nextAnimator != null) {
             mCurrentAnimation = nextAnimator;
-            mTabModelSelector.getCurrentTab()
-                             .getWindowAndroid()
-                             .startAnimationOverContent(nextAnimator);
+            startAnimationOverContent(nextAnimator);
             postInvalidateOnAnimation();
         }
     }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/OWNERS b/chrome/android/javatests/src/org/chromium/chrome/browser/download/OWNERS
new file mode 100644
index 0000000..5abf5a1
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/OWNERS
@@ -0,0 +1 @@
+qinmin@chromium.org
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java
index 5d4117cc0..0c62cca 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java
@@ -353,7 +353,7 @@
         ThreadUtils.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                mOfflinePageBridge.getPagesByClientIdAsync(
+                mOfflinePageBridge.getPagesByClientId(
                         clientId, new OfflinePageBridge.MultipleOfflinePageItemCallback() {
                             @Override
                             public void onResult(List<OfflinePageItem> items) {
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionControllerTest.java
new file mode 100644
index 0000000..c061452
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchSelectionControllerTest.java
@@ -0,0 +1,148 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.contextualsearch;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.chromium.base.test.util.Feature;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+/**
+ * Tests the ContextualSearchSelectionController#isSelectionPartOfUrl() method.
+ */
+@RunWith(BlockJUnit4ClassRunner.class)
+public class ContextualSearchSelectionControllerTest {
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testBasicUrlExtraction() {
+        String testSentence = "A sentence containing a http://www.example.com valid url";
+
+        // Select "com".
+        assertEquals("com", testSentence.subSequence(43, 46));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 43, 46));
+
+        // Select "http".
+        assertEquals("http", testSentence.subSequence(24, 28));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 24, 28));
+
+        // Select "www".
+        assertEquals("www", testSentence.subSequence(31, 34));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 31, 34));
+
+        // Select "example".
+        assertEquals("example", testSentence.subSequence(35, 42));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 35, 42));
+
+        // Select "containing".
+        assertEquals("containing", testSentence.subSequence(11, 21));
+        assertFalse(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 11, 21));
+
+        // Select "url".
+        assertEquals("url", testSentence.subSequence(53, 56));
+        assertFalse(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 53, 56));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testUrlWithAnchorAndNoSchema() {
+        String testSentence = "This is a sentence about example.com/foo#bar.";
+
+        // Select "foo".
+        assertEquals("foo", testSentence.subSequence(37, 40));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 37, 40));
+
+        // Select "bar".
+        assertEquals("bar", testSentence.subSequence(41, 44));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 41, 44));
+
+        // Select "This".
+        assertEquals("This", testSentence.subSequence(0, 4));
+        assertFalse(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 0, 4));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testUrlSurroundedByParens() {
+        String testSentence = "This is another sentence (example.com).";
+
+        // Select "com".
+        assertEquals("com", testSentence.subSequence(34, 37));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 34, 37));
+
+        // Select "(".
+        assertEquals("(", testSentence.subSequence(25, 26));
+        assertFalse(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 25, 26));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testUrlWithHttpsSchema() {
+        String testSentence = "https://supersecure.net.";
+
+        // Select "supersecure".
+        assertEquals("supersecure", testSentence.subSequence(8, 19));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 8, 19));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testUrlWithFileSchema() {
+        String testSentence = "file://some_text_file.txt";
+
+        // Select "text".
+        assertEquals("text", testSentence.subSequence(12, 16));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 12, 16));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testUrlWithPortAndQuery() {
+        String testSentence = "website.com:8080/html?query";
+
+        // Select "8080".
+        assertEquals("8080", testSentence.subSequence(12, 16));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 12, 16));
+
+        // Select "query".
+        assertEquals("query", testSentence.subSequence(22, 27));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 22, 27));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testIpAddress() {
+        String testSentence = "127.0.0.1";
+
+        // Select "0".
+        assertEquals("0", testSentence.subSequence(4, 5));
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 4, 5));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testEmailAddress() {
+        String testSentence = "Please email me at username@domain.com or call...";
+
+        // Select "username".
+        assertEquals("username", testSentence.subSequence(19, 27));
+        assertFalse(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 19, 27));
+    }
+
+    @Test
+    @Feature({"ContextualSearchSelectionController"})
+    public void testUrlLikeSyntax() {
+        String testSentence = "Example sentence with no URLs, but.weird.syntax";
+
+        // Select "syntax".
+        assertEquals("weird", testSentence.subSequence(35, 40));
+        // The selection looks like a URL, even though it's not.
+        assertTrue(ContextualSearchSelectionController.isSelectionPartOfUrl(testSentence, 35, 40));
+    }
+}
diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn
index 9ffef993..1a88d73 100644
--- a/chrome/app/BUILD.gn
+++ b/chrome/app/BUILD.gn
@@ -2,6 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//mojo/public/mojo_application_manifest.gni")
 import("//tools/grit/grit_rule.gni")
 
 if (is_android) {
@@ -363,3 +364,26 @@
     ]
   }
 }
+
+mojo_application_manifest("chrome_manifest") {
+  type = "exe"
+  application_name = "chrome"
+  source = "mojo/chrome_manifest.json"
+  base_manifest = "${root_out_dir}/content_browser_manifest.json"
+  base_deps = [ "//content/public/app:browser_manifest" ]
+}
+
+mojo_application_manifest("chrome_renderer_manifest") {
+  type = "exe"
+  application_name = "chrome_renderer"
+  source = "mojo/chrome_renderer_manifest.json"
+  base_manifest = "${root_out_dir}/content_renderer_manifest.json"
+  base_deps = [ "//content/public/app:renderer_manifest" ]
+}
+
+group("mojo_manifests") {
+  deps = [
+    ":chrome_manifest",
+    ":chrome_renderer_manifest",
+  ]
+}
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 9ea86ae..ca66949 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5546,7 +5546,7 @@
           WebRTC H.264 software video encoder/decoder
         </message>
         <message name="IDS_FLAGS_WEBRTC_H264_WITH_OPENH264_FFMPEG_DESCRIPTION" desc="Description of chrome:flags option to enable WebRTC H.264 sw encoder/decoder">
-          When enabled, an H.264 software video encoder/decoder pair is included. (If a hardware decoder is also available it may be used instead of this decoder).
+          When enabled, an H.264 software video encoder/decoder pair is included. If a hardware encoder/decoder is also available it may be used instead of this encoder/decoder.
         </message>
       </if>
       <message name="IDS_FLAGS_WEBVR_NAME" desc="Name of the 'Enable WebVR' flag.">
diff --git a/chrome/app/mojo/chrome_manifest.json b/chrome/app/mojo/chrome_manifest.json
new file mode 100644
index 0000000..2b4611e
--- /dev/null
+++ b/chrome/app/mojo/chrome_manifest.json
@@ -0,0 +1,6 @@
+{
+  "manifest_version": 1,
+  "name": "exe:chrome",
+  "display_name": "Chrome",
+  "capabilities": {}
+}
diff --git a/chrome/app/mojo/chrome_renderer_manifest.json b/chrome/app/mojo/chrome_renderer_manifest.json
new file mode 100644
index 0000000..f4fd7d70
--- /dev/null
+++ b/chrome/app/mojo/chrome_renderer_manifest.json
@@ -0,0 +1,5 @@
+{
+  "name": "exe:chrome_renderer",
+  "display_name": "Chrome Renderer",
+  "capabilities": {}
+}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 69b054e..dfa4818 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1646,7 +1646,7 @@
     {"enable-autofill-credit-card-upload",
      IDS_FLAGS_AUTOFILL_CREDIT_CARD_UPLOAD_NAME,
      IDS_FLAGS_AUTOFILL_CREDIT_CARD_UPLOAD_DESCRIPTION,
-     kOsCrOS | kOsWin | kOsLinux | kOsAndroid,
+     kOsCrOS | kOsWin | kOsLinux | kOsAndroid | kOsMac,
      ENABLE_DISABLE_VALUE_TYPE(
          autofill::switches::kEnableOfferUploadCreditCards,
          autofill::switches::kDisableOfferUploadCreditCards)},
diff --git a/chrome/browser/android/accessibility/font_size_prefs_android.h b/chrome/browser/android/accessibility/font_size_prefs_android.h
index 5c8e77f..3af85f1 100644
--- a/chrome/browser/android/accessibility/font_size_prefs_android.h
+++ b/chrome/browser/android/accessibility/font_size_prefs_android.h
@@ -7,9 +7,10 @@
 
 #include <jni.h>
 
+#include <memory>
+
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/observer_list.h"
 
 class PrefChangeRegistrar;
@@ -56,7 +57,7 @@
   // Callback for ForceEnableZoom changes from pref change registrar.
   void OnForceEnableZoomPrefsChanged();
 
-  scoped_ptr<PrefChangeRegistrar> pref_change_registrar_;
+  std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_;
   PrefService* const pref_service_;
   base::ObserverList<Observer> observers_;
   base::android::ScopedJavaGlobalRef<jobject> java_ref_;
diff --git a/chrome/browser/android/banners/app_banner_data_fetcher_android.cc b/chrome/browser/android/banners/app_banner_data_fetcher_android.cc
index 0ae0671a..46be568 100644
--- a/chrome/browser/android/banners/app_banner_data_fetcher_android.cc
+++ b/chrome/browser/android/banners/app_banner_data_fetcher_android.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/memory/ptr_util.h"
 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h"
 #include "chrome/browser/android/shortcut_helper.h"
 #include "chrome/browser/banners/app_banner_metrics.h"
@@ -81,10 +82,10 @@
 
   infobars::InfoBar* infobar = nullptr;
   if (native_app_data_.is_null()) {
-    scoped_ptr<AppBannerInfoBarDelegateAndroid> delegate(
-        new AppBannerInfoBarDelegateAndroid(
-            event_request_id(), this, title, new SkBitmap(*icon),
-            web_app_data()));
+    std::unique_ptr<AppBannerInfoBarDelegateAndroid> delegate(
+        new AppBannerInfoBarDelegateAndroid(event_request_id(), this, title,
+                                            new SkBitmap(*icon),
+                                            web_app_data()));
 
     infobar = new AppBannerInfoBarAndroid(std::move(delegate),
                                           web_app_data().start_url);
@@ -93,7 +94,7 @@
       TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED);
     }
   } else {
-    scoped_ptr<AppBannerInfoBarDelegateAndroid> delegate(
+    std::unique_ptr<AppBannerInfoBarDelegateAndroid> delegate(
         new AppBannerInfoBarDelegateAndroid(
             event_request_id(), title, new SkBitmap(*icon), native_app_data_,
             native_app_package_, referrer));
@@ -105,7 +106,7 @@
     }
   }
   InfoBarService::FromWebContents(web_contents)
-      ->AddInfoBar(make_scoped_ptr(infobar));
+      ->AddInfoBar(base::WrapUnique(infobar));
 }
 
 }  // namespace banners
diff --git a/chrome/browser/android/banners/app_banner_infobar_delegate_android.h b/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
index 049f0de..026f4b8 100644
--- a/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
+++ b/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
@@ -83,7 +83,7 @@
   scoped_refptr<AppBannerDataFetcherAndroid> data_fetcher_;
 
   base::string16 app_title_;
-  scoped_ptr<SkBitmap> app_icon_;
+  std::unique_ptr<SkBitmap> app_icon_;
 
   int event_request_id_;
   content::Manifest web_app_data_;
diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc
index 6b8be69..47b3563 100644
--- a/chrome/browser/android/bookmarks/bookmark_bridge.cc
+++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
@@ -81,9 +81,9 @@
   const icu::Collator* collator_;
 };
 
-scoped_ptr<icu::Collator> GetICUCollator() {
+std::unique_ptr<icu::Collator> GetICUCollator() {
   UErrorCode error = U_ZERO_ERROR;
-  scoped_ptr<icu::Collator> collator_;
+  std::unique_ptr<icu::Collator> collator_;
   collator_.reset(icu::Collator::createInstance(error));
   if (U_FAILURE(error))
     collator_.reset(NULL);
@@ -274,7 +274,7 @@
       }
     }
 
-    scoped_ptr<icu::Collator> collator = GetICUCollator();
+    std::unique_ptr<icu::Collator> collator = GetICUCollator();
     std::stable_sort(top_level_folders.begin() + special_count,
                      top_level_folders.end(),
                      BookmarkTitleComparer(this, collator.get()));
@@ -296,7 +296,7 @@
     const JavaParamRef<jobject>& j_depths_obj) {
   DCHECK(IsLoaded());
 
-  scoped_ptr<icu::Collator> collator = GetICUCollator();
+  std::unique_ptr<icu::Collator> collator = GetICUCollator();
 
   // Vector to temporarily contain all child bookmarks at same level for sorting
   std::vector<const BookmarkNode*> bookmarkList;
diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser/android/bookmarks/bookmark_bridge.h
index ad165f6..b4dd53332 100644
--- a/chrome/browser/android/bookmarks/bookmark_bridge.h
+++ b/chrome/browser/android/bookmarks/bookmark_bridge.h
@@ -263,7 +263,8 @@
   JavaObjectWeakGlobalRef weak_java_ref_;
   bookmarks::BookmarkModel* bookmark_model_;  // weak
   bookmarks::ManagedBookmarkService* managed_bookmark_service_;  // weak
-  scoped_ptr<bookmarks::ScopedGroupBookmarkActions> grouped_bookmark_actions_;
+  std::unique_ptr<bookmarks::ScopedGroupBookmarkActions>
+      grouped_bookmark_actions_;
   PrefChangeRegistrar pref_change_registrar_;
 
   // Information about the Partner bookmarks (must check for IsLoaded()).
diff --git a/chrome/browser/android/bookmarks/partner_bookmarks_reader.h b/chrome/browser/android/bookmarks/partner_bookmarks_reader.h
index a89a74b..ec65524e 100644
--- a/chrome/browser/android/bookmarks/partner_bookmarks_reader.h
+++ b/chrome/browser/android/bookmarks/partner_bookmarks_reader.h
@@ -7,9 +7,10 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 
 class PartnerBookmarksShim;
@@ -47,7 +48,7 @@
   Profile* profile_;
 
   // JNI
-  scoped_ptr<bookmarks::BookmarkNode> wip_partner_bookmarks_root_;
+  std::unique_ptr<bookmarks::BookmarkNode> wip_partner_bookmarks_root_;
   int64_t wip_next_available_id_;
 
   DISALLOW_COPY_AND_ASSIGN(PartnerBookmarksReader);
diff --git a/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc b/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc
index ab7852f..e421d8a 100644
--- a/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc
+++ b/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc
@@ -28,7 +28,7 @@
 // PartnerBookmarksShim is responsible to applying and storing the user changes
 // (deletions/renames) in the user profile, thus keeping the hierarchy intact.
 struct PartnerModelKeeper {
-  scoped_ptr<BookmarkNode> partner_bookmarks_root;
+  std::unique_ptr<BookmarkNode> partner_bookmarks_root;
   bool loaded;
 
   PartnerModelKeeper()
diff --git a/chrome/browser/android/bookmarks/partner_bookmarks_shim.h b/chrome/browser/android/bookmarks/partner_bookmarks_shim.h
index b5cd93e..7454d80 100644
--- a/chrome/browser/android/bookmarks/partner_bookmarks_shim.h
+++ b/chrome/browser/android/bookmarks/partner_bookmarks_shim.h
@@ -7,9 +7,10 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "base/supports_user_data.h"
 #include "components/bookmarks/browser/bookmark_model.h"
@@ -133,7 +134,7 @@
   void ReloadNodeMapping();
   void SaveNodeMapping();
 
-  scoped_ptr<bookmarks::BookmarkNode> partner_bookmarks_root_;
+  std::unique_ptr<bookmarks::BookmarkNode> partner_bookmarks_root_;
   PrefService* prefs_;
   NodeRenamingMap node_rename_remove_map_;
 
diff --git a/chrome/browser/android/bookmarks/partner_bookmarks_shim_unittest.cc b/chrome/browser/android/bookmarks/partner_bookmarks_shim_unittest.cc
index a5d286f..d98d65a 100644
--- a/chrome/browser/android/bookmarks/partner_bookmarks_shim_unittest.cc
+++ b/chrome/browser/android/bookmarks/partner_bookmarks_shim_unittest.cc
@@ -76,7 +76,7 @@
     profile_.reset(NULL);
   }
 
-  scoped_ptr<TestingProfile> profile_;
+  std::unique_ptr<TestingProfile> profile_;
 
   content::TestBrowserThreadBundle thread_bundle_;
 
diff --git a/chrome/browser/android/bottombar/overlay_panel_content.cc b/chrome/browser/android/bottombar/overlay_panel_content.cc
index 2603a001..3112412 100644
--- a/chrome/browser/android/bottombar/overlay_panel_content.cc
+++ b/chrome/browser/android/bottombar/overlay_panel_content.cc
@@ -8,6 +8,7 @@
 
 #include "base/android/jni_string.h"
 #include "base/callback.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "chrome/browser/android/tab_android.h"
@@ -130,7 +131,7 @@
   DCHECK(web_contents);
   navigation_interception::InterceptNavigationDelegate::Associate(
       web_contents,
-      make_scoped_ptr(new navigation_interception::InterceptNavigationDelegate(
+      base::WrapUnique(new navigation_interception::InterceptNavigationDelegate(
           env, delegate)));
 }
 
diff --git a/chrome/browser/android/bottombar/overlay_panel_content.h b/chrome/browser/android/bottombar/overlay_panel_content.h
index 03457a8..1dfe30a8 100644
--- a/chrome/browser/android/bottombar/overlay_panel_content.h
+++ b/chrome/browser/android/bottombar/overlay_panel_content.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_ANDROID_BOTTOMBAR_OVERLAY_PANEL_CONTENT_H_
 #define CHROME_BROWSER_ANDROID_BOTTOMBAR_OVERLAY_PANEL_CONTENT_H_
 
+#include <memory>
+
 #include "base/android/jni_android.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "chrome/browser/android/contextualsearch/contextual_search_context.h"
 
@@ -66,8 +67,8 @@
   base::CancelableTaskTracker history_task_tracker_;
 
   // The WebContents that holds the panel content.
-  scoped_ptr<content::WebContents> web_contents_;
-  scoped_ptr<web_contents_delegate_android::WebContentsDelegateAndroid>
+  std::unique_ptr<content::WebContents> web_contents_;
+  std::unique_ptr<web_contents_delegate_android::WebContentsDelegateAndroid>
       web_contents_delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(OverlayPanelContent);
diff --git a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc
index dfb368b..0cbb30b 100644
--- a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc
+++ b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.cc
@@ -48,7 +48,7 @@
 }
 
 void BrowsingDataCounterBridge::onCounterFinished(
-    scoped_ptr<BrowsingDataCounter::Result> result) {
+    std::unique_ptr<BrowsingDataCounter::Result> result) {
   JNIEnv* env = base::android::AttachCurrentThread();
   ScopedJavaLocalRef<jstring> result_string =
       base::android::ConvertUTF16ToJavaString(
diff --git a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h
index 46b21ba..b9d99d9 100644
--- a/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h
+++ b/chrome/browser/android/browsing_data/browsing_data_counter_bridge.h
@@ -30,11 +30,10 @@
   static bool Register(JNIEnv* env);
 
  private:
-  void onCounterFinished(
-      scoped_ptr<BrowsingDataCounter::Result> result);
+  void onCounterFinished(std::unique_ptr<BrowsingDataCounter::Result> result);
 
   base::android::ScopedJavaGlobalRef<jobject> jobject_;
-  scoped_ptr<BrowsingDataCounter> counter_;
+  std::unique_ptr<BrowsingDataCounter> counter_;
 
   DISALLOW_COPY_AND_ASSIGN(BrowsingDataCounterBridge);
 };
diff --git a/chrome/browser/android/compositor/compositor_view.cc b/chrome/browser/android/compositor/compositor_view.cc
index ff253cf7..0f69c0e 100644
--- a/chrome/browser/android/compositor/compositor_view.cc
+++ b/chrome/browser/android/compositor/compositor_view.cc
@@ -4,17 +4,17 @@
 
 #include "chrome/browser/android/compositor/compositor_view.h"
 
-#include <vector>
-
 #include <android/bitmap.h>
 #include <android/native_window_jni.h>
 
+#include <memory>
+#include <vector>
+
 #include "base/android/build_info.h"
 #include "base/android/jni_android.h"
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/id_map.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/rand_util.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/layers/layer.h"
diff --git a/chrome/browser/android/compositor/compositor_view.h b/chrome/browser/android/compositor/compositor_view.h
index 3b06e2b..ab0a2f7 100644
--- a/chrome/browser/android/compositor/compositor_view.h
+++ b/chrome/browser/android/compositor/compositor_view.h
@@ -140,7 +140,7 @@
   void SetBackground(bool visible, SkColor color);
 
   base::android::ScopedJavaGlobalRef<jobject> obj_;
-  scoped_ptr<content::Compositor> compositor_;
+  std::unique_ptr<content::Compositor> compositor_;
   LayerTitleCache* layer_title_cache_;
   TabContentManager* tab_content_manager_;
 
diff --git a/chrome/browser/android/compositor/decoration_title.h b/chrome/browser/android/compositor/decoration_title.h
index 15955f1..71fe6e8 100644
--- a/chrome/browser/android/compositor/decoration_title.h
+++ b/chrome/browser/android/compositor/decoration_title.h
@@ -7,9 +7,10 @@
 
 #include <jni.h>
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "cc/resources/ui_resource_client.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/geometry/size.h"
@@ -84,7 +85,7 @@
   bool is_incognito_;
   bool is_rtl_;
   bool is_loading_;
-  scoped_ptr<gfx::Transform> transform_;
+  std::unique_ptr<gfx::Transform> transform_;
 
   ui::ResourceManager* resource_manager_;
 
diff --git a/chrome/browser/android/compositor/layer/content_layer.h b/chrome/browser/android/compositor/layer/content_layer.h
index eb2d70a..c82cff2 100644
--- a/chrome/browser/android/compositor/layer/content_layer.h
+++ b/chrome/browser/android/compositor/layer/content_layer.h
@@ -5,8 +5,9 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_CONTENT_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_CONTENT_LAYER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "cc/output/filter_operations.h"
 #include "chrome/browser/android/compositor/layer/layer.h"
 #include "ui/gfx/geometry/rect.h"
diff --git a/chrome/browser/android/compositor/layer/contextual_search_layer.h b/chrome/browser/android/compositor/layer/contextual_search_layer.h
index 010443e..d1d5747 100644
--- a/chrome/browser/android/compositor/layer/contextual_search_layer.h
+++ b/chrome/browser/android/compositor/layer/contextual_search_layer.h
@@ -5,7 +5,8 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_CONTEXTUAL_SEARCH_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_CONTEXTUAL_SEARCH_LAYER_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "chrome/browser/android/compositor/layer/overlay_panel_layer.h"
 
 namespace cc {
diff --git a/chrome/browser/android/compositor/layer/layer.h b/chrome/browser/android/compositor/layer/layer.h
index f225191..4add7f0 100644
--- a/chrome/browser/android/compositor/layer/layer.h
+++ b/chrome/browser/android/compositor/layer/layer.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_LAYER_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "cc/layers/layer.h"
 #include "cc/output/filter_operations.h"
 #include "ui/gfx/geometry/size.h"
diff --git a/chrome/browser/android/compositor/layer/overlay_panel_layer.h b/chrome/browser/android/compositor/layer/overlay_panel_layer.h
index 725c9e8..43667d7 100644
--- a/chrome/browser/android/compositor/layer/overlay_panel_layer.h
+++ b/chrome/browser/android/compositor/layer/overlay_panel_layer.h
@@ -5,7 +5,8 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_OVERLAY_PANEL_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_OVERLAY_PANEL_LAYER_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "chrome/browser/android/compositor/layer/layer.h"
 
 namespace cc {
diff --git a/chrome/browser/android/compositor/layer/reader_mode_layer.h b/chrome/browser/android/compositor/layer/reader_mode_layer.h
index bc13144..5549510 100644
--- a/chrome/browser/android/compositor/layer/reader_mode_layer.h
+++ b/chrome/browser/android/compositor/layer/reader_mode_layer.h
@@ -5,7 +5,8 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_READER_MODE_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_READER_MODE_LAYER_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "chrome/browser/android/compositor/layer/overlay_panel_layer.h"
 
 namespace content {
diff --git a/chrome/browser/android/compositor/layer/tab_handle_layer.h b/chrome/browser/android/compositor/layer/tab_handle_layer.h
index f7ed055..02048d4 100644
--- a/chrome/browser/android/compositor/layer/tab_handle_layer.h
+++ b/chrome/browser/android/compositor/layer/tab_handle_layer.h
@@ -5,8 +5,9 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TAB_HANDLE_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TAB_HANDLE_LAYER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "cc/layers/nine_patch_layer.h"
 #include "cc/layers/solid_color_layer.h"
 #include "cc/layers/ui_resource_layer.h"
diff --git a/chrome/browser/android/compositor/layer/tab_layer.h b/chrome/browser/android/compositor/layer/tab_layer.h
index 48ea9bf76..43741d08 100644
--- a/chrome/browser/android/compositor/layer/tab_layer.h
+++ b/chrome/browser/android/compositor/layer/tab_layer.h
@@ -5,8 +5,9 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TAB_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TAB_LAYER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/compositor/layer/layer.h"
 
 namespace cc {
diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.h b/chrome/browser/android/compositor/layer/toolbar_layer.h
index 95abfe6f..2c2be007 100644
--- a/chrome/browser/android/compositor/layer/toolbar_layer.h
+++ b/chrome/browser/android/compositor/layer/toolbar_layer.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TOOLBAR_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TOOLBAR_LAYER_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "cc/layers/nine_patch_layer.h"
 #include "chrome/browser/android/compositor/layer/layer.h"
 #include "ui/android/resources/resource_manager.h"
diff --git a/chrome/browser/android/compositor/layer_title_cache.cc b/chrome/browser/android/compositor/layer_title_cache.cc
index 9339850a..a86a3fbf 100644
--- a/chrome/browser/android/compositor/layer_title_cache.cc
+++ b/chrome/browser/android/compositor/layer_title_cache.cc
@@ -6,7 +6,8 @@
 
 #include <android/bitmap.h>
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "cc/layers/layer.h"
 #include "cc/layers/ui_resource_layer.h"
 #include "chrome/browser/android/compositor/decoration_title.h"
diff --git a/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.h b/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.h
index a5b243a..a618121 100644
--- a/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.h
+++ b/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.h
@@ -5,13 +5,13 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_CONTEXTUAL_SEARCH_SCENE_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_CONTEXTUAL_SEARCH_SCENE_LAYER_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/compositor/scene_layer/scene_layer.h"
 
 namespace chrome {
diff --git a/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.h b/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.h
index c48cc3b..13caf6d 100644
--- a/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.h
+++ b/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.h
@@ -5,13 +5,13 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_READER_MODE_SCENE_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_READER_MODE_SCENE_LAYER_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/compositor/scene_layer/scene_layer.h"
 #include "ui/android/resources/resource_manager_impl.h"
 
diff --git a/chrome/browser/android/compositor/scene_layer/static_tab_scene_layer.h b/chrome/browser/android/compositor/scene_layer/static_tab_scene_layer.h
index c81efe0..ad00105 100644
--- a/chrome/browser/android/compositor/scene_layer/static_tab_scene_layer.h
+++ b/chrome/browser/android/compositor/scene_layer/static_tab_scene_layer.h
@@ -7,11 +7,12 @@
 
 #include <jni.h>
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/compositor/scene_layer/scene_layer.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/point_f.h"
diff --git a/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h b/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h
index aba69e4..3c0575e 100644
--- a/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h
+++ b/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h
@@ -5,13 +5,13 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_LIST_SCENE_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_LIST_SCENE_LAYER_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "cc/layers/layer.h"
 #include "chrome/browser/android/compositor/layer/layer.h"
 #include "chrome/browser/android/compositor/scene_layer/scene_layer.h"
diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h
index ce99e394..b67d290 100644
--- a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h
+++ b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h
@@ -5,13 +5,13 @@
 #ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_STRIP_SCENE_LAYER_H_
 #define CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_STRIP_SCENE_LAYER_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "cc/layers/layer.h"
 #include "cc/layers/ui_resource_layer.h"
 #include "chrome/browser/android/compositor/scene_layer/scene_layer.h"
diff --git a/chrome/browser/android/compositor/tab_content_manager.cc b/chrome/browser/android/compositor/tab_content_manager.cc
index 08b1933..556f8c25 100644
--- a/chrome/browser/android/compositor/tab_content_manager.cc
+++ b/chrome/browser/android/compositor/tab_content_manager.cc
@@ -6,6 +6,7 @@
 
 #include <android/bitmap.h>
 #include <stddef.h>
+
 #include <utility>
 
 #include "base/android/jni_android.h"
@@ -14,6 +15,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "cc/layers/layer.h"
 #include "chrome/browser/android/compositor/layer/thumbnail_layer.h"
 #include "chrome/browser/android/tab_android.h"
@@ -144,7 +146,7 @@
                                      jint write_queue_max_size,
                                      jboolean use_approximation_thumbnail)
     : weak_java_tab_content_manager_(env, obj), weak_factory_(this) {
-  thumbnail_cache_ = make_scoped_ptr(new ThumbnailCache(
+  thumbnail_cache_ = base::WrapUnique(new ThumbnailCache(
       (size_t)default_cache_size, (size_t)approximation_cache_size,
       (size_t)compression_queue_max_size, (size_t)write_queue_max_size,
       use_approximation_thumbnail));
@@ -271,8 +273,8 @@
     TabReadbackCallback readback_done_callback =
         base::Bind(&TabContentManager::PutThumbnailIntoCache,
                    weak_factory_.GetWeakPtr(), tab_id);
-    scoped_ptr<TabReadbackRequest> readback_request =
-        make_scoped_ptr(new TabReadbackRequest(
+    std::unique_ptr<TabReadbackRequest> readback_request =
+        base::WrapUnique(new TabReadbackRequest(
             content_view_core, thumbnail_scale, readback_done_callback));
     pending_tab_readbacks_.set(tab_id, std::move(readback_request));
     pending_tab_readbacks_.get(tab_id)->Run();
diff --git a/chrome/browser/android/compositor/tab_content_manager.h b/chrome/browser/android/compositor/tab_content_manager.h
index 89a52fd..cfe17bc0a 100644
--- a/chrome/browser/android/compositor/tab_content_manager.h
+++ b/chrome/browser/android/compositor/tab_content_manager.h
@@ -106,14 +106,14 @@
   class TabReadbackRequest;
   typedef base::hash_map<int, scoped_refptr<cc::Layer>> LayerMap;
   typedef base::hash_map<int, scoped_refptr<ThumbnailLayer>> ThumbnailLayerMap;
-  typedef base::ScopedPtrHashMap<int, scoped_ptr<TabReadbackRequest>>
+  typedef base::ScopedPtrHashMap<int, std::unique_ptr<TabReadbackRequest>>
       TabReadbackRequestMap;
 
   void PutThumbnailIntoCache(int tab_id,
                              float thumbnail_scale,
                              const SkBitmap& bitmap);
 
-  scoped_ptr<ThumbnailCache> thumbnail_cache_;
+  std::unique_ptr<ThumbnailCache> thumbnail_cache_;
   ThumbnailLayerMap static_layer_cache_;
   LayerMap live_layer_list_;
   TabReadbackRequestMap pending_tab_readbacks_;
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
index b7385c0..c4048e6 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -133,7 +133,7 @@
   DCHECK(source == search_term_fetcher_.get());
   int response_code = source->GetResponseCode();
 
-  scoped_ptr<ResolvedSearchTerm> resolved_search_term(
+  std::unique_ptr<ResolvedSearchTerm> resolved_search_term(
       new ResolvedSearchTerm(response_code));
   if (source->GetStatus().is_success() && response_code == net::HTTP_OK) {
     std::string response;
@@ -150,7 +150,7 @@
   context_.reset();
 }
 
-scoped_ptr<ResolvedSearchTerm>
+std::unique_ptr<ResolvedSearchTerm>
 ContextualSearchDelegate::GetResolvedSearchTermFromJson(
     int response_code,
     const std::string& json_string) {
@@ -184,7 +184,7 @@
     }
   }
   bool is_invalid = response_code == net::URLFetcher::RESPONSE_CODE_INVALID;
-  return scoped_ptr<ResolvedSearchTerm>(new ResolvedSearchTerm(
+  return std::unique_ptr<ResolvedSearchTerm>(new ResolvedSearchTerm(
       is_invalid, response_code, search_term, display_text, alternate_term,
       prevent_preload == kDoPreventPreloadValue, start_adjust, end_adjust,
       context_language));
@@ -431,7 +431,7 @@
   const std::string& proper_json =
       contains_xssi_escape ? response.substr(strlen(kXssiEscape)) : response;
   JSONStringValueDeserializer deserializer(proper_json);
-  scoped_ptr<base::Value> root = deserializer.Deserialize(NULL, NULL);
+  std::unique_ptr<base::Value> root = deserializer.Deserialize(NULL, NULL);
 
   if (root.get() != NULL && root->IsType(base::Value::TYPE_DICTIONARY)) {
     base::DictionaryValue* dict =
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.h b/chrome/browser/android/contextualsearch/contextual_search_delegate.h
index 08dc52bc..d70bd89 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_delegate.h
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.h
@@ -7,10 +7,11 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/values.h"
 #include "chrome/browser/android/contextualsearch/contextual_search_context.h"
@@ -174,7 +175,7 @@
                       TemplateURLService* template_url_service);
 
   // Builds a Resolved Search Term by decoding the given JSON string.
-  scoped_ptr<ResolvedSearchTerm> GetResolvedSearchTermFromJson(
+  std::unique_ptr<ResolvedSearchTerm> GetResolvedSearchTermFromJson(
       int response_code,
       const std::string& json_string);
 
@@ -212,7 +213,7 @@
                                          size_t* end);
 
   // The current request in progress, or NULL.
-  scoped_ptr<net::URLFetcher> search_term_fetcher_;
+  std::unique_ptr<net::URLFetcher> search_term_fetcher_;
 
   // Holds the URL request context. Not owned.
   net::URLRequestContextGetter* url_request_context_;
@@ -221,7 +222,7 @@
   TemplateURLService* template_url_service_;
 
   // The field trial helper instance, always set up by the constructor.
-  scoped_ptr<ContextualSearchFieldTrial> field_trial_;
+  std::unique_ptr<ContextualSearchFieldTrial> field_trial_;
 
   // The callback for notifications of completed URL fetches.
   SearchTermResolutionCallback search_term_callback_;
@@ -233,7 +234,7 @@
   IcingCallback icing_callback_;
 
   // Used to hold the context until an upcoming search term request is started.
-  scoped_ptr<ContextualSearchContext> context_;
+  std::unique_ptr<ContextualSearchContext> context_;
 
   DISALLOW_COPY_AND_ASSIGN(ContextualSearchDelegate);
 };
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc
index 9bf81d23..8b174bb 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc
@@ -6,9 +6,10 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/base64.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
@@ -176,7 +177,7 @@
   std::string context_language() { return context_language_; }
 
   // The delegate under test.
-  scoped_ptr<ContextualSearchDelegate> delegate_;
+  std::unique_ptr<ContextualSearchDelegate> delegate_;
 
  private:
   void recordSearchTermResolutionResponse(
@@ -217,7 +218,7 @@
   base::MessageLoopForIO io_message_loop_;
   net::TestURLFetcherFactory test_factory_;
   net::TestURLFetcher* fetcher_;
-  scoped_ptr<TemplateURLService> template_url_service_;
+  std::unique_ptr<TemplateURLService> template_url_service_;
   scoped_refptr<net::TestURLRequestContextGetter> request_context_;
 
   // Will be owned by the delegate.
diff --git a/chrome/browser/android/contextualsearch/contextual_search_field_trial_unittest.cc b/chrome/browser/android/contextualsearch/contextual_search_field_trial_unittest.cc
index 6dc7795..01fc8ab 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_field_trial_unittest.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_field_trial_unittest.cc
@@ -4,8 +4,9 @@
 
 #include "chrome/browser/android/contextualsearch/contextual_search_field_trial.h"
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 // Tests ContextualSearchFieldTrail class.
@@ -34,7 +35,7 @@
   };
 
   // The class under test.
-  scoped_ptr<ContextualSearchFieldTrailStubbed> field_trial_;
+  std::unique_ptr<ContextualSearchFieldTrailStubbed> field_trial_;
 
  protected:
   void SetUp() override {
diff --git a/chrome/browser/android/contextualsearch/contextual_search_manager.h b/chrome/browser/android/contextualsearch/contextual_search_manager.h
index 4e9e323..4602efb2 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_manager.h
+++ b/chrome/browser/android/contextualsearch/contextual_search_manager.h
@@ -88,7 +88,7 @@
   base::android::ScopedJavaGlobalRef<jobject> java_manager_;
 
   // The delegate we're using the do the real work.
-  scoped_ptr<ContextualSearchDelegate> delegate_;
+  std::unique_ptr<ContextualSearchDelegate> delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(ContextualSearchManager);
 };
diff --git a/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h b/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h
index 8140f69..bafbb70 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h
+++ b/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h
@@ -7,10 +7,11 @@
 
 #include <jni.h>
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/prefs/pref_change_registrar.h"
 
@@ -26,7 +27,7 @@
   void OnContextualSearchPrefChanged();
 
   JavaObjectWeakGlobalRef weak_java_ref_;
-  scoped_ptr<PrefChangeRegistrar> pref_change_registrar_;
+  std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_;
   base::WeakPtrFactory<ContextualSearchTabHelper> weak_factory_;
   DISALLOW_COPY_AND_ASSIGN(ContextualSearchTabHelper);
 };
diff --git a/chrome/browser/android/data_usage/data_use_matcher.cc b/chrome/browser/android/data_usage/data_use_matcher.cc
index 1be71a5..c201597 100644
--- a/chrome/browser/android/data_usage/data_use_matcher.cc
+++ b/chrome/browser/android/data_usage/data_use_matcher.cc
@@ -9,6 +9,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
@@ -66,7 +67,7 @@
       invalid_rules++;
       continue;
     }
-    scoped_ptr<re2::RE2> pattern(new re2::RE2(url_regex, options));
+    std::unique_ptr<re2::RE2> pattern(new re2::RE2(url_regex, options));
     if (!pattern->ok()) {
       invalid_rules++;
       continue;
@@ -75,7 +76,7 @@
     if (expiration <= now_ticks)
       continue;  // skip expired matching rules.
     DCHECK(!labels.at(i).empty());
-    matching_rules_.push_back(make_scoped_ptr(new MatchingRule(
+    matching_rules_.push_back(base::WrapUnique(new MatchingRule(
         app_package_name, std::move(pattern), labels.at(i), expiration)));
 
     removed_matching_rule_labels.erase(labels.at(i));
@@ -169,7 +170,7 @@
 }
 
 DataUseMatcher::MatchingRule::MatchingRule(const std::string& app_package_name,
-                                           scoped_ptr<re2::RE2> pattern,
+                                           std::unique_ptr<re2::RE2> pattern,
                                            const std::string& label,
                                            const base::TimeTicks& expiration)
     : app_package_name_(app_package_name),
diff --git a/chrome/browser/android/data_usage/data_use_matcher.h b/chrome/browser/android/data_usage/data_use_matcher.h
index f905ab09..f10127ff 100644
--- a/chrome/browser/android/data_usage/data_use_matcher.h
+++ b/chrome/browser/android/data_usage/data_use_matcher.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_ANDROID_DATA_USAGE_DATA_USE_MATCHER_H_
 #define CHROME_BROWSER_ANDROID_DATA_USAGE_DATA_USE_MATCHER_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -12,7 +13,6 @@
 #include "base/containers/hash_tables.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "chrome/browser/android/data_usage/data_use_tab_model.h"
@@ -84,7 +84,7 @@
   class MatchingRule {
    public:
     MatchingRule(const std::string& app_package_name,
-                 scoped_ptr<re2::RE2> pattern,
+                 std::unique_ptr<re2::RE2> pattern,
                  const std::string& label,
                  const base::TimeTicks& expiration);
     ~MatchingRule();
@@ -99,7 +99,7 @@
     const std::string app_package_name_;
 
     // RE2 pattern to match against URLs.
-    scoped_ptr<re2::RE2> pattern_;
+    std::unique_ptr<re2::RE2> pattern_;
 
     // Opaque label that uniquely identifies this matching rule.
     const std::string label_;
@@ -123,7 +123,7 @@
 
   base::ThreadChecker thread_checker_;
 
-  std::vector<scoped_ptr<MatchingRule>> matching_rules_;
+  std::vector<std::unique_ptr<MatchingRule>> matching_rules_;
 
   // |data_use_tab_model_| is notified if a label is removed from the set of
   // matching labels.
@@ -134,7 +134,7 @@
   const base::TimeDelta default_matching_rule_expiration_duration_;
 
   // TickClock used for obtaining the current time.
-  scoped_ptr<base::TickClock> tick_clock_;
+  std::unique_ptr<base::TickClock> tick_clock_;
 
   // Pointer to the ExternalDataUseObserverBridge owned by
   // ExternalDataUseObserver. DataUseTabModel (owner of |this|) and
diff --git a/chrome/browser/android/data_usage/data_use_matcher_unittest.cc b/chrome/browser/android/data_usage/data_use_matcher_unittest.cc
index df2631b..aac2594 100644
--- a/chrome/browser/android/data_usage/data_use_matcher_unittest.cc
+++ b/chrome/browser/android/data_usage/data_use_matcher_unittest.cc
@@ -101,7 +101,8 @@
 
  private:
   content::TestBrowserThreadBundle thread_bundle_;
-  scoped_ptr<ExternalDataUseObserverBridge> external_data_use_observer_bridge_;
+  std::unique_ptr<ExternalDataUseObserverBridge>
+      external_data_use_observer_bridge_;
   DataUseMatcher data_use_matcher_;
   DISALLOW_COPY_AND_ASSIGN(DataUseMatcherTest);
 };
diff --git a/chrome/browser/android/data_usage/data_use_tab_model.h b/chrome/browser/android/data_usage/data_use_tab_model.h
index bed0ff8..0ba6af5 100644
--- a/chrome/browser/android/data_usage/data_use_tab_model.h
+++ b/chrome/browser/android/data_usage/data_use_tab_model.h
@@ -7,13 +7,13 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/containers/hash_tables.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/threading/thread_checker.h"
@@ -281,10 +281,10 @@
   const base::TimeDelta open_tab_expiration_duration_;
 
   // TickClock used for obtaining the current time.
-  scoped_ptr<base::TickClock> tick_clock_;
+  std::unique_ptr<base::TickClock> tick_clock_;
 
   // Stores the matching patterns.
-  scoped_ptr<DataUseMatcher> data_use_matcher_;
+  std::unique_ptr<DataUseMatcher> data_use_matcher_;
 
   // True if the external control app is installed.
   bool is_control_app_installed_;
@@ -296,7 +296,8 @@
   // the UI navigation events need to be buffered. If the scoped_ptr contains a
   // vector all navigation events will be added to it. Otherwise all navigation
   // events will be processed immediately.
-  scoped_ptr<std::vector<DataUseUINavigationEvent>> data_use_ui_navigations_;
+  std::unique_ptr<std::vector<DataUseUINavigationEvent>>
+      data_use_ui_navigations_;
 
   base::ThreadChecker thread_checker_;
 
diff --git a/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc b/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc
index fbda821..cb43c2a6 100644
--- a/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc
+++ b/chrome/browser/android/data_usage/data_use_tab_model_unittest.cc
@@ -6,10 +6,10 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
@@ -192,11 +192,12 @@
   // Pointer to the tick clock owned by |data_use_tab_model_|.
   base::SimpleTestTickClock* tick_clock_;
 
-  scoped_ptr<DataUseTabModel> data_use_tab_model_;
+  std::unique_ptr<DataUseTabModel> data_use_tab_model_;
 
  private:
   content::TestBrowserThreadBundle thread_bundle_;
-  scoped_ptr<ExternalDataUseObserverBridge> external_data_use_observer_bridge_;
+  std::unique_ptr<ExternalDataUseObserverBridge>
+      external_data_use_observer_bridge_;
 
   DISALLOW_COPY_AND_ASSIGN(DataUseTabModelTest);
 };
diff --git a/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc b/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc
index da290284..fd15406 100644
--- a/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc
+++ b/chrome/browser/android/data_usage/data_use_ui_tab_model_unittest.cc
@@ -89,9 +89,9 @@
   DataUseUITabModel data_use_ui_tab_model_;
   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
-  scoped_ptr<data_usage::DataUseAggregator> data_use_aggregator_;
-  scoped_ptr<ExternalDataUseObserver> external_data_use_observer_;
-  scoped_ptr<TestDataUseTabModel> data_use_tab_model_;
+  std::unique_ptr<data_usage::DataUseAggregator> data_use_aggregator_;
+  std::unique_ptr<ExternalDataUseObserver> external_data_use_observer_;
+  std::unique_ptr<TestDataUseTabModel> data_use_tab_model_;
 };
 
 // Tests that DataUseTabModel is notified of tab closure and navigation events,
diff --git a/chrome/browser/android/data_usage/external_data_use_observer.cc b/chrome/browser/android/data_usage/external_data_use_observer.cc
index 210b5db..b88d416e 100644
--- a/chrome/browser/android/data_usage/external_data_use_observer.cc
+++ b/chrome/browser/android/data_usage/external_data_use_observer.cc
@@ -238,7 +238,7 @@
     FetchMatchingRules();
   }
 
-  scoped_ptr<std::string> label(new std::string());
+  std::unique_ptr<std::string> label(new std::string());
 
   content::BrowserThread::PostTaskAndReplyWithResult(
       content::BrowserThread::UI, FROM_HERE,
diff --git a/chrome/browser/android/data_usage/external_data_use_observer.h b/chrome/browser/android/data_usage/external_data_use_observer.h
index 89310dd..1a20d967 100644
--- a/chrome/browser/android/data_usage/external_data_use_observer.h
+++ b/chrome/browser/android/data_usage/external_data_use_observer.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -15,7 +16,6 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
@@ -275,7 +275,7 @@
 #if defined(OS_ANDROID)
   // Listens to when Chromium gets backgrounded and submits buffered data use
   // reports.
-  scoped_ptr<base::android::ApplicationStatusListener> app_state_listener_;
+  std::unique_ptr<base::android::ApplicationStatusListener> app_state_listener_;
 #endif
 
   // True if |this| is currently registered as a data use observer.
diff --git a/chrome/browser/android/data_usage/external_data_use_observer_bridge.cc b/chrome/browser/android/data_usage/external_data_use_observer_bridge.cc
index 9ef7a35a..04e6807 100644
--- a/chrome/browser/android/data_usage/external_data_use_observer_bridge.cc
+++ b/chrome/browser/android/data_usage/external_data_use_observer_bridge.cc
@@ -4,11 +4,11 @@
 
 #include "chrome/browser/android/data_usage/external_data_use_observer_bridge.h"
 
+#include <memory>
 #include <vector>
 
 #include "base/android/context_utils.h"
 #include "base/android/jni_string.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
diff --git a/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc b/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc
index e280e730..7ba7b208 100644
--- a/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc
+++ b/chrome/browser/android/data_usage/external_data_use_observer_unittest.cc
@@ -8,10 +8,10 @@
 #include <stdint.h>
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/field_trial.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
@@ -147,9 +147,9 @@
   }
 
  private:
-  scoped_ptr<content::TestBrowserThreadBundle> thread_bundle_;
-  scoped_ptr<data_usage::DataUseAggregator> data_use_aggregator_;
-  scoped_ptr<ExternalDataUseObserver> external_data_use_observer_;
+  std::unique_ptr<content::TestBrowserThreadBundle> thread_bundle_;
+  std::unique_ptr<data_usage::DataUseAggregator> data_use_aggregator_;
+  std::unique_ptr<ExternalDataUseObserver> external_data_use_observer_;
 
   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
diff --git a/chrome/browser/android/data_usage/tab_data_use_entry_unittest.cc b/chrome/browser/android/data_usage/tab_data_use_entry_unittest.cc
index e824db4..b81f726f 100644
--- a/chrome/browser/android/data_usage/tab_data_use_entry_unittest.cc
+++ b/chrome/browser/android/data_usage/tab_data_use_entry_unittest.cc
@@ -7,10 +7,10 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/histogram_tester.h"
 #include "base/time/tick_clock.h"
@@ -146,8 +146,8 @@
   // Pointer to the clock used for spoofing time, owned by |tab_model_|.
   SimpleOffsetTestTickClock* tick_clock_;
 
-  scoped_ptr<DataUseTabModel> tab_model_;
-  scoped_ptr<TabDataUseEntry> tab_entry_;
+  std::unique_ptr<DataUseTabModel> tab_model_;
+  std::unique_ptr<TabDataUseEntry> tab_entry_;
 
   DISALLOW_COPY_AND_ASSIGN(TabDataUseEntryTest);
 };
diff --git a/chrome/browser/android/dev_tools_discovery_provider_android.cc b/chrome/browser/android/dev_tools_discovery_provider_android.cc
index 73a3c57..113748bf3 100644
--- a/chrome/browser/android/dev_tools_discovery_provider_android.cc
+++ b/chrome/browser/android/dev_tools_discovery_provider_android.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/compiler_specific.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/android/tab_android.h"
@@ -173,25 +174,25 @@
   DISALLOW_COPY_AND_ASSIGN(TabDescriptor);
 };
 
-scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>
+std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>
 CreateNewAndroidTab(const GURL& url) {
   if (TabModelList::empty())
-    return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>();
+    return std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>();
 
   TabModel* tab_model = TabModelList::get(0);
   if (!tab_model)
-    return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>();
+    return std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>();
 
   WebContents* web_contents = tab_model->CreateNewTabForDevTools(url);
   if (!web_contents)
-    return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>();
+    return std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>();
 
   TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
   if (!tab)
-    return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>();
+    return std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>();
 
-  return make_scoped_ptr(TabDescriptor::CreateForWebContents(
-      tab->GetAndroidId(), web_contents));
+  return base::WrapUnique(
+      TabDescriptor::CreateForWebContents(tab->GetAndroidId(), web_contents));
 }
 
 }  // namespace
@@ -247,6 +248,6 @@
   devtools_discovery::DevToolsDiscoveryManager* discovery_manager =
       devtools_discovery::DevToolsDiscoveryManager::GetInstance();
   discovery_manager->AddProvider(
-      make_scoped_ptr(new DevToolsDiscoveryProviderAndroid()));
+      base::WrapUnique(new DevToolsDiscoveryProviderAndroid()));
   discovery_manager->SetCreateCallback(base::Bind(&CreateNewAndroidTab));
 }
diff --git a/chrome/browser/android/dev_tools_server.cc b/chrome/browser/android/dev_tools_server.cc
index fcd5dd67..a7513b60 100644
--- a/chrome/browser/android/dev_tools_server.cc
+++ b/chrome/browser/android/dev_tools_server.cc
@@ -150,8 +150,8 @@
   }
 
  private:
-  scoped_ptr<net::ServerSocket> CreateForHttpServer() override {
-    scoped_ptr<net::UnixDomainServerSocket> socket(
+  std::unique_ptr<net::ServerSocket> CreateForHttpServer() override {
+    std::unique_ptr<net::UnixDomainServerSocket> socket(
         new net::UnixDomainServerSocket(auth_callback_,
                                         true /* use_abstract_namespace */));
 
@@ -164,16 +164,17 @@
     if (socket->BindAndListen(fallback_address, kBackLog) == net::OK)
       return std::move(socket);
 
-    return scoped_ptr<net::ServerSocket>();
+    return std::unique_ptr<net::ServerSocket>();
   }
 
-  scoped_ptr<net::ServerSocket> CreateForTethering(std::string* name) override {
+  std::unique_ptr<net::ServerSocket> CreateForTethering(
+      std::string* name) override {
     *name = base::StringPrintf(
         kTetheringSocketName, getpid(), ++last_tethering_socket_);
-    scoped_ptr<net::UnixDomainServerSocket> socket(
+    std::unique_ptr<net::UnixDomainServerSocket> socket(
         new net::UnixDomainServerSocket(auth_callback_, true));
     if (socket->BindAndListen(*name, kBackLog) != net::OK)
-      return scoped_ptr<net::ServerSocket>();
+      return std::unique_ptr<net::ServerSocket>();
 
     return std::move(socket);
   }
@@ -211,7 +212,7 @@
       allow_debug_permission ?
           base::Bind(&AuthorizeSocketAccessWithDebugPermission) :
           base::Bind(&content::CanUserConnectToDevTools);
-  scoped_ptr<DevToolsHttpHandler::ServerSocketFactory> factory(
+  std::unique_ptr<DevToolsHttpHandler::ServerSocketFactory> factory(
       new UnixDomainServerSocketFactory(socket_name_, auth_callback));
   devtools_http_handler_.reset(new DevToolsHttpHandler(
       std::move(factory),
diff --git a/chrome/browser/android/dev_tools_server.h b/chrome/browser/android/dev_tools_server.h
index c7f3e96..5f2e515 100644
--- a/chrome/browser/android/dev_tools_server.h
+++ b/chrome/browser/android/dev_tools_server.h
@@ -6,9 +6,11 @@
 #define CHROME_BROWSER_ANDROID_DEV_TOOLS_SERVER_H_
 
 #include <jni.h>
+
+#include <memory>
 #include <string>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace devtools_http_handler {
 class DevToolsHttpHandler;
@@ -30,7 +32,8 @@
 
  private:
   std::string socket_name_;
-  scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
+  std::unique_ptr<devtools_http_handler::DevToolsHttpHandler>
+      devtools_http_handler_;
 
   DISALLOW_COPY_AND_ASSIGN(DevToolsServer);
 };
diff --git a/chrome/browser/android/download/android_download_manager_overwrite_infobar_delegate.cc b/chrome/browser/android/download/android_download_manager_overwrite_infobar_delegate.cc
index 090306cc..7eae0f4d 100644
--- a/chrome/browser/android/download/android_download_manager_overwrite_infobar_delegate.cc
+++ b/chrome/browser/android/download/android_download_manager_overwrite_infobar_delegate.cc
@@ -4,9 +4,11 @@
 
 #include "chrome/browser/android/download/android_download_manager_overwrite_infobar_delegate.h"
 
+#include <memory>
+
 #include "base/android/jni_string.h"
 #include "base/files/file_util.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/android/download/chrome_download_delegate.h"
 #include "chrome/browser/infobars/infobar_service.h"
@@ -33,7 +35,7 @@
     jobject chrome_download_delegate,
     jobject download_info) {
   infobar_service->AddInfoBar(DownloadOverwriteInfoBar::CreateInfoBar(
-      make_scoped_ptr(new AndroidDownloadManagerOverwriteInfoBarDelegate(
+      base::WrapUnique(new AndroidDownloadManagerOverwriteInfoBarDelegate(
           file_name, dir_name, dir_full_path, chrome_download_delegate,
           download_info))));
 }
diff --git a/chrome/browser/android/download/chrome_download_delegate.cc b/chrome/browser/android/download/chrome_download_delegate.cc
index 8ce3facc..4fd1213 100644
--- a/chrome/browser/android/download/chrome_download_delegate.cc
+++ b/chrome/browser/android/download/chrome_download_delegate.cc
@@ -5,7 +5,9 @@
 #include "chrome/browser/android/download/chrome_download_delegate.h"
 
 #include <jni.h>
+
 #include <string>
+#include <type_traits>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
@@ -108,10 +110,13 @@
       base::android::ConvertJavaStringToUTF8(env, jpermission);
 
   // Convert java long long int to c++ pointer, take ownership.
-  scoped_ptr<DownloadControllerAndroid::AcquireFileAccessPermissionCallback> cb(
-      reinterpret_cast<
-          DownloadControllerAndroid::AcquireFileAccessPermissionCallback*>(
-              callback_id));
+  static_assert(
+      std::is_same<
+          DownloadControllerAndroid::AcquireFileAccessPermissionCallback,
+          base::Callback<void(bool)>>::value,
+      "Callback types don't match!");
+  std::unique_ptr<base::Callback<void(bool)>> cb(
+      reinterpret_cast<base::Callback<void(bool)>*>(callback_id));
 
   std::vector<std::string> permissions;
   permissions.push_back(permission);
diff --git a/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc b/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc
index 2d291d3..823222b 100644
--- a/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc
+++ b/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc
@@ -4,10 +4,12 @@
 
 #include "chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.h"
 
+#include <memory>
+
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
 #include "base/files/file_util.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/ui/android/infobars/download_overwrite_infobar.h"
@@ -28,7 +30,7 @@
     const base::FilePath& suggested_path,
     const DownloadTargetDeterminerDelegate::FileSelectedCallback& callback) {
   infobar_service->AddInfoBar(DownloadOverwriteInfoBar::CreateInfoBar(
-      make_scoped_ptr(new ChromeDownloadManagerOverwriteInfoBarDelegate(
+      base::WrapUnique(new ChromeDownloadManagerOverwriteInfoBarDelegate(
           suggested_path, callback))));
 }
 
diff --git a/chrome/browser/android/download/download_manager_service_unittest.cc b/chrome/browser/android/download/download_manager_service_unittest.cc
index 2d49fb5..15325af 100644
--- a/chrome/browser/android/download/download_manager_service_unittest.cc
+++ b/chrome/browser/android/download/download_manager_service_unittest.cc
@@ -74,7 +74,7 @@
   }
 
   base::MessageLoop message_loop_;
-  scoped_ptr<content::MockDownloadItem> download_;
+  std::unique_ptr<content::MockDownloadItem> download_;
   content::MockDownloadManager manager_;
   DownloadManagerService* service_;
   bool finished_;
diff --git a/chrome/browser/android/favicon_helper.h b/chrome/browser/android/favicon_helper.h
index 4c4da282..a463dff7 100644
--- a/chrome/browser/android/favicon_helper.h
+++ b/chrome/browser/android/favicon_helper.h
@@ -7,9 +7,10 @@
 
 #include <jni.h>
 
+#include <memory>
+
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
 
 class FaviconHelper {
@@ -41,7 +42,7 @@
   static bool RegisterFaviconHelper(JNIEnv* env);
 
  private:
-  scoped_ptr<base::CancelableTaskTracker> cancelable_task_tracker_;
+  std::unique_ptr<base::CancelableTaskTracker> cancelable_task_tracker_;
 
   virtual ~FaviconHelper();
 
diff --git a/chrome/browser/android/feedback/connectivity_checker.cc b/chrome/browser/android/feedback/connectivity_checker.cc
index e915e2b..51036206 100644
--- a/chrome/browser/android/feedback/connectivity_checker.cc
+++ b/chrome/browser/android/feedback/connectivity_checker.cc
@@ -94,13 +94,13 @@
   base::android::ScopedJavaGlobalRef<jobject> java_callback_;
 
   // The URLFetcher that executes the connectivity check.
-  scoped_ptr<net::URLFetcher> url_fetcher_;
+  std::unique_ptr<net::URLFetcher> url_fetcher_;
 
   // Whether |this| is already being destroyed, at which point the callback
   // has already happened, and no further action should be taken.
   bool is_being_destroyed_;
 
-  scoped_ptr<base::OneShotTimer> expiration_timer_;
+  std::unique_ptr<base::OneShotTimer> expiration_timer_;
 };
 
 void ConnectivityChecker::OnURLFetchComplete(const net::URLFetcher* source) {
diff --git a/chrome/browser/android/foreign_session_helper.cc b/chrome/browser/android/foreign_session_helper.cc
index 0a6d0d1..0cfeba0 100644
--- a/chrome/browser/android/foreign_session_helper.cc
+++ b/chrome/browser/android/foreign_session_helper.cc
@@ -230,7 +230,7 @@
   DictionaryPrefUpdate pref_update(profile_->GetPrefs(),
                                    prefs::kNtpCollapsedForeignSessions);
   base::DictionaryValue* pref_collapsed_sessions = pref_update.Get();
-  scoped_ptr<base::DictionaryValue> collapsed_sessions(
+  std::unique_ptr<base::DictionaryValue> collapsed_sessions(
       pref_collapsed_sessions->DeepCopy());
   pref_collapsed_sessions->Clear();
 
diff --git a/chrome/browser/android/fullscreen/fullscreen_infobar_delegate.cc b/chrome/browser/android/fullscreen/fullscreen_infobar_delegate.cc
index 074333e..bf31c3a3 100644
--- a/chrome/browser/android/fullscreen/fullscreen_infobar_delegate.cc
+++ b/chrome/browser/android/fullscreen/fullscreen_infobar_delegate.cc
@@ -4,8 +4,10 @@
 
 #include "chrome/browser/android/fullscreen/fullscreen_infobar_delegate.h"
 
+#include <memory>
+
 #include "base/android/jni_string.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "chrome/browser/android/android_theme_resources.h"
 #include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/infobars/infobar_service.h"
@@ -28,7 +30,7 @@
   InfoBarService* infobar_service =
       InfoBarService::FromWebContents(tab_android->web_contents());
   infobar_service->AddInfoBar(
-      infobar_service->CreateConfirmInfoBar(make_scoped_ptr(delegate)));
+      infobar_service->CreateConfirmInfoBar(base::WrapUnique(delegate)));
   return reinterpret_cast<intptr_t>(delegate);
 }
 
diff --git a/chrome/browser/android/history_report/data_provider.cc b/chrome/browser/android/history_report/data_provider.cc
index 73c84354..7cada3a8 100644
--- a/chrome/browser/android/history_report/data_provider.cc
+++ b/chrome/browser/android/history_report/data_provider.cc
@@ -87,7 +87,7 @@
     base::WaitableEvent* finished,
     base::CancelableTaskTracker* task_tracker) {
   history_service->ScheduleDBTask(
-      scoped_ptr<history::HistoryDBTask>(
+      std::unique_ptr<history::HistoryDBTask>(
           new history_report::HistoricVisitsMigrationTask(finished,
                                                           buffer_service)),
       task_tracker);
@@ -108,13 +108,13 @@
 
 DataProvider::~DataProvider() {}
 
-scoped_ptr<std::vector<DeltaFileEntryWithData>> DataProvider::Query(
+std::unique_ptr<std::vector<DeltaFileEntryWithData>> DataProvider::Query(
     int64_t last_seq_no,
     int32_t limit) {
   if (last_seq_no == 0)
     RecreateLog();
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > entries;
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > valid_entries;
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> entries;
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> valid_entries;
   do {
     entries = delta_file_service_->Query(last_seq_no, limit);
     if (!entries->empty()) {
@@ -174,9 +174,9 @@
   {
     base::WaitableEvent finished(false, false);
 
-    scoped_ptr<history::HistoryDBTask> task =
-        scoped_ptr<history::HistoryDBTask>(new GetAllUrlsFromHistoryTask(
-          &finished, &urls));
+    std::unique_ptr<history::HistoryDBTask> task =
+        std::unique_ptr<history::HistoryDBTask>(
+            new GetAllUrlsFromHistoryTask(&finished, &urls));
     content::BrowserThread::PostTask(
         content::BrowserThread::UI, FROM_HERE,
         base::Bind(base::IgnoreResult(&history::HistoryService::ScheduleDBTask),
diff --git a/chrome/browser/android/history_report/data_provider.h b/chrome/browser/android/history_report/data_provider.h
index 5e8f558..814b962 100644
--- a/chrome/browser/android/history_report/data_provider.h
+++ b/chrome/browser/android/history_report/data_provider.h
@@ -7,10 +7,10 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
 
 class Profile;
@@ -38,8 +38,9 @@
   ~DataProvider();
 
   // Provides up to limit delta file entries with sequence number > last_seq_no.
-  scoped_ptr<std::vector<DeltaFileEntryWithData>> Query(int64_t last_seq_no,
-                                                        int32_t limit);
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> Query(
+      int64_t last_seq_no,
+      int32_t limit);
   void StartVisitMigrationToUsageBuffer(
       UsageReportsBufferService* buffer_service);
 
diff --git a/chrome/browser/android/history_report/delta_file_backend_leveldb.cc b/chrome/browser/android/history_report/delta_file_backend_leveldb.cc
index d7b8b46..b9f04e3 100644
--- a/chrome/browser/android/history_report/delta_file_backend_leveldb.cc
+++ b/chrome/browser/android/history_report/delta_file_backend_leveldb.cc
@@ -5,8 +5,10 @@
 #include "chrome/browser/android/history_report/delta_file_backend_leveldb.h"
 
 #include <inttypes.h>
+
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/android/history_report/delta_file_commons.h"
@@ -25,7 +27,7 @@
 
 int64_t GetLastSeqNo(leveldb::DB* db) {
   leveldb::ReadOptions options;
-  scoped_ptr<leveldb::Iterator> db_iter(db->NewIterator(options));
+  std::unique_ptr<leveldb::Iterator> db_iter(db->NewIterator(options));
   db_iter->SeekToLast();
   int64_t seq_no = 0;
   if (db_iter->Valid()) {
@@ -128,7 +130,7 @@
 int64_t DeltaFileBackend::Trim(int64_t lower_bound) {
   if (!EnsureInitialized()) return -1;
   leveldb::ReadOptions read_options;
-  scoped_ptr<leveldb::Iterator> db_iter(db_->NewIterator(read_options));
+  std::unique_ptr<leveldb::Iterator> db_iter(db_->NewIterator(read_options));
   db_iter->SeekToFirst();
   if (!db_iter->Valid())
     return -1;
@@ -190,16 +192,16 @@
   return false;
 }
 
-scoped_ptr<std::vector<DeltaFileEntryWithData>> DeltaFileBackend::Query(
+std::unique_ptr<std::vector<DeltaFileEntryWithData>> DeltaFileBackend::Query(
     int64_t last_seq_no,
     int32_t limit) {
   if (!EnsureInitialized())
-    return make_scoped_ptr(new std::vector<DeltaFileEntryWithData>());
+    return base::WrapUnique(new std::vector<DeltaFileEntryWithData>());
   std::string start;
   base::SStringPrintf(&start, "%" PRId64, last_seq_no + 1);
   leveldb::ReadOptions options;
-  scoped_ptr<leveldb::Iterator> db_it(db_->NewIterator(options));
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result(
+  std::unique_ptr<leveldb::Iterator> db_it(db_->NewIterator(options));
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result(
       new std::vector<DeltaFileEntryWithData>());
   int32_t count = 0;
   for (db_it->Seek(start); db_it->Valid() && count < limit; db_it->Next()) {
@@ -228,7 +230,7 @@
   }
   dump.append("num pending entries=");
   leveldb::ReadOptions options;
-  scoped_ptr<leveldb::Iterator> db_it(db_->NewIterator(options));
+  std::unique_ptr<leveldb::Iterator> db_it(db_->NewIterator(options));
   int num_entries = 0;
   for (db_it->SeekToFirst(); db_it->Valid(); db_it->Next()) num_entries++;
   dump.append(base::IntToString(num_entries));
diff --git a/chrome/browser/android/history_report/delta_file_backend_leveldb.h b/chrome/browser/android/history_report/delta_file_backend_leveldb.h
index d4295d9..bb0def0 100644
--- a/chrome/browser/android/history_report/delta_file_backend_leveldb.h
+++ b/chrome/browser/android/history_report/delta_file_backend_leveldb.h
@@ -7,11 +7,11 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 class GURL;
 
@@ -41,8 +41,9 @@
   bool Recreate(const std::vector<std::string>& urls);
   // Provides up to |limit| delta file entries with
   // sequence number > |last_seq_no|.
-  scoped_ptr<std::vector<DeltaFileEntryWithData>> Query(int64_t last_seq_no,
-                                                        int32_t limit);
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> Query(
+      int64_t last_seq_no,
+      int32_t limit);
   // Removes all entries from delta file
   void Clear();
 
@@ -58,8 +59,8 @@
   class DigitsComparator;
 
   base::FilePath path_;
-  scoped_ptr<leveldb::DB> db_;
-  scoped_ptr<DigitsComparator> leveldb_cmp_;
+  std::unique_ptr<leveldb::DB> db_;
+  std::unique_ptr<DigitsComparator> leveldb_cmp_;
 
   DISALLOW_COPY_AND_ASSIGN(DeltaFileBackend);
 };
diff --git a/chrome/browser/android/history_report/delta_file_backend_leveldb_unittest.cc b/chrome/browser/android/history_report/delta_file_backend_leveldb_unittest.cc
index f01d556e..d98b1a18 100644
--- a/chrome/browser/android/history_report/delta_file_backend_leveldb_unittest.cc
+++ b/chrome/browser/android/history_report/delta_file_backend_leveldb_unittest.cc
@@ -6,12 +6,12 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/history_report/delta_file_commons.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -29,7 +29,7 @@
     backend_.reset(new DeltaFileBackend(temp_dir_.path()));
   }
 
-  scoped_ptr<DeltaFileBackend> backend_;
+  std::unique_ptr<DeltaFileBackend> backend_;
 
  private:
   base::ScopedTempDir temp_dir_;
@@ -40,7 +40,7 @@
 TEST_F(DeltaFileBackendTest, AddPage) {
   GURL test_url("test.org");
   backend_->PageAdded(test_url);
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(1u, result->size());
@@ -53,7 +53,7 @@
 TEST_F(DeltaFileBackendTest, DelPage) {
   GURL test_url("test.org");
   backend_->PageDeleted(test_url);
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(1u, result->size());
@@ -76,7 +76,7 @@
   urls.push_back("test.org");
   urls.push_back("test2.org");
   EXPECT_TRUE(backend_->Recreate(urls));
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(2u, result->size());
@@ -100,7 +100,7 @@
   backend_->PageDeleted(test_url);
   backend_->Clear();
 
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(0u, result->size());
@@ -116,7 +116,7 @@
   backend_->PageDeleted(test_url);
 
   // Skip first entry (start with sequence number == 2).
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(1, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(4u, result->size());
@@ -137,7 +137,7 @@
   backend_->PageDeleted(test_url);
 
   // Query for up to 3 results.
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 3);
   EXPECT_TRUE(result.get() != NULL);
   // Check that we got exactly 3 results
@@ -160,7 +160,7 @@
   // Trim all entries with sequence number <= 3.
   int64_t max_seq_no = backend_->Trim(3);
   EXPECT_EQ(5, max_seq_no);
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(2u, result->size());
@@ -184,7 +184,7 @@
   // in delta file.
   int64_t max_seq_no = backend_->Trim(5);
   EXPECT_EQ(5, max_seq_no);
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(1u, result->size());
@@ -207,7 +207,7 @@
   // in delta file.
   int64_t max_seq_no = backend_->Trim(6);
   EXPECT_EQ(5, max_seq_no);
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(1u, result->size());
@@ -226,7 +226,7 @@
   // in delta file.
   int64_t max_seq_no = backend_->Trim(1);
   EXPECT_EQ(1, max_seq_no);
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(0, 10);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(1u, result->size());
@@ -245,7 +245,7 @@
   }
 
   // Skip first entry (start with sequence number == 2).
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result =
       backend_->Query(1, 100);
   EXPECT_TRUE(result.get() != NULL);
   EXPECT_EQ(49u, result->size());
diff --git a/chrome/browser/android/history_report/delta_file_service.cc b/chrome/browser/android/history_report/delta_file_service.cc
index 9af69e1..c542177 100644
--- a/chrome/browser/android/history_report/delta_file_service.cc
+++ b/chrome/browser/android/history_report/delta_file_service.cc
@@ -30,12 +30,12 @@
   finished->Signal();
 }
 
-void DoQuery(
-    history_report::DeltaFileBackend* backend,
-    int64_t last_seq_no,
-    int32_t limit,
-    base::WaitableEvent* finished,
-    scoped_ptr<std::vector<history_report::DeltaFileEntryWithData>>* result) {
+void DoQuery(history_report::DeltaFileBackend* backend,
+             int64_t last_seq_no,
+             int32_t limit,
+             base::WaitableEvent* finished,
+             std::unique_ptr<
+                 std::vector<history_report::DeltaFileEntryWithData>>* result) {
   *result = backend->Query(last_seq_no, limit);
   finished->Signal();
 }
@@ -111,10 +111,10 @@
   return result;
 }
 
-scoped_ptr<std::vector<DeltaFileEntryWithData>> DeltaFileService::Query(
+std::unique_ptr<std::vector<DeltaFileEntryWithData>> DeltaFileService::Query(
     int64_t last_seq_no,
     int32_t limit) {
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > result;
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> result;
   base::WaitableEvent finished(false, false);
   base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool();
   pool->PostSequencedWorkerTaskWithShutdownBehavior(
diff --git a/chrome/browser/android/history_report/delta_file_service.h b/chrome/browser/android/history_report/delta_file_service.h
index dda4e86..63425142 100644
--- a/chrome/browser/android/history_report/delta_file_service.h
+++ b/chrome/browser/android/history_report/delta_file_service.h
@@ -7,11 +7,11 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/threading/sequenced_worker_pool.h"
 
 class GURL;
@@ -42,8 +42,9 @@
   // entries for given urls.
   bool Recreate(const std::vector<std::string>& urls);
   // Provides up to limit delta file entries with seqno > last_seq_no.
-  scoped_ptr<std::vector<DeltaFileEntryWithData>> Query(int64_t last_seq_no,
-                                                        int32_t limit);
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> Query(
+      int64_t last_seq_no,
+      int32_t limit);
   // Removes all entries from delta file.
   void Clear();
 
@@ -53,7 +54,7 @@
  private:
 
   base::SequencedWorkerPool::SequenceToken worker_pool_token_;
-  scoped_ptr<DeltaFileBackend> delta_file_backend_;
+  std::unique_ptr<DeltaFileBackend> delta_file_backend_;
 
   DISALLOW_COPY_AND_ASSIGN(DeltaFileService);
 };
diff --git a/chrome/browser/android/history_report/history_report_jni_bridge.cc b/chrome/browser/android/history_report/history_report_jni_bridge.cc
index 86d2456..ee8d0a04 100644
--- a/chrome/browser/android/history_report/history_report_jni_bridge.cc
+++ b/chrome/browser/android/history_report/history_report_jni_bridge.cc
@@ -87,7 +87,7 @@
     const JavaParamRef<jobject>& obj,
     jlong last_seq_no,
     jint limit) {
-  scoped_ptr<std::vector<DeltaFileEntryWithData> > entries =
+  std::unique_ptr<std::vector<DeltaFileEntryWithData>> entries =
       data_provider_->Query(last_seq_no, limit);
   ScopedJavaLocalRef<jobjectArray> jentries_array =
       history_report::Java_HistoryReportJniBridge_createDeltaFileEntriesArray(
@@ -119,7 +119,7 @@
 HistoryReportJniBridge::GetUsageReportsBatch(JNIEnv* env,
                                              const JavaParamRef<jobject>& obj,
                                              jint batch_size) {
-  scoped_ptr<std::vector<UsageReport> > reports =
+  std::unique_ptr<std::vector<UsageReport>> reports =
       usage_reports_buffer_service_->GetUsageReportsBatch(batch_size);
   ScopedJavaLocalRef<jobjectArray> jreports_array =
       history_report::Java_HistoryReportJniBridge_createUsageReportsArray(env,
diff --git a/chrome/browser/android/history_report/history_report_jni_bridge.h b/chrome/browser/android/history_report/history_report_jni_bridge.h
index 7251817..ec77d4f 100644
--- a/chrome/browser/android/history_report/history_report_jni_bridge.h
+++ b/chrome/browser/android/history_report/history_report_jni_bridge.h
@@ -6,12 +6,13 @@
 #define CHROME_BROWSER_ANDROID_HISTORY_REPORT_HISTORY_REPORT_JNI_BRIDGE_H_
 
 #include <jni.h>
+
+#include <memory>
 #include <string>
 
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace bookmarks {
 class BookmarkModel;
@@ -71,11 +72,11 @@
 
  private:
   JavaObjectWeakGlobalRef weak_java_provider_;
-  scoped_ptr<DataObserver> data_observer_;
-  scoped_ptr<DataProvider> data_provider_;
-  scoped_ptr<DeltaFileService> delta_file_service_;
-  scoped_ptr<bookmarks::BookmarkModel> bookmark_model_;
-  scoped_ptr<UsageReportsBufferService> usage_reports_buffer_service_;
+  std::unique_ptr<DataObserver> data_observer_;
+  std::unique_ptr<DataProvider> data_provider_;
+  std::unique_ptr<DeltaFileService> delta_file_service_;
+  std::unique_ptr<bookmarks::BookmarkModel> bookmark_model_;
+  std::unique_ptr<UsageReportsBufferService> usage_reports_buffer_service_;
 
   DISALLOW_COPY_AND_ASSIGN(HistoryReportJniBridge);
 };
diff --git a/chrome/browser/android/history_report/usage_reports_buffer_backend.cc b/chrome/browser/android/history_report/usage_reports_buffer_backend.cc
index 36c1ca87..c8214a0 100644
--- a/chrome/browser/android/history_report/usage_reports_buffer_backend.cc
+++ b/chrome/browser/android/history_report/usage_reports_buffer_backend.cc
@@ -77,15 +77,16 @@
     LOG(WARNING) << "AddVisit failed " << status.ToString();
 }
 
-scoped_ptr<std::vector<UsageReport> >
+std::unique_ptr<std::vector<UsageReport>>
 UsageReportsBufferBackend::GetUsageReportsBatch(int batch_size) {
-  scoped_ptr<std::vector<UsageReport> > reports(new std::vector<UsageReport>());
+  std::unique_ptr<std::vector<UsageReport>> reports(
+      new std::vector<UsageReport>());
   if (!db_.get()) {
     return reports;
   }
   reports->reserve(batch_size);
   leveldb::ReadOptions options;
-  scoped_ptr<leveldb::Iterator> db_iter(db_->NewIterator(options));
+  std::unique_ptr<leveldb::Iterator> db_iter(db_->NewIterator(options));
   db_iter->SeekToFirst();
   while (batch_size > 0 && db_iter->Valid()) {
     history_report::UsageReport last_report;
@@ -135,7 +136,7 @@
   dump.append("num pending entries=");
   leveldb::ReadOptions options;
   int num_entries = 0;
-  scoped_ptr<leveldb::Iterator> db_it(db_->NewIterator(options));
+  std::unique_ptr<leveldb::Iterator> db_it(db_->NewIterator(options));
   for (db_it->SeekToFirst(); db_it->Valid(); db_it->Next()) num_entries++;
   dump.append(base::IntToString(num_entries));
   dump.append("]");
diff --git a/chrome/browser/android/history_report/usage_reports_buffer_backend.h b/chrome/browser/android/history_report/usage_reports_buffer_backend.h
index 3c275a15..3f3b120 100644
--- a/chrome/browser/android/history_report/usage_reports_buffer_backend.h
+++ b/chrome/browser/android/history_report/usage_reports_buffer_backend.h
@@ -7,12 +7,12 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace base {
 class FilePath;
@@ -39,7 +39,7 @@
   void AddVisit(const std::string& id, int64_t timestamp_ms, bool typed_visit);
 
   // Returns a set of up to |amount| usage reports.
-  scoped_ptr<std::vector<UsageReport> > GetUsageReportsBatch(int amount);
+  std::unique_ptr<std::vector<UsageReport>> GetUsageReportsBatch(int amount);
 
   void Remove(const std::vector<std::string>& reports);
 
@@ -51,7 +51,7 @@
 
  private:
   // NULL until Init method is called.
-  scoped_ptr<leveldb::DB> db_;
+  std::unique_ptr<leveldb::DB> db_;
   base::FilePath db_file_name_;
 
   DISALLOW_COPY_AND_ASSIGN(UsageReportsBufferBackend);
diff --git a/chrome/browser/android/history_report/usage_reports_buffer_backend_unittest.cc b/chrome/browser/android/history_report/usage_reports_buffer_backend_unittest.cc
index 16a3b04f..4eab218 100644
--- a/chrome/browser/android/history_report/usage_reports_buffer_backend_unittest.cc
+++ b/chrome/browser/android/history_report/usage_reports_buffer_backend_unittest.cc
@@ -6,10 +6,11 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/history_report/usage_report_util.h"
 #include "chrome/browser/android/proto/delta_file.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -39,7 +40,7 @@
     EXPECT_TRUE(buffer_->Init());
   }
 
-  scoped_ptr<UsageReportsBufferBackend> buffer_;
+  std::unique_ptr<UsageReportsBufferBackend> buffer_;
   base::ScopedTempDir temp_dir_;
 
  private:
@@ -49,7 +50,7 @@
 TEST_F(UsageReportsBufferBackendTest, AddTypedVisit) {
   buffer_->AddVisit("id", 7, true);
 
-  scoped_ptr<std::vector<UsageReport> > result =
+  std::unique_ptr<std::vector<UsageReport>> result =
       buffer_->GetUsageReportsBatch(1);
 
   EXPECT_TRUE(result.get() != NULL);
@@ -60,7 +61,7 @@
 TEST_F(UsageReportsBufferBackendTest, AddNotTypedVisit) {
   buffer_->AddVisit("id", 7, false);
 
-  scoped_ptr<std::vector<UsageReport> > result =
+  std::unique_ptr<std::vector<UsageReport>> result =
       buffer_->GetUsageReportsBatch(1);
 
   EXPECT_TRUE(result.get() != NULL);
@@ -74,7 +75,7 @@
   buffer_->AddVisit("id3", 12, false);
   buffer_->AddVisit("id4", 5, true);
 
-  scoped_ptr<std::vector<UsageReport> > result =
+  std::unique_ptr<std::vector<UsageReport>> result =
       buffer_->GetUsageReportsBatch(5);
 
   EXPECT_TRUE(result.get() != NULL);
@@ -111,7 +112,7 @@
   buffer_->AddVisit("id3", 12, false);
   buffer_->AddVisit("id4", 5, true);
 
-  scoped_ptr<std::vector<UsageReport> > result =
+  std::unique_ptr<std::vector<UsageReport>> result =
       buffer_->GetUsageReportsBatch(3);
 
   EXPECT_TRUE(result.get() != NULL);
@@ -145,7 +146,7 @@
 TEST_F(UsageReportsBufferBackendTest, Remove) {
   buffer_->AddVisit("id", 7, true);
 
-  scoped_ptr<std::vector<UsageReport> > result =
+  std::unique_ptr<std::vector<UsageReport>> result =
       buffer_->GetUsageReportsBatch(1);
 
   EXPECT_TRUE(result.get() != NULL);
@@ -179,7 +180,7 @@
 TEST_F(UsageReportsBufferBackendTest, Persistence) {
   buffer_->AddVisit("id", 7, true);
 
-  scoped_ptr<std::vector<UsageReport> > result =
+  std::unique_ptr<std::vector<UsageReport>> result =
       buffer_->GetUsageReportsBatch(2);
 
   EXPECT_TRUE(result.get() != NULL);
diff --git a/chrome/browser/android/history_report/usage_reports_buffer_service.cc b/chrome/browser/android/history_report/usage_reports_buffer_service.cc
index 6cbc01c..a83df10c 100644
--- a/chrome/browser/android/history_report/usage_reports_buffer_service.cc
+++ b/chrome/browser/android/history_report/usage_reports_buffer_service.cc
@@ -36,7 +36,7 @@
     history_report::UsageReportsBufferBackend* backend,
     int32_t batch_size,
     base::WaitableEvent* finished,
-    scoped_ptr<std::vector<history_report::UsageReport>>* result) {
+    std::unique_ptr<std::vector<history_report::UsageReport>>* result) {
   *result = backend->GetUsageReportsBatch(batch_size);
   finished->Signal();
 }
@@ -93,9 +93,9 @@
       base::SequencedWorkerPool::BLOCK_SHUTDOWN);
 }
 
-scoped_ptr<std::vector<UsageReport>>
+std::unique_ptr<std::vector<UsageReport>>
 UsageReportsBufferService::GetUsageReportsBatch(int32_t batch_size) {
-  scoped_ptr<std::vector<UsageReport> > result;
+  std::unique_ptr<std::vector<UsageReport>> result;
   base::WaitableEvent finished(false, false);
   base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool();
   // It's ok to pass unretained pointers here because this is a synchronous
diff --git a/chrome/browser/android/history_report/usage_reports_buffer_service.h b/chrome/browser/android/history_report/usage_reports_buffer_service.h
index 2c8bdaef..da459c5 100644
--- a/chrome/browser/android/history_report/usage_reports_buffer_service.h
+++ b/chrome/browser/android/history_report/usage_reports_buffer_service.h
@@ -7,11 +7,11 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/threading/sequenced_worker_pool.h"
 
 namespace base {
@@ -38,7 +38,8 @@
   void AddVisit(const std::string& id, int64_t timestamp_ms, bool typed_visit);
 
   // Get a batch of usage reports of size up to |batch_size|. It's synchronous.
-  scoped_ptr<std::vector<UsageReport>> GetUsageReportsBatch(int32_t batch_size);
+  std::unique_ptr<std::vector<UsageReport>> GetUsageReportsBatch(
+      int32_t batch_size);
 
   // Remove given usage reports from buffer. It's synchronous.
   void Remove(const std::vector<std::string>& report_ids);
@@ -53,7 +54,7 @@
   // Token used to serialize buffer operations.
   base::SequencedWorkerPool::SequenceToken worker_pool_token_;
   // Non thread safe backend.
-  scoped_ptr<UsageReportsBufferBackend> backend_;
+  std::unique_ptr<UsageReportsBufferBackend> backend_;
 
   DISALLOW_COPY_AND_ASSIGN(UsageReportsBufferService);
 };
diff --git a/chrome/browser/android/hung_renderer_infobar_delegate.cc b/chrome/browser/android/hung_renderer_infobar_delegate.cc
index ffdbbc0..8acdfa0 100644
--- a/chrome/browser/android/hung_renderer_infobar_delegate.cc
+++ b/chrome/browser/android/hung_renderer_infobar_delegate.cc
@@ -19,8 +19,8 @@
     InfoBarService* infobar_service,
     content::RenderProcessHost* render_process_host) {
   DCHECK(render_process_host);
-  infobar_service->AddInfoBar(
-      infobar_service->CreateConfirmInfoBar(scoped_ptr<ConfirmInfoBarDelegate>(
+  infobar_service->AddInfoBar(infobar_service->CreateConfirmInfoBar(
+      std::unique_ptr<ConfirmInfoBarDelegate>(
           new HungRendererInfoBarDelegate(render_process_host))));
 }
 
diff --git a/chrome/browser/android/large_icon_bridge.h b/chrome/browser/android/large_icon_bridge.h
index 3160b13..955c7f7 100644
--- a/chrome/browser/android/large_icon_bridge.h
+++ b/chrome/browser/android/large_icon_bridge.h
@@ -7,9 +7,10 @@
 
 #include <jni.h>
 
+#include <memory>
+
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
 
 // The C++ counterpart to Java's LargeIconBridge. Together these classes expose
diff --git a/chrome/browser/android/location_settings_impl.h b/chrome/browser/android/location_settings_impl.h
index 46d962a4..8391912 100644
--- a/chrome/browser/android/location_settings_impl.h
+++ b/chrome/browser/android/location_settings_impl.h
@@ -5,10 +5,11 @@
 #ifndef CHROME_BROWSER_ANDROID_LOCATION_SETTINGS_IMPL_H_
 #define CHROME_BROWSER_ANDROID_LOCATION_SETTINGS_IMPL_H_
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/location_settings.h"
 
 class LocationSettingsImpl : public LocationSettings {
diff --git a/chrome/browser/android/logo_bridge.h b/chrome/browser/android/logo_bridge.h
index a5f1edc..83ba4d8 100644
--- a/chrome/browser/android/logo_bridge.h
+++ b/chrome/browser/android/logo_bridge.h
@@ -48,7 +48,7 @@
 
   // The URLFetcher currently fetching the animated logo. NULL when not
   // fetching.
-  scoped_ptr<net::URLFetcher> fetcher_;
+  std::unique_ptr<net::URLFetcher> fetcher_;
 
   // The timestamp for the last time the animated logo started downloading.
   base::TimeTicks animated_logo_download_start_time_;
diff --git a/chrome/browser/android/logo_service.cc b/chrome/browser/android/logo_service.cc
index c6f16b9..ff639514 100644
--- a/chrome/browser/android/logo_service.cc
+++ b/chrome/browser/android/logo_service.cc
@@ -116,9 +116,8 @@
     logo_tracker_.reset(new LogoTracker(
         profile_->GetPath().Append(kCachedLogoDirectory),
         BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
-        BrowserThread::GetBlockingPool(),
-        profile_->GetRequestContext(),
-        scoped_ptr<search_provider_logos::LogoDelegate>(
+        BrowserThread::GetBlockingPool(), profile_->GetRequestContext(),
+        std::unique_ptr<search_provider_logos::LogoDelegate>(
             new ChromeLogoDelegate())));
   }
 
diff --git a/chrome/browser/android/logo_service.h b/chrome/browser/android/logo_service.h
index 6a89e4c..de9f551 100644
--- a/chrome/browser/android/logo_service.h
+++ b/chrome/browser/android/logo_service.h
@@ -31,7 +31,7 @@
 
  private:
   Profile* profile_;
-  scoped_ptr<search_provider_logos::LogoTracker> logo_tracker_;
+  std::unique_ptr<search_provider_logos::LogoTracker> logo_tracker_;
 
   DISALLOW_COPY_AND_ASSIGN(LogoService);
 };
diff --git a/chrome/browser/android/media/media_throttle_infobar_delegate.cc b/chrome/browser/android/media/media_throttle_infobar_delegate.cc
index b7c7987..d646722 100644
--- a/chrome/browser/android/media/media_throttle_infobar_delegate.cc
+++ b/chrome/browser/android/media/media_throttle_infobar_delegate.cc
@@ -23,9 +23,10 @@
     const DecodeRequestGrantedCallback& callback) {
   InfoBarService* infobar_service =
       InfoBarService::FromWebContents(web_contents);
-  scoped_ptr<infobars::InfoBar> new_infobar(
-      infobar_service->CreateConfirmInfoBar(scoped_ptr<ConfirmInfoBarDelegate>(
-          new MediaThrottleInfoBarDelegate(callback))));
+  std::unique_ptr<infobars::InfoBar> new_infobar(
+      infobar_service->CreateConfirmInfoBar(
+          std::unique_ptr<ConfirmInfoBarDelegate>(
+              new MediaThrottleInfoBarDelegate(callback))));
 
   for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
     infobars::InfoBar* old_infobar = infobar_service->infobar_at(i);
diff --git a/chrome/browser/android/metrics/uma_session_stats.h b/chrome/browser/android/metrics/uma_session_stats.h
index ea5ed70a..391ed24 100644
--- a/chrome/browser/android/metrics/uma_session_stats.h
+++ b/chrome/browser/android/metrics/uma_session_stats.h
@@ -7,11 +7,12 @@
 
 #include <jni.h>
 #include <stdint.h>
+
+#include <memory>
 #include <string>
 
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/time/time.h"
 
 class UserActionRateCounter;
diff --git a/chrome/browser/android/net/external_estimate_provider_android_unittest.cc b/chrome/browser/android/net/external_estimate_provider_android_unittest.cc
index b5205816..1cb913b 100644
--- a/chrome/browser/android/net/external_estimate_provider_android_unittest.cc
+++ b/chrome/browser/android/net/external_estimate_provider_android_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/at_exit.h"
 #include "base/test/histogram_tester.h"
 #include "base/time/time.h"
+#include "content/public/test/test_browser_thread_bundle.h"
 #include "net/base/network_quality_estimator.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -36,7 +37,7 @@
 class TestNetworkQualityEstimator : public net::NetworkQualityEstimator {
  public:
   TestNetworkQualityEstimator(
-      scoped_ptr<chrome::android::ExternalEstimateProviderAndroid>
+      std::unique_ptr<chrome::android::ExternalEstimateProviderAndroid>
           external_estimate_provider,
       const std::map<std::string, std::string>& variation_params)
       : NetworkQualityEstimator(std::move(external_estimate_provider),
@@ -74,9 +75,13 @@
 // Tests if the |ExternalEstimateProviderAndroid| notifies
 // |NetworkQualityEstimator|.
 TEST(ExternalEstimateProviderAndroidTest, DelegateTest) {
+  content::TestBrowserThreadBundle thread_bundle(
+      content::TestBrowserThreadBundle::IO_MAINLOOP);
+
   base::ShadowingAtExitManager at_exit_manager;
   base::HistogramTester histogram_tester;
-  scoped_ptr<TestExternalEstimateProviderAndroid> external_estimate_provider;
+  std::unique_ptr<TestExternalEstimateProviderAndroid>
+      external_estimate_provider;
   external_estimate_provider.reset(new TestExternalEstimateProviderAndroid());
 
   TestExternalEstimateProviderAndroid* ptr = external_estimate_provider.get();
diff --git a/chrome/browser/android/ntp/most_visited_sites.cc b/chrome/browser/android/ntp/most_visited_sites.cc
index 1d5d4cbf..aa7f5dd1 100644
--- a/chrome/browser/android/ntp/most_visited_sites.cc
+++ b/chrome/browser/android/ntp/most_visited_sites.cc
@@ -86,12 +86,12 @@
     NUM_TILE_TYPES,
 };
 
-scoped_ptr<SkBitmap> MaybeFetchLocalThumbnail(
+std::unique_ptr<SkBitmap> MaybeFetchLocalThumbnail(
     const GURL& url,
     const scoped_refptr<TopSites>& top_sites) {
   DCHECK_CURRENTLY_ON(BrowserThread::DB);
   scoped_refptr<base::RefCountedMemory> image;
-  scoped_ptr<SkBitmap> bitmap;
+  std::unique_ptr<SkBitmap> bitmap;
   if (top_sites && top_sites->GetPageThumbnail(url, false, &image))
     bitmap.reset(gfx::JPEGCodec::Decode(image->front(), image->size()));
   return bitmap;
@@ -262,7 +262,7 @@
     const JavaParamRef<jstring>& j_url,
     const JavaParamRef<jobject>& j_callback_obj) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback(
+  std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback(
       new ScopedJavaGlobalRef<jobject>());
   j_callback->Reset(env, j_callback_obj);
 
@@ -279,8 +279,8 @@
 
 void MostVisitedSites::OnLocalThumbnailFetched(
     const GURL& url,
-    scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback,
-    scoped_ptr<SkBitmap> bitmap) {
+    std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback,
+    std::unique_ptr<SkBitmap> bitmap) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!bitmap.get()) {
     // A thumbnail is not locally available for |url|. Make sure it is put in
@@ -317,7 +317,7 @@
 
 void MostVisitedSites::OnObtainedThumbnail(
     bool is_local_thumbnail,
-    scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback,
+    std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback,
     const GURL& url,
     const SkBitmap* bitmap) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -473,7 +473,7 @@
       continue;
     }
 
-    scoped_ptr<Suggestion> suggestion(new Suggestion());
+    std::unique_ptr<Suggestion> suggestion(new Suggestion());
     suggestion->title = visited.title;
     suggestion->url = visited.url;
     suggestion->source = TOP_SITES;
@@ -510,7 +510,7 @@
       continue;
     }
 
-    scoped_ptr<Suggestion> generated_suggestion(new Suggestion());
+    std::unique_ptr<Suggestion> generated_suggestion(new Suggestion());
     generated_suggestion->title = base::UTF8ToUTF16(suggestion.title());
     generated_suggestion->url = GURL(suggestion.url());
     generated_suggestion->source = SUGGESTIONS_SERVICE;
@@ -563,7 +563,7 @@
       continue;
     }
 
-    scoped_ptr<Suggestion> suggestion(new Suggestion());
+    std::unique_ptr<Suggestion> suggestion(new Suggestion());
     suggestion->title = whitelist->title();
     suggestion->url = whitelist->entry_point();
     suggestion->source = WHITELIST;
@@ -610,7 +610,7 @@
       if (hosts.find(host) != hosts.end())
         continue;
 
-      scoped_ptr<Suggestion> suggestion(new Suggestion());
+      std::unique_ptr<Suggestion> suggestion(new Suggestion());
       suggestion->title = popular_site.title;
       suggestion->url = GURL(popular_site.url);
       suggestion->source = POPULAR;
@@ -774,8 +774,8 @@
 size_t MostVisitedSites::InsertAllSuggestions(
     size_t start_position,
     const std::vector<size_t>& insert_positions,
-    std::vector<scoped_ptr<Suggestion>>* src_suggestions,
-    std::vector<scoped_ptr<Suggestion>>* dst_suggestions) {
+    std::vector<std::unique_ptr<Suggestion>>* src_suggestions,
+    std::vector<std::unique_ptr<Suggestion>>* dst_suggestions) {
   size_t num_inserts = insert_positions.size();
   size_t num_dests = dst_suggestions->size();
 
diff --git a/chrome/browser/android/ntp/most_visited_sites.h b/chrome/browser/android/ntp/most_visited_sites.h
index 2b813ef..548db8c3 100644
--- a/chrome/browser/android/ntp/most_visited_sites.h
+++ b/chrome/browser/android/ntp/most_visited_sites.h
@@ -8,6 +8,7 @@
 #include <jni.h>
 #include <stddef.h>
 
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -15,7 +16,6 @@
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observer.h"
 #include "chrome/browser/supervised_user/supervised_user_service.h"
@@ -103,7 +103,7 @@
     DISALLOW_COPY_AND_ASSIGN(Suggestion);
   };
 
-  using SuggestionsVector = std::vector<scoped_ptr<Suggestion>>;
+  using SuggestionsVector = std::vector<std::unique_ptr<Suggestion>>;
 
   ~MostVisitedSites() override;
   void QueryMostVisitedURLs();
@@ -182,14 +182,14 @@
   // Runs on the UI Thread.
   void OnLocalThumbnailFetched(
       const GURL& url,
-      scoped_ptr<base::android::ScopedJavaGlobalRef<jobject>> j_callback,
-      scoped_ptr<SkBitmap> bitmap);
+      std::unique_ptr<base::android::ScopedJavaGlobalRef<jobject>> j_callback,
+      std::unique_ptr<SkBitmap> bitmap);
 
   // Callback for when the thumbnail lookup is complete.
   // Runs on the UI Thread.
   void OnObtainedThumbnail(
       bool is_local_thumbnail,
-      scoped_ptr<base::android::ScopedJavaGlobalRef<jobject>> j_callback,
+      std::unique_ptr<base::android::ScopedJavaGlobalRef<jobject>> j_callback,
       const GURL& url,
       const SkBitmap* bitmap);
 
@@ -225,7 +225,7 @@
   // recorded once both the previous flags are true.
   bool recorded_uma_;
 
-  scoped_ptr<
+  std::unique_ptr<
       suggestions::SuggestionsService::ResponseCallbackList::Subscription>
       suggestions_subscription_;
 
@@ -233,7 +233,7 @@
 
   MostVisitedSource mv_source_;
 
-  scoped_ptr<PopularSites> popular_sites_;
+  std::unique_ptr<PopularSites> popular_sites_;
 
   SuggestionsVector current_suggestions_;
 
diff --git a/chrome/browser/android/ntp/most_visited_sites_unittest.cc b/chrome/browser/android/ntp/most_visited_sites_unittest.cc
index 22f12a49..6afdd8c 100644
--- a/chrome/browser/android/ntp/most_visited_sites_unittest.cc
+++ b/chrome/browser/android/ntp/most_visited_sites_unittest.cc
@@ -2,14 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/android/ntp/most_visited_sites.h"
+
 #include <stddef.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/android/ntp/most_visited_sites.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
@@ -77,12 +79,12 @@
     EXPECT_EQ(result_is_personal, expected_sites_is_personal);
     EXPECT_EQ(result_sites, expected_sites);
   }
-  static scoped_ptr<MostVisitedSites::Suggestion> MakeSuggestionFrom(
+  static std::unique_ptr<MostVisitedSites::Suggestion> MakeSuggestionFrom(
       const TitleURL& title_url,
       bool is_personal,
       bool whitelist) {
-    scoped_ptr<MostVisitedSites::Suggestion> suggestion =
-        make_scoped_ptr(new MostVisitedSites::Suggestion());
+    std::unique_ptr<MostVisitedSites::Suggestion> suggestion =
+        base::WrapUnique(new MostVisitedSites::Suggestion());
     suggestion->title = title_url.title;
     suggestion->url = GURL(title_url.url);
     suggestion->source = whitelist ? MostVisitedSites::WHITELIST
diff --git a/chrome/browser/android/ntp/popular_sites.cc b/chrome/browser/android/ntp/popular_sites.cc
index 0a2255f7..6885eef3 100644
--- a/chrome/browser/android/ntp/popular_sites.cc
+++ b/chrome/browser/android/ntp/popular_sites.cc
@@ -121,7 +121,7 @@
   return dir.AppendASCII(kPopularSitesLocalFilename);
 }
 
-scoped_ptr<std::vector<PopularSites::Site>> ReadAndParseJsonFile(
+std::unique_ptr<std::vector<PopularSites::Site>> ReadAndParseJsonFile(
     const base::FilePath& path) {
   std::string json;
   if (!base::ReadFileToString(path, &json)) {
@@ -129,7 +129,7 @@
     return nullptr;
   }
 
-  scoped_ptr<base::Value> value =
+  std::unique_ptr<base::Value> value =
       base::JSONReader::Read(json, base::JSON_ALLOW_TRAILING_COMMAS);
   base::ListValue* list;
   if (!value || !value->GetAsList(&list)) {
@@ -137,7 +137,7 @@
     return nullptr;
   }
 
-  scoped_ptr<std::vector<PopularSites::Site>> sites(
+  std::unique_ptr<std::vector<PopularSites::Site>> sites(
       new std::vector<PopularSites::Site>);
   for (size_t i = 0; i < list->GetSize(); i++) {
     base::DictionaryValue* item;
@@ -301,7 +301,7 @@
       base::Bind(&PopularSites::OnJsonParsed, weak_ptr_factory_.GetWeakPtr()));
 }
 
-void PopularSites::OnJsonParsed(scoped_ptr<std::vector<Site>> sites) {
+void PopularSites::OnJsonParsed(std::unique_ptr<std::vector<Site>> sites) {
   if (sites)
     sites_.swap(*sites);
   else
diff --git a/chrome/browser/android/ntp/popular_sites.h b/chrome/browser/android/ntp/popular_sites.h
index 3735414..c7dd59f5 100644
--- a/chrome/browser/android/ntp/popular_sites.h
+++ b/chrome/browser/android/ntp/popular_sites.h
@@ -5,13 +5,13 @@
 #ifndef CHROME_BROWSER_ANDROID_NTP_POPULAR_SITES_H_
 #define CHROME_BROWSER_ANDROID_NTP_POPULAR_SITES_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback.h"
 #include "base/files/file_path.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
 #include "chrome/browser/net/file_downloader.h"
@@ -102,10 +102,10 @@
   void OnDownloadDone(bool is_fallback, FileDownloader::Result result);
 
   void ParseSiteList(const base::FilePath& path);
-  void OnJsonParsed(scoped_ptr<std::vector<Site>> sites);
+  void OnJsonParsed(std::unique_ptr<std::vector<Site>> sites);
 
   FinishedCallback callback_;
-  scoped_ptr<FileDownloader> downloader_;
+  std::unique_ptr<FileDownloader> downloader_;
   std::vector<Site> sites_;
   std::string pending_country_;
   std::string pending_version_;
diff --git a/chrome/browser/android/offline_pages/offline_page_bridge.cc b/chrome/browser/android/offline_pages/offline_page_bridge.cc
index c5021b8..eb212d3 100644
--- a/chrome/browser/android/offline_pages/offline_page_bridge.cc
+++ b/chrome/browser/android/offline_pages/offline_page_bridge.cc
@@ -4,11 +4,11 @@
 
 #include "chrome/browser/android/offline_pages/offline_page_bridge.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h"
 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
 #include "chrome/browser/android/offline_pages/offline_page_utils.h"
@@ -226,7 +226,7 @@
       content::WebContents::FromJavaWebContents(j_web_contents);
   GURL url(web_contents->GetLastCommittedURL());
 
-  scoped_ptr<OfflinePageArchiver> archiver(
+  std::unique_ptr<OfflinePageArchiver> archiver(
       new OfflinePageMHTMLArchiver(web_contents));
 
   offline_pages::ClientId client_id;
diff --git a/chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h b/chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h
index 64d67e4b..118deca5 100644
--- a/chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h
+++ b/chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h
@@ -35,7 +35,7 @@
 // Example:
 //   void SavePageOffline(content::WebContents* web_contents) {
 //     const GURL& url = web_contents->GetLastCommittedURL();
-//     scoped_ptr<OfflinePageMHTMLArchiver> archiver(
+//     std::unique_ptr<OfflinePageMHTMLArchiver> archiver(
 //         new OfflinePageMHTMLArchiver(
 //             web_contents, archive_dir));
 //     // Callback is of type OfflinePageModel::SavePageCallback.
diff --git a/chrome/browser/android/offline_pages/offline_page_mhtml_archiver_unittest.cc b/chrome/browser/android/offline_pages/offline_page_mhtml_archiver_unittest.cc
index 94370c43..76da0b1 100644
--- a/chrome/browser/android/offline_pages/offline_page_mhtml_archiver_unittest.cc
+++ b/chrome/browser/android/offline_pages/offline_page_mhtml_archiver_unittest.cc
@@ -6,12 +6,13 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_simple_task_runner.h"
@@ -87,7 +88,7 @@
   ~OfflinePageMHTMLArchiverTest() override;
 
   // Creates an archiver for testing and specifies a scenario to be used.
-  scoped_ptr<TestMHTMLArchiver> CreateArchiver(
+  std::unique_ptr<TestMHTMLArchiver> CreateArchiver(
       const GURL& url,
       TestMHTMLArchiver::TestScenario scenario);
 
@@ -141,10 +142,11 @@
 OfflinePageMHTMLArchiverTest::~OfflinePageMHTMLArchiverTest() {
 }
 
-scoped_ptr<TestMHTMLArchiver> OfflinePageMHTMLArchiverTest::CreateArchiver(
+std::unique_ptr<TestMHTMLArchiver> OfflinePageMHTMLArchiverTest::CreateArchiver(
     const GURL& url,
     TestMHTMLArchiver::TestScenario scenario) {
-  return scoped_ptr<TestMHTMLArchiver>(new TestMHTMLArchiver(url, scenario));
+  return std::unique_ptr<TestMHTMLArchiver>(
+      new TestMHTMLArchiver(url, scenario));
 }
 
 void OfflinePageMHTMLArchiverTest::OnCreateArchiveDone(
@@ -167,9 +169,8 @@
 // Tests that creation of an archiver fails when web contents is missing.
 TEST_F(OfflinePageMHTMLArchiverTest, WebContentsMissing) {
   GURL page_url = GURL(kTestURL);
-  scoped_ptr<TestMHTMLArchiver> archiver(
-      CreateArchiver(page_url,
-                     TestMHTMLArchiver::TestScenario::WEB_CONTENTS_MISSING));
+  std::unique_ptr<TestMHTMLArchiver> archiver(CreateArchiver(
+      page_url, TestMHTMLArchiver::TestScenario::WEB_CONTENTS_MISSING));
   archiver->CreateArchive(GetTestFilePath(), kTestArcihveId, callback());
 
   EXPECT_EQ(archiver.get(), last_archiver());
@@ -181,9 +182,8 @@
 // Tests for successful creation of the offline page archive.
 TEST_F(OfflinePageMHTMLArchiverTest, NotAbleToGenerateArchive) {
   GURL page_url = GURL(kTestURL);
-  scoped_ptr<TestMHTMLArchiver> archiver(
-      CreateArchiver(page_url,
-                     TestMHTMLArchiver::TestScenario::NOT_ABLE_TO_ARCHIVE));
+  std::unique_ptr<TestMHTMLArchiver> archiver(CreateArchiver(
+      page_url, TestMHTMLArchiver::TestScenario::NOT_ABLE_TO_ARCHIVE));
   archiver->CreateArchive(GetTestFilePath(), kTestArcihveId, callback());
 
   EXPECT_EQ(archiver.get(), last_archiver());
@@ -196,9 +196,8 @@
 // Tests for successful creation of the offline page archive.
 TEST_F(OfflinePageMHTMLArchiverTest, SuccessfullyCreateOfflineArchive) {
   GURL page_url = GURL(kTestURL);
-  scoped_ptr<TestMHTMLArchiver> archiver(
-      CreateArchiver(page_url,
-                     TestMHTMLArchiver::TestScenario::SUCCESS));
+  std::unique_ptr<TestMHTMLArchiver> archiver(
+      CreateArchiver(page_url, TestMHTMLArchiver::TestScenario::SUCCESS));
   archiver->CreateArchive(GetTestFilePath(), kTestArcihveId, callback());
   PumpLoop();
 
diff --git a/chrome/browser/android/offline_pages/offline_page_model_factory.cc b/chrome/browser/android/offline_pages/offline_page_model_factory.cc
index 9195443f..1afa51d 100644
--- a/chrome/browser/android/offline_pages/offline_page_model_factory.cc
+++ b/chrome/browser/android/offline_pages/offline_page_model_factory.cc
@@ -48,7 +48,7 @@
 
   base::FilePath store_path =
       profile->GetPath().Append(chrome::kOfflinePageMetadataDirname);
-  scoped_ptr<OfflinePageMetadataStoreImpl> metadata_store(
+  std::unique_ptr<OfflinePageMetadataStoreImpl> metadata_store(
       new OfflinePageMetadataStoreImpl(background_task_runner, store_path));
 
   base::FilePath archives_dir =
diff --git a/chrome/browser/android/offline_pages/offline_page_tab_helper.cc b/chrome/browser/android/offline_pages/offline_page_tab_helper.cc
index 80a84d4..3497df1 100644
--- a/chrome/browser/android/offline_pages/offline_page_tab_helper.cc
+++ b/chrome/browser/android/offline_pages/offline_page_tab_helper.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/android/offline_pages/offline_page_utils.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
@@ -32,9 +33,6 @@
 
 void OfflinePageTabHelper::DidStartNavigation(
     content::NavigationHandle* navigation_handle) {
-  GURL last_redirect_from_url_copy = last_redirect_from_url_;
-  last_redirect_from_url_ = GURL();
-
   // Skips non-main frame.
   if (!navigation_handle->IsInMainFrame())
     return;
@@ -46,10 +44,11 @@
 
   // Ignore navigations that are forward or back transitions in the nav stack
   // which are not at the head of the stack.
-  if (web_contents()->GetController().GetEntryCount() > 0 &&
-      web_contents()->GetController().GetCurrentEntryIndex() != -1 &&
-      (web_contents()->GetController().GetCurrentEntryIndex() <
-       web_contents()->GetController().GetEntryCount() - 1)) {
+  const content::NavigationController& controller =
+      web_contents()->GetController();
+  if (controller.GetEntryCount() > 0 &&
+      controller.GetCurrentEntryIndex() != -1 &&
+      controller.GetCurrentEntryIndex() < controller.GetEntryCount() - 1) {
     return;
   }
 
@@ -60,22 +59,21 @@
     return;
 
   // Avoids looping between online and offline redirections.
-  if (last_redirect_from_url_copy == online_url)
+  content::NavigationEntry* entry = controller.GetPendingEntry();
+  if (entry && !entry->GetRedirectChain().empty() &&
+      entry->GetRedirectChain().back() == online_url) {
     return;
-  last_redirect_from_url_ = navigation_handle->GetURL();
+  }
 
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
-      base::Bind(&OfflinePageTabHelper::RedirectFromOfflineToOnline,
+      base::Bind(&OfflinePageTabHelper::Redirect,
                  weak_ptr_factory_.GetWeakPtr(),
-                 online_url));
+                 navigation_handle->GetURL(), online_url));
 }
 
 void OfflinePageTabHelper::DidFinishNavigation(
     content::NavigationHandle* navigation_handle) {
-  GURL last_redirect_from_url_copy = last_redirect_from_url_;
-  last_redirect_from_url_ = GURL();
-
   // Skips non-main frame.
   if (!navigation_handle->IsInMainFrame())
     return;
@@ -101,30 +99,23 @@
   if (!offline_url.is_valid())
     return;
 
-  // Avoids looping between online and offline redirections.
-  if (last_redirect_from_url_copy == offline_url)
-    return;
-  last_redirect_from_url_ = navigation_handle->GetURL();
-
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
-      base::Bind(&OfflinePageTabHelper::RedirectFromOnlineToOffline,
+      base::Bind(&OfflinePageTabHelper::Redirect,
                  weak_ptr_factory_.GetWeakPtr(),
-                 offline_url));
+                 navigation_handle->GetURL(), offline_url));
 }
 
-void OfflinePageTabHelper::RedirectFromOfflineToOnline(const GURL& online_url) {
-  UMA_HISTOGRAM_COUNTS("OfflinePages.RedirectToOnlineCount", 1);
-  content::NavigationController::LoadURLParams load_params(online_url);
-  load_params.transition_type = ui::PAGE_TRANSITION_CLIENT_REDIRECT;
-  web_contents()->GetController().LoadURLWithParams(load_params);
-}
+void OfflinePageTabHelper::Redirect(
+    const GURL& from_url, const GURL& to_url) {
+  if (to_url.SchemeIsFile())
+    UMA_HISTOGRAM_COUNTS("OfflinePages.RedirectToOfflineCount", 1);
+  else
+    UMA_HISTOGRAM_COUNTS("OfflinePages.RedirectToOnlineCount", 1);
 
-void OfflinePageTabHelper::RedirectFromOnlineToOffline(
-    const GURL& offline_url) {
-  UMA_HISTOGRAM_COUNTS("OfflinePages.RedirectToOfflineCount", 1);
-  content::NavigationController::LoadURLParams load_params(offline_url);
+  content::NavigationController::LoadURLParams load_params(to_url);
   load_params.transition_type = ui::PAGE_TRANSITION_CLIENT_REDIRECT;
+  load_params.redirect_chain.push_back(from_url);
   web_contents()->GetController().LoadURLWithParams(load_params);
 }
 
diff --git a/chrome/browser/android/offline_pages/offline_page_tab_helper.h b/chrome/browser/android/offline_pages/offline_page_tab_helper.h
index 041e510..f14aec4 100644
--- a/chrome/browser/android/offline_pages/offline_page_tab_helper.h
+++ b/chrome/browser/android/offline_pages/offline_page_tab_helper.h
@@ -36,10 +36,8 @@
   void DidFinishNavigation(
       content::NavigationHandle* navigation_handle) override;
 
-  void RedirectFromOfflineToOnline(const GURL& online_url);
-  void RedirectFromOnlineToOffline(const GURL& offline_url);
+  void Redirect(const GURL& from_url, const GURL& to_url);
 
-  GURL last_redirect_from_url_;
   base::WeakPtrFactory<OfflinePageTabHelper> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(OfflinePageTabHelper);
diff --git a/chrome/browser/android/offline_pages/offline_page_tab_helper_unittest.cc b/chrome/browser/android/offline_pages/offline_page_tab_helper_unittest.cc
index 796b062..0644451 100644
--- a/chrome/browser/android/offline_pages/offline_page_tab_helper_unittest.cc
+++ b/chrome/browser/android/offline_pages/offline_page_tab_helper_unittest.cc
@@ -2,14 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/android/offline_pages/offline_page_tab_helper.h"
+
+#include <memory>
+
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/run_loop.h"
 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
-#include "chrome/browser/android/offline_pages/offline_page_tab_helper.h"
 #include "chrome/browser/android/offline_pages/test_offline_page_model_builder.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "components/offline_pages/offline_page_item.h"
@@ -78,13 +80,13 @@
   // OfflinePageTestArchiver::Observer implementation:
   void SetLastPathCreatedByArchiver(const base::FilePath& file_path) override;
 
-  scoped_ptr<OfflinePageTestArchiver> BuildArchiver(
+  std::unique_ptr<OfflinePageTestArchiver> BuildArchiver(
       const GURL& url,
       const base::FilePath& file_name);
   void OnSavePageDone(OfflinePageModel::SavePageResult result,
                       int64_t offline_id);
 
-  scoped_ptr<TestNetworkChangeNotifier> network_change_notifier_;
+  std::unique_ptr<TestNetworkChangeNotifier> network_change_notifier_;
   OfflinePageTabHelper* offline_page_tab_helper_;  // Not owned.
 
   int64_t offline_id_;
@@ -112,7 +114,7 @@
   // Saves an offline page.
   OfflinePageModel* model =
       OfflinePageModelFactory::GetForBrowserContext(browser_context());
-  scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
+  std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
       kTestPageUrl, base::FilePath(FILE_PATH_LITERAL("page1.mhtml"))));
   model->SavePage(
       kTestPageUrl, kTestPageBookmarkId, std::move(archiver),
@@ -158,10 +160,10 @@
     const base::FilePath& file_path) {
 }
 
-scoped_ptr<OfflinePageTestArchiver> OfflinePageTabHelperTest::BuildArchiver(
-    const GURL& url,
-    const base::FilePath& file_name) {
-  scoped_ptr<OfflinePageTestArchiver> archiver(new OfflinePageTestArchiver(
+std::unique_ptr<OfflinePageTestArchiver>
+OfflinePageTabHelperTest::BuildArchiver(const GURL& url,
+                                        const base::FilePath& file_name) {
+  std::unique_ptr<OfflinePageTestArchiver> archiver(new OfflinePageTestArchiver(
       this, url, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED,
       kTestFileSize, base::ThreadTaskRunnerHandle::Get()));
   archiver->set_filename(file_name);
diff --git a/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc b/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
index f697070..67bc0ca 100644
--- a/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
+++ b/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
@@ -73,7 +73,7 @@
 
  private:
   void CreateOfflinePages();
-  scoped_ptr<OfflinePageTestArchiver> BuildArchiver(
+  std::unique_ptr<OfflinePageTestArchiver> BuildArchiver(
       const GURL& url,
       const base::FilePath& file_name);
 
@@ -132,7 +132,7 @@
       OfflinePageModelFactory::GetForBrowserContext(profile());
 
   // Create page 1.
-  scoped_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
+  std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(
       kTestPage1Url, base::FilePath(FILE_PATH_LITERAL("page1.mhtml"))));
   offline_pages::ClientId client_id;
   client_id.name_space = BOOKMARK_NAMESPACE;
@@ -164,10 +164,10 @@
           .Append(FILE_PATH_LITERAL("missing_file.mhtml")));
 }
 
-scoped_ptr<OfflinePageTestArchiver> OfflinePageUtilsTest::BuildArchiver(
+std::unique_ptr<OfflinePageTestArchiver> OfflinePageUtilsTest::BuildArchiver(
     const GURL& url,
     const base::FilePath& file_name) {
-  scoped_ptr<OfflinePageTestArchiver> archiver(new OfflinePageTestArchiver(
+  std::unique_ptr<OfflinePageTestArchiver> archiver(new OfflinePageTestArchiver(
       this, url, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED,
       kTestFileSize, base::ThreadTaskRunnerHandle::Get()));
   archiver->set_filename(file_name);
diff --git a/chrome/browser/android/offline_pages/test_offline_page_model_builder.cc b/chrome/browser/android/offline_pages/test_offline_page_model_builder.cc
index c1fc3bc..b8e10fd 100644
--- a/chrome/browser/android/offline_pages/test_offline_page_model_builder.cc
+++ b/chrome/browser/android/offline_pages/test_offline_page_model_builder.cc
@@ -16,18 +16,18 @@
 
 namespace offline_pages {
 
-scoped_ptr<KeyedService> BuildTestOfflinePageModel(
+std::unique_ptr<KeyedService> BuildTestOfflinePageModel(
     content::BrowserContext* context) {
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
       base::ThreadTaskRunnerHandle::Get();
 
-  scoped_ptr<OfflinePageTestStore> metadata_store(
+  std::unique_ptr<OfflinePageTestStore> metadata_store(
       new OfflinePageTestStore(task_runner));
 
   base::FilePath archives_dir =
       context->GetPath().Append(chrome::kOfflinePageArchviesDirname);
 
-  return scoped_ptr<KeyedService>(new OfflinePageModel(
+  return std::unique_ptr<KeyedService>(new OfflinePageModel(
       std::move(metadata_store), archives_dir, task_runner));
 }
 
diff --git a/chrome/browser/android/offline_pages/test_offline_page_model_builder.h b/chrome/browser/android/offline_pages/test_offline_page_model_builder.h
index 6c56d5a..46c08df 100644
--- a/chrome/browser/android/offline_pages/test_offline_page_model_builder.h
+++ b/chrome/browser/android/offline_pages/test_offline_page_model_builder.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ANDROID_OFFLINE_PAGES_TEST_OFFLINE_PAGE_MODEL_BUILDER_H_
 #define CHROME_BROWSER_ANDROID_OFFLINE_PAGES_TEST_OFFLINE_PAGE_MODEL_BUILDER_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 class KeyedService;
 
@@ -18,7 +18,7 @@
 // Helper function to be used with
 // BrowserContextKeyedServiceFactory::SetTestingFactory() that returns a
 // OfflinePageModel object with mocked store.
-scoped_ptr<KeyedService> BuildTestOfflinePageModel(
+std::unique_ptr<KeyedService> BuildTestOfflinePageModel(
     content::BrowserContext* context);
 
 }  // namespace offline_pages
diff --git a/chrome/browser/android/omnibox/autocomplete_controller_android.cc b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
index b555057..cd552dc 100644
--- a/chrome/browser/android/omnibox/autocomplete_controller_android.cc
+++ b/chrome/browser/android/omnibox/autocomplete_controller_android.cc
@@ -9,6 +9,7 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -85,13 +86,13 @@
   // AutocompleteControllerDelegate:
   void OnResultChanged(bool default_match_changed) override;
 
-  scoped_ptr<AutocompleteController> controller_;
+  std::unique_ptr<AutocompleteController> controller_;
   base::OneShotTimer expire_timer_;
 };
 
 ZeroSuggestPrefetcher::ZeroSuggestPrefetcher(Profile* profile)
     : controller_(new AutocompleteController(
-          make_scoped_ptr(new ChromeAutocompleteProviderClient(profile)),
+          base::WrapUnique(new ChromeAutocompleteProviderClient(profile)),
           this,
           AutocompleteProvider::TYPE_ZERO_SUGGEST)) {
   // Creating an arbitrary fake_request_source to avoid passing in an invalid
@@ -126,12 +127,11 @@
 
 AutocompleteControllerAndroid::AutocompleteControllerAndroid(Profile* profile)
     : autocomplete_controller_(new AutocompleteController(
-          make_scoped_ptr(new ChromeAutocompleteProviderClient(profile)),
+          base::WrapUnique(new ChromeAutocompleteProviderClient(profile)),
           this,
           kAndroidAutocompleteProviders)),
       inside_synchronous_start_(false),
-      profile_(profile) {
-}
+      profile_(profile) {}
 
 void AutocompleteControllerAndroid::Start(
     JNIEnv* env,
diff --git a/chrome/browser/android/omnibox/autocomplete_controller_android.h b/chrome/browser/android/omnibox/autocomplete_controller_android.h
index b7c76e9..e8bd5c6 100644
--- a/chrome/browser/android/omnibox/autocomplete_controller_android.h
+++ b/chrome/browser/android/omnibox/autocomplete_controller_android.h
@@ -5,11 +5,11 @@
 #ifndef CHROME_BROWSER_ANDROID_OMNIBOX_AUTOCOMPLETE_CONTROLLER_ANDROID_H_
 #define CHROME_BROWSER_ANDROID_OMNIBOX_AUTOCOMPLETE_CONTROLLER_ANDROID_H_
 
+#include <memory>
 #include <string>
 
 #include "base/android/jni_weak_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
@@ -135,7 +135,7 @@
       const base::android::JavaRef<jstring>& j_text,
       bool prevent_inline_autocomplete);
 
-  scoped_ptr<AutocompleteController> autocomplete_controller_;
+  std::unique_ptr<AutocompleteController> autocomplete_controller_;
 
   // Last input we sent to the autocomplete controller.
   AutocompleteInput input_;
diff --git a/chrome/browser/android/omnibox/omnibox_prerender.h b/chrome/browser/android/omnibox/omnibox_prerender.h
index d8a0d61..8add1adf 100644
--- a/chrome/browser/android/omnibox/omnibox_prerender.h
+++ b/chrome/browser/android/omnibox/omnibox_prerender.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_ANDROID_OMNIBOX_OMNIBOX_PRERENDER_H_
 #define CHROME_BROWSER_ANDROID_OMNIBOX_OMNIBOX_PRERENDER_H_
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 
 class AutocompleteResult;
diff --git a/chrome/browser/android/password_ui_view_android.cc b/chrome/browser/android/password_ui_view_android.cc
index bd34251..4cc4ea76 100644
--- a/chrome/browser/android/password_ui_view_android.cc
+++ b/chrome/browser/android/password_ui_view_android.cc
@@ -43,7 +43,7 @@
 }
 
 void PasswordUIViewAndroid::SetPasswordList(
-    const std::vector<scoped_ptr<autofill::PasswordForm>>& password_list) {
+    const std::vector<std::unique_ptr<autofill::PasswordForm>>& password_list) {
   JNIEnv* env = base::android::AttachCurrentThread();
   ScopedJavaLocalRef<jobject> ui_controller = weak_java_ui_controller_.get(env);
   if (!ui_controller.is_null()) {
@@ -53,7 +53,7 @@
 }
 
 void PasswordUIViewAndroid::SetPasswordExceptionList(
-    const std::vector<scoped_ptr<autofill::PasswordForm>>&
+    const std::vector<std::unique_ptr<autofill::PasswordForm>>&
         password_exception_list) {
   JNIEnv* env = base::android::AttachCurrentThread();
   ScopedJavaLocalRef<jobject> ui_controller = weak_java_ui_controller_.get(env);
diff --git a/chrome/browser/android/password_ui_view_android.h b/chrome/browser/android/password_ui_view_android.h
index d7160fe..8277577 100644
--- a/chrome/browser/android/password_ui_view_android.h
+++ b/chrome/browser/android/password_ui_view_android.h
@@ -34,10 +34,10 @@
       const std::string& username,
       const base::string16& password_value) override;
   void SetPasswordList(
-      const std::vector<scoped_ptr<autofill::PasswordForm>>& password_list)
-          override;
+      const std::vector<std::unique_ptr<autofill::PasswordForm>>& password_list)
+      override;
   void SetPasswordExceptionList(
-      const std::vector<scoped_ptr<autofill::PasswordForm>>&
+      const std::vector<std::unique_ptr<autofill::PasswordForm>>&
           password_exception_list) override;
 
   // Calls from Java.
diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc
index 4b829dd..6b1fe806 100644
--- a/chrome/browser/android/preferences/pref_service_bridge.cc
+++ b/chrome/browser/android/preferences/pref_service_bridge.cc
@@ -6,6 +6,8 @@
 
 #include <jni.h>
 #include <stddef.h>
+
+#include <memory>
 #include <vector>
 
 #include "base/android/build_info.h"
@@ -15,7 +17,6 @@
 #include "base/android/jni_weak_ref.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/scoped_observer.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
@@ -485,7 +486,7 @@
 
   void OnBrowsingDataRemoverDone() override {
     // We delete ourselves when done.
-    scoped_ptr<ClearBrowsingDataObserver> auto_delete(this);
+    std::unique_ptr<ClearBrowsingDataObserver> auto_delete(this);
 
     JNIEnv* env = AttachCurrentThread();
     if (weak_chrome_native_preferences_.get(env).is_null())
@@ -755,7 +756,7 @@
 
 static void ResetTranslateDefaults(JNIEnv* env,
                                    const JavaParamRef<jobject>& obj) {
-  scoped_ptr<translate::TranslatePrefs> translate_prefs =
+  std::unique_ptr<translate::TranslatePrefs> translate_prefs =
       ChromeTranslateClient::CreateTranslatePrefs(GetPrefService());
   translate_prefs->ResetToDefaults();
 }
diff --git a/chrome/browser/android/preferences/website_preference_bridge.cc b/chrome/browser/android/preferences/website_preference_bridge.cc
index ea29bfef..31e94cf 100644
--- a/chrome/browser/android/preferences/website_preference_bridge.cc
+++ b/chrome/browser/android/preferences/website_preference_bridge.cc
@@ -577,7 +577,7 @@
   // Keeps track of when we're ready to close batch processing.
   bool ending_batch_processing_;
 
-  scoped_ptr<CookiesTreeModel> cookies_tree_model_;
+  std::unique_ptr<CookiesTreeModel> cookies_tree_model_;
 
   DISALLOW_COPY_AND_ASSIGN(SiteDataDeleteHelper);
 };
diff --git a/chrome/browser/android/profiles/profile_downloader_android.cc b/chrome/browser/android/profiles/profile_downloader_android.cc
index 292450e..4dd48be 100644
--- a/chrome/browser/android/profiles/profile_downloader_android.cc
+++ b/chrome/browser/android/profiles/profile_downloader_android.cc
@@ -102,7 +102,7 @@
   }
 
   // The profile image downloader instance.
-  scoped_ptr<ProfileDownloader> profile_image_downloader_;
+  std::unique_ptr<ProfileDownloader> profile_image_downloader_;
 
   // The browser profile associated with this download request.
   Profile* profile_;
diff --git a/chrome/browser/android/provider/chrome_browser_provider.h b/chrome/browser/android/provider/chrome_browser_provider.h
index fabf3d4..3d738da 100644
--- a/chrome/browser/android/provider/chrome_browser_provider.h
+++ b/chrome/browser/android/provider/chrome_browser_provider.h
@@ -5,10 +5,11 @@
 #ifndef CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
 #define CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/scoped_observer.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/cancelable_task_tracker.h"
@@ -231,7 +232,7 @@
   scoped_refptr<history::TopSites> top_sites_;
   favicon::FaviconService* favicon_service_;
 
-  scoped_ptr<AndroidHistoryProviderService> service_;
+  std::unique_ptr<AndroidHistoryProviderService> service_;
 
   base::CancelableTaskTracker cancelable_task_tracker_;
 
diff --git a/chrome/browser/android/recently_closed_tabs_bridge.cc b/chrome/browser/android/recently_closed_tabs_bridge.cc
index 0ec51990..771c815e7 100644
--- a/chrome/browser/android/recently_closed_tabs_bridge.cc
+++ b/chrome/browser/android/recently_closed_tabs_bridge.cc
@@ -101,7 +101,7 @@
 
   // Find and remove the corresponding tab entry from TabRestoreService.
   // We take ownership of the returned tab.
-  scoped_ptr<sessions::TabRestoreService::Tab> tab_entry(
+  std::unique_ptr<sessions::TabRestoreService::Tab> tab_entry(
       tab_restore_service_->RemoveTabEntryById(recent_tab_id));
   if (!tab_entry)
     return false;
diff --git a/chrome/browser/android/signin/signin_manager_android.h b/chrome/browser/android/signin/signin_manager_android.h
index 488031a..6a414e7 100644
--- a/chrome/browser/android/signin/signin_manager_android.h
+++ b/chrome/browser/android/signin/signin_manager_android.h
@@ -7,11 +7,11 @@
 
 #include <jni.h>
 
+#include <memory>
 #include <string>
 
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/prefs/pref_change_registrar.h"
 
diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc
index 34ae44b..9c49303f 100644
--- a/chrome/browser/android/tab_android.cc
+++ b/chrome/browser/android/tab_android.cc
@@ -9,6 +9,7 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/layers/layer.h"
@@ -870,7 +871,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   InterceptNavigationDelegate::Associate(
       web_contents(),
-      make_scoped_ptr(new ChromeInterceptNavigationDelegate(env, delegate)));
+      base::WrapUnique(new ChromeInterceptNavigationDelegate(env, delegate)));
 }
 
 void TabAndroid::AttachToTabContentManager(
diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_android.h
index 021e4b3..9f10fdf 100644
--- a/chrome/browser/android/tab_android.h
+++ b/chrome/browser/android/tab_android.h
@@ -8,10 +8,11 @@
 #include <jni.h>
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/android/jni_weak_ref.h"
 #include "base/callback_forward.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "chrome/browser/search/instant_service_observer.h"
 #include "chrome/browser/sync/glue/synced_tab_delegate_android.h"
@@ -279,11 +280,11 @@
   scoped_refptr<cc::Layer> content_layer_;
   chrome::android::TabContentManager* tab_content_manager_;
 
-  scoped_ptr<content::WebContents> web_contents_;
-  scoped_ptr<chrome::android::TabWebContentsDelegateAndroid>
+  std::unique_ptr<content::WebContents> web_contents_;
+  std::unique_ptr<chrome::android::TabWebContentsDelegateAndroid>
       web_contents_delegate_;
 
-  scoped_ptr<browser_sync::SyncedTabDelegateAndroid> synced_tab_delegate_;
+  std::unique_ptr<browser_sync::SyncedTabDelegateAndroid> synced_tab_delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(TabAndroid);
 };
diff --git a/chrome/browser/android/tab_state.cc b/chrome/browser/android/tab_state.cc
index bd9ab3b..d98867a 100644
--- a/chrome/browser/android/tab_state.cc
+++ b/chrome/browser/android/tab_state.cc
@@ -7,13 +7,14 @@
 #include <jni.h>
 #include <stddef.h>
 #include <stdint.h>
+
 #include <limits>
+#include <memory>
 #include <vector>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/pickle.h"
 #include "chrome/browser/android/tab_android.h"
@@ -428,7 +429,7 @@
     return NULL;
 
   Profile* profile = ProfileManager::GetActiveUserProfile();
-  std::vector<scoped_ptr<content::NavigationEntry>> entries =
+  std::vector<std::unique_ptr<content::NavigationEntry>> entries =
       sessions::ContentSerializedNavigationBuilder::ToNavigationEntries(
           navigations, profile);
 
@@ -436,7 +437,7 @@
     profile = profile->GetOffTheRecordProfile();
   WebContents::CreateParams params(profile);
   params.initially_hidden = initially_hidden;
-  scoped_ptr<WebContents> web_contents(WebContents::Create(params));
+  std::unique_ptr<WebContents> web_contents(WebContents::Create(params));
   web_contents->GetController().Restore(
       current_entry_index, NavigationController::RESTORE_CURRENT_SESSION,
       &entries);
@@ -477,10 +478,9 @@
         GURL(base::android::ConvertJavaStringToUTF8(env, referrer_url)),
         static_cast<blink::WebReferrerPolicy>(referrer_policy));
   }
-  scoped_ptr<content::NavigationEntry> entry(
+  std::unique_ptr<content::NavigationEntry> entry(
       content::NavigationController::CreateNavigationEntry(
-          GURL(base::android::ConvertJavaStringToUTF8(env, url)),
-          referrer,
+          GURL(base::android::ConvertJavaStringToUTF8(env, url)), referrer,
           ui::PAGE_TRANSITION_LINK,
           true,  // is_renderer_initiated
           "",    // extra_headers
@@ -569,7 +569,7 @@
                                 const JavaParamRef<jclass>& clazz,
                                 const JavaParamRef<jobject>& state,
                                 jint saved_state_version) {
-  scoped_ptr<WebContents> web_contents(WebContents::FromJavaWebContents(
+  std::unique_ptr<WebContents> web_contents(WebContents::FromJavaWebContents(
       WebContentsState::RestoreContentsFromByteBuffer(env, clazz, state,
                                                       saved_state_version, true)
           .obj()));
diff --git a/chrome/browser/android/tab_web_contents_delegate_android.cc b/chrome/browser/android/tab_web_contents_delegate_android.cc
index eb913c3..2068778c 100644
--- a/chrome/browser/android/tab_web_contents_delegate_android.cc
+++ b/chrome/browser/android/tab_web_contents_delegate_android.cc
@@ -9,6 +9,7 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
 #include "base/command_line.h"
+#include "base/memory/ptr_util.h"
 #include "chrome/browser/android/feature_utilities.h"
 #include "chrome/browser/android/hung_renderer_infobar_delegate.h"
 #include "chrome/browser/android/media/media_throttle_infobar_delegate.h"
@@ -122,10 +123,11 @@
   FileSelectHelper::RunFileChooser(web_contents, params);
 }
 
-scoped_ptr<BluetoothChooser> TabWebContentsDelegateAndroid::RunBluetoothChooser(
+std::unique_ptr<BluetoothChooser>
+TabWebContentsDelegateAndroid::RunBluetoothChooser(
     content::RenderFrameHost* frame,
     const BluetoothChooser::EventHandler& event_handler) {
-  return make_scoped_ptr(new BluetoothChooserAndroid(frame, event_handler));
+  return base::WrapUnique(new BluetoothChooserAndroid(frame, event_handler));
 }
 
 void TabWebContentsDelegateAndroid::CloseContents(
diff --git a/chrome/browser/android/tab_web_contents_delegate_android.h b/chrome/browser/android/tab_web_contents_delegate_android.h
index cec724f..9e4ceb4 100644
--- a/chrome/browser/android/tab_web_contents_delegate_android.h
+++ b/chrome/browser/android/tab_web_contents_delegate_android.h
@@ -42,7 +42,7 @@
                            bool to_different_document) override;
   void RunFileChooser(content::WebContents* web_contents,
                       const content::FileChooserParams& params) override;
-  scoped_ptr<content::BluetoothChooser> RunBluetoothChooser(
+  std::unique_ptr<content::BluetoothChooser> RunBluetoothChooser(
       content::RenderFrameHost* frame,
       const content::BluetoothChooser::EventHandler& event_handler) override;
   void CloseContents(content::WebContents* web_contents) override;
diff --git a/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache.h b/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache.h
index 1bec4f1..912a4a15 100644
--- a/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache.h
+++ b/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache.h
@@ -7,8 +7,9 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "net/base/linked_hash_map.h"
 
 template <class Key, class Value>
@@ -24,7 +25,7 @@
 
   ~ScopedPtrExpiringCache() {}
 
-  void Put(const Key& key, scoped_ptr<Value> value) {
+  void Put(const Key& key, std::unique_ptr<Value> value) {
     Remove(key);
     map_[key] = value.release();
     EvictIfFull();
diff --git a/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache_unittest.cc b/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache_unittest.cc
index 12e68b1b..8ccf236 100644
--- a/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache_unittest.cc
+++ b/chrome/browser/android/thumbnail/scoped_ptr_expiring_cache_unittest.cc
@@ -2,14 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/android/thumbnail/scoped_ptr_expiring_cache.h"
+
 #include <stddef.h>
 
 #include <algorithm>
 #include <vector>
 
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "chrome/browser/android/thumbnail/scoped_ptr_expiring_cache.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -23,8 +25,8 @@
 
 class MockObject {
  public:
-  static scoped_ptr<MockObject> Create(unsigned int key) {
-    return make_scoped_ptr(new MockObject(key));
+  static std::unique_ptr<MockObject> Create(unsigned int key) {
+    return base::WrapUnique(new MockObject(key));
   }
 
   unsigned int value() const { return value_; }
diff --git a/chrome/browser/android/thumbnail/thumbnail.cc b/chrome/browser/android/thumbnail/thumbnail.cc
index 744b1d4..0ad9dc7 100644
--- a/chrome/browser/android/thumbnail/thumbnail.cc
+++ b/chrome/browser/android/thumbnail/thumbnail.cc
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/android/thumbnail/thumbnail.h"
+
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/thread_task_runner_handle.h"
-#include "chrome/browser/android/thumbnail/thumbnail.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "ui/android/resources/ui_resource_provider.h"
@@ -26,13 +28,13 @@
 
 }  // anonymous namespace
 
-scoped_ptr<Thumbnail> Thumbnail::Create(
+std::unique_ptr<Thumbnail> Thumbnail::Create(
     TabId tab_id,
     const base::Time& time_stamp,
     float scale,
     ui::UIResourceProvider* ui_resource_provider,
     ThumbnailDelegate* thumbnail_delegate) {
-  return make_scoped_ptr(new Thumbnail(
+  return base::WrapUnique(new Thumbnail(
       tab_id, time_stamp, scale, ui_resource_provider, thumbnail_delegate));
 }
 
diff --git a/chrome/browser/android/thumbnail/thumbnail.h b/chrome/browser/android/thumbnail/thumbnail.h
index ed2a2dd..f443bec 100644
--- a/chrome/browser/android/thumbnail/thumbnail.h
+++ b/chrome/browser/android/thumbnail/thumbnail.h
@@ -36,7 +36,7 @@
 
 class Thumbnail : public cc::UIResourceClient {
  public:
-  static scoped_ptr<Thumbnail> Create(
+  static std::unique_ptr<Thumbnail> Create(
       TabId tab_id,
       const base::Time& time_stamp,
       float scale,
diff --git a/chrome/browser/android/thumbnail/thumbnail_cache.cc b/chrome/browser/android/thumbnail/thumbnail_cache.cc
index 0781c05..5db6030 100644
--- a/chrome/browser/android/thumbnail/thumbnail_cache.cc
+++ b/chrome/browser/android/thumbnail/thumbnail_cache.cc
@@ -169,7 +169,7 @@
   DCHECK(thumbnail_meta_data_.find(tab_id) != thumbnail_meta_data_.end());
 
   base::Time time_stamp = thumbnail_meta_data_[tab_id].capture_time();
-  scoped_ptr<Thumbnail> thumbnail = Thumbnail::Create(
+  std::unique_ptr<Thumbnail> thumbnail = Thumbnail::Create(
       tab_id, time_stamp, thumbnail_scale, ui_resource_provider_, this);
   thumbnail->SetBitmap(bitmap);
 
@@ -180,7 +180,7 @@
   if (use_approximation_thumbnail_) {
     std::pair<SkBitmap, float> approximation =
         CreateApproximation(bitmap, thumbnail_scale);
-    scoped_ptr<Thumbnail> approx_thumbnail = Thumbnail::Create(
+    std::unique_ptr<Thumbnail> approx_thumbnail = Thumbnail::Create(
         tab_id, time_stamp, approximation.second, ui_resource_provider_, this);
     approx_thumbnail->SetBitmap(approximation.first);
     approximation_cache_.Put(tab_id, std::move(approx_thumbnail));
@@ -790,7 +790,7 @@
       time_stamp = meta_iter->second.capture_time();
 
     MakeSpaceForNewItemIfNecessary(tab_id);
-    scoped_ptr<Thumbnail> thumbnail = Thumbnail::Create(
+    std::unique_ptr<Thumbnail> thumbnail = Thumbnail::Create(
         tab_id, time_stamp, scale, ui_resource_provider_, this);
     thumbnail->SetCompressedBitmap(compressed_data,
                                    content_size);
diff --git a/chrome/browser/android/usb/web_usb_chooser_service_android.cc b/chrome/browser/android/usb/web_usb_chooser_service_android.cc
index d31b7b06..2aa1944 100644
--- a/chrome/browser/android/usb/web_usb_chooser_service_android.cc
+++ b/chrome/browser/android/usb/web_usb_chooser_service_android.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "chrome/browser/ui/android/usb_chooser_dialog_android.h"
 #include "content/public/browser/browser_thread.h"
 
@@ -22,7 +23,7 @@
     mojo::Array<device::usb::DeviceFilterPtr> device_filters,
     const GetPermissionCallback& callback) {
   usb_chooser_dialog_android_.push_back(
-      make_scoped_ptr(new UsbChooserDialogAndroid(
+      base::WrapUnique(new UsbChooserDialogAndroid(
           std::move(device_filters), render_frame_host_, callback)));
 }
 
diff --git a/chrome/browser/android/usb/web_usb_chooser_service_android.h b/chrome/browser/android/usb/web_usb_chooser_service_android.h
index d83345a9..3c38004 100644
--- a/chrome/browser/android/usb/web_usb_chooser_service_android.h
+++ b/chrome/browser/android/usb/web_usb_chooser_service_android.h
@@ -5,10 +5,10 @@
 #ifndef CHROME_BROWSER_ANDROID_USB_WEB_USB_CHOOSER_SERVICE_ANDROID_H_
 #define CHROME_BROWSER_ANDROID_USB_WEB_USB_CHOOSER_SERVICE_ANDROID_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "device/usb/public/interfaces/chooser_service.mojom.h"
 #include "mojo/public/cpp/bindings/array.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
@@ -39,7 +39,8 @@
  private:
   content::RenderFrameHost* const render_frame_host_;
   mojo::BindingSet<device::usb::ChooserService> bindings_;
-  std::vector<scoped_ptr<UsbChooserDialogAndroid>> usb_chooser_dialog_android_;
+  std::vector<std::unique_ptr<UsbChooserDialogAndroid>>
+      usb_chooser_dialog_android_;
 
   DISALLOW_COPY_AND_ASSIGN(WebUsbChooserServiceAndroid);
 };
diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc
index 5638549..34bd5c6 100644
--- a/chrome/browser/bookmarks/bookmark_html_writer.cc
+++ b/chrome/browser/bookmarks/bookmark_html_writer.cc
@@ -272,8 +272,9 @@
       if (itr != favicons_map_->end()) {
         scoped_refptr<base::RefCountedMemory> data(itr->second.get());
         std::string favicon_base64_encoded;
-        base::Base64Encode(std::string(data->front_as<char>(), data->size()),
-                           &favicon_base64_encoded);
+        base::Base64Encode(
+            base::StringPiece(data->front_as<char>(), data->size()),
+            &favicon_base64_encoded);
         GURL favicon_url("data:image/png;base64," + favicon_base64_encoded);
         favicon_string = favicon_url.spec();
       }
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 1fe82adc..52fc09ca 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -50,6 +50,7 @@
 #include "chrome/browser/component_updater/ev_whitelist_component_installer.h"
 #include "chrome/browser/component_updater/flash_component_installer.h"
 #include "chrome/browser/component_updater/recovery_component_installer.h"
+#include "chrome/browser/component_updater/sth_set_component_installer.h"
 #include "chrome/browser/component_updater/supervised_user_whitelist_installer.h"
 #include "chrome/browser/component_updater/swiftshader_component_installer.h"
 #include "chrome/browser/component_updater/widevine_cdm_component_installer.h"
@@ -488,6 +489,11 @@
     // 1. Android: Because it currently does not have the EV indicator.
     // 2. Chrome OS: On Chrome OS this registration is delayed until user login.
     RegisterEVWhitelistComponent(cus, path);
+
+    // Registration of the STH set fetcher here is not done for:
+    // Android: Because the story around CT on Mobile is not finalized yet.
+    // Chrome OS: On Chrome OS this registration is delayed until user login.
+    RegisterSTHSetComponent(cus, path);
 #endif  // defined(OS_ANDROID)
   }
 
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index f8e169cd..a4811b7a 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1087,29 +1087,6 @@
   return webui::LogWebUIUrl(web_ui_url);
 }
 
-net::URLRequestContextGetter*
-ChromeContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  Profile* profile = Profile::FromBrowserContext(browser_context);
-  return profile->CreateRequestContext(protocol_handlers,
-                                       std::move(request_interceptors));
-}
-
-net::URLRequestContextGetter*
-ChromeContentBrowserClient::CreateRequestContextForStoragePartition(
-    content::BrowserContext* browser_context,
-    const base::FilePath& partition_path,
-    bool in_memory,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  Profile* profile = Profile::FromBrowserContext(browser_context);
-  return profile->CreateRequestContextForStoragePartition(
-      partition_path, in_memory, protocol_handlers,
-      std::move(request_interceptors));
-}
-
 bool ChromeContentBrowserClient::IsHandledURL(const GURL& url) {
   return ProfileIOData::IsHandledURL(url);
 }
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index 85fc900..043218d 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -86,16 +86,6 @@
   void GetAdditionalWebUIHostsToIgnoreParititionCheck(
       std::vector<std::string>* hosts) override;
   bool LogWebUIUrl(const GURL& web_ui_url) const override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
-  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      content::BrowserContext* browser_context,
-      const base::FilePath& partition_path,
-      bool in_memory,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   bool IsHandledURL(const GURL& url) override;
   bool CanCommitURL(content::RenderProcessHost* process_host,
                     const GURL& url) override;
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge.cc b/chrome/browser/chromeos/arc/arc_policy_bridge.cc
index 15f7bf7..e472d9ad 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge.cc
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge.cc
@@ -4,9 +4,6 @@
 
 #include "chrome/browser/chromeos/arc/arc_policy_bridge.h"
 
-#include <string>
-
-#include "base/json/json_reader.h"
 #include "base/json/json_string_value_serializer.h"
 #include "base/logging.h"
 #include "base/values.h"
@@ -21,60 +18,6 @@
 
 namespace arc {
 
-namespace {
-
-// invert_bool_value: If the Chrome policy and the ARC policy with boolean value
-// have opposite semantics, set this to true so the bool is inverted before
-// being added. Otherwise, set it to false.
-void AddPolicy(const std::string arc_policy_name,
-               const std::string policy_name,
-               const policy::PolicyMap& policy_map,
-               bool invert_bool_value,
-               base::DictionaryValue& filtered_policies) {
-  const base::Value* const policy_value = policy_map.GetValue(policy_name);
-  if (policy_value) {
-    if (invert_bool_value && policy_value->IsType(base::Value::TYPE_BOOLEAN)) {
-      bool bool_value;
-      policy_value->GetAsBoolean(&bool_value);
-      filtered_policies.SetBoolean(arc_policy_name, !bool_value);
-    } else {
-      filtered_policies.Set(arc_policy_name,
-                            policy_value->CreateDeepCopy().release());
-    }
-  }
-}
-
-std::string GetFilteredJSONPolicies(const policy::PolicyMap& policy_map) {
-  base::DictionaryValue filtered_policies;
-  // Parse ArcApplicationPolicy as JSON string before adding other policies to
-  // the dictionary.
-  const base::Value* const app_policy_value =
-      policy_map.GetValue(policy::key::kArcApplicationPolicy);
-  if (app_policy_value) {
-    std::string app_policy_string;
-    app_policy_value->GetAsString(&app_policy_string);
-    std::unique_ptr<base::DictionaryValue> app_policy_dict =
-        base::DictionaryValue::From(base::JSONReader::Read(app_policy_string));
-    if (app_policy_dict) {
-      filtered_policies.Swap(app_policy_dict.get());
-    } else {
-      LOG(ERROR) << "Value of ArcApplicationPolicy has invalid format: "
-                 << app_policy_string;
-    }
-  }
-
-  // Keep them sorted by the ARC policy names.
-  AddPolicy("cameraDisabled", policy::key::kVideoCaptureAllowed, policy_map,
-            true, filtered_policies);
-
-  std::string policy_json;
-  JSONStringValueSerializer serializer(&policy_json);
-  serializer.Serialize(filtered_policies);
-  return policy_json;
-}
-
-}  // namespace
-
 ArcPolicyBridge::ArcPolicyBridge(ArcBridgeService* bridge_service)
     : ArcService(bridge_service), binding_(this) {
   VLOG(1) << "ArcPolicyBridge::ArcPolicyBridge";
@@ -146,4 +89,23 @@
           ->policy_service();
 }
 
+std::string ArcPolicyBridge::GetFilteredJSONPolicies(
+    const policy::PolicyMap& policy_map) {
+  // TODO(phweiss): Implement general filtering mechanism when more policies
+  // need to be passed on.
+  // Create dictionary with the desired policies.
+  base::DictionaryValue filtered_policies;
+  const std::string policy_name = policy::key::kArcApplicationPolicy;
+  const base::Value* const policy_value = policy_map.GetValue(policy_name);
+  if (policy_value) {
+    filtered_policies.Set(policy_name,
+                          policy_value->CreateDeepCopy().release());
+  }
+  // Convert dictionary to JSON.
+  std::string policy_json;
+  JSONStringValueSerializer serializer(&policy_json);
+  serializer.Serialize(filtered_policies);
+  return policy_json;
+}
+
 }  // namespace arc
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge.h b/chrome/browser/chromeos/arc/arc_policy_bridge.h
index 90603e8..2177f1b 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge.h
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_CHROMEOS_ARC_ARC_POLICY_BRIDGE_H_
 #define CHROME_BROWSER_CHROMEOS_ARC_ARC_POLICY_BRIDGE_H_
 
+#include <string>
+
 #include "base/macros.h"
 #include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_service.h"
@@ -41,6 +43,7 @@
 
  private:
   void InitializePolicyService();
+  std::string GetFilteredJSONPolicies(const policy::PolicyMap& policy_map);
 
   mojo::Binding<PolicyHost> binding_;
   policy::PolicyService* policy_service_ = nullptr;
diff --git a/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc b/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
index 1574666d..ae0ead1d 100644
--- a/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
+++ b/chrome/browser/chromeos/arc/arc_policy_bridge_unittest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include <memory>
-#include <string>
 
 #include "base/macros.h"
 #include "base/values.h"
@@ -69,81 +68,22 @@
   DISALLOW_COPY_AND_ASSIGN(ArcPolicyBridgeTest);
 };
 
-TEST_F(ArcPolicyBridgeTest, EmptyPolicyTest) {
-  // No policy is set, result should be empty.
-  policy_bridge()->GetPolicies(PolicyStringCallback("{}"));
-}
-
-TEST_F(ArcPolicyBridgeTest, ArcApplicationPolicyTest) {
-  policy_map().Set(
-      "ArcApplicationPolicy", policy::POLICY_LEVEL_MANDATORY,
-      policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
-      new base::StringValue(
-          "{\"applications\":"
-              "[{\"packageName\":\"com.google.android.apps.youtube.kids\","
-                "\"installType\":\"REQUIRED\","
-                "\"lockTaskAllowed\":false,"
-                "\"permissionGrants\":[]"
-              "}],"
-          "\"defaultPermissionPolicy\":\"GRANT\""
-          "}"),
-      nullptr);
-  policy_bridge()->GetPolicies(PolicyStringCallback(
-      "{\"applications\":"
-          "[{\"installType\":\"REQUIRED\","
-            "\"lockTaskAllowed\":false,"
-            "\"packageName\":\"com.google.android.apps.youtube.kids\","
-            "\"permissionGrants\":[]"
-          "}],"
-      "\"defaultPermissionPolicy\":\"GRANT\""
-      "}"));
-}
-
-TEST_F(ArcPolicyBridgeTest, HompageLocationTest) {
-  // This policy will not be passed on, result should be empty.
+TEST_F(ArcPolicyBridgeTest, GetPoliciesTest) {
+  PolicyStringCallback empty_callback("{}");
+  policy_bridge()->GetPolicies(empty_callback);
   policy_map().Set("HomepageLocation", policy::POLICY_LEVEL_MANDATORY,
                    policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
                    new base::StringValue("http://chromium.org"), nullptr);
-  policy_bridge()->GetPolicies(PolicyStringCallback("{}"));
-}
-
-TEST_F(ArcPolicyBridgeTest, VideoCaptureAllowedTest) {
-  policy_map().Set("VideoCaptureAllowed", policy::POLICY_LEVEL_MANDATORY,
-                   policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
-                   new base::FundamentalValue(false), nullptr);
-  policy_bridge()->GetPolicies(
-      PolicyStringCallback("{\"cameraDisabled\":true}"));
-}
-
-TEST_F(ArcPolicyBridgeTest, AllPoliciesTest) {
-  // Keep them in alphabetical order.
+  policy_bridge()->GetPolicies(empty_callback);
   policy_map().Set(
       "ArcApplicationPolicy", policy::POLICY_LEVEL_MANDATORY,
       policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
-      new base::StringValue("{\"applications\":"
-              "[{\"packageName\":\"com.google.android.apps.youtube.kids\","
-                "\"installType\":\"REQUIRED\","
-                "\"lockTaskAllowed\":false,"
-                "\"permissionGrants\":[]"
-              "}],"
-          "\"defaultPermissionPolicy\":\"GRANT\"}"),
+      new base::StringValue("{\"application\": \"com.android.chrome\"}"),
       nullptr);
-  policy_map().Set("HomepageLocation", policy::POLICY_LEVEL_MANDATORY,
-                   policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
-                   new base::StringValue("http://chromium.org"), nullptr);
-  policy_map().Set("VideoCaptureAllowed", policy::POLICY_LEVEL_MANDATORY,
-                   policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
-                   new base::FundamentalValue(false), nullptr);
-  policy_bridge()->GetPolicies(PolicyStringCallback(
-      "{\"applications\":"
-          "[{\"installType\":\"REQUIRED\","
-            "\"lockTaskAllowed\":false,"
-            "\"packageName\":\"com.google.android.apps.youtube.kids\","
-            "\"permissionGrants\":[]"
-          "}],"
-        "\"cameraDisabled\":true,"
-        "\"defaultPermissionPolicy\":\"GRANT\""
-      "}"));
+  PolicyStringCallback chrome_callback(
+      "{\"ArcApplicationPolicy\":"
+      "\"{\\\"application\\\": \\\"com.android.chrome\\\"}\"}");
+  policy_bridge()->GetPolicies(chrome_callback);
 }
 
 }  // namespace arc
diff --git a/chrome/browser/chromeos/display/display_preferences.cc b/chrome/browser/chromeos/display/display_preferences.cc
index 646cc95..f0a169a 100644
--- a/chrome/browser/chromeos/display/display_preferences.cc
+++ b/chrome/browser/chromeos/display/display_preferences.cc
@@ -118,7 +118,7 @@
       prefs::kSecondaryDisplays);
   for (base::DictionaryValue::Iterator it(*layouts);
        !it.IsAtEnd(); it.Advance()) {
-    scoped_ptr<ash::DisplayLayout> layout(new ash::DisplayLayout);
+    scoped_ptr<display::DisplayLayout> layout(new display::DisplayLayout);
     if (!ash::JsonToDisplayLayout(it.value(), layout.get())) {
       LOG(WARNING) << "Invalid preference value for " << it.key();
       continue;
@@ -134,7 +134,7 @@
           continue;
         ids.push_back(id);
       }
-      ash::DisplayIdList list =
+      display::DisplayIdList list =
           ash::GenerateDisplayIdList(ids.begin(), ids.end());
       layout_store->RegisterLayoutForDisplayIdList(list, std::move(layout));
     }
@@ -212,8 +212,8 @@
       static_cast<gfx::Display::Rotation>(rotation));
 }
 
-void StoreDisplayLayoutPref(const ash::DisplayIdList& list,
-                            const ash::DisplayLayout& display_layout) {
+void StoreDisplayLayoutPref(const display::DisplayIdList& list,
+                            const display::DisplayLayout& display_layout) {
   std::string name = ash::DisplayIdListToString(list);
 
   PrefService* local_state = g_browser_process->local_state();
@@ -236,8 +236,8 @@
     return;
   }
 
-  ash::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
-  const ash::DisplayLayout& display_layout =
+  display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+  const display::DisplayLayout& display_layout =
       display_manager->layout_store()->GetRegisteredDisplayLayout(list);
   StoreDisplayLayoutPref(list, display_layout);
 }
@@ -391,8 +391,8 @@
 }
 
 // Stores the display layout for given display pairs.
-void StoreDisplayLayoutPrefForTest(const ash::DisplayIdList& list,
-                                   const ash::DisplayLayout& layout) {
+void StoreDisplayLayoutPrefForTest(const display::DisplayIdList& list,
+                                   const display::DisplayLayout& layout) {
   StoreDisplayLayoutPref(list, layout);
 }
 
diff --git a/chrome/browser/chromeos/display/display_preferences.h b/chrome/browser/chromeos/display/display_preferences.h
index ec14e96e..538b020 100644
--- a/chrome/browser/chromeos/display/display_preferences.h
+++ b/chrome/browser/chromeos/display/display_preferences.h
@@ -7,15 +7,11 @@
 
 #include <stdint.h>
 
-#include "ash/display/display_layout.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
+#include "ui/display/manager/display_layout.h"
 
 class PrefRegistrySimple;
 
-namespace ash {
-class DisplayLayout;
-}
-
 namespace gfx {
 class Display;
 class Insets;
@@ -41,8 +37,8 @@
 void LoadDisplayPreferences(bool first_run_after_boot);
 
 // Stores the display layout for given display pairs for tests.
-void StoreDisplayLayoutPrefForTest(const ash::DisplayIdList& list,
-                                   const ash::DisplayLayout& layout);
+void StoreDisplayLayoutPrefForTest(const display::DisplayIdList& list,
+                                   const display::DisplayLayout& layout);
 
 // Stores the given |power_state| for tests.
 void StoreDisplayPowerStateForTest(DisplayPowerState power_state);
diff --git a/chrome/browser/chromeos/display/display_preferences_unittest.cc b/chrome/browser/chromeos/display/display_preferences_unittest.cc
index 297c286..13effc66 100644
--- a/chrome/browser/chromeos/display/display_preferences_unittest.cc
+++ b/chrome/browser/chromeos/display/display_preferences_unittest.cc
@@ -9,7 +9,6 @@
 #include <utility>
 #include <vector>
 
-#include "ash/display/display_layout_builder.h"
 #include "ash/display/display_layout_store.h"
 #include "ash/display/display_manager.h"
 #include "ash/display/display_util.h"
@@ -34,6 +33,7 @@
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/prefs/testing_pref_service.h"
 #include "ui/display/chromeos/display_configurator.h"
+#include "ui/display/manager/display_layout_builder.h"
 #include "ui/gfx/geometry/vector3d_f.h"
 #include "ui/gfx/screen.h"
 #include "ui/message_center/message_center.h"
@@ -101,13 +101,14 @@
 
   // Do not use the implementation of display_preferences.cc directly to avoid
   // notifying the update to the system.
-  void StoreDisplayLayoutPrefForList(const ash::DisplayIdList& list,
-                                     ash::DisplayPlacement::Position position,
-                                     int offset,
-                                     int64_t primary_id) {
+  void StoreDisplayLayoutPrefForList(
+      const display::DisplayIdList& list,
+      display::DisplayPlacement::Position position,
+      int offset,
+      int64_t primary_id) {
     std::string name = ash::DisplayIdListToString(list);
     DictionaryPrefUpdate update(&local_state_, prefs::kSecondaryDisplays);
-    ash::DisplayLayout display_layout;
+    display::DisplayLayout display_layout;
     display_layout.placement_list.emplace_back(position, offset);
     display_layout.primary_id = primary_id;
 
@@ -124,7 +125,7 @@
       pref_data->Set(name, layout_value.release());
   }
 
-  void StoreDisplayPropertyForList(const ash::DisplayIdList& list,
+  void StoreDisplayPropertyForList(const display::DisplayIdList& list,
                                    std::string key,
                                    scoped_ptr<base::Value> value) {
     std::string name = ash::DisplayIdListToString(list);
@@ -146,15 +147,15 @@
     }
   }
 
-  void StoreDisplayBoolPropertyForList(const ash::DisplayIdList& list,
+  void StoreDisplayBoolPropertyForList(const display::DisplayIdList& list,
                                        const std::string& key,
                                        bool value) {
     StoreDisplayPropertyForList(
         list, key, make_scoped_ptr(new base::FundamentalValue(value)));
   }
 
-  void StoreDisplayLayoutPrefForList(const ash::DisplayIdList& list,
-                                     ash::DisplayPlacement::Position layout,
+  void StoreDisplayLayoutPrefForList(const display::DisplayIdList& list,
+                                     display::DisplayPlacement::Position layout,
                                      int offset) {
     StoreDisplayLayoutPrefForList(list, layout, offset, list[0]);
   }
@@ -190,7 +191,8 @@
     pref_data->SetInteger("orientation", static_cast<int>(rotation));
   }
 
-  std::string GetRegisteredDisplayPlacementStr(const ash::DisplayIdList& list) {
+  std::string GetRegisteredDisplayPlacementStr(
+      const display::DisplayIdList& list) {
     return ash::Shell::GetInstance()
         ->display_manager()
         ->layout_store()
@@ -217,13 +219,14 @@
   ash::DisplayManager* display_manager =
       ash::Shell::GetInstance()->display_manager();
 
-  ash::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
-  ash::DisplayIdList dummy_list =
+  display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+  display::DisplayIdList dummy_list =
       ash::test::CreateDisplayIdList2(list[0], list[1] + 1);
   ASSERT_NE(list[0], dummy_list[1]);
 
-  StoreDisplayLayoutPrefForList(list, ash::DisplayPlacement::TOP, 20);
-  StoreDisplayLayoutPrefForList(dummy_list, ash::DisplayPlacement::LEFT, 30);
+  StoreDisplayLayoutPrefForList(list, display::DisplayPlacement::TOP, 20);
+  StoreDisplayLayoutPrefForList(dummy_list, display::DisplayPlacement::LEFT,
+                                30);
   StoreDisplayPowerStateForTest(
       chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON);
 
@@ -275,16 +278,17 @@
   LoggedInAsUser();
 
   display_manager->SetLayoutForCurrentDisplays(
-      ash::test::CreateDisplayLayout(ash::DisplayPlacement::TOP, 10));
-  const ash::DisplayLayout& layout = display_manager->GetCurrentDisplayLayout();
-  EXPECT_EQ(ash::DisplayPlacement::TOP, layout.placement_list[0].position);
+      ash::test::CreateDisplayLayout(display::DisplayPlacement::TOP, 10));
+  const display::DisplayLayout& layout =
+      display_manager->GetCurrentDisplayLayout();
+  EXPECT_EQ(display::DisplayPlacement::TOP, layout.placement_list[0].position);
   EXPECT_EQ(10, layout.placement_list[0].offset);
 
-  ash::DisplayLayoutBuilder dummy_layout_builder(id1);
-  dummy_layout_builder.SetSecondaryPlacement(dummy_id,
-                                             ash::DisplayPlacement::LEFT, 20);
-  scoped_ptr<ash::DisplayLayout> dummy_layout(dummy_layout_builder.Build());
-  ash::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, dummy_id);
+  display::DisplayLayoutBuilder dummy_layout_builder(id1);
+  dummy_layout_builder.SetSecondaryPlacement(
+      dummy_id, display::DisplayPlacement::LEFT, 20);
+  scoped_ptr<display::DisplayLayout> dummy_layout(dummy_layout_builder.Build());
+  display::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, dummy_id);
   StoreDisplayLayoutPrefForTest(list, *dummy_layout);
 
   // Can't switch to a display that does not exist.
@@ -305,7 +309,7 @@
       base::Int64ToString(id1) + "," + base::Int64ToString(dummy_id);
   EXPECT_TRUE(displays->GetDictionary(dummy_key, &layout_value));
 
-  ash::DisplayLayout stored_layout;
+  display::DisplayLayout stored_layout;
   EXPECT_TRUE(ash::JsonToDisplayLayout(*layout_value, &stored_layout));
   ASSERT_EQ(1u, stored_layout.placement_list.size());
 
@@ -402,9 +406,9 @@
 
   EXPECT_TRUE(ash::JsonToDisplayLayout(*layout_value, &stored_layout));
   ASSERT_EQ(1u, stored_layout.placement_list.size());
-  const ash::DisplayPlacement& stored_placement =
+  const display::DisplayPlacement& stored_placement =
       stored_layout.placement_list[0];
-  EXPECT_EQ(ash::DisplayPlacement::BOTTOM, stored_placement.position);
+  EXPECT_EQ(display::DisplayPlacement::BOTTOM, stored_placement.position);
   EXPECT_EQ(-10, stored_placement.offset);
   EXPECT_EQ(id1, stored_placement.display_id);
   EXPECT_EQ(id2, stored_placement.parent_display_id);
@@ -421,7 +425,7 @@
   EXPECT_EQ(base::Int64ToString(id2), primary_id_str);
 
   display_manager->SetLayoutForCurrentDisplays(
-      ash::test::CreateDisplayLayout(ash::DisplayPlacement::BOTTOM, 20));
+      ash::test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 20));
 
   UpdateDisplay("1+0-200x200*2,1+0-200x200");
   // Mirrored.
@@ -576,12 +580,12 @@
   {
     const base::DictionaryValue* new_value = nullptr;
     EXPECT_TRUE(displays->GetDictionary(key, &new_value));
-    ash::DisplayLayout stored_layout;
+    display::DisplayLayout stored_layout;
     EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout));
     ASSERT_EQ(1u, stored_layout.placement_list.size());
-    const ash::DisplayPlacement& stored_placement =
+    const display::DisplayPlacement& stored_placement =
         stored_layout.placement_list[0];
-    EXPECT_EQ(ash::DisplayPlacement::LEFT, stored_placement.position);
+    EXPECT_EQ(display::DisplayPlacement::LEFT, stored_placement.position);
     EXPECT_EQ(0, stored_placement.offset);
     EXPECT_EQ(id1, stored_placement.display_id);
     EXPECT_EQ(id2, stored_placement.parent_display_id);
@@ -591,15 +595,15 @@
   // Updating layout with primary swapped should save the correct value.
   {
     ash::Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays(
-        ash::test::CreateDisplayLayout(ash::DisplayPlacement::TOP, 10));
+        ash::test::CreateDisplayLayout(display::DisplayPlacement::TOP, 10));
     const base::DictionaryValue* new_value = nullptr;
     EXPECT_TRUE(displays->GetDictionary(key, &new_value));
-    ash::DisplayLayout stored_layout;
+    display::DisplayLayout stored_layout;
     EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout));
     ASSERT_EQ(1u, stored_layout.placement_list.size());
-    const ash::DisplayPlacement& stored_placement =
+    const display::DisplayPlacement& stored_placement =
         stored_layout.placement_list[0];
-    EXPECT_EQ(ash::DisplayPlacement::TOP, stored_placement.position);
+    EXPECT_EQ(display::DisplayPlacement::TOP, stored_placement.position);
     EXPECT_EQ(10, stored_placement.offset);
     EXPECT_EQ(id1, stored_placement.display_id);
     EXPECT_EQ(id2, stored_placement.parent_display_id);
@@ -611,14 +615,14 @@
     ash::test::SwapPrimaryDisplay();
     const base::DictionaryValue* new_value = nullptr;
     EXPECT_TRUE(displays->GetDictionary(key, &new_value));
-    ash::DisplayLayout stored_layout;
+    display::DisplayLayout stored_layout;
 
     EXPECT_TRUE(displays->GetDictionary(key, &new_value));
     EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout));
     ASSERT_EQ(1u, stored_layout.placement_list.size());
-    const ash::DisplayPlacement& stored_placement =
+    const display::DisplayPlacement& stored_placement =
         stored_layout.placement_list[0];
-    EXPECT_EQ(ash::DisplayPlacement::BOTTOM, stored_placement.position);
+    EXPECT_EQ(display::DisplayPlacement::BOTTOM, stored_placement.position);
     EXPECT_EQ(-10, stored_placement.offset);
     EXPECT_EQ(id2, stored_placement.display_id);
     EXPECT_EQ(id1, stored_placement.parent_display_id);
@@ -668,7 +672,7 @@
   ash::DisplayManager* display_manager =
       ash::Shell::GetInstance()->display_manager();
   display_manager->SetLayoutForCurrentDisplays(
-      ash::test::CreateDisplayLayout(ash::DisplayPlacement::TOP, 10));
+      ash::test::CreateDisplayLayout(display::DisplayPlacement::TOP, 10));
   ash::SetDisplayUIScale(id1, 1.25f);
   window_tree_host_manager->SetPrimaryDisplayId(id2);
   int64_t new_primary = gfx::Screen::GetScreen()->GetPrimaryDisplay().id();
@@ -686,9 +690,9 @@
   // Settings are still notified to the system.
   gfx::Screen* screen = gfx::Screen::GetScreen();
   EXPECT_EQ(id2, screen->GetPrimaryDisplay().id());
-  const ash::DisplayPlacement& placement =
+  const display::DisplayPlacement& placement =
       display_manager->GetCurrentDisplayLayout().placement_list[0];
-  EXPECT_EQ(ash::DisplayPlacement::BOTTOM, placement.position);
+  EXPECT_EQ(display::DisplayPlacement::BOTTOM, placement.position);
   EXPECT_EQ(-10, placement.offset);
   const gfx::Display& primary_display = screen->GetPrimaryDisplay();
   EXPECT_EQ("178x176", primary_display.bounds().size().ToString());
@@ -960,7 +964,7 @@
   display_manager->SetUnifiedDesktopEnabled(true);
 
   UpdateDisplay("200x200,100x100");
-  ash::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+  display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
   EXPECT_EQ("400x200",
             gfx::Screen::GetScreen()->GetPrimaryDisplay().size().ToString());
 
@@ -970,7 +974,7 @@
   EXPECT_TRUE(secondary_displays->GetDictionary(
       ash::DisplayIdListToString(list), &new_value));
 
-  ash::DisplayLayout stored_layout;
+  display::DisplayLayout stored_layout;
   EXPECT_TRUE(ash::JsonToDisplayLayout(*new_value, &stored_layout));
   EXPECT_TRUE(stored_layout.default_unified);
   EXPECT_FALSE(stored_layout.mirrored);
@@ -1014,7 +1018,7 @@
 
 TEST_F(DisplayPreferencesTest, RestoreUnifiedMode) {
   int64_t id1 = gfx::Screen::GetScreen()->GetPrimaryDisplay().id();
-  ash::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, id1 + 1);
+  display::DisplayIdList list = ash::test::CreateDisplayIdList2(id1, id1 + 1);
   StoreDisplayBoolPropertyForList(list, "default_unified", true);
   StoreDisplayPropertyForList(
       list, "primary-id",
@@ -1059,14 +1063,14 @@
       ash::Shell::GetInstance()->display_manager();
   UpdateDisplay("200x200,200x200,300x300");
 
-  ash::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
+  display::DisplayIdList list = display_manager->GetCurrentDisplayIdList();
   ASSERT_EQ(3u, list.size());
 
-  ash::DisplayLayoutBuilder builder(list[0]);
-  builder.AddDisplayPlacement(list[1], list[0], ash::DisplayPlacement::RIGHT,
-                              0);
-  builder.AddDisplayPlacement(list[2], list[0], ash::DisplayPlacement::BOTTOM,
-                              100);
+  display::DisplayLayoutBuilder builder(list[0]);
+  builder.AddDisplayPlacement(list[1], list[0],
+                              display::DisplayPlacement::RIGHT, 0);
+  builder.AddDisplayPlacement(list[2], list[0],
+                              display::DisplayPlacement::BOTTOM, 100);
   display_manager->SetLayoutForCurrentDisplays(builder.Build());
 
   const base::DictionaryValue* secondary_displays =
@@ -1081,18 +1085,19 @@
   ash::DisplayManager* display_manager =
       ash::Shell::GetInstance()->display_manager();
   int64_t id1 = gfx::Screen::GetScreen()->GetPrimaryDisplay().id();
-  ash::DisplayIdList list =
+  display::DisplayIdList list =
       ash::test::CreateDisplayIdListN(3, id1, id1 + 1, id1 + 2);
 
-  ash::DisplayLayoutBuilder builder(list[0]);
-  builder.AddDisplayPlacement(list[1], list[0], ash::DisplayPlacement::LEFT, 0);
-  builder.AddDisplayPlacement(list[2], list[1], ash::DisplayPlacement::BOTTOM,
-                              100);
+  display::DisplayLayoutBuilder builder(list[0]);
+  builder.AddDisplayPlacement(list[1], list[0], display::DisplayPlacement::LEFT,
+                              0);
+  builder.AddDisplayPlacement(list[2], list[1],
+                              display::DisplayPlacement::BOTTOM, 100);
   StoreDisplayLayoutPrefForTest(list, *builder.Build());
   LoadDisplayPreferences(false);
 
   UpdateDisplay("200x200,200x200,300x300");
-  ash::DisplayIdList new_list = display_manager->GetCurrentDisplayIdList();
+  display::DisplayIdList new_list = display_manager->GetCurrentDisplayIdList();
   ASSERT_EQ(3u, list.size());
   ASSERT_EQ(list[0], new_list[0]);
   ASSERT_EQ(list[1], new_list[1]);
diff --git a/chrome/browser/chromeos/extensions/wallpaper_apitest.cc b/chrome/browser/chromeos/extensions/wallpaper_apitest.cc
index 1e6a19d..66e69e5 100644
--- a/chrome/browser/chromeos/extensions/wallpaper_apitest.cc
+++ b/chrome/browser/chromeos/extensions/wallpaper_apitest.cc
@@ -5,8 +5,7 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "net/dns/mock_host_resolver.h"
 
-// Disabled due to flakiness. See http://crbug.com/468632.
-IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DISABLED_Wallpaper) {
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Wallpaper) {
   host_resolver()->AddRule("a.com", "127.0.0.1");
   ASSERT_TRUE(StartEmbeddedTestServer());
   ASSERT_TRUE(RunExtensionTest("wallpaper")) << message_;
diff --git a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc
index ce46325..39903b39 100644
--- a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc
+++ b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc
@@ -21,6 +21,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/path_service.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
@@ -61,6 +62,7 @@
 namespace save_thumbnail = wallpaper_private::SaveThumbnail;
 namespace get_offline_wallpaper_list =
     wallpaper_private::GetOfflineWallpaperList;
+namespace record_wallpaper_uma = wallpaper_private::RecordWallpaperUMA;
 
 namespace {
 
@@ -269,6 +271,22 @@
   window->RemoveObserver(this);
 }
 
+user_manager::User::WallpaperType getWallpaperType(
+    wallpaper_private::WallpaperSource source) {
+  switch (source) {
+    case wallpaper_private::WALLPAPER_SOURCE_ONLINE:
+      return user_manager::User::ONLINE;
+    case wallpaper_private::WALLPAPER_SOURCE_DAILY:
+      return user_manager::User::DAILY;
+    case wallpaper_private::WALLPAPER_SOURCE_CUSTOM:
+      return user_manager::User::CUSTOMIZED;
+    case wallpaper_private::WALLPAPER_SOURCE_OEM:
+      return user_manager::User::DEFAULT;
+    default:
+      return user_manager::User::ONLINE;
+  }
+}
+
 }  // namespace
 
 bool WallpaperPrivateGetStringsFunction::RunSync() {
@@ -937,3 +955,14 @@
   SetResult(results);
   SendResponse(true);
 }
+
+bool WallpaperPrivateRecordWallpaperUMAFunction::RunSync() {
+  scoped_ptr<record_wallpaper_uma::Params> params(
+      record_wallpaper_uma::Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  user_manager::User::WallpaperType source = getWallpaperType(params->source);
+  UMA_HISTOGRAM_ENUMERATION("Ash.Wallpaper.Source", source,
+                            user_manager::User::WALLPAPER_TYPE_COUNT);
+  return true;
+}
diff --git a/chrome/browser/chromeos/extensions/wallpaper_private_api.h b/chrome/browser/chromeos/extensions/wallpaper_private_api.h
index 3636978..21a5a4b5 100644
--- a/chrome/browser/chromeos/extensions/wallpaper_private_api.h
+++ b/chrome/browser/chromeos/extensions/wallpaper_private_api.h
@@ -307,4 +307,19 @@
   base::SequencedWorkerPool::SequenceToken sequence_token_;
 };
 
+// The wallpaper UMA is recorded when a new wallpaper is set, either by the
+// built-in Wallpaper Picker App, or by a third party App.
+class WallpaperPrivateRecordWallpaperUMAFunction
+    : public SyncExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.recordWallpaperUMA",
+                             WALLPAPERPRIVATE_RECORDWALLPAPERUMA)
+
+ protected:
+  ~WallpaperPrivateRecordWallpaperUMAFunction() override {}
+
+  // SyncExtensionFunction overrides.
+  bool RunSync() override;
+};
+
 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_PRIVATE_API_H_
diff --git a/chrome/browser/chromeos/login/hwid_checker.cc b/chrome/browser/chromeos/login/hwid_checker.cc
index 2b370f0..2158da35 100644
--- a/chrome/browser/chromeos/login/hwid_checker.cc
+++ b/chrome/browser/chromeos/login/hwid_checker.cc
@@ -19,6 +19,8 @@
 
 namespace {
 
+const char kVMSystemVendor[] = "QEMU";
+
 unsigned CalculateCRC32(const std::string& data) {
   return static_cast<unsigned>(crc32(
       0,
@@ -118,9 +120,18 @@
     return true;
   if (!base::SysInfo::IsRunningOnChromeOS())
     return true;
-  std::string hwid;
   chromeos::system::StatisticsProvider* stats =
       chromeos::system::StatisticsProvider::GetInstance();
+
+  std::string system_vendor;
+  if (stats->GetMachineStatistic(chromeos::system::kSystemVendorKey,
+                                 &system_vendor) &&
+      system_vendor == kVMSystemVendor) {
+    // We are running in a VM.
+    return true;
+  }
+
+  std::string hwid;
   if (!stats->GetMachineStatistic(chromeos::system::kHardwareClassKey, &hwid)) {
     LOG(ERROR) << "Couldn't get machine statistic 'hardware_class'.";
     return false;
diff --git a/chrome/browser/chromeos/login/session/restore_after_crash_session_manager_delegate.cc b/chrome/browser/chromeos/login/session/restore_after_crash_session_manager_delegate.cc
index 8429c93..2f02827 100644
--- a/chrome/browser/chromeos/login/session/restore_after_crash_session_manager_delegate.cc
+++ b/chrome/browser/chromeos/login/session/restore_after_crash_session_manager_delegate.cc
@@ -49,7 +49,7 @@
     user_session_mgr->InitRlz(profile());
     user_session_mgr->InitializeCerts(profile());
     user_session_mgr->InitializeCRLSetFetcher(user);
-    user_session_mgr->InitializeEVCertificatesWhitelistComponent(user);
+    user_session_mgr->InitializeCertificateTransparencyComponents(user);
 
     // Send the PROFILE_PREPARED notification and call SessionStarted()
     // so that the Launcher and other Profile dependent classes are created.
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index 2a75b4c..e0b4eec 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -60,6 +60,7 @@
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/component_updater/ev_whitelist_component_installer.h"
+#include "chrome/browser/component_updater/sth_set_component_installer.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/google/google_brand_chromeos.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
@@ -112,6 +113,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/common/content_switches.h"
+#include "net/cert/sth_distributor.h"
 #include "ui/base/ime/chromeos/input_method_descriptor.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
 #include "url/gurl.h"
@@ -1148,7 +1150,7 @@
     InitRlz(profile);
     InitializeCerts(profile);
     InitializeCRLSetFetcher(user);
-    InitializeEVCertificatesWhitelistComponent(user);
+    InitializeCertificateTransparencyComponents(user);
 
     if (arc::ArcBridgeService::GetEnabled(
             base::CommandLine::ForCurrentProcess())) {
@@ -1415,7 +1417,7 @@
   }
 }
 
-void UserSessionManager::InitializeEVCertificatesWhitelistComponent(
+void UserSessionManager::InitializeCertificateTransparencyComponents(
     const user_manager::User* user) {
   const std::string username_hash = user->username_hash();
   component_updater::ComponentUpdateService* cus =
@@ -1423,7 +1425,10 @@
   if (!username_hash.empty() && cus) {
     const base::FilePath path =
         ProfileHelper::GetProfilePathByUserIdHash(username_hash);
+    // EV whitelist.
     RegisterEVWhitelistComponent(cus, path);
+    // STH set fetcher.
+    RegisterSTHSetComponent(cus, path);
   }
 }
 
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.h b/chrome/browser/chromeos/login/session/user_session_manager.h
index 31b7367..551bd10 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.h
+++ b/chrome/browser/chromeos/login/session/user_session_manager.h
@@ -163,8 +163,9 @@
   // Starts loading CRL set.
   void InitializeCRLSetFetcher(const user_manager::User* user);
 
-  // Starts loading EV Certificates whitelist.
-  void InitializeEVCertificatesWhitelistComponent(
+  // Starts loading CT-related components, which are the EV Certificates
+  // whitelist and the STHSet.
+  void InitializeCertificateTransparencyComponents(
       const user_manager::User* user);
 
   // Invoked when the user is logging in for the first time, or is logging in to
diff --git a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
index d073a91..7c8b192 100644
--- a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
+++ b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
@@ -35,7 +35,6 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/theme_provider.h"
 #include "ui/views/background.h"
-#include "ui/views/bubble/bubble_delegate.h"
 #include "ui/views/controls/webview/webview.h"
 #include "ui/views/layout/grid_layout.h"
 #include "ui/views/layout/layout_constants.h"
@@ -297,11 +296,6 @@
   return toolbar_model_.get();
 }
 
-views::Widget* SimpleWebViewDialog::CreateViewsBubble(
-    views::BubbleDelegateView* bubble_delegate) {
-  return views::BubbleDelegateView::CreateBubble(bubble_delegate);
-}
-
 ContentSettingBubbleModelDelegate*
 SimpleWebViewDialog::GetContentSettingBubbleModelDelegate() {
   return bubble_model_delegate_.get();
diff --git a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.h b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.h
index 684a0838b..302c118 100644
--- a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.h
+++ b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.h
@@ -77,8 +77,6 @@
   content::WebContents* GetWebContents() override;
   ToolbarModel* GetToolbarModel() override;
   const ToolbarModel* GetToolbarModel() const override;
-  views::Widget* CreateViewsBubble(
-      views::BubbleDelegateView* bubble_delegate) override;
   PageActionImageView* CreatePageActionImageView(
       LocationBarView* owner,
       ExtensionAction* action) override;
diff --git a/chrome/browser/chromeos/policy/display_rotation_default_handler_browsertest.cc b/chrome/browser/chromeos/policy/display_rotation_default_handler_browsertest.cc
index 111defe..cee8718 100644
--- a/chrome/browser/chromeos/policy/display_rotation_default_handler_browsertest.cc
+++ b/chrome/browser/chromeos/policy/display_rotation_default_handler_browsertest.cc
@@ -30,6 +30,7 @@
 #include "chromeos/settings/cros_settings_names.h"
 #include "content/public/test/test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/display.h"
 
 namespace em = enterprise_management;
@@ -56,7 +57,7 @@
         << "Requested rotation of second display while there was only one.";
     return gfx::Display::ROTATE_0;
   }
-  const ash::DisplayIdList display_id_pair =
+  const display::DisplayIdList display_id_pair =
       display_manager->GetCurrentDisplayIdList();
   const gfx::Display& second_display =
       display_manager->GetDisplayForId(display_id_pair[1]);
diff --git a/chrome/browser/component_updater/sth_set_component_installer.cc b/chrome/browser/component_updater/sth_set_component_installer.cc
new file mode 100644
index 0000000..7b1bf7b
--- /dev/null
+++ b/chrome/browser/component_updater/sth_set_component_installer.cc
@@ -0,0 +1,198 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/component_updater/sth_set_component_installer.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/files/file_enumerator.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/values.h"
+#include "base/version.h"
+#include "components/component_updater/component_updater_paths.h"
+#include "components/safe_json/safe_json_parser.h"
+#include "content/public/browser/browser_thread.h"
+#include "crypto/sha2.h"
+#include "net/cert/ct_known_logs_static.h"
+#include "net/cert/ct_log_response_parser.h"
+#include "net/cert/signed_tree_head.h"
+#include "net/cert/sth_distributor.h"
+#include "net/cert/sth_observer.h"
+
+using component_updater::ComponentUpdateService;
+
+namespace {
+const base::FilePath::CharType kSTHsDirName[] = FILE_PATH_LITERAL("sths");
+
+base::FilePath GetInstalledPath(const base::FilePath& base) {
+  return base.Append(FILE_PATH_LITERAL("_platform_specific"))
+      .Append(FILE_PATH_LITERAL("all"))
+      .Append(kSTHsDirName);
+}
+
+}  // namespace
+
+namespace component_updater {
+
+// The SHA256 of the SubjectPublicKeyInfo used to sign the extension.
+// The extension id is: ojjgnpkioondelmggbekfhllhdaimnho
+const uint8_t kPublicKeySHA256[32] = {
+    0xe9, 0x96, 0xdf, 0xa8, 0xee, 0xd3, 0x4b, 0xc6, 0x61, 0x4a, 0x57,
+    0xbb, 0x73, 0x08, 0xcd, 0x7e, 0x51, 0x9b, 0xcc, 0x69, 0x08, 0x41,
+    0xe1, 0x96, 0x9f, 0x7c, 0xb1, 0x73, 0xef, 0x16, 0x80, 0x0a};
+
+const char kSTHSetFetcherManifestName[] = "Signed Tree Heads";
+
+STHSetComponentInstallerTraits::STHSetComponentInstallerTraits(
+    scoped_ptr<net::ct::STHObserver> sth_observer)
+    : sth_observer_(std::move(sth_observer)) {}
+
+STHSetComponentInstallerTraits::~STHSetComponentInstallerTraits() {}
+
+bool STHSetComponentInstallerTraits::CanAutoUpdate() const {
+  return true;
+}
+
+// Public data is delivered via this component, no need for encryption.
+bool STHSetComponentInstallerTraits::RequiresNetworkEncryption() const {
+  return false;
+}
+
+bool STHSetComponentInstallerTraits::OnCustomInstall(
+    const base::DictionaryValue& manifest,
+    const base::FilePath& install_dir) {
+  return true;  // Nothing custom here.
+}
+
+void STHSetComponentInstallerTraits::ComponentReady(
+    const base::Version& version,
+    const base::FilePath& install_dir,
+    scoped_ptr<base::DictionaryValue> manifest) {
+  if (!content::BrowserThread::PostBlockingPoolTask(
+          FROM_HERE,
+          base::Bind(&STHSetComponentInstallerTraits::LoadSTHsFromDisk,
+                     base::Unretained(this), GetInstalledPath(install_dir),
+                     version))) {
+    NOTREACHED();
+  }
+}
+
+// Called during startup and installation before ComponentReady().
+bool STHSetComponentInstallerTraits::VerifyInstallation(
+    const base::DictionaryValue& manifest,
+    const base::FilePath& install_dir) const {
+  return base::PathExists(GetInstalledPath(install_dir));
+}
+
+base::FilePath STHSetComponentInstallerTraits::GetBaseDirectory() const {
+  base::FilePath result;
+  PathService::Get(DIR_CERT_TRANS_TREE_STATES, &result);
+  return result;
+}
+
+void STHSetComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const {
+  hash->assign(std::begin(kPublicKeySHA256), std::end(kPublicKeySHA256));
+}
+
+std::string STHSetComponentInstallerTraits::GetName() const {
+  return kSTHSetFetcherManifestName;
+}
+
+void STHSetComponentInstallerTraits::LoadSTHsFromDisk(
+    const base::FilePath& sths_path,
+    const base::Version& version) {
+  if (sths_path.empty())
+    return;
+
+  base::FileEnumerator sth_file_enumerator(sths_path, false,
+                                           base::FileEnumerator::FILES,
+                                           FILE_PATH_LITERAL("*.sth"));
+  base::FilePath sth_file_path;
+
+  while (!(sth_file_path = sth_file_enumerator.Next()).empty()) {
+    DVLOG(1) << "Reading STH from file: " << sth_file_path.value();
+
+    const std::string log_id_hex =
+        sth_file_path.BaseName().RemoveExtension().MaybeAsASCII();
+    if (log_id_hex.empty()) {
+      DVLOG(1) << "Error extracting log_id from: "
+               << sth_file_path.BaseName().LossyDisplayName();
+      continue;
+    }
+
+    std::vector<uint8_t> decoding_output;
+    if (!base::HexStringToBytes(log_id_hex, &decoding_output)) {
+      DVLOG(1) << "Failed to decode Log ID: " << log_id_hex;
+      continue;
+    }
+
+    const std::string log_id(reinterpret_cast<const char*>(&decoding_output[0]),
+                             decoding_output.size());
+
+    std::string json_sth;
+    if (!base::ReadFileToString(sth_file_path, &json_sth)) {
+      DVLOG(1) << "Failed reading from " << sth_file_path.value();
+      continue;
+    }
+
+    DVLOG(1) << "STH: Successfully read: " << json_sth;
+    safe_json::SafeJsonParser::Parse(
+        json_sth,
+        base::Bind(&STHSetComponentInstallerTraits::OnJsonParseSuccess,
+                   base::Unretained(this), log_id),
+        base::Bind(&STHSetComponentInstallerTraits::OnJsonParseError,
+                   base::Unretained(this), log_id));
+  }
+}
+
+void STHSetComponentInstallerTraits::OnJsonParseSuccess(
+    const std::string& log_id,
+    scoped_ptr<base::Value> parsed_json) {
+  net::ct::SignedTreeHead signed_tree_head;
+  DVLOG(1) << "STH parsing success for log: "
+           << base::HexEncode(log_id.data(), log_id.length());
+  if (!net::ct::FillSignedTreeHead(*(parsed_json.get()), &signed_tree_head)) {
+    LOG(ERROR) << "Failed to fill in signed tree head.";
+    return;
+  }
+
+  // The log id is not a part of the response, fill in manually.
+  signed_tree_head.log_id = log_id;
+  content::BrowserThread::PostTask(
+      content::BrowserThread::IO, FROM_HERE,
+      base::Bind(&net::ct::STHObserver::NewSTHObserved,
+                 base::Unretained(sth_observer_.get()), signed_tree_head));
+}
+
+void STHSetComponentInstallerTraits::OnJsonParseError(
+    const std::string& log_id,
+    const std::string& error) {
+  DVLOG(1) << "STH loading failed: " << error
+           << " for log: " << base::HexEncode(log_id.data(), log_id.length());
+}
+
+void RegisterSTHSetComponent(ComponentUpdateService* cus,
+                             const base::FilePath& user_data_dir) {
+  DVLOG(1) << "Registering STH Set fetcher component.";
+
+  // TODO(eranm): The next step in auditing CT logs (crbug.com/506227) is to
+  // pass the distributor to the IOThread so it can be used in a per-profile
+  // context for checking inclusion of SCTs.
+  scoped_ptr<net::ct::STHDistributor> distributor(
+      new net::ct::STHDistributor());
+
+  scoped_ptr<ComponentInstallerTraits> traits(
+      new STHSetComponentInstallerTraits(std::move(distributor)));
+  // |cus| will take ownership of |installer| during installer->Register(cus).
+  DefaultComponentInstaller* installer =
+      new DefaultComponentInstaller(std::move(traits));
+  installer->Register(cus, base::Closure());
+}
+
+}  // namespace component_updater
diff --git a/chrome/browser/component_updater/sth_set_component_installer.h b/chrome/browser/component_updater/sth_set_component_installer.h
new file mode 100644
index 0000000..0b99544c
--- /dev/null
+++ b/chrome/browser/component_updater/sth_set_component_installer.h
@@ -0,0 +1,85 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_COMPONENT_UPDATER_STH_SET_COMPONENT_INSTALLER_H_
+#define CHROME_BROWSER_COMPONENT_UPDATER_STH_SET_COMPONENT_INSTALLER_H_
+
+#include <stdint.h>
+
+#include <string>
+#include <vector>
+
+#include "base/gtest_prod_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "components/component_updater/default_component_installer.h"
+
+namespace base {
+class FilePath;
+class Value;
+}  // namespace base
+
+namespace net {
+namespace ct {
+class STHObserver;
+}  // namespace ct
+}  // namespace net
+
+namespace component_updater {
+
+class ComponentUpdateService;
+
+// Component for receiving Signed Tree Heads updates for Certificate
+// Transparency logs recognized in Chrome.
+// The STHs are in JSON format.
+// To identify the log each STH belongs to, the name of the file is
+// hex-encoded Log ID of the log that produced this STH.
+//
+// Notifications of each of the new STHs are sent to the net::ct::STHObserver,
+// so that it can take appropriate steps, including possible persistence.
+class STHSetComponentInstallerTraits : public ComponentInstallerTraits {
+ public:
+  // The |sth_distributor| will be notified each time a new STH is observed.
+  explicit STHSetComponentInstallerTraits(
+      scoped_ptr<net::ct::STHObserver> sth_observer);
+  ~STHSetComponentInstallerTraits() override;
+
+ private:
+  friend class STHSetComponentInstallerTest;
+
+  // ComponentInstallerTraits implementation.
+  bool CanAutoUpdate() const override;
+  bool RequiresNetworkEncryption() const override;
+  bool OnCustomInstall(const base::DictionaryValue& manifest,
+                       const base::FilePath& install_dir) override;
+  bool VerifyInstallation(const base::DictionaryValue& manifest,
+                          const base::FilePath& install_dir) const override;
+  void ComponentReady(const base::Version& version,
+                      const base::FilePath& install_dir,
+                      scoped_ptr<base::DictionaryValue> manifest) override;
+  base::FilePath GetBaseDirectory() const override;
+  void GetHash(std::vector<uint8_t>* hash) const override;
+  std::string GetName() const override;
+
+  // Reads and parses the on-disk json.
+  void LoadSTHsFromDisk(const base::FilePath& sths_file_path,
+                        const base::Version& version);
+
+  // Handle successful parsing of JSON by distributing the new STH.
+  void OnJsonParseSuccess(const std::string& log_id,
+                          scoped_ptr<base::Value> parsed_json);
+
+  // STH parsing failed - do nothing.
+  void OnJsonParseError(const std::string& log_id, const std::string& error);
+
+  scoped_ptr<net::ct::STHObserver> sth_observer_;
+
+  DISALLOW_COPY_AND_ASSIGN(STHSetComponentInstallerTraits);
+};
+
+void RegisterSTHSetComponent(ComponentUpdateService* cus,
+                             const base::FilePath& user_data_dir);
+
+}  // namespace component_updater
+
+#endif  // CHROME_BROWSER_COMPONENT_UPDATER_STH_SET_COMPONENT_INSTALLER_H_
diff --git a/chrome/browser/component_updater/sth_set_component_installer_unittest.cc b/chrome/browser/component_updater/sth_set_component_installer_unittest.cc
new file mode 100644
index 0000000..4f2480b4
--- /dev/null
+++ b/chrome/browser/component_updater/sth_set_component_installer_unittest.cc
@@ -0,0 +1,150 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/component_updater/sth_set_component_installer.h"
+
+#include <map>
+#include <string>
+
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/run_loop.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
+#include "base/version.h"
+#include "components/safe_json/testing_json_parser.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "net/cert/signed_tree_head.h"
+#include "net/cert/sth_observer.h"
+#include "net/test/ct_test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+namespace component_updater {
+
+class StoringSTHObserver : public net::ct::STHObserver {
+ public:
+  void NewSTHObserved(const net::ct::SignedTreeHead& sth) override {
+    sths[sth.log_id] = sth;
+  }
+
+  std::map<std::string, net::ct::SignedTreeHead> sths;
+};
+
+class STHSetComponentInstallerTest : public PlatformTest {
+ public:
+  STHSetComponentInstallerTest() {}
+  void SetUp() override {
+    PlatformTest::SetUp();
+
+    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+
+    scoped_ptr<StoringSTHObserver> observer(new StoringSTHObserver());
+    observer_ = observer.get();
+    traits_.reset(new STHSetComponentInstallerTraits(std::move(observer)));
+  }
+
+  void WriteSTHToFile(const std::string& sth_json,
+                      const base::FilePath& filename) {
+    ASSERT_EQ(static_cast<int32_t>(sth_json.length()),
+              base::WriteFile(filename, sth_json.data(), sth_json.length()));
+  }
+
+  base::FilePath GetSTHsDir() {
+    return temp_dir_.path()
+        .Append(FILE_PATH_LITERAL("_platform_specific"))
+        .Append(FILE_PATH_LITERAL("all"))
+        .Append(FILE_PATH_LITERAL("sths"));
+  }
+
+  void CreateSTHsDir(const base::DictionaryValue& manifest,
+                     const base::FilePath& sths_dir) {
+    ASSERT_FALSE(traits_->VerifyInstallation(manifest, temp_dir_.path()));
+    ASSERT_TRUE(base::CreateDirectory(sths_dir));
+  }
+
+  void LoadSTHs(const base::DictionaryValue& manifest,
+                const base::FilePath& sths_dir) {
+    ASSERT_TRUE(traits_->VerifyInstallation(manifest, temp_dir_.path()));
+
+    const base::Version v("1.0");
+    traits_->LoadSTHsFromDisk(sths_dir, v);
+    // Drain the RunLoop created by the TestBrowserThreadBundle
+    base::RunLoop().RunUntilIdle();
+  }
+
+ protected:
+  content::TestBrowserThreadBundle thread_bundle_;
+
+  base::ScopedTempDir temp_dir_;
+  scoped_ptr<STHSetComponentInstallerTraits> traits_;
+  StoringSTHObserver* observer_;
+  safe_json::TestingJsonParser::ScopedFactoryOverride factory_override_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(STHSetComponentInstallerTest);
+};
+
+// Parses valid STH JSON in a file with valid hex encoding of log id.
+TEST_F(STHSetComponentInstallerTest, CanLoadAllSTHs) {
+  const base::DictionaryValue manifest;
+  const base::FilePath sths_dir(GetSTHsDir());
+  CreateSTHsDir(manifest, sths_dir);
+
+  const std::string good_sth_json = net::ct::GetSampleSTHAsJson();
+  const base::FilePath first_sth_file =
+      sths_dir.Append(FILE_PATH_LITERAL("616263.sth"));
+  WriteSTHToFile(good_sth_json, first_sth_file);
+
+  const base::FilePath second_sth_file =
+      sths_dir.Append(FILE_PATH_LITERAL("610064.sth"));
+  WriteSTHToFile(good_sth_json, second_sth_file);
+
+  LoadSTHs(manifest, sths_dir);
+
+  EXPECT_EQ(2u, observer_->sths.size());
+
+  const std::string first_log_id("abc");
+  ASSERT_TRUE(observer_->sths.find(first_log_id) != observer_->sths.end());
+  const net::ct::SignedTreeHead& first_sth(observer_->sths[first_log_id]);
+  EXPECT_EQ(21u, first_sth.tree_size);
+
+  const std::string second_log_id("a\00d", 3);
+  ASSERT_TRUE(observer_->sths.find(second_log_id) != observer_->sths.end());
+}
+
+// Does not notify of invalid STH JSON.
+TEST_F(STHSetComponentInstallerTest, DoesNotLoadInvalidJSON) {
+  const base::DictionaryValue manifest;
+  const base::FilePath sths_dir(GetSTHsDir());
+  CreateSTHsDir(manifest, sths_dir);
+
+  const base::FilePath invalid_sth =
+      sths_dir.Append(FILE_PATH_LITERAL("010101.sth"));
+  WriteSTHToFile(std::string("{invalid json}"), invalid_sth);
+
+  LoadSTHs(manifest, sths_dir);
+  EXPECT_EQ(0u, observer_->sths.size());
+}
+
+// Does not notify of valid JSON but in a file not hex-encoded log id.
+TEST_F(STHSetComponentInstallerTest,
+       DoesNotLoadValidJSONFromFileNotHexEncoded) {
+  const base::DictionaryValue manifest;
+  const base::FilePath sths_dir(GetSTHsDir());
+  CreateSTHsDir(manifest, sths_dir);
+
+  const base::FilePath not_hex_sth_file =
+      sths_dir.Append(FILE_PATH_LITERAL("nothex.sth"));
+  WriteSTHToFile(net::ct::GetSampleSTHAsJson(), not_hex_sth_file);
+
+  LoadSTHs(manifest, sths_dir);
+  EXPECT_EQ(0u, observer_->sths.size());
+}
+
+}  // namespace component_updater
diff --git a/chrome/browser/download/all_download_item_notifier_unittest.cc b/chrome/browser/download/all_download_item_notifier_unittest.cc
index 6793886..2a4de9e8 100644
--- a/chrome/browser/download/all_download_item_notifier_unittest.cc
+++ b/chrome/browser/download/all_download_item_notifier_unittest.cc
@@ -71,8 +71,8 @@
 
  private:
   NiceMock<content::MockDownloadItem> item_;
-  scoped_ptr<content::MockDownloadManager> download_manager_;
-  scoped_ptr<AllDownloadItemNotifier> notifier_;
+  std::unique_ptr<content::MockDownloadManager> download_manager_;
+  std::unique_ptr<AllDownloadItemNotifier> notifier_;
   NiceMock<MockNotifierObserver> observer_;
 
   DISALLOW_COPY_AND_ASSIGN(AllDownloadItemNotifierTest);
diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc
index e8213ae..4caf254 100644
--- a/chrome/browser/download/chrome_download_manager_delegate.cc
+++ b/chrome/browser/download/chrome_download_manager_delegate.cc
@@ -456,7 +456,7 @@
   content::WebContents* web_contents = download->GetWebContents();
   Browser* browser =
       web_contents ? chrome::FindBrowserWithWebContents(web_contents) : NULL;
-  scoped_ptr<chrome::ScopedTabbedBrowserDisplayer> browser_displayer;
+  std::unique_ptr<chrome::ScopedTabbedBrowserDisplayer> browser_displayer;
   if (!browser ||
       !browser->CanSupportWindowFeature(Browser::FEATURE_TABSTRIP)) {
     browser_displayer.reset(new chrome::ScopedTabbedBrowserDisplayer(profile_));
@@ -727,7 +727,7 @@
 void ChromeDownloadManagerDelegate::OnDownloadTargetDetermined(
     int32_t download_id,
     const content::DownloadTargetCallback& callback,
-    scoped_ptr<DownloadTargetInfo> target_info) {
+    std::unique_ptr<DownloadTargetInfo> target_info) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   DownloadItem* item = download_manager_->GetDownload(download_id);
   if (item) {
diff --git a/chrome/browser/download/chrome_download_manager_delegate.h b/chrome/browser/download/chrome_download_manager_delegate.h
index 508966f..04e2540b 100644
--- a/chrome/browser/download/chrome_download_manager_delegate.h
+++ b/chrome/browser/download/chrome_download_manager_delegate.h
@@ -7,10 +7,11 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/containers/hash_tables.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/download/download_path_reservation_tracker.h"
 #include "chrome/browser/download/download_target_determiner_delegate.h"
@@ -153,7 +154,7 @@
   void OnDownloadTargetDetermined(
       int32_t download_id,
       const content::DownloadTargetCallback& callback,
-      scoped_ptr<DownloadTargetInfo> target_info);
+      std::unique_ptr<DownloadTargetInfo> target_info);
 
   // Returns true if |path| should open in the browser.
   bool IsOpenInBrowserPreferreredForFile(const base::FilePath& path);
@@ -161,7 +162,7 @@
   Profile* profile_;
   uint32_t next_download_id_;
   IdCallbackVector id_callbacks_;
-  scoped_ptr<DownloadPrefs> download_prefs_;
+  std::unique_ptr<DownloadPrefs> download_prefs_;
 
 #if defined(ENABLE_EXTENSIONS)
   // Maps from pending extension installations to DownloadItem IDs.
diff --git a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
index 505c56b..d3e21f8 100644
--- a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
+++ b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
@@ -157,7 +157,8 @@
   void VerifyAndClearExpectations();
 
   // Creates MockDownloadItem and sets up default expectations.
-  scoped_ptr<content::MockDownloadItem> CreateActiveDownloadItem(int32_t id);
+  std::unique_ptr<content::MockDownloadItem> CreateActiveDownloadItem(
+      int32_t id);
 
   // Given the relative path |path|, returns the full path under the temporary
   // downloads directory.
@@ -183,8 +184,8 @@
  private:
   syncable_prefs::TestingPrefServiceSyncable* pref_service_;
   base::ScopedTempDir test_download_dir_;
-  scoped_ptr<content::MockDownloadManager> download_manager_;
-  scoped_ptr<TestChromeDownloadManagerDelegate> delegate_;
+  std::unique_ptr<content::MockDownloadManager> download_manager_;
+  std::unique_ptr<TestChromeDownloadManagerDelegate> delegate_;
   MockWebContentsDelegate web_contents_delegate_;
 };
 
@@ -215,9 +216,9 @@
   ::testing::Mock::VerifyAndClearExpectations(delegate_.get());
 }
 
-scoped_ptr<content::MockDownloadItem>
+std::unique_ptr<content::MockDownloadItem>
 ChromeDownloadManagerDelegateTest::CreateActiveDownloadItem(int32_t id) {
-  scoped_ptr<content::MockDownloadItem> item(
+  std::unique_ptr<content::MockDownloadItem> item(
       new ::testing::NiceMock<content::MockDownloadItem>());
   ON_CALL(*item, GetBrowserContext())
       .WillByDefault(Return(profile()));
@@ -332,7 +333,7 @@
 TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_LastSavePath) {
   GURL download_url("http://example.com/foo.txt");
 
-  scoped_ptr<content::MockDownloadItem> save_as_download =
+  std::unique_ptr<content::MockDownloadItem> save_as_download =
       CreateActiveDownloadItem(0);
   EXPECT_CALL(*save_as_download, GetURL())
       .Times(::testing::AnyNumber())
@@ -341,7 +342,7 @@
       .Times(::testing::AnyNumber())
       .WillRepeatedly(Return(DownloadItem::TARGET_DISPOSITION_PROMPT));
 
-  scoped_ptr<content::MockDownloadItem> automatic_download =
+  std::unique_ptr<content::MockDownloadItem> automatic_download =
       CreateActiveDownloadItem(1);
   EXPECT_CALL(*automatic_download, GetURL())
       .Times(::testing::AnyNumber())
@@ -405,7 +406,7 @@
 TEST_F(ChromeDownloadManagerDelegateTest, MaybeDangerousContent) {
   GURL url("http://example.com/foo");
 
-  scoped_ptr<content::MockDownloadItem> download_item =
+  std::unique_ptr<content::MockDownloadItem> download_item =
       CreateActiveDownloadItem(0);
   EXPECT_CALL(*download_item, GetURL()).WillRepeatedly(ReturnRef(url));
   EXPECT_CALL(*download_item, GetTargetDisposition())
@@ -463,7 +464,7 @@
       default_download_path().AppendASCII("bar");
   base::WriteFile(existing_path, kData, kDataLength);
 
-  scoped_ptr<content::MockDownloadItem> download_item =
+  std::unique_ptr<content::MockDownloadItem> download_item =
       CreateActiveDownloadItem(1);
   EXPECT_CALL(*download_item, GetTargetFilePath())
       .WillRepeatedly(ReturnRef(existing_path));
@@ -511,7 +512,8 @@
   }
 
  private:
-  scoped_ptr<TestDownloadProtectionService> test_download_protection_service_;
+  std::unique_ptr<TestDownloadProtectionService>
+      test_download_protection_service_;
 };
 
 void ChromeDownloadManagerDelegateTestWithSafeBrowsing::SetUp() {
@@ -637,7 +639,7 @@
 TEST_P(ChromeDownloadManagerDelegateTestWithSafeBrowsing, CheckClientDownload) {
   const SafeBrowsingTestParameters& kParameters = GetParam();
 
-  scoped_ptr<content::MockDownloadItem> download_item =
+  std::unique_ptr<content::MockDownloadItem> download_item =
       CreateActiveDownloadItem(0);
   EXPECT_CALL(*delegate(), GetDownloadProtectionService());
   EXPECT_CALL(*download_protection_service(), MockCheckClientDownload())
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index 88ad87c..c9401185 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -263,7 +263,7 @@
       : profile_(profile), result_valid_(false) {}
 
   bool WaitForDownloadInfo(
-      scoped_ptr<std::vector<history::DownloadRow> >* results) {
+      std::unique_ptr<std::vector<history::DownloadRow>>* results) {
     history::HistoryService* hs = HistoryServiceFactory::GetForProfile(
         profile_, ServiceAccessType::EXPLICIT_ACCESS);
     DCHECK(hs);
@@ -280,14 +280,14 @@
 
  private:
   void OnQueryDownloadsComplete(
-      scoped_ptr<std::vector<history::DownloadRow> > entries) {
+      std::unique_ptr<std::vector<history::DownloadRow>> entries) {
     result_valid_ = true;
     results_ = std::move(entries);
     base::MessageLoopForUI::current()->QuitWhenIdle();
   }
 
   Profile* profile_;
-  scoped_ptr<std::vector<history::DownloadRow> > results_;
+  std::unique_ptr<std::vector<history::DownloadRow>> results_;
   bool result_valid_;
 
   DISALLOW_COPY_AND_ASSIGN(DownloadsHistoryDataCollector);
@@ -420,7 +420,7 @@
 
   void SetUpOnMainThread() override {
     base::FeatureList::ClearInstanceForTesting();
-    scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+    std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
     feature_list->InitializeFromCommandLine(
         features::kDownloadResumption.name, std::string());
     base::FeatureList::SetInstance(std::move(feature_list));
@@ -589,7 +589,7 @@
                                       WindowOpenDisposition disposition,
                                       int browser_test_flags) {
     // Setup notification, navigate, and block.
-    scoped_ptr<content::DownloadTestObserver> observer(
+    std::unique_ptr<content::DownloadTestObserver> observer(
         CreateWaiter(browser, 1));
     // This call will block until the condition specified by
     // |browser_test_flags|, but will not wait for the download to finish.
@@ -666,7 +666,7 @@
   }
 
   DownloadItem* CreateSlowTestDownload() {
-    scoped_ptr<content::DownloadTestObserver> observer(
+    std::unique_ptr<content::DownloadTestObserver> observer(
         CreateInProgressDownloadObserver(1));
     GURL slow_download_url(net::URLRequestSlowDownloadJob::kUnknownSizeUrl);
     DownloadManager* manager = DownloadManagerForBrowser(browser());
@@ -718,7 +718,7 @@
 
     // Download a partial web page in a background tab and wait.
     // The mock system will not complete until it gets a special URL.
-    scoped_ptr<content::DownloadTestObserver> observer(
+    std::unique_ptr<content::DownloadTestObserver> observer(
         CreateWaiter(browser, 1));
     ui_test_utils::NavigateToURL(browser, url);
 
@@ -866,7 +866,7 @@
         browser()->tab_strip_model()->GetActiveWebContents();
     ASSERT_TRUE(web_contents);
 
-    scoped_ptr<content::DownloadTestObserver> observer;
+    std::unique_ptr<content::DownloadTestObserver> observer;
     if (download_info.reason == content::DOWNLOAD_INTERRUPT_REASON_NONE) {
       observer.reset(new content::DownloadTestObserverTerminal(
           download_manager, 1,
@@ -882,7 +882,7 @@
       scoped_refptr<content::DownloadTestItemCreationObserver>
           creation_observer(new content::DownloadTestItemCreationObserver);
 
-      scoped_ptr<DownloadUrlParameters> params(
+      std::unique_ptr<DownloadUrlParameters> params(
           DownloadUrlParameters::FromWebContents(web_contents, starting_url));
       params->set_callback(creation_observer->callback());
       DownloadManagerForBrowser(browser())->DownloadUrl(std::move(params));
@@ -1034,9 +1034,9 @@
     error_info.error = error;
     error_injector->InjectError(error_info);
 
-    scoped_ptr<content::DownloadTestObserver> observer(
-        new DownloadTestObserverResumable(
-            DownloadManagerForBrowser(browser()), 1));
+    std::unique_ptr<content::DownloadTestObserver> observer(
+        new DownloadTestObserverResumable(DownloadManagerForBrowser(browser()),
+                                          1));
 
     GURL url = URLRequestMockHTTPJob::GetMockUrl(kDownloadTest1Path);
     ui_test_utils::NavigateToURL(browser(), url);
@@ -1070,7 +1070,7 @@
   // Location of the downloads directory for these tests
   base::ScopedTempDir downloads_directory_;
 
-  scoped_ptr<DownloadTestFileActivityObserver> file_activity_observer_;
+  std::unique_ptr<DownloadTestFileActivityObserver> file_activity_observer_;
 };
 
 namespace {
@@ -1147,7 +1147,7 @@
   }
 
  protected:
-  scoped_ptr<TestSafeBrowsingServiceFactory> test_safe_browsing_factory_;
+  std::unique_ptr<TestSafeBrowsingServiceFactory> test_safe_browsing_factory_;
 };
 
 }  // namespace
@@ -1203,10 +1203,9 @@
 
   // Download the file and wait.  We expect the Select File dialog to appear
   // due to the MIME type, but we still wait until the download completes.
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       new content::DownloadTestObserverTerminal(
-          DownloadManagerForBrowser(browser()),
-          1,
+          DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
   ui_test_utils::NavigateToURL(browser(), url);
   observer->WaitForFinished();
@@ -1245,9 +1244,9 @@
 //   S -> C: HTTP/1.1 200 OK
 //           Content-Type: foo/bar
 //           ...
-static scoped_ptr<net::test_server::HttpResponse> RespondWithContentTypeHandler(
-    const net::test_server::HttpRequest& request) {
-  scoped_ptr<net::test_server::BasicHttpResponse> response(
+static std::unique_ptr<net::test_server::HttpResponse>
+RespondWithContentTypeHandler(const net::test_server::HttpRequest& request) {
+  std::unique_ptr<net::test_server::BasicHttpResponse> response(
       new net::test_server::BasicHttpResponse());
   response->set_content_type(request.relative_url.substr(1));
   response->set_code(net::HTTP_OK);
@@ -1647,8 +1646,8 @@
 // download be canceled by having the file picker act like the user canceled
 // the download. The 2nd tab should be closed automatically.
 IN_PROC_BROWSER_TEST_F(DownloadTest, CloseNewTab4) {
-  scoped_ptr<content::DownloadTestObserver> observer(
-        CreateWaiter(browser(), 1));
+  std::unique_ptr<content::DownloadTestObserver> observer(
+      CreateWaiter(browser(), 1));
   DownloadManager* manager = DownloadManagerForBrowser(browser());
   EXPECT_EQ(0, manager->InProgressCount());
   EnableFileChooser(false);
@@ -1667,7 +1666,7 @@
   EXPECT_EQ(2, browser()->tab_strip_model()->count());
 
   // Download a file in that new tab, having it open a file picker
-  scoped_ptr<DownloadUrlParameters> params(
+  std::unique_ptr<DownloadUrlParameters> params(
       DownloadUrlParameters::FromWebContents(new_tab, slow_download_url));
   params->set_prompt(true);
   manager->DownloadUrl(std::move(params));
@@ -1691,9 +1690,9 @@
 //   S -> C: HTTP/1.1 301 Moved Permanently
 //           Location: http://example.com
 //           ...
-static scoped_ptr<net::test_server::HttpResponse> ServerRedirectRequestHandler(
-    const net::test_server::HttpRequest& request) {
-  scoped_ptr<net::test_server::BasicHttpResponse> response(
+static std::unique_ptr<net::test_server::HttpResponse>
+ServerRedirectRequestHandler(const net::test_server::HttpRequest& request) {
+  std::unique_ptr<net::test_server::BasicHttpResponse> response(
       new net::test_server::BasicHttpResponse());
   size_t query_position = request.relative_url.find('?');
 
@@ -1739,7 +1738,7 @@
   observer.WaitForStored();
 
   // Get the details on what was stored into the history.
-  scoped_ptr<std::vector<history::DownloadRow> > downloads_in_database;
+  std::unique_ptr<std::vector<history::DownloadRow>> downloads_in_database;
   ASSERT_TRUE(DownloadsHistoryDataCollector(
       browser()->profile()).WaitForDownloadInfo(&downloads_in_database));
   ASSERT_EQ(1u, downloads_in_database->size());
@@ -1767,7 +1766,7 @@
   // Finish the download.  We're ok relying on the history to be flushed
   // at this point as our queries will be behind the history updates
   // invoked by completion.
-  scoped_ptr<content::DownloadTestObserver> download_observer(
+  std::unique_ptr<content::DownloadTestObserver> download_observer(
       new content::DownloadTestObserverInterrupted(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -1823,7 +1822,7 @@
       URLRequestMockHTTPJob::GetMockUrl("downloads/dangerous/dangerous.swf"));
 
   // Download the url and wait until the object has been stored.
-  scoped_ptr<content::DownloadTestObserver> download_observer(
+  std::unique_ptr<content::DownloadTestObserver> download_observer(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_IGNORE));
@@ -1834,7 +1833,7 @@
   observer.WaitForStored();
 
   // Get the details on what was stored into the history.
-  scoped_ptr<std::vector<history::DownloadRow> > downloads_in_database;
+  std::unique_ptr<std::vector<history::DownloadRow>> downloads_in_database;
   ASSERT_TRUE(DownloadsHistoryDataCollector(
       browser()->profile()).WaitForDownloadInfo(&downloads_in_database));
   ASSERT_EQ(1u, downloads_in_database->size());
@@ -1931,7 +1930,7 @@
 
   // Create a download, wait until it's complete, and confirm
   // we're in the expected state.
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       CreateWaiter(browser(), 1));
   ui_test_utils::NavigateToURL(browser(), url);
   observer->WaitForFinished();
@@ -1979,7 +1978,7 @@
 
   GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
 
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY));
@@ -2006,7 +2005,7 @@
 
   GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
 
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
@@ -2041,7 +2040,7 @@
   extensions::ScopedTestDialogAutoConfirm auto_confirm_install_prompt(
       extensions::ScopedTestDialogAutoConfirm::ACCEPT);
 
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
@@ -2074,7 +2073,7 @@
   extensions::ScopedTestDialogAutoConfirm auto_confirm_install_prompt(
       extensions::ScopedTestDialogAutoConfirm::ACCEPT);
 
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
@@ -2101,7 +2100,7 @@
   extensions::ScopedTestDialogAutoConfirm auto_confirm_install_prompt(
       extensions::ScopedTestDialogAutoConfirm::ACCEPT);
 
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
@@ -2140,7 +2139,7 @@
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
-  scoped_ptr<DownloadUrlParameters> params(
+  std::unique_ptr<DownloadUrlParameters> params(
       DownloadUrlParameters::FromWebContents(web_contents, url));
   params->set_prompt(true);
   DownloadManagerForBrowser(browser())->DownloadUrl(std::move(params));
@@ -2168,7 +2167,7 @@
   base::FilePath target_file_full_path
       = other_directory.path().Append(file.BaseName());
   content::DownloadTestObserver* observer(CreateWaiter(browser(), 1));
-  scoped_ptr<DownloadUrlParameters> params(
+  std::unique_ptr<DownloadUrlParameters> params(
       DownloadUrlParameters::FromWebContents(web_contents, url));
   params->set_file_path(target_file_full_path);
   DownloadManagerForBrowser(browser())->DownloadUrl(std::move(params));
@@ -2210,7 +2209,7 @@
   // reachable.
   ASSERT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
 
-  scoped_ptr<content::DownloadTestObserver> waiter(
+  std::unique_ptr<content::DownloadTestObserver> waiter(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -2226,7 +2225,7 @@
   ASSERT_EQ(url, download_items[0]->GetOriginalUrl());
 
   // Try to download it via a context menu.
-  scoped_ptr<content::DownloadTestObserver> waiter_context_menu(
+  std::unique_ptr<content::DownloadTestObserver> waiter_context_menu(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -2256,9 +2255,9 @@
 // A EmbeddedTestServer::HandleRequestCallback function that checks for requests
 // with query string ?allow-post-only, and returns a 404 response if the method
 // is not POST.
-static scoped_ptr<net::test_server::HttpResponse> FilterPostOnlyURLsHandler(
-    const net::test_server::HttpRequest& request) {
-  scoped_ptr<net::test_server::BasicHttpResponse> response;
+static std::unique_ptr<net::test_server::HttpResponse>
+FilterPostOnlyURLsHandler(const net::test_server::HttpRequest& request) {
+  std::unique_ptr<net::test_server::BasicHttpResponse> response;
   if (request.relative_url.find("?allow-post-only") != std::string::npos &&
       request.method != net::test_server::METHOD_POST) {
     response.reset(new net::test_server::BasicHttpResponse());
@@ -2308,7 +2307,7 @@
   // reachable. This will also fail if it tries to be retrieved via "GET"
   // rather than "POST".
   ASSERT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
-  scoped_ptr<content::DownloadTestObserver> waiter(
+  std::unique_ptr<content::DownloadTestObserver> waiter(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -2324,7 +2323,7 @@
   ASSERT_EQ(jpeg_url, download_items[0]->GetOriginalUrl());
 
   // Try to download it via a context menu.
-  scoped_ptr<content::DownloadTestObserver> waiter_context_menu(
+  std::unique_ptr<content::DownloadTestObserver> waiter_context_menu(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -2546,14 +2545,14 @@
 //            Content-Type: text/plain
 //
 //            http://example.com/foo
-static scoped_ptr<net::test_server::HttpResponse> EchoReferrerRequestHandler(
-    const net::test_server::HttpRequest& request) {
+static std::unique_ptr<net::test_server::HttpResponse>
+EchoReferrerRequestHandler(const net::test_server::HttpRequest& request) {
   const std::string kReferrerHeader = "Referer";  // SIC
 
   if (request.relative_url.find("/echoreferrer") != 0)
-    return scoped_ptr<net::test_server::HttpResponse>();
+    return std::unique_ptr<net::test_server::HttpResponse>();
 
-  scoped_ptr<net::test_server::BasicHttpResponse> response(
+  std::unique_ptr<net::test_server::BasicHttpResponse> response(
       new net::test_server::BasicHttpResponse());
   response->set_code(net::HTTP_OK);
   response->set_content_type("text/plain");
@@ -2579,7 +2578,7 @@
   ASSERT_TRUE(url.is_valid());
   ui_test_utils::NavigateToURL(browser(), url);
 
-  scoped_ptr<content::DownloadTestObserver> waiter(
+  std::unique_ptr<content::DownloadTestObserver> waiter(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -2633,7 +2632,7 @@
   ASSERT_TRUE(url.is_valid());
   ui_test_utils::NavigateToURL(browser(), url);
 
-  scoped_ptr<content::DownloadTestObserver> waiter(
+  std::unique_ptr<content::DownloadTestObserver> waiter(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -2688,7 +2687,7 @@
   ui_test_utils::NavigateToURL(browser(), url);
 
   // Try to download an image via a context menu.
-  scoped_ptr<content::DownloadTestObserver> waiter_context_menu(
+  std::unique_ptr<content::DownloadTestObserver> waiter_context_menu(
       new content::DownloadTestObserverTerminal(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -2727,8 +2726,8 @@
       switches::kDisablePermissionsBubbles);
 
   // Create a downloads observer.
-  scoped_ptr<content::DownloadTestObserver> downloads_observer(
-        CreateWaiter(browser(), 2));
+  std::unique_ptr<content::DownloadTestObserver> downloads_observer(
+      CreateWaiter(browser(), 2));
 
   // Create an infobar observer.
   content::WindowedNotificationObserver infobar_added_1(
@@ -2775,8 +2774,8 @@
 #endif
 
   // Create a downloads observer.
-  scoped_ptr<content::DownloadTestObserver> downloads_observer(
-        CreateWaiter(browser(), 2));
+  std::unique_ptr<content::DownloadTestObserver> downloads_observer(
+      CreateWaiter(browser(), 2));
 
   PermissionBubbleManager* permission_bubble_manager =
       PermissionBubbleManager::FromWebContents(
@@ -2972,7 +2971,7 @@
   ASSERT_LE(size, free_space) << "Not enough disk space to download. Got "
                               << free_space;
   GURL file_url(net::FilePathToFileURL(file_path));
-  scoped_ptr<content::DownloadTestObserver> progress_waiter(
+  std::unique_ptr<content::DownloadTestObserver> progress_waiter(
       CreateInProgressWaiter(browser(), 1));
 
   // Start downloading a file, wait for it to be created.
@@ -3008,7 +3007,7 @@
   scoped_refptr<content::TestFileErrorInjector> error_injector(
       content::TestFileErrorInjector::Create(
           DownloadManagerForBrowser(browser())));
-  scoped_ptr<content::DownloadTestObserver> completion_observer(
+  std::unique_ptr<content::DownloadTestObserver> completion_observer(
       CreateWaiter(browser(), 1));
   EnableFileChooser(true);
 
@@ -3031,7 +3030,7 @@
   scoped_refptr<content::TestFileErrorInjector> error_injector(
       content::TestFileErrorInjector::Create(
           DownloadManagerForBrowser(browser())));
-  scoped_ptr<content::DownloadTestObserver> completion_observer(
+  std::unique_ptr<content::DownloadTestObserver> completion_observer(
       CreateWaiter(browser(), 1));
   EnableFileChooser(true);
 
@@ -3055,7 +3054,7 @@
   scoped_refptr<content::TestFileErrorInjector> error_injector(
       content::TestFileErrorInjector::Create(
           DownloadManagerForBrowser(browser())));
-  scoped_ptr<content::DownloadTestObserver> completion_observer(
+  std::unique_ptr<content::DownloadTestObserver> completion_observer(
       CreateWaiter(browser(), 1));
   EnableFileChooser(true);
 
@@ -3093,7 +3092,7 @@
   // only care that it is greater than 1.
   EXPECT_GT(1u, error_injector->TotalFileCount());
 
-  scoped_ptr<content::DownloadTestObserver> completion_observer(
+  std::unique_ptr<content::DownloadTestObserver> completion_observer(
       CreateWaiter(browser(), 1));
   download->Resume();
   completion_observer->WaitForFinished();
@@ -3109,13 +3108,13 @@
   scoped_refptr<content::TestFileErrorInjector> error_injector(
       content::TestFileErrorInjector::Create(
           DownloadManagerForBrowser(browser())));
-  scoped_ptr<DownloadTestObserverNotInProgress> completion_observer(
+  std::unique_ptr<DownloadTestObserverNotInProgress> completion_observer(
       new DownloadTestObserverNotInProgress(
           DownloadManagerForBrowser(browser()), 1));
   // Wait for two transitions to a resumable state
-  scoped_ptr<content::DownloadTestObserver> resumable_observer(
-      new DownloadTestObserverResumable(
-          DownloadManagerForBrowser(browser()), 2));
+  std::unique_ptr<content::DownloadTestObserver> resumable_observer(
+      new DownloadTestObserverResumable(DownloadManagerForBrowser(browser()),
+                                        2));
 
   EnableFileChooser(true);
   DownloadItem* download = StartMockDownloadAndInjectError(
@@ -3221,11 +3220,11 @@
                                                true);
   GURL download_url =
       net::URLRequestMockHTTPJob::GetMockUrl(kDangerousMockFilePath);
-  scoped_ptr<content::DownloadTestObserver> dangerous_observer(
+  std::unique_ptr<content::DownloadTestObserver> dangerous_observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_QUIT));
-  scoped_ptr<content::DownloadTestObserver> in_progress_observer(
+  std::unique_ptr<content::DownloadTestObserver> in_progress_observer(
       new DisableSafeBrowsingOnInProgressDownload(browser()));
   ui_test_utils::NavigateToURLWithDisposition(browser(),
                                               download_url,
@@ -3257,7 +3256,7 @@
 
   GURL download_url =
       net::URLRequestMockHTTPJob::GetMockUrl(kDangerousMockFilePath);
-  scoped_ptr<content::DownloadTestObserver> dangerous_observer(
+  std::unique_ptr<content::DownloadTestObserver> dangerous_observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_QUIT));
@@ -3300,7 +3299,7 @@
   // Make a dangerous file.
   GURL download_url(net::URLRequestMockHTTPJob::GetMockUrl(
       "downloads/dangerous/dangerous.swf"));
-  scoped_ptr<content::DownloadTestObserverInterrupted> observer(
+  std::unique_ptr<content::DownloadTestObserverInterrupted> observer(
       new content::DownloadTestObserverInterrupted(
           DownloadManagerForBrowser(browser()), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_QUIT));
@@ -3356,7 +3355,7 @@
   // Make a dangerous file.
   GURL download_url(
       net::URLRequestMockHTTPJob::GetMockUrl(kDangerousMockFilePath));
-  scoped_ptr<content::DownloadTestObserver> dangerous_observer(
+  std::unique_ptr<content::DownloadTestObserver> dangerous_observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_QUIT));
@@ -3392,7 +3391,7 @@
   // Make a dangerous file.
   GURL download_url(
       net::URLRequestMockHTTPJob::GetMockUrl(kDangerousMockFilePath));
-  scoped_ptr<content::DownloadTestObserver> dangerous_observer(
+  std::unique_ptr<content::DownloadTestObserver> dangerous_observer(
       DangerousDownloadWaiter(
           browser(), 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_QUIT));
@@ -3622,7 +3621,7 @@
   GURL url(URLRequestMockHTTPJob::GetMockUrl(kDownloadTest1Path));
 
   DownloadManager* download_manager = DownloadManagerForBrowser(browser());
-  scoped_ptr<content::DownloadTestObserver> observer(
+  std::unique_ptr<content::DownloadTestObserver> observer(
       new content::DownloadTestObserverTerminal(
           download_manager, 1,
           content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
@@ -3630,7 +3629,7 @@
   // Download and set IsHiddenDownload to true.
   WebContents* web_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
-  scoped_ptr<DownloadUrlParameters> params(
+  std::unique_ptr<DownloadUrlParameters> params(
       DownloadUrlParameters::FromWebContents(web_contents, url));
   params->set_callback(base::Bind(&SetHiddenDownloadCallback));
   download_manager->DownloadUrl(std::move(params));
@@ -3662,8 +3661,10 @@
 
   GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
 
-  scoped_ptr<content::DownloadTestObserver> observer(DangerousDownloadWaiter(
-      browser(), 1, content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY));
+  std::unique_ptr<content::DownloadTestObserver> observer(
+      DangerousDownloadWaiter(
+          browser(), 1,
+          content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY));
   ui_test_utils::NavigateToURL(browser(), extension_url);
 
   observer->WaitForFinished();
diff --git a/chrome/browser/download/download_crx_util.cc b/chrome/browser/download/download_crx_util.cc
index 12281d8..13fd68e 100644
--- a/chrome/browser/download/download_crx_util.cc
+++ b/chrome/browser/download/download_crx_util.cc
@@ -34,7 +34,7 @@
 // Called to get an extension install UI object.  In tests, will return
 // a mock if the test calls download_util::SetMockInstallPromptForTesting()
 // to set one.
-scoped_ptr<ExtensionInstallPrompt> CreateExtensionInstallPrompt(
+std::unique_ptr<ExtensionInstallPrompt> CreateExtensionInstallPrompt(
     Profile* profile,
     const DownloadItem& download_item) {
   // Use a mock if one is present.  Otherwise, create a real extensions
@@ -42,7 +42,7 @@
   if (mock_install_prompt_for_testing) {
     ExtensionInstallPrompt* result = mock_install_prompt_for_testing;
     mock_install_prompt_for_testing = NULL;
-    return scoped_ptr<ExtensionInstallPrompt>(result);
+    return std::unique_ptr<ExtensionInstallPrompt>(result);
   } else {
     content::WebContents* web_contents = download_item.GetWebContents();
     if (!web_contents) {
@@ -52,7 +52,7 @@
             new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile));
       web_contents = browser->tab_strip_model()->GetActiveWebContents();
     }
-    return scoped_ptr<ExtensionInstallPrompt>(
+    return std::unique_ptr<ExtensionInstallPrompt>(
         new ExtensionInstallPrompt(web_contents));
   }
 }
@@ -62,7 +62,7 @@
 // Tests can call this method to inject a mock ExtensionInstallPrompt
 // to be used to confirm permissions on a downloaded CRX.
 void SetMockInstallPromptForTesting(
-    scoped_ptr<ExtensionInstallPrompt> mock_prompt) {
+    std::unique_ptr<ExtensionInstallPrompt> mock_prompt) {
   mock_install_prompt_for_testing = mock_prompt.release();
 }
 
diff --git a/chrome/browser/download/download_crx_util.h b/chrome/browser/download/download_crx_util.h
index d76ee45..cd84fab 100644
--- a/chrome/browser/download/download_crx_util.h
+++ b/chrome/browser/download/download_crx_util.h
@@ -7,9 +7,9 @@
 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_CRX_UTIL_H_
 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_CRX_UTIL_H_
 
+#include <memory>
 
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 
 class ExtensionInstallPrompt;
 class Profile;
@@ -27,7 +27,7 @@
 // Allow tests to install a mock ExtensionInstallPrompt object, to fake
 // user clicks on the permissions dialog.
 void SetMockInstallPromptForTesting(
-    scoped_ptr<ExtensionInstallPrompt> mock_prompt);
+    std::unique_ptr<ExtensionInstallPrompt> mock_prompt);
 
 // Create and pre-configure a CrxInstaller for a given |download_item|.
 scoped_refptr<extensions::CrxInstaller> CreateCrxInstaller(
diff --git a/chrome/browser/download/download_danger_prompt.cc b/chrome/browser/download/download_danger_prompt.cc
index a062f4a..f5b2e8f4 100644
--- a/chrome/browser/download/download_danger_prompt.cc
+++ b/chrome/browser/download/download_danger_prompt.cc
@@ -74,7 +74,7 @@
   bool show_context_;
   OnDone done_;
 
-  scoped_ptr<ExperienceSamplingEvent> sampling_event_;
+  std::unique_ptr<ExperienceSamplingEvent> sampling_event_;
 
   DISALLOW_COPY_AND_ASSIGN(DownloadDangerPromptImpl);
 };
diff --git a/chrome/browser/download/download_danger_prompt_browsertest.cc b/chrome/browser/download/download_danger_prompt_browsertest.cc
index 6125dd6..9986c5d6 100644
--- a/chrome/browser/download/download_danger_prompt_browsertest.cc
+++ b/chrome/browser/download/download_danger_prompt_browsertest.cc
@@ -181,7 +181,7 @@
   DownloadDangerPrompt* prompt_;
   DownloadDangerPrompt::Action expected_action_;
   bool did_receive_callback_;
-  scoped_ptr<TestSafeBrowsingServiceFactory> test_safe_browsing_factory_;
+  std::unique_ptr<TestSafeBrowsingServiceFactory> test_safe_browsing_factory_;
   std::string expected_serialized_report_;
   bool report_sent_;
 
diff --git a/chrome/browser/download/download_dir_policy_handler.cc b/chrome/browser/download/download_dir_policy_handler.cc
index 680f619..c49ddfb6 100644
--- a/chrome/browser/download/download_dir_policy_handler.cc
+++ b/chrome/browser/download/download_dir_policy_handler.cc
@@ -6,8 +6,10 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/download/download_prefs.h"
@@ -103,7 +105,7 @@
   if (expanded_value.empty())
     expanded_value = DownloadPrefs::GetDefaultDownloadDirectory().value();
   prefs->SetValue(prefs::kDownloadDefaultDirectory,
-                  make_scoped_ptr(new base::StringValue(expanded_value)));
+                  base::WrapUnique(new base::StringValue(expanded_value)));
 
   // If the policy is mandatory, prompt for download should be disabled.
   // Otherwise, it would enable a user to bypass the mandatory policy.
diff --git a/chrome/browser/download/download_dir_policy_handler_unittest.cc b/chrome/browser/download/download_dir_policy_handler_unittest.cc
index 0b78adb..3051a25c9 100644
--- a/chrome/browser/download/download_dir_policy_handler_unittest.cc
+++ b/chrome/browser/download/download_dir_policy_handler_unittest.cc
@@ -2,13 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/download/download_dir_policy_handler.h"
+
 #include <string>
 
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "build/build_config.h"
-#include "chrome/browser/download/download_dir_policy_handler.h"
 #include "chrome/browser/download/download_prefs.h"
 #include "chrome/common/pref_names.h"
 #include "components/drive/drive_pref_names.h"
@@ -53,7 +55,7 @@
         &handler_list_,
         policy::POLICY_LEVEL_RECOMMENDED);
     handler_list_.AddHandler(
-        make_scoped_ptr<policy::ConfigurationPolicyHandler>(
+        base::WrapUnique<policy::ConfigurationPolicyHandler>(
             new DownloadDirPolicyHandler));
   }
 
diff --git a/chrome/browser/download/download_history.cc b/chrome/browser/download/download_history.cc
index 84d8067..eb4e2e9 100644
--- a/chrome/browser/download/download_history.cc
+++ b/chrome/browser/download/download_history.cc
@@ -105,7 +105,7 @@
   static const char kKey[];
 
   PersistenceState state_;
-  scoped_ptr<history::DownloadRow> info_;
+  std::unique_ptr<history::DownloadRow> info_;
   bool was_restored_from_history_;
 
   DISALLOW_COPY_AND_ASSIGN(DownloadHistoryData);
@@ -213,7 +213,7 @@
 }
 
 DownloadHistory::DownloadHistory(content::DownloadManager* manager,
-                                 scoped_ptr<HistoryAdapter> history)
+                                 std::unique_ptr<HistoryAdapter> history)
     : notifier_(manager, this),
       history_(std::move(history)),
       loading_id_(content::DownloadItem::kInvalidId),
@@ -263,7 +263,7 @@
          download->GetId() == loading_id_;
 }
 
-void DownloadHistory::QueryCallback(scoped_ptr<InfoVector> infos) {
+void DownloadHistory::QueryCallback(std::unique_ptr<InfoVector> infos) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   // ManagerGoingDown() may have happened before the history loaded.
   if (!notifier_.GetManager())
diff --git a/chrome/browser/download/download_history.h b/chrome/browser/download/download_history.h
index e6d943b..6b763d9 100644
--- a/chrome/browser/download/download_history.h
+++ b/chrome/browser/download/download_history.h
@@ -84,9 +84,8 @@
   // Neither |manager| nor |history| may be NULL.
   // DownloadService creates DownloadHistory some time after DownloadManager is
   // created and destroys DownloadHistory as DownloadManager is shutting down.
-  DownloadHistory(
-      content::DownloadManager* manager,
-      scoped_ptr<HistoryAdapter> history);
+  DownloadHistory(content::DownloadManager* manager,
+                  std::unique_ptr<HistoryAdapter> history);
 
   ~DownloadHistory() override;
 
@@ -106,8 +105,7 @@
 
   // Callback from |history_| containing all entries in the downloads database
   // table.
-  void QueryCallback(
-      scoped_ptr<std::vector<history::DownloadRow> > infos);
+  void QueryCallback(std::unique_ptr<std::vector<history::DownloadRow>> infos);
 
   // May add |item| to |history_|.
   void MaybeAddToHistory(content::DownloadItem* item);
@@ -136,7 +134,7 @@
 
   AllDownloadItemNotifier notifier_;
 
-  scoped_ptr<HistoryAdapter> history_;
+  std::unique_ptr<HistoryAdapter> history_;
 
   // Identifier of the item being created in QueryCallback(), matched up with
   // created items in OnDownloadCreated() so that the item is not re-added to
diff --git a/chrome/browser/download/download_history_unittest.cc b/chrome/browser/download/download_history_unittest.cc
index bef3b28..63961cc 100644
--- a/chrome/browser/download/download_history_unittest.cc
+++ b/chrome/browser/download/download_history_unittest.cc
@@ -101,7 +101,7 @@
     }
   }
 
-  void ExpectWillQueryDownloads(scoped_ptr<InfoVector> infos) {
+  void ExpectWillQueryDownloads(std::unique_ptr<InfoVector> infos) {
     DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
     expect_query_downloads_ = std::move(infos);
   }
@@ -165,7 +165,7 @@
   bool fail_create_download_;
   base::Closure create_download_callback_;
   history::DownloadRow update_download_;
-  scoped_ptr<InfoVector> expect_query_downloads_;
+  std::unique_ptr<InfoVector> expect_query_downloads_;
   IdSet remove_downloads_;
   history::DownloadRow create_download_info_;
 
@@ -208,7 +208,7 @@
     return manager_observer_;
   }
 
-  void CreateDownloadHistory(scoped_ptr<InfoVector> infos) {
+  void CreateDownloadHistory(std::unique_ptr<InfoVector> infos) {
     DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
     CHECK(infos.get());
     EXPECT_CALL(manager(), AddObserver(_)).WillOnce(WithArg<0>(Invoke(
@@ -248,7 +248,8 @@
     history_->ExpectWillQueryDownloads(std::move(infos));
     EXPECT_CALL(*manager_.get(), GetAllDownloads(_)).WillRepeatedly(Return());
     download_history_.reset(new DownloadHistory(
-        &manager(), scoped_ptr<DownloadHistory::HistoryAdapter>(history_)));
+        &manager(),
+        std::unique_ptr<DownloadHistory::HistoryAdapter>(history_)));
     content::RunAllPendingInMessageLoop(content::BrowserThread::UI);
     history_->ExpectQueryDownloadsDone();
   }
@@ -467,9 +468,9 @@
   base::MessageLoopForUI loop_;
   content::TestBrowserThread ui_thread_;
   std::vector<StrictMockDownloadItem*> items_;
-  scoped_ptr<content::MockDownloadManager> manager_;
+  std::unique_ptr<content::MockDownloadManager> manager_;
   FakeHistoryAdapter* history_;
-  scoped_ptr<DownloadHistory> download_history_;
+  std::unique_ptr<DownloadHistory> download_history_;
   content::DownloadManager::Observer* manager_observer_;
   size_t download_created_index_;
   DownloadItemCallback pre_on_create_handler_;
@@ -489,7 +490,7 @@
                 "http://example.com/referrer.html",
                 &info);
   {
-    scoped_ptr<InfoVector> infos(new InfoVector());
+    std::unique_ptr<InfoVector> infos(new InfoVector());
     infos->push_back(info);
     CreateDownloadHistory(std::move(infos));
     ExpectNoDownloadCreated();
@@ -528,20 +529,20 @@
 
   TestDownloadHistoryObserver observer;
   history::HistoryService::DownloadQueryCallback query_callback;
-  scoped_ptr<TestHistoryAdapter> test_history_adapter(
+  std::unique_ptr<TestHistoryAdapter> test_history_adapter(
       new TestHistoryAdapter(&query_callback));
 
   // Create a new DownloadHistory object. This should cause
   // TestHistoryAdapter::QueryDownloads() to be called. The TestHistoryAdapter
   // stored the completion callback.
-  scoped_ptr<DownloadHistory> history(
+  std::unique_ptr<DownloadHistory> history(
       new DownloadHistory(&manager(), std::move(test_history_adapter)));
   history->AddObserver(&observer);
   EXPECT_FALSE(observer.on_history_query_complete_called_);
   ASSERT_FALSE(query_callback.is_null());
 
   // Now invoke the query completion callback.
-  scoped_ptr<std::vector<history::DownloadRow>> query_results(
+  std::unique_ptr<std::vector<history::DownloadRow>> query_results(
       new std::vector<history::DownloadRow>());
   query_callback.Run(std::move(query_results));
   EXPECT_TRUE(observer.on_history_query_complete_called_);
@@ -552,7 +553,7 @@
 // observer that was added after the initial history query completing.
 TEST_F(DownloadHistoryTest, DownloadHistoryTest_OnHistoryQueryComplete_Post) {
   TestDownloadHistoryObserver observer;
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
   download_history()->AddObserver(&observer);
   EXPECT_TRUE(observer.on_history_query_complete_called_);
   download_history()->RemoveObserver(&observer);
@@ -576,7 +577,7 @@
                 "http://example.com/bar.pdf",
                 "http://example.com/referrer.html",
                 &info);
-  scoped_ptr<InfoVector> infos(new InfoVector());
+  std::unique_ptr<InfoVector> infos(new InfoVector());
   infos->push_back(info);
   CreateDownloadHistory(std::move(infos));
 
@@ -594,7 +595,7 @@
 
   // Create a DownloadHistory with no history downloads. No
   // DownloadManager::CreateDownload() calls are expected.
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
 
   // Notify DownloadHistory that a new download was created. The above test
   // expecation should verify that WasRestoredFromHistory is correct for this
@@ -613,7 +614,7 @@
 TEST_F(DownloadHistoryTest, DownloadHistoryTest_Create) {
   // Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
   // OnDownloadRemoved.
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
 
   history::DownloadRow info;
   InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -642,7 +643,7 @@
 // Test that changes to persisted fields in a DownloadItem triggers database
 // updates.
 TEST_F(DownloadHistoryTest, DownloadHistoryTest_Update) {
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
 
   history::DownloadRow info;
   InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -738,7 +739,7 @@
 TEST_F(DownloadHistoryTest, DownloadHistoryTest_Temporary) {
   // Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
   // OnDownloadRemoved.
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
 
   history::DownloadRow info;
   InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -781,7 +782,7 @@
 
 // Test removing downloads while they're still being added.
 TEST_F(DownloadHistoryTest, DownloadHistoryTest_RemoveWhileAdding) {
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
 
   history::DownloadRow info;
   InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -831,7 +832,7 @@
                 "http://example.com/referrer1.html",
                 &info1);
   {
-    scoped_ptr<InfoVector> infos(new InfoVector());
+    std::unique_ptr<InfoVector> infos(new InfoVector());
     infos->push_back(info0);
     infos->push_back(info1);
     CreateDownloadHistory(std::move(infos));
@@ -854,7 +855,7 @@
 TEST_F(DownloadHistoryTest, DownloadHistoryTest_CreateFailed) {
   // Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
   // OnDownloadRemoved.
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
 
   history::DownloadRow info;
   InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
@@ -878,7 +879,7 @@
 TEST_F(DownloadHistoryTest, DownloadHistoryTest_UpdateWhileAdding) {
   // Create a fresh item not from history, OnDownloadCreated, OnDownloadUpdated,
   // OnDownloadRemoved.
-  CreateDownloadHistory(scoped_ptr<InfoVector>(new InfoVector()));
+  CreateDownloadHistory(std::unique_ptr<InfoVector>(new InfoVector()));
 
   history::DownloadRow info;
   InitBasicItem(FILE_PATH_LITERAL("/foo/bar.pdf"),
diff --git a/chrome/browser/download/download_path_reservation_tracker_unittest.cc b/chrome/browser/download/download_path_reservation_tracker_unittest.cc
index 2a65597..fa9f99c 100644
--- a/chrome/browser/download/download_path_reservation_tracker_unittest.cc
+++ b/chrome/browser/download/download_path_reservation_tracker_unittest.cc
@@ -162,7 +162,7 @@
 
 // A basic reservation is acquired and committed.
 TEST_F(DownloadPathReservationTrackerTest, BasicReservation) {
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
   ASSERT_FALSE(IsPathInUse(path));
@@ -192,7 +192,7 @@
 
 // A download that is interrupted should lose its reservation.
 TEST_F(DownloadPathReservationTrackerTest, InterruptedDownload) {
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
   ASSERT_FALSE(IsPathInUse(path));
@@ -221,7 +221,7 @@
 
 // A completed download should also lose its reservation.
 TEST_F(DownloadPathReservationTrackerTest, CompleteDownload) {
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
   ASSERT_FALSE(IsPathInUse(path));
@@ -254,7 +254,7 @@
 // If there are files on the file system, a unique reservation should uniquify
 // around it.
 TEST_F(DownloadPathReservationTrackerTest, ConflictingFiles) {
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
   base::FilePath path1(
@@ -296,7 +296,7 @@
 
 // Multiple reservations for the same path should uniquify around each other.
 TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) {
-  scoped_ptr<MockDownloadItem> item1(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item1(CreateDownloadItem(1));
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
   base::FilePath uniquified_path(
@@ -324,7 +324,7 @@
   {
     // Requesting a reservation for the same path with uniquification results in
     // a uniquified path.
-    scoped_ptr<MockDownloadItem> item2(CreateDownloadItem(2));
+    std::unique_ptr<MockDownloadItem> item2(CreateDownloadItem(2));
     base::FilePath reserved_path2;
     CallGetReservedPath(
         item2.get(),
@@ -345,7 +345,7 @@
   {
     // Since the previous download item was removed, requesting a reservation
     // for the same path should result in the same uniquified path.
-    scoped_ptr<MockDownloadItem> item2(CreateDownloadItem(2));
+    std::unique_ptr<MockDownloadItem> item2(CreateDownloadItem(2));
     base::FilePath reserved_path2;
     CallGetReservedPath(
         item2.get(),
@@ -363,7 +363,7 @@
 
   // Now acquire an overwriting reservation. We should end up with the same
   // non-uniquified path for both reservations.
-  scoped_ptr<MockDownloadItem> item3(CreateDownloadItem(2));
+  std::unique_ptr<MockDownloadItem> item3(CreateDownloadItem(2));
   base::FilePath reserved_path3;
   conflict_action = DownloadPathReservationTracker::OVERWRITE;
   CallGetReservedPath(
@@ -389,7 +389,7 @@
 TEST_F(DownloadPathReservationTrackerTest, UnresolvedConflicts) {
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
-  scoped_ptr<MockDownloadItem>
+  std::unique_ptr<MockDownloadItem>
       items[DownloadPathReservationTracker::kMaxUniqueFiles + 1];
   DownloadPathReservationTracker::FilenameConflictAction conflict_action =
     DownloadPathReservationTracker::UNIQUIFY;
@@ -421,7 +421,7 @@
     EXPECT_TRUE(verified);
   }
   // The next reservation for |path| will fail to be unique.
-  scoped_ptr<MockDownloadItem> item(
+  std::unique_ptr<MockDownloadItem> item(
       CreateDownloadItem(DownloadPathReservationTracker::kMaxUniqueFiles + 1));
   base::FilePath reserved_path;
   bool verified = true;
@@ -443,7 +443,7 @@
 // If the target directory is unwriteable, then callback should be notified that
 // verification failed.
 TEST_F(DownloadPathReservationTrackerTest, UnwriteableDirectory) {
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
   base::FilePath dir(path.DirName());
@@ -484,7 +484,7 @@
   bool create_directory = false;
 
   {
-    scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+    std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
     base::FilePath reserved_path;
     bool verified = true;
     CallGetReservedPath(
@@ -500,7 +500,7 @@
   }
   ASSERT_FALSE(IsPathInUse(path));
   {
-    scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+    std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
     base::FilePath reserved_path;
     bool verified = true;
     set_default_download_path(dir);
@@ -521,7 +521,7 @@
 // If the target path of the download item changes, the reservation should be
 // updated to match.
 TEST_F(DownloadPathReservationTrackerTest, UpdatesToTargetPath) {
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(
       GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt")));
   ASSERT_FALSE(IsPathInUse(path));
@@ -580,7 +580,7 @@
   // ".crdownload". So take it into account. Should be removed in the future.
   const size_t max_length = real_max_length - 11;
 
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(GetLongNamePathInDownloadsDirectory(
       max_length, FILE_PATH_LITERAL(".txt")));
   ASSERT_FALSE(IsPathInUse(path));
@@ -612,7 +612,7 @@
   ASSERT_NE(-1, real_max_length);
   const size_t max_length = real_max_length - 11;
 
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(GetLongNamePathInDownloadsDirectory(
       max_length, FILE_PATH_LITERAL(".txt")));
   base::FilePath path0(GetLongNamePathInDownloadsDirectory(
@@ -652,7 +652,7 @@
   ASSERT_NE(-1, real_max_length);
   const size_t max_length = real_max_length - 11;
 
-  scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1));
+  std::unique_ptr<MockDownloadItem> item(CreateDownloadItem(1));
   base::FilePath path(GetPathInDownloadsDirectory(
       (FILE_PATH_LITERAL("a.") +
           base::FilePath::StringType(max_length, 'b')).c_str()));
diff --git a/chrome/browser/download/download_query.cc b/chrome/browser/download/download_query.cc
index 941d400..4b717c6 100644
--- a/chrome/browser/download/download_query.cc
+++ b/chrome/browser/download/download_query.cc
@@ -8,6 +8,7 @@
 
 #include <algorithm>
 #include <limits>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -17,7 +18,6 @@
 #include "base/i18n/case_conversion.h"
 #include "base/i18n/string_search.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_split.h"
@@ -186,7 +186,7 @@
     std::string (*accessor)(const DownloadItem&)) {
   std::string regex_str;
   if (!GetAs(regex_value, &regex_str)) return DownloadQuery::FilterCallback();
-  scoped_ptr<RE2> pattern(new RE2(regex_str));
+  std::unique_ptr<RE2> pattern(new RE2(regex_str));
   if (!pattern->ok()) return DownloadQuery::FilterCallback();
   return base::Bind(&FindRegex, base::Owned(pattern.release()),
                     base::Bind(accessor));
diff --git a/chrome/browser/download/download_query_unittest.cc b/chrome/browser/download/download_query_unittest.cc
index 37fba0c..e8fcad5 100644
--- a/chrome/browser/download/download_query_unittest.cc
+++ b/chrome/browser/download/download_query_unittest.cc
@@ -2,23 +2,24 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/download/download_query.h"
+
 #include <stddef.h>
 #include <stdint.h>
 
 #include <limits>
+#include <memory>
 #include <string>
 
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "build/build_config.h"
-#include "chrome/browser/download/download_query.h"
 #include "content/public/test/mock_download_item.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -104,13 +105,13 @@
 
 template<> void DownloadQueryTest::AddFilter(
     DownloadQuery::FilterType name, bool cpp_value) {
-  scoped_ptr<base::Value> value(new base::FundamentalValue(cpp_value));
+  std::unique_ptr<base::Value> value(new base::FundamentalValue(cpp_value));
   CHECK(query_.AddFilter(name, *value.get()));
 }
 
 template<> void DownloadQueryTest::AddFilter(
     DownloadQuery::FilterType name, int cpp_value) {
-  scoped_ptr<base::Value> value(new base::FundamentalValue(cpp_value));
+  std::unique_ptr<base::Value> value(new base::FundamentalValue(cpp_value));
   CHECK(query_.AddFilter(name, *value.get()));
 }
 
@@ -131,7 +132,7 @@
 
 template<> void DownloadQueryTest::AddFilter(
     DownloadQuery::FilterType name, std::vector<base::string16> cpp_value) {
-  scoped_ptr<base::ListValue> list(new base::ListValue());
+  std::unique_ptr<base::ListValue> list(new base::ListValue());
   for (std::vector<base::string16>::const_iterator it = cpp_value.begin();
        it != cpp_value.end(); ++it) {
     list->Append(new base::StringValue(*it));
@@ -141,7 +142,7 @@
 
 template<> void DownloadQueryTest::AddFilter(
     DownloadQuery::FilterType name, std::vector<std::string> cpp_value) {
-  scoped_ptr<base::ListValue> list(new base::ListValue());
+  std::unique_ptr<base::ListValue> list(new base::ListValue());
   for (std::vector<std::string>::const_iterator it = cpp_value.begin();
        it != cpp_value.end(); ++it) {
     list->Append(new base::StringValue(*it));
@@ -162,7 +163,7 @@
 }
 
 TEST_F(DownloadQueryTest, DownloadQueryTest_InvalidFilter) {
-  scoped_ptr<base::Value> value(new base::FundamentalValue(0));
+  std::unique_ptr<base::Value> value(new base::FundamentalValue(0));
   EXPECT_FALSE(query()->AddFilter(static_cast<DownloadQuery::FilterType>(
                                       std::numeric_limits<int32_t>::max()),
                                   *value.get()));
diff --git a/chrome/browser/download/download_request_infobar_delegate_android.cc b/chrome/browser/download/download_request_infobar_delegate_android.cc
index dc8265e..93ca380 100644
--- a/chrome/browser/download/download_request_infobar_delegate_android.cc
+++ b/chrome/browser/download/download_request_infobar_delegate_android.cc
@@ -39,7 +39,7 @@
     host->Cancel();
   } else {
     infobar_service->AddInfoBar(infobar_service->CreateConfirmInfoBar(
-        scoped_ptr<ConfirmInfoBarDelegate>(
+        std::unique_ptr<ConfirmInfoBarDelegate>(
             new DownloadRequestInfoBarDelegateAndroid(host))));
   }
 }
diff --git a/chrome/browser/download/download_request_infobar_delegate_android.h b/chrome/browser/download/download_request_infobar_delegate_android.h
index eab8f13..bf2c4446 100644
--- a/chrome/browser/download/download_request_infobar_delegate_android.h
+++ b/chrome/browser/download/download_request_infobar_delegate_android.h
@@ -31,9 +31,9 @@
       base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host);
 
 #if defined(UNIT_TEST)
-  static scoped_ptr<DownloadRequestInfoBarDelegateAndroid> Create(
+  static std::unique_ptr<DownloadRequestInfoBarDelegateAndroid> Create(
       base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host) {
-    return scoped_ptr<DownloadRequestInfoBarDelegateAndroid>(
+    return std::unique_ptr<DownloadRequestInfoBarDelegateAndroid>(
         new DownloadRequestInfoBarDelegateAndroid(host));
   }
 #endif
diff --git a/chrome/browser/download/download_request_infobar_delegate_unittest.cc b/chrome/browser/download/download_request_infobar_delegate_unittest.cc
index 1c1544a0..63df351 100644
--- a/chrome/browser/download/download_request_infobar_delegate_unittest.cc
+++ b/chrome/browser/download/download_request_infobar_delegate_unittest.cc
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/download/download_request_infobar_delegate_android.h"
 #include "chrome/browser/download/download_request_limiter.h"
@@ -28,7 +29,7 @@
 
  private:
   // The actual infobar delegate we're listening to.
-  scoped_ptr<DownloadRequestInfoBarDelegateAndroid> infobar_delegate_;
+  std::unique_ptr<DownloadRequestInfoBarDelegateAndroid> infobar_delegate_;
 
   // True if we have gotten some sort of response.
   bool responded_;
diff --git a/chrome/browser/download/download_request_limiter_unittest.cc b/chrome/browser/download/download_request_limiter_unittest.cc
index ad4cdc1..e5c3e45 100644
--- a/chrome/browser/download/download_request_limiter_unittest.cc
+++ b/chrome/browser/download/download_request_limiter_unittest.cc
@@ -132,7 +132,7 @@
   }
 
  private:
-  scoped_ptr<MockPermissionBubbleFactory> mock_permission_bubble_factory_;
+  std::unique_ptr<MockPermissionBubbleFactory> mock_permission_bubble_factory_;
 };
 #endif
 }  // namespace
@@ -249,7 +249,7 @@
   TestingDelegate testing_delegate_;
 
  private:
-  scoped_ptr<TestingProfile> profile_;
+  std::unique_ptr<TestingProfile> profile_;
 };
 
 TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_Allow) {
@@ -462,7 +462,7 @@
 
 #if defined(OS_ANDROID)
 TEST_F(DownloadRequestLimiterTest, DownloadRequestLimiter_RawWebContents) {
-  scoped_ptr<WebContents> web_contents(CreateTestWebContents());
+  std::unique_ptr<WebContents> web_contents(CreateTestWebContents());
 
   GURL url("http://foo.com/bar");
   web_contents->GetController().LoadURL(
diff --git a/chrome/browser/download/download_resource_throttle.cc b/chrome/browser/download/download_resource_throttle.cc
index 041a44d..6fab62091 100644
--- a/chrome/browser/download/download_resource_throttle.cc
+++ b/chrome/browser/download/download_resource_throttle.cc
@@ -31,7 +31,7 @@
 }
 
 void CanDownload(
-    scoped_ptr<DownloadResourceThrottle::DownloadRequestInfo> info) {
+    std::unique_ptr<DownloadResourceThrottle::DownloadRequestInfo> info) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   info->limiter->CanDownload(info->web_contents_getter, info->url,
                              info->request_method, info->continue_callback);
@@ -39,7 +39,7 @@
 
 #if defined(OS_ANDROID)
 void OnAcquireFileAccessPermissionDone(
-    scoped_ptr<DownloadResourceThrottle::DownloadRequestInfo> info,
+    std::unique_ptr<DownloadResourceThrottle::DownloadRequestInfo> info,
     bool granted) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (granted)
@@ -50,7 +50,7 @@
 #endif
 
 void CanDownloadOnUIThread(
-    scoped_ptr<DownloadResourceThrottle::DownloadRequestInfo> info) {
+    std::unique_ptr<DownloadResourceThrottle::DownloadRequestInfo> info) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 #if defined(OS_ANDROID)
   content::WebContents* contents = info->web_contents_getter.Run();
@@ -93,11 +93,11 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   BrowserThread::PostTask(
       BrowserThread::UI, FROM_HERE,
-      base::Bind(
-          &CanDownloadOnUIThread,
-          base::Passed(scoped_ptr<DownloadRequestInfo>(new DownloadRequestInfo(
-              limiter, web_contents_getter, url, request_method,
-              base::Bind(&OnCanDownloadDecided, AsWeakPtr()))))));
+      base::Bind(&CanDownloadOnUIThread,
+                 base::Passed(std::unique_ptr<DownloadRequestInfo>(
+                     new DownloadRequestInfo(
+                         limiter, web_contents_getter, url, request_method,
+                         base::Bind(&OnCanDownloadDecided, AsWeakPtr()))))));
 }
 
 DownloadResourceThrottle::~DownloadResourceThrottle() {
diff --git a/chrome/browser/download/download_resource_throttle_unittest.cc b/chrome/browser/download/download_resource_throttle_unittest.cc
index 8c320f7..7c771f78 100644
--- a/chrome/browser/download/download_resource_throttle_unittest.cc
+++ b/chrome/browser/download/download_resource_throttle_unittest.cc
@@ -104,7 +104,7 @@
   MockWebContentsDelegate delegate_;
   scoped_refptr<DownloadRequestLimiter> limiter_;
   ::testing::NiceMock<MockResourceController> resource_controller_;
-  scoped_ptr<base::RunLoop> run_loop_;
+  std::unique_ptr<base::RunLoop> run_loop_;
 #if BUILDFLAG(ANDROID_JAVA_UI)
   chrome::android::MockDownloadControllerAndroid download_controller_;
 #endif
diff --git a/chrome/browser/download/download_service.h b/chrome/browser/download/download_service.h
index 552256e8..44a61f9 100644
--- a/chrome/browser/download/download_service.h
+++ b/chrome/browser/download/download_service.h
@@ -5,8 +5,9 @@
 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_SERVICE_H_
 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_SERVICE_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 class ChromeDownloadManagerDelegate;
@@ -62,7 +63,7 @@
   // its DownloadManager.  Takes ownership of |delegate|, and destroys
   // the previous delegate.  For testing.
   virtual void SetDownloadManagerDelegateForTesting(
-      scoped_ptr<ChromeDownloadManagerDelegate> delegate) = 0;
+      std::unique_ptr<ChromeDownloadManagerDelegate> delegate) = 0;
 
   // Returns false if at least one extension has disabled the shelf, true
   // otherwise.
diff --git a/chrome/browser/download/download_service_impl.cc b/chrome/browser/download/download_service_impl.cc
index 89634ea..5d184bda 100644
--- a/chrome/browser/download/download_service_impl.cc
+++ b/chrome/browser/download/download_service_impl.cc
@@ -60,14 +60,14 @@
     history->GetNextDownloadId(
         manager_delegate_->GetDownloadIdReceiverCallback());
     download_history_.reset(new DownloadHistory(
-        manager, scoped_ptr<DownloadHistory::HistoryAdapter>(
+        manager, std::unique_ptr<DownloadHistory::HistoryAdapter>(
                      new DownloadHistory::HistoryAdapter(history))));
   }
 
   // Pass an empty delegate when constructing the DownloadUIController. The
   // default delegate does all the notifications we need.
   download_ui_.reset(new DownloadUIController(
-      manager, scoped_ptr<DownloadUIController::Delegate>()));
+      manager, std::unique_ptr<DownloadUIController::Delegate>()));
 
   // Include this download manager in the set monitored by the
   // global status updater.
@@ -118,7 +118,7 @@
 }
 
 void DownloadServiceImpl::SetDownloadManagerDelegateForTesting(
-    scoped_ptr<ChromeDownloadManagerDelegate> new_delegate) {
+    std::unique_ptr<ChromeDownloadManagerDelegate> new_delegate) {
   manager_delegate_.swap(new_delegate);
   DownloadManager* dm = BrowserContext::GetDownloadManager(profile_);
   dm->SetDelegate(manager_delegate_.get());
diff --git a/chrome/browser/download/download_service_impl.h b/chrome/browser/download/download_service_impl.h
index e41f6aef..1030df5 100644
--- a/chrome/browser/download/download_service_impl.h
+++ b/chrome/browser/download/download_service_impl.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_SERVICE_IMPL_H_
 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_SERVICE_IMPL_H_
 
+#include <memory>
+
 #include "base/callback_forward.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/download/download_service.h"
 #include "components/keyed_service/core/keyed_service.h"
 
@@ -41,7 +42,7 @@
   int NonMaliciousDownloadCount() const override;
   void CancelDownloads() override;
   void SetDownloadManagerDelegateForTesting(
-      scoped_ptr<ChromeDownloadManagerDelegate> delegate) override;
+      std::unique_ptr<ChromeDownloadManagerDelegate> delegate) override;
   bool IsShelfEnabled() override;
 
   // KeyedService
@@ -54,16 +55,16 @@
   // ChromeDownloadManagerDelegate may be the target of callbacks from
   // the history service/DB thread and must be kept alive for those
   // callbacks.
-  scoped_ptr<ChromeDownloadManagerDelegate> manager_delegate_;
+  std::unique_ptr<ChromeDownloadManagerDelegate> manager_delegate_;
 
-  scoped_ptr<DownloadHistory> download_history_;
+  std::unique_ptr<DownloadHistory> download_history_;
 
   // The UI controller is responsible for observing the download manager and
   // notifying the UI of any new downloads. Its lifetime matches that of the
   // associated download manager.
   // Note on destruction order: download_ui_ depends on download_history_ and
   // should be destroyed before the latter.
-  scoped_ptr<DownloadUIController> download_ui_;
+  std::unique_ptr<DownloadUIController> download_ui_;
 
 // On Android, GET downloads are not handled by the DownloadManager.
 // Once we have extensions on android, we probably need the EventRouter
@@ -76,7 +77,8 @@
   // should be a separate EDER for on-record and off-record managers.
   // There does not appear to be a separate ExtensionSystem for on-record and
   // off-record profiles, so ExtensionSystem cannot own the EDER.
-  scoped_ptr<extensions::ExtensionDownloadsEventRouter> extension_event_router_;
+  std::unique_ptr<extensions::ExtensionDownloadsEventRouter>
+      extension_event_router_;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(DownloadServiceImpl);
diff --git a/chrome/browser/download/download_shelf_context_menu.h b/chrome/browser/download/download_shelf_context_menu.h
index 859aead..51b4d188 100644
--- a/chrome/browser/download/download_shelf_context_menu.h
+++ b/chrome/browser/download/download_shelf_context_menu.h
@@ -5,9 +5,10 @@
 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_SHELF_CONTEXT_MENU_H_
 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_SHELF_CONTEXT_MENU_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
 #include "chrome/browser/download/download_commands.h"
@@ -64,16 +65,16 @@
 
   // We show slightly different menus if the download is in progress vs. if the
   // download has finished.
-  scoped_ptr<ui::SimpleMenuModel> in_progress_download_menu_model_;
-  scoped_ptr<ui::SimpleMenuModel> in_progress_download_paused_menu_model_;
-  scoped_ptr<ui::SimpleMenuModel> finished_download_menu_model_;
-  scoped_ptr<ui::SimpleMenuModel> interrupted_download_menu_model_;
-  scoped_ptr<ui::SimpleMenuModel> maybe_malicious_download_menu_model_;
-  scoped_ptr<ui::SimpleMenuModel> malicious_download_menu_model_;
+  std::unique_ptr<ui::SimpleMenuModel> in_progress_download_menu_model_;
+  std::unique_ptr<ui::SimpleMenuModel> in_progress_download_paused_menu_model_;
+  std::unique_ptr<ui::SimpleMenuModel> finished_download_menu_model_;
+  std::unique_ptr<ui::SimpleMenuModel> interrupted_download_menu_model_;
+  std::unique_ptr<ui::SimpleMenuModel> maybe_malicious_download_menu_model_;
+  std::unique_ptr<ui::SimpleMenuModel> malicious_download_menu_model_;
 
   // Information source.
   content::DownloadItem* download_item_;
-  scoped_ptr<DownloadCommands> download_commands_;
+  std::unique_ptr<DownloadCommands> download_commands_;
 
 #if defined(OS_WIN)
   bool is_adobe_pdf_reader_up_to_date_;
diff --git a/chrome/browser/download/download_shelf_unittest.cc b/chrome/browser/download/download_shelf_unittest.cc
index f54faffd..c59e6a0 100644
--- a/chrome/browser/download/download_shelf_unittest.cc
+++ b/chrome/browser/download/download_shelf_unittest.cc
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "chrome/browser/chrome_notification_types.h"
@@ -51,14 +52,14 @@
   }
 
  private:
-  scoped_ptr<content::MockDownloadItem> GetInProgressMockDownload();
+  std::unique_ptr<content::MockDownloadItem> GetInProgressMockDownload();
 
   base::MessageLoopForUI message_loop_;
   content::TestBrowserThread ui_thread_;
-  scoped_ptr<content::MockDownloadItem> download_item_;
-  scoped_ptr<content::MockDownloadManager> download_manager_;
+  std::unique_ptr<content::MockDownloadItem> download_item_;
+  std::unique_ptr<content::MockDownloadManager> download_manager_;
   TestDownloadShelf shelf_;
-  scoped_ptr<TestingProfile> profile_;
+  std::unique_ptr<TestingProfile> profile_;
 };
 
 DownloadShelfTest::DownloadShelfTest()
diff --git a/chrome/browser/download/download_target_determiner.cc b/chrome/browser/download/download_target_determiner.cc
index aeaa328..5e7649da 100644
--- a/chrome/browser/download/download_target_determiner.cc
+++ b/chrome/browser/download/download_target_determiner.cc
@@ -742,7 +742,7 @@
             << " Should prompt:" << should_prompt_
             << " Danger type:" << danger_type_
             << " Danger level:" << danger_level_;
-  scoped_ptr<DownloadTargetInfo> target_info(new DownloadTargetInfo);
+  std::unique_ptr<DownloadTargetInfo> target_info(new DownloadTargetInfo);
 
   target_info->target_path = local_path_;
   target_info->target_disposition =
diff --git a/chrome/browser/download/download_target_determiner.h b/chrome/browser/download/download_target_determiner.h
index 53fc2656..7e6cb877 100644
--- a/chrome/browser/download/download_target_determiner.h
+++ b/chrome/browser/download/download_target_determiner.h
@@ -5,10 +5,11 @@
 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_
 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "build/build_config.h"
@@ -53,7 +54,7 @@
 class DownloadTargetDeterminer
     : public content::DownloadItem::Observer {
  public:
-  typedef base::Callback<void(scoped_ptr<DownloadTargetInfo>)>
+  typedef base::Callback<void(std::unique_ptr<DownloadTargetInfo>)>
       CompletionCallback;
 
   // Start the process of determing the target of |download|.
diff --git a/chrome/browser/download/download_target_determiner_unittest.cc b/chrome/browser/download/download_target_determiner_unittest.cc
index 295929d..8cf1fa35 100644
--- a/chrome/browser/download/download_target_determiner_unittest.cc
+++ b/chrome/browser/download/download_target_determiner_unittest.cc
@@ -233,7 +233,7 @@
 
   // Runs |test_case| with |item|. When the DownloadTargetDeterminer is done,
   // returns the resulting DownloadTargetInfo.
-  scoped_ptr<DownloadTargetInfo> RunDownloadTargetDeterminer(
+  std::unique_ptr<DownloadTargetInfo> RunDownloadTargetDeterminer(
       const base::FilePath& initial_virtual_path,
       content::MockDownloadItem* item);
 
@@ -266,7 +266,7 @@
   }
 
  private:
-  scoped_ptr<DownloadPrefs> download_prefs_;
+  std::unique_ptr<DownloadPrefs> download_prefs_;
   ::testing::NiceMock<MockDownloadTargetDeterminerDelegate> delegate_;
   NullWebContentsDelegate web_contents_delegate_;
   base::ScopedTempDir test_download_dir_;
@@ -377,24 +377,24 @@
     const DownloadTestCase& test_case,
     const base::FilePath& initial_virtual_path,
     content::MockDownloadItem* item) {
-  scoped_ptr<DownloadTargetInfo> target_info =
+  std::unique_ptr<DownloadTargetInfo> target_info =
       RunDownloadTargetDeterminer(initial_virtual_path, item);
   VerifyDownloadTarget(test_case, target_info.get());
 }
 
 void CompletionCallbackWrapper(
     const base::Closure& closure,
-    scoped_ptr<DownloadTargetInfo>* target_info_receiver,
-    scoped_ptr<DownloadTargetInfo> target_info) {
+    std::unique_ptr<DownloadTargetInfo>* target_info_receiver,
+    std::unique_ptr<DownloadTargetInfo> target_info) {
   target_info_receiver->swap(target_info);
   base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, closure);
 }
 
-scoped_ptr<DownloadTargetInfo>
+std::unique_ptr<DownloadTargetInfo>
 DownloadTargetDeterminerTest::RunDownloadTargetDeterminer(
     const base::FilePath& initial_virtual_path,
     content::MockDownloadItem* item) {
-  scoped_ptr<DownloadTargetInfo> target_info;
+  std::unique_ptr<DownloadTargetInfo> target_info;
   base::RunLoop run_loop;
   DownloadTargetDeterminer::Start(
       item, initial_virtual_path, download_prefs_.get(), delegate(),
@@ -410,7 +410,7 @@
     const DownloadTestCase test_cases[],
     size_t test_case_count) {
   for (size_t i = 0; i < test_case_count; ++i) {
-    scoped_ptr<content::MockDownloadItem> item(
+    std::unique_ptr<content::MockDownloadItem> item(
         CreateActiveDownloadItem(i, test_cases[i]));
     SCOPED_TRACE(testing::Message() << "Running test case " << i);
     RunTestCase(test_cases[i], base::FilePath(), item.get());
@@ -893,7 +893,7 @@
   for (size_t i = 0; i < arraysize(kInactiveTestCases); ++i) {
     SCOPED_TRACE(testing::Message() << "Running test case " << i);
     const DownloadTestCase& test_case = kInactiveTestCases[i];
-    scoped_ptr<content::MockDownloadItem> item(
+    std::unique_ptr<content::MockDownloadItem> item(
         CreateActiveDownloadItem(i, test_case));
     EXPECT_CALL(*item.get(), GetState())
         .WillRepeatedly(Return(content::DownloadItem::CANCELLED));
@@ -1248,7 +1248,7 @@
       EXPECT_CRDOWNLOAD};
 
   const DownloadTestCase& test_case = kNotifyExtensionsTestCase;
-  scoped_ptr<content::MockDownloadItem> item(
+  std::unique_ptr<content::MockDownloadItem> item(
       CreateActiveDownloadItem(0, test_case));
   base::FilePath overridden_path(FILE_PATH_LITERAL("overridden/foo.txt"));
   base::FilePath full_overridden_path =
@@ -1296,7 +1296,7 @@
       EXPECT_CRDOWNLOAD};
 
   const DownloadTestCase& test_case = kNotifyExtensionsTestCase;
-  scoped_ptr<content::MockDownloadItem> item(
+  std::unique_ptr<content::MockDownloadItem> item(
       CreateActiveDownloadItem(0, test_case));
   base::FilePath overridden_path(FILE_PATH_LITERAL("overridden/foo.txt"));
   base::FilePath full_overridden_path =
@@ -1338,7 +1338,7 @@
       EXPECT_CRDOWNLOAD};
 
   const DownloadTestCase& test_case = kInitialPathTestCase;
-  scoped_ptr<content::MockDownloadItem> item(
+  std::unique_ptr<content::MockDownloadItem> item(
       CreateActiveDownloadItem(1, test_case));
   EXPECT_CALL(*item, GetLastReason())
       .WillRepeatedly(Return(
@@ -1408,7 +1408,7 @@
   for (size_t i = 0; i < arraysize(kResumedTestCases); ++i) {
     SCOPED_TRACE(testing::Message() << "Running test case " << i);
     const DownloadTestCase& test_case = kResumedTestCases[i];
-    scoped_ptr<content::MockDownloadItem> item(
+    std::unique_ptr<content::MockDownloadItem> item(
         CreateActiveDownloadItem(i, test_case));
     base::FilePath expected_path =
         GetPathInDownloadDir(test_case.expected_local_path);
@@ -1451,7 +1451,7 @@
   const DownloadTestCase& test_case = kResumedForcedDownload;
   base::FilePath expected_path =
       GetPathInDownloadDir(test_case.expected_local_path);
-  scoped_ptr<content::MockDownloadItem> item(
+  std::unique_ptr<content::MockDownloadItem> item(
       CreateActiveDownloadItem(0, test_case));
   ON_CALL(*item.get(), GetLastReason())
       .WillByDefault(Return(content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE));
@@ -1536,7 +1536,7 @@
     const DownloadTestCase& test_case = kResumedTestCases[i];
     base::FilePath expected_path =
         GetPathInDownloadDir(test_case.expected_local_path);
-    scoped_ptr<content::MockDownloadItem> item(
+    std::unique_ptr<content::MockDownloadItem> item(
         CreateActiveDownloadItem(i, test_case));
     ON_CALL(*item.get(), GetLastReason())
         .WillByDefault(Return(
@@ -1649,7 +1649,7 @@
   for (size_t i = 0; i < arraysize(kIntermediateNameTestCases); ++i) {
     SCOPED_TRACE(testing::Message() << "Running test case " << i);
     const IntermediateNameTestCase& test_case = kIntermediateNameTestCases[i];
-    scoped_ptr<content::MockDownloadItem> item(
+    std::unique_ptr<content::MockDownloadItem> item(
         CreateActiveDownloadItem(i, test_case.general));
 
     ON_CALL(*item.get(), GetLastReason())
@@ -1661,7 +1661,7 @@
     ON_CALL(*item.get(), GetDangerType())
         .WillByDefault(Return(test_case.general.expected_danger_type));
 
-    scoped_ptr<DownloadTargetInfo> target_info =
+    std::unique_ptr<DownloadTargetInfo> target_info =
         RunDownloadTargetDeterminer(GetPathInDownloadDir(kInitialPath),
                                     item.get());
     VerifyDownloadTarget(test_case.general, target_info.get());
@@ -1758,9 +1758,9 @@
   for (size_t i = 0; i < arraysize(kMIMETypeTestCases); ++i) {
     SCOPED_TRACE(testing::Message() << "Running test case " << i);
     const MIMETypeTestCase& test_case = kMIMETypeTestCases[i];
-    scoped_ptr<content::MockDownloadItem> item(
+    std::unique_ptr<content::MockDownloadItem> item(
         CreateActiveDownloadItem(i, test_case.general));
-    scoped_ptr<DownloadTargetInfo> target_info =
+    std::unique_ptr<DownloadTargetInfo> target_info =
         RunDownloadTargetDeterminer(GetPathInDownloadDir(kInitialPath),
                                     item.get());
     EXPECT_EQ(test_case.expected_mime_type, target_info->mime_type);
@@ -1918,11 +1918,10 @@
       GetPathInDownloadDir(FILE_PATH_LITERAL("foo.fakeext")), _))
       .WillByDefault(WithArg<1>(
           ScheduleCallback(kTestMIMEType)));
-  scoped_ptr<content::MockDownloadItem> item(
+  std::unique_ptr<content::MockDownloadItem> item(
       CreateActiveDownloadItem(1, kSecureHandlingTestCase));
-  scoped_ptr<DownloadTargetInfo> target_info =
-      RunDownloadTargetDeterminer(GetPathInDownloadDir(kInitialPath),
-                                  item.get());
+  std::unique_ptr<DownloadTargetInfo> target_info = RunDownloadTargetDeterminer(
+      GetPathInDownloadDir(kInitialPath), item.get());
   EXPECT_FALSE(target_info->is_filetype_handled_safely);
 
   // Register a PPAPI plugin. This should count as handling the filetype
@@ -1988,11 +1987,10 @@
       GetPathInDownloadDir(FILE_PATH_LITERAL("foo.fakeext")), _))
       .WillByDefault(WithArg<1>(
           ScheduleCallback(kTestMIMEType)));
-  scoped_ptr<content::MockDownloadItem> item(
+  std::unique_ptr<content::MockDownloadItem> item(
       CreateActiveDownloadItem(1, kSecureHandlingTestCase));
-  scoped_ptr<DownloadTargetInfo> target_info =
-      RunDownloadTargetDeterminer(GetPathInDownloadDir(kInitialPath),
-                                  item.get());
+  std::unique_ptr<DownloadTargetInfo> target_info = RunDownloadTargetDeterminer(
+      GetPathInDownloadDir(kInitialPath), item.get());
   EXPECT_FALSE(target_info->is_filetype_handled_safely);
 
   // Register a BrowserPlugin. This should count as handling the filetype
diff --git a/chrome/browser/download/download_test_file_activity_observer.cc b/chrome/browser/download/download_test_file_activity_observer.cc
index 7a9a721b5..95602c9 100644
--- a/chrome/browser/download/download_test_file_activity_observer.cc
+++ b/chrome/browser/download/download_test_file_activity_observer.cc
@@ -73,7 +73,7 @@
 
 DownloadTestFileActivityObserver::DownloadTestFileActivityObserver(
     Profile* profile) {
-  scoped_ptr<MockDownloadManagerDelegate> mock_delegate(
+  std::unique_ptr<MockDownloadManagerDelegate> mock_delegate(
       new MockDownloadManagerDelegate(profile));
   test_delegate_ = mock_delegate->GetWeakPtr();
   DownloadServiceFactory::GetForBrowserContext(profile)
diff --git a/chrome/browser/download/download_ui_controller.cc b/chrome/browser/download/download_ui_controller.cc
index 5fee080..6608261 100644
--- a/chrome/browser/download/download_ui_controller.cc
+++ b/chrome/browser/download/download_ui_controller.cc
@@ -116,7 +116,7 @@
 }
 
 DownloadUIController::DownloadUIController(content::DownloadManager* manager,
-                                           scoped_ptr<Delegate> delegate)
+                                           std::unique_ptr<Delegate> delegate)
     : download_notifier_(manager, this), delegate_(std::move(delegate)) {
 #if defined(OS_ANDROID)
   if (!delegate_)
diff --git a/chrome/browser/download/download_ui_controller.h b/chrome/browser/download/download_ui_controller.h
index e0f58a44..10947b36 100644
--- a/chrome/browser/download/download_ui_controller.h
+++ b/chrome/browser/download/download_ui_controller.h
@@ -5,10 +5,10 @@
 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UI_CONTROLLER_H_
 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UI_CONTROLLER_H_
 
+#include <memory>
 #include <set>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "chrome/browser/download/all_download_item_notifier.h"
 
 // This class handles the task of observing a single DownloadManager for
@@ -35,7 +35,7 @@
   //
   // Currently explicit delegates are only used for testing.
   DownloadUIController(content::DownloadManager* manager,
-                       scoped_ptr<Delegate> delegate);
+                       std::unique_ptr<Delegate> delegate);
 
   ~DownloadUIController() override;
 
@@ -47,7 +47,7 @@
 
   AllDownloadItemNotifier download_notifier_;
 
-  scoped_ptr<Delegate> delegate_;
+  std::unique_ptr<Delegate> delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(DownloadUIController);
 };
diff --git a/chrome/browser/download/download_ui_controller_unittest.cc b/chrome/browser/download/download_ui_controller_unittest.cc
index f1be1c7..f5452ce 100644
--- a/chrome/browser/download/download_ui_controller_unittest.cc
+++ b/chrome/browser/download/download_ui_controller_unittest.cc
@@ -4,13 +4,14 @@
 
 #include "chrome/browser/download/download_ui_controller.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "chrome/browser/download/download_history.h"
@@ -64,13 +65,13 @@
   explicit TestDownloadService(Profile* profile);
   ~TestDownloadService() override;
 
-  void set_download_history(scoped_ptr<DownloadHistory> download_history) {
+  void set_download_history(std::unique_ptr<DownloadHistory> download_history) {
     download_history_.swap(download_history);
   }
   DownloadHistory* GetDownloadHistory() override;
 
  private:
-  scoped_ptr<DownloadHistory> download_history_;
+  std::unique_ptr<DownloadHistory> download_history_;
 };
 
 TestDownloadService::TestDownloadService(Profile* profile)
@@ -95,7 +96,7 @@
 
   // Returns a TestDelegate. Invoking OnNewDownloadReady on the returned
   // delegate results in the DownloadItem* being stored in |notified_item_|.
-  scoped_ptr<DownloadUIController::Delegate> GetTestDelegate();
+  std::unique_ptr<DownloadUIController::Delegate> GetTestDelegate();
 
   MockDownloadManager* manager() { return manager_.get(); }
 
@@ -120,7 +121,7 @@
     return download_history_manager_observer_;
   }
 
-  scoped_ptr<MockDownloadItem> CreateMockInProgressDownload();
+  std::unique_ptr<MockDownloadItem> CreateMockInProgressDownload();
 
  private:
   // A private history adapter that stores the DownloadQueryCallback when
@@ -138,10 +139,10 @@
   };
 
   // Constructs and returns a TestDownloadService.
-  static scoped_ptr<KeyedService> TestingDownloadServiceFactory(
+  static std::unique_ptr<KeyedService> TestingDownloadServiceFactory(
       content::BrowserContext* browser_context);
 
-  scoped_ptr<MockDownloadManager> manager_;
+  std::unique_ptr<MockDownloadManager> manager_;
   content::DownloadManager::Observer* download_history_manager_observer_;
   content::DownloadManager::Observer* manager_observer_;
   content::DownloadItem* notified_item_;
@@ -151,10 +152,10 @@
 };
 
 // static
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 DownloadUIControllerTest::TestingDownloadServiceFactory(
     content::BrowserContext* browser_context) {
-  return make_scoped_ptr(
+  return base::WrapUnique(
       new TestDownloadService(Profile::FromBrowserContext(browser_context)));
 }
 
@@ -179,9 +180,9 @@
           static_cast<content::DownloadManager::Observer*>(NULL)));
   EXPECT_CALL(*manager_, GetAllDownloads(_)).Times(AnyNumber());
 
-  scoped_ptr<HistoryAdapter> history_adapter(new HistoryAdapter);
+  std::unique_ptr<HistoryAdapter> history_adapter(new HistoryAdapter);
   history_adapter_ = history_adapter.get();
-  scoped_ptr<DownloadHistory> download_history(
+  std::unique_ptr<DownloadHistory> download_history(
       new DownloadHistory(manager_.get(), std::move(history_adapter)));
   ASSERT_TRUE(download_history_manager_observer_);
 
@@ -199,9 +200,9 @@
   download_service->set_download_history(std::move(download_history));
 }
 
-scoped_ptr<MockDownloadItem>
+std::unique_ptr<MockDownloadItem>
 DownloadUIControllerTest::CreateMockInProgressDownload() {
-  scoped_ptr<MockDownloadItem> item(
+  std::unique_ptr<MockDownloadItem> item(
       new testing::StrictMock<MockDownloadItem>());
   EXPECT_CALL(*item, GetBrowserContext())
       .WillRepeatedly(Return(browser_context()));
@@ -241,9 +242,9 @@
   return item;
 }
 
-scoped_ptr<DownloadUIController::Delegate>
+std::unique_ptr<DownloadUIController::Delegate>
 DownloadUIControllerTest::GetTestDelegate() {
-  scoped_ptr<DownloadUIController::Delegate> delegate(
+  std::unique_ptr<DownloadUIController::Delegate> delegate(
       new TestDelegate(notified_item_receiver_factory_.GetWeakPtr()));
   return delegate;
 }
@@ -251,7 +252,7 @@
 // New downloads should be presented to the UI when GetTargetFilePath() returns
 // a non-empty path.  I.e. once the download target has been determined.
 TEST_F(DownloadUIControllerTest, DownloadUIController_NotifyBasic) {
-  scoped_ptr<MockDownloadItem> item(CreateMockInProgressDownload());
+  std::unique_ptr<MockDownloadItem> item(CreateMockInProgressDownload());
   DownloadUIController controller(manager(), GetTestDelegate());
   EXPECT_CALL(*item, GetTargetFilePath())
       .WillOnce(ReturnRefOfCopy(base::FilePath()));
@@ -273,7 +274,7 @@
 
 // A download that's created in an interrupted state should also be displayed.
 TEST_F(DownloadUIControllerTest, DownloadUIController_NotifyBasic_Interrupted) {
-  scoped_ptr<MockDownloadItem> item = CreateMockInProgressDownload();
+  std::unique_ptr<MockDownloadItem> item = CreateMockInProgressDownload();
   DownloadUIController controller(manager(), GetTestDelegate());
   EXPECT_CALL(*item, GetState())
       .WillRepeatedly(Return(content::DownloadItem::INTERRUPTED));
@@ -287,7 +288,7 @@
 // state should be displayed in the UI immediately without requiring an
 // additional OnDownloadUpdated() notification.
 TEST_F(DownloadUIControllerTest, DownloadUIController_NotifyReadyOnCreate) {
-  scoped_ptr<MockDownloadItem> item(CreateMockInProgressDownload());
+  std::unique_ptr<MockDownloadItem> item(CreateMockInProgressDownload());
   DownloadUIController controller(manager(), GetTestDelegate());
 
   ASSERT_TRUE(manager_observer());
@@ -309,14 +310,14 @@
   // from history.
   ASSERT_TRUE(download_history_manager_observer());
 
-  scoped_ptr<std::vector<history::DownloadRow> > history_downloads;
+  std::unique_ptr<std::vector<history::DownloadRow>> history_downloads;
   history_downloads.reset(new std::vector<history::DownloadRow>());
   history_downloads->push_back(history::DownloadRow());
   history_downloads->front().id = 1;
 
   std::vector<GURL> url_chain;
   GURL url;
-  scoped_ptr<MockDownloadItem> item = CreateMockInProgressDownload();
+  std::unique_ptr<MockDownloadItem> item = CreateMockInProgressDownload();
 
   EXPECT_CALL(*item, GetOriginalMimeType());
   EXPECT_CALL(*manager(), CheckForHistoryFilesRemoval());
diff --git a/chrome/browser/download/notification/download_item_notification.cc b/chrome/browser/download/notification/download_item_notification.cc
index 975ec2a..7907f1b 100644
--- a/chrome/browser/download/notification/download_item_notification.cc
+++ b/chrome/browser/download/notification/download_item_notification.cc
@@ -412,7 +412,8 @@
   UpdateNotificationIcon();
 
   std::vector<message_center::ButtonInfo> notification_actions;
-  scoped_ptr<std::vector<DownloadCommands::Command>> actions(GetExtraActions());
+  std::unique_ptr<std::vector<DownloadCommands::Command>> actions(
+      GetExtraActions());
 
   button_actions_.reset(new std::vector<DownloadCommands::Command>);
   for (auto it = actions->begin(); it != actions->end(); it++) {
@@ -627,9 +628,9 @@
   UpdateNotificationData(UPDATE);
 }
 
-scoped_ptr<std::vector<DownloadCommands::Command>>
+std::unique_ptr<std::vector<DownloadCommands::Command>>
 DownloadItemNotification::GetExtraActions() const {
-  scoped_ptr<std::vector<DownloadCommands::Command>> actions(
+  std::unique_ptr<std::vector<DownloadCommands::Command>> actions(
       new std::vector<DownloadCommands::Command>());
 
   if (item_->IsDangerous()) {
diff --git a/chrome/browser/download/notification/download_item_notification.h b/chrome/browser/download/notification/download_item_notification.h
index 760686d..f47e131c 100644
--- a/chrome/browser/download/notification/download_item_notification.h
+++ b/chrome/browser/download/notification/download_item_notification.h
@@ -101,7 +101,8 @@
   Profile* profile() const;
 
   // Returns the list of possible extra (all except the default) actions.
-  scoped_ptr<std::vector<DownloadCommands::Command>> GetExtraActions() const;
+  std::unique_ptr<std::vector<DownloadCommands::Command>> GetExtraActions()
+      const;
 
   // Flag to show the notification on next update. If true, the notification
   // goes visible. The initial value is true so it gets shown on initial update.
@@ -116,9 +117,9 @@
   content::DownloadItem::DownloadState previous_download_state_ =
       content::DownloadItem::MAX_DOWNLOAD_STATE;  // As uninitialized state
   bool previous_dangerous_state_ = false;
-  scoped_ptr<Notification> notification_;
+  std::unique_ptr<Notification> notification_;
   content::DownloadItem* item_;
-  scoped_ptr<std::vector<DownloadCommands::Command>> button_actions_;
+  std::unique_ptr<std::vector<DownloadCommands::Command>> button_actions_;
 
   // Status of the preview image decode.
   ImageDecodeStatus image_decode_status_ = NOT_STARTED;
diff --git a/chrome/browser/download/notification/download_item_notification_unittest.cc b/chrome/browser/download/notification/download_item_notification_unittest.cc
index 211349f4..16c5235 100644
--- a/chrome/browser/download/notification/download_item_notification_unittest.cc
+++ b/chrome/browser/download/notification/download_item_notification_unittest.cc
@@ -74,7 +74,8 @@
     ASSERT_TRUE(profile_manager_->SetUp());
     profile_ = profile_manager_->CreateTestingProfile("test-user");
 
-    scoped_ptr<NotificationUIManager> ui_manager(new StubNotificationUIManager);
+    std::unique_ptr<NotificationUIManager> ui_manager(
+        new StubNotificationUIManager);
     TestingBrowserProcess::GetGlobal()->SetNotificationUIManager(
         std::move(ui_manager));
 
@@ -170,13 +171,13 @@
   base::MessageLoopForUI message_loop_;
   content::TestBrowserThread ui_thread_;
 
-  scoped_ptr<TestingProfileManager> profile_manager_;
+  std::unique_ptr<TestingProfileManager> profile_manager_;
   Profile* profile_;
 
-  scoped_ptr<NiceMock<content::MockDownloadItem>> download_item_;
-  scoped_ptr<DownloadNotificationManagerForProfile>
+  std::unique_ptr<NiceMock<content::MockDownloadItem>> download_item_;
+  std::unique_ptr<DownloadNotificationManagerForProfile>
       download_notification_manager_;
-  scoped_ptr<MockMessageCenter> message_center_;
+  std::unique_ptr<MockMessageCenter> message_center_;
   DownloadItemNotification* download_item_notification_;
 };
 
diff --git a/chrome/browser/download/notification/download_notification_browsertest.cc b/chrome/browser/download/notification/download_notification_browsertest.cc
index fe7205c..01feac9 100644
--- a/chrome/browser/download/notification/download_notification_browsertest.cc
+++ b/chrome/browser/download/notification/download_notification_browsertest.cc
@@ -105,7 +105,7 @@
   }
 
  private:
-  scoped_ptr<base::RunLoop> run_loop_;
+  std::unique_ptr<base::RunLoop> run_loop_;
 
   DISALLOW_COPY_AND_ASSIGN(MessageCenterChangeObserver);
 };
@@ -334,7 +334,7 @@
   void SetUpOnMainThread() override {
     Profile* profile = browser()->profile();
 
-    scoped_ptr<TestChromeDownloadManagerDelegate> test_delegate;
+    std::unique_ptr<TestChromeDownloadManagerDelegate> test_delegate;
     test_delegate.reset(new TestChromeDownloadManagerDelegate(profile));
     test_delegate->GetDownloadIdReceiverCallback().Run(
         content::DownloadItem::kInvalidId + 1);
@@ -356,7 +356,7 @@
 
     ASSERT_TRUE(CreateAndSetDownloadsDirectory(incognito_browser_));
 
-    scoped_ptr<TestChromeDownloadManagerDelegate> incognito_test_delegate;
+    std::unique_ptr<TestChromeDownloadManagerDelegate> incognito_test_delegate;
     incognito_test_delegate.reset(
         new TestChromeDownloadManagerDelegate(incognito_profile));
     DownloadServiceFactory::GetForBrowserContext(incognito_profile)
diff --git a/chrome/browser/download/save_package_file_picker.cc b/chrome/browser/download/save_package_file_picker.cc
index a5b0124..8f98d346 100644
--- a/chrome/browser/download/save_package_file_picker.cc
+++ b/chrome/browser/download/save_package_file_picker.cc
@@ -236,7 +236,7 @@
 
 void SavePackageFilePicker::FileSelected(
     const base::FilePath& path, int index, void* unused_params) {
-  scoped_ptr<SavePackageFilePicker> delete_this(this);
+  std::unique_ptr<SavePackageFilePicker> delete_this(this);
   RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_);
   if (!process)
     return;
diff --git a/chrome/browser/download/save_page_browsertest.cc b/chrome/browser/download/save_page_browsertest.cc
index daa8e12..0c497e9 100644
--- a/chrome/browser/download/save_page_browsertest.cc
+++ b/chrome/browser/download/save_page_browsertest.cc
@@ -501,7 +501,7 @@
 #endif
 IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, MAYBE_SaveHTMLOnlyTabDestroy) {
   GURL url = NavigateToMockURL("a");
-  scoped_ptr<DelayingDownloadManagerDelegate> delaying_delegate(
+  std::unique_ptr<DelayingDownloadManagerDelegate> delaying_delegate(
       new DelayingDownloadManagerDelegate(browser()->profile()));
   delaying_delegate->GetDownloadIdReceiverCallback().Run(
       content::DownloadItem::kInvalidId + 1);
diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
index e19393b4..d871f09 100644
--- a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
+++ b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
@@ -590,7 +590,7 @@
   }
 
   std::string base_64;
-  base::Base64Encode(std::string(data->front_as<char>(), data->size()),
+  base::Base64Encode(base::StringPiece(data->front_as<char>(), data->size()),
                      &base_64);
   const char kDataUrlPrefix[] = "data:image/png;base64,";
   return GURL(kDataUrlPrefix + base_64).spec();
diff --git a/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc b/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
index 201e09a..168de50 100644
--- a/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
+++ b/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
@@ -81,13 +81,7 @@
   }
 };
 
-// http://crbug.com/601433
-#if defined(OS_CHROMEOS)
-#define MAYBE_ShowFeedback DISABLED_ShowFeedback
-#else
-#define MAYBE_ShowFeedback ShowFeedback
-#endif
-IN_PROC_BROWSER_TEST_F(FeedbackTest, MAYBE_ShowFeedback) {
+IN_PROC_BROWSER_TEST_F(FeedbackTest, ShowFeedback) {
   WaitForExtensionViewsToLoad();
 
   ASSERT_TRUE(IsFeedbackAppAvailable());
@@ -95,13 +89,7 @@
   VerifyFeedbackAppLaunch();
 }
 
-// http://crbug.com/601306
-#if defined(OS_CHROMEOS)
-#define MAYBE_ShowLoginFeedback DISABLED_ShowLoginFeedback
-#else
-#define MAYBE_ShowLoginFeedback ShowLoginFeedback
-#endif
-IN_PROC_BROWSER_TEST_F(FeedbackTest, MAYBE_ShowLoginFeedback) {
+IN_PROC_BROWSER_TEST_F(FeedbackTest, ShowLoginFeedback) {
   WaitForExtensionViewsToLoad();
 
   ASSERT_TRUE(IsFeedbackAppAvailable());
diff --git a/chrome/browser/extensions/api/networking_private/crypto_verify_impl.cc b/chrome/browser/extensions/api/networking_private/crypto_verify_impl.cc
index 812f7769..3a08745 100644
--- a/chrome/browser/extensions/api/networking_private/crypto_verify_impl.cc
+++ b/chrome/browser/extensions/api/networking_private/crypto_verify_impl.cc
@@ -82,8 +82,10 @@
   }
 
   std::string base64_encoded_ciphertext;
-  base::Base64Encode(std::string(ciphertext.begin(), ciphertext.end()),
-                     &base64_encoded_ciphertext);
+  base::Base64Encode(
+      base::StringPiece(reinterpret_cast<const char*>(ciphertext.data()),
+                        ciphertext.size()),
+      &base64_encoded_ciphertext);
   return base64_encoded_ciphertext;
 }
 
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_mac.cc b/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_mac.cc
index a473703..d997fd7 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_mac.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_mac.cc
@@ -66,8 +66,10 @@
   }
 
   std::string base64_encoded_ciphertext;
-  base::Base64Encode(std::string(ciphertext.begin(), ciphertext.end()),
-                     &base64_encoded_ciphertext);
+  base::Base64Encode(
+      base::StringPiece(reinterpret_cast<const char*>(ciphertext.data()),
+                        ciphertext.size()),
+      &base64_encoded_ciphertext);
   callback.Run(base64_encoded_ciphertext, "");
 }
 
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_win.cc b/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_win.cc
index 932c58d..891cd44 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_win.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_credentials_getter_win.cc
@@ -9,6 +9,7 @@
 #include "base/base64.h"
 #include "base/bind.h"
 #include "base/macros.h"
+#include "base/strings/string_piece.h"
 #include "base/thread_task_runner_handle.h"
 #include "base/threading/sequenced_worker_pool.h"
 #include "chrome/common/extensions/api/networking_private/networking_private_crypto.h"
@@ -89,8 +90,10 @@
     }
 
     std::string base64_encoded_key_data;
-    base::Base64Encode(std::string(ciphertext.begin(), ciphertext.end()),
-                       &base64_encoded_key_data);
+    base::Base64Encode(
+        base::StringPiece(reinterpret_cast<const char*>(ciphertext.data()),
+                          ciphertext.size()),
+        &base64_encoded_key_data);
     callback_.Run(base64_encoded_key_data, "");
   } else {
     callback_.Run("", "Get Credentials Failed");
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index ad9a1e539..ab647b1 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -1667,6 +1667,10 @@
   return true;
 }
 
+bool TabsCaptureVisibleTabFunction::ClientAllowsTransparency() {
+  return false;
+}
+
 WebContents* TabsCaptureVisibleTabFunction::GetWebContentsForID(int window_id) {
   Browser* browser = NULL;
   if (!GetBrowserFromWindowID(&chrome_details_, window_id, &browser))
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.h b/chrome/browser/extensions/api/tabs/tabs_api.h
index e0a5f241..f0695eb 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.h
+++ b/chrome/browser/extensions/api/tabs/tabs_api.h
@@ -217,6 +217,7 @@
 
   // extensions::WebContentsCaptureClient:
   bool IsScreenshotEnabled() override;
+  bool ClientAllowsTransparency() override;
   void OnCaptureSuccess(const SkBitmap& bitmap) override;
   void OnCaptureFailure(FailureReason reason) override;
 
diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
index 5ee161f..0b4d32b4 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
@@ -193,7 +193,8 @@
         &enable_referrers_, NULL, NULL, NULL,
         profile_.GetTestingPrefService());
     network_delegate_.reset(
-        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_));
+        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_,
+                                  metrics::UpdateUsagePrefCallbackType()));
     network_delegate_->set_profile(&profile_);
     network_delegate_->set_cookie_settings(
         CookieSettingsFactory::GetForProfile(&profile_).get());
@@ -871,7 +872,8 @@
         &enable_referrers_, NULL, NULL, NULL,
         profile_.GetTestingPrefService());
     network_delegate_.reset(
-        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_));
+        new ChromeNetworkDelegate(event_router_.get(), &enable_referrers_,
+                                  metrics::UpdateUsagePrefCallbackType()));
     network_delegate_->set_profile(&profile_);
     network_delegate_->set_cookie_settings(
         CookieSettingsFactory::GetForProfile(&profile_).get());
diff --git a/chrome/browser/extensions/convert_user_script.cc b/chrome/browser/extensions/convert_user_script.cc
index bbd787b..42133ab 100644
--- a/chrome/browser/extensions/convert_user_script.cc
+++ b/chrome/browser/extensions/convert_user_script.cc
@@ -82,7 +82,7 @@
   char raw[crypto::kSHA256Length] = {0};
   std::string key;
   crypto::SHA256HashString(script_name, raw, crypto::kSHA256Length);
-  base::Base64Encode(std::string(raw, crypto::kSHA256Length), &key);
+  base::Base64Encode(base::StringPiece(raw, crypto::kSHA256Length), &key);
 
   // The script may not have a name field, but we need one for an extension. If
   // it is missing, use the filename of the original URL.
diff --git a/chrome/browser/extensions/convert_web_app.cc b/chrome/browser/extensions/convert_web_app.cc
index f12ab4c0..e920b45 100644
--- a/chrome/browser/extensions/convert_web_app.cc
+++ b/chrome/browser/extensions/convert_web_app.cc
@@ -56,7 +56,7 @@
   std::string key;
   crypto::SHA256HashString(app_url.spec().c_str(), raw,
                            crypto::kSHA256Length);
-  base::Base64Encode(std::string(raw, crypto::kSHA256Length), &key);
+  base::Base64Encode(base::StringPiece(raw, crypto::kSHA256Length), &key);
   return key;
 }
 
diff --git a/chrome/browser/extensions/display_info_provider_chromeos.cc b/chrome/browser/extensions/display_info_provider_chromeos.cc
index 769baa2..ff18c3a 100644
--- a/chrome/browser/extensions/display_info_provider_chromeos.cc
+++ b/chrome/browser/extensions/display_info_provider_chromeos.cc
@@ -11,6 +11,7 @@
 #include "ash/shell.h"
 #include "base/strings/string_number_conversions.h"
 #include "extensions/common/api/system_display.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/rect.h"
@@ -66,7 +67,7 @@
          static_cast<int64_t>(point.y()) * static_cast<int64_t>(vector.x());
 }
 
-// Created ash::DisplayPlacement value for |rectangle| compared to the
+// Created display::DisplayPlacement value for |rectangle| compared to the
 // |reference|
 // rectangle.
 // The layout consists of two values:
@@ -97,7 +98,7 @@
 //
 // The rectangle shares an egde with the reference's bottom edge, but it's
 // center point is in the left area.
-ash::DisplayPlacement CreatePlacementForRectangles(
+display::DisplayPlacement CreatePlacementForRectangles(
     const gfx::Rect& reference,
     const gfx::Rect& rectangle) {
   // Translate coordinate system so origin is in the reference's top left point
@@ -120,13 +121,13 @@
 
   bool is_bottom_right = PointIsOverRadiusVector(center, up_diag);
 
-  ash::DisplayPlacement::Position position;
+  display::DisplayPlacement::Position position;
   if (is_top_right) {
-    position = is_bottom_right ? ash::DisplayPlacement::RIGHT
-                               : ash::DisplayPlacement::TOP;
+    position = is_bottom_right ? display::DisplayPlacement::RIGHT
+                               : display::DisplayPlacement::TOP;
   } else {
-    position = is_bottom_right ? ash::DisplayPlacement::BOTTOM
-                               : ash::DisplayPlacement::LEFT;
+    position = is_bottom_right ? display::DisplayPlacement::BOTTOM
+                               : display::DisplayPlacement::LEFT;
   }
 
   // If the rectangle with the calculated position would not have common side
@@ -135,25 +136,25 @@
   if (is_top_right == is_bottom_right) {
     if (rectangle.y() > reference.y() + reference.height()) {
       // The rectangle is left or right, but completely under the reference.
-      position = ash::DisplayPlacement::BOTTOM;
+      position = display::DisplayPlacement::BOTTOM;
     } else if (rectangle.y() + rectangle.height() < reference.y()) {
       // The rectangle is left or right, but completely over the reference.
-      position = ash::DisplayPlacement::TOP;
+      position = display::DisplayPlacement::TOP;
     }
   } else {
     if (rectangle.x() > reference.x() + reference.width()) {
       // The rectangle is over or under, but completely right of the reference.
-      position = ash::DisplayPlacement::RIGHT;
+      position = display::DisplayPlacement::RIGHT;
     } else if (rectangle.x() + rectangle.width() < reference.x()) {
       // The rectangle is over or under, but completely left of the reference.
-      position = ash::DisplayPlacement::LEFT;
+      position = display::DisplayPlacement::LEFT;
     }
   }
-  int offset = (position == ash::DisplayPlacement::LEFT ||
-                position == ash::DisplayPlacement::RIGHT)
+  int offset = (position == display::DisplayPlacement::LEFT ||
+                position == display::DisplayPlacement::RIGHT)
                    ? rectangle.y()
                    : rectangle.x();
-  return ash::DisplayPlacement(position, offset);
+  return display::DisplayPlacement(position, offset);
 }
 
 // Updates the display layout for the target display in reference to the primary
@@ -162,12 +163,12 @@
                          int64_t primary_display_id,
                          const gfx::Rect& target_display_bounds,
                          int64_t target_display_id) {
-  ash::DisplayPlacement placement(CreatePlacementForRectangles(
+  display::DisplayPlacement placement(CreatePlacementForRectangles(
       primary_display_bounds, target_display_bounds));
   placement.display_id = target_display_id;
   placement.parent_display_id = primary_display_id;
 
-  scoped_ptr<ash::DisplayLayout> layout(new ash::DisplayLayout);
+  scoped_ptr<display::DisplayLayout> layout(new display::DisplayLayout);
   layout->placement_list.push_back(placement);
   layout->primary_id = primary_display_id;
 
diff --git a/chrome/browser/extensions/display_info_provider_chromeos_unittest.cc b/chrome/browser/extensions/display_info_provider_chromeos_unittest.cc
index 3e4e5c7..44dd3d5 100644
--- a/chrome/browser/extensions/display_info_provider_chromeos_unittest.cc
+++ b/chrome/browser/extensions/display_info_provider_chromeos_unittest.cc
@@ -19,6 +19,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "extensions/common/api/system_display.h"
+#include "ui/display/manager/display_layout.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/geometry/rect.h"
 
@@ -401,7 +402,7 @@
 TEST_F(DisplayInfoProviderChromeosTest, GetBounds) {
   UpdateDisplay("600x600, 400x520");
   GetDisplayManager()->SetLayoutForCurrentDisplays(
-      ash::test::CreateDisplayLayout(ash::DisplayPlacement::LEFT, -40));
+      ash::test::CreateDisplayLayout(display::DisplayPlacement::LEFT, -40));
 
   DisplayInfo result = DisplayInfoProvider::Get()->GetAllDisplaysInfo();
 
@@ -411,7 +412,7 @@
             SystemInfoDisplayBoundsToString(result[1].bounds));
 
   GetDisplayManager()->SetLayoutForCurrentDisplays(
-      ash::test::CreateDisplayLayout(ash::DisplayPlacement::TOP, 40));
+      ash::test::CreateDisplayLayout(display::DisplayPlacement::TOP, 40));
 
   result = DisplayInfoProvider::Get()->GetAllDisplaysInfo();
 
@@ -421,7 +422,7 @@
             SystemInfoDisplayBoundsToString(result[1].bounds));
 
   GetDisplayManager()->SetLayoutForCurrentDisplays(
-      ash::test::CreateDisplayLayout(ash::DisplayPlacement::BOTTOM, 80));
+      ash::test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 80));
 
   result = DisplayInfoProvider::Get()->GetAllDisplaysInfo();
   ASSERT_EQ(2u, result.size());
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index bfce6763..cd55393e 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -47,6 +47,7 @@
 #include "components/data_usage/core/data_use_aggregator.h"
 #include "components/data_usage/core/data_use_amortizer.h"
 #include "components/data_usage/core/data_use_annotator.h"
+#include "components/metrics/metrics_service.h"
 #include "components/net_log/chrome_net_log.h"
 #include "components/policy/core/common/policy_service.h"
 #include "components/prefs/pref_registry_simple.h"
@@ -503,6 +504,14 @@
   if (value)
     value->GetAsBoolean(&is_quic_allowed_by_policy_);
 
+  // Some unit tests use IOThread but do not initialize MetricsService. In that
+  // case it is fine not to have |metrics_data_use_forwarder_|.
+  if (g_browser_process->metrics_service()) {
+    // Callback for updating data use prefs should be obtained on UI thread.
+    metrics_data_use_forwarder_ =
+        g_browser_process->metrics_service()->GetDataUseForwardingCallback();
+  }
+
   BrowserThread::SetDelegate(BrowserThread::IO, this);
 }
 
@@ -609,7 +618,8 @@
           "466432 IOThread::InitAsync::ChromeNetworkDelegate"));
   scoped_ptr<ChromeNetworkDelegate> chrome_network_delegate(
       new ChromeNetworkDelegate(extension_event_router_forwarder(),
-                                &system_enable_referrers_));
+                                &system_enable_referrers_,
+                                metrics_data_use_forwarder_));
   // By default, data usage is considered off the record.
   chrome_network_delegate->set_data_use_aggregator(
       globals_->data_use_aggregator.get(),
@@ -1767,3 +1777,8 @@
   // profile.
   return context;
 }
+
+const metrics::UpdateUsagePrefCallbackType&
+IOThread::GetMetricsDataUseForwarder() {
+  return metrics_data_use_forwarder_;
+}
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h
index 9a29abf2..34987fbe 100644
--- a/chrome/browser/io_thread.h
+++ b/chrome/browser/io_thread.h
@@ -433,6 +433,9 @@
   // a result of a field trial or a command line flag.
   static bool ShouldEnableQuicForDataReductionProxy();
 
+  // Returns the callback for updating data use prefs.
+  const metrics::UpdateUsagePrefCallbackType& GetMetricsDataUseForwarder();
+
  private:
   // Provide SystemURLRequestContextGetter with access to
   // InitSystemRequestContext().
@@ -565,6 +568,10 @@
 
   const base::TimeTicks creation_time_;
 
+  // Callback for updating data use prefs which needs to be initialized on UI
+  // thread and passed to |ChromeNetworkDelegate|.
+  metrics::UpdateUsagePrefCallbackType metrics_data_use_forwarder_;
+
   base::WeakPtrFactory<IOThread> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(IOThread);
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc
index 5f19fb2..2767d20b 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -684,3 +684,7 @@
 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) {
   metrics_service_->OnApplicationNotIdle();
 }
+
+bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() {
+  return IsCellularLogicEnabled();
+}
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.h b/chrome/browser/metrics/chrome_metrics_service_client.h
index 303c984..8c91871c 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.h
+++ b/chrome/browser/metrics/chrome_metrics_service_client.h
@@ -77,6 +77,7 @@
   void OnPluginLoadingError(const base::FilePath& plugin_path) override;
   bool IsReportingPolicyManaged() override;
   EnableMetricsDefault GetDefaultOptIn() override;
+  bool IsUMACellularUploadLogicEnabled() override;
 
  private:
   explicit ChromeMetricsServiceClient(
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index ee6dff8e..c333cf056 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -286,7 +286,8 @@
 
 ChromeNetworkDelegate::ChromeNetworkDelegate(
     extensions::EventRouterForwarder* event_router,
-    BooleanPrefMember* enable_referrers)
+    BooleanPrefMember* enable_referrers,
+    const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder)
     : profile_(NULL),
       enable_referrers_(enable_referrers),
       enable_do_not_track_(NULL),
@@ -294,9 +295,10 @@
       force_youtube_safety_mode_(NULL),
       url_blacklist_manager_(NULL),
       domain_reliability_monitor_(NULL),
+      data_use_measurement_(metrics_data_use_forwarder),
       experimental_web_platform_features_enabled_(
-          base::CommandLine::ForCurrentProcess()
-              ->HasSwitch(switches::kEnableExperimentalWebPlatformFeatures)),
+          base::CommandLine::ForCurrentProcess()->HasSwitch(
+              switches::kEnableExperimentalWebPlatformFeatures)),
       data_use_aggregator_(nullptr),
       is_data_usage_off_the_record_(true) {
   DCHECK(enable_referrers);
diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h
index 0d0f753..f807f86a 100644
--- a/chrome/browser/net/chrome_network_delegate.h
+++ b/chrome/browser/net/chrome_network_delegate.h
@@ -17,6 +17,7 @@
 #include "base/values.h"
 #include "build/build_config.h"
 #include "components/data_use_measurement/content/data_use_measurement.h"
+#include "components/metrics/data_use_tracker.h"
 #include "net/base/network_delegate_impl.h"
 
 class ChromeExtensionsNetworkDelegate;
@@ -67,8 +68,10 @@
   // |enable_referrers| (and all of the other optional PrefMembers) should be
   // initialized on the UI thread (see below) beforehand. This object's owner is
   // responsible for cleaning them up at shutdown.
-  ChromeNetworkDelegate(extensions::EventRouterForwarder* event_router,
-                        BooleanPrefMember* enable_referrers);
+  ChromeNetworkDelegate(
+      extensions::EventRouterForwarder* event_router,
+      BooleanPrefMember* enable_referrers,
+      const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder);
   ~ChromeNetworkDelegate() override;
 
   // Pass through to ChromeExtensionsNetworkDelegate::set_extension_info_map().
diff --git a/chrome/browser/net/chrome_network_delegate_unittest.cc b/chrome/browser/net/chrome_network_delegate_unittest.cc
index b6feec3..ab99886 100644
--- a/chrome/browser/net/chrome_network_delegate_unittest.cc
+++ b/chrome/browser/net/chrome_network_delegate_unittest.cc
@@ -157,7 +157,8 @@
 
   void Initialize() {
     network_delegate_.reset(
-        new ChromeNetworkDelegate(forwarder(), &enable_referrers_));
+        new ChromeNetworkDelegate(forwarder(), &enable_referrers_,
+                                  metrics::UpdateUsagePrefCallbackType()));
     context_->set_client_socket_factory(&socket_factory_);
     context_->set_network_delegate(network_delegate_.get());
     context_->Init();
@@ -348,7 +349,8 @@
  protected:
   scoped_ptr<net::NetworkDelegate> CreateNetworkDelegate() {
     scoped_ptr<ChromeNetworkDelegate> network_delegate(
-        new ChromeNetworkDelegate(forwarder(), &enable_referrers_));
+        new ChromeNetworkDelegate(forwarder(), &enable_referrers_,
+                                  metrics::UpdateUsagePrefCallbackType()));
     network_delegate->set_force_google_safe_search(&force_google_safe_search_);
     network_delegate->set_force_youtube_safety_mode(
         &force_youtube_safety_mode_);
@@ -446,7 +448,8 @@
  protected:
   scoped_ptr<ChromeNetworkDelegate> CreateNetworkDelegate() {
     scoped_ptr<ChromeNetworkDelegate> network_delegate(
-        new ChromeNetworkDelegate(forwarder(), &enable_referrers_));
+        new ChromeNetworkDelegate(forwarder(), &enable_referrers_,
+                                  metrics::UpdateUsagePrefCallbackType()));
     network_delegate->set_cookie_settings(cookie_settings_);
     return network_delegate;
   }
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
index 205c79f2..148ee64 100644
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
@@ -63,6 +63,10 @@
     "PageLoad.Timing2.ParseBlockedOnScriptLoad";
 const char kHistogramParseBlockedOnScriptLoadParseComplete[] =
     "PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete";
+const char kHistogramParseBlockedOnScriptLoadDocumentWrite[] =
+    "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite";
+const char kHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete[] =
+    "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete";
 
 const char kBackgroundHistogramCommit[] =
     "PageLoad.Timing2.NavigationToCommit.Background";
@@ -86,6 +90,12 @@
     "PageLoad.Timing2.ParseBlockedOnScriptLoad.Background";
 const char kBackgroundHistogramParseBlockedOnScriptLoadParseComplete[] =
     "PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete.Background";
+const char kBackgroundHistogramParseBlockedOnScriptLoadDocumentWrite[] =
+    "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.Background";
+const char
+    kBackgroundHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete[] =
+        "PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite."
+        "ParseComplete.Background";
 
 const char kHistogramFirstContentfulPaintHigh[] =
     "PageLoad.Timing2.NavigationToFirstContentfulPaint.HighResolutionClock";
@@ -290,10 +300,16 @@
         WasStartedInForegroundEventInForeground(timing.parse_stop, info)) {
       PAGE_LOAD_HISTOGRAM(internal::kHistogramParseBlockedOnScriptLoad,
                           timing.parse_blocked_on_script_load_duration);
+      PAGE_LOAD_HISTOGRAM(
+          internal::kHistogramParseBlockedOnScriptLoadDocumentWrite,
+          timing.parse_blocked_on_script_load_from_document_write_duration);
     } else {
       PAGE_LOAD_HISTOGRAM(
           internal::kBackgroundHistogramParseBlockedOnScriptLoad,
           timing.parse_blocked_on_script_load_duration);
+      PAGE_LOAD_HISTOGRAM(
+          internal::kBackgroundHistogramParseBlockedOnScriptLoadDocumentWrite,
+          timing.parse_blocked_on_script_load_from_document_write_duration);
     }
   }
   if (!timing.parse_stop.is_zero()) {
@@ -303,12 +319,20 @@
       PAGE_LOAD_HISTOGRAM(
           internal::kHistogramParseBlockedOnScriptLoadParseComplete,
           timing.parse_blocked_on_script_load_duration);
+      PAGE_LOAD_HISTOGRAM(
+          internal::
+              kHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete,
+          timing.parse_blocked_on_script_load_from_document_write_duration);
     } else {
       PAGE_LOAD_HISTOGRAM(internal::kBackgroundHistogramParseDuration,
                           parse_duration);
       PAGE_LOAD_HISTOGRAM(
           internal::kBackgroundHistogramParseBlockedOnScriptLoadParseComplete,
           timing.parse_blocked_on_script_load_duration);
+      PAGE_LOAD_HISTOGRAM(
+          internal::
+              kBackgroundHistogramParseBlockedOnScriptLoadDocumentWriteParseComplete,
+          timing.parse_blocked_on_script_load_from_document_write_duration);
     }
   }
 
diff --git a/chrome/browser/profiles/profile.h b/chrome/browser/profiles/profile.h
index 1339c4e..8ca5c06 100644
--- a/chrome/browser/profiles/profile.h
+++ b/chrome/browser/profiles/profile.h
@@ -223,29 +223,6 @@
   // the user started chrome.
   virtual base::Time GetStartTime() const = 0;
 
-  // Creates the main net::URLRequestContextGetter that will be returned by
-  // GetRequestContext(). Should only be called once per ContentBrowserClient
-  // object. This function is exposed because of the circular dependency where
-  // GetStoragePartition() is used to retrieve the request context, but creation
-  // still has to happen in the Profile so the StoragePartition calls
-  // ContextBrowserClient to call this function.
-  // TODO(ajwong): Remove once http://crbug.com/159193 is resolved.
-  virtual net::URLRequestContextGetter* CreateRequestContext(
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) = 0;
-
-  // Creates the net::URLRequestContextGetter for a StoragePartition. Should
-  // only be called once per partition_path per ContentBrowserClient object.
-  // This function is exposed because the request context is retrieved from the
-  // StoragePartition, but creation still has to happen in the Profile so the
-  // StoragePartition calls ContextBrowserClient to call this function.
-  // TODO(ajwong): Remove once http://crbug.com/159193 is resolved.
-  virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      const base::FilePath& partition_path,
-      bool in_memory,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) = 0;
-
   // Returns the last directory that was chosen for uploading or opening a file.
   virtual base::FilePath last_selected_directory() = 0;
   virtual void set_last_selected_directory(const base::FilePath& path) = 0;
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 5569ad7..022ab42 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -913,15 +913,6 @@
   return otr_prefs_.get();
 }
 
-net::URLRequestContextGetter* ProfileImpl::CreateRequestContext(
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  return io_data_.CreateMainRequestContextGetter(
-                     protocol_handlers, std::move(request_interceptors),
-                     g_browser_process->io_thread())
-      .get();
-}
-
 net::URLRequestContextGetter* ProfileImpl::GetRequestContext() {
   return GetDefaultStoragePartition(this)->GetURLRequestContext();
 }
@@ -957,18 +948,6 @@
   return io_data_.GetExtensionsRequestContextGetter().get();
 }
 
-net::URLRequestContextGetter*
-ProfileImpl::CreateRequestContextForStoragePartition(
-    const base::FilePath& partition_path,
-    bool in_memory,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  return io_data_.CreateIsolatedAppRequestContextGetter(
-                     partition_path, in_memory, protocol_handlers,
-                     std::move(request_interceptors))
-      .get();
-}
-
 net::SSLConfigService* ProfileImpl::GetSSLConfigService() {
   // If ssl_config_service_manager_ is null, this typically means that some
   // KeyedService is trying to create a RequestContext at startup,
@@ -1019,6 +998,27 @@
   return BackgroundSyncControllerFactory::GetForProfile(this);
 }
 
+net::URLRequestContextGetter* ProfileImpl::CreateRequestContext(
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return io_data_.CreateMainRequestContextGetter(
+                     protocol_handlers, std::move(request_interceptors),
+                     g_browser_process->io_thread())
+      .get();
+}
+
+net::URLRequestContextGetter*
+ProfileImpl::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return io_data_.CreateIsolatedAppRequestContextGetter(
+                     partition_path, in_memory, protocol_handlers,
+                     std::move(request_interceptors))
+      .get();
+}
+
 bool ProfileImpl::IsSameProfile(Profile* profile) {
   if (profile == static_cast<Profile*>(this))
     return true;
diff --git a/chrome/browser/profiles/profile_impl.h b/chrome/browser/profiles/profile_impl.h
index 8286c05..f8c5bdf 100644
--- a/chrome/browser/profiles/profile_impl.h
+++ b/chrome/browser/profiles/profile_impl.h
@@ -96,6 +96,14 @@
   content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   content::PermissionManager* GetPermissionManager() override;
   content::BackgroundSyncController* GetBackgroundSyncController() override;
+  net::URLRequestContextGetter* CreateRequestContext(
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
   // Profile implementation:
   scoped_refptr<base::SequencedTaskRunner> GetIOTaskRunner() override;
@@ -120,14 +128,6 @@
   net::SSLConfigService* GetSSLConfigService() override;
   bool IsSameProfile(Profile* profile) override;
   base::Time GetStartTime() const override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
-  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      const base::FilePath& partition_path,
-      bool in_memory,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   base::FilePath last_selected_directory() override;
   void set_last_selected_directory(const base::FilePath& path) override;
   chrome_browser_net::Predictor* GetNetworkPredictor() override;
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 3d439fb..fd71009 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -63,6 +63,7 @@
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h"
 #include "components/dom_distiller/core/url_constants.h"
 #include "components/metrics/metrics_pref_names.h"
+#include "components/metrics/metrics_service.h"
 #include "components/net_log/chrome_net_log.h"
 #include "components/policy/core/browser/url_blacklist_manager.h"
 #include "components/policy/core/common/cloud/policy_header_io_helper.h"
@@ -1016,14 +1017,13 @@
   main_request_context_.reset(new net::URLRequestContext());
   extensions_request_context_.reset(new net::URLRequestContext());
 
-  scoped_ptr<ChromeNetworkDelegate> network_delegate(
-      new ChromeNetworkDelegate(
+  scoped_ptr<ChromeNetworkDelegate> network_delegate(new ChromeNetworkDelegate(
 #if defined(ENABLE_EXTENSIONS)
-          io_thread_globals->extension_event_router_forwarder.get(),
+      io_thread_globals->extension_event_router_forwarder.get(),
 #else
-          NULL,
+      NULL,
 #endif
-          &enable_referrers_));
+      &enable_referrers_, io_thread->GetMetricsDataUseForwarder()));
 #if defined(ENABLE_EXTENSIONS)
   network_delegate->set_extension_info_map(
       profile_params_->extension_info_map.get());
@@ -1291,9 +1291,10 @@
   net::HttpNetworkSession::Params params(io_thread->NetworkSessionParams());
   net::URLRequestContextBuilder::SetHttpNetworkSessionComponents(context,
                                                                  &params);
-  if (!IsOffTheRecord()) {
+  if (!IsOffTheRecord() && io_thread->globals()->network_quality_estimator) {
     params.socket_performance_watcher_factory =
-        io_thread->globals()->network_quality_estimator.get();
+        io_thread->globals()
+            ->network_quality_estimator->GetSocketPerformanceWatcherFactory();
   }
   if (data_reduction_proxy_io_data_.get())
     params.proxy_delegate = data_reduction_proxy_io_data_->proxy_delegate();
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/constants.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/constants.js
index 3e1f728..018b850 100644
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/constants.js
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/constants.js
@@ -64,6 +64,7 @@
    */
   WallpaperSourceEnum: {
       Online: 'ONLINE',
+      Daily: 'DAILY',
       OEM: 'OEM',
       Custom: 'CUSTOM',
       AddNew: 'ADDNEW',
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/event_page.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/event_page.js
index 4fd4193..91c97886 100644
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/event_page.js
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/event_page.js
@@ -162,7 +162,7 @@
       var wallpaperURL = wallpaper.base_url + Constants.HighResolutionSuffix;
       var onSuccess = function() {
         WallpaperUtil.saveWallpaperInfo(wallpaperURL, wallpaper.default_layout,
-            Constants.WallpaperSourceEnum.Online);
+            Constants.WallpaperSourceEnum.Daily, '');
         WallpaperUtil.saveToLocalStorage(
             Constants.AccessLastSurpriseWallpaperChangedDate,
             dateString, function() {
@@ -198,7 +198,7 @@
                                                  'surprise_wallpaper',
                                                  onSuccess);
       WallpaperUtil.saveWallpaperInfo(url, layout,
-                                      Constants.WallpaperSourceEnum.Online);
+                                      Constants.WallpaperSourceEnum.Daily, '');
       var dateString = new Date().toDateString();
       WallpaperUtil.saveToLocalStorage(
           Constants.AccessLastSurpriseWallpaperChangedDate,
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js
index 0cb7857..3614c4cb 100644
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js
@@ -310,6 +310,13 @@
  *     set by the built-in wallpaper picker, it is set to an empty string.
  */
 WallpaperUtil.saveWallpaperInfo = function(url, layout, source, appName) {
+  chrome.wallpaperPrivate.recordWallpaperUMA(source);
+
+  // In order to keep the wallpaper sync working across different versions, we
+  // have to revert DAILY type wallpaper info to ONLINE type after record the
+  // correct UMA stats.
+  source = (source == Constants.WallpaperSourceEnum.Daily) ?
+      Constants.WallpaperSourceEnum.Online : source;
   var wallpaperInfo = {
       url: url,
       layout: layout,
@@ -378,8 +385,6 @@
       if (xhr.response != null) {
         chrome.wallpaperPrivate.setWallpaper(xhr.response, layout, url,
                                              onSuccess);
-        self.saveWallpaperInfo(
-            url, layout, Constants.WallpaperSourceEnum.Online, '');
       } else {
         onFailure();
       }
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js
index 8b59268..0d8bf7c 100644
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js
@@ -163,8 +163,12 @@
             }
           });
           break;
+        case Constants.WallpaperSourceEnum.Daily:
+          // It's impossible to manually select a DAILY type wallpaper.
+          console.error('Unsupported wallpaper source.');
+          break;
         default:
-          console.error('Unsupported image source.');
+          console.error('Unsupported wallpaper source.');
           // Delay dispatching the completion callback until all items have
           // begun loading and are tracked.
           window.setTimeout(this.callback_.bind(this, this.dataModelId_), 0);
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
index 991fd6f..d8e3454c 100644
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
@@ -668,6 +668,9 @@
                                  onFailure, self.wallpaperRequest_);
         });
         break;
+      case Constants.WallpaperSourceEnum.Daily:
+        console.error('Unsupported wallpaper source.');
+        break;
       default:
         console.error('Unsupported wallpaper source.');
     }
diff --git a/chrome/browser/resources/settings/people_page/manage_profile.js b/chrome/browser/resources/settings/people_page/manage_profile.js
index 243548d..2851f68 100644
--- a/chrome/browser/resources/settings/people_page/manage_profile.js
+++ b/chrome/browser/resources/settings/people_page/manage_profile.js
@@ -45,11 +45,12 @@
 
   /** @override */
   attached: function() {
-    this.addWebUIListener('available-icons-changed', function(iconUrls) {
+    var setIcons = function(iconUrls) {
       this.availableIconUrls = iconUrls;
-    }.bind(this));
+    }.bind(this);
 
-    this.browserProxy_.getAvailableIcons();
+    this.addWebUIListener('available-icons-changed', setIcons);
+    this.browserProxy_.getAvailableIcons().then(setIcons);
   },
 
   /**
diff --git a/chrome/browser/resources/settings/people_page/manage_profile_browser_proxy.js b/chrome/browser/resources/settings/people_page/manage_profile_browser_proxy.js
index 1607fd9..48c03b7e 100644
--- a/chrome/browser/resources/settings/people_page/manage_profile_browser_proxy.js
+++ b/chrome/browser/resources/settings/people_page/manage_profile_browser_proxy.js
@@ -12,8 +12,8 @@
 
   ManageProfileBrowserProxy.prototype = {
     /**
-     * Gets the available profile icons to choose from. As a response, the C++
-     * sends the 'available-icons-changed' WebUIListener event.
+     * Gets the available profile icons to choose from.
+     * @return {!Promise<!Array<string>>}
      */
     getAvailableIcons: function() {},
 
@@ -37,7 +37,7 @@
   ManageProfileBrowserProxyImpl.prototype = {
     /** @override */
     getAvailableIcons: function() {
-      chrome.send('getAvailableIcons');
+      return cr.sendWithPromise('getAvailableIcons');
     },
 
     /** @override */
diff --git a/chrome/browser/safe_browsing/local_database_manager.cc b/chrome/browser/safe_browsing/local_database_manager.cc
index 22818cbf..940d15a 100644
--- a/chrome/browser/safe_browsing/local_database_manager.cc
+++ b/chrome/browser/safe_browsing/local_database_manager.cc
@@ -1254,7 +1254,7 @@
       check_timeout_);
 }
 
-bool LocalSafeBrowsingDatabaseManager::download_protection_enabled() const {
+bool LocalSafeBrowsingDatabaseManager::IsDownloadProtectionEnabled() const {
   return enable_download_protection_;
 }
 
diff --git a/chrome/browser/safe_browsing/local_database_manager.h b/chrome/browser/safe_browsing/local_database_manager.h
index 6e9025d..59e7e3f 100644
--- a/chrome/browser/safe_browsing/local_database_manager.h
+++ b/chrome/browser/safe_browsing/local_database_manager.h
@@ -135,7 +135,7 @@
   void StartOnIOThread(net::URLRequestContextGetter* request_context_getter,
                        const V4ProtocolConfig& config) override;
   void StopOnIOThread(bool shutdown) override;
-  bool download_protection_enabled() const override;
+  bool IsDownloadProtectionEnabled() const override;
 
  protected:
   ~LocalSafeBrowsingDatabaseManager() override;
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc
index 939b4f3..5a9da1e 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_service.cc
@@ -346,7 +346,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
 #if defined(FULL_SAFE_BROWSING)
-  return (database_manager_->download_protection_enabled() &&
+  return (database_manager_->IsDownloadProtectionEnabled() &&
           ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled()) ||
          (download_protection_service() &&
           download_protection_service()->enabled());
diff --git a/chrome/browser/search/suggestions/suggestions_source.cc b/chrome/browser/search/suggestions/suggestions_source.cc
index 922b953..e8804f7 100644
--- a/chrome/browser/search/suggestions/suggestions_source.cc
+++ b/chrome/browser/search/suggestions/suggestions_source.cc
@@ -205,8 +205,10 @@
     gfx::PNGCodec::EncodeBGRASkBitmap(*bitmap, false, &output);
 
     std::string encoded_output;
-    base::Base64Encode(std::string(output.begin(), output.end()),
-                       &encoded_output);
+    base::Base64Encode(
+        base::StringPiece(reinterpret_cast<const char*>(output.data()),
+                          output.size()),
+        &encoded_output);
     context->base64_encoded_pngs[url] = "data:image/png;base64,";
     context->base64_encoded_pngs[url] += encoded_output;
   }
diff --git a/chrome/browser/ssl/chrome_expect_ct_reporter.cc b/chrome/browser/ssl/chrome_expect_ct_reporter.cc
index 601800c..983a2cad 100644
--- a/chrome/browser/ssl/chrome_expect_ct_reporter.cc
+++ b/chrome/browser/ssl/chrome_expect_ct_reporter.cc
@@ -10,6 +10,8 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/json/json_writer.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/metrics/sparse_histogram.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
@@ -101,13 +103,20 @@
   list->Append(std::move(list_item));
 }
 
+// Records an UMA histogram of the net errors when Expect CT reports
+// fails to send.
+void RecordUMAOnFailure(const GURL& report_uri, int net_error) {
+  UMA_HISTOGRAM_SPARSE_SLOWLY("SSL.ExpectCTReportFailure", net_error);
+}
+
 }  // namespace
 
 ChromeExpectCTReporter::ChromeExpectCTReporter(
     net::URLRequestContext* request_context)
     : report_sender_(new net::CertificateReportSender(
           request_context,
-          net::CertificateReportSender::DO_NOT_SEND_COOKIES)) {}
+          net::CertificateReportSender::DO_NOT_SEND_COOKIES,
+          base::Bind(RecordUMAOnFailure))) {}
 
 ChromeExpectCTReporter::~ChromeExpectCTReporter() {}
 
diff --git a/chrome/browser/ssl/chrome_expect_ct_reporter_unittest.cc b/chrome/browser/ssl/chrome_expect_ct_reporter_unittest.cc
index 61219a4..bebe06f 100644
--- a/chrome/browser/ssl/chrome_expect_ct_reporter_unittest.cc
+++ b/chrome/browser/ssl/chrome_expect_ct_reporter_unittest.cc
@@ -10,12 +10,17 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/json/json_reader.h"
+#include "base/run_loop.h"
+#include "base/test/histogram_tester.h"
 #include "base/values.h"
 #include "chrome/common/chrome_features.h"
+#include "content/public/test/test_browser_thread_bundle.h"
 #include "net/base/test_data_directory.h"
 #include "net/ssl/signed_certificate_timestamp_and_status.h"
 #include "net/test/cert_test_util.h"
+#include "net/test/url_request/url_request_failed_job.h"
 #include "net/url_request/certificate_report_sender.h"
+#include "net/url_request/url_request_filter.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -250,6 +255,67 @@
       *report_invalid_scts, *report_valid_scts));
 }
 
+// A test network delegate that allows the user to specify a callback to
+// be run whenever a net::URLRequest is destroyed.
+class TestExpectCTNetworkDelegate : public net::NetworkDelegateImpl {
+ public:
+  TestExpectCTNetworkDelegate()
+      : url_request_destroyed_callback_(base::Bind(&base::DoNothing)) {}
+
+  void set_url_request_destroyed_callback(const base::Closure& callback) {
+    url_request_destroyed_callback_ = callback;
+  }
+
+  // net::NetworkDelegateImpl:
+  void OnURLRequestDestroyed(net::URLRequest* request) override {
+    url_request_destroyed_callback_.Run();
+  }
+
+ private:
+  base::Closure url_request_destroyed_callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestExpectCTNetworkDelegate);
+};
+
+// A test fixture that allows tests to send a report and wait until the
+// net::URLRequest that sent the report is destroyed.
+class ChromeExpectCTReporterWaitTest : public ::testing::Test {
+ public:
+  ChromeExpectCTReporterWaitTest()
+      : context_(true),
+        thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
+    context_.set_network_delegate(&network_delegate_);
+    context_.Init();
+  }
+
+  void SetUp() override { net::URLRequestFailedJob::AddUrlHandler(); }
+
+  void TearDown() override {
+    net::URLRequestFilter::GetInstance()->ClearHandlers();
+  }
+
+  net::TestURLRequestContext* context() { return &context_; }
+
+ protected:
+  void SendReport(ChromeExpectCTReporter* reporter,
+                  const net::HostPortPair& host_port,
+                  const GURL& report_uri,
+                  const net::SSLInfo& ssl_info) {
+    base::RunLoop run_loop;
+    network_delegate_.set_url_request_destroyed_callback(
+        run_loop.QuitClosure());
+    reporter->OnExpectCTFailed(host_port, report_uri, ssl_info);
+    run_loop.Run();
+  }
+
+ private:
+  TestExpectCTNetworkDelegate network_delegate_;
+  net::TestURLRequestContext context_;
+  content::TestBrowserThreadBundle thread_bundle_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChromeExpectCTReporterWaitTest);
+};
+
 void EnableFeature() {
   base::FeatureList::ClearInstanceForTesting();
   std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
@@ -299,6 +365,31 @@
   EXPECT_TRUE(sender->latest_serialized_report().empty());
 }
 
+// Test that if a report fails to send, the UMA metric is recorded.
+TEST_F(ChromeExpectCTReporterWaitTest, SendReportFailure) {
+  EnableFeature();
+  base::HistogramTester histograms;
+  const std::string histogram_name = "SSL.ExpectCTReportFailure";
+  histograms.ExpectTotalCount(histogram_name, 0);
+
+  ChromeExpectCTReporter reporter(context());
+
+  net::SSLInfo ssl_info;
+  ssl_info.cert =
+      net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
+  ssl_info.unverified_cert = net::ImportCertFromFile(
+      net::GetTestCertsDirectory(), "localhost_cert.pem");
+
+  net::HostPortPair host_port("example.test", 443);
+  GURL report_uri(
+      net::URLRequestFailedJob::GetMockHttpUrl(net::ERR_CONNECTION_FAILED));
+
+  SendReport(&reporter, host_port, report_uri, ssl_info);
+
+  histograms.ExpectTotalCount(histogram_name, 1);
+  histograms.ExpectBucketCount(histogram_name, net::ERR_CONNECTION_FAILED, 1);
+}
+
 // Test that a sent report has the right format.
 TEST(ChromeExpectCTReporterTest, SendReport) {
   EnableFeature();
diff --git a/chrome/browser/thumbnails/thumbnail_list_source.cc b/chrome/browser/thumbnails/thumbnail_list_source.cc
index 51d51ac..2892157 100644
--- a/chrome/browser/thumbnails/thumbnail_list_source.cc
+++ b/chrome/browser/thumbnails/thumbnail_list_source.cc
@@ -146,8 +146,9 @@
   for (size_t i = 0; i < num_mv; ++i) {
     scoped_refptr<base::RefCountedMemory> data;
     if (thumbnail_service_->GetPageThumbnail(mvurl_list[i].url, false, &data)) {
-      base::Base64Encode(std::string(data->front_as<char>(), data->size()),
-                         &base64_encoded_pngs[i]);
+      base::Base64Encode(
+          base::StringPiece(data->front_as<char>(), data->size()),
+          &base64_encoded_pngs[i]);
       ++num_mv_with_thumb;
     }
   }
diff --git a/chrome/browser/ui/app_list/test/fake_profile.cc b/chrome/browser/ui/app_list/test/fake_profile.cc
index 7c278c0..22c7c6c 100644
--- a/chrome/browser/ui/app_list/test/fake_profile.cc
+++ b/chrome/browser/ui/app_list/test/fake_profile.cc
@@ -86,6 +86,21 @@
   return nullptr;
 }
 
+net::URLRequestContextGetter* FakeProfile::CreateRequestContext(
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return nullptr;
+}
+
+net::URLRequestContextGetter*
+FakeProfile::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return nullptr;
+}
+
 scoped_refptr<base::SequencedTaskRunner>
 FakeProfile::GetIOTaskRunner() {
   return scoped_refptr<base::SequencedTaskRunner>();
@@ -153,21 +168,6 @@
   return base::Time();
 }
 
-net::URLRequestContextGetter* FakeProfile::CreateRequestContext(
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  return nullptr;
-}
-
-net::URLRequestContextGetter*
-FakeProfile::CreateRequestContextForStoragePartition(
-    const base::FilePath& partition_path,
-    bool in_memory,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  return nullptr;
-}
-
 base::FilePath FakeProfile::last_selected_directory() {
   return base::FilePath();
 }
diff --git a/chrome/browser/ui/app_list/test/fake_profile.h b/chrome/browser/ui/app_list/test/fake_profile.h
index b6945a611..f6da0a9 100644
--- a/chrome/browser/ui/app_list/test/fake_profile.h
+++ b/chrome/browser/ui/app_list/test/fake_profile.h
@@ -52,6 +52,14 @@
   content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   content::PermissionManager* GetPermissionManager() override;
   content::BackgroundSyncController* GetBackgroundSyncController() override;
+  net::URLRequestContextGetter* CreateRequestContext(
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
   scoped_refptr<base::SequencedTaskRunner> GetIOTaskRunner() override;
   Profile* GetOffTheRecordProfile() override;
   void DestroyOffTheRecordProfile() override;
@@ -69,14 +77,6 @@
   net::SSLConfigService* GetSSLConfigService() override;
   bool IsSameProfile(Profile* profile) override;
   base::Time GetStartTime() const override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
-  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      const base::FilePath& partition_path,
-      bool in_memory,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   base::FilePath last_selected_directory() override;
   void set_last_selected_directory(const base::FilePath& path) override;
 
diff --git a/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
new file mode 100644
index 0000000..db462979
--- /dev/null
+++ b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
@@ -0,0 +1,35 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/ash/launcher/arc_launcher_context_menu.h"
+
+#include "ash/shelf/shelf_item_types.h"
+#include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
+#include "chrome/grit/generated_resources.h"
+
+ArcLauncherContextMenu::ArcLauncherContextMenu(
+    ChromeLauncherController* controller,
+    const ash::ShelfItem* item,
+    ash::Shelf* shelf)
+    : LauncherContextMenu(controller, item, shelf) {
+  Init();
+}
+
+ArcLauncherContextMenu::~ArcLauncherContextMenu() {}
+
+void ArcLauncherContextMenu::Init() {
+  AddItemWithStringId(MENU_OPEN_NEW, IDS_APP_CONTEXT_MENU_ACTIVATE_ARC);
+  AddSeparator(ui::NORMAL_SEPARATOR);
+  AddPinMenu();
+  if (controller()->IsOpen(item().id))
+    AddItemWithStringId(MENU_CLOSE, IDS_LAUNCHER_CONTEXT_MENU_CLOSE);
+  AddSeparator(ui::NORMAL_SEPARATOR);
+  AddShelfOptionsMenu();
+}
+
+bool ArcLauncherContextMenu::IsCommandIdEnabled(int command_id) const {
+  if (command_id == MENU_OPEN_NEW)
+    return true;
+  return LauncherContextMenu::IsCommandIdEnabled(command_id);
+}
diff --git a/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.h b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.h
new file mode 100644
index 0000000..10c18a1
--- /dev/null
+++ b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.h
@@ -0,0 +1,35 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_ARC_LAUNCHER_CONTEXT_MENU_H_
+#define CHROME_BROWSER_UI_ASH_LAUNCHER_ARC_LAUNCHER_CONTEXT_MENU_H_
+
+#include "base/macros.h"
+#include "chrome/browser/ui/ash/launcher/launcher_context_menu.h"
+
+class ChromeLauncherController;
+
+namespace ash {
+class Shelf;
+struct ShelfItem;
+}
+
+// Class for context menu which is shown for Arc app in the shelf.
+class ArcLauncherContextMenu : public LauncherContextMenu {
+ public:
+  ArcLauncherContextMenu(ChromeLauncherController* controller,
+                         const ash::ShelfItem* item,
+                         ash::Shelf* shelf);
+  ~ArcLauncherContextMenu() override;
+
+  // ui::SimpleMenuModel::Delegate overrides:
+  bool IsCommandIdEnabled(int command_id) const override;
+
+ private:
+  void Init();
+
+  DISALLOW_COPY_AND_ASSIGN(ArcLauncherContextMenu);
+};
+
+#endif  // CHROME_BROWSER_UI_ASH_LAUNCHER_ARC_LAUNCHER_CONTEXT_MENU_H_
diff --git a/chrome/browser/ui/ash/launcher/launcher_context_menu.cc b/chrome/browser/ui/ash/launcher/launcher_context_menu.cc
index 907c1638..9a6cad0 100644
--- a/chrome/browser/ui/ash/launcher/launcher_context_menu.cc
+++ b/chrome/browser/ui/ash/launcher/launcher_context_menu.cc
@@ -24,6 +24,11 @@
 #include "grit/ash_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
+#include "chrome/browser/ui/ash/launcher/arc_launcher_context_menu.h"
+#endif  // defined(OS_CHROMEOS)
+
 namespace {
 
 // Returns true if the user can modify the |shelf|'s auto-hide behavior.
@@ -45,6 +50,15 @@
   if (!item || item->id == 0)
     return new DesktopShellLauncherContextMenu(controller, item, shelf);
 
+// Create ArcLauncherContextMenu if the item is an Arc app.
+#if defined(OS_CHROMEOS)
+  const std::string& app_id = controller->GetAppIDForShelfID(item->id);
+  ArcAppListPrefs* arc_prefs = ArcAppListPrefs::Get(controller->profile());
+  DCHECK(arc_prefs);
+  if (arc_prefs->IsRegistered(app_id))
+    return new ArcLauncherContextMenu(controller, item, shelf);
+#endif  // defined(OS_CHROMEOS)
+
   // Create ExtensionLauncherContextMenu for the item.
   return new ExtensionLauncherContextMenu(controller, item, shelf);
 }
diff --git a/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc b/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc
index 8a5b3f21..7591e31 100644
--- a/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc
+++ b/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc
@@ -20,6 +20,10 @@
 #include "components/prefs/pref_service.h"
 #include "ui/aura/window_event_dispatcher.h"
 
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/ui/ash/launcher/arc_launcher_context_menu.h"
+#endif  // defined(OS_CHROMEOS)
+
 class LauncherContextMenuTest : public ash::test::AshTestBase {
  protected:
   static bool IsItemPresentInMenu(LauncherContextMenu* menu, int command_id) {
@@ -53,6 +57,15 @@
     return LauncherContextMenu::Create(controller_.get(), item, shelf);
   }
 
+#if defined(OS_CHROMEOS)
+  LauncherContextMenu* CreateLauncherContextMenuForArcApp() {
+    ash::ShelfItem item;
+    item.id = 1;  // dummy id
+    ash::Shelf* shelf = ash::Shelf::ForWindow(CurrentContext());
+    return new ArcLauncherContextMenu(controller_.get(), &item, shelf);
+  }
+#endif
+
   Profile* profile() { return profile_.get(); }
 
  private:
@@ -129,3 +142,26 @@
       menu->IsCommandIdEnabled(LauncherContextMenu::MENU_CHANGE_WALLPAPER));
 #endif
 }
+
+// Verifies contextmenu items for Arc app
+#if defined(OS_CHROMEOS)
+TEST_F(LauncherContextMenuTest, ArcLauncherContextMenuItemCheck) {
+  scoped_ptr<LauncherContextMenu> menu(CreateLauncherContextMenuForArcApp());
+  EXPECT_TRUE(
+      IsItemPresentInMenu(menu.get(), LauncherContextMenu::MENU_OPEN_NEW));
+  EXPECT_TRUE(menu->IsCommandIdEnabled(LauncherContextMenu::MENU_OPEN_NEW));
+  EXPECT_TRUE(
+      IsItemPresentInMenu(menu.get(), LauncherContextMenu::MENU_AUTO_HIDE));
+  EXPECT_TRUE(menu->IsCommandIdEnabled(LauncherContextMenu::MENU_AUTO_HIDE));
+  EXPECT_TRUE(IsItemPresentInMenu(menu.get(),
+                                  LauncherContextMenu::MENU_ALIGNMENT_MENU));
+  EXPECT_TRUE(
+      menu->IsCommandIdEnabled(LauncherContextMenu::MENU_ALIGNMENT_MENU));
+  // By default, screen is not locked and ChangeWallPaper item is added in
+  // menu. ChangeWallPaper item is not enabled in default mode.
+  EXPECT_TRUE(IsItemPresentInMenu(menu.get(),
+                                  LauncherContextMenu::MENU_CHANGE_WALLPAPER));
+  EXPECT_FALSE(
+      menu->IsCommandIdEnabled(LauncherContextMenu::MENU_CHANGE_WALLPAPER));
+}
+#endif
diff --git a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc
index b33892ee..fe613eba 100644
--- a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc
+++ b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc
@@ -336,6 +336,7 @@
 
   ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIDownloadsURL));
   FlushHistoryService();
+  ASSERT_TRUE(content::ExecuteScript(web_contents, "Polymer.dom.flush();"));
   EXPECT_EQ(1, FindInPageASCII(web_contents, download_url.spec(),
                                kFwd, kIgnoreCase, NULL));
 }
diff --git a/chrome/browser/ui/task_manager/task_manager_table_model.cc b/chrome/browser/ui/task_manager/task_manager_table_model.cc
index b757e102..75bf306 100644
--- a/chrome/browser/ui/task_manager/task_manager_table_model.cc
+++ b/chrome/browser/ui/task_manager/task_manager_table_model.cc
@@ -518,8 +518,15 @@
 
     case IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN: {
       int64_t allocated1, allocated2, used1, used2;
-      observed_task_manager()->GetV8Memory(tasks_[row1], &allocated1, &used1);
-      observed_task_manager()->GetV8Memory(tasks_[row2], &allocated2, &used2);
+      bool row1_valid = observed_task_manager()->GetV8Memory(tasks_[row1],
+                                                             &allocated1,
+                                                             &used1);
+      bool row2_valid = observed_task_manager()->GetV8Memory(tasks_[row2],
+                                                             &allocated2,
+                                                             &used2);
+      if (!row1_valid || !row2_valid)
+        return OrderUnavailableValue(row1_valid, row2_valid);
+
       return ValueCompare(allocated1, allocated2);
     }
 
diff --git a/chrome/browser/ui/toolbar/toolbar_actions_model.cc b/chrome/browser/ui/toolbar/toolbar_actions_model.cc
index bea6022..8b8077ba 100644
--- a/chrome/browser/ui/toolbar/toolbar_actions_model.cc
+++ b/chrome/browser/ui/toolbar/toolbar_actions_model.cc
@@ -228,7 +228,19 @@
     content::BrowserContext* browser_context,
     const extensions::Extension* extension,
     extensions::UnloadedExtensionInfo::Reason reason) {
+  size_t index = 0u;
+  while (toolbar_items().size() > index &&
+         toolbar_items()[index].id != extension->id())
+    ++index;
+  bool was_visible_and_has_overflow =
+      index < visible_icon_count() && !all_icons_visible();
   RemoveExtension(extension);
+  // If the extension was previously visible and there are overflowed
+  // extensions, and this extension is being uninstalled, we reduce the visible
+  // count so that we don't pop out a previously-hidden extension.
+  if (was_visible_and_has_overflow &&
+      reason == extensions::UnloadedExtensionInfo::REASON_UNINSTALL)
+    SetVisibleIconCount(visible_icon_count() - 1);
 }
 
 void ToolbarActionsModel::OnExtensionUninstalled(
diff --git a/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc b/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc
index aa0ec50..4aefede 100644
--- a/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc
+++ b/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc
@@ -5,6 +5,7 @@
 #include <stddef.h>
 
 #include "base/callback.h"
+#include "base/callback_helpers.h"
 #include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
@@ -1458,6 +1459,30 @@
 }
 
 TEST_F(ToolbarActionsModelUnitTest,
+       TestUninstallVisibleExtensionDoesntBringOutOther) {
+  Init();
+  ASSERT_TRUE(AddBrowserActionExtensions());
+  toolbar_model()->SetVisibleIconCount(2u);
+  EXPECT_EQ(3u, num_toolbar_items());
+  EXPECT_EQ(2u, toolbar_model()->visible_icon_count());
+  EXPECT_EQ(browser_action_a()->id(), GetActionIdAtIndex(0u));
+  EXPECT_EQ(browser_action_b()->id(), GetActionIdAtIndex(1u));
+  EXPECT_EQ(browser_action_c()->id(), GetActionIdAtIndex(2u));
+
+  service()->UninstallExtension(
+      browser_action_b()->id(),
+      extensions::UNINSTALL_REASON_FOR_TESTING,
+      base::Bind(&base::DoNothing),
+      nullptr);
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(2u, num_toolbar_items());
+  EXPECT_EQ(1u, toolbar_model()->visible_icon_count());
+  EXPECT_EQ(browser_action_a()->id(), GetActionIdAtIndex(0u));
+  EXPECT_EQ(browser_action_c()->id(), GetActionIdAtIndex(1u));
+}
+
+TEST_F(ToolbarActionsModelUnitTest,
        NoMigrationToComponentActionWithoutExtension) {
   extensions::FeatureSwitch::ScopedOverride enable_redesign(
       extensions::FeatureSwitch::extension_action_redesign(), true);
diff --git a/chrome/browser/ui/views/browser_dialogs_views_mac.cc b/chrome/browser/ui/views/browser_dialogs_views_mac.cc
index 7254c45..329033a 100644
--- a/chrome/browser/ui/views/browser_dialogs_views_mac.cc
+++ b/chrome/browser/ui/views/browser_dialogs_views_mac.cc
@@ -54,7 +54,7 @@
           views::BubbleBorder::Arrow::TOP_RIGHT);
   contents->set_parent_window(parent_view);
   contents->SetAnchorRect(gfx::Rect(anchor, gfx::Size()));
-  views::BubbleDelegateView::CreateBubble(contents)->Show();
+  views::BubbleDialogDelegateView::CreateBubble(contents)->Show();
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.cc b/chrome/browser/ui/views/content_setting_bubble_contents.cc
index bb3691e..140d08c 100644
--- a/chrome/browser/ui/views/content_setting_bubble_contents.cc
+++ b/chrome/browser/ui/views/content_setting_bubble_contents.cc
@@ -138,7 +138,7 @@
     views::View* anchor_view,
     views::BubbleBorder::Arrow arrow)
     : content::WebContentsObserver(web_contents),
-      BubbleDelegateView(anchor_view, arrow),
+      BubbleDialogDelegateView(anchor_view, arrow),
       content_setting_bubble_model_(content_setting_bubble_model),
       custom_link_(NULL),
       manage_link_(NULL),
@@ -373,34 +373,29 @@
     bubble_content_empty = false;
   }
 
-  const int kDoubleColumnSetId = 1;
-  views::ColumnSet* double_column_set =
-      layout->AddColumnSet(kDoubleColumnSetId);
   if (!bubble_content_empty) {
-      layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
-      layout->StartRow(0, kSingleColumnSetId);
-      layout->AddView(new views::Separator(views::Separator::HORIZONTAL), 1, 1,
-                      GridLayout::FILL, GridLayout::FILL);
-      layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
-    }
+    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
+    layout->StartRow(0, kSingleColumnSetId);
+    layout->AddView(new views::Separator(views::Separator::HORIZONTAL), 1, 1,
+                    GridLayout::FILL, GridLayout::FILL);
+    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
+  }
+}
 
-    double_column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 1,
-                                 GridLayout::USE_PREF, 0, 0);
-    double_column_set->AddPaddingColumn(
-        0, views::kUnrelatedControlHorizontalSpacing);
-    double_column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
-                                 GridLayout::USE_PREF, 0, 0);
+views::View* ContentSettingBubbleContents::CreateExtraView() {
+  manage_link_ = new views::Link(base::UTF8ToUTF16(
+      content_setting_bubble_model_->bubble_content().manage_link));
+  manage_link_->set_listener(this);
+  return manage_link_;
+}
 
-    layout->StartRow(0, kDoubleColumnSetId);
-    manage_link_ =
-        new views::Link(base::UTF8ToUTF16(bubble_content.manage_link));
-    manage_link_->set_listener(this);
-    layout->AddView(manage_link_);
+int ContentSettingBubbleContents::GetDialogButtons() const {
+  return ui::DIALOG_BUTTON_OK;
+}
 
-    close_button_ =
-        new views::LabelButton(this, l10n_util::GetStringUTF16(IDS_DONE));
-    close_button_->SetStyle(views::Button::STYLE_BUTTON);
-    layout->AddView(close_button_);
+base::string16 ContentSettingBubbleContents::GetDialogButtonLabel(
+    ui::DialogButton button) const {
+  return l10n_util::GetStringUTF16(IDS_DONE);
 }
 
 void ContentSettingBubbleContents::DidNavigateMainFrame(
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.h b/chrome/browser/ui/views/content_setting_bubble_contents.h
index 86b2e10..46689f12 100644
--- a/chrome/browser/ui/views/content_setting_bubble_contents.h
+++ b/chrome/browser/ui/views/content_setting_bubble_contents.h
@@ -12,7 +12,7 @@
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/media_stream_request.h"
-#include "ui/views/bubble/bubble_delegate.h"
+#include "ui/views/bubble/bubble_dialog_delegate.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/button/menu_button_listener.h"
 #include "ui/views/controls/link_listener.h"
@@ -46,7 +46,7 @@
 // get to a more comprehensive settings management dialog.  A few types have
 // more or fewer controls than this.
 class ContentSettingBubbleContents : public content::WebContentsObserver,
-                                     public views::BubbleDelegateView,
+                                     public views::BubbleDialogDelegateView,
                                      public views::ButtonListener,
                                      public views::LinkListener,
                                      public views::MenuButtonListener {
@@ -65,8 +65,11 @@
                        const std::string& label);
 
  protected:
-  // views::BubbleDelegateView:
+  // views::BubbleDialogDelegateView:
   void Init() override;
+  View* CreateExtraView() override;
+  int GetDialogButtons() const override;
+  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
 
  private:
   class Favicon;
diff --git a/chrome/browser/ui/views/download/download_item_view_md.cc b/chrome/browser/ui/views/download/download_item_view_md.cc
index 0d3082d..6e896de 100644
--- a/chrome/browser/ui/views/download/download_item_view_md.cc
+++ b/chrome/browser/ui/views/download/download_item_view_md.cc
@@ -462,6 +462,7 @@
 
 void DownloadItemViewMd::OnThemeChanged() {
   UpdateColorsFromTheme();
+  SchedulePaint();
 }
 
 void DownloadItemViewMd::AddInkDropLayer(ui::Layer* ink_drop_layer) {
@@ -588,6 +589,13 @@
 }
 
 void DownloadItemViewMd::OnPaint(gfx::Canvas* canvas) {
+  // Make sure to draw |this| opaquely. Since the toolbar color can be partially
+  // transparent, start with a black backdrop (which is the default initialized
+  // color for opaque canvases).
+  canvas->DrawColor(SK_ColorBLACK);
+  canvas->DrawColor(
+      GetThemeProvider()->GetColor(ThemeProperties::COLOR_TOOLBAR));
+
   DrawStatusText(canvas);
   DrawFilename(canvas);
   DrawIcon(canvas);
diff --git a/chrome/browser/ui/views/extensions/bundle_installed_bubble.cc b/chrome/browser/ui/views/extensions/bundle_installed_bubble.cc
index f192c05..a37af3b6 100644
--- a/chrome/browser/ui/views/extensions/bundle_installed_bubble.cc
+++ b/chrome/browser/ui/views/extensions/bundle_installed_bubble.cc
@@ -10,8 +10,8 @@
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/resources/grit/ui_resources.h"
-#include "ui/views/bubble/bubble_delegate.h"
-#include "ui/views/controls/button/image_button.h"
+#include "ui/views/bubble/bubble_dialog_delegate.h"
+#include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/layout/grid_layout.h"
 #include "ui/views/layout/layout_constants.h"
@@ -33,13 +33,13 @@
 // The size of extension icons, and width of the corresponding column.
 const int kIconSize = 32;
 
-class BundleInstalledBubble : public views::BubbleDelegateView,
+class BundleInstalledBubble : public views::BubbleDialogDelegateView,
                               public views::ButtonListener {
  public:
   BundleInstalledBubble(const BundleInstaller* bundle,
                         View* anchor_view,
                         views::BubbleBorder::Arrow arrow)
-      : views::BubbleDelegateView(anchor_view, arrow) {
+      : views::BubbleDialogDelegateView(anchor_view, arrow) {
     GridLayout* layout = GridLayout::CreatePanel(this);
     SetLayoutManager(layout);
 
@@ -116,7 +116,7 @@
           BundleInstaller::Item::STATE_FAILED));
     }
 
-    views::BubbleDelegateView::CreateBubble(this)->Show();
+    views::BubbleDialogDelegateView::CreateBubble(this)->Show();
   }
 
   void AddItemList(GridLayout* layout, const BundleInstaller::ItemList& items) {
@@ -142,16 +142,7 @@
   }
 
   void AddCloseButton(GridLayout* layout, views::ButtonListener* listener) {
-    ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-
-    views::ImageButton* button = new views::ImageButton(listener);
-    button->SetImage(views::CustomButton::STATE_NORMAL,
-                     rb.GetImageSkiaNamed(IDR_CLOSE_2));
-    button->SetImage(views::CustomButton::STATE_HOVERED,
-                     rb.GetImageSkiaNamed(IDR_CLOSE_2_H));
-    button->SetImage(views::CustomButton::STATE_PRESSED,
-                     rb.GetImageSkiaNamed(IDR_CLOSE_2_P));
-    layout->AddView(button);
+    layout->AddView(views::BubbleFrameView::CreateCloseButton(listener));
   }
 
   void AddHeading(GridLayout* layout, const base::string16& heading) {
@@ -164,6 +155,9 @@
     layout->AddView(heading_label);
   }
 
+  // views::BubbleDialogDelegate implementation:
+  int GetDialogButtons() const override { return ui::DIALOG_BUTTON_NONE; }
+
   // views::ButtonListener implementation:
   void ButtonPressed(views::Button* sender, const ui::Event& event) override {
     GetWidget()->Close();
diff --git a/chrome/browser/ui/views/first_run_bubble_unittest.cc b/chrome/browser/ui/views/first_run_bubble_unittest.cc
index 7cdf5f8..3c32c96 100644
--- a/chrome/browser/ui/views/first_run_bubble_unittest.cc
+++ b/chrome/browser/ui/views/first_run_bubble_unittest.cc
@@ -5,7 +5,6 @@
 #include "base/macros.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/ui/views/first_run_bubble.h"
-#include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_service.h"
@@ -60,15 +59,14 @@
 
   // Overrides from views::ViewsTestBase:
   void SetUp() override;
-  void TearDown() override;
 
   void CreateAndCloseBubbleOnEventTest(ui::Event* event);
 
  protected:
-  TestingProfile* profile() { return profile_.get(); }
+  TestingProfile* profile() { return &profile_; }
 
  private:
-  scoped_ptr<TestingProfile> profile_;
+  TestingProfile profile_;
 
   DISALLOW_COPY_AND_ASSIGN(FirstRunBubbleTest);
 };
@@ -79,20 +77,13 @@
 
 void FirstRunBubbleTest::SetUp() {
   ViewsTestBase::SetUp();
-  profile_.reset(new TestingProfile());
   TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse(
-      profile_.get(), &TemplateURLServiceFactory::BuildInstanceFor);
+      profile(), &TemplateURLServiceFactory::BuildInstanceFor);
   TemplateURLService* turl_model =
-      TemplateURLServiceFactory::GetForProfile(profile_.get());
+      TemplateURLServiceFactory::GetForProfile(profile());
   turl_model->Load();
 }
 
-void FirstRunBubbleTest::TearDown() {
-  ViewsTestBase::TearDown();
-  profile_.reset();
-  TestingBrowserProcess::DeleteInstance();
-}
-
 void FirstRunBubbleTest::CreateAndCloseBubbleOnEventTest(ui::Event* event) {
   // Create the anchor and parent widgets.
   views::Widget::InitParams params =
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index bfb23b6..4e63db8 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -218,22 +218,22 @@
   canvas->FillRect(gfx::Rect(0, y, view->width(), thickness), color);
 }
 
-// TODO(kuan): These functions are temporarily for the bookmark bar while its
-// detached state is at the top of the page;  it'll be moved to float on the
-// content page in the very near future, at which time, these local functions
-// will be removed.
 void PaintDetachedBookmarkBar(gfx::Canvas* canvas,
-                              BookmarkBarView* view,
-                              Profile* profile) {
+                              BookmarkBarView* view) {
   // Paint background for detached state; if animating, this is fade in/out.
-  const ui::ThemeProvider& tp =
-      ThemeService::GetThemeProviderForProfile(profile);
+  const ui::ThemeProvider* tp = view->GetThemeProvider();
+  // In detached mode, the bar is meant to overlap with |contents_container_|.
+  // Since the layer for |view| is opaque, we have to recreate that base color
+  // here. (The detached background color may be partially transparent.)
   canvas->DrawColor(
-      tp.GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND));
+      tp->GetColor(ThemeProperties::COLOR_CONTROL_BACKGROUND));
+  canvas->DrawColor(
+      tp->GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND));
+
   // Draw the separators above and below bookmark bar;
   // if animating, these are fading in/out.
   SkColor separator_color =
-      tp.GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR);
+      tp->GetColor(ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR);
 
   if (ui::MaterialDesignController::IsModeMaterial()) {
     BrowserView::Paint1pxHorizontalLine(
@@ -262,8 +262,7 @@
                                  const ui::ThemeProvider* theme_provider,
                                  const gfx::Rect& bounds,
                                  const gfx::Point& background_origin) {
-  canvas->FillRect(bounds,
-                   theme_provider->GetColor(ThemeProperties::COLOR_TOOLBAR));
+  canvas->DrawColor(theme_provider->GetColor(ThemeProperties::COLOR_TOOLBAR));
 
   // Always tile the background image in pre-MD. In MD, only tile if there's a
   // non-default image.
@@ -439,7 +438,7 @@
   // While animating, set opacity to cross-fade between attached and detached
   // backgrounds including their respective separators.
   canvas->SaveLayerAlpha(detached_alpha);
-  PaintDetachedBookmarkBar(canvas, bookmark_bar_view_, browser_->profile());
+  PaintDetachedBookmarkBar(canvas, bookmark_bar_view_);
   canvas->Restore();
 }
 
diff --git a/chrome/browser/ui/views/location_bar/content_setting_image_view.cc b/chrome/browser/ui/views/location_bar/content_setting_image_view.cc
index fc23d2e..f1a33e4 100644
--- a/chrome/browser/ui/views/location_bar/content_setting_image_view.cc
+++ b/chrome/browser/ui/views/location_bar/content_setting_image_view.cc
@@ -273,7 +273,7 @@
                     web_contents, parent_->profile()),
                 web_contents, this, views::BubbleBorder::TOP_RIGHT);
     views::Widget* bubble_widget =
-        parent_->delegate()->CreateViewsBubble(bubble_view_);
+        views::BubbleDialogDelegateView::CreateBubble(bubble_view_);
     bubble_widget->AddObserver(this);
     // This is triggered by an input event. If the user clicks the icon while
     // it's not animating, the icon will be placed in an active state, so the
diff --git a/chrome/browser/ui/views/location_bar/content_setting_image_view.h b/chrome/browser/ui/views/location_bar/content_setting_image_view.h
index 3f311c5..620e616 100644
--- a/chrome/browser/ui/views/location_bar/content_setting_image_view.h
+++ b/chrome/browser/ui/views/location_bar/content_setting_image_view.h
@@ -28,7 +28,7 @@
 }
 
 namespace views {
-class BubbleDelegateView;
+class BubbleDialogDelegateView;
 class ImageView;
 class InkDropDelegate;
 class Label;
@@ -95,7 +95,7 @@
   gfx::SlideAnimation slide_animator_;
   bool pause_animation_;
   double pause_animation_state_;
-  views::BubbleDelegateView* bubble_view_;
+  views::BubbleDialogDelegateView* bubble_view_;
 
   // This is used to check if the bubble was showing during the mouse pressed
   // event. If this is true then the mouse released event is ignored to prevent
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index 6192f60..1d08b95 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -54,7 +54,6 @@
 }
 
 namespace views {
-class BubbleDelegateView;
 class Label;
 class Widget;
 }
@@ -85,10 +84,6 @@
     virtual ToolbarModel* GetToolbarModel() = 0;
     virtual const ToolbarModel* GetToolbarModel() const = 0;
 
-    // Creates Widget for the given delegate.
-    virtual views::Widget* CreateViewsBubble(
-        views::BubbleDelegateView* bubble_delegate) = 0;
-
     // Creates PageActionImageView. Caller gets an ownership.
     virtual PageActionImageView* CreatePageActionImageView(
         LocationBarView* owner,
diff --git a/chrome/browser/ui/views/network_profile_bubble_view.cc b/chrome/browser/ui/views/network_profile_bubble_view.cc
index 32fab33b..d0dc53f 100644
--- a/chrome/browser/ui/views/network_profile_bubble_view.cc
+++ b/chrome/browser/ui/views/network_profile_bubble_view.cc
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/views/network_profile_bubble_view.h"
-
+#include "base/macros.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/layout_constants.h"
@@ -17,40 +16,42 @@
 #include "components/prefs/pref_service.h"
 #include "grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
-#include "ui/views/controls/button/label_button.h"
+#include "ui/views/bubble/bubble_dialog_delegate.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/controls/link.h"
-#include "ui/views/layout/grid_layout.h"
+#include "ui/views/controls/link_listener.h"
+#include "ui/views/layout/fill_layout.h"
 #include "ui/views/layout/layout_constants.h"
 
 namespace {
 
 // Bubble layout constants.
-const int kInset = 2;
 const int kNotificationBubbleWidth = 250;
 
-}  // namespace
+class NetworkProfileBubbleView : public views::BubbleDialogDelegateView,
+                                 public views::LinkListener {
+ public:
+  NetworkProfileBubbleView(views::View* anchor,
+                           content::PageNavigator* navigator,
+                           Profile* profile);
+ private:
+  ~NetworkProfileBubbleView() override;
 
-// static
-void NetworkProfileBubble::ShowNotification(Browser* browser) {
-  views::View* anchor = NULL;
-  BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
-  if (browser_view && browser_view->GetToolbarView())
-    anchor = browser_view->GetToolbarView()->app_menu_button();
-  NetworkProfileBubbleView* bubble =
-      new NetworkProfileBubbleView(anchor, browser, browser->profile());
-  views::BubbleDelegateView::CreateBubble(bubble)->Show();
-  NetworkProfileBubble::SetNotificationShown(true);
+  // views::BubbleDialogDelegateView:
+  void Init() override;
+  views::View* CreateExtraView() override;
+  int GetDialogButtons() const override;
+  bool Accept() override;
 
-  // Mark the time of the last bubble and reduce the number of warnings left
-  // before the next silence period starts.
-  PrefService* prefs = browser->profile()->GetPrefs();
-  prefs->SetInt64(prefs::kNetworkProfileLastWarningTime,
-                  base::Time::Now().ToTimeT());
-  int left_warnings = prefs->GetInteger(prefs::kNetworkProfileWarningsLeft);
-  if (left_warnings > 0)
-    prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, --left_warnings);
-}
+  // views::LinkListener:
+  void LinkClicked(views::Link* source, int event_flags) override;
+
+  // Used for loading pages.
+  content::PageNavigator* navigator_;
+  Profile* profile_;
+
+  DISALLOW_COPY_AND_ASSIGN(NetworkProfileBubbleView);
+};
 
 ////////////////////////////////////////////////////////////////////////////////
 // NetworkProfileBubbleView, public:
@@ -59,7 +60,7 @@
     views::View* anchor,
     content::PageNavigator* navigator,
     Profile* profile)
-    : BubbleDelegateView(anchor, views::BubbleBorder::TOP_RIGHT),
+    : BubbleDialogDelegateView(anchor, views::BubbleBorder::TOP_RIGHT),
       navigator_(navigator),
       profile_(profile) {
   // Compensate for built-in vertical padding in the anchor view's image.
@@ -74,51 +75,31 @@
 }
 
 void NetworkProfileBubbleView::Init() {
-  views::GridLayout* layout = views::GridLayout::CreatePanel(this);
-  layout->SetInsets(0, kInset, kInset, kInset);
-  SetLayoutManager(layout);
-
-  views::ColumnSet* columns = layout->AddColumnSet(0);
-  columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 0,
-                     views::GridLayout::USE_PREF, 0, 0);
-
-  layout->StartRow(0, 0);
-
-  views::Label* title = new views::Label(
+  SetLayoutManager(new views::FillLayout());
+  views::Label* label = new views::Label(
       l10n_util::GetStringFUTF16(IDS_PROFILE_ON_NETWORK_WARNING,
           l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
-  title->SetMultiLine(true);
-  title->SizeToFit(kNotificationBubbleWidth);
-  title->SetHorizontalAlignment(gfx::ALIGN_LEFT);
-  layout->AddView(title);
+  label->SetMultiLine(true);
+  label->SizeToFit(kNotificationBubbleWidth);
+  label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+  AddChildView(label);
+}
 
-  views::ColumnSet* bottom_columns = layout->AddColumnSet(1);
-  bottom_columns->AddColumn(views::GridLayout::CENTER,
-      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
-  bottom_columns->AddPaddingColumn(1, 0);
-  bottom_columns->AddColumn(views::GridLayout::CENTER,
-      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
-  layout->StartRowWithPadding(0, 1, 0,
-                              views::kRelatedControlSmallVerticalSpacing);
-
+views::View* NetworkProfileBubbleView::CreateExtraView() {
   views::Link* learn_more =
       new views::Link(l10n_util::GetStringUTF16(IDS_LEARN_MORE));
   learn_more->set_listener(this);
-  layout->AddView(learn_more);
-
-  views::LabelButton* ok_button = new views::LabelButton(
-      this, l10n_util::GetStringUTF16(IDS_OK));
-  ok_button->SetStyle(views::Button::STYLE_BUTTON);
-  ok_button->SetIsDefault(true);
-  layout->AddView(ok_button);
+  return learn_more;
 }
 
-void NetworkProfileBubbleView::ButtonPressed(views::Button* sender,
-                                             const ui::Event& event) {
+int NetworkProfileBubbleView::GetDialogButtons() const {
+  return ui::DIALOG_BUTTON_OK;
+}
+
+bool NetworkProfileBubbleView::Accept() {
   NetworkProfileBubble::RecordUmaEvent(
       NetworkProfileBubble::METRIC_ACKNOWLEDGED);
-
-  GetWidget()->Close();
+  return true;
 }
 
 void NetworkProfileBubbleView::LinkClicked(views::Link* source,
@@ -142,3 +123,27 @@
   prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, ++left_warnings);
   GetWidget()->Close();
 }
+
+}  // namespace
+
+// static
+void NetworkProfileBubble::ShowNotification(Browser* browser) {
+  views::View* anchor = NULL;
+  BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
+  if (browser_view && browser_view->GetToolbarView())
+    anchor = browser_view->GetToolbarView()->app_menu_button();
+  NetworkProfileBubbleView* bubble =
+      new NetworkProfileBubbleView(anchor, browser, browser->profile());
+  views::BubbleDialogDelegateView::CreateBubble(bubble)->Show();
+
+  NetworkProfileBubble::SetNotificationShown(true);
+
+  // Mark the time of the last bubble and reduce the number of warnings left
+  // before the next silence period starts.
+  PrefService* prefs = browser->profile()->GetPrefs();
+  prefs->SetInt64(prefs::kNetworkProfileLastWarningTime,
+                  base::Time::Now().ToTimeT());
+  int left_warnings = prefs->GetInteger(prefs::kNetworkProfileWarningsLeft);
+  if (left_warnings > 0)
+    prefs->SetInteger(prefs::kNetworkProfileWarningsLeft, --left_warnings);
+}
diff --git a/chrome/browser/ui/views/network_profile_bubble_view.h b/chrome/browser/ui/views/network_profile_bubble_view.h
deleted file mode 100644
index c349c12e..0000000
--- a/chrome/browser/ui/views/network_profile_bubble_view.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_NETWORK_PROFILE_BUBBLE_VIEW_H_
-#define CHROME_BROWSER_UI_VIEWS_NETWORK_PROFILE_BUBBLE_VIEW_H_
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "ui/views/bubble/bubble_delegate.h"
-#include "ui/views/controls/button/button.h"
-#include "ui/views/controls/link_listener.h"
-
-class Profile;
-
-namespace content {
-class PageNavigator;
-}
-
-class NetworkProfileBubbleView : public views::BubbleDelegateView,
-                                 public views::ButtonListener,
-                                 public views::LinkListener {
- public:
-  NetworkProfileBubbleView(views::View* anchor,
-                           content::PageNavigator* navigator,
-                           Profile* profile);
- private:
-  ~NetworkProfileBubbleView() override;
-
-  // views::BubbleDelegateView:
-  void Init() override;
-
-  // views::ButtonListener:
-  void ButtonPressed(views::Button* sender, const ui::Event& event) override;
-
-  // views::LinkListener:
-  void LinkClicked(views::Link* source, int event_flags) override;
-
-  // Used for loading pages.
-  content::PageNavigator* navigator_;
-  Profile* profile_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkProfileBubbleView);
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_NETWORK_PROFILE_BUBBLE_VIEW_H_
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index d632c9d..c2a1345 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -399,11 +399,6 @@
   chrome::ShowWebsiteSettings(browser_, web_contents, url, security_info);
 }
 
-views::Widget* ToolbarView::CreateViewsBubble(
-    views::BubbleDelegateView* bubble_delegate) {
-  return views::BubbleDelegateView::CreateBubble(bubble_delegate);
-}
-
 PageActionImageView* ToolbarView::CreatePageActionImageView(
     LocationBarView* owner, ExtensionAction* action) {
   return new PageActionImageView(owner, action, browser_);
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.h b/chrome/browser/ui/views/toolbar/toolbar_view.h
index c776828..2bffd23 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.h
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.h
@@ -112,8 +112,6 @@
   content::WebContents* GetWebContents() override;
   ToolbarModel* GetToolbarModel() override;
   const ToolbarModel* GetToolbarModel() const override;
-  views::Widget* CreateViewsBubble(
-      views::BubbleDelegateView* bubble_delegate) override;
   PageActionImageView* CreatePageActionImageView(
       LocationBarView* owner,
       ExtensionAction* action) override;
diff --git a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
index 95970ab..7638ae8 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
@@ -32,8 +32,6 @@
 #include "ui/views/bubble/bubble_delegate.h"
 #include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/controls/button/checkbox.h"
-#include "ui/views/controls/button/label_button.h"
-#include "ui/views/controls/button/label_button_border.h"
 #include "ui/views/controls/button/menu_button.h"
 #include "ui/views/controls/button/menu_button_listener.h"
 #include "ui/views/controls/combobox/combobox.h"
@@ -49,9 +47,6 @@
 // Spacing between major items should be 9px.
 const int kItemMajorSpacing = 9;
 
-// Button border size, draws inside the spacing distance.
-const int kButtonBorderSize = 2;
-
 // (Square) pixel size of icon.
 const int kIconSize = 18;
 
@@ -147,32 +142,33 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 // View implementation for the permissions bubble.
-class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
-                                      public views::ButtonListener,
-                                      public PermissionCombobox::Listener {
+class PermissionsBubbleDialogDelegateView
+    : public views::BubbleDialogDelegateView,
+      public PermissionCombobox::Listener {
  public:
-  PermissionsBubbleDelegateView(
+  PermissionsBubbleDialogDelegateView(
       views::View* anchor_view,
       views::BubbleBorder::Arrow anchor_arrow,
       PermissionBubbleViewViews* owner,
       const std::vector<PermissionBubbleRequest*>& requests,
       const std::vector<bool>& accept_state);
-  ~PermissionsBubbleDelegateView() override;
+  ~PermissionsBubbleDialogDelegateView() override;
 
-  void Close();
+  void CloseBubble();
   void SizeToContents();
 
-  // BubbleDelegateView:
+  // BubbleDialogDelegateView:
   bool ShouldShowCloseButton() const override;
-  bool ShouldShowWindowTitle() const override;
   const gfx::FontList& GetTitleFontList() const override;
   base::string16 GetWindowTitle() const override;
   void OnWidgetDestroying(views::Widget* widget) override;
   gfx::Size GetPreferredSize() const override;
   void GetAccessibleState(ui::AXViewState* state) override;
-
-  // ButtonListener:
-  void ButtonPressed(views::Button* button, const ui::Event& event) override;
+  bool Cancel() override;
+  bool Accept() override;
+  bool Close() override;
+  int GetDialogButtons() const override;
+  base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
 
   // PermissionCombobox::Listener:
   void PermissionSelectionChanged(int index, bool allowed) override;
@@ -184,28 +180,25 @@
 
  private:
   PermissionBubbleViewViews* owner_;
-  views::Button* allow_;
-  views::Button* deny_;
+  bool multiple_requests_;
   base::string16 display_origin_;
   scoped_ptr<PermissionMenuModel> menu_button_model_;
   std::vector<PermissionCombobox*> customize_comboboxes_;
 
-  DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDelegateView);
+  DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDialogDelegateView);
 };
 
-PermissionsBubbleDelegateView::PermissionsBubbleDelegateView(
+PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
     views::View* anchor_view,
     views::BubbleBorder::Arrow anchor_arrow,
     PermissionBubbleViewViews* owner,
     const std::vector<PermissionBubbleRequest*>& requests,
     const std::vector<bool>& accept_state)
-    : views::BubbleDelegateView(anchor_view, anchor_arrow),
+    : views::BubbleDialogDelegateView(anchor_view, anchor_arrow),
       owner_(owner),
-      allow_(nullptr),
-      deny_(nullptr) {
+      multiple_requests_(requests.size() > 1) {
   DCHECK(!requests.empty());
 
-  set_close_on_esc(true);
   set_close_on_deactivate(false);
 
   SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0,
@@ -263,115 +256,100 @@
 
     AddChildView(row);
   }
-
-  views::View* button_row = new views::View();
-  views::GridLayout* button_layout = new views::GridLayout(button_row);
-  views::ColumnSet* columns = button_layout->AddColumnSet(0);
-  button_row->SetLayoutManager(button_layout);
-  AddChildView(button_row);
-
-  // For multiple permissions: just an "OK" button.
-  if (requests.size() > 1) {
-    columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::FILL,
-                       100, views::GridLayout::USE_PREF, 0, 0);
-    button_layout->StartRowWithPadding(0, 0, 0, 4);
-    views::LabelButton* ok_button =
-        new views::LabelButton(this, l10n_util::GetStringUTF16(IDS_OK));
-    ok_button->SetStyle(views::Button::STYLE_BUTTON);
-    button_layout->AddView(ok_button);
-    allow_ = ok_button;
-    return;
-  }
-
-  // For a single permission: lay out the Deny/Allow buttons.
-  columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::FILL,
-                     100, views::GridLayout::USE_PREF, 0, 0);
-  columns->AddPaddingColumn(0, kItemMajorSpacing - (2*kButtonBorderSize));
-  columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::FILL,
-                     0, views::GridLayout::USE_PREF, 0, 0);
-  button_layout->StartRow(0, 0);
-
-  base::string16 allow_text = l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW);
-  views::LabelButton* allow_button = new views::LabelButton(this, allow_text);
-  allow_button->SetStyle(views::Button::STYLE_BUTTON);
-  button_layout->AddView(allow_button);
-  allow_ = allow_button;
-
-  base::string16 deny_text = l10n_util::GetStringUTF16(IDS_PERMISSION_DENY);
-  views::LabelButton* deny_button = new views::LabelButton(this, deny_text);
-  deny_button->SetStyle(views::Button::STYLE_BUTTON);
-  button_layout->AddView(deny_button);
-  deny_ = deny_button;
 }
 
-PermissionsBubbleDelegateView::~PermissionsBubbleDelegateView() {
+PermissionsBubbleDialogDelegateView::~PermissionsBubbleDialogDelegateView() {
   if (owner_)
     owner_->Closing();
 }
 
-void PermissionsBubbleDelegateView::Close() {
+void PermissionsBubbleDialogDelegateView::CloseBubble() {
   owner_ = nullptr;
   GetWidget()->Close();
 }
 
-bool PermissionsBubbleDelegateView::ShouldShowCloseButton() const {
+bool PermissionsBubbleDialogDelegateView::ShouldShowCloseButton() const {
   return true;
 }
 
-bool PermissionsBubbleDelegateView::ShouldShowWindowTitle() const {
-  return true;
-}
-
-const gfx::FontList& PermissionsBubbleDelegateView::GetTitleFontList() const {
+const gfx::FontList& PermissionsBubbleDialogDelegateView::GetTitleFontList()
+    const {
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   return rb.GetFontList(ui::ResourceBundle::BaseFont);
 }
 
-base::string16 PermissionsBubbleDelegateView::GetWindowTitle() const {
+base::string16 PermissionsBubbleDialogDelegateView::GetWindowTitle() const {
   return l10n_util::GetStringFUTF16(IDS_PERMISSIONS_BUBBLE_PROMPT,
                                     display_origin_);
 }
 
-void PermissionsBubbleDelegateView::SizeToContents() {
-  BubbleDelegateView::SizeToContents();
+void PermissionsBubbleDialogDelegateView::SizeToContents() {
+  BubbleDialogDelegateView::SizeToContents();
 }
 
-void PermissionsBubbleDelegateView::OnWidgetDestroying(views::Widget* widget) {
-  views::BubbleDelegateView::OnWidgetDestroying(widget);
+void PermissionsBubbleDialogDelegateView::OnWidgetDestroying(
+    views::Widget* widget) {
+  views::BubbleDialogDelegateView::OnWidgetDestroying(widget);
   if (owner_) {
     owner_->Closing();
     owner_ = nullptr;
   }
 }
 
-gfx::Size PermissionsBubbleDelegateView::GetPreferredSize() const {
+gfx::Size PermissionsBubbleDialogDelegateView::GetPreferredSize() const {
   // TODO(estade): bubbles should default to this width.
   const int kWidth = 320 - GetInsets().width();
   return gfx::Size(kWidth, GetHeightForWidth(kWidth));
 }
 
-void PermissionsBubbleDelegateView::GetAccessibleState(ui::AXViewState* state) {
-  views::BubbleDelegateView::GetAccessibleState(state);
+void PermissionsBubbleDialogDelegateView::GetAccessibleState(
+    ui::AXViewState* state) {
+  views::BubbleDialogDelegateView::GetAccessibleState(state);
   state->role = ui::AX_ROLE_ALERT_DIALOG;
 }
 
-void PermissionsBubbleDelegateView::ButtonPressed(views::Button* button,
-                                                  const ui::Event& event) {
-  if (!owner_)
-    return;
-
-  if (button == allow_)
-    owner_->Accept();
-  else if (button == deny_)
-    owner_->Deny();
+int PermissionsBubbleDialogDelegateView::GetDialogButtons() const {
+  int buttons = ui::DIALOG_BUTTON_OK;
+  if (!multiple_requests_)
+    buttons |= ui::DIALOG_BUTTON_CANCEL;
+  return buttons;
 }
 
-void PermissionsBubbleDelegateView::PermissionSelectionChanged(
-    int index, bool allowed) {
+base::string16 PermissionsBubbleDialogDelegateView::GetDialogButtonLabel(
+    ui::DialogButton button) const {
+  if (button == ui::DIALOG_BUTTON_CANCEL)
+    return l10n_util::GetStringUTF16(IDS_PERMISSION_DENY);
+
+  // The text differs based on whether OK is the only visible button.
+  return l10n_util::GetStringUTF16(GetDialogButtons() == ui::DIALOG_BUTTON_OK
+                                       ? IDS_OK
+                                       : IDS_PERMISSION_ALLOW);
+}
+
+bool PermissionsBubbleDialogDelegateView::Cancel() {
+  if (owner_)
+    owner_->Deny();
+  return true;
+}
+
+bool PermissionsBubbleDialogDelegateView::Accept() {
+  if (owner_)
+    owner_->Accept();
+  return true;
+}
+
+bool PermissionsBubbleDialogDelegateView::Close() {
+  // Neither explicit accept nor explicit deny.
+  return true;
+}
+
+void PermissionsBubbleDialogDelegateView::PermissionSelectionChanged(
+    int index,
+    bool allowed) {
   owner_->Toggle(index, allowed);
 }
 
-void PermissionsBubbleDelegateView::UpdateAnchor(
+void PermissionsBubbleDialogDelegateView::UpdateAnchor(
     views::View* anchor_view,
     views::BubbleBorder::Arrow anchor_arrow) {
   if (GetAnchorView() == anchor_view && arrow() == anchor_arrow)
@@ -381,7 +359,7 @@
 
   // Update the border in the bubble: will either add or remove the arrow.
   views::BubbleFrameView* frame =
-      views::BubbleDelegateView::GetBubbleFrameView();
+      views::BubbleDialogDelegateView::GetBubbleFrameView();
   views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow;
   if (base::i18n::IsRTL())
     adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow);
@@ -437,18 +415,17 @@
     const std::vector<PermissionBubbleRequest*>& requests,
     const std::vector<bool>& values) {
   if (bubble_delegate_)
-    bubble_delegate_->Close();
+    bubble_delegate_->CloseBubble();
 
-  bubble_delegate_ =
-      new PermissionsBubbleDelegateView(GetAnchorView(), GetAnchorArrow(), this,
-          requests, values);
+  bubble_delegate_ = new PermissionsBubbleDialogDelegateView(
+      GetAnchorView(), GetAnchorArrow(), this, requests, values);
 
   // Set |parent_window| because some valid anchors can become hidden.
   views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
       browser_->window()->GetNativeWindow());
   bubble_delegate_->set_parent_window(widget->GetNativeView());
 
-  views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show();
+  views::BubbleDialogDelegateView::CreateBubble(bubble_delegate_)->Show();
   bubble_delegate_->SizeToContents();
 }
 
@@ -458,7 +435,7 @@
 
 void PermissionBubbleViewViews::Hide() {
   if (bubble_delegate_) {
-    bubble_delegate_->Close();
+    bubble_delegate_->CloseBubble();
     bubble_delegate_ = nullptr;
   }
 }
diff --git a/chrome/browser/ui/views/website_settings/permissions_bubble_view.h b/chrome/browser/ui/views/website_settings/permissions_bubble_view.h
index a9d1836..ccc94de 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.h
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.h
@@ -17,7 +17,7 @@
 }
 
 class Browser;
-class PermissionsBubbleDelegateView;
+class PermissionsBubbleDialogDelegateView;
 
 class PermissionBubbleViewViews : public PermissionBubbleView {
  public:
@@ -45,7 +45,7 @@
 
   Browser* browser_;
   Delegate* delegate_;
-  PermissionsBubbleDelegateView* bubble_delegate_;
+  PermissionsBubbleDialogDelegateView* bubble_delegate_;
 
   DISALLOW_COPY_AND_ASSIGN(PermissionBubbleViewViews);
 };
diff --git a/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc
index da31e34..45a2d4c 100644
--- a/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/display_options_handler.cc
@@ -10,7 +10,6 @@
 #include <string>
 
 #include "ash/display/display_configuration_controller.h"
-#include "ash/display/display_layout_builder.h"
 #include "ash/display/display_manager.h"
 #include "ash/display/resolution_notification_controller.h"
 #include "ash/display/window_tree_host_manager.h"
@@ -29,6 +28,8 @@
 #include "content/public/browser/web_ui.h"
 #include "grit/ash_strings.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/display/manager/display_layout.h"
+#include "ui/display/manager/display_layout_builder.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size_conversions.h"
@@ -339,7 +340,7 @@
     js_display->Set("availableColorProfiles", available_color_profiles);
 
     if (display_manager->GetNumDisplays() > 1) {
-      const ash::DisplayPlacement placement =
+      const display::DisplayPlacement placement =
           display_manager->GetCurrentDisplayLayout().FindPlacementById(
               display.id());
       if (placement.display_id != gfx::Display::kInvalidDisplayID) {
@@ -409,7 +410,8 @@
   content::RecordAction(base::UserMetricsAction("Options_DisplayRearrange"));
 
   ash::DisplayManager* display_manager = GetDisplayManager();
-  ash::DisplayLayoutBuilder builder(display_manager->GetCurrentDisplayLayout());
+  display::DisplayLayoutBuilder builder(
+      display_manager->GetCurrentDisplayLayout());
   builder.ClearPlacements();
   for (const base::Value* layout : *layouts) {
     const base::DictionaryValue* dictionary;
@@ -435,11 +437,11 @@
 
     builder.AddDisplayPlacement(
         display_id, parent_id,
-        static_cast<ash::DisplayPlacement::Position>(position), offset);
+        static_cast<display::DisplayPlacement::Position>(position), offset);
   }
-  scoped_ptr<ash::DisplayLayout> layout = builder.Build();
-  if (!ash::DisplayLayout::Validate(display_manager->GetCurrentDisplayIdList(),
-                                    *layout)) {
+  scoped_ptr<display::DisplayLayout> layout = builder.Build();
+  if (!display::DisplayLayout::Validate(
+          display_manager->GetCurrentDisplayIdList(), *layout)) {
     LOG(ERROR) << "Invalid layout: " << layout->ToString();
     return;
   }
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index 57ec8ea..f57b988 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -1360,8 +1360,8 @@
 
 void PrintPreviewHandler::SendCloudPrintJob(const base::RefCountedBytes* data) {
   // BASE64 encode the job data.
-  std::string raw_data(reinterpret_cast<const char*>(data->front()),
-                       data->size());
+  const base::StringPiece raw_data(reinterpret_cast<const char*>(data->front()),
+                                   data->size());
   std::string base64_data;
   base::Base64Encode(raw_data, &base64_data);
   base::StringValue data_value(base64_data);
diff --git a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
index 8a957cdb..bb6d8e0 100644
--- a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
+++ b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
@@ -72,7 +72,9 @@
 void ManageProfileHandler::OnProfileAvatarChanged(
     const base::FilePath& profile_path) {
   // This is necessary to send the potentially updated GAIA photo.
-  SendAvailableIcons();
+  web_ui()->CallJavascriptFunction("cr.webUIListenerCallback",
+                                   base::StringValue("available-icons-changed"),
+                                   *GetAvailableIcons());
 }
 
 void ManageProfileHandler::HandleGetAvailableIcons(
@@ -86,11 +88,14 @@
 
   profiles::UpdateGaiaProfileInfoIfNeeded(profile_);
 
-  SendAvailableIcons();
+  CHECK_EQ(1U, args->GetSize());
+  const base::Value* callback_id;
+  CHECK(args->Get(0, &callback_id));
+  ResolveJavascriptCallback(*callback_id, *GetAvailableIcons());
 }
 
-void ManageProfileHandler::SendAvailableIcons() {
-  base::ListValue image_url_list;
+scoped_ptr<base::ListValue> ManageProfileHandler::GetAvailableIcons() {
+  scoped_ptr<base::ListValue> image_url_list(new base::ListValue());
 
   // First add the GAIA picture if it is available.
   ProfileAttributesEntry* entry;
@@ -100,19 +105,17 @@
     if (icon) {
       gfx::Image icon2 = profiles::GetAvatarIconForWebUI(*icon, true);
       gaia_picture_url_ = webui::GetBitmapDataUrl(icon2.AsBitmap());
-      image_url_list.AppendString(gaia_picture_url_);
+      image_url_list->AppendString(gaia_picture_url_);
     }
   }
 
   // Next add the default avatar icons and names.
   for (size_t i = 0; i < profiles::GetDefaultAvatarIconCount(); i++) {
     std::string url = profiles::GetDefaultAvatarIconUrl(i);
-    image_url_list.AppendString(url);
+    image_url_list->AppendString(url);
   }
 
-  web_ui()->CallJavascriptFunction("cr.webUIListenerCallback",
-                                   base::StringValue("available-icons-changed"),
-                                   image_url_list);
+  return image_url_list;
 }
 
 void ManageProfileHandler::HandleSetProfileIconAndName(
diff --git a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h
index 548e8c2..af260070 100644
--- a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h
+++ b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h
@@ -34,15 +34,16 @@
   void OnProfileAvatarChanged(const base::FilePath& profile_path) override;
 
  private:
-  FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest, SetProfileIconAndName);
-  FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest, GetAvailableIcons);
+  FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest,
+                           HandleSetProfileIconAndName);
+  FRIEND_TEST_ALL_PREFIXES(ManageProfileHandlerTest, HandleGetAvailableIcons);
 
   // Callback for the "getAvailableIcons" message.
   // Sends the array of default profile icon URLs and profile names to WebUI.
   void HandleGetAvailableIcons(const base::ListValue* args);
 
-  // Send all the available profile icons to choose from.
-  void SendAvailableIcons();
+  // Get all the available profile icons to choose from.
+  scoped_ptr<base::ListValue> GetAvailableIcons();
 
   // Callback for the "setProfileIconAndName" message. Sets the name and icon
   // of a given profile.
diff --git a/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc b/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc
index 7569be5..d960db2e 100644
--- a/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc
@@ -42,6 +42,19 @@
     handler_->set_web_ui(&web_ui_);
   }
 
+  void VerifyIconList(const base::Value* value) {
+    const base::ListValue* icon_urls = nullptr;
+    ASSERT_TRUE(value->GetAsList(&icon_urls));
+
+    // Expect the list of icon URLs to be a non-empty list of non-empty strings.
+    EXPECT_FALSE(icon_urls->empty());
+    for (size_t i = 0; i < icon_urls->GetSize(); ++i) {
+      std::string icon_url;
+      EXPECT_TRUE(icon_urls->GetString(i, &icon_url));
+      EXPECT_FALSE(icon_url.empty());
+    }
+  }
+
   content::TestWebUI* web_ui() { return &web_ui_; }
   Profile* profile() const { return profile_; }
   TestManageProfileHandler* handler() const { return handler_.get(); }
@@ -55,7 +68,7 @@
   scoped_ptr<TestManageProfileHandler> handler_;
 };
 
-TEST_F(ManageProfileHandlerTest, SetProfileIconAndName) {
+TEST_F(ManageProfileHandlerTest, HandleSetProfileIconAndName) {
   base::ListValue list_args;
   list_args.Append(
       new base::StringValue("chrome://theme/IDR_PROFILE_AVATAR_15"));
@@ -70,28 +83,36 @@
   EXPECT_EQ("New Profile Name", pref_service->GetString(prefs::kProfileName));
 }
 
-TEST_F(ManageProfileHandlerTest, GetAvailableIcons) {
-  handler()->HandleGetAvailableIcons(nullptr);
+TEST_F(ManageProfileHandlerTest, HandleGetAvailableIcons) {
+  base::ListValue list_args;
+  list_args.Append(new base::StringValue("get-icons-callback-id"));
+  handler()->HandleGetAvailableIcons(&list_args);
+
+  EXPECT_EQ(1U, web_ui()->call_data().size());
+
+  const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+  EXPECT_EQ("cr.webUIResponse", data.function_name());
+
+  std::string callback_id;
+  ASSERT_TRUE(data.arg1()->GetAsString(&callback_id));
+  EXPECT_EQ("get-icons-callback-id", callback_id);
+
+  VerifyIconList(data.arg3());
+}
+
+TEST_F(ManageProfileHandlerTest, ProfileAvatarChangedWebUIEvent) {
+  handler()->OnProfileAvatarChanged(base::FilePath());
 
   EXPECT_EQ(1U, web_ui()->call_data().size());
 
   const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
   EXPECT_EQ("cr.webUIListenerCallback", data.function_name());
 
-  std::string callback_id;
-  ASSERT_TRUE(data.arg1()->GetAsString(&callback_id));
-  EXPECT_EQ("available-icons-changed", callback_id);
+  std::string event_id;
+  ASSERT_TRUE(data.arg1()->GetAsString(&event_id));
+  EXPECT_EQ("available-icons-changed", event_id);
 
-  const base::ListValue* icon_urls = nullptr;
-  ASSERT_TRUE(data.arg2()->GetAsList(&icon_urls));
-
-  // Expect the list of icon URLs to be a non-empty list of non-empty strings.
-  EXPECT_FALSE(icon_urls->empty());
-  for (size_t i = 0; i < icon_urls->GetSize(); ++i) {
-    std::string icon_url;
-    EXPECT_TRUE(icon_urls->GetString(i, &icon_url));
-    EXPECT_FALSE(icon_url.empty());
-  }
+  VerifyIconList(data.arg2());
 }
 
 }  // namespace settings
diff --git a/chrome/cdb.isolate b/chrome/cdb.isolate
new file mode 100644
index 0000000..0b2f14a
--- /dev/null
+++ b/chrome/cdb.isolate
@@ -0,0 +1,14 @@
+# Copyright (c) 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+  'conditions': [
+    ['OS=="win"', {
+      'variables': {
+        'files': [
+          '<(PRODUCT_DIR)/cdb/',
+        ],
+      },
+    }],
+  ],
+}
diff --git a/chrome/chrome.isolate b/chrome/chrome.isolate
index 7bfbc62d..429aa47 100644
--- a/chrome/chrome.isolate
+++ b/chrome/chrome.isolate
@@ -46,6 +46,13 @@
         ],
       },
     }],
+    ['OS=="win" and (fastbuild==0 or fastbuild==1)', {
+      'variables': {
+        'files': [
+          '<(PRODUCT_DIR)/chrome<(EXECUTABLE_SUFFIX).pdb',
+        ],
+      },
+    }],
     ['disable_nacl==0 and (OS=="win" or (OS=="linux" and target_arch=="x64"))', {
       'variables': {
         'files': [
@@ -114,6 +121,13 @@
         ],
       },
     }],
+    ['OS=="win" and component=="static_library" and (fastbuild==0 or fastbuild==1)', {
+      'variables': {
+        'files': [
+          '<(PRODUCT_DIR)/chrome_child.dll.pdb',
+        ],
+      },
+    }],
     ['OS=="win" and kasko==1', {
       'variables': {
         'files': [
@@ -121,13 +135,6 @@
         ],
       },
     }],
-    ['OS=="win" and (fastbuild==0 or fastbuild==1)', {
-      'variables': {
-        'files': [
-          '<(PRODUCT_DIR)/chrome.exe.pdb',
-        ],
-      },
-    }],
     ['OS=="win" and component=="shared_library" and (fastbuild==0 or fastbuild==1)', {
       'variables': {
         'files': [
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index ec73df5..fd92749c 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -168,6 +168,8 @@
       'browser/component_updater/pnacl_component_installer.h',
       'browser/component_updater/recovery_component_installer.cc',
       'browser/component_updater/recovery_component_installer.h',
+      'browser/component_updater/sth_set_component_installer.cc',
+      'browser/component_updater/sth_set_component_installer.h',
       'browser/component_updater/supervised_user_whitelist_installer.cc',
       'browser/component_updater/supervised_user_whitelist_installer.h',
       'browser/component_updater/sw_reporter_installer_win.cc',
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index a727eda..40b5ec3 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -745,6 +745,8 @@
       'browser/ui/ash/launcher/arc_app_window_launcher_controller.h',
       'browser/ui/ash/launcher/arc_app_window_launcher_item_controller.cc',
       'browser/ui/ash/launcher/arc_app_window_launcher_item_controller.h',
+      'browser/ui/ash/launcher/arc_launcher_context_menu.cc',
+      'browser/ui/ash/launcher/arc_launcher_context_menu.h',
       'browser/ui/ash/launcher/launcher_arc_app_updater.cc',
       'browser/ui/ash/launcher/launcher_arc_app_updater.h',
     ],
@@ -2591,7 +2593,6 @@
       'browser/ui/views/frame/glass_browser_frame_view.h',
       'browser/ui/views/frame/native_browser_frame_factory_aurawin.cc',
       'browser/ui/views/network_profile_bubble_view.cc',
-      'browser/ui/views/network_profile_bubble_view.h',
       'browser/ui/views/uninstall_view.cc',
       'browser/ui/views/uninstall_view.h',
       'browser/ui/webui/conflicts_ui.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 4bed869..d29a158 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1014,6 +1014,7 @@
       'test/data/webui/settings/settings_page_browsertest.js',
       'test/data/webui/settings/settings_passwords_section_browsertest.js',
       'test/data/webui/settings/settings_subpage_browsertest.js',
+      'test/data/webui/text_defaults_browsertest.js',
       'test/data/webui/webui_resource_async_browsertest.js',
     ],
     # TODO(rockot) bug 505926: These should be moved to a target in
@@ -3265,6 +3266,12 @@
                 '../third_party/crashpad/crashpad/tools/tools.gyp:crashpad_database_util',
               ],
             }],
+            ['OS=="win"', {
+              'dependencies': [
+                # TODO(kbr): port this dependency to GN.
+                'copy_cdb_to_output',
+              ],
+            }],
           ],
         },
         {
@@ -3421,6 +3428,34 @@
         },
       ],
       'conditions': [
+        ['OS=="win"', {
+          'targets': [
+            {
+              # TODO(kbr): port this target to GN.
+              'target_name': 'copy_cdb_to_output',
+              'type': 'none',
+              'actions': [
+                {
+                  'action_name': 'copy_cdb',
+                  'inputs': [
+                    '<(DEPTH)/build/win/copy_cdb_to_output.py',
+                  ],
+                  'outputs': [
+                    '<(PRODUCT_DIR)/cdb/cdb.exe',
+                    '<(PRODUCT_DIR)/cdb/dbgeng.dll',
+                    '<(PRODUCT_DIR)/cdb/dbghelp.dll',
+                    '<(PRODUCT_DIR)/cdb/dbgmodel.dll',
+                  ],
+                  'action': ['python',
+                             '<(DEPTH)/build/win/copy_cdb_to_output.py',
+                             '<(PRODUCT_DIR)/cdb',
+                             '<(target_arch)'],
+                  'message': 'Copying cdb and deps to <(PRODUCT_DIR)/cdb',
+                },
+              ],
+            },
+          ],
+        }],
         ['archive_gpu_tests==1', {
           'targets': [
             {
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 096dc8d..084c7e8 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -66,6 +66,7 @@
       'browser/command_updater_unittest.cc',
       'browser/component_updater/chrome_component_updater_configurator_unittest.cc',
       'browser/component_updater/cld_component_installer_unittest.cc',
+      'browser/component_updater/sth_set_component_installer_unittest.cc',
       'browser/component_updater/supervised_user_whitelist_installer_unittest.cc',
       'browser/content_settings/content_settings_default_provider_unittest.cc',
       'browser/content_settings/content_settings_mock_observer.cc',
diff --git a/chrome/common/extensions/api/wallpaper_private.json b/chrome/common/extensions/api/wallpaper_private.json
index 5e8c27a..56b22d8 100644
--- a/chrome/common/extensions/api/wallpaper_private.json
+++ b/chrome/common/extensions/api/wallpaper_private.json
@@ -13,7 +13,7 @@
       {
         "id": "WallpaperSource",
         "type": "string",
-        "enum": [ "ONLINE", "OEM" ]
+        "enum": [ "ONLINE", "OEM", "DAILY", "CUSTOM" ]
       }
     ],
     "functions": [
@@ -254,6 +254,18 @@
             ]
           }
         ]
+      },
+      {
+        "name": "recordWallpaperUMA",
+        "type": "function",
+        "description": "Record wallpaper UMA when a new wallpaper is set, either by Wallpaper Picker App, or by a third party App.",
+        "nodoc": "true",
+        "parameters": [
+          {
+            "name": "source",
+            "$ref": "WallpaperSource"
+          }
+        ]
       }
     ],
     "events": [
diff --git a/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/display.html b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/display.html
new file mode 100644
index 0000000..2dfdc4f3
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/display.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Display Screenshot</title>
+    <style type="text/css">
+body {
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==');
+  margin: 0;
+}
+    </style>
+  </head>
+  <body>
+  </body>
+</html>
diff --git a/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/main.js b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/main.js
new file mode 100644
index 0000000..91816208
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/main.js
@@ -0,0 +1,12 @@
+// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+chrome.app.runtime.onLaunched.addListener(function() {
+  chrome.app.window.create('test.html', {
+    innerBounds: {
+      'width': 1280,
+      'height': 800
+    }
+  });
+});
diff --git a/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/manifest.json b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/manifest.json
new file mode 100644
index 0000000..6b27ec4
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/manifest.json
@@ -0,0 +1,22 @@
+{
+  "manifest_version": 2,
+  "name": "Webview transparency",
+  "description": "Sample of the webview.captureVisibleRegion api",
+  "version": "1",
+  "app": {
+    "background": {
+      "scripts": ["main.js"]
+    }
+  },
+  "permissions": [
+    "webview"
+  ],
+  "webview": {
+    "partitions": [
+      {
+        "name": "partition",
+        "accessible_resources": [ "test2.html" ]
+      }
+    ]
+  }
+}
diff --git a/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test.html b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test.html
new file mode 100644
index 0000000..b5d498048
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <script src="test.js"></script>
+<style type="text/css">
+.ib {
+  position: relative;
+  display: inline-block;
+}
+.controls {
+  margin: 4px;
+  position: absolute;
+  right: 0px;
+  top: 0px;
+}
+</style>
+  </head>
+  <body bgColor='teal'>
+    <br>
+    <button id="add_wv">Add webview</button>
+    <button id="delete_wv">Delete webview</button>
+    <span><input type="checkbox" id="transparent" checked="checked"><label for="transparent">Transparent</label></span>
+    <br>
+  </body>
+</html>
diff --git a/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test.js b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test.js
new file mode 100644
index 0000000..c5a92c9
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test.js
@@ -0,0 +1,95 @@
+// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+document.addEventListener('DOMContentLoaded', function() {
+
+  var deleteNode = function(node) {
+    node.parentNode.removeChild(node);
+  };
+
+  var deleteAWebview = function() {
+    deleteNode(document.querySelector('.ib'));
+  };
+
+  var findContainer = function(node) {
+    var container = node;
+    while (container && !container.classList.contains('ib')) {
+      container = container.parentElement;
+    }
+    return container;
+  };
+
+  var handleDelete = function(event) {
+    var container = findContainer(event.target);
+    if (container) {
+      deleteNode(container);
+    }
+  };
+
+  var viewScreenshot = function(wv) {
+    return function(data) {
+      chrome.app.window.create('display.html', {
+        innerBounds: { width: wv.clientWidth, height: wv.clientHeight }
+      },
+      function(aw) {
+        var d = aw.contentWindow.document;
+        d.addEventListener('DOMContentLoaded', function() {
+          var img = d.createElement('img');
+          img.src = data;
+          d.body.appendChild(img);
+        });
+      });
+    };
+  };
+
+  var handleScreenshot = function(event) {
+    var container = findContainer(event.target);
+    var wv = container.querySelector('webview');
+    wv.captureVisibleRegion({format:'png'}, viewScreenshot(wv));
+  };
+
+  var getControls = (function() {
+    var controls = document.createElement('div');
+    controls.className = 'controls';
+    controls.innerHTML = '<button id="screenshot">Screenshot</button>' +
+        '<button id="delete">Delete webview</button>';
+
+    return function() {
+      var c = controls.cloneNode(true);
+      c.querySelector('#delete').addEventListener('click', handleDelete);
+      c.querySelector('#screenshot').
+          addEventListener('click', handleScreenshot);
+      return c;
+    };
+  })();
+
+  var createWebview = (function(){
+    var id = 0;
+    return function() {
+      var wv = document.createElement('webview');
+      wv.partition = "partition";
+      wv.src = 'test2.html';
+      wv.allowtransparency = document.getElementById('transparent').checked;
+      wv.style.width = "640px";
+      wv.style.height = "480px";
+
+      var container = document.createElement('div');
+      container.id = 'wvid0' + id;
+      id++;
+
+      container.className = 'ib';
+
+      container.appendChild(wv);
+      container.appendChild(getControls());
+      return container;
+    };
+  })();
+
+  document.getElementById('delete_wv').
+      addEventListener('click', deleteAWebview);
+  document.getElementById('add_wv').
+      addEventListener('click', function() {
+        document.body.appendChild(createWebview());
+      });
+});
diff --git a/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test2.html b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test2.html
new file mode 100644
index 0000000..6d31d82
--- /dev/null
+++ b/chrome/common/extensions/docs/examples/api/webview/capturevisibleregion/test2.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+  <head></head>
+  <body>
+    Hello world!
+
+    <button id="newwindow" onclick="window.open('http://www.google.com/');">newwindow</button>
+  </body>
+</html>
diff --git a/chrome/test/base/chrome_unit_test_suite.cc b/chrome/test/base/chrome_unit_test_suite.cc
index 5942f49..cc735ba 100644
--- a/chrome/test/base/chrome_unit_test_suite.cc
+++ b/chrome/test/base/chrome_unit_test_suite.cc
@@ -61,6 +61,20 @@
     content_client_.reset();
     content::SetContentClient(NULL);
 
+    // AsyncPolicyProvider is a lazily created KeyedService that may need to be
+    // shut down here. However, AsyncPolicyProvider::Shutdown() will want to
+    // post tasks to delete its policy loaders. This goes through
+    // BrowserThreadTaskRunner::PostNonNestableDelayedTask(), which can invoke
+    // LazyInstance<BrowserThreadGlobals>::Get() and try to create it for the
+    // first time. It might be created during the test, but it might not (see
+    // comments in TestingBrowserProcess::browser_policy_connector()). Since
+    // creating BrowserThreadGlobals requires creating a SequencedWorkerPool,
+    // and that needs a MessageLoop, make sure there is one here so that tests
+    // don't get obscure errors. Tests can also invoke TestingBrowserProcess::
+    // DeleteInstance() themselves (after ensuring any TestingProfile instances
+    // are deleted). But they shouldn't have to worry about that.
+    DCHECK(!base::MessageLoop::current());
+    base::MessageLoopForUI message_loop;
     TestingBrowserProcess::DeleteInstance();
   }
 
diff --git a/chrome/test/base/testing_browser_process.cc b/chrome/test/base/testing_browser_process.cc
index 35dbb7b3..3e5b7288 100644
--- a/chrome/test/base/testing_browser_process.cc
+++ b/chrome/test/base/testing_browser_process.cc
@@ -150,6 +150,13 @@
     EXPECT_FALSE(created_browser_policy_connector_);
     created_browser_policy_connector_ = true;
     browser_policy_connector_ = platform_part_->CreateBrowserPolicyConnector();
+
+    // Note: creating the ChromeBrowserPolicyConnector invokes BrowserThread::
+    // GetMessageLoopProxyForThread(), which initializes a base::LazyInstance of
+    // BrowserThreadTaskRunners. However, the threads that these task runners
+    // would run tasks on are *also* created lazily and might not exist yet.
+    // Creating them requires a MessageLoop, which a test can optionally create
+    // and manage itself, so don't do it here.
   }
   return browser_policy_connector_.get();
 }
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index 9d254cb4..e759d74 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -796,13 +796,6 @@
   return GetDefaultStoragePartition(this)->GetURLRequestContext();
 }
 
-net::URLRequestContextGetter* TestingProfile::CreateRequestContext(
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  return new net::TestURLRequestContextGetter(
-            BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO));
-}
-
 net::URLRequestContextGetter* TestingProfile::GetMediaRequestContext() {
   return NULL;
 }
@@ -832,17 +825,6 @@
   return GetRequestContext()->GetURLRequestContext()->ssl_config_service();
 }
 
-net::URLRequestContextGetter*
-TestingProfile::CreateRequestContextForStoragePartition(
-    const base::FilePath& partition_path,
-    bool in_memory,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  // We don't test storage partitions here yet, so returning the same dummy
-  // context is sufficient for now.
-  return GetRequestContext();
-}
-
 content::ResourceContext* TestingProfile::GetResourceContext() {
   if (!resource_context_)
     resource_context_ = new content::MockResourceContext();
@@ -948,6 +930,24 @@
   return nullptr;
 }
 
+net::URLRequestContextGetter* TestingProfile::CreateRequestContext(
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return new net::TestURLRequestContextGetter(
+            BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO));
+}
+
+net::URLRequestContextGetter*
+TestingProfile::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  // We don't test storage partitions here yet, so returning the same dummy
+  // context is sufficient for now.
+  return GetRequestContext();
+}
+
 bool TestingProfile::WasCreatedByVersionOrLater(const std::string& version) {
   return true;
 }
diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h
index daab7ac..f42fb81 100644
--- a/chrome/test/base/testing_profile.h
+++ b/chrome/test/base/testing_profile.h
@@ -223,9 +223,6 @@
   bool IsOffTheRecord() const override;
   content::DownloadManagerDelegate* GetDownloadManagerDelegate() override;
   net::URLRequestContextGetter* GetRequestContext() override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   content::ResourceContext* GetResourceContext() override;
   content::BrowserPluginGuestManager* GetGuestManager() override;
   storage::SpecialStoragePolicy* GetSpecialStoragePolicy() override;
@@ -233,6 +230,14 @@
   content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   content::PermissionManager* GetPermissionManager() override;
   content::BackgroundSyncController* GetBackgroundSyncController() override;
+  net::URLRequestContextGetter* CreateRequestContext(
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
   TestingProfile* AsTestingProfile() override;
 
@@ -285,11 +290,6 @@
   net::URLRequestContextGetter* GetMediaRequestContextForStoragePartition(
       const base::FilePath& partition_path,
       bool in_memory) override;
-  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      const base::FilePath& partition_path,
-      bool in_memory,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   net::SSLConfigService* GetSSLConfigService() override;
   void set_last_session_exited_cleanly(bool value) {
     last_session_exited_cleanly_ = value;
diff --git a/chrome/test/base/web_ui_browser_test.cc b/chrome/test/base/web_ui_browser_test.cc
index d3498f14..a356b9f3 100644
--- a/chrome/test/base/web_ui_browser_test.cc
+++ b/chrome/test/base/web_ui_browser_test.cc
@@ -32,6 +32,7 @@
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_ui_controller.h"
 #include "content/public/browser/web_ui_message_handler.h"
+#include "content/public/common/url_constants.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "net/base/filename_util.h"
@@ -384,6 +385,8 @@
 
   test_factory_->AddFactoryOverride(GURL(kDummyURL).host(),
                                     mock_provider_.Pointer());
+  test_factory_->AddFactoryOverride(content::kChromeUIResourcesHost,
+                                    mock_provider_.Pointer());
 }
 
 void WebUIBrowserTest::TearDownOnMainThread() {
diff --git a/chrome/test/chromedriver/chrome/browser_info.cc b/chrome/test/chromedriver/chrome/browser_info.cc
index d70f82b..37340ae 100644
--- a/chrome/test/chromedriver/chrome/browser_info.cc
+++ b/chrome/test/chromedriver/chrome/browser_info.cc
@@ -20,21 +20,21 @@
 }  // namespace
 
 BrowserInfo::BrowserInfo()
-    : browser_name(std::string()),
-      browser_version(std::string()),
-      major_version(0),
+    : major_version(0),
       build_no(kToTBuildNo),
       blink_revision(kToTBlinkRevision),
       is_android(false) {
 }
 
-BrowserInfo::BrowserInfo(std::string browser_name,
+BrowserInfo::BrowserInfo(std::string android_package,
+                         std::string browser_name,
                          std::string browser_version,
                          int major_version,
                          int build_no,
                          int blink_revision,
                          bool is_android)
-    : browser_name(browser_name),
+    : android_package(android_package),
+      browser_name(browser_name),
       browser_version(browser_version),
       major_version(major_version),
       build_no(build_no),
@@ -52,6 +52,11 @@
     return Status(kUnknownError, "version info not a dictionary");
 
   bool has_android_package = dict->HasKey("Android-Package");
+  if (has_android_package) {
+    if (!dict->GetString("Android-Package", &browser_info->android_package))
+      return Status(kUnknownError, "'Android-Package' is not a string");
+  }
+
   std::string browser_string;
   if (!dict->GetString("Browser", &browser_string))
     return Status(kUnknownError, "version doesn't include 'Browser'");
diff --git a/chrome/test/chromedriver/chrome/browser_info.h b/chrome/test/chromedriver/chrome/browser_info.h
index f97215c4..abb9b3e 100644
--- a/chrome/test/chromedriver/chrome/browser_info.h
+++ b/chrome/test/chromedriver/chrome/browser_info.h
@@ -17,13 +17,15 @@
 
 struct BrowserInfo {
   BrowserInfo();
-  BrowserInfo(std::string browser_name_,
+  BrowserInfo(std::string android_package_,
+              std::string browser_name_,
               std::string browser_version_,
               int major_version_,
               int build_no_,
               int blink_revision_,
               bool is_android_);
 
+  std::string android_package;
   std::string browser_name;
   std::string browser_version;
   int major_version;
diff --git a/chrome/test/chromedriver/chrome_launcher.cc b/chrome/test/chromedriver/chrome_launcher.cc
index ce29f03..a8c6cc5 100644
--- a/chrome/test/chromedriver/chrome_launcher.cc
+++ b/chrome/test/chromedriver/chrome_launcher.cc
@@ -495,6 +495,14 @@
     return status;
   }
 
+  std::string package = devtools_http_client->browser_info()->android_package;
+  if (package != capabilities.android_package) {
+    device->TearDown();
+    return Status(
+        kSessionNotCreatedException,
+        base::StringPrintf("please close %s and try again", package.c_str()));
+  }
+
   scoped_ptr<DevToolsClient> devtools_websocket_client;
   status = CreateBrowserwideDevToolsClientAndConnect(
       NetAddress(port), capabilities.perf_logging_prefs, socket_factory,
diff --git a/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js b/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js
index eb9640e..61da30a5 100644
--- a/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js
+++ b/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js
@@ -204,6 +204,7 @@
         switch (key) {
           case Constants.AccessLocalSurpriseMeEnabledKey:
             items[Constants.AccessLocalSurpriseMeEnabledKey] = true;
+            break;
           case Constants.AccessLocalWallpaperInfoKey:
             if (TestConstants.isPowerwashed) {
               items[Constants.AccessLocalWallpaperInfoKey] = null;
@@ -214,6 +215,18 @@
                 'source': Constants.WallpaperSourceEnum.Custom
               };
             }
+            break;
+          case Constants.AccessLocalManifestKey:
+            items[Constants.AccessLocalManifestKey] = {
+              'wallpaper_list': [
+                {
+                  'available_for_surprise_me': true,
+                  'base_url': 'dummy',
+                  'default_layout': 'dummy'
+                }
+              ]
+            };
+            break;
         }
         callback(items);
       },
@@ -226,9 +239,11 @@
         switch (key) {
           case Constants.AccessSyncSurpriseMeEnabledKey:
             items[Constants.AccessSyncSurpriseMeEnabledKey] = true;
+            break;
           case Constants.AccessLastSurpriseWallpaperChangedDate:
             items[Constants.AccessLastSurpriseWallpaperChangedDate] =
                 new Date().toDateString();
+            break;
         }
         callback(items);
       },
diff --git a/chrome/test/data/chromeos/wallpaper_manager/unit_tests/event_page_unittest.js b/chrome/test/data/chromeos/wallpaper_manager/unit_tests/event_page_unittest.js
index 0ab021a..c79515a 100644
--- a/chrome/test/data/chromeos/wallpaper_manager/unit_tests/event_page_unittest.js
+++ b/chrome/test/data/chromeos/wallpaper_manager/unit_tests/event_page_unittest.js
@@ -5,12 +5,6 @@
 
 var mockController;
 
-WallpaperUtil.enabledSyncThemesCallback = function(callback) {
-  chrome.wallpaperPrivate.getSyncSetting(function(setting) {
-    callback(setting.syncThemes);
-  });
-};
-
 function setUp() {
   mockController = new MockController();
   installMockXMLHttpRequest();
@@ -125,3 +119,20 @@
 
   chrome.storage.onChanged.dispatch(changes);
 }
+
+// Test the surprise wallpaper's UMA stats is recorded correctly.
+function testSurpriseWallpaper() {
+  var mockSetWallpaperIfExists = mockController.createFunctionMock(
+      chrome.wallpaperPrivate, 'setWallpaperIfExists');
+  mockSetWallpaperIfExists.addExpectation(
+      'dummy_high_resolution.jpg',
+      'dummy');
+  mockSetWallpaperIfExists.callbackData = [true];
+
+  var mockRecordWallpaperUMA = mockController.createFunctionMock(
+      chrome.wallpaperPrivate, 'recordWallpaperUMA');
+  mockRecordWallpaperUMA.addExpectation(Constants.WallpaperSourceEnum.Daily);
+
+  var dateString = new Date().toDateString();
+  SurpriseWallpaper.getInstance().setRandomWallpaper_(dateString);
+}
diff --git a/chrome/test/data/extensions/api_test/wallpaper/test.js b/chrome/test/data/extensions/api_test/wallpaper/test.js
index 827ceab..9302d1bb 100644
--- a/chrome/test/data/extensions/api_test/wallpaper/test.js
+++ b/chrome/test/data/extensions/api_test/wallpaper/test.js
@@ -96,8 +96,11 @@
                               expectError);
     },
     function newRequestCancelPreviousRequest() {
-      // The first request should be canceled.
-      testSetWallpaperFromURL('test.png',
+      // The first request should be canceled. The wallpaper in the first
+      // request is chosen from one of the high-resolution built-in wallpapers
+      // to make sure the first setWallpaper request hasn't finished yet when
+      // the second request sends out.
+      testSetWallpaperFromURL('test_image_high_resolution.jpg',
                               false,
                               'Set wallpaper was canceled.');
       testSetWallpaperFromURL('test.jpg', true);
diff --git a/chrome/test/data/extensions/api_test/wallpaper/test_image_high_resolution.jpg b/chrome/test/data/extensions/api_test/wallpaper/test_image_high_resolution.jpg
new file mode 100644
index 0000000..8abc2d60
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/wallpaper/test_image_high_resolution.jpg
Binary files differ
diff --git a/chrome/test/data/webui/text_defaults_browsertest.js b/chrome/test/data/webui/text_defaults_browsertest.js
new file mode 100644
index 0000000..47491bb
--- /dev/null
+++ b/chrome/test/data/webui/text_defaults_browsertest.js
@@ -0,0 +1,59 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * Test fixture for testing async methods of cr.js.
+ * @constructor
+ * @extends testing.Test
+ */
+function TextDefaultsTest() {}
+
+TextDefaultsTest.prototype = {
+  __proto__: testing.Test.prototype,
+
+  /**
+   * Must be on same domain as text_defaults.css (chrome://resources).
+   * @override
+   */
+  browsePreload: 'chrome://resources/html/assert.html',
+
+  /** @override */
+  isAsync: true,
+};
+
+/**
+ * @param {string} html Text, possibly with HTML &entities; in it.
+ * @return {string} The HTML decoded text.
+ */
+function decodeHtmlEntities(html) {
+  var element = document.createElement('div');
+  element.innerHTML = html;
+  return element.textContent;
+}
+
+TEST_F('TextDefaultsTest', 'ScrapeStyles', function() {
+  var link = document.createElement('link');
+  link.rel = 'stylesheet';
+  link.href = 'chrome://resources/css/text_defaults.css';
+  link.onload = function() {
+    var fontFamily = link.sheet.rules[1].style['font-family'];
+    assertNotEquals('', fontFamily);
+    assertEquals(decodeHtmlEntities(fontFamily), fontFamily);
+    testDone();
+  };
+  document.body.appendChild(link);
+});
+
+TEST_F('TextDefaultsTest', 'ScrapeMDStyles', function() {
+  var link = document.createElement('link');
+  link.rel = 'stylesheet';
+  link.href = 'chrome://resources/css/text_defaults_md.css';
+  link.onload = function() {
+    var fontFamily = link.sheet.rules[2].style['font-family'];
+    assertNotEquals('', fontFamily);
+    assertEquals(decodeHtmlEntities(fontFamily), fontFamily);
+    testDone();
+  };
+  document.body.appendChild(link);
+});
diff --git a/chromecast/browser/cast_browser_context.cc b/chromecast/browser/cast_browser_context.cc
index de508a9..b229b66 100644
--- a/chromecast/browser/cast_browser_context.cc
+++ b/chromecast/browser/cast_browser_context.cc
@@ -154,5 +154,21 @@
   return nullptr;
 }
 
+net::URLRequestContextGetter* CastBrowserContext::CreateRequestContext(
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return url_request_context_factory_->CreateMainGetter(
+      this, protocol_handlers, std::move(request_interceptors));
+}
+
+net::URLRequestContextGetter*
+CastBrowserContext::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return nullptr;
+}
+
 }  // namespace shell
 }  // namespace chromecast
diff --git a/chromecast/browser/cast_browser_context.h b/chromecast/browser/cast_browser_context.h
index a7b108f..cd366d4 100644
--- a/chromecast/browser/cast_browser_context.h
+++ b/chromecast/browser/cast_browser_context.h
@@ -45,6 +45,14 @@
   content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   content::PermissionManager* GetPermissionManager() override;
   content::BackgroundSyncController* GetBackgroundSyncController() override;
+  net::URLRequestContextGetter* CreateRequestContext(
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
   net::URLRequestContextGetter* GetSystemRequestContext();
 
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc
index 70881c6..189b411 100644
--- a/chromecast/browser/cast_content_browser_client.cc
+++ b/chromecast/browser/cast_content_browser_client.cc
@@ -188,14 +188,6 @@
   host->AddFilter(network_hints_message_filter.get());
 }
 
-net::URLRequestContextGetter* CastContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  return url_request_context_factory_->CreateMainGetter(
-      browser_context, protocol_handlers, std::move(request_interceptors));
-}
-
 bool CastContentBrowserClient::IsHandledURL(const GURL& url) {
   if (!url.is_valid())
     return false;
diff --git a/chromecast/browser/cast_content_browser_client.h b/chromecast/browser/cast_content_browser_client.h
index 31d6e57..c57b5a8 100644
--- a/chromecast/browser/cast_content_browser_client.h
+++ b/chromecast/browser/cast_content_browser_client.h
@@ -96,11 +96,6 @@
   content::BrowserMainParts* CreateBrowserMainParts(
       const content::MainFunctionParams& parameters) override;
   void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors)
-      override;
   bool IsHandledURL(const GURL& url) override;
   void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
                                       int child_process_id) override;
diff --git a/chromecast/browser/url_request_context_factory.h b/chromecast/browser/url_request_context_factory.h
index 31bbf14..6bd2342 100644
--- a/chromecast/browser/url_request_context_factory.h
+++ b/chromecast/browser/url_request_context_factory.h
@@ -5,6 +5,7 @@
 #ifndef CHROMECAST_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_
 #define CHROMECAST_BROWSER_URL_REQUEST_CONTEXT_FACTORY_H_
 
+#include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
 #include "net/http/http_network_session.h"
 
diff --git a/chromeos/system/statistics_provider.cc b/chromeos/system/statistics_provider.cc
index b1e0b13..276feafd 100644
--- a/chromeos/system/statistics_provider.cc
+++ b/chromeos/system/statistics_provider.cc
@@ -45,6 +45,9 @@
 const char kHardwareClassCrosSystemKey[] = "hwid";
 const char kUnknownHardwareClass[] = "unknown";
 
+// File to get system vendor information from.
+const char kSystemVendorFile[] = "/sys/class/dmi/id/sys_vendor";
+
 // Key/value delimiters of machine hardware info file. machine-info is generated
 // only for OOBE and enterprise enrollment and may not be present. See
 // login-manager/init/machine-info.conf.
@@ -153,6 +156,7 @@
 const char kFirmwareTypeValueNonchrome[] = "nonchrome";
 const char kFirmwareTypeValueNormal[] = "normal";
 const char kHardwareClassKey[] = "hardware_class";
+const char kSystemVendorKey[] = "system_vendor";
 const char kOffersCouponCodeKey[] = "ubind_attribute";
 const char kOffersGroupCodeKey[] = "gbind_attribute";
 const char kRlzBrandCodeKey[] = "rlz_brand_code";
@@ -441,6 +445,12 @@
     }
   }
 
+  if (base::SysInfo::IsRunningOnChromeOS()) {
+    std::string system_vendor;
+    base::ReadFileToString(base::FilePath(kSystemVendorFile), &system_vendor);
+    machine_info_[kSystemVendorKey] = system_vendor;
+  }
+
   parser.GetNameValuePairsFromFile(machine_info_path,
                                    kMachineHardwareInfoEq,
                                    kMachineHardwareInfoDelim);
diff --git a/chromeos/system/statistics_provider.h b/chromeos/system/statistics_provider.h
index c1b725a..4863e11 100644
--- a/chromeos/system/statistics_provider.h
+++ b/chromeos/system/statistics_provider.h
@@ -41,6 +41,11 @@
 // HWID key.
 CHROMEOS_EXPORT extern const char kHardwareClassKey[];
 
+// System vendor key.
+// The value is used to check if Chrome is running on a VM or a real Chrome OS
+// device. On QEMU VMs this value is QEMU.
+CHROMEOS_EXPORT extern const char kSystemVendorKey[];
+
 // OEM customization flag that permits exiting enterprise enrollment flow in
 // OOBE when 'oem_enterprise_managed' flag is set.
 CHROMEOS_EXPORT extern const char kOemCanExitEnterpriseEnrollmentKey[];
diff --git a/components/bitmap_uploader/DEPS b/components/bitmap_uploader/DEPS
index d24de36..83f38a0 100644
--- a/components/bitmap_uploader/DEPS
+++ b/components/bitmap_uploader/DEPS
@@ -6,6 +6,5 @@
   "+mojo/converters/geometry",
   "+mojo/converters/surfaces",
   "+mojo/public",
-  "+mojo/services/network/public/interfaces",
   "+ui/gfx/geometry",
 ]
diff --git a/components/component_updater/component_updater_paths.cc b/components/component_updater/component_updater_paths.cc
index 834b1cf..697d8def 100644
--- a/components/component_updater/component_updater_paths.cc
+++ b/components/component_updater/component_updater_paths.cc
@@ -47,6 +47,9 @@
     case DIR_SUPERVISED_USER_WHITELISTS:
       cur = cur.Append(FILE_PATH_LITERAL("SupervisedUserWhitelists"));
       break;
+    case DIR_CERT_TRANS_TREE_STATES:
+      cur = cur.Append(FILE_PATH_LITERAL("CertificateTransparency"));
+      break;
     default:
       return false;
   }
diff --git a/components/component_updater/component_updater_paths.h b/components/component_updater/component_updater_paths.h
index 7b8fd6e1..994353ce 100644
--- a/components/component_updater/component_updater_paths.h
+++ b/components/component_updater/component_updater_paths.h
@@ -19,6 +19,7 @@
   DIR_SW_REPORTER,                  // Path to the SwReporter component.
   DIR_COMPONENT_EV_WHITELIST,       // EV whitelist for CT files.
   DIR_SUPERVISED_USER_WHITELISTS,   // Supervised user whitelists.
+  DIR_CERT_TRANS_TREE_STATES,       // Signed Tree Heads for CT logs.
   PATH_END
 };
 
diff --git a/components/component_updater/default_component_installer.cc b/components/component_updater/default_component_installer.cc
index 8f5bba6..cb40ea2 100644
--- a/components/component_updater/default_component_installer.cc
+++ b/components/component_updater/default_component_installer.cc
@@ -286,7 +286,8 @@
 
 void DefaultComponentInstaller::ComponentReady(
     scoped_ptr<base::DictionaryValue> manifest) {
-  VLOG(1) << "ComponentReady";
+  VLOG(1) << "Component ready, version " << current_version_.GetString()
+          << " in " << GetInstallDirectory().value();
   installer_traits_->ComponentReady(current_version_, GetInstallDirectory(),
                                     std::move(manifest));
 }
diff --git a/components/components_tests.gyp b/components/components_tests.gyp
index b502a71e3..36eae94 100644
--- a/components/components_tests.gyp
+++ b/components/components_tests.gyp
@@ -358,6 +358,7 @@
       'metrics/file_metrics_provider_unittest.cc',
       'metrics/histogram_encoder_unittest.cc',
       'metrics/machine_id_provider_win_unittest.cc',
+      'metrics/data_use_tracker_unittest.cc',
       'metrics/metrics_log_manager_unittest.cc',
       'metrics/metrics_log_unittest.cc',
       'metrics/metrics_reporting_scheduler_unittest.cc',
diff --git a/components/cronet/android/api/src/org/chromium/net/CronetEngine.java b/components/cronet/android/api/src/org/chromium/net/CronetEngine.java
index b92afc3..07e04b4 100644
--- a/components/cronet/android/api/src/org/chromium/net/CronetEngine.java
+++ b/components/cronet/android/api/src/org/chromium/net/CronetEngine.java
@@ -728,7 +728,8 @@
     public abstract void shutdown();
 
     /**
-     * Starts NetLog logging to a file. The NetLog is useful for debugging.
+     * Starts NetLog logging to a file. The NetLog will contain events emitted
+     * by all live CronetEngines. The NetLog is useful for debugging.
      * The file can be viewed using a Chrome browser navigated to
      * chrome://net-internals/#import
      * @param fileName the complete file path. It must not be empty. If the file
diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_url_request_context_adapter.cc
index 8242f0a..883cdc68 100644
--- a/components/cronet/android/cronet_url_request_context_adapter.cc
+++ b/components/cronet/android/cronet_url_request_context_adapter.cc
@@ -17,6 +17,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_file.h"
+#include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/scoped_vector.h"
@@ -57,6 +58,10 @@
 
 namespace {
 
+// Use a global NetLog instance. See crbug.com/486120.
+static base::LazyInstance<net::NetLog>::Leaky g_net_log =
+    LAZY_INSTANCE_INITIALIZER;
+
 const char kHttpServerProperties[] = "net.http_server_properties";
 // Current version of disk storage.
 const int32_t kStorageVersion = 1;
@@ -480,7 +485,6 @@
   context_builder.set_http_network_session_params(
       custom_http_network_session_params);
 
-  net_log_.reset(new net::NetLog);
   scoped_ptr<net::NetworkDelegate> network_delegate(new BasicNetworkDelegate());
 #if defined(DATA_REDUCTION_PROXY_SUPPORT)
   DCHECK(!data_reduction_proxy_);
@@ -491,7 +495,7 @@
         config->data_reduction_proxy_key, config->data_reduction_primary_proxy,
         config->data_reduction_fallback_proxy,
         config->data_reduction_secure_proxy_check_url, config->user_agent,
-        GetNetworkTaskRunner(), net_log_.get()));
+        GetNetworkTaskRunner(), g_net_log.Pointer()));
     network_delegate = data_reduction_proxy_->CreateNetworkDelegate(
         std::move(network_delegate));
     context_builder.set_proxy_delegate(
@@ -502,17 +506,17 @@
   }
 #endif  // defined(DATA_REDUCTION_PROXY_SUPPORT)
   context_builder.set_network_delegate(std::move(network_delegate));
-  context_builder.set_net_log(net_log_.get());
+  context_builder.set_net_log(g_net_log.Pointer());
 
   // Android provides a local HTTP proxy server that handles proxying when a PAC
   // URL is present. Create a proxy service without a resolver and rely on this
   // local HTTP proxy. See: crbug.com/432539.
   context_builder.set_proxy_service(
       net::ProxyService::CreateWithoutProxyResolver(
-          std::move(proxy_config_service_), net_log_.get()));
+          std::move(proxy_config_service_), g_net_log.Pointer()));
 
-  config->ConfigureURLRequestContextBuilder(&context_builder, net_log_.get(),
-                                            GetFileThread()->task_runner());
+  config->ConfigureURLRequestContextBuilder(
+      &context_builder, g_net_log.Pointer(), GetFileThread()->task_runner());
 
   // Set up pref file if storage path is specified.
   if (!config->storage_path.empty()) {
diff --git a/components/cronet/android/cronet_url_request_context_adapter.h b/components/cronet/android/cronet_url_request_context_adapter.h
index 81c07ddd..81d865c 100644
--- a/components/cronet/android/cronet_url_request_context_adapter.h
+++ b/components/cronet/android/cronet_url_request_context_adapter.h
@@ -166,7 +166,6 @@
   // |pref_service_| should outlive the HttpServerPropertiesManager owned by
   // |context_|.
   scoped_ptr<PrefService> pref_service_;
-  scoped_ptr<net::NetLog> net_log_;
   scoped_ptr<net::URLRequestContext> context_;
   scoped_ptr<net::ProxyConfigService> proxy_config_service_;
   scoped_refptr<JsonPrefStore> json_pref_store_;
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
index c55b974..51aa9824 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
@@ -45,6 +45,7 @@
     private EmbeddedTestServer mTestServer;
     private String mUrl;
     private String mUrl404;
+    private String mUrl500;
     CronetTestFramework mTestFramework;
 
     @Override
@@ -53,6 +54,7 @@
         mTestServer = EmbeddedTestServer.createAndStartDefaultServer(getContext());
         mUrl = mTestServer.getURL("/echo?status=200");
         mUrl404 = mTestServer.getURL("/echo?status=404");
+        mUrl500 = mTestServer.getURL("/echo?status=500");
     }
 
     @Override
@@ -620,6 +622,94 @@
 
     @SmallTest
     @Feature({"Cronet"})
+    @OnlyRunNativeCronet
+    // Tests that NetLog contains events emitted by all live CronetEngines.
+    public void testNetLogContainEventsFromAllLiveEngines() throws Exception {
+        Context context = getContext();
+        File directory = new File(PathUtils.getDataDirectory(context));
+        File file1 = File.createTempFile("cronet1", "json", directory);
+        File file2 = File.createTempFile("cronet2", "json", directory);
+        CronetEngine cronetEngine1 = new CronetUrlRequestContext(
+                new CronetEngine.Builder(context).setLibraryName("cronet_tests"));
+        CronetEngine cronetEngine2 = new CronetUrlRequestContext(
+                new CronetEngine.Builder(context).setLibraryName("cronet_tests"));
+
+        cronetEngine1.startNetLogToFile(file1.getPath(), false);
+        cronetEngine2.startNetLogToFile(file2.getPath(), false);
+
+        // Warm CronetEngine and make sure both CronetUrlRequestContexts are
+        // initialized before testing the logs.
+        makeRequestAndCheckStatus(cronetEngine1, mUrl, 200);
+        makeRequestAndCheckStatus(cronetEngine2, mUrl, 200);
+
+        // Use cronetEngine1 to make a request to mUrl404.
+        makeRequestAndCheckStatus(cronetEngine1, mUrl404, 404);
+
+        // Use cronetEngine2 to make a request to mUrl500.
+        makeRequestAndCheckStatus(cronetEngine2, mUrl500, 500);
+
+        cronetEngine1.stopNetLog();
+        cronetEngine2.stopNetLog();
+        assertTrue(file1.exists());
+        assertTrue(file2.exists());
+        // Make sure both files contain the two requests made separately using
+        // different engines.
+        assertTrue(containsStringInNetLog(file1, mUrl404));
+        assertTrue(containsStringInNetLog(file1, mUrl500));
+        assertTrue(containsStringInNetLog(file2, mUrl404));
+        assertTrue(containsStringInNetLog(file2, mUrl500));
+        assertTrue(file1.delete());
+        assertTrue(file2.delete());
+    }
+
+    @SmallTest
+    @Feature({"Cronet"})
+    @OnlyRunNativeCronet
+    // Tests that if CronetEngine is shut down when reading from disk cache,
+    // there isn't a crash. See crbug.com/486120.
+    public void testShutDownEngineWhenReadingFromDiskCache() throws Exception {
+        enableCache(CronetEngine.Builder.HTTP_CACHE_DISK);
+        String url = NativeTestServer.getFileURL("/cacheable.txt");
+        // Make a request to a cacheable resource.
+        checkRequestCaching(url, false);
+
+        // Shut down the server.
+        NativeTestServer.shutdownNativeTestServer();
+        class CancelUrlRequestCallback extends TestUrlRequestCallback {
+            @Override
+            public void onResponseStarted(UrlRequest request, UrlResponseInfo info) {
+                super.onResponseStarted(request, info);
+                request.cancel();
+                // Shut down CronetEngine immediately after request is destroyed.
+                mTestFramework.mCronetEngine.shutdown();
+            }
+
+            @Override
+            public void onSucceeded(UrlRequest request, UrlResponseInfo info) {
+                // onSucceeded will not happen, because the request is canceled
+                // after sending first read and the executor is single threaded.
+                throw new RuntimeException("Unexpected");
+            }
+
+            @Override
+            public void onFailed(
+                    UrlRequest request, UrlResponseInfo info, UrlRequestException error) {
+                throw new RuntimeException("Unexpected");
+            }
+        }
+        CancelUrlRequestCallback callback = new CancelUrlRequestCallback();
+        UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
+                url, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
+        urlRequestBuilder.build().start();
+        callback.blockForDone();
+        assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
+        assertTrue(callback.mResponseInfo.wasCached());
+        assertTrue(callback.mOnCanceledCalled);
+    }
+
+    @SmallTest
+    @Feature({"Cronet"})
+    @OnlyRunNativeCronet
     public void testNetLogAfterShutdown() throws Exception {
         mTestFramework = startCronetTestFramework();
         TestUrlRequestCallback callback = new TestUrlRequestCallback();
@@ -719,11 +809,15 @@
     }
 
     private boolean hasBytesInNetLog(File logFile) throws Exception {
+        return containsStringInNetLog(logFile, "\"hex_encoded_bytes\"");
+    }
+
+    private boolean containsStringInNetLog(File logFile, String content) throws Exception {
         BufferedReader logReader = new BufferedReader(new FileReader(logFile));
         try {
             String logLine;
             while ((logLine = logReader.readLine()) != null) {
-                if (logLine.contains("\"hex_encoded_bytes\"")) {
+                if (logLine.contains(content)) {
                     return true;
                 }
             }
@@ -733,6 +827,20 @@
         }
     }
 
+    /**
+     * Helper method to make a request to {@code url}, wait for it to
+     * complete, and check that the status code is the same as {@code expectedStatusCode}.
+     */
+    private void makeRequestAndCheckStatus(
+            CronetEngine engine, String url, int expectedStatusCode) {
+        TestUrlRequestCallback callback = new TestUrlRequestCallback();
+        UrlRequest request =
+                new UrlRequest.Builder(url, callback, callback.getExecutor(), engine).build();
+        request.start();
+        callback.blockForDone();
+        assertEquals(expectedStatusCode, callback.mResponseInfo.getHttpStatusCode());
+    }
+
     private void enableCache(int cacheType) throws Exception {
         String cacheTypeString = "";
         if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK) {
@@ -762,6 +870,7 @@
         urlRequestBuilder.build().start();
         callback.blockForDone();
         assertEquals(expectCached, callback.mResponseInfo.wasCached());
+        assertEquals("this is a cacheable file\n", callback.mResponseAsString);
     }
 
     @SmallTest
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java
index 38ef644..327e798 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java
@@ -8,7 +8,6 @@
 
 import org.chromium.base.FileUtils;
 import org.chromium.base.PathUtils;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 
 import java.io.BufferedReader;
@@ -45,7 +44,6 @@
     @Feature({"Cronet"})
     @OnlyRunNativeCronet
     // Crashing on Android Cronet Builder, see crbug.com/601409.
-    @DisabledTest
     public void testReadOnlyStorageDirectory() throws Exception {
         mReadOnlyStoragePath = PathUtils.getDataDirectory(getContext()) + "/read_only";
         File readOnlyStorage = new File(mReadOnlyStoragePath);
@@ -90,7 +88,6 @@
     @Feature({"Cronet"})
     @OnlyRunNativeCronet
     // Crashing on Android Cronet Builder, see crbug.com/601409.
-    @DisabledTest
     public void testPurgeOldVersion() throws Exception {
         String testStorage = CronetTestFramework.getTestStorage(getContext());
         File versionFile = new File(testStorage + "/version");
diff --git a/components/data_use_measurement/content/BUILD.gn b/components/data_use_measurement/content/BUILD.gn
index 3f7c06ed..f4a7f64 100644
--- a/components/data_use_measurement/content/BUILD.gn
+++ b/components/data_use_measurement/content/BUILD.gn
@@ -10,6 +10,7 @@
   deps = [
     "//base",
     "//components/data_use_measurement/core",
+    "//components/metrics",
     "//content/public/browser",
     "//net",
   ]
diff --git a/components/data_use_measurement/content/DEPS b/components/data_use_measurement/content/DEPS
index 75cbca33..06cbe67 100644
--- a/components/data_use_measurement/content/DEPS
+++ b/components/data_use_measurement/content/DEPS
@@ -3,4 +3,5 @@
   "+net",
   "+testing",
   "+url",
+  "+components/metrics",
 ]
diff --git a/components/data_use_measurement/content/data_use_measurement.cc b/components/data_use_measurement/content/data_use_measurement.cc
index 23f916c6..31b3eb3 100644
--- a/components/data_use_measurement/content/data_use_measurement.cc
+++ b/components/data_use_measurement/content/data_use_measurement.cc
@@ -44,9 +44,12 @@
 
 }  // namespace
 
-DataUseMeasurement::DataUseMeasurement()
+DataUseMeasurement::DataUseMeasurement(
+    const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder)
+    : metrics_data_use_forwarder_(metrics_data_use_forwarder)
 #if defined(OS_ANDROID)
-    : app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES),
+      ,
+      app_state_(base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES),
       app_listener_(new base::android::ApplicationStatusListener(
           base::Bind(&DataUseMeasurement::OnApplicationStateChange,
                      base::Unretained(this))))
@@ -75,26 +78,37 @@
   int64_t total_upload_bytes = request->GetTotalSentBytes();
   int64_t total_received_bytes = request->GetTotalReceivedBytes();
 
+  bool is_connection_cellular =
+      net::NetworkChangeNotifier::IsConnectionCellular(
+          net::NetworkChangeNotifier::GetConnectionType());
   RecordUMAHistogramCount(
       GetHistogramName(is_user_traffic ? "DataUse.TrafficSize.User"
                                        : "DataUse.TrafficSize.System",
-                       UPSTREAM),
+                       UPSTREAM, is_connection_cellular),
       total_upload_bytes);
   RecordUMAHistogramCount(
       GetHistogramName(is_user_traffic ? "DataUse.TrafficSize.User"
                                        : "DataUse.TrafficSize.System",
-                       DOWNSTREAM),
+                       DOWNSTREAM, is_connection_cellular),
       total_received_bytes);
 
   DataUseUserData* attached_service_data = reinterpret_cast<DataUseUserData*>(
       request->GetUserData(DataUseUserData::kUserDataKey));
-
+  DataUseUserData::ServiceName service_name =
+      attached_service_data ? attached_service_data->service_name()
+                            : DataUseUserData::NOT_TAGGED;
   if (!is_user_traffic) {
-    DataUseUserData::ServiceName service_name =
-        attached_service_data ? attached_service_data->service_name()
-                              : DataUseUserData::NOT_TAGGED;
-    ReportDataUsageServices(service_name, UPSTREAM, total_upload_bytes);
-    ReportDataUsageServices(service_name, DOWNSTREAM, total_received_bytes);
+    ReportDataUsageServices(service_name, UPSTREAM, is_connection_cellular,
+                            total_upload_bytes);
+    ReportDataUsageServices(service_name, DOWNSTREAM, is_connection_cellular,
+                            total_received_bytes);
+  }
+
+  // Update data use prefs for cellular connections.
+  if (!metrics_data_use_forwarder_.is_null()) {
+    metrics_data_use_forwarder_.Run(
+        attached_service_data->GetServiceNameAsString(service_name),
+        total_upload_bytes + total_received_bytes, is_connection_cellular);
   }
 }
 
@@ -114,15 +128,15 @@
   return FOREGROUND;
 }
 
-std::string DataUseMeasurement::GetHistogramName(const char* prefix,
-                                                 TrafficDirection dir) const {
+std::string DataUseMeasurement::GetHistogramName(
+    const char* prefix,
+    TrafficDirection dir,
+    bool is_connection_cellular) const {
   AppState app_state = CurrentAppState();
-  bool is_conn_cellular = net::NetworkChangeNotifier::IsConnectionCellular(
-      net::NetworkChangeNotifier::GetConnectionType());
   return base::StringPrintf(
       "%s.%s.%s.%s", prefix, dir == UPSTREAM ? "Upstream" : "Downstream",
       app_state == BACKGROUND ? "Background" : "Foreground",
-      is_conn_cellular ? "Cellular" : "NotCellular");
+      is_connection_cellular ? "Cellular" : "NotCellular");
 }
 
 #if defined(OS_ANDROID)
@@ -135,14 +149,16 @@
 void DataUseMeasurement::ReportDataUsageServices(
     DataUseUserData::ServiceName service,
     TrafficDirection dir,
+    bool is_connection_cellular,
     int64_t message_size) const {
   RecordUMAHistogramCount(
       "DataUse.MessageSize." + DataUseUserData::GetServiceNameAsString(service),
       message_size);
   if (message_size > 0) {
     IncreaseSparseHistogramByValue(
-        GetHistogramName("DataUse.MessageSize.AllServices", dir), service,
-        message_size);
+        GetHistogramName("DataUse.MessageSize.AllServices", dir,
+                         is_connection_cellular),
+        service, message_size);
   }
 }
 
diff --git a/components/data_use_measurement/content/data_use_measurement.h b/components/data_use_measurement/content/data_use_measurement.h
index a5b8f71..3d9636e 100644
--- a/components/data_use_measurement/content/data_use_measurement.h
+++ b/components/data_use_measurement/content/data_use_measurement.h
@@ -9,10 +9,12 @@
 
 #include <string>
 
+#include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "build/build_config.h"
 #include "components/data_use_measurement/core/data_use_user_data.h"
+#include "components/metrics/data_use_tracker.h"
 
 #if defined(OS_ANDROID)
 #include "base/android/application_status_listener.h"
@@ -32,7 +34,8 @@
 // http://crbug.com/527460
 class DataUseMeasurement {
  public:
-  DataUseMeasurement();
+  explicit DataUseMeasurement(
+      const metrics::UpdateUsagePrefCallbackType& metrics_data_use_forwarder);
   ~DataUseMeasurement();
 
   // Records the data use of the |request|, thus |request| must be non-null.
@@ -63,7 +66,9 @@
   // ("Downstream") path, whether the app was in the "Foreground" or
   // "Background", and whether a "Cellular" or "WiFi" network was use. For
   // example, "Prefix.Upstream.Foreground.Cellular" is a possible output.
-  std::string GetHistogramName(const char* prefix, TrafficDirection dir) const;
+  std::string GetHistogramName(const char* prefix,
+                               TrafficDirection dir,
+                               bool is_connection_cellular) const;
 
 #if defined(OS_ANDROID)
   // Called whenever the application transitions from foreground to background
@@ -79,8 +84,15 @@
   void ReportDataUsageServices(
       data_use_measurement::DataUseUserData::ServiceName service,
       TrafficDirection dir,
+      bool is_connection_cellular,
       int64_t message_size) const;
 
+  // Callback for updating data use prefs.
+  // TODO(rajendrant): If a similar mechanism would need be used for components
+  // other than metrics, then the better approach would be to refactor this
+  // class to support registering arbitrary observers. crbug.com/601185
+  metrics::UpdateUsagePrefCallbackType metrics_data_use_forwarder_;
+
 #if defined(OS_ANDROID)
   // Application listener store the last known state of the application in this
   // field.
diff --git a/components/data_use_measurement/content/data_use_measurement_unittest.cc b/components/data_use_measurement/content/data_use_measurement_unittest.cc
index 242a1ae..9d96c53 100644
--- a/components/data_use_measurement/content/data_use_measurement_unittest.cc
+++ b/components/data_use_measurement/content/data_use_measurement_unittest.cc
@@ -27,18 +27,20 @@
 
 class DataUseMeasurementTest : public testing::Test {
  public:
-  DataUseMeasurementTest() {
+  DataUseMeasurementTest()
+      : data_use_measurement_(
+            base::Bind(&DataUseMeasurementTest::FakeDataUseforwarder,
+                       base::Unretained(this))) {
     // During the test it is expected to not have cellular connection.
     DCHECK(!net::NetworkChangeNotifier::IsConnectionCellular(
         net::NetworkChangeNotifier::GetConnectionType()));
   }
 
-  // This function makes a user request and confirms that its effect is
-  // reflected in proper histograms.
-  void TestForAUserRequest(const std::string& target_dimension) {
+  // Sends a request and reports data use attaching either user data or service
+  // data based on |is_user_request|.
+  void SendRequest(bool is_user_request) {
     net::TestDelegate test_delegate;
     InitializeContext();
-    base::HistogramTester histogram_tester;
     net::MockRead reads[] = {net::MockRead("HTTP/1.1 200 OK\r\n"
                                            "Content-Length: 12\r\n\r\n"),
                              net::MockRead("Test Content")};
@@ -48,14 +50,28 @@
 
     scoped_ptr<net::URLRequest> request(context_->CreateRequest(
         GURL("http://foo.com"), net::DEFAULT_PRIORITY, &test_delegate));
-    request->SetUserData(
-        data_use_measurement::DataUseUserData::kUserDataKey,
-        new data_use_measurement::DataUseUserData(
-            data_use_measurement::DataUseUserData::SUGGESTIONS));
+    if (is_user_request) {
+      request->SetUserData(
+          data_use_measurement::DataUseUserData::kUserDataKey,
+          new data_use_measurement::DataUseUserData(
+              data_use_measurement::DataUseUserData::SUGGESTIONS));
+    } else {
+      content::ResourceRequestInfo::AllocateForTesting(
+          request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr, -2, -2, -2,
+          true, false, true, true, false);
+    }
+
     request->Start();
     loop_.RunUntilIdle();
 
     data_use_measurement_.ReportDataUseUMA(request.get());
+  }
+
+  // This function makes a user request and confirms that its effect is
+  // reflected in proper histograms.
+  void TestForAUserRequest(const std::string& target_dimension) {
+    base::HistogramTester histogram_tester;
+    SendRequest(true);
     histogram_tester.ExpectTotalCount("DataUse.TrafficSize.System.Downstream." +
                                           target_dimension + kConnectionType,
                                       1);
@@ -69,26 +85,8 @@
   // This function makes a service request and confirms that its effect is
   // reflected in proper histograms.
   void TestForAServiceRequest(const std::string& target_dimension) {
-    net::TestDelegate test_delegate;
-    InitializeContext();
     base::HistogramTester histogram_tester;
-
-    net::MockRead reads[] = {net::MockRead("HTTP/1.1 200 OK\r\n"
-                                           "Content-Length: 12\r\n\r\n"),
-                             net::MockRead("Test Content")};
-    net::StaticSocketDataProvider socket_data(reads, arraysize(reads), nullptr,
-                                              0);
-    socket_factory_->AddSocketDataProvider(&socket_data);
-
-    scoped_ptr<net::URLRequest> request(context_->CreateRequest(
-        GURL("http://foo.com"), net::DEFAULT_PRIORITY, &test_delegate));
-    content::ResourceRequestInfo::AllocateForTesting(
-        request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr, -2, -2, -2,
-        true, false, true, true, false);
-    request->Start();
-    loop_.RunUntilIdle();
-
-    data_use_measurement_.ReportDataUseUMA(request.get());
+    SendRequest(false);
     histogram_tester.ExpectTotalCount("DataUse.TrafficSize.User.Downstream." +
                                           target_dimension + kConnectionType,
                                       1);
@@ -107,6 +105,8 @@
 
   DataUseMeasurement* data_use_measurement() { return &data_use_measurement_; }
 
+  bool IsDataUseForwarderCalled() { return is_data_use_forwarder_called_; }
+
  private:
   void InitializeContext() {
     context_.reset(new net::TestURLRequestContext(true));
@@ -115,11 +115,18 @@
     context_->Init();
   }
 
+  void FakeDataUseforwarder(const std::string& service_name,
+                            int message_size,
+                            bool is_celllular) {
+    is_data_use_forwarder_called_ = true;
+  }
+
   base::MessageLoopForIO loop_;
   DataUseMeasurement data_use_measurement_;
   scoped_ptr<net::MockClientSocketFactory> socket_factory_;
   scoped_ptr<net::TestURLRequestContext> context_;
   const std::string kConnectionType = "NotCellular";
+  bool is_data_use_forwarder_called_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(DataUseMeasurementTest);
 };
@@ -150,4 +157,10 @@
 }
 #endif
 
+TEST_F(DataUseMeasurementTest, DataUseForwarderIsCalled) {
+  EXPECT_FALSE(IsDataUseForwarderCalled());
+  SendRequest(true);
+  EXPECT_TRUE(IsDataUseForwarderCalled());
+}
+
 }  // namespace data_use_measurement
diff --git a/components/leveldb/BUILD.gn b/components/leveldb/BUILD.gn
index b521188a..9d4a3e5 100644
--- a/components/leveldb/BUILD.gn
+++ b/components/leveldb/BUILD.gn
@@ -16,12 +16,11 @@
     "leveldb_mojo_proxy.h",
     "leveldb_service_impl.cc",
     "leveldb_service_impl.h",
-    "util.cc",
-    "util.h",
   ]
 
   deps = [
     "//components/filesystem/public/interfaces",
+    "//components/leveldb/public/cpp",
     "//components/leveldb/public/interfaces",
     "//mojo/common",
     "//mojo/message_pump",
@@ -62,11 +61,13 @@
 test("leveldb_service_unittests") {
   sources = [
     "leveldb_service_unittest.cc",
+    "remote_iterator_unittest.cc",
   ]
 
   deps = [
     "//base",
     "//components/filesystem/public/interfaces",
+    "//components/leveldb/public/cpp",
     "//components/leveldb/public/interfaces",
     "//mojo/common",
     "//mojo/platform_handle",
@@ -74,6 +75,7 @@
     "//mojo/shell/public/cpp:shell_test_support",
     "//mojo/shell/public/cpp:sources",
     "//mojo/shell/public/cpp/test:run_all_shelltests",
+    "//third_party/leveldatabase",
   ]
 
   data_deps = [
diff --git a/components/leveldb/leveldb.gyp b/components/leveldb/leveldb.gyp
index 7c367bc4..6d1a8ef 100644
--- a/components/leveldb/leveldb.gyp
+++ b/components/leveldb/leveldb.gyp
@@ -26,13 +26,29 @@
         'leveldb_mojo_proxy.h',
         'leveldb_service_impl.cc',
         'leveldb_service_impl.h',
-        'util.cc',
-        'util.h',
+      ],
+      'dependencies': [
+        'leveldb_public_lib',
+        '../../components/filesystem/filesystem.gyp:filesystem_lib',
+        '../../mojo/mojo_base.gyp:mojo_application_base',
+        '../../mojo/mojo_public.gyp:mojo_cpp_bindings',
+        '../../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
+      ]
+    },
+    {
+      # GN version: //components/leveldb/public/cpp:cpp
+      'target_name': 'leveldb_public_lib',
+      'type': 'static_library',
+      'sources': [
+        'public/cpp/remote_iterator.cc',
+        'public/cpp/remote_iterator.h',
+        'public/cpp/util.cc',
+        'public/cpp/util.h',
       ],
       'dependencies': [
         'leveldb_bindings_mojom',
-        '../../components/filesystem/filesystem.gyp:filesystem_lib',
         '../../mojo/mojo_base.gyp:mojo_application_base',
+        '../../mojo/mojo_edk.gyp:mojo_system_impl',
         '../../mojo/mojo_public.gyp:mojo_cpp_bindings',
         '../../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
       ]
diff --git a/components/leveldb/leveldb_database_impl.cc b/components/leveldb/leveldb_database_impl.cc
index 857c73df..6a64706 100644
--- a/components/leveldb/leveldb_database_impl.cc
+++ b/components/leveldb/leveldb_database_impl.cc
@@ -9,7 +9,7 @@
 
 #include "base/rand_util.h"
 #include "components/leveldb/env_mojo.h"
-#include "components/leveldb/util.h"
+#include "components/leveldb/public/cpp/util.h"
 #include "mojo/common/common_type_converters.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
@@ -122,4 +122,119 @@
   callback.Run(LeveldbStatusToError(status), mojo::Array<uint8_t>::From(value));
 }
 
+void LevelDBDatabaseImpl::NewIterator(const NewIteratorCallback& callback) {
+  Iterator* iterator = db_->NewIterator(leveldb::ReadOptions());
+  uint64_t new_id = GetSafeRandomId(iterator_map_);
+  iterator_map_.insert(std::make_pair(new_id, iterator));
+  callback.Run(new_id);
+}
+
+void LevelDBDatabaseImpl::NewIteratorFromSnapshot(
+    uint64_t snapshot_id,
+    const NewIteratorCallback& callback) {
+  // If the snapshot id is invalid, send back invalid argument
+  auto it = snapshot_map_.find(snapshot_id);
+  if (it == snapshot_map_.end()) {
+    callback.Run(0);
+    return;
+  }
+
+  leveldb::ReadOptions options;
+  options.snapshot = it->second;
+
+  Iterator* iterator = db_->NewIterator(options);
+  uint64_t new_id = GetSafeRandomId(iterator_map_);
+  iterator_map_.insert(std::make_pair(new_id, iterator));
+  callback.Run(new_id);
+}
+
+void LevelDBDatabaseImpl::ReleaseIterator(uint64_t iterator_id) {
+  auto it = iterator_map_.find(iterator_id);
+  if (it != iterator_map_.end()) {
+    delete it->second;
+    iterator_map_.erase(it);
+  }
+}
+
+void LevelDBDatabaseImpl::IteratorSeekToFirst(
+    uint64_t iterator_id,
+    const IteratorSeekToFirstCallback& callback) {
+  auto it = iterator_map_.find(iterator_id);
+  if (it == iterator_map_.end()) {
+    callback.Run(false, DatabaseError::INVALID_ARGUMENT, nullptr, nullptr);
+    return;
+  }
+
+  it->second->SeekToFirst();
+
+  ReplyToIteratorMessage(it->second, callback);
+}
+
+void LevelDBDatabaseImpl::IteratorSeekToLast(
+    uint64_t iterator_id,
+    const IteratorSeekToLastCallback& callback) {
+  auto it = iterator_map_.find(iterator_id);
+  if (it == iterator_map_.end()) {
+    callback.Run(false, DatabaseError::INVALID_ARGUMENT, nullptr, nullptr);
+    return;
+  }
+
+  it->second->SeekToLast();
+
+  ReplyToIteratorMessage(it->second, callback);
+}
+
+void LevelDBDatabaseImpl::IteratorSeek(
+    uint64_t iterator_id,
+    mojo::Array<uint8_t> target,
+    const IteratorSeekToLastCallback& callback) {
+  auto it = iterator_map_.find(iterator_id);
+  if (it == iterator_map_.end()) {
+    callback.Run(false, DatabaseError::INVALID_ARGUMENT, nullptr, nullptr);
+    return;
+  }
+
+  it->second->Seek(GetSliceFor(target));
+
+  ReplyToIteratorMessage(it->second, callback);
+}
+
+void LevelDBDatabaseImpl::IteratorNext(uint64_t iterator_id,
+                                       const IteratorNextCallback& callback) {
+  auto it = iterator_map_.find(iterator_id);
+  if (it == iterator_map_.end()) {
+    callback.Run(false, DatabaseError::INVALID_ARGUMENT, nullptr, nullptr);
+    return;
+  }
+
+  it->second->Next();
+
+  ReplyToIteratorMessage(it->second, callback);
+}
+
+void LevelDBDatabaseImpl::IteratorPrev(uint64_t iterator_id,
+                                       const IteratorPrevCallback& callback) {
+  auto it = iterator_map_.find(iterator_id);
+  if (it == iterator_map_.end()) {
+    callback.Run(false, DatabaseError::INVALID_ARGUMENT, nullptr, nullptr);
+    return;
+  }
+
+  it->second->Prev();
+
+  ReplyToIteratorMessage(it->second, callback);
+}
+
+void LevelDBDatabaseImpl::ReplyToIteratorMessage(
+    leveldb::Iterator* it,
+    const IteratorSeekToFirstCallback& callback) {
+  if (!it->Valid()) {
+    callback.Run(false, LeveldbStatusToError(it->status()), nullptr, nullptr);
+    return;
+  }
+
+  callback.Run(true, LeveldbStatusToError(it->status()), GetArrayFor(it->key()),
+               GetArrayFor(it->value()));
+}
+
 }  // namespace leveldb
diff --git a/components/leveldb/leveldb_database_impl.h b/components/leveldb/leveldb_database_impl.h
index 0f218d3..a6ccab77d 100644
--- a/components/leveldb/leveldb_database_impl.h
+++ b/components/leveldb/leveldb_database_impl.h
@@ -37,8 +37,30 @@
   void GetFromSnapshot(uint64_t snapshot_id,
                        mojo::Array<uint8_t> key,
                        const GetCallback& callback) override;
+  void NewIterator(const NewIteratorCallback& callback) override;
+  void NewIteratorFromSnapshot(uint64_t snapshot_id,
+                               const NewIteratorCallback& callback) override;
+  void ReleaseIterator(uint64_t iterator_id) override;
+  void IteratorSeekToFirst(
+      uint64_t iterator_id,
+      const IteratorSeekToFirstCallback& callback) override;
+  void IteratorSeekToLast(uint64_t iterator_id,
+                          const IteratorSeekToLastCallback& callback) override;
+  void IteratorSeek(uint64_t iterator_id,
+                    mojo::Array<uint8_t> target,
+                    const IteratorSeekToLastCallback& callback) override;
+  void IteratorNext(uint64_t iterator_id,
+                    const IteratorNextCallback& callback) override;
+  void IteratorPrev(uint64_t iterator_id,
+                    const IteratorPrevCallback& callback) override;
 
  private:
+  // Returns the state of |it| to a caller. Note: This assumes that all the
+  // iterator movement methods have the same callback signature. We don't
+  // directly reference the underlying type in case of bindings change.
+  void ReplyToIteratorMessage(leveldb::Iterator* it,
+                              const IteratorSeekToFirstCallback& callback);
+
   mojo::StrongBinding<LevelDBDatabase> binding_;
   scoped_ptr<leveldb::Env> environment_;
   scoped_ptr<leveldb::DB> db_;
diff --git a/components/leveldb/leveldb_service_impl.cc b/components/leveldb/leveldb_service_impl.cc
index 69c1f63..9c4a540 100644
--- a/components/leveldb/leveldb_service_impl.cc
+++ b/components/leveldb/leveldb_service_impl.cc
@@ -6,7 +6,7 @@
 
 #include "components/leveldb/env_mojo.h"
 #include "components/leveldb/leveldb_database_impl.h"
-#include "components/leveldb/util.h"
+#include "components/leveldb/public/cpp/util.h"
 #include "third_party/leveldatabase/env_chromium.h"
 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
 #include "third_party/leveldatabase/src/include/leveldb/db.h"
@@ -26,18 +26,26 @@
                               const mojo::String& dbname,
                               leveldb::LevelDBDatabaseRequest database,
                               const OpenCallback& callback) {
-  // This is the place where we open a database.
+  OpenWithOptions(leveldb::OpenOptions::New(), std::move(directory), dbname,
+                  std::move(database), callback);
+}
+
+void LevelDBServiceImpl::OpenWithOptions(
+    leveldb::OpenOptionsPtr open_options,
+    filesystem::DirectoryPtr directory,
+    const mojo::String& dbname,
+    leveldb::LevelDBDatabaseRequest database,
+    const OpenCallback& callback) {
   leveldb::Options options;
-  options.create_if_missing = true;
-  options.paranoid_checks = true;
-  // TODO(erg): Do we need a filter policy?
+  options.create_if_missing = open_options->create_if_missing;
+  options.error_if_exists = open_options->error_if_exists;
+  options.paranoid_checks = open_options->paranoid_checks;
+  options.write_buffer_size = open_options->write_buffer_size;
+  options.max_open_files = open_options->max_open_files;
+
   options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue;
   options.compression = leveldb::kSnappyCompression;
 
-  // For info about the troubles we've run into with this parameter, see:
-  // https://code.google.com/p/chromium/issues/detail?id=227313#c11
-  options.max_open_files = 80;
-
   // Register our directory with the file thread.
   LevelDBMojoProxy::OpaqueDir* dir =
       thread_->RegisterDirectory(std::move(directory));
@@ -61,7 +69,6 @@
   leveldb::Options options;
   options.create_if_missing = true;
   options.max_open_files = 0;  // Use minimum.
-  options.reuse_logs = leveldb_env::kDefaultLogReuseOptionValue;
 
   scoped_ptr<leveldb::Env> env(leveldb::NewMemEnv(leveldb::Env::Default()));
   options.env = env.get();
diff --git a/components/leveldb/leveldb_service_impl.h b/components/leveldb/leveldb_service_impl.h
index c234fd5..910a8d5 100644
--- a/components/leveldb/leveldb_service_impl.h
+++ b/components/leveldb/leveldb_service_impl.h
@@ -23,6 +23,11 @@
             const mojo::String& dbname,
             leveldb::LevelDBDatabaseRequest database,
             const OpenCallback& callback) override;
+  void OpenWithOptions(leveldb::OpenOptionsPtr open_options,
+                       filesystem::DirectoryPtr directory,
+                       const mojo::String& dbname,
+                       leveldb::LevelDBDatabaseRequest database,
+                       const OpenCallback& callback) override;
   void OpenInMemory(leveldb::LevelDBDatabaseRequest database,
                     const OpenInMemoryCallback& callback) override;
 
diff --git a/components/leveldb/leveldb_service_unittest.cc b/components/leveldb/leveldb_service_unittest.cc
index 96c7e05..5fa31e86 100644
--- a/components/leveldb/leveldb_service_unittest.cc
+++ b/components/leveldb/leveldb_service_unittest.cc
@@ -19,10 +19,10 @@
 namespace leveldb {
 namespace {
 
-class LevelDBApptest : public mojo::test::ShellTest {
+class LevelDBServiceTest : public mojo::test::ShellTest {
  public:
-  LevelDBApptest() : ShellTest("exe:leveldb_service_unittests") {}
-  ~LevelDBApptest() override {}
+  LevelDBServiceTest() : ShellTest("exe:leveldb_service_unittests") {}
+  ~LevelDBServiceTest() override {}
 
  protected:
   // Overridden from mojo::test::ApplicationTestBase:
@@ -55,10 +55,10 @@
   filesystem::FileSystemPtr files_;
   LevelDBServicePtr leveldb_;
 
-  DISALLOW_COPY_AND_ASSIGN(LevelDBApptest);
+  DISALLOW_COPY_AND_ASSIGN(LevelDBServiceTest);
 };
 
-TEST_F(LevelDBApptest, Basic) {
+TEST_F(LevelDBServiceTest, Basic) {
   filesystem::DirectoryPtr directory;
   GetUserDataDir(&directory);
 
@@ -103,7 +103,7 @@
   EXPECT_EQ("", value.To<std::string>());
 }
 
-TEST_F(LevelDBApptest, WriteBatch) {
+TEST_F(LevelDBServiceTest, WriteBatch) {
   filesystem::DirectoryPtr directory;
   GetUserDataDir(&directory);
 
@@ -156,7 +156,7 @@
   EXPECT_EQ("more", value.To<std::string>());
 }
 
-TEST_F(LevelDBApptest, Reconnect) {
+TEST_F(LevelDBServiceTest, Reconnect) {
   DatabaseError error;
 
   {
@@ -202,7 +202,7 @@
   }
 }
 
-TEST_F(LevelDBApptest, GetSnapshotSimple) {
+TEST_F(LevelDBServiceTest, GetSnapshotSimple) {
   DatabaseError error;
 
   filesystem::DirectoryPtr directory;
@@ -220,7 +220,7 @@
   EXPECT_NE(static_cast<uint64_t>(0), snapshot_id);
 }
 
-TEST_F(LevelDBApptest, GetFromSnapshots) {
+TEST_F(LevelDBServiceTest, GetFromSnapshots) {
   DatabaseError error;
 
   filesystem::DirectoryPtr directory;
@@ -274,7 +274,7 @@
   EXPECT_EQ("value", value.To<std::string>());
 }
 
-TEST_F(LevelDBApptest, InvalidArgumentOnInvalidSnapshot) {
+TEST_F(LevelDBServiceTest, InvalidArgumentOnInvalidSnapshot) {
   filesystem::DirectoryPtr directory;
   GetUserDataDir(&directory);
 
@@ -297,7 +297,7 @@
   EXPECT_EQ(DatabaseError::INVALID_ARGUMENT, error);
 }
 
-TEST_F(LevelDBApptest, MemoryDBReadWrite) {
+TEST_F(LevelDBServiceTest, MemoryDBReadWrite) {
   LevelDBDatabasePtr database;
   DatabaseError error = DatabaseError::INVALID_ARGUMENT;
   leveldb()->OpenInMemory(GetProxy(&database), Capture(&error));
diff --git a/components/leveldb/public/cpp/BUILD.gn b/components/leveldb/public/cpp/BUILD.gn
new file mode 100644
index 0000000..29e773a
--- /dev/null
+++ b/components/leveldb/public/cpp/BUILD.gn
@@ -0,0 +1,20 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("cpp") {
+  sources = [
+    "remote_iterator.cc",
+    "remote_iterator.h",
+    "util.cc",
+    "util.h",
+  ]
+
+  deps = [
+    "//base",
+    "//components/leveldb/public/interfaces",
+    "//mojo/common",
+    "//mojo/shell/public/cpp",
+    "//third_party/leveldatabase",
+  ]
+}
diff --git a/components/leveldb/public/cpp/remote_iterator.cc b/components/leveldb/public/cpp/remote_iterator.cc
new file mode 100644
index 0000000..39577a68
--- /dev/null
+++ b/components/leveldb/public/cpp/remote_iterator.cc
@@ -0,0 +1,60 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/leveldb/public/cpp/remote_iterator.h"
+
+#include "components/leveldb/public/cpp/util.h"
+
+namespace leveldb {
+
+RemoteIterator::RemoteIterator(LevelDBDatabase* database, uint64_t iterator_id)
+    : database_(database),
+      iterator_id_(iterator_id),
+      valid_(false),
+      status_(DatabaseError::OK) {}
+
+RemoteIterator::~RemoteIterator() {
+  database_->ReleaseIterator(iterator_id_);
+}
+
+bool RemoteIterator::Valid() const {
+  return valid_;
+}
+
+void RemoteIterator::SeekToFirst() {
+  database_->IteratorSeekToFirst(iterator_id_, &valid_, &status_, &key_,
+                                 &value_);
+}
+
+void RemoteIterator::SeekToLast() {
+  database_->IteratorSeekToLast(iterator_id_, &valid_, &status_, &key_,
+                                &value_);
+}
+
+void RemoteIterator::Seek(const Slice& target) {
+  database_->IteratorSeek(iterator_id_, GetArrayFor(target), &valid_, &status_,
+                          &key_, &value_);
+}
+
+void RemoteIterator::Next() {
+  database_->IteratorNext(iterator_id_, &valid_, &status_, &key_, &value_);
+}
+
+void RemoteIterator::Prev() {
+  database_->IteratorPrev(iterator_id_, &valid_, &status_, &key_, &value_);
+}
+
+Slice RemoteIterator::key() const {
+  return GetSliceFor(key_);
+}
+
+Slice RemoteIterator::value() const {
+  return GetSliceFor(value_);
+}
+
+Status RemoteIterator::status() const {
+  return DatabaseErrorToStatus(status_, GetSliceFor(key_), GetSliceFor(value_));
+}
+
+}  // namespace leveldb
diff --git a/components/leveldb/public/cpp/remote_iterator.h b/components/leveldb/public/cpp/remote_iterator.h
new file mode 100644
index 0000000..056a2bf96
--- /dev/null
+++ b/components/leveldb/public/cpp/remote_iterator.h
@@ -0,0 +1,50 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_LEVELDB_PUBLIC_CPP_REMOTE_ITERATOR_H_
+#define COMPONENTS_LEVELDB_PUBLIC_CPP_REMOTE_ITERATOR_H_
+
+#include "components/leveldb/public/interfaces/leveldb.mojom.h"
+#include "mojo/public/cpp/bindings/array.h"
+#include "third_party/leveldatabase/src/include/leveldb/iterator.h"
+
+namespace leveldb {
+
+class LevelDBDatabase;
+
+// A wrapper around the raw iterator movement methods on the mojo leveldb
+// interface to allow drop in replacement to current leveldb usage.
+//
+// Note: Next(), Prev() and all the Seek*() calls cause mojo sync calls.
+class RemoteIterator : public Iterator {
+ public:
+  RemoteIterator(LevelDBDatabase* database, uint64_t iterator_id);
+  ~RemoteIterator() override;
+
+  // Overridden from leveldb::Iterator:
+  bool Valid() const override;
+  void SeekToFirst() override;
+  void SeekToLast() override;
+  void Seek(const Slice& target) override;
+  void Next() override;
+  void Prev() override;
+  Slice key() const override;
+  Slice value() const override;
+  Status status() const override;
+
+ private:
+  LevelDBDatabase* database_;
+  uint64_t iterator_id_;
+
+  bool valid_;
+  DatabaseError status_;
+  mojo::Array<uint8_t> key_;
+  mojo::Array<uint8_t> value_;
+
+  DISALLOW_COPY_AND_ASSIGN(RemoteIterator);
+};
+
+}  // namespace leveldb
+
+#endif  // COMPONENTS_LEVELDB_PUBLIC_CPP_REMOTE_ITERATOR_H_
diff --git a/components/leveldb/public/cpp/util.cc b/components/leveldb/public/cpp/util.cc
new file mode 100644
index 0000000..3d60ea2
--- /dev/null
+++ b/components/leveldb/public/cpp/util.cc
@@ -0,0 +1,63 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/leveldb/public/cpp/util.h"
+
+#include "third_party/leveldatabase/src/include/leveldb/status.h"
+
+namespace leveldb {
+
+DatabaseError LeveldbStatusToError(const leveldb::Status& s) {
+  if (s.ok())
+    return DatabaseError::OK;
+  if (s.IsNotFound())
+    return DatabaseError::NOT_FOUND;
+  if (s.IsCorruption())
+    return DatabaseError::CORRUPTION;
+  if (s.IsNotSupportedError())
+    return DatabaseError::NOT_SUPPORTED;
+  if (s.IsIOError())
+    return DatabaseError::IO_ERROR;
+  return DatabaseError::INVALID_ARGUMENT;
+}
+
+leveldb::Status DatabaseErrorToStatus(DatabaseError e,
+                                      const Slice& msg,
+                                      const Slice& msg2) {
+  switch (e) {
+    case DatabaseError::OK:
+      return leveldb::Status::OK();
+    case DatabaseError::NOT_FOUND:
+      return leveldb::Status::NotFound(msg, msg2);
+    case DatabaseError::CORRUPTION:
+      return leveldb::Status::Corruption(msg, msg2);
+    case DatabaseError::NOT_SUPPORTED:
+      return leveldb::Status::NotSupported(msg, msg2);
+    case DatabaseError::INVALID_ARGUMENT:
+      return leveldb::Status::InvalidArgument(msg, msg2);
+    case DatabaseError::IO_ERROR:
+      return leveldb::Status::IOError(msg, msg2);
+  }
+
+  // This will never be reached, but we still have configurations which don't
+  // do switch enum checking.
+  return leveldb::Status::InvalidArgument(msg, msg2);
+}
+
+leveldb::Slice GetSliceFor(const mojo::Array<uint8_t>& key) {
+  if (key.size() == 0)
+    return leveldb::Slice();
+  return leveldb::Slice(reinterpret_cast<const char*>(&key.front()),
+                        key.size());
+}
+
+mojo::Array<uint8_t> GetArrayFor(const leveldb::Slice& s) {
+  if (s.size() == 0)
+    return mojo::Array<uint8_t>();
+  return mojo::Array<uint8_t>(std::vector<uint8_t>(
+      reinterpret_cast<const uint8_t*>(s.data()),
+      reinterpret_cast<const uint8_t*>(s.data() + s.size())));
+}
+
+}  // namespace leveldb
diff --git a/components/leveldb/public/cpp/util.h b/components/leveldb/public/cpp/util.h
new file mode 100644
index 0000000..2540be5
--- /dev/null
+++ b/components/leveldb/public/cpp/util.h
@@ -0,0 +1,35 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_LEVELDB_PUBLIC_CPP_UTIL_H_
+#define COMPONENTS_LEVELDB_PUBLIC_CPP_UTIL_H_
+
+#include "components/leveldb/public/interfaces/leveldb.mojom.h"
+
+namespace leveldb {
+
+class Slice;
+class Status;
+
+// Builds a mojo DatabaseError from a leveldb::Status object.
+DatabaseError LeveldbStatusToError(const leveldb::Status& s);
+
+// Creates a leveldb Status object form a database error and two optional
+// messages. A mojoification of the various static leveldb::Status
+// constructors.
+leveldb::Status DatabaseErrorToStatus(DatabaseError e,
+                                      const Slice& msg,
+                                      const Slice& msg2);
+
+// Builds a Slice pointing to the data inside |a|. This is not a type-converter
+// as it is not a copy operation; the returned Slice points into |a| and must
+// outlive |a|.
+leveldb::Slice GetSliceFor(const mojo::Array<uint8_t>& a);
+
+// Copies the data that |s| points to into a mojo::Array.
+mojo::Array<uint8_t> GetArrayFor(const leveldb::Slice& s);
+
+}  // namespace leveldb
+
+#endif  // COMPONENTS_LEVELDB_PUBLIC_CPP_UTIL_H_
diff --git a/components/leveldb/public/interfaces/leveldb.mojom b/components/leveldb/public/interfaces/leveldb.mojom
index d595f315..72bcc69 100644
--- a/components/leveldb/public/interfaces/leveldb.mojom
+++ b/components/leveldb/public/interfaces/leveldb.mojom
@@ -26,12 +26,42 @@
   array<uint8>? value;
 };
 
+// Options which control the behavior of a database. (This struct corresponds
+// with the struct in leveldb's options.h.)
+struct OpenOptions {
+  // TODO(erg): Find all comparators and copy them into the service.
+
+  // If true, the database will be created if it is missing.
+  bool create_if_missing = false;
+
+  // If true, an error is raised if the database already exists.
+  bool error_if_exists = false;
+
+  // If true, the implementation will do aggressive checking of the
+  // data it is processing and will stop early if it detects any
+  // errors.
+  bool paranoid_checks = false;
+
+  // Default size is 4 megabytes.
+  uint64 write_buffer_size = 4194304;
+
+  // Number of open files that can be used by the DB. (Note: we globally set
+  // the default here to 80 instead of leveldb's default 1000 because we don't
+  // want to consume all file descriptors. See
+  // https://code.google.com/p/chromium/issues/detail?id=227313#c11 for
+  // details.)
+  int32 max_open_files = 80;
+};
+
 // Service which hands out databases.
 interface LevelDBService {
-  // TODO(erg): What options do we want to export? All? None?
   Open(filesystem.Directory directory,
        string dbname,
        LevelDBDatabase& database) => (DatabaseError status);
+  OpenWithOptions(OpenOptions options,
+                  filesystem.Directory directory,
+                  string dbname,
+                  LevelDBDatabase& database) => (DatabaseError status);
 
   OpenInMemory(LevelDBDatabase& database) => (DatabaseError status);
 };
@@ -65,4 +95,37 @@
   // value. Otherwise return NOT_FOUND.
   GetFromSnapshot(uint64 snapshot_id, array<uint8> key)
       => (DatabaseError status, array<uint8> value);
+
+  // Iteartors -------------------------------------------------------------
+
+  // Creates an iterator, either from the current view or from a snapshot.
+  NewIterator() => (uint64 iterator_id);
+  NewIteratorFromSnapshot(uint64 snapshot_id) => (uint64 iterator_id);
+
+  ReleaseIterator(uint64 iterator_id);
+
+  // Positions the iterator at the first key, last key, or the first key after
+  // |target|.
+  [Sync]
+  IteratorSeekToFirst(uint64 iterator_id)
+      => (bool valid, DatabaseError status, array<uint8>? key,
+          array<uint8>? value);
+  [Sync]
+  IteratorSeekToLast(uint64 iterator_id)
+      => (bool valid, DatabaseError status, array<uint8>? key,
+          array<uint8>? value);
+  [Sync]
+  IteratorSeek(uint64 iterator_id, array<uint8> target)
+      => (bool valid, DatabaseError status, array<uint8>? key,
+          array<uint8>? value);
+
+  // Moves forward or backwards in iterator space.
+  [Sync]
+  IteratorNext(uint64 iterator_id)
+      => (bool valid, DatabaseError status, array<uint8>? key,
+          array<uint8>? value);
+  [Sync]
+  IteratorPrev(uint64 iterator_id)
+      => (bool valid, DatabaseError status, array<uint8>? key,
+          array<uint8>? value);
 };
diff --git a/components/leveldb/remote_iterator_unittest.cc b/components/leveldb/remote_iterator_unittest.cc
new file mode 100644
index 0000000..6b97129
--- /dev/null
+++ b/components/leveldb/remote_iterator_unittest.cc
@@ -0,0 +1,146 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <map>
+
+#include "base/macros.h"
+#include "components/leveldb/public/cpp/remote_iterator.h"
+#include "components/leveldb/public/interfaces/leveldb.mojom.h"
+#include "mojo/common/common_type_converters.h"
+#include "mojo/shell/public/cpp/shell_connection.h"
+#include "mojo/shell/public/cpp/shell_test.h"
+#include "mojo/util/capture_util.h"
+
+using mojo::Capture;
+
+namespace leveldb {
+namespace {
+
+class RemoteIteratorTest : public mojo::test::ShellTest {
+ public:
+  RemoteIteratorTest() : ShellTest("exe:leveldb_service_unittests") {}
+  ~RemoteIteratorTest() override {}
+
+ protected:
+  // Overridden from mojo::test::ApplicationTestBase:
+  void SetUp() override {
+    ShellTest::SetUp();
+    connector()->ConnectToInterface("mojo:leveldb", &leveldb_);
+
+    DatabaseError error;
+    leveldb()->OpenInMemory(GetProxy(&database_), Capture(&error));
+    ASSERT_TRUE(leveldb().WaitForIncomingResponse());
+    EXPECT_EQ(DatabaseError::OK, error);
+
+    std::map<std::string, std::string> data{
+        {"a", "first"}, {"b:suffix", "second"}, {"c", "third"}};
+
+    for (auto p : data) {
+      // Write a key to the database.
+      error = DatabaseError::INVALID_ARGUMENT;
+      database_->Put(mojo::Array<uint8_t>::From(p.first),
+                     mojo::Array<uint8_t>::From(p.second), Capture(&error));
+      ASSERT_TRUE(database_.WaitForIncomingResponse());
+      EXPECT_EQ(DatabaseError::OK, error);
+    }
+  }
+
+  void TearDown() override {
+    leveldb_.reset();
+    ShellTest::TearDown();
+  }
+
+  LevelDBServicePtr& leveldb() { return leveldb_; }
+  LevelDBDatabasePtr& database() { return database_; }
+
+ private:
+  LevelDBServicePtr leveldb_;
+  LevelDBDatabasePtr database_;
+
+  DISALLOW_COPY_AND_ASSIGN(RemoteIteratorTest);
+};
+
+TEST_F(RemoteIteratorTest, Seeking) {
+  uint64_t iterator_id = 0;
+  database()->NewIterator(Capture(&iterator_id));
+  ASSERT_TRUE(database().WaitForIncomingResponse());
+  EXPECT_NE(0u, iterator_id);
+
+  RemoteIterator it(database().get(), iterator_id);
+  EXPECT_FALSE(it.Valid());
+
+  it.SeekToFirst();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("a", it.key());
+  EXPECT_EQ("first", it.value());
+
+  it.SeekToLast();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("c", it.key());
+  EXPECT_EQ("third", it.value());
+
+  it.Seek("b");
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("b:suffix", it.key());
+  EXPECT_EQ("second", it.value());
+}
+
+TEST_F(RemoteIteratorTest, Next) {
+  uint64_t iterator_id = 0;
+  database()->NewIterator(Capture(&iterator_id));
+  ASSERT_TRUE(database().WaitForIncomingResponse());
+  EXPECT_NE(0u, iterator_id);
+
+  RemoteIterator it(database().get(), iterator_id);
+  EXPECT_FALSE(it.Valid());
+
+  it.SeekToFirst();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("a", it.key());
+  EXPECT_EQ("first", it.value());
+
+  it.Next();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("b:suffix", it.key());
+  EXPECT_EQ("second", it.value());
+
+  it.Next();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("c", it.key());
+  EXPECT_EQ("third", it.value());
+
+  it.Next();
+  EXPECT_FALSE(it.Valid());
+}
+
+TEST_F(RemoteIteratorTest, Prev) {
+  uint64_t iterator_id = 0;
+  database()->NewIterator(Capture(&iterator_id));
+  ASSERT_TRUE(database().WaitForIncomingResponse());
+  EXPECT_NE(0u, iterator_id);
+
+  RemoteIterator it(database().get(), iterator_id);
+  EXPECT_FALSE(it.Valid());
+
+  it.SeekToLast();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("c", it.key());
+  EXPECT_EQ("third", it.value());
+
+  it.Prev();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("b:suffix", it.key());
+  EXPECT_EQ("second", it.value());
+
+  it.Prev();
+  EXPECT_TRUE(it.Valid());
+  EXPECT_EQ("a", it.key());
+  EXPECT_EQ("first", it.value());
+
+  it.Prev();
+  EXPECT_FALSE(it.Valid());
+}
+
+}  // namespace
+}  // namespace leveldb
diff --git a/components/leveldb/util.cc b/components/leveldb/util.cc
deleted file mode 100644
index cffee8d0..0000000
--- a/components/leveldb/util.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/leveldb/util.h"
-
-#include "third_party/leveldatabase/src/include/leveldb/status.h"
-
-namespace leveldb {
-
-DatabaseError LeveldbStatusToError(const leveldb::Status& s) {
-  if (s.ok())
-    return DatabaseError::OK;
-  if (s.IsNotFound())
-    return DatabaseError::NOT_FOUND;
-  if (s.IsCorruption())
-    return DatabaseError::CORRUPTION;
-  if (s.IsNotSupportedError())
-    return DatabaseError::NOT_SUPPORTED;
-  if (s.IsIOError())
-    return DatabaseError::IO_ERROR;
-  return DatabaseError::INVALID_ARGUMENT;
-}
-
-leveldb::Slice GetSliceFor(const mojo::Array<uint8_t>& key) {
-  if (key.size() == 0)
-    return leveldb::Slice();
-  return leveldb::Slice(reinterpret_cast<const char*>(&key.front()),
-                        key.size());
-}
-
-}  // namespace leveldb
diff --git a/components/leveldb/util.h b/components/leveldb/util.h
deleted file mode 100644
index cf7a129..0000000
--- a/components/leveldb/util.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_LEVELDB_UTIL_H_
-#define COMPONENTS_LEVELDB_UTIL_H_
-
-#include "components/leveldb/public/interfaces/leveldb.mojom.h"
-
-namespace leveldb {
-
-class Slice;
-class Status;
-
-DatabaseError LeveldbStatusToError(const leveldb::Status& s);
-
-// Builds a Slice pointing to the data inside |a|. This is not a type-converter
-// as it is not a copy operation; the returned Slice points into |a| and must
-// outlive |a|.
-leveldb::Slice GetSliceFor(const mojo::Array<uint8_t>& a);
-
-}  // namespace leveldb
-
-#endif  // COMPONENTS_LEVELDB_UTIL_H_
diff --git a/components/metrics.gypi b/components/metrics.gypi
index fe68519..959f052 100644
--- a/components/metrics.gypi
+++ b/components/metrics.gypi
@@ -46,6 +46,8 @@
         'metrics/machine_id_provider.h',
         'metrics/machine_id_provider_stub.cc',
         'metrics/machine_id_provider_win.cc',
+        'metrics/data_use_tracker.cc',
+        'metrics/data_use_tracker.h',
         'metrics/metrics_log.cc',
         'metrics/metrics_log.h',
         'metrics/metrics_log_manager.cc',
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn
index a6c43f5..224070db 100644
--- a/components/metrics/BUILD.gn
+++ b/components/metrics/BUILD.gn
@@ -20,6 +20,8 @@
     "cloned_install_detector.h",
     "daily_event.cc",
     "daily_event.h",
+    "data_use_tracker.cc",
+    "data_use_tracker.h",
     "drive_metrics_provider.cc",
     "drive_metrics_provider.h",
     "drive_metrics_provider_android.cc",
@@ -312,6 +314,7 @@
     "call_stack_profile_metrics_provider_unittest.cc",
     "cloned_install_detector_unittest.cc",
     "daily_event_unittest.cc",
+    "data_use_tracker_unittest.cc",
     "drive_metrics_provider_unittest.cc",
     "histogram_encoder_unittest.cc",
     "machine_id_provider_win_unittest.cc",
diff --git a/components/metrics/data_use_tracker.cc b/components/metrics/data_use_tracker.cc
new file mode 100644
index 0000000..a74bdf1
--- /dev/null
+++ b/components/metrics/data_use_tracker.cc
@@ -0,0 +1,205 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/metrics/data_use_tracker.h"
+
+#include <string>
+
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
+#include "components/metrics/metrics_pref_names.h"
+#include "components/prefs/scoped_user_pref_update.h"
+#include "components/variations/variations_associated_data.h"
+
+namespace metrics {
+
+namespace {
+
+// This function is for forwarding metrics usage pref changes to the appropriate
+// callback on the appropriate thread.
+// TODO(gayane): Reduce the frequency of posting tasks from IO to UI thread.
+void UpdateMetricsUsagePrefs(
+    const UpdateUsagePrefCallbackType& update_on_ui_callback,
+    scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
+    const std::string& service_name,
+    int message_size,
+    bool is_cellular) {
+  ui_task_runner->PostTask(
+      FROM_HERE, base::Bind(update_on_ui_callback, service_name, message_size,
+                            is_cellular));
+}
+
+}  // namespace
+
+DataUseTracker::DataUseTracker(PrefService* local_state)
+    : local_state_(local_state), weak_ptr_factory_(this) {}
+
+DataUseTracker::~DataUseTracker() {}
+
+// static
+scoped_ptr<DataUseTracker> DataUseTracker::Create(PrefService* local_state) {
+  scoped_ptr<DataUseTracker> data_use_tracker;
+  if (variations::GetVariationParamValue("UMA_EnableCellularLogUpload",
+                                         "Uma_Quota") != "" &&
+      variations::GetVariationParamValue("UMA_EnableCellularLogUpload",
+                                         "Uma_Ratio") != "") {
+    data_use_tracker.reset(new DataUseTracker(local_state));
+  }
+  return data_use_tracker;
+}
+
+// static
+void DataUseTracker::RegisterPrefs(PrefRegistrySimple* registry) {
+  registry->RegisterDictionaryPref(metrics::prefs::kUserCellDataUse);
+  registry->RegisterDictionaryPref(metrics::prefs::kUmaCellDataUse);
+}
+
+UpdateUsagePrefCallbackType DataUseTracker::GetDataUseForwardingCallback(
+    scoped_refptr<base::SequencedTaskRunner> ui_task_runner) {
+  DCHECK(ui_task_runner->RunsTasksOnCurrentThread());
+
+  return base::Bind(
+      &UpdateMetricsUsagePrefs,
+      base::Bind(&DataUseTracker::UpdateMetricsUsagePrefsOnUIThread,
+                 weak_ptr_factory_.GetWeakPtr()),
+      ui_task_runner);
+}
+
+bool DataUseTracker::ShouldUploadLogOnCellular(int log_bytes) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  RemoveExpiredEntries();
+
+  int uma_weekly_quota_bytes;
+  if (!GetUmaWeeklyQuota(&uma_weekly_quota_bytes))
+    return true;
+
+  int uma_total_data_use = ComputeTotalDataUse(prefs::kUmaCellDataUse);
+  int new_uma_total_data_use = log_bytes + uma_total_data_use;
+  // If the new log doesn't increase the total UMA traffic to be above the
+  // allowed quota then the log should be uploaded.
+  if (new_uma_total_data_use <= uma_weekly_quota_bytes)
+    return true;
+
+  double uma_ratio;
+  if (!GetUmaRatio(&uma_ratio))
+    return true;
+
+  int user_total_data_use = ComputeTotalDataUse(prefs::kUserCellDataUse);
+  // If after adding the new log the uma ratio is still under the allowed ratio
+  // then the log should be uploaded and vice versa.
+  return new_uma_total_data_use /
+             static_cast<double>(log_bytes + user_total_data_use) <=
+         uma_ratio;
+}
+
+void DataUseTracker::UpdateMetricsUsagePrefsOnUIThread(
+    const std::string& service_name,
+    int message_size,
+    bool is_celllular) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  if (!is_celllular)
+    return;
+
+  UpdateUsagePref(prefs::kUserCellDataUse, message_size);
+  if (service_name == "UMA")
+    UpdateUsagePref(prefs::kUmaCellDataUse, message_size);
+}
+
+void DataUseTracker::UpdateUsagePref(const std::string& pref_name,
+                                     int message_size) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  DictionaryPrefUpdate pref_updater(local_state_, pref_name);
+  int todays_traffic = 0;
+  std::string todays_key = GetCurrentMeasurementDateAsString();
+
+  const base::DictionaryValue* user_pref_dict =
+      local_state_->GetDictionary(pref_name);
+  user_pref_dict->GetInteger(todays_key, &todays_traffic);
+  pref_updater->SetInteger(todays_key, todays_traffic + message_size);
+}
+
+void DataUseTracker::RemoveExpiredEntries() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  RemoveExpiredEntriesForPref(prefs::kUmaCellDataUse);
+  RemoveExpiredEntriesForPref(prefs::kUserCellDataUse);
+}
+
+void DataUseTracker::RemoveExpiredEntriesForPref(const std::string& pref_name) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  const base::DictionaryValue* user_pref_dict =
+      local_state_->GetDictionary(pref_name);
+  const base::Time current_date = GetCurrentMeasurementDate();
+  const base::Time week_ago = current_date - base::TimeDelta::FromDays(7);
+
+  base::DictionaryValue user_pref_new_dict;
+  for (base::DictionaryValue::Iterator it(*user_pref_dict); !it.IsAtEnd();
+       it.Advance()) {
+    base::Time key_date;
+    base::Time::FromUTCString(it.key().c_str(), &key_date);
+    if (key_date > week_ago)
+      user_pref_new_dict.Set(it.key(), it.value().CreateDeepCopy());
+  }
+  local_state_->Set(pref_name, user_pref_new_dict);
+}
+
+// Note: We compute total data use regardless of what is the current date. In
+// scenario when user travels back in time zone and current date becomes earlier
+// than latest registered date in perf, we still count that in total use as user
+// actually used that data.
+int DataUseTracker::ComputeTotalDataUse(const std::string& pref_name) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  int total_data_use = 0;
+  const base::DictionaryValue* pref_dict =
+      local_state_->GetDictionary(pref_name);
+  for (base::DictionaryValue::Iterator it(*pref_dict); !it.IsAtEnd();
+       it.Advance()) {
+    int value = 0;
+    it.value().GetAsInteger(&value);
+    total_data_use += value;
+  }
+  return total_data_use;
+}
+
+bool DataUseTracker::GetUmaWeeklyQuota(int* uma_weekly_quota_bytes) const {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  std::string param_value_str = variations::GetVariationParamValue(
+      "UMA_EnableCellularLogUpload", "Uma_Quota");
+  if (param_value_str.empty())
+    return false;
+
+  base::StringToInt(param_value_str, uma_weekly_quota_bytes);
+  return true;
+}
+
+bool DataUseTracker::GetUmaRatio(double* ratio) const {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  std::string param_value_str = variations::GetVariationParamValue(
+      "UMA_EnableCellularLogUpload", "Uma_Ratio");
+  if (param_value_str.empty())
+    return false;
+  base::StringToDouble(param_value_str, ratio);
+  return true;
+}
+
+base::Time DataUseTracker::GetCurrentMeasurementDate() const {
+  return base::Time::Now().LocalMidnight();
+}
+
+std::string DataUseTracker::GetCurrentMeasurementDateAsString() const {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  base::Time::Exploded today_exploded;
+  GetCurrentMeasurementDate().LocalExplode(&today_exploded);
+  return base::StringPrintf("%04d-%02d-%02d", today_exploded.year,
+                            today_exploded.month, today_exploded.day_of_month);
+}
+
+}  // namespace metrics
diff --git a/components/metrics/data_use_tracker.h b/components/metrics/data_use_tracker.h
new file mode 100644
index 0000000..5682a0c0
--- /dev/null
+++ b/components/metrics/data_use_tracker.h
@@ -0,0 +1,99 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_METRICS_DATA_USE_TRACKER_H_
+#define COMPONENTS_METRICS_DATA_USE_TRACKER_H_
+
+#include <string>
+
+#include "base/callback.h"
+#include "base/gtest_prod_util.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequenced_task_runner.h"
+#include "base/threading/thread_checker.h"
+#include "base/time/time.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/pref_service.h"
+
+namespace metrics {
+
+typedef base::Callback<void(const std::string&, int, bool)>
+    UpdateUsagePrefCallbackType;
+
+// Records the data use of user traffic and UMA traffic in user prefs. Taking
+// into account those prefs it can verify whether certain UMA log upload is
+// allowed.
+class DataUseTracker {
+ public:
+  explicit DataUseTracker(PrefService* local_state);
+  ~DataUseTracker();
+
+  // Returns an instance of |DataUseTracker| with provided |local_state| if
+  // users data use should be tracked and null pointer otherwise.
+  static scoped_ptr<DataUseTracker> Create(PrefService* local_state);
+
+  // Registers data use prefs using provided |registry|.
+  static void RegisterPrefs(PrefRegistrySimple* registry);
+
+  // Returns a callback to data use pref updating function. Should be called on
+  // UI thread.
+  UpdateUsagePrefCallbackType GetDataUseForwardingCallback(
+      scoped_refptr<base::SequencedTaskRunner> ui_task_runner);
+
+  // Returns whether a log with provided |log_bytes| can be uploaded according
+  // to data use ratio and UMA quota provided by variations.
+  bool ShouldUploadLogOnCellular(int log_bytes);
+
+ private:
+  FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckUpdateUsagePref);
+  FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckRemoveExpiredEntries);
+  FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckComputeTotalDataUse);
+  FRIEND_TEST_ALL_PREFIXES(DataUseTrackerTest, CheckCanUploadUMALog);
+
+  // Updates data usage prefs on UI thread according to what Prefservice
+  // expects.
+  void UpdateMetricsUsagePrefsOnUIThread(const std::string& service_name,
+                                         int message_size,
+                                         bool is_cellular);
+
+  // Updates provided |pref_name| for a current date with the given message
+  // size.
+  void UpdateUsagePref(const std::string& pref_name, int message_size);
+
+  // Removes entries from the all data use  prefs.
+  void RemoveExpiredEntries();
+
+  // Removes entries from the given |pref_name| if they are more than 7 days
+  // old.
+  void RemoveExpiredEntriesForPref(const std::string& pref_name);
+
+  // Computes data usage according to all the entries in the given dictionary
+  // pref.
+  int ComputeTotalDataUse(const std::string& pref_name);
+
+  // Returns the weekly allowed quota for UMA data use.
+  virtual bool GetUmaWeeklyQuota(int* uma_weekly_quota_bytes) const;
+
+  // Returns the allowed ratio for UMA data use over overall data use.
+  virtual bool GetUmaRatio(double* ratio) const;
+
+  // Returns the current date for measurement.
+  virtual base::Time GetCurrentMeasurementDate() const;
+
+  // Returns the current date as a string with a proper formatting.
+  virtual std::string GetCurrentMeasurementDateAsString() const;
+
+  PrefService* local_state_;
+
+  base::ThreadChecker thread_checker_;
+
+  base::WeakPtrFactory<DataUseTracker> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(DataUseTracker);
+};
+
+}  // namespace metrics
+#endif  // COMPONENTS_METRICS_DATA_USE_TRACKER_H_
diff --git a/components/metrics/data_use_tracker_unittest.cc b/components/metrics/data_use_tracker_unittest.cc
new file mode 100644
index 0000000..ed32a4a
--- /dev/null
+++ b/components/metrics/data_use_tracker_unittest.cc
@@ -0,0 +1,206 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/metrics/data_use_tracker.h"
+
+#include "base/strings/stringprintf.h"
+#include "components/metrics/metrics_pref_names.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/testing_pref_service.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace metrics {
+
+namespace {
+
+const char kTodayStr[] = "2016-03-16";
+const char kYesterdayStr[] = "2016-03-15";
+const char kExpiredDateStr1[] = "2016-03-09";
+const char kExpiredDateStr2[] = "2016-03-01";
+
+class TestDataUsePrefService : public TestingPrefServiceSimple {
+ public:
+  TestDataUsePrefService() {
+    registry()->RegisterDictionaryPref(metrics::prefs::kUserCellDataUse);
+    registry()->RegisterDictionaryPref(metrics::prefs::kUmaCellDataUse);
+  }
+
+  void ClearDataUsePrefs() {
+    ClearPref(metrics::prefs::kUserCellDataUse);
+    ClearPref(metrics::prefs::kUmaCellDataUse);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestDataUsePrefService);
+};
+
+class FakeDataUseTracker : public DataUseTracker {
+ public:
+  FakeDataUseTracker(PrefService* local_state) : DataUseTracker(local_state) {}
+
+  bool GetUmaWeeklyQuota(int* uma_weekly_quota_bytes) const override {
+    *uma_weekly_quota_bytes = 200;
+    return true;
+  }
+
+  bool GetUmaRatio(double* ratio) const override {
+    *ratio = 0.05;
+    return true;
+  }
+
+  base::Time GetCurrentMeasurementDate() const override {
+    base::Time today_for_test;
+    base::Time::FromUTCString(kTodayStr, &today_for_test);
+    return today_for_test;
+  }
+
+  std::string GetCurrentMeasurementDateAsString() const override {
+    return kTodayStr;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeDataUseTracker);
+};
+
+// Sets up data usage prefs with mock values so that UMA traffic is above the
+// allowed ratio.
+void SetPrefTestValuesOverRatio(PrefService* local_state) {
+  base::DictionaryValue user_pref_dict;
+  user_pref_dict.SetInteger(kTodayStr, 2 * 100);
+  user_pref_dict.SetInteger(kYesterdayStr, 2 * 100);
+  user_pref_dict.SetInteger(kExpiredDateStr1, 2 * 100);
+  user_pref_dict.SetInteger(kExpiredDateStr2, 2 * 100);
+  local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
+
+  base::DictionaryValue uma_pref_dict;
+  uma_pref_dict.SetInteger(kTodayStr, 50);
+  uma_pref_dict.SetInteger(kYesterdayStr, 50);
+  uma_pref_dict.SetInteger(kExpiredDateStr1, 50);
+  uma_pref_dict.SetInteger(kExpiredDateStr2, 50);
+  local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
+}
+
+// Sets up data usage prefs with mock values which can be valid.
+void SetPrefTestValuesValidRatio(PrefService* local_state) {
+  base::DictionaryValue user_pref_dict;
+  user_pref_dict.SetInteger(kTodayStr, 100 * 100);
+  user_pref_dict.SetInteger(kYesterdayStr, 100 * 100);
+  user_pref_dict.SetInteger(kExpiredDateStr1, 100 * 100);
+  user_pref_dict.SetInteger(kExpiredDateStr2, 100 * 100);
+  local_state->Set(prefs::kUserCellDataUse, user_pref_dict);
+
+  // Should be 4% of user traffic
+  base::DictionaryValue uma_pref_dict;
+  uma_pref_dict.SetInteger(kTodayStr, 4 * 100);
+  uma_pref_dict.SetInteger(kYesterdayStr, 4 * 100);
+  uma_pref_dict.SetInteger(kExpiredDateStr1, 4 * 100);
+  uma_pref_dict.SetInteger(kExpiredDateStr2, 4 * 100);
+  local_state->Set(prefs::kUmaCellDataUse, uma_pref_dict);
+}
+
+}  // namespace
+
+TEST(DataUseTrackerTest, CheckUpdateUsagePref) {
+  TestDataUsePrefService local_state;
+  FakeDataUseTracker data_use_tracker(&local_state);
+  local_state.ClearDataUsePrefs();
+
+  int user_pref_value = 0;
+  int uma_pref_value = 0;
+
+  data_use_tracker.UpdateMetricsUsagePrefsOnUIThread("", 2 * 100, true);
+  local_state.GetDictionary(prefs::kUserCellDataUse)
+      ->GetInteger(kTodayStr, &user_pref_value);
+  EXPECT_EQ(2 * 100, user_pref_value);
+  local_state.GetDictionary(prefs::kUmaCellDataUse)
+      ->GetInteger(kTodayStr, &uma_pref_value);
+  EXPECT_EQ(0, uma_pref_value);
+
+  data_use_tracker.UpdateMetricsUsagePrefsOnUIThread("UMA", 100, true);
+  local_state.GetDictionary(prefs::kUserCellDataUse)
+      ->GetInteger(kTodayStr, &user_pref_value);
+  EXPECT_EQ(3 * 100, user_pref_value);
+  local_state.GetDictionary(prefs::kUmaCellDataUse)
+      ->GetInteger(kTodayStr, &uma_pref_value);
+  EXPECT_EQ(100, uma_pref_value);
+}
+
+TEST(DataUseTrackerTest, CheckRemoveExpiredEntries) {
+  TestDataUsePrefService local_state;
+  FakeDataUseTracker data_use_tracker(&local_state);
+  local_state.ClearDataUsePrefs();
+  SetPrefTestValuesOverRatio(&local_state);
+  data_use_tracker.RemoveExpiredEntries();
+
+  int user_pref_value = 0;
+  int uma_pref_value = 0;
+
+  local_state.GetDictionary(prefs::kUserCellDataUse)
+      ->GetInteger(kExpiredDateStr1, &user_pref_value);
+  EXPECT_EQ(0, user_pref_value);
+  local_state.GetDictionary(prefs::kUmaCellDataUse)
+      ->GetInteger(kExpiredDateStr1, &uma_pref_value);
+  EXPECT_EQ(0, uma_pref_value);
+
+  local_state.GetDictionary(prefs::kUserCellDataUse)
+      ->GetInteger(kExpiredDateStr2, &user_pref_value);
+  EXPECT_EQ(0, user_pref_value);
+  local_state.GetDictionary(prefs::kUmaCellDataUse)
+      ->GetInteger(kExpiredDateStr2, &uma_pref_value);
+  EXPECT_EQ(0, uma_pref_value);
+
+  local_state.GetDictionary(prefs::kUserCellDataUse)
+      ->GetInteger(kTodayStr, &user_pref_value);
+  EXPECT_EQ(2 * 100, user_pref_value);
+  local_state.GetDictionary(prefs::kUmaCellDataUse)
+      ->GetInteger(kTodayStr, &uma_pref_value);
+  EXPECT_EQ(50, uma_pref_value);
+
+  local_state.GetDictionary(prefs::kUserCellDataUse)
+      ->GetInteger(kYesterdayStr, &user_pref_value);
+  EXPECT_EQ(2 * 100, user_pref_value);
+  local_state.GetDictionary(prefs::kUmaCellDataUse)
+      ->GetInteger(kYesterdayStr, &uma_pref_value);
+  EXPECT_EQ(50, uma_pref_value);
+}
+
+TEST(DataUseTrackerTest, CheckComputeTotalDataUse) {
+  TestDataUsePrefService local_state;
+  FakeDataUseTracker data_use_tracker(&local_state);
+  local_state.ClearDataUsePrefs();
+  SetPrefTestValuesOverRatio(&local_state);
+
+  int user_data_use =
+      data_use_tracker.ComputeTotalDataUse(prefs::kUserCellDataUse);
+  EXPECT_EQ(8 * 100, user_data_use);
+  int uma_data_use =
+      data_use_tracker.ComputeTotalDataUse(prefs::kUmaCellDataUse);
+  EXPECT_EQ(4 * 50, uma_data_use);
+}
+
+TEST(DataUseTrackerTest, CheckShouldUploadLogOnCellular) {
+  TestDataUsePrefService local_state;
+  FakeDataUseTracker data_use_tracker(&local_state);
+  local_state.ClearDataUsePrefs();
+  SetPrefTestValuesOverRatio(&local_state);
+
+  bool can_upload = data_use_tracker.ShouldUploadLogOnCellular(50);
+  EXPECT_TRUE(can_upload);
+  can_upload = data_use_tracker.ShouldUploadLogOnCellular(100);
+  EXPECT_TRUE(can_upload);
+  can_upload = data_use_tracker.ShouldUploadLogOnCellular(150);
+  EXPECT_FALSE(can_upload);
+
+  local_state.ClearDataUsePrefs();
+  SetPrefTestValuesValidRatio(&local_state);
+  can_upload = data_use_tracker.ShouldUploadLogOnCellular(100);
+  EXPECT_TRUE(can_upload);
+  // this is about 0.49%
+  can_upload = data_use_tracker.ShouldUploadLogOnCellular(200);
+  EXPECT_TRUE(can_upload);
+  can_upload = data_use_tracker.ShouldUploadLogOnCellular(300);
+  EXPECT_FALSE(can_upload);
+}
+
+}  // namespace metrics
diff --git a/components/metrics/metrics_pref_names.cc b/components/metrics/metrics_pref_names.cc
index 6eb58fa8..3872061 100644
--- a/components/metrics/metrics_pref_names.cc
+++ b/components/metrics/metrics_pref_names.cc
@@ -169,5 +169,13 @@
     "uninstall_metrics.page_load_count";
 const char kUninstallMetricsUptimeSec[] = "uninstall_metrics.uptime_sec";
 
+// Dictionary for measuring cellular data used by UMA service during last 7
+// days.
+const char kUmaCellDataUse[] = "user_experience_metrics.uma_cell_datause";
+
+// Dictionary for measuring cellular data used by user including chrome services
+// per day.
+const char kUserCellDataUse[] = "user_experience_metrics.user_call_datause";
+
 }  // namespace prefs
 }  // namespace metrics
diff --git a/components/metrics/metrics_pref_names.h b/components/metrics/metrics_pref_names.h
index 15f5aca..52733611 100644
--- a/components/metrics/metrics_pref_names.h
+++ b/components/metrics/metrics_pref_names.h
@@ -53,6 +53,11 @@
 extern const char kUninstallLaunchCount[];
 extern const char kUninstallMetricsPageLoadCount[];
 extern const char kUninstallMetricsUptimeSec[];
+
+// For measuring data use for throttling UMA log uploads on cellular.
+extern const char kUmaCellDataUse[];
+extern const char kUserCellDataUse[];
+
 }  // namespace prefs
 }  // namespace metrics
 
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index b44b4eb..315229b 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -149,6 +149,7 @@
 #include "base/tracked_objects.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "components/metrics/data_use_tracker.h"
 #include "components/metrics/metrics_log.h"
 #include "components/metrics/metrics_log_manager.h"
 #include "components/metrics/metrics_log_uploader.h"
@@ -258,6 +259,7 @@
   DCHECK(IsSingleThreaded());
   MetricsStateManager::RegisterPrefs(registry);
   MetricsLog::RegisterPrefs(registry);
+  DataUseTracker::RegisterPrefs(registry);
 
   registry->RegisterInt64Pref(prefs::kInstallDate, 0);
 
@@ -294,6 +296,7 @@
       log_upload_in_progress_(false),
       idle_since_last_transmission_(false),
       session_id_(-1),
+      data_use_tracker_(DataUseTracker::Create(local_state_)),
       self_ptr_factory_(this),
       state_saver_factory_(this) {
   DCHECK(IsSingleThreaded());
@@ -545,6 +548,16 @@
   log_manager_.StoreLog(log, MetricsLog::ONGOING_LOG);
 }
 
+UpdateUsagePrefCallbackType MetricsService::GetDataUseForwardingCallback() {
+  DCHECK(IsSingleThreaded());
+
+  if (data_use_tracker_) {
+    return data_use_tracker_->GetDataUseForwardingCallback(
+        base::ThreadTaskRunnerHandle::Get());
+  }
+  return UpdateUsagePrefCallbackType();
+}
+
 //------------------------------------------------------------------------------
 // private methods
 //------------------------------------------------------------------------------
@@ -866,7 +879,16 @@
   }
   if (!log_manager_.has_staged_log())
     log_manager_.StageNextLogForUpload();
-  SendStagedLog();
+
+  // Proceed to stage the log for upload if log size satisfies cellular log
+  // upload constrains.
+  if (client_->IsUMACellularUploadLogicEnabled() &&
+      !data_use_tracker_->ShouldUploadLogOnCellular(
+          log_manager_.staged_log_hash().size())) {
+    scheduler_->UploadCancelled();
+  } else {
+    SendStagedLog();
+  }
 }
 
 bool MetricsService::ProvidersHaveInitialStabilityMetrics() {
diff --git a/components/metrics/metrics_service.h b/components/metrics/metrics_service.h
index ce4102b8..f02df4b 100644
--- a/components/metrics/metrics_service.h
+++ b/components/metrics/metrics_service.h
@@ -27,6 +27,7 @@
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/metrics/clean_exit_beacon.h"
+#include "components/metrics/data_use_tracker.h"
 #include "components/metrics/metrics_log.h"
 #include "components/metrics/metrics_log_manager.h"
 #include "components/metrics/metrics_provider.h"
@@ -214,6 +215,10 @@
   // Pushes a log that has been generated by an external component.
   void PushExternalLog(const std::string& log);
 
+  // Returns a callback to data use pref updating function which can be called
+  // from any thread, but this function should be called on UI thread.
+  UpdateUsagePrefCallbackType GetDataUseForwardingCallback();
+
  protected:
   // Exposed for testing.
   MetricsLogManager* log_manager() { return &log_manager_; }
@@ -468,7 +473,7 @@
   // Execution phase the browser is in.
   static ExecutionPhase execution_phase_;
 
-  // Reduntant marker to check that we completed our shutdown, and set the
+  // Redundant marker to check that we completed our shutdown, and set the
   // exited-cleanly bit in the prefs.
   static ShutdownCleanliness clean_shutdown_status_;
 
@@ -477,6 +482,9 @@
                            PermutedEntropyCacheClearedWhenLowEntropyReset);
   FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial);
 
+  // Pointer used for obtaining data use pref updater callback on above layers.
+  scoped_ptr<DataUseTracker> data_use_tracker_;
+
   // Weak pointers factory used to post task on different threads. All weak
   // pointers managed by this factory have the same lifetime as MetricsService.
   base::WeakPtrFactory<MetricsService> self_ptr_factory_;
diff --git a/components/metrics/metrics_service_client.cc b/components/metrics/metrics_service_client.cc
index 2a1635b..cd5b53c 100644
--- a/components/metrics/metrics_service_client.cc
+++ b/components/metrics/metrics_service_client.cc
@@ -19,4 +19,8 @@
   return DEFAULT_UNKNOWN;
 }
 
+bool MetricsServiceClient::IsUMACellularUploadLogicEnabled() {
+  return false;
+}
+
 }  // namespace metrics
diff --git a/components/metrics/metrics_service_client.h b/components/metrics/metrics_service_client.h
index cde60e2c..43c5d136c 100644
--- a/components/metrics/metrics_service_client.h
+++ b/components/metrics/metrics_service_client.h
@@ -117,6 +117,9 @@
   // Gets information about the default value for the enable metrics reporting
   // checkbox shown during first-run.
   virtual EnableMetricsDefault GetDefaultOptIn();
+
+  // Returns whether cellular logic is enabled for metrics reporting.
+  virtual bool IsUMACellularUploadLogicEnabled();
 };
 
 }  // namespace metrics
diff --git a/components/mus/DEPS b/components/mus/DEPS
index 9ccd854..da5c6f43 100644
--- a/components/mus/DEPS
+++ b/components/mus/DEPS
@@ -6,7 +6,6 @@
   "+mojo/common",
   "+mojo/converters",
   "+mojo/public",
-  "+mojo/services/network/public",
   "+mojo/services/tracing/public",
   "+mojo/shell",
   "+third_party/skia/include",
diff --git a/components/mus/public/cpp/BUILD.gn b/components/mus/public/cpp/BUILD.gn
index b4c7ed9..90a1e7b 100644
--- a/components/mus/public/cpp/BUILD.gn
+++ b/components/mus/public/cpp/BUILD.gn
@@ -41,7 +41,6 @@
 
   public_deps = [
     "../interfaces",
-    "//mojo/services/network/public/interfaces",
   ]
 
   deps = [
diff --git a/components/mus/public/cpp/window_tree_delegate.h b/components/mus/public/cpp/window_tree_delegate.h
index bd42b27..7717a39 100644
--- a/components/mus/public/cpp/window_tree_delegate.h
+++ b/components/mus/public/cpp/window_tree_delegate.h
@@ -8,7 +8,6 @@
 #include <string>
 
 #include "components/mus/public/interfaces/window_tree.mojom.h"
-#include "mojo/services/network/public/interfaces/url_loader.mojom.h"
 #include "mojo/shell/public/interfaces/interface_provider.mojom.h"
 
 namespace mus {
diff --git a/components/mus/ws/display.cc b/components/mus/ws/display.cc
index f8582f6..b607786 100644
--- a/components/mus/ws/display.cc
+++ b/components/mus/ws/display.cc
@@ -21,6 +21,7 @@
 #include "mojo/common/common_type_converters.h"
 #include "mojo/converters/geometry/geometry_type_converters.h"
 #include "mojo/shell/public/interfaces/connector.mojom.h"
+#include "ui/base/cursor/cursor.h"
 
 namespace mus {
 namespace ws {
@@ -30,7 +31,7 @@
     : id_(window_server->display_manager()->GetAndAdvanceNextDisplayId()),
       window_server_(window_server),
       platform_display_(PlatformDisplay::Create(platform_display_init_params)),
-      last_cursor_(0) {
+      last_cursor_(ui::kCursorNone) {
   platform_display_->Init(this);
 
   window_server_->window_manager_factory_registry()->AddObserver(this);
@@ -157,12 +158,12 @@
       window_server_->user_id_tracker()->active_id());
 }
 
-void Display::SetFocusedWindow(ServerWindow* new_focused_window) {
+bool Display::SetFocusedWindow(ServerWindow* new_focused_window) {
   ServerWindow* old_focused_window = focus_controller_->GetFocusedWindow();
   if (old_focused_window == new_focused_window)
-    return;
+    return true;
   DCHECK(!new_focused_window || root_window()->Contains(new_focused_window));
-  focus_controller_->SetFocusedWindow(new_focused_window);
+  return focus_controller_->SetFocusedWindow(new_focused_window);
 }
 
 ServerWindow* Display::GetFocusedWindow() {
diff --git a/components/mus/ws/display.h b/components/mus/ws/display.h
index b83c11d91..ba7cebf5 100644
--- a/components/mus/ws/display.h
+++ b/components/mus/ws/display.h
@@ -115,7 +115,9 @@
 
   // TODO(sky): this should only be called by WindowServer, move to interface
   // used by WindowServer.
-  void SetFocusedWindow(ServerWindow* window);
+  // See description of WindowServer::SetFocusedWindow() for details on return
+  // value.
+  bool SetFocusedWindow(ServerWindow* window);
   // NOTE: this returns the focused window only if the focused window is in this
   // display. If this returns null focus may be in another display.
   ServerWindow* GetFocusedWindow();
diff --git a/components/mus/ws/display_unittest.cc b/components/mus/ws/display_unittest.cc
index 5d54baa..ca573c98 100644
--- a/components/mus/ws/display_unittest.cc
+++ b/components/mus/ws/display_unittest.cc
@@ -259,20 +259,26 @@
   Display* display = *display_manager->displays().begin();
   WindowManagerState* wms_for_id2 =
       display->GetWindowManagerStateForUser(kTestId2);
+  wms_for_id2->tree()->AddActivationParent(
+      ClientWindowIdForFirstRoot(wms_for_id2->tree()));
   ASSERT_TRUE(wms_for_id2);
   EXPECT_FALSE(wms_for_id2->IsActive());
+  ClientWindowId child2_id;
+  NewWindowInTree(wms_for_id2->tree(), &child2_id);
 
   // Focus should fail for windows in inactive window managers.
-  EXPECT_FALSE(wms_for_id2->tree()->SetFocus(
-      ClientWindowIdForFirstRoot(wms_for_id2->tree())));
+  EXPECT_FALSE(wms_for_id2->tree()->SetFocus(child2_id));
 
   // Focus should succeed for the active window manager.
   WindowManagerState* wms_for_id1 =
       display->GetWindowManagerStateForUser(kTestId1);
   ASSERT_TRUE(wms_for_id1);
+  wms_for_id1->tree()->AddActivationParent(
+      ClientWindowIdForFirstRoot(wms_for_id1->tree()));
+  ClientWindowId child1_id;
+  NewWindowInTree(wms_for_id1->tree(), &child1_id);
   EXPECT_TRUE(wms_for_id1->IsActive());
-  EXPECT_TRUE(wms_for_id1->tree()->SetFocus(
-      ClientWindowIdForFirstRoot(wms_for_id1->tree())));
+  EXPECT_TRUE(wms_for_id1->tree()->SetFocus(child1_id));
 }
 
 // Verifies clients are notified of focus changes in different displays.
diff --git a/components/mus/ws/focus_controller.cc b/components/mus/ws/focus_controller.cc
index 6985893b..5728acbe1 100644
--- a/components/mus/ws/focus_controller.cc
+++ b/components/mus/ws/focus_controller.cc
@@ -71,11 +71,11 @@
 FocusController::~FocusController() {
 }
 
-void FocusController::SetFocusedWindow(ServerWindow* window) {
+bool FocusController::SetFocusedWindow(ServerWindow* window) {
   if (GetFocusedWindow() == window)
-    return;
+    return true;
 
-  SetFocusedWindowImpl(FocusControllerChangeSource::EXPLICIT, window);
+  return SetFocusedWindowImpl(FocusControllerChangeSource::EXPLICIT, window);
 }
 
 ServerWindow* FocusController::GetFocusedWindow() {
@@ -207,11 +207,12 @@
   return nullptr;
 }
 
-void FocusController::SetFocusedWindowImpl(
+bool FocusController::SetFocusedWindowImpl(
     FocusControllerChangeSource change_source,
     ServerWindow* window) {
   if (window && !CanBeFocused(window))
-    return;
+    return false;
+
   ServerWindow* old_focused = GetFocusedWindow();
 
   DCHECK(!window || window->IsDrawn());
@@ -238,6 +239,7 @@
     drawn_tracker_.reset(new ServerWindowDrawnTracker(track_window, this));
   else
     drawn_tracker_.reset();
+  return true;
 }
 
 void FocusController::OnDrawnStateWillChange(ServerWindow* ancestor,
diff --git a/components/mus/ws/focus_controller.h b/components/mus/ws/focus_controller.h
index 113a1cba..1dea308a 100644
--- a/components/mus/ws/focus_controller.h
+++ b/components/mus/ws/focus_controller.h
@@ -35,8 +35,9 @@
   ~FocusController() override;
 
   // Sets the focused window. Does nothing if |window| is currently focused.
-  // This does not notify the delegate.
-  void SetFocusedWindow(ServerWindow* window);
+  // This does not notify the delegate. See ServerWindow::SetFocusedWindow()
+  // for details on return value.
+  bool SetFocusedWindow(ServerWindow* window);
   ServerWindow* GetFocusedWindow();
 
   // Moves activation to the next activatable window.
@@ -63,7 +64,7 @@
   ServerWindow* GetActivatableAncestorOf(ServerWindow* window) const;
 
   // Implementation of SetFocusedWindow().
-  void SetFocusedWindowImpl(FocusControllerChangeSource change_source,
+  bool SetFocusedWindowImpl(FocusControllerChangeSource change_source,
                             ServerWindow* window);
 
   // ServerWindowDrawnTrackerObserver:
diff --git a/components/mus/ws/window_server.cc b/components/mus/ws/window_server.cc
index 14e2c9af..c5195aa3 100644
--- a/components/mus/ws/window_server.cc
+++ b/components/mus/ws/window_server.cc
@@ -237,7 +237,7 @@
   delegate_->CreateDefaultDisplays();
 }
 
-void WindowServer::SetFocusedWindow(ServerWindow* window) {
+bool WindowServer::SetFocusedWindow(ServerWindow* window) {
   // TODO(sky): this should fail if there is modal dialog active and |window|
   // is outside that.
   ServerWindow* currently_focused = GetFocusedWindow();
@@ -245,21 +245,21 @@
       currently_focused
           ? display_manager_->GetDisplayContaining(currently_focused)
           : nullptr;
-  if (!window) {
-    if (focused_display)
-      focused_display->SetFocusedWindow(nullptr);
-    return;
-  }
+  if (!window)
+    return focused_display ? focused_display->SetFocusedWindow(nullptr) : true;
+
   Display* display = display_manager_->GetDisplayContaining(window);
   DCHECK(display);  // It's assumed callers do validation before calling this.
-  display->SetFocusedWindow(window);
+  const bool result = display->SetFocusedWindow(window);
   // If the focus actually changed, and focus was in another display, then we
   // need to notify the previously focused display so that it cleans up state
   // and notifies appropriately.
-  if (window && display->GetFocusedWindow() && display != focused_display &&
+  if (result && display->GetFocusedWindow() && display != focused_display &&
       focused_display) {
-    focused_display->SetFocusedWindow(nullptr);
+    const bool cleared_focus = focused_display->SetFocusedWindow(nullptr);
+    DCHECK(cleared_focus);
   }
+  return result;
 }
 
 ServerWindow* WindowServer::GetFocusedWindow() {
diff --git a/components/mus/ws/window_server.h b/components/mus/ws/window_server.h
index b05efb8e..cf945a0d 100644
--- a/components/mus/ws/window_server.h
+++ b/components/mus/ws/window_server.h
@@ -134,7 +134,10 @@
     return &window_manager_factory_registry_;
   }
 
-  void SetFocusedWindow(ServerWindow* window);
+  // Sets focus to |window|. Returns true if |window| already has focus, or
+  // focus was successfully changed. Returns |false| if |window| is not a valid
+  // window to receive focus.
+  bool SetFocusedWindow(ServerWindow* window);
   ServerWindow* GetFocusedWindow();
 
   // Returns a change id for the window manager that is associated with
diff --git a/components/mus/ws/window_tree.cc b/components/mus/ws/window_tree.cc
index 61a37d0..b4624fb 100644
--- a/components/mus/ws/window_tree.cc
+++ b/components/mus/ws/window_tree.cc
@@ -283,8 +283,7 @@
     return false;
 
   Operation op(this, window_server_, OperationType::SET_FOCUS);
-  window_server_->SetFocusedWindow(window);
-  return true;
+  return window_server_->SetFocusedWindow(window);
 }
 
 bool WindowTree::Embed(const ClientWindowId& window_id,
@@ -347,6 +346,15 @@
                               drawn);
 }
 
+void WindowTree::AddActivationParent(const ClientWindowId& window_id) {
+  Display* host = GetDisplayForWindowManager();
+  if (!host)
+    return;
+  ServerWindow* window = GetWindowByClientId(window_id);
+  if (window)
+    host->AddActivationParent(window);
+}
+
 void WindowTree::OnChangeCompleted(uint32_t change_id, bool success) {
   client()->OnChangeCompleted(change_id, success);
 }
@@ -1282,13 +1290,7 @@
 }
 
 void WindowTree::AddActivationParent(Id transport_window_id) {
-  Display* host = GetDisplayForWindowManager();
-  if (!host)
-    return;
-  ServerWindow* window =
-      GetWindowByClientId(ClientWindowId(transport_window_id));
-  if (window)
-    host->AddActivationParent(window);
+  AddActivationParent(ClientWindowId(transport_window_id));
 }
 
 void WindowTree::RemoveActivationParent(Id transport_window_id) {
diff --git a/components/mus/ws/window_tree.h b/components/mus/ws/window_tree.h
index a47c6c4d..c52a8fa8 100644
--- a/components/mus/ws/window_tree.h
+++ b/components/mus/ws/window_tree.h
@@ -147,6 +147,7 @@
   void OnWindowManagerCreatedTopLevelWindow(uint32_t wm_change_id,
                                             uint32_t client_change_id,
                                             const ServerWindow* window);
+  void AddActivationParent(const ClientWindowId& window_id);
 
   // Calls through to the client.
   void OnChangeCompleted(uint32_t change_id, bool success);
diff --git a/components/mus/ws/window_tree_unittest.cc b/components/mus/ws/window_tree_unittest.cc
index 509d659..88c3dbf 100644
--- a/components/mus/ws/window_tree_unittest.cc
+++ b/components/mus/ws/window_tree_unittest.cc
@@ -30,7 +30,6 @@
 #include "components/mus/ws/window_tree.h"
 #include "components/mus/ws/window_tree_binding.h"
 #include "mojo/converters/geometry/geometry_type_converters.h"
-#include "mojo/services/network/public/interfaces/url_loader.mojom.h"
 #include "mojo/shell/public/interfaces/connector.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/events/event.h"
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
index 50f0715..7b411cc1 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -118,6 +118,16 @@
     }
   }
 
+  if (timing.parse_blocked_on_script_load_from_document_write_duration >
+      timing.parse_blocked_on_script_load_duration) {
+    NOTREACHED()
+        << "Invalid parse_blocked_on_script_load_from_document_write_duration "
+        << timing.parse_blocked_on_script_load_from_document_write_duration
+        << " for parse_blocked_on_script_load_duration "
+        << timing.parse_blocked_on_script_load_duration;
+    return false;
+  }
+
   if (!EventsInOrder(timing.dom_loading,
                      timing.dom_content_loaded_event_start)) {
     NOTREACHED() << "Invalid dom_loading " << timing.dom_loading
diff --git a/components/page_load_metrics/common/page_load_metrics_messages.h b/components/page_load_metrics/common/page_load_metrics_messages.h
index 71e8c70b..687af97 100644
--- a/components/page_load_metrics/common/page_load_metrics_messages.h
+++ b/components/page_load_metrics/common/page_load_metrics_messages.h
@@ -26,6 +26,8 @@
   IPC_STRUCT_TRAITS_MEMBER(parse_start)
   IPC_STRUCT_TRAITS_MEMBER(parse_stop)
   IPC_STRUCT_TRAITS_MEMBER(parse_blocked_on_script_load_duration)
+  IPC_STRUCT_TRAITS_MEMBER(
+      parse_blocked_on_script_load_from_document_write_duration)
 IPC_STRUCT_TRAITS_END()
 
 // Sent from renderer to browser process when the PageLoadTiming for the
diff --git a/components/page_load_metrics/common/page_load_timing.cc b/components/page_load_metrics/common/page_load_timing.cc
index bc9d0b827..7c36820 100644
--- a/components/page_load_metrics/common/page_load_timing.cc
+++ b/components/page_load_metrics/common/page_load_timing.cc
@@ -25,7 +25,9 @@
          first_image_paint == other.first_image_paint &&
          parse_start == other.parse_start && parse_stop == other.parse_stop &&
          parse_blocked_on_script_load_duration ==
-             other.parse_blocked_on_script_load_duration;
+             other.parse_blocked_on_script_load_duration &&
+         parse_blocked_on_script_load_from_document_write_duration ==
+             other.parse_blocked_on_script_load_from_document_write_duration;
 }
 
 bool PageLoadTiming::IsEmpty() const {
@@ -35,7 +37,8 @@
          first_paint.is_zero() && first_text_paint.is_zero() &&
          first_image_paint.is_zero() && parse_start.is_zero() &&
          parse_stop.is_zero() &&
-         parse_blocked_on_script_load_duration.is_zero();
+         parse_blocked_on_script_load_duration.is_zero() &&
+         parse_blocked_on_script_load_from_document_write_duration.is_zero();
 }
 
 }  // namespace page_load_metrics
diff --git a/components/page_load_metrics/common/page_load_timing.h b/components/page_load_metrics/common/page_load_timing.h
index 3b1df5e..da1ce89 100644
--- a/components/page_load_metrics/common/page_load_timing.h
+++ b/components/page_load_metrics/common/page_load_timing.h
@@ -62,6 +62,13 @@
   // must be less than or equal to parser_stop - parser_start.
   base::TimeDelta parse_blocked_on_script_load_duration;
 
+  // Sum of times when the parser is blocked waiting on the load of a script
+  // that was inserted from document.write. This duration must be less than or
+  // equal to parse_blocked_on_script_load_duration. Note that some uncommon
+  // cases where scripts are loaded via document.write are not currently covered
+  // by this field. See crbug/600711 for details.
+  base::TimeDelta parse_blocked_on_script_load_from_document_write_duration;
+
   // If you add additional members, also be sure to update operator==,
   // page_load_metrics_messages.h, and IsEmpty().
 };
diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
index e9bdf6ec..237c99c 100644
--- a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
+++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc
@@ -124,6 +124,9 @@
   timing.parse_stop = ClampDelta(perf.parseStop(), start);
   timing.parse_blocked_on_script_load_duration =
       base::TimeDelta::FromSecondsD(perf.parseBlockedOnScriptLoadDuration());
+  timing.parse_blocked_on_script_load_from_document_write_duration =
+      base::TimeDelta::FromSecondsD(
+          perf.parseBlockedOnScriptLoadFromDocumentWriteDuration());
   return timing;
 }
 
diff --git a/components/plugins/renderer/loadable_plugin_placeholder.cc b/components/plugins/renderer/loadable_plugin_placeholder.cc
index 11495d8..77c8ef4 100644
--- a/components/plugins/renderer/loadable_plugin_placeholder.cc
+++ b/components/plugins/renderer/loadable_plugin_placeholder.cc
@@ -101,8 +101,6 @@
     return;
   }
 
-  CHECK(container->plugin() == plugin());
-  // Set the new plugin on the container before initializing it.
   container->setPlugin(new_plugin);
   // Save the element in case the plugin is removed from the page during
   // initialization.
@@ -110,10 +108,12 @@
   bool plugin_needs_initialization =
       !premade_throttler_ || new_plugin != premade_throttler_->GetWebPlugin();
   if (plugin_needs_initialization && !new_plugin->initialize(container)) {
-    // Since the we couldn't initialize the new plugin, we must destroy it and
-    // restore the old one.
-    container->setPlugin(plugin());
-    new_plugin->destroy();
+    if (new_plugin->container()) {
+      // Since the we couldn't initialize the new plugin, but the container
+      // still exists, restore the placeholder and destroy the new plugin.
+      container->setPlugin(plugin());
+      new_plugin->destroy();
+    }
     return;
   }
 
diff --git a/components/plugins/renderer/webview_plugin.cc b/components/plugins/renderer/webview_plugin.cc
index 5075df3..e2a0b25c 100644
--- a/components/plugins/renderer/webview_plugin.cc
+++ b/components/plugins/renderer/webview_plugin.cc
@@ -126,24 +126,26 @@
 WebPluginContainer* WebViewPlugin::container() const { return container_; }
 
 bool WebViewPlugin::initialize(WebPluginContainer* container) {
+  DCHECK(container);
+  DCHECK_EQ(this, container->plugin());
   container_ = container;
-  if (container_) {
-    // We must call layout again here to ensure that the container is laid
-    // out before we next try to paint it, which is a requirement of the
-    // document life cycle in Blink. In most cases, needsLayout is set by
-    // scheduleAnimation, but due to timers controlling widget update,
-    // scheduleAnimation may be invoked before this initialize call (which
-    // comes through the widget update process). It doesn't hurt to mark
-    // for animation again, and it does help us in the race-condition situation.
-    container_->scheduleAnimation();
 
-    old_title_ = container_->element().getAttribute("title");
+  // We must call layout again here to ensure that the container is laid
+  // out before we next try to paint it, which is a requirement of the
+  // document life cycle in Blink. In most cases, needsLayout is set by
+  // scheduleAnimation, but due to timers controlling widget update,
+  // scheduleAnimation may be invoked before this initialize call (which
+  // comes through the widget update process). It doesn't hurt to mark
+  // for animation again, and it does help us in the race-condition situation.
+  container_->scheduleAnimation();
 
-    // Propagate device scale and zoom level to inner webview.
-    web_view_->setDeviceScaleFactor(container_->deviceScaleFactor());
-    web_view_->setZoomLevel(
-        blink::WebView::zoomFactorToZoomLevel(container_->pageZoomFactor()));
-  }
+  old_title_ = container_->element().getAttribute("title");
+
+  // Propagate device scale and zoom level to inner webview.
+  web_view_->setDeviceScaleFactor(container_->deviceScaleFactor());
+  web_view_->setZoomLevel(
+      blink::WebView::zoomFactorToZoomLevel(container_->pageZoomFactor()));
+
   return true;
 }
 
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index d417471..48cf1b8 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -5674,15 +5674,11 @@
       If enabled or not configured (default), the user will be prompted for
       video capture access except for URLs configured in the
       VideoCaptureAllowedUrls list which will be granted access without prompting.
-      ARC-apps will be able to access the camera if they have been given
-      permission.
 
       When this policy is disabled, the user will never be prompted and video
       capture only be available to URLs configured in VideoCaptureAllowedUrls.
-      ARC-apps will not be able to access the camera.
 
-      Outside of ARC-apps, this policy affects all types of video inputs and
-      not only the built-in camera.''',
+      This policy affects all types of video inputs and not only the built-in camera.''',
     },
     {
       'name': 'VideoCaptureAllowedUrls',
diff --git a/components/safe_browsing_db/database_manager.h b/components/safe_browsing_db/database_manager.h
index 5fa427f..12d893d 100644
--- a/components/safe_browsing_db/database_manager.h
+++ b/components/safe_browsing_db/database_manager.h
@@ -83,7 +83,7 @@
   virtual bool CanCheckUrl(const GURL& url) const = 0;
 
   // Returns whether download protection is enabled.
-  virtual bool download_protection_enabled() const = 0;
+  virtual bool IsDownloadProtectionEnabled() const = 0;
 
   // Called on the IO thread to check if the given url is safe or not.  If we
   // can synchronously determine that the url is safe, CheckUrl returns true.
diff --git a/components/safe_browsing_db/remote_database_manager.cc b/components/safe_browsing_db/remote_database_manager.cc
index 47d80627..a67e72d 100644
--- a/components/safe_browsing_db/remote_database_manager.cc
+++ b/components/safe_browsing_db/remote_database_manager.cc
@@ -165,7 +165,7 @@
          url.SchemeIs(url::kFtpScheme);
 }
 
-bool RemoteSafeBrowsingDatabaseManager::download_protection_enabled() const {
+bool RemoteSafeBrowsingDatabaseManager::IsDownloadProtectionEnabled() const {
   return false;
 }
 
diff --git a/components/safe_browsing_db/remote_database_manager.h b/components/safe_browsing_db/remote_database_manager.h
index ebf1f0cd..ffe2dbc8 100644
--- a/components/safe_browsing_db/remote_database_manager.h
+++ b/components/safe_browsing_db/remote_database_manager.h
@@ -43,7 +43,7 @@
   bool ChecksAreAlwaysAsync() const override;
   bool CanCheckResourceType(content::ResourceType resource_type) const override;
   bool CanCheckUrl(const GURL& url) const override;
-  bool download_protection_enabled() const override;
+  bool IsDownloadProtectionEnabled() const override;
   bool CheckBrowseUrl(const GURL& url, Client* client) override;
   void CancelCheck(Client* client) override;
   void StartOnIOThread(
diff --git a/components/safe_browsing_db/test_database_manager.cc b/components/safe_browsing_db/test_database_manager.cc
index dbccf5e9..478e064 100644
--- a/components/safe_browsing_db/test_database_manager.cc
+++ b/components/safe_browsing_db/test_database_manager.cc
@@ -40,7 +40,7 @@
   return false;
 }
 
-bool TestSafeBrowsingDatabaseManager::download_protection_enabled() const {
+bool TestSafeBrowsingDatabaseManager::IsDownloadProtectionEnabled() const {
   NOTIMPLEMENTED();
   return false;
 }
diff --git a/components/safe_browsing_db/test_database_manager.h b/components/safe_browsing_db/test_database_manager.h
index c56e683..eb7fcfd 100644
--- a/components/safe_browsing_db/test_database_manager.h
+++ b/components/safe_browsing_db/test_database_manager.h
@@ -31,7 +31,7 @@
   bool ChecksAreAlwaysAsync() const override;
   bool CanCheckResourceType(content::ResourceType resource_type) const override;
   bool CanCheckUrl(const GURL& url) const override;
-  bool download_protection_enabled() const override;
+  bool IsDownloadProtectionEnabled() const override;
   bool CheckBrowseUrl(const GURL& url, Client* client) override;
   bool CheckDownloadUrl(const std::vector<GURL>& url_chain,
                         Client* client) override;
diff --git a/components/sync_driver/glue/sync_backend_host_core.cc b/components/sync_driver/glue/sync_backend_host_core.cc
index 8e6c1f7..98e90e3 100644
--- a/components/sync_driver/glue/sync_backend_host_core.cc
+++ b/components/sync_driver/glue/sync_backend_host_core.cc
@@ -4,7 +4,10 @@
 
 #include "components/sync_driver/glue/sync_backend_host_core.h"
 
+#include <map>
+#include <string>
 #include <utility>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/files/file_util.h"
@@ -24,7 +27,6 @@
 #include "sync/internal_api/public/sessions/status_counters.h"
 #include "sync/internal_api/public/sessions/sync_session_snapshot.h"
 #include "sync/internal_api/public/sessions/update_counters.h"
-#include "sync/internal_api/public/sync_context_proxy.h"
 #include "sync/internal_api/public/sync_manager.h"
 #include "sync/internal_api/public/sync_manager_factory.h"
 #include "url/gurl.h"
@@ -548,9 +550,8 @@
 
   host_.Call(FROM_HERE,
              &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop,
-             js_backend_,
-             debug_info_listener_,
-             sync_manager_->GetSyncContextProxy(),
+             js_backend_, debug_info_listener_,
+             base::Passed(sync_manager_->GetSyncContextProxy()),
              sync_manager_->cache_guid());
 
   js_backend_.Reset();
diff --git a/components/sync_driver/glue/sync_backend_host_impl.cc b/components/sync_driver/glue/sync_backend_host_impl.cc
index b1927f1..0b7dfa2 100644
--- a/components/sync_driver/glue/sync_backend_host_impl.cc
+++ b/components/sync_driver/glue/sync_backend_host_impl.cc
@@ -240,7 +240,7 @@
   frontend_ = NULL;
 
   // Stop non-blocking sync types from sending any more requests to the syncer.
-  sync_context_proxy_.reset();
+  sync_context_.reset();
 
   DCHECK(registrar_->sync_thread()->IsRunning());
 
@@ -442,12 +442,12 @@
     syncer::ModelType type,
     scoped_ptr<syncer_v2::ActivationContext> activation_context) {
   registrar_->RegisterNonBlockingType(type);
-  sync_context_proxy_->ConnectTypeToSync(type, std::move(activation_context));
+  sync_context_->ConnectType(type, std::move(activation_context));
 }
 
 void SyncBackendHostImpl::DeactivateNonBlockingDataType(
     syncer::ModelType type) {
-  sync_context_proxy_->Disconnect(type);
+  sync_context_->DisconnectType(type);
 }
 
 syncer::UserShare* SyncBackendHostImpl::GetUserShare() const {
@@ -600,12 +600,11 @@
     const syncer::WeakHandle<syncer::JsBackend> js_backend,
     const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>
         debug_info_listener,
-    syncer_v2::SyncContextProxy* sync_context_proxy,
+    scoped_ptr<syncer_v2::SyncContext> sync_context,
     const std::string& cache_guid) {
   DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
 
-  if (sync_context_proxy)
-    sync_context_proxy_ = sync_context_proxy->Clone();
+  sync_context_ = std::move(sync_context);
 
   if (!frontend_)
     return;
diff --git a/components/sync_driver/glue/sync_backend_host_impl.h b/components/sync_driver/glue/sync_backend_host_impl.h
index c173a495..54618c2 100644
--- a/components/sync_driver/glue/sync_backend_host_impl.h
+++ b/components/sync_driver/glue/sync_backend_host_impl.h
@@ -7,7 +7,9 @@
 
 #include <stdint.h>
 
+#include <map>
 #include <string>
+#include <vector>
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
@@ -184,14 +186,13 @@
   // Reports backend initialization success.  Includes some objects from sync
   // manager initialization to be passed back to the UI thread.
   //
-  // |sync_context_proxy| points to an object owned by the SyncManager.
-  // Ownership is not transferred, but we can obtain our own copy of the object
-  // using its Clone() method.
+  // |sync_context| is our SyncContext, which is owned because in
+  // production it is a proxy object to the real SyncContext.
   virtual void HandleInitializationSuccessOnFrontendLoop(
       const syncer::WeakHandle<syncer::JsBackend> js_backend,
       const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>
           debug_info_listener,
-      syncer_v2::SyncContextProxy* sync_context_proxy,
+      scoped_ptr<syncer_v2::SyncContext> sync_context,
       const std::string& cache_guid);
 
   // Forwards a ProtocolEvent to the frontend.  Will not be called unless a
@@ -333,8 +334,9 @@
   // sync loop.
   scoped_refptr<SyncBackendHostCore> core_;
 
-  // A handle referencing the main interface for non-blocking sync types.
-  scoped_ptr<syncer_v2::SyncContextProxy> sync_context_proxy_;
+  // A handle referencing the main interface for non-blocking sync types. This
+  // object is owned because in production code it is a proxy object.
+  scoped_ptr<syncer_v2::SyncContext> sync_context_;
 
   bool initialized_;
 
diff --git a/components/test_runner/test_plugin.cc b/components/test_runner/test_plugin.cc
index 2ac4634d..ba1e561 100644
--- a/components/test_runner/test_plugin.cc
+++ b/components/test_runner/test_plugin.cc
@@ -174,6 +174,11 @@
 }
 
 bool TestPlugin::initialize(blink::WebPluginContainer* container) {
+  DCHECK(container);
+  DCHECK_EQ(this, container->plugin());
+
+  container_ = container;
+
   blink::Platform::ContextAttributes attrs;
   DCHECK(!container->element().isNull());
   DCHECK(!container->element().document().isNull());
@@ -190,7 +195,6 @@
 
   layer_ = cc::TextureLayer::CreateForMailbox(this);
   web_layer_ = make_scoped_ptr(new cc_blink::WebLayerImpl(layer_));
-  container_ = container;
   container_->setWebLayer(web_layer_.get());
   if (re_request_touch_events_) {
     container_->requestTouchEventType(
@@ -223,6 +227,10 @@
       new DeferredDeleteTask(make_scoped_ptr(this)));
 }
 
+blink::WebPluginContainer* TestPlugin::container() const {
+  return container_;
+}
+
 bool TestPlugin::canProcessDrag() const {
   return can_process_drag_;
 }
diff --git a/components/test_runner/test_plugin.h b/components/test_runner/test_plugin.h
index 8dba678b..cc9fed6 100644
--- a/components/test_runner/test_plugin.h
+++ b/components/test_runner/test_plugin.h
@@ -70,6 +70,7 @@
   // WebPlugin methods:
   bool initialize(blink::WebPluginContainer* container) override;
   void destroy() override;
+  blink::WebPluginContainer* container() const override;
   bool canProcessDrag() const override;
   bool supportsKeyboardFocus() const override;
   void updateAllLifecyclePhases() override {}
diff --git a/components/test_runner/test_runner.cc b/components/test_runner/test_runner.cc
index 96941df..e6f6a391 100644
--- a/components/test_runner/test_runner.cc
+++ b/components/test_runner/test_runner.cc
@@ -152,7 +152,6 @@
   void DumpPermissionClientCallbacks();
   void DumpPingLoaderCallbacks();
   void DumpResourceLoadCallbacks();
-  void DumpResourceRequestCallbacks();
   void DumpResourceRequestPriorities();
   void DumpResourceResponseMIMETypes();
   void DumpSelectionRect();
@@ -179,7 +178,6 @@
   void QueueBackNavigation(int how_far_back);
   void QueueForwardNavigation(int how_far_forward);
   void QueueLoad(gin::Arguments* args);
-  void QueueLoadHTMLString(gin::Arguments* args);
   void QueueLoadingScript(const std::string& script);
   void QueueNonLoadingScript(const std::string& script);
   void QueueReload();
@@ -288,8 +286,6 @@
   std::string SelectionAsMarkup();
   std::string TooltipText();
 
-  bool WasMockSpeechRecognitionAborted();
-
   int WebHistoryItemCount();
   int WindowCount();
 
@@ -347,17 +343,11 @@
                  &TestRunnerBindings::AddOriginAccessWhitelistEntry)
       .SetMethod("addWebPageOverlay", &TestRunnerBindings::AddWebPageOverlay)
       .SetMethod("animationScheduled", &TestRunnerBindings::AnimationScheduled)
-      .SetMethod("applicationCacheDiskUsageForOrigin",
-                 &TestRunnerBindings::NotImplemented)
       .SetMethod("callShouldCloseOnWebView",
                  &TestRunnerBindings::CallShouldCloseOnWebView)
       .SetMethod("capturePixelsAsyncThen",
                  &TestRunnerBindings::CapturePixelsAsyncThen)
-      .SetMethod("clearAllApplicationCaches",
-                 &TestRunnerBindings::NotImplemented)
       .SetMethod("clearAllDatabases", &TestRunnerBindings::ClearAllDatabases)
-      .SetMethod("clearApplicationCacheForOrigin",
-                 &TestRunnerBindings::NotImplemented)
       .SetMethod("clearBackForwardList", &TestRunnerBindings::NotImplemented)
       .SetMethod("clearGeofencingMockProvider",
                  &TestRunnerBindings::ClearGeofencingMockProvider)
@@ -365,9 +355,6 @@
       .SetMethod("closeWebInspector", &TestRunnerBindings::CloseWebInspector)
       .SetMethod("copyImageAtAndCapturePixelsAsyncThen",
                  &TestRunnerBindings::CopyImageAtAndCapturePixelsAsyncThen)
-      .SetMethod("deleteAllLocalStorage", &TestRunnerBindings::NotImplemented)
-      .SetMethod("deleteLocalStorageForOrigin",
-                 &TestRunnerBindings::NotImplemented)
       .SetMethod("didAcquirePointerLock",
                  &TestRunnerBindings::DidAcquirePointerLock)
       .SetMethod("didLosePointerLock", &TestRunnerBindings::DidLosePointerLock)
@@ -409,8 +396,6 @@
                  &TestRunnerBindings::DumpPingLoaderCallbacks)
       .SetMethod("dumpResourceLoadCallbacks",
                  &TestRunnerBindings::DumpResourceLoadCallbacks)
-      .SetMethod("dumpResourceRequestCallbacks",
-                 &TestRunnerBindings::DumpResourceRequestCallbacks)
       .SetMethod("dumpResourceRequestPriorities",
                  &TestRunnerBindings::DumpResourceRequestPriorities)
       .SetMethod("dumpResourceResponseMIMETypes",
@@ -425,8 +410,6 @@
       .SetMethod("dumpTitleChanges", &TestRunnerBindings::DumpTitleChanges)
       .SetMethod("dumpUserGestureInFrameLoadCallbacks",
                  &TestRunnerBindings::DumpUserGestureInFrameLoadCallbacks)
-      .SetMethod("dumpWindowStatusChanges",
-                 &TestRunnerBindings::DumpWindowStatusChanges)
       .SetMethod("enableAutoResizeMode",
                  &TestRunnerBindings::EnableAutoResizeMode)
       .SetMethod("enableUseZoomForDSF",
@@ -467,13 +450,8 @@
                  &TestRunnerBindings::LayoutAndPaintAsync)
       .SetMethod("layoutAndPaintAsyncThen",
                  &TestRunnerBindings::LayoutAndPaintAsyncThen)
-      .SetMethod("localStorageDiskUsageForOrigin",
-                 &TestRunnerBindings::NotImplemented)
       .SetMethod("logToStderr", &TestRunnerBindings::LogToStderr)
       .SetMethod("notifyDone", &TestRunnerBindings::NotifyDone)
-      .SetMethod("observeStorageTrackerNotifications",
-                 &TestRunnerBindings::NotImplemented)
-      .SetMethod("originsWithLocalStorage", &TestRunnerBindings::NotImplemented)
       .SetMethod("overridePreference", &TestRunnerBindings::OverridePreference)
       .SetMethod("pathToLocalResource",
                  &TestRunnerBindings::PathToLocalResource)
@@ -483,8 +461,6 @@
       .SetMethod("queueForwardNavigation",
                  &TestRunnerBindings::QueueForwardNavigation)
       .SetMethod("queueLoad", &TestRunnerBindings::QueueLoad)
-      .SetMethod("queueLoadHTMLString",
-                 &TestRunnerBindings::QueueLoadHTMLString)
       .SetMethod("queueLoadingScript", &TestRunnerBindings::QueueLoadingScript)
       .SetMethod("queueNonLoadingScript",
                  &TestRunnerBindings::QueueNonLoadingScript)
@@ -515,8 +491,6 @@
                  &TestRunnerBindings::SetAllowUniversalAccessFromFileURLs)
       .SetMethod("setAlwaysAcceptCookies",
                  &TestRunnerBindings::SetAlwaysAcceptCookies)
-      .SetMethod("setApplicationCacheOriginQuota",
-                 &TestRunnerBindings::NotImplemented)
       .SetMethod("setAudioData", &TestRunnerBindings::SetAudioData)
       .SetMethod("setBackingScaleFactor",
                  &TestRunnerBindings::SetBackingScaleFactor)
@@ -602,7 +576,6 @@
                  &TestRunnerBindings::SimulateWebNotificationClick)
       .SetMethod("simulateWebNotificationClose",
                  &TestRunnerBindings::SimulateWebNotificationClose)
-      .SetMethod("syncLocalStorage", &TestRunnerBindings::NotImplemented)
       .SetProperty("tooltipText", &TestRunnerBindings::TooltipText)
       .SetMethod("useUnfortunateSynchronousResizeMode",
                  &TestRunnerBindings::UseUnfortunateSynchronousResizeMode)
@@ -611,8 +584,6 @@
       .SetMethod("waitUntilDone", &TestRunnerBindings::WaitUntilDone)
       .SetMethod("waitUntilExternalURLLoad",
                  &TestRunnerBindings::WaitUntilExternalURLLoad)
-      .SetMethod("wasMockSpeechRecognitionAborted",
-                 &TestRunnerBindings::WasMockSpeechRecognitionAborted)
 
       // webHistoryItemCount is used by tests in LayoutTests\http\tests\history
       .SetProperty("webHistoryItemCount",
@@ -669,11 +640,6 @@
   }
 }
 
-void TestRunnerBindings::QueueLoadHTMLString(gin::Arguments* args) {
-  if (runner_)
-    runner_->QueueLoadHTMLString(args);
-}
-
 void TestRunnerBindings::SetCustomPolicyDelegate(gin::Arguments* args) {
   if (runner_)
     runner_->SetCustomPolicyDelegate(args);
@@ -1124,11 +1090,6 @@
     runner_->DumpResourceLoadCallbacks();
 }
 
-void TestRunnerBindings::DumpResourceRequestCallbacks() {
-  if (runner_)
-    runner_->DumpResourceRequestCallbacks();
-}
-
 void TestRunnerBindings::DumpResourceResponseMIMETypes() {
   if (runner_)
     runner_->DumpResourceResponseMIMETypes();
@@ -1386,12 +1347,6 @@
     runner_->SetMockSpeechRecognitionError(error, message);
 }
 
-bool TestRunnerBindings::WasMockSpeechRecognitionAborted() {
-  if (runner_)
-    return runner_->WasMockSpeechRecognitionAborted();
-  return false;
-}
-
 void TestRunnerBindings::AddMockCredentialManagerResponse(
     const std::string& id,
     const std::string& name,
@@ -1691,7 +1646,6 @@
   dump_create_view_ = false;
   can_open_windows_ = false;
   dump_resource_load_callbacks_ = false;
-  dump_resource_request_callbacks_ = false;
   dump_resource_response_mime_types_ = false;
   dump_window_status_changes_ = false;
   dump_spell_check_callbacks_ = false;
@@ -2184,47 +2138,6 @@
   work_queue_.AddWork(new WorkItemLoad(full_url, target));
 }
 
-class WorkItemLoadHTMLString : public TestRunner::WorkItem  {
- public:
-  WorkItemLoadHTMLString(const std::string& html, const WebURL& base_url)
-      : html_(html), base_url_(base_url) {}
-
-  WorkItemLoadHTMLString(const std::string& html, const WebURL& base_url,
-                         const WebURL& unreachable_url)
-      : html_(html), base_url_(base_url), unreachable_url_(unreachable_url) {}
-
-  bool Run(WebTestDelegate*, WebView* web_view) override {
-    web_view->mainFrame()->loadHTMLString(
-        WebData(html_.data(), html_.length()),
-        base_url_, unreachable_url_);
-    return true;
-  }
-
- private:
-  std::string html_;
-  WebURL base_url_;
-  WebURL unreachable_url_;
-};
-
-void TestRunner::QueueLoadHTMLString(gin::Arguments* args) {
-  std::string html;
-  args->GetNext(&html);
-
-  std::string base_url_str;
-  args->GetNext(&base_url_str);
-  WebURL base_url = WebURL(GURL(base_url_str));
-
-  if (!args->PeekNext().IsEmpty() && args->PeekNext()->IsString()) {
-    std::string unreachable_url_str;
-    args->GetNext(&unreachable_url_str);
-    WebURL unreachable_url = WebURL(GURL(unreachable_url_str));
-    work_queue_.AddWork(new WorkItemLoadHTMLString(html, base_url,
-                                                   unreachable_url));
-  } else {
-    work_queue_.AddWork(new WorkItemLoadHTMLString(html, base_url));
-  }
-}
-
 void TestRunner::SetCustomPolicyDelegate(gin::Arguments* args) {
   bool value;
   args->GetNext(&value);
@@ -2807,10 +2720,6 @@
   dump_resource_load_callbacks_ = true;
 }
 
-void TestRunner::DumpResourceRequestCallbacks() {
-  dump_resource_request_callbacks_ = true;
-}
-
 void TestRunner::DumpResourceResponseMIMETypes() {
   dump_resource_response_mime_types_ = true;
 }
@@ -3073,10 +2982,6 @@
                                          WebString::fromUTF8(message));
 }
 
-bool TestRunner::WasMockSpeechRecognitionAborted() {
-  return getMockWebSpeechRecognizer()->WasAborted();
-}
-
 void TestRunner::AddMockCredentialManagerResponse(const std::string& id,
                                                   const std::string& name,
                                                   const std::string& avatar,
diff --git a/components/test_runner/test_runner.h b/components/test_runner/test_runner.h
index 2a4f87fd..46f6507 100644
--- a/components/test_runner/test_runner.h
+++ b/components/test_runner/test_runner.h
@@ -208,7 +208,6 @@
   void QueueLoadingScript(const std::string& script);
   void QueueNonLoadingScript(const std::string& script);
   void QueueLoad(const std::string& url, const std::string& target);
-  void QueueLoadHTMLString(gin::Arguments* args);
 
   // Causes navigation actions just printout the intended navigation instead
   // of taking you to the page. This is used for cases like mailto, where you
@@ -429,11 +428,6 @@
   // any that may be present.
   void DumpResourceLoadCallbacks();
 
-  // This function sets a flag that tells the test_shell to print a line of
-  // descriptive text for each element that requested a resource. It takes no
-  // arguments, and ignores any that may be present.
-  void DumpResourceRequestCallbacks();
-
   // This function sets a flag that tells the test_shell to dump the MIME type
   // for each resource that was loaded. It takes no arguments, and ignores any
   // that may be present.
@@ -612,7 +606,6 @@
                                       double confidence);
   void SetMockSpeechRecognitionError(const std::string& error,
                                      const std::string& message);
-  bool WasMockSpeechRecognitionAborted();
 
   // Credential Manager mock functions
   // TODO(mkwst): Support FederatedCredential.
@@ -746,10 +739,6 @@
   // load callback.
   bool dump_resource_load_callbacks_;
 
-  // If true, the test_shell will output a descriptive line for each resource
-  // request callback.
-  bool dump_resource_request_callbacks_;
-
   // If true, the test_shell will output the MIME type for each resource that
   // was loaded.
   bool dump_resource_response_mime_types_;
diff --git a/components/user_manager/user.h b/components/user_manager/user.h
index 67b62fe..61ce0b4 100644
--- a/components/user_manager/user.h
+++ b/components/user_manager/user.h
@@ -67,8 +67,10 @@
   // Hence,
   //   (a) existing enumerated constants should never be deleted or reordered,
   //   (b) new constants should only be appended at the end of the enumeration.
+  // TODO(xdai): Add THIRDPARTY enum to keep track of third party wallpapers.
+  // See http://crbug.com/563627.
   enum WallpaperType {
-    /* DAILY = 0 */    // Removed.
+    DAILY = 0,         // Surprise wallpaper. Changes once a day if enabled.
     CUSTOMIZED = 1,    // Selected by user.
     DEFAULT = 2,       // Default.
     /* UNKNOWN = 3 */  // Removed.
diff --git a/content/BUILD.gn b/content/BUILD.gn
index d2d450a6..56941b8f 100644
--- a/content/BUILD.gn
+++ b/content/BUILD.gn
@@ -110,6 +110,15 @@
     "grit/content_resources.h",
     "content_resources.pak",
   ]
+  grit_flags = [
+    "-E",
+    "root_out_dir=" + rebase_path(root_out_dir, root_build_dir),
+  ]
+  deps = [
+    "//content/public/app:browser_manifest",
+    "//content/public/app:renderer_manifest",
+    "//mojo/services/catalog:manifest",
+  ]
 }
 
 # This target exists to "hold" the content_export header so we can do proper
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 2ada88c..69f627a7 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -6,7 +6,6 @@
 import("//build/config/ui.gni")
 import("//content/browser/browser.gni")
 import("//media/media_options.gni")
-import("//mojo/public/mojo_application_manifest.gni")
 
 source_set("browser") {
   # Only the public target should depend on this. All other targets (even
@@ -68,7 +67,6 @@
     "//mojo/common",
     "//mojo/common:url_type_converters",
     "//mojo/converters/geometry",
-    "//mojo/converters/network",
     "//mojo/public/cpp/bindings",
     "//mojo/public/js",
     "//mojo/shell",
@@ -121,11 +119,6 @@
     "//ui/touch_selection",
   ]
 
-  data_deps = [
-    ":chrome_manifest",
-    ":chrome_renderer_manifest",
-  ]
-
   sources = rebase_path(content_browser_gypi_values.private_browser_sources,
                         ".",
                         "//content")
@@ -537,15 +530,3 @@
     ]
   }
 }
-
-mojo_application_manifest("chrome_manifest") {
-  type = "exe"
-  application_name = "chrome"
-  source = "mojo/chrome_manifest.json"
-}
-
-mojo_application_manifest("chrome_renderer_manifest") {
-  type = "exe"
-  application_name = "chrome_renderer"
-  source = "mojo/chrome_renderer_manifest.json"
-}
diff --git a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
index 19469246..4e5f3f1 100644
--- a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
@@ -53,8 +53,8 @@
   bool is_offscreen = true;
   scoped_ptr<gpu::GLInProcessContext> context(gpu::GLInProcessContext::Create(
       service, nullptr /* surface */, is_offscreen, gfx::kNullAcceleratedWidget,
-      gfx::Size(1, 1), nullptr /* share_context */, false /* share_resources */,
-      attributes, gfx::PreferDiscreteGpu, mem_limits,
+      gfx::Size(1, 1), nullptr /* share_context */, attributes,
+      gfx::PreferDiscreteGpu, mem_limits,
       BrowserGpuMemoryBufferManager::current(), nullptr));
 
   gpu::GLInProcessContext* context_ptr = context.get();
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.cc b/content/browser/android/in_process/synchronous_compositor_impl.cc
index aa0a23b..f182989 100644
--- a/content/browser/android/in_process/synchronous_compositor_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_impl.cc
@@ -241,6 +241,14 @@
       root_offset);
 }
 
+void SynchronousCompositorImpl::SynchronouslyZoomBy(float zoom_delta,
+                                                    const gfx::Point& anchor) {
+  DCHECK(CalledOnValidThread());
+  if (!synchronous_input_handler_proxy_)
+    return;
+  synchronous_input_handler_proxy_->SynchronouslyZoomBy(zoom_delta, anchor);
+}
+
 void SynchronousCompositorImpl::SetIsActive(bool is_active) {
   TRACE_EVENT1("cc", "SynchronousCompositorImpl::SetIsActive", "is_active",
                is_active);
@@ -253,10 +261,6 @@
     begin_frame_source_->SetBeginFrameSourcePaused(!is_active_);
 }
 
-void SynchronousCompositorImpl::SynchronizeWithRenderer() {
-  // Intentional no-op. Nothing to synchronize.
-}
-
 void SynchronousCompositorImpl::OnComputeScroll(
     base::TimeTicks animation_time) {
   if (need_animate_input_) {
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.h b/content/browser/android/in_process/synchronous_compositor_impl.h
index fdb2700..29f48d2 100644
--- a/content/browser/android/in_process/synchronous_compositor_impl.h
+++ b/content/browser/android/in_process/synchronous_compositor_impl.h
@@ -74,8 +74,8 @@
   void SetMemoryPolicy(size_t bytes_limit) override;
   void DidChangeRootLayerScrollOffset(
       const gfx::ScrollOffset& root_offset) override;
+  void SynchronouslyZoomBy(float zoom_delta, const gfx::Point& anchor) override;
   void SetIsActive(bool is_active) override;
-  void SynchronizeWithRenderer() override;
   void OnComputeScroll(base::TimeTicks animation_time) override;
 
   // SynchronousCompositorBase overrides.
diff --git a/content/browser/android/synchronous_compositor_host.cc b/content/browser/android/synchronous_compositor_host.cc
index 127124b..7f6cdfc5 100644
--- a/content/browser/android/synchronous_compositor_host.cc
+++ b/content/browser/android/synchronous_compositor_host.cc
@@ -329,6 +329,19 @@
   DCHECK(!weak_ptr_factory_.HasWeakPtrs());
 }
 
+void SynchronousCompositorHost::SynchronouslyZoomBy(float zoom_delta,
+                                                    const gfx::Point& anchor) {
+  SyncCompositorCommonBrowserParams common_browser_params;
+  PopulateCommonParams(&common_browser_params);
+  SyncCompositorCommonRendererParams common_renderer_params;
+  if (!sender_->Send(new SyncCompositorMsg_ZoomBy(
+          routing_id_, common_browser_params, zoom_delta, anchor,
+          &common_renderer_params))) {
+    return;
+  }
+  ProcessCommonParams(common_renderer_params);
+}
+
 void SynchronousCompositorHost::SetIsActive(bool is_active) {
   if (is_active_ == is_active)
     return;
@@ -337,17 +350,6 @@
   SendAsyncCompositorStateIfNeeded();
 }
 
-void SynchronousCompositorHost::SynchronizeWithRenderer() {
-  SyncCompositorCommonBrowserParams common_browser_params;
-  PopulateCommonParams(&common_browser_params);
-  SyncCompositorCommonRendererParams common_renderer_params;
-  if (!sender_->Send(new SyncCompositorMsg_SynchronousUpdateState(
-          routing_id_, common_browser_params, &common_renderer_params))) {
-    return;
-  }
-  ProcessCommonParams(common_renderer_params);
-}
-
 void SynchronousCompositorHost::OnComputeScroll(
     base::TimeTicks animation_time) {
   if (!need_animate_scroll_)
diff --git a/content/browser/android/synchronous_compositor_host.h b/content/browser/android/synchronous_compositor_host.h
index e3a49ef..b9b15986 100644
--- a/content/browser/android/synchronous_compositor_host.h
+++ b/content/browser/android/synchronous_compositor_host.h
@@ -46,8 +46,8 @@
   void SetMemoryPolicy(size_t bytes_limit) override;
   void DidChangeRootLayerScrollOffset(
       const gfx::ScrollOffset& root_offset) override;
+  void SynchronouslyZoomBy(float zoom_delta, const gfx::Point& anchor) override;
   void SetIsActive(bool is_active) override;
-  void SynchronizeWithRenderer() override;
   void OnComputeScroll(base::TimeTicks animation_time) override;
 
   // SynchronousCompositorBase overrides.
diff --git a/content/browser/compositor/gl_helper_benchmark.cc b/content/browser/compositor/gl_helper_benchmark.cc
index 0cf27a38..845d82a4 100644
--- a/content/browser/compositor/gl_helper_benchmark.cc
+++ b/content/browser/compositor/gl_helper_benchmark.cc
@@ -67,7 +67,6 @@
         gfx::kNullAcceleratedWidget, /* window */
         gfx::Size(1, 1),             /* size */
         nullptr,                     /* share_context */
-        true,                        /* use_global_share_group */
         attributes, gfx::PreferDiscreteGpu,
         ::gpu::GLInProcessContextSharedMemoryLimits(),
         nullptr, /* gpu_memory_buffer_manager */
diff --git a/content/browser/compositor/gl_helper_unittest.cc b/content/browser/compositor/gl_helper_unittest.cc
index 9ba79b7..697c68b 100644
--- a/content/browser/compositor/gl_helper_unittest.cc
+++ b/content/browser/compositor/gl_helper_unittest.cc
@@ -73,7 +73,6 @@
         gfx::kNullAcceleratedWidget, /* window */
         gfx::Size(1, 1),             /* size */
         nullptr,                     /* share_context */
-        true,                        /* use_global_share_group */
         attributes, gfx::PreferDiscreteGpu,
         ::gpu::GLInProcessContextSharedMemoryLimits(),
         nullptr, /* gpu_memory_buffer_manager */
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index 08e8bcf..9a4ad65 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -35,7 +35,6 @@
 #include "content/browser/compositor/software_output_device_mus.h"
 #include "content/browser/gpu/browser_gpu_channel_host_factory.h"
 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
-#include "content/browser/gpu/compositor_util.h"
 #include "content/browser/gpu/gpu_data_manager_impl.h"
 #include "content/browser/gpu/gpu_surface_tracker.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
diff --git a/content/browser/compositor/test/no_transport_image_transport_factory.cc b/content/browser/compositor/test/no_transport_image_transport_factory.cc
index 74245a2d..f58d11fb 100644
--- a/content/browser/compositor/test/no_transport_image_transport_factory.cc
+++ b/content/browser/compositor/test/no_transport_image_transport_factory.cc
@@ -10,7 +10,6 @@
 #include "cc/output/context_provider.h"
 #include "cc/surfaces/surface_manager.h"
 #include "content/browser/compositor/gl_helper.h"
-#include "content/browser/gpu/compositor_util.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
 #include "ui/compositor/compositor.h"
 #include "ui/compositor/test/in_process_context_factory.h"
diff --git a/content/browser/devtools/protocol/inspector_handler.cc b/content/browser/devtools/protocol/inspector_handler.cc
index 31e9d1b..8e018a84 100644
--- a/content/browser/devtools/protocol/inspector_handler.cc
+++ b/content/browser/devtools/protocol/inspector_handler.cc
@@ -38,9 +38,12 @@
 Response InspectorHandler::Enable() {
   if (host_ && !host_->IsRenderFrameLive())
     client_->TargetCrashed(TargetCrashedParams::Create());
-  return Response::FallThrough();
+  return Response::OK();
 }
 
+Response InspectorHandler::Disable() {
+  return Response::OK();
+}
 
 }  // namespace inspector
 }  // namespace devtools
diff --git a/content/browser/devtools/protocol/inspector_handler.h b/content/browser/devtools/protocol/inspector_handler.h
index 08c1e5e..52325c4 100644
--- a/content/browser/devtools/protocol/inspector_handler.h
+++ b/content/browser/devtools/protocol/inspector_handler.h
@@ -29,6 +29,7 @@
   void TargetDetached(const std::string& reason);
 
   Response Enable();
+  Response Disable();
 
  private:
   scoped_ptr<Client> client_;
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index b47b446..c72a1d0 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -433,6 +433,23 @@
   MOCK_METHOD0(GetPermissionManager, PermissionManager*());
   MOCK_METHOD0(GetBackgroundSyncController, BackgroundSyncController*());
 
+  // Define these two methods to avoid a
+  // cannot access private member declared in class 'ScopedVector<net::URLRequestInterceptor>'
+  // build error if they're put in MOCK_METHOD.
+  net::URLRequestContextGetter* CreateRequestContext(
+      ProtocolHandlerMap* protocol_handlers,
+      URLRequestInterceptorScopedVector request_interceptors) override {
+    return nullptr;
+  }
+
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      ProtocolHandlerMap* protocol_handlers,
+      URLRequestInterceptorScopedVector request_interceptors) override {
+    return nullptr;
+  }
+
   scoped_ptr<ZoomLevelDelegate> CreateZoomLevelDelegate(
       const base::FilePath& path) override {
     return scoped_ptr<ZoomLevelDelegate>(CreateZoomLevelDelegateMock(path));
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index da162c8..617fc26 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -79,8 +79,6 @@
   headers.AddHeadersFromString(entry.extra_headers());
   headers.SetHeaderIfMissing(net::HttpRequestHeaders::kUserAgent,
                              GetContentClient()->GetUserAgent());
-  // TODO(clamy): match what blink is doing with accept headers.
-  headers.SetHeaderIfMissing("Accept", "*/*");
 
   // Fill POST data from the browser in the request body.
   scoped_refptr<ResourceRequestBody> request_body;
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index fdc7e33..a5cf74d7 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1895,8 +1895,13 @@
   GetServiceRegistry()->AddService(base::Bind(
       &PresentationServiceImpl::CreateMojoService, base::Unretained(this)));
 
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnableWebBluetooth)) {
+  bool enable_web_bluetooth = base::CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kEnableWebBluetooth);
+#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
+  enable_web_bluetooth = true;
+#endif
+
+  if (enable_web_bluetooth) {
     GetServiceRegistry()->AddService(
         base::Bind(&RenderFrameHostImpl::CreateWebBluetoothService,
                    base::Unretained(this)));
diff --git a/content/browser/loader/mime_type_resource_handler.cc b/content/browser/loader/mime_type_resource_handler.cc
index 3dc8dce..9451182 100644
--- a/content/browser/loader/mime_type_resource_handler.cc
+++ b/content/browser/loader/mime_type_resource_handler.cc
@@ -35,11 +35,20 @@
 #include "net/base/net_errors.h"
 #include "net/http/http_content_disposition.h"
 #include "net/http/http_response_headers.h"
+#include "net/url_request/url_request.h"
 
 namespace content {
 
 namespace {
 
+const char kAcceptHeader[] = "Accept";
+const char kFrameAcceptHeader[] =
+    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,"
+    "*/*;q=0.8";
+const char kStylesheetAcceptHeader[] = "text/css,*/*;q=0.1";
+const char kImageAcceptHeader[] = "image/webp,image/*,*/*;q=0.8";
+const char kDefaultAcceptHeader[] = "*/*";
+
 // Used to write into an existing IOBuffer at a given offset.
 class DependentIOBuffer : public net::WrappedIOBuffer {
  public:
@@ -116,6 +125,46 @@
   return ProcessResponse(defer);
 }
 
+bool MimeTypeResourceHandler::OnWillStart(const GURL& url, bool* defer) {
+  const char* accept_value = nullptr;
+  switch (GetRequestInfo()->GetResourceType()) {
+    case RESOURCE_TYPE_MAIN_FRAME:
+    case RESOURCE_TYPE_SUB_FRAME:
+      accept_value = kFrameAcceptHeader;
+      break;
+    case RESOURCE_TYPE_STYLESHEET:
+      accept_value = kStylesheetAcceptHeader;
+      break;
+    case RESOURCE_TYPE_IMAGE:
+      accept_value = kImageAcceptHeader;
+      break;
+    case RESOURCE_TYPE_SCRIPT:
+    case RESOURCE_TYPE_FONT_RESOURCE:
+    case RESOURCE_TYPE_SUB_RESOURCE:
+    case RESOURCE_TYPE_OBJECT:
+    case RESOURCE_TYPE_MEDIA:
+    case RESOURCE_TYPE_WORKER:
+    case RESOURCE_TYPE_SHARED_WORKER:
+    case RESOURCE_TYPE_PREFETCH:
+    case RESOURCE_TYPE_FAVICON:
+    case RESOURCE_TYPE_XHR:
+    case RESOURCE_TYPE_PING:
+    case RESOURCE_TYPE_SERVICE_WORKER:
+    case RESOURCE_TYPE_CSP_REPORT:
+    case RESOURCE_TYPE_PLUGIN_RESOURCE:
+      accept_value = kDefaultAcceptHeader;
+      break;
+    case RESOURCE_TYPE_LAST_TYPE:
+      NOTREACHED();
+      break;
+  }
+
+  // The false parameter prevents overwriting an existing accept header value,
+  // which is needed because JS can manually set an accept header on an XHR.
+  request()->SetExtraRequestHeaderByName(kAcceptHeader, accept_value, false);
+  return next_handler_->OnWillStart(url, defer);
+}
+
 bool MimeTypeResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
                                          int* buf_size,
                                          int min_size) {
diff --git a/content/browser/loader/mime_type_resource_handler.h b/content/browser/loader/mime_type_resource_handler.h
index 9217683..411ffd1 100644
--- a/content/browser/loader/mime_type_resource_handler.h
+++ b/content/browser/loader/mime_type_resource_handler.h
@@ -34,6 +34,10 @@
 // subsequent reads until it's done buffering.  As a result, the buffer
 // returned by the next ResourceHandler must have a capacity of at least
 // net::kMaxBytesToSniff * 2.
+//
+// Before a request is sent, this ResourceHandler will also set an appropriate
+// Accept header on the request based on its ResourceType, if one isn't already
+// present.
 class CONTENT_EXPORT MimeTypeResourceHandler
     : public LayeredResourceHandler,
       public ResourceController {
@@ -49,6 +53,7 @@
   // ResourceHandler implementation:
   void SetController(ResourceController* controller) override;
   bool OnResponseStarted(ResourceResponse* response, bool* defer) override;
+  bool OnWillStart(const GURL&, bool* defer) override;
   bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
                   int* buf_size,
                   int min_size) override;
diff --git a/content/browser/loader/mime_type_resource_handler_unittest.cc b/content/browser/loader/mime_type_resource_handler_unittest.cc
index 13d98cb..360e035 100644
--- a/content/browser/loader/mime_type_resource_handler_unittest.cc
+++ b/content/browser/loader/mime_type_resource_handler_unittest.cc
@@ -45,7 +45,6 @@
   }
 
   bool OnWillStart(const GURL& url, bool* defer) override {
-    NOTREACHED();
     return false;
   }
 
@@ -220,6 +219,11 @@
                                bool must_download,
                                ResourceType request_resource_type);
 
+  std::string TestAcceptHeaderSetting(ResourceType request_resource_type);
+  std::string TestAcceptHeaderSettingWithURLRequest(
+      ResourceType request_resource_type,
+      net::URLRequest* request);
+
  private:
   // Whether the URL request should be intercepted as a stream.
   bool stream_has_handler_;
@@ -273,6 +277,88 @@
   return host.intercepted_as_stream();
 }
 
+std::string MimeTypeResourceHandlerTest::TestAcceptHeaderSetting(
+    ResourceType request_resource_type) {
+  net::URLRequestContext context;
+  scoped_ptr<net::URLRequest> request(context.CreateRequest(
+      GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
+  return TestAcceptHeaderSettingWithURLRequest(
+      request_resource_type, request.get());
+}
+
+std::string MimeTypeResourceHandlerTest::TestAcceptHeaderSettingWithURLRequest(
+    ResourceType request_resource_type,
+    net::URLRequest* request) {
+  bool is_main_frame = request_resource_type == RESOURCE_TYPE_MAIN_FRAME;
+  ResourceRequestInfo::AllocateForTesting(
+      request,
+      request_resource_type,
+      nullptr,          // context
+      0,                // render_process_id
+      0,                // render_view_id
+      0,                // render_frame_id
+      is_main_frame,    // is_main_frame
+      false,            // parent_is_main_frame
+      false,            // allow_download
+      true,             // is_async
+      false);           // is_using_lofi
+
+  TestResourceDispatcherHost host(stream_has_handler_);
+  TestResourceDispatcherHostDelegate host_delegate(false);
+  host.SetDelegate(&host_delegate);
+
+  scoped_ptr<ResourceHandler> mime_sniffing_handler(new MimeTypeResourceHandler(
+      scoped_ptr<ResourceHandler>(new TestResourceHandler()), &host,
+      nullptr, request));
+
+  bool defer = false;
+  mime_sniffing_handler->OnWillStart(request->url(), &defer);
+  content::RunAllPendingInMessageLoop();
+
+  std::string accept_header;
+  request->extra_request_headers().GetHeader("Accept", &accept_header);
+  return accept_header;
+}
+
+// Test that the proper Accept: header is set based on the ResourceType
+TEST_F(MimeTypeResourceHandlerTest, AcceptHeaders) {
+  EXPECT_EQ(
+      "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,"
+          "*/*;q=0.8",
+      TestAcceptHeaderSetting(RESOURCE_TYPE_MAIN_FRAME));
+  EXPECT_EQ(
+      "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,"
+          "*/*;q=0.8",
+    TestAcceptHeaderSetting(RESOURCE_TYPE_SUB_FRAME));
+  EXPECT_EQ("text/css,*/*;q=0.1",
+      TestAcceptHeaderSetting(RESOURCE_TYPE_STYLESHEET));
+  EXPECT_EQ("*/*",
+      TestAcceptHeaderSetting(RESOURCE_TYPE_SCRIPT));
+  EXPECT_EQ("image/webp,image/*,*/*;q=0.8",
+      TestAcceptHeaderSetting(RESOURCE_TYPE_IMAGE));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_FONT_RESOURCE));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_SUB_RESOURCE));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_OBJECT));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_MEDIA));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_WORKER));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_SHARED_WORKER));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_PREFETCH));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_FAVICON));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_XHR));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_PING));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_SERVICE_WORKER));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_CSP_REPORT));
+  EXPECT_EQ("*/*", TestAcceptHeaderSetting(RESOURCE_TYPE_PLUGIN_RESOURCE));
+
+  // Ensure that if an Accept header is already set, it is not overwritten.
+  net::URLRequestContext context;
+  scoped_ptr<net::URLRequest> request(context.CreateRequest(
+      GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
+  request->SetExtraRequestHeaderByName("Accept", "*", true);
+  EXPECT_EQ("*",
+      TestAcceptHeaderSettingWithURLRequest(RESOURCE_TYPE_XHR, request.get()));
+}
+
 // Test that stream requests are correctly intercepted under the right
 // circumstances. Test is not relevent when plugins are disabled.
 #if defined(ENABLE_PLUGINS)
diff --git a/content/browser/media/capture/aura_window_capture_machine.cc b/content/browser/media/capture/aura_window_capture_machine.cc
index a56208f3..26e33cf 100644
--- a/content/browser/media/capture/aura_window_capture_machine.cc
+++ b/content/browser/media/capture/aura_window_capture_machine.cc
@@ -124,8 +124,13 @@
 }
 
 void AuraWindowCaptureMachine::MaybeCaptureForRefresh() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  Capture(false);
+  BrowserThread::PostTask(
+      BrowserThread::UI, FROM_HERE,
+      base::Bind(&AuraWindowCaptureMachine::Capture,
+                 // Use of Unretained() is safe here since this task must run
+                 // before InternalStop().
+                 base::Unretained(this),
+                 false));
 }
 
 void AuraWindowCaptureMachine::SetWindow(aura::Window* window) {
diff --git a/content/browser/media/media_canplaytype_browsertest.cc b/content/browser/media/media_canplaytype_browsertest.cc
index e3e1bb6..7dba85b 100644
--- a/content/browser/media/media_canplaytype_browsertest.cc
+++ b/content/browser/media/media_canplaytype_browsertest.cc
@@ -75,7 +75,7 @@
 #if !defined(MEDIA_DISABLE_FFMPEG) && !defined(OS_ANDROID)
 const char* kHi10pProbably = kPropProbably;
 #else
-const char* kHi10pProbably = kMaybe;
+const char* kHi10pProbably = kPropMaybe;
 #endif
 
 namespace content {
@@ -891,16 +891,7 @@
   TestMPEGUnacceptableCombinations("audio/x-m4a");
 }
 
-// When modifying this test, also change CodecSupportTest_Avc3Variants.
-#if defined(OS_ANDROID)
-// Failing on Android, https://crbug.com/601418.
-#define MAYBE_CodecSupportTest_Avc1Variants \
-    DISABLED_CodecSupportTest_Avc1Variants
-#else
-#define MAYBE_CodecSupportTest_Avc1Variants CodecSupportTest_Avc1Variants
-#endif
-IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest,
-    MAYBE_CodecSupportTest_Avc1Variants) {
+IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) {
   // avc1 without extensions results in "maybe" for compatibility.
   EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
 
@@ -1004,16 +995,7 @@
   EXPECT_EQ(kPropMaybe,    CanPlay("'video/mp4; codecs=\"avc1.58201E\"'"));
 }
 
-// When modifying this test, also change CodecSupportTest_Avc1Variants.
-#if defined(OS_ANDROID)
-// Failing on Android, https://crbug.com/601418.
-#define MAYBE_CodecSupportTest_Avc3Variants \
-    DISABLED_CodecSupportTest_Avc3Variants
-#else
-#define MAYBE_CodecSupportTest_Avc3Variants CodecSupportTest_Avc3Variants
-#endif
-IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest,
-    MAYBE_CodecSupportTest_Avc3Variants) {
+IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) {
   // avc3 without extensions results in "maybe" for compatibility.
   EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3\"'"));
 
diff --git a/content/browser/mojo/chrome_renderer_manifest.json b/content/browser/mojo/chrome_renderer_manifest.json
deleted file mode 100644
index 463be6d2..0000000
--- a/content/browser/mojo/chrome_renderer_manifest.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "name": "exe:chrome_renderer",
-  "display_name": "Chrome Renderer",
-  "capabilities": { "mojo:mus": [ "mus::mojom::Gpu" ] }
-}
diff --git a/content/browser/mojo/constants.cc b/content/browser/mojo/constants.cc
new file mode 100644
index 0000000..cbb7937
--- /dev/null
+++ b/content/browser/mojo/constants.cc
@@ -0,0 +1,19 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/mojo/constants.h"
+
+namespace content {
+
+// The default application name the browser identifies as when connecting to
+// the shell. This must match the name in
+// src/content/public/app/mojo/content_browser_manifest.json.
+const char kBrowserMojoApplicationName[] = "exe:content_browser";
+
+// The default application name used to identify render processes when
+// connecting them to the shell. This must match the name in
+// src/content/public/app/mojo/content_renderer_manifest.json.
+const char kRendererMojoApplicationName[] = "exe:content_renderer";
+
+}  // namespace content
diff --git a/content/browser/mojo/constants.h b/content/browser/mojo/constants.h
new file mode 100644
index 0000000..ed6120a5
--- /dev/null
+++ b/content/browser/mojo/constants.h
@@ -0,0 +1,15 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_MOJO_CONSTANTS_H_
+#define CONTENT_BROWSER_MOJO_CONSTANTS_H_
+
+namespace content {
+
+extern const char kBrowserMojoApplicationName[];
+extern const char kRendererMojoApplicationName[];
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_MOJO_CONSTANTS_H_
diff --git a/content/browser/mojo/mojo_child_connection.cc b/content/browser/mojo/mojo_child_connection.cc
index b123240..164ba0b 100644
--- a/content/browser/mojo/mojo_child_connection.cc
+++ b/content/browser/mojo/mojo_child_connection.cc
@@ -11,12 +11,12 @@
 #include "base/strings/stringprintf.h"
 #include "base/thread_task_runner_handle.h"
 #include "build/build_config.h"
+#include "content/browser/mojo/constants.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_process_host_observer.h"
 #include "content/public/common/mojo_shell_connection.h"
 #include "ipc/ipc_sender.h"
-#include "mojo/converters/network/network_type_converters.h"
 #include "mojo/edk/embedder/embedder.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "mojo/shell/public/cpp/connector.h"
@@ -110,8 +110,7 @@
   // PIDSender manages its own lifetime.
   new PIDSender(render_process_host, std::move(pid_receiver));
 
-
-  mojo::Identity target("exe:chrome_renderer",
+  mojo::Identity target(kRendererMojoApplicationName,
                         mojo::shell::mojom::kInheritUserID,
                         base::StringPrintf("%d_%d", child_process_id,
                                            instance_id));
diff --git a/content/browser/mojo/mojo_shell_context.cc b/content/browser/mojo/mojo_shell_context.cc
index 5ca1470..55ef2985 100644
--- a/content/browser/mojo/mojo_shell_context.cc
+++ b/content/browser/mojo/mojo_shell_context.cc
@@ -15,11 +15,13 @@
 #include "base/thread_task_runner_handle.h"
 #include "components/profile_service/profile_app.h"
 #include "content/browser/gpu/gpu_process_host.h"
+#include "content/browser/mojo/constants.h"
 #include "content/common/gpu_process_launch_causes.h"
 #include "content/common/mojo/current_thread_loader.h"
 #include "content/common/mojo/mojo_shell_connection_impl.h"
 #include "content/common/mojo/static_loader.h"
 #include "content/common/process_control.mojom.h"
+#include "content/grit/content_resources.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/browser/utility_process_host.h"
@@ -30,6 +32,7 @@
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/bindings/string.h"
 #include "mojo/services/catalog/factory.h"
+#include "mojo/services/catalog/manifest_provider.h"
 #include "mojo/services/catalog/store.h"
 #include "mojo/shell/connect_params.h"
 #include "mojo/shell/loader.h"
@@ -43,8 +46,6 @@
 
 namespace {
 
-const char kBrowserAppName[] = "exe:chrome";
-
 // An extra set of apps to register on initialization, if set by a test.
 const MojoShellContext::StaticApplicationMap* g_applications_for_test;
 
@@ -155,8 +156,43 @@
   DISALLOW_COPY_AND_ASSIGN(GpuProcessLoader);
 };
 
+std::string GetStringResource(int id) {
+  return GetContentClient()->GetDataResource(
+      id, ui::ScaleFactor::SCALE_FACTOR_NONE).as_string();
+}
+
 }  // namespace
 
+// A ManifestProvider which resolves application names to builtin manifest
+// resources for the catalog service to consume.
+class MojoShellContext::BuiltinManifestProvider
+    : public catalog::ManifestProvider {
+ public:
+  BuiltinManifestProvider() {}
+  ~BuiltinManifestProvider() override {}
+
+ private:
+  // catalog::ManifestProvider:
+  bool GetApplicationManifest(const base::StringPiece& name,
+                              std::string* manifest_contents) override {
+    if (name == "mojo:catalog") {
+      *manifest_contents = GetStringResource(IDR_MOJO_CATALOG_MANIFEST);
+      return true;
+    } else if (name == kBrowserMojoApplicationName) {
+      *manifest_contents = GetStringResource(IDR_MOJO_CONTENT_BROWSER_MANIFEST);
+      return true;
+    } else if (name == kRendererMojoApplicationName) {
+      *manifest_contents =
+          GetStringResource(IDR_MOJO_CONTENT_RENDERER_MANIFEST);
+      return true;
+    }
+
+    return false;
+  }
+
+  DISALLOW_COPY_AND_ASSIGN(BuiltinManifestProvider);
+};
+
 // Thread-safe proxy providing access to the shell context from any thread.
 class MojoShellContext::Proxy {
  public:
@@ -217,10 +253,11 @@
   scoped_ptr<mojo::shell::NativeRunnerFactory> native_runner_factory(
       new mojo::shell::InProcessNativeRunnerFactory(
           BrowserThread::GetBlockingPool()));
-  catalog_.reset(new catalog::Factory(file_task_runner.get(), nullptr));
+  manifest_provider_.reset(new BuiltinManifestProvider);
+  catalog_.reset(new catalog::Factory(file_task_runner.get(), nullptr,
+                                      manifest_provider_.get()));
   shell_.reset(new mojo::shell::Shell(std::move(native_runner_factory),
                                       catalog_->TakeShellClient()));
-
   shell_->set_default_loader(
       scoped_ptr<mojo::shell::Loader>(new DefaultLoader));
 
@@ -273,9 +310,9 @@
   }
 
   if (!IsRunningInMojoShell()) {
-    const bool is_external = false;
     MojoShellConnection::Create(
-        shell_->InitInstanceForEmbedder(kBrowserAppName), is_external);
+        shell_->InitInstanceForEmbedder(kBrowserMojoApplicationName),
+        false /* is_external */);
   }
 }
 
diff --git a/content/browser/mojo/mojo_shell_context.h b/content/browser/mojo/mojo_shell_context.h
index fd8da40..959fd93 100644
--- a/content/browser/mojo/mojo_shell_context.h
+++ b/content/browser/mojo/mojo_shell_context.h
@@ -53,6 +53,7 @@
   static void SetApplicationsForTest(const StaticApplicationMap* apps);
 
  private:
+  class BuiltinManifestProvider;
   class Proxy;
   friend class Proxy;
 
@@ -66,6 +67,7 @@
 
   static base::LazyInstance<scoped_ptr<Proxy>> proxy_;
 
+  scoped_ptr<BuiltinManifestProvider> manifest_provider_;
   scoped_ptr<catalog::Factory> catalog_;
   scoped_ptr<mojo::shell::Shell> shell_;
 
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc
index f99cb38..3412b33c 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/win/win_util.h"
 #include "base/win/windows_version.h"
 #include "content/browser/accessibility/browser_accessibility_manager_win.h"
 #include "content/browser/accessibility/browser_accessibility_win.h"
@@ -96,6 +97,10 @@
     host_->OnLegacyWindowDestroyed();
     host_ = NULL;
   }
+
+  // Re-enable flicks for just a moment
+  base::win::EnableFlicks(hwnd);
+
   delete this;
 }
 
@@ -136,6 +141,9 @@
   if (direct_manipulation_helper_)
     direct_manipulation_helper_->Initialize(hwnd());
 
+  // Disable pen flicks (http://crbug.com/506977)
+  base::win::DisableFlicks(hwnd());
+
   return !!SUCCEEDED(hr);
 }
 
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 734aee25..522378ea 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1053,8 +1053,7 @@
   bool enable_web_bluetooth =
       browser_command_line.HasSwitch(switches::kEnableWebBluetooth);
 #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
-// TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-// enable_web_bluetooth = true;
+  enable_web_bluetooth = true;
 #endif
 
   if (enable_web_bluetooth) {
diff --git a/content/browser/storage_partition_impl_map.cc b/content/browser/storage_partition_impl_map.cc
index 56bf93d..83360f39 100644
--- a/content/browser/storage_partition_impl_map.cc
+++ b/content/browser/storage_partition_impl_map.cc
@@ -459,14 +459,13 @@
   // These calls must happen after StoragePartitionImpl::Create().
   if (partition_domain.empty()) {
     partition->SetURLRequestContext(
-        GetContentClient()->browser()->CreateRequestContext(
-            browser_context_, &protocol_handlers,
-            std::move(request_interceptors)));
+        browser_context_->CreateRequestContext(
+            &protocol_handlers, std::move(request_interceptors)));
   } else {
     partition->SetURLRequestContext(
-        GetContentClient()->browser()->CreateRequestContextForStoragePartition(
-            browser_context_, partition->GetPath(), in_memory,
-            &protocol_handlers, std::move(request_interceptors)));
+        browser_context_->CreateRequestContextForStoragePartition(
+            partition->GetPath(), in_memory, &protocol_handlers,
+            std::move(request_interceptors)));
   }
   partition->SetMediaURLRequestContext(
       partition_domain.empty() ?
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index e62e7ad..ef96953 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -229,14 +229,6 @@
 
   ~WebContentsImplTestBrowserClient() override {}
 
-  net::URLRequestContextGetter* CreateRequestContext(
-      BrowserContext* browser_context,
-      ProtocolHandlerMap* protocol_handlers,
-      URLRequestInterceptorScopedVector request_interceptors) override {
-    return static_cast<TestBrowserContext*>(browser_context)->
-        GetRequestContext();
-  }
-
   bool ShouldAssignSiteForURL(const GURL& url) override {
     return assign_site_for_url_;
   }
diff --git a/content/child/web_url_request_util.cc b/content/child/web_url_request_util.cc
index 230d3d0..bae840b 100644
--- a/content/child/web_url_request_util.cc
+++ b/content/child/web_url_request_util.cc
@@ -34,7 +34,7 @@
 
 class HeaderFlattener : public blink::WebHTTPHeaderVisitor {
  public:
-  HeaderFlattener() : has_accept_header_(false) {}
+  HeaderFlattener() {}
 
   void visitHeader(const WebString& name, const WebString& value) override {
     // Headers are latin1.
@@ -46,29 +46,17 @@
     if (base::LowerCaseEqualsASCII(name_latin1, "referer"))
       return;
 
-    if (base::LowerCaseEqualsASCII(name_latin1, "accept"))
-      has_accept_header_ = true;
-
     if (!buffer_.empty())
       buffer_.append("\r\n");
     buffer_.append(name_latin1 + ": " + value_latin1);
   }
 
   const std::string& GetBuffer() {
-    // In some cases, WebKit doesn't add an Accept header, but not having the
-    // header confuses some web servers.  See bug 808613.
-    if (!has_accept_header_) {
-      if (!buffer_.empty())
-        buffer_.append("\r\n");
-      buffer_.append("Accept: */*");
-      has_accept_header_ = true;
-    }
     return buffer_;
   }
 
  private:
   std::string buffer_;
-  bool has_accept_header_;
 };
 
 }  // namespace
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index b0fee26f..98c5168 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -182,7 +182,6 @@
     "//media/gpu/ipc/common",
     "//media/midi",
     "//mojo/common:common_base",
-    "//mojo/converters/network",
     "//mojo/edk/system",
     "//mojo/shell",
     "//mojo/shell/public/cpp",
diff --git a/content/common/android/sync_compositor_messages.h b/content/common/android/sync_compositor_messages.h
index d4556da..0ec4bf4 100644
--- a/content/common/android/sync_compositor_messages.h
+++ b/content/common/android/sync_compositor_messages.h
@@ -14,6 +14,7 @@
 #include "content/common/input/input_event_ack_state.h"
 #include "ipc/ipc_message_macros.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/scroll_offset.h"
 
 #ifndef CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_
@@ -182,11 +183,10 @@
 IPC_MESSAGE_ROUTED1(SyncCompositorMsg_UpdateState,
                     content::SyncCompositorCommonBrowserParams)
 
-// The synchronous version is used to synchronize state from an earlier
-// asynchronous call only. This should be needed rarely so should prefer the
-// asynchronous version above in general.
-IPC_SYNC_MESSAGE_ROUTED1_1(SyncCompositorMsg_SynchronousUpdateState,
+IPC_SYNC_MESSAGE_ROUTED3_1(SyncCompositorMsg_ZoomBy,
                            content::SyncCompositorCommonBrowserParams,
+                           float /* delta */,
+                           gfx::Point /* anchor */,
                            content::SyncCompositorCommonRendererParams)
 
 // -----------------------------------------------------------------------------
diff --git a/content/common/gpu/client/DEPS b/content/common/gpu/client/DEPS
index fcba607..409909c 100644
--- a/content/common/gpu/client/DEPS
+++ b/content/common/gpu/client/DEPS
@@ -1,14 +1,3 @@
 include_rules = [
   "+cc/blink",
-  "+media/gpu/ipc/common",
-  "+media/video/jpeg_decode_accelerator.h",
-  "+media/video/video_decode_accelerator.h",
-  "+media/video/video_encode_accelerator.h",
 ]
-
-specific_include_rules = {
-  # Tests can make use of content/browser/ infrastructure.
-  ".*browsertest\.cc": [
-    "+content/browser"
-  ]
-}
diff --git a/content/common/gpu/client/gpu_in_process_context_tests.cc b/content/common/gpu/client/gpu_in_process_context_tests.cc
index 365f096..c8f0d3f2 100644
--- a/content/common/gpu/client/gpu_in_process_context_tests.cc
+++ b/content/common/gpu/client/gpu_in_process_context_tests.cc
@@ -35,7 +35,6 @@
         gfx::kNullAcceleratedWidget, /* window */
         gfx::Size(1, 1),             /* size */
         nullptr,                     /* share_context */
-        true,                        /* use_global_share_group */
         attributes, gfx::PreferDiscreteGpu,
         ::gpu::GLInProcessContextSharedMemoryLimits(),
         nullptr, /* gpu_memory_buffer_manager */
diff --git a/content/common/gpu/media/android_video_decode_accelerator.cc b/content/common/gpu/media/android_video_decode_accelerator.cc
index efa1b84d..1419419 100644
--- a/content/common/gpu/media/android_video_decode_accelerator.cc
+++ b/content/common/gpu/media/android_video_decode_accelerator.cc
@@ -352,11 +352,15 @@
 
   // Only use MediaCodec for VP8/9 if it's likely backed by hardware
   // or if the stream is encrypted.
-  if (codec_config_->codec_ == media::kCodecVP8 ||
-      codec_config_->codec_ == media::kCodecVP9) {
-    DCHECK(is_encrypted_ ||
-           !media::VideoCodecBridge::IsKnownUnaccelerated(
-               codec_config_->codec_, media::MEDIA_CODEC_DECODER));
+  if ((codec_config_->codec_ == media::kCodecVP8 ||
+       codec_config_->codec_ == media::kCodecVP9) &&
+      !is_encrypted_ &&
+      media::VideoCodecBridge::IsKnownUnaccelerated(
+          codec_config_->codec_, media::MEDIA_CODEC_DECODER)) {
+    DVLOG(1) << "Initialization failed: "
+             << (codec_config_->codec_ == media::kCodecVP8 ? "vp8" : "vp9")
+             << " is not hardware accelerated";
+    return false;
   }
 
   auto gles_decoder = get_gles2_decoder_cb_.Run();
@@ -1277,7 +1281,7 @@
     profiles.push_back(profile);
   }
 
-  if (media::PlatformHasVp9Support()) {
+  if (media::MediaCodecUtil::IsVp9DecoderAvailable()) {
     profile.min_resolution.SetSize(0, 0);
     profile.max_resolution.SetSize(1920, 1088);
     // If we know MediaCodec will just create a software codec, prefer our
diff --git a/content/common/mojo/mojo_shell_connection_impl.cc b/content/common/mojo/mojo_shell_connection_impl.cc
index 3f3a693..5214096 100644
--- a/content/common/mojo/mojo_shell_connection_impl.cc
+++ b/content/common/mojo/mojo_shell_connection_impl.cc
@@ -12,7 +12,6 @@
 #include "base/stl_util.h"
 #include "base/threading/thread_local.h"
 #include "content/public/common/content_switches.h"
-#include "mojo/converters/network/network_type_converters.h"
 #include "mojo/edk/embedder/embedder.h"
 #include "mojo/edk/embedder/platform_channel_pair.h"
 #include "mojo/shell/public/cpp/shell_client.h"
diff --git a/content/content.gyp b/content/content.gyp
index 9a70c9b..2221d03 100644
--- a/content/content.gyp
+++ b/content/content.gyp
@@ -58,31 +58,32 @@
       ],
     },
     {
-      # GN version: //content/browser:chrome_manifest
-      'target_name': 'chrome_manifest',
+      # GN version: //content/public/app:browser_manifest
+      'target_name': 'content_app_browser_manifest',
       'type': 'none',
       'variables': {
         'application_type': 'exe',
-        'application_name': 'chrome',
-        'source_manifest': '<(DEPTH)/content/browser/mojo/chrome_manifest.json',
+        'application_name': 'content_browser',
+        'source_manifest': '<(DEPTH)/content/public/app/mojo/content_browser_manifest.json',
       },
       'includes': [
         '../mojo/public/mojo_application_manifest.gypi',
       ],
+      'hard_dependency': 1,
     },
     {
-      # GN version: //content/browser:chrome_renderer_manifest
-      'target_name': 'chrome_renderer_manifest',
+      # GN version: //content/public/app:renderer_manifest
+      'target_name': 'content_app_renderer_manifest',
       'type': 'none',
       'variables': {
         'application_type': 'exe',
-        'application_name': 'chrome_renderer',
-        'source_manifest':
-            '<(DEPTH)/content/browser/mojo/chrome_renderer_manifest.json',
+        'application_name': 'content_renderer',
+        'source_manifest': '<(DEPTH)/content/public/app/mojo/content_renderer_manifest.json',
       },
       'includes': [
         '../mojo/public/mojo_application_manifest.gypi',
       ],
+      'hard_dependency': 1,
     },
   ],
   'includes': [
@@ -208,8 +209,6 @@
             '../build/android/disable_gcc_lto.gypi',
           ],
           'dependencies': [
-            'chrome_manifest',
-            'chrome_renderer_manifest',
             'content_common',
             'content_gpu',
             'content_resources',
@@ -395,8 +394,6 @@
           'target_name': 'content_common',
           'type': 'none',
           'dependencies': [
-            'chrome_manifest',
-            'chrome_renderer_manifest',
             'content',
             'content_resources'
           ],
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index bd50f0a..57bc508 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -31,7 +31,6 @@
     '../mojo/mojo_base.gyp:tracing_service_lib',
     '../mojo/mojo_public.gyp:mojo_cpp_bindings',
     '../mojo/mojo_public.gyp:mojo_js_bindings',
-    '../mojo/mojo_services.gyp:network_service_bindings_lib',
     '../mojo/mojo_shell.gyp:mojo_runner_common_lib',
     '../mojo/mojo_shell.gyp:mojo_runner_host_lib',
     '../mojo/mojo_shell.gyp:mojo_shell_lib',
@@ -1120,6 +1119,8 @@
       'browser/message_port_service.h',
       'browser/mime_registry_message_filter.cc',
       'browser/mime_registry_message_filter.h',
+      'browser/mojo/constants.cc',
+      'browser/mojo/constants.h',
       'browser/mojo/mojo_app_connection_impl.cc',
       'browser/mojo/mojo_app_connection_impl.h',
       'browser/mojo/mojo_application_host.cc',
diff --git a/content/content_resources.grd b/content/content_resources.grd
index 99e1fa7..76fc7498 100644
--- a/content/content_resources.grd
+++ b/content/content_resources.grd
@@ -27,6 +27,9 @@
       <include name="IDR_INDEXED_DB_INTERNALS_CSS" file="browser/resources/indexed_db/indexeddb_internals.css" flattenhtml="true" type="BINDATA" />
       <include name="IDR_MEDIA_INTERNALS_HTML" file="browser/resources/media/media_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
       <include name="IDR_MEDIA_INTERNALS_JS" file="browser/resources/media/media_internals.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_MOJO_CATALOG_MANIFEST" file="../mojo/services/catalog/manifest.json" type="BINDATA" />
+      <include name="IDR_MOJO_CONTENT_BROWSER_MANIFEST" file="${root_out_dir}/content_browser_manifest.json" use_base_dir="false" type="BINDATA" />
+      <include name="IDR_MOJO_CONTENT_RENDERER_MANIFEST" file="${root_out_dir}/content_renderer_manifest.json" use_base_dir="false" type="BINDATA" />
       <include name="IDR_NETWORK_ERROR_LISTING_HTML" file="browser/resources/net/network_errors_listing.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
       <include name="IDR_NETWORK_ERROR_LISTING_JS" file="browser/resources/net/network_errors_listing.js" flattenhtml="true" type="BINDATA" />
       <include name="IDR_NETWORK_ERROR_LISTING_CSS" file="browser/resources/net/network_errors_listing.css" flattenhtml="true" type="BINDATA" />
diff --git a/content/content_resources.gypi b/content/content_resources.gypi
index d61642f..01d3d03 100644
--- a/content/content_resources.gypi
+++ b/content/content_resources.gypi
@@ -16,6 +16,9 @@
           'action_name': 'generate_content_resources',
           'variables': {
             'grit_grd_file': 'content_resources.grd',
+            'grit_additional_defines': [
+              '-E', 'root_out_dir=<(PRODUCT_DIR)',
+            ],
           },
           'includes': [ '../build/grit_action.gypi' ],
         },
@@ -28,6 +31,11 @@
           ],
         },
       ],
+      'dependencies': [
+        '<(DEPTH)/mojo/mojo_shell.gyp:mojo_catalog_manifest',
+        'content_app_browser_manifest',
+        'content_app_renderer_manifest',
+      ],
     },
   ],
 }
diff --git a/content/public/app/BUILD.gn b/content/public/app/BUILD.gn
index c6280d3..5fe6249 100644
--- a/content/public/app/BUILD.gn
+++ b/content/public/app/BUILD.gn
@@ -21,6 +21,7 @@
 #       //content/public/app:both_sources (source set)
 
 import("//build/config/chrome_build.gni")
+import("//mojo/public/mojo_application_manifest.gni")
 
 public_app_shared_sources = [
   "content_jni_onload.h",
@@ -140,3 +141,15 @@
     }
   }
 }
+
+mojo_application_manifest("browser_manifest") {
+  type = "exe"
+  application_name = "content_browser"
+  source = "mojo/content_browser_manifest.json"
+}
+
+mojo_application_manifest("renderer_manifest") {
+  type = "exe"
+  application_name = "content_renderer"
+  source = "mojo/content_renderer_manifest.json"
+}
diff --git a/content/browser/mojo/chrome_manifest.json b/content/public/app/mojo/content_browser_manifest.json
similarity index 76%
rename from content/browser/mojo/chrome_manifest.json
rename to content/public/app/mojo/content_browser_manifest.json
index ef5e6de..96ff473 100644
--- a/content/browser/mojo/chrome_manifest.json
+++ b/content/public/app/mojo/content_browser_manifest.json
@@ -1,7 +1,7 @@
 {
   "manifest_version": 1,
-  "name": "exe:chrome",
-  "display_name": "Chrome",
+  "name": "exe:content_browser",
+  "display_name": "Content Browser",
   "capabilities": {
     "required": {
       "*": { "interfaces": [ "*" ] },
diff --git a/content/public/app/mojo/content_renderer_manifest.json b/content/public/app/mojo/content_renderer_manifest.json
new file mode 100644
index 0000000..053edd0
--- /dev/null
+++ b/content/public/app/mojo/content_renderer_manifest.json
@@ -0,0 +1,5 @@
+{
+  "name": "exe:content_renderer",
+  "display_name": "Content Renderer",
+  "capabilities": { "mojo:mus": [ "mus::mojom::Gpu" ] }
+}
diff --git a/content/public/browser/android/synchronous_compositor.h b/content/public/browser/android/synchronous_compositor.h
index 57fdb13..560f7428 100644
--- a/content/public/browser/android/synchronous_compositor.h
+++ b/content/public/browser/android/synchronous_compositor.h
@@ -21,6 +21,7 @@
 }
 
 namespace gfx {
+class Point;
 class ScrollOffset;
 class Transform;
 };
@@ -89,14 +90,16 @@
   virtual void DidChangeRootLayerScrollOffset(
       const gfx::ScrollOffset& root_offset) = 0;
 
+  // Allows embedder to synchronously update the zoom level, ie page scale
+  // factor, around the anchor point.
+  virtual void SynchronouslyZoomBy(float zoom_delta,
+                                   const gfx::Point& anchor) = 0;
+
   // Called by the embedder to notify that the compositor is active. The
   // compositor won't ask for vsyncs when it's inactive. NOTE: The compositor
   // starts off as inactive and needs a SetActive(true) call to begin.
   virtual void SetIsActive(bool is_active) = 0;
 
-  // Synchronize all renderer state to UI thread. This blocks the UI thread.
-  virtual void SynchronizeWithRenderer() = 0;
-
   // Called by the embedder to notify that the OnComputeScroll step is happening
   // and if any input animation is active, it should tick now.
   virtual void OnComputeScroll(base::TimeTicks animation_time) = 0;
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h
index 76ff944..369e5bd 100644
--- a/content/public/browser/browser_context.h
+++ b/content/public/browser/browser_context.h
@@ -8,14 +8,20 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <map>
+
 #include "base/callback_forward.h"
 #include "base/containers/hash_tables.h"
+#include "base/memory/linked_ptr.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
 #include "base/supports_user_data.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/zoom_level_delegate.h"
 #include "content/public/common/push_event_payload.h"
 #include "content/public/common/push_messaging_status.h"
+#include "net/url_request/url_request_interceptor.h"
+#include "net/url_request/url_request_job_factory.h"
 
 class GURL;
 
@@ -51,6 +57,16 @@
 class StoragePartition;
 class SSLHostStateDelegate;
 
+// A mapping from the scheme name to the protocol handler that services its
+// content.
+typedef std::map<
+  std::string, linked_ptr<net::URLRequestJobFactory::ProtocolHandler> >
+    ProtocolHandlerMap;
+
+// A scoped vector of protocol interceptors.
+typedef ScopedVector<net::URLRequestInterceptor>
+    URLRequestInterceptorScopedVector;
+
 // This class holds the context needed for a browsing session.
 // It lives on the UI thread. All these methods must only be called on the UI
 // thread.
@@ -200,6 +216,19 @@
   // Returns the BackgroundSyncController associated with that context if any,
   // nullptr otherwise.
   virtual BackgroundSyncController* GetBackgroundSyncController() = 0;
+
+  // Creates the main net::URLRequestContextGetter. It's called only once.
+  virtual net::URLRequestContextGetter* CreateRequestContext(
+      ProtocolHandlerMap* protocol_handlers,
+      URLRequestInterceptorScopedVector request_interceptors) = 0;
+
+  // Creates the net::URLRequestContextGetter for a StoragePartition. It's
+  // called only once per partition_path.
+  virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      ProtocolHandlerMap* protocol_handlers,
+      URLRequestInterceptorScopedVector request_interceptors) = 0;
 };
 
 }  // namespace content
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index 97579e6..23fd868 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -61,23 +61,6 @@
   return false;
 }
 
-net::URLRequestContextGetter* ContentBrowserClient::CreateRequestContext(
-    BrowserContext* browser_context,
-    ProtocolHandlerMap* protocol_handlers,
-    URLRequestInterceptorScopedVector request_interceptors) {
-  return nullptr;
-}
-
-net::URLRequestContextGetter*
-ContentBrowserClient::CreateRequestContextForStoragePartition(
-    BrowserContext* browser_context,
-    const base::FilePath& partition_path,
-    bool in_memory,
-    ProtocolHandlerMap* protocol_handlers,
-    URLRequestInterceptorScopedVector request_interceptors) {
-  return nullptr;
-}
-
 bool ContentBrowserClient::IsHandledURL(const GURL& url) {
   return false;
 }
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index 13bebea..8b111979 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -13,7 +13,6 @@
 #include <vector>
 
 #include "base/callback_forward.h"
-#include "base/memory/linked_ptr.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/values.h"
@@ -27,8 +26,6 @@
 #include "content/public/common/window_container_type.h"
 #include "net/base/mime_util.h"
 #include "net/cookies/canonical_cookie.h"
-#include "net/url_request/url_request_interceptor.h"
-#include "net/url_request/url_request_job_factory.h"
 #include "storage/browser/fileapi/file_system_context.h"
 #include "third_party/WebKit/public/platform/WebPageVisibilityState.h"
 #include "ui/base/window_open_disposition.h"
@@ -128,16 +125,6 @@
 struct Referrer;
 struct WebPreferences;
 
-// A mapping from the scheme name to the protocol handler that services its
-// content.
-typedef std::map<
-  std::string, linked_ptr<net::URLRequestJobFactory::ProtocolHandler> >
-    ProtocolHandlerMap;
-
-// A scoped vector of protocol interceptors.
-typedef ScopedVector<net::URLRequestInterceptor>
-    URLRequestInterceptorScopedVector;
-
 // Embedder API (or SPI) for participating in browser logic, to be implemented
 // by the client of the content browser. See ChromeContentBrowserClient for the
 // principal implementation. The methods are assumed to be called on the UI
@@ -235,24 +222,6 @@
   // chrome://) URLs are logged. Returns whether the URL was actually logged.
   virtual bool LogWebUIUrl(const GURL& web_ui_url) const;
 
-  // Creates the main net::URLRequestContextGetter. Should only be called once
-  // per ContentBrowserClient object.
-  // TODO(ajwong): Remove once http://crbug.com/159193 is resolved.
-  virtual net::URLRequestContextGetter* CreateRequestContext(
-      BrowserContext* browser_context,
-      ProtocolHandlerMap* protocol_handlers,
-      URLRequestInterceptorScopedVector request_interceptors);
-
-  // Creates the net::URLRequestContextGetter for a StoragePartition. Should
-  // only be called once per partition_path per ContentBrowserClient object.
-  // TODO(ajwong): Remove once http://crbug.com/159193 is resolved.
-  virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      BrowserContext* browser_context,
-      const base::FilePath& partition_path,
-      bool in_memory,
-      ProtocolHandlerMap* protocol_handlers,
-      URLRequestInterceptorScopedVector request_interceptors);
-
   // Returns whether a specified URL is handled by the embedder's internal
   // protocol handlers.
   virtual bool IsHandledURL(const GURL& url);
diff --git a/content/public/test/test_browser_context.cc b/content/public/test/test_browser_context.cc
index 40fc32ce..4e37e8b 100644
--- a/content/public/test/test_browser_context.cc
+++ b/content/public/test/test_browser_context.cc
@@ -143,4 +143,19 @@
   return background_sync_controller_.get();
 }
 
+net::URLRequestContextGetter* TestBrowserContext::CreateRequestContext(
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) {
+  return GetRequestContext();
+}
+
+net::URLRequestContextGetter*
+TestBrowserContext::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    ProtocolHandlerMap* protocol_handlers,
+    URLRequestInterceptorScopedVector request_interceptors) {
+  return nullptr;
+}
+
 }  // namespace content
diff --git a/content/public/test/test_browser_context.h b/content/public/test/test_browser_context.h
index a1d7ff7..5e97047 100644
--- a/content/public/test/test_browser_context.h
+++ b/content/public/test/test_browser_context.h
@@ -51,6 +51,14 @@
   SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   PermissionManager* GetPermissionManager() override;
   BackgroundSyncController* GetBackgroundSyncController() override;
+  net::URLRequestContextGetter* CreateRequestContext(
+      ProtocolHandlerMap* protocol_handlers,
+      URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      ProtocolHandlerMap* protocol_handlers,
+      URLRequestInterceptorScopedVector request_interceptors)  override;
 
  private:
   base::ScopedTempDir browser_context_dir_;
diff --git a/content/public/test/test_synchronous_compositor_android.h b/content/public/test/test_synchronous_compositor_android.h
index baa395d4..183a1a6 100644
--- a/content/public/test/test_synchronous_compositor_android.h
+++ b/content/public/test/test_synchronous_compositor_android.h
@@ -38,8 +38,9 @@
   void SetMemoryPolicy(size_t bytes_limit) override {}
   void DidChangeRootLayerScrollOffset(
       const gfx::ScrollOffset& root_offset) override {}
+  void SynchronouslyZoomBy(float zoom_delta,
+                           const gfx::Point& anchor) override {}
   void SetIsActive(bool is_active) override {}
-  void SynchronizeWithRenderer() override {}
   void OnComputeScroll(base::TimeTicks animate_time) override {}
 
   void SetHardwareFrame(uint32_t output_surface_id,
diff --git a/content/renderer/android/synchronous_compositor_proxy.cc b/content/renderer/android/synchronous_compositor_proxy.cc
index 0cdb1b0..dc9c00a 100644
--- a/content/renderer/android/synchronous_compositor_proxy.cc
+++ b/content/renderer/android/synchronous_compositor_proxy.cc
@@ -171,8 +171,7 @@
     IPC_MESSAGE_HANDLER_DELAY_REPLY(SyncCompositorMsg_DemandDrawSw,
                                     DemandDrawSw)
     IPC_MESSAGE_HANDLER(SyncCompositorMsg_UpdateState, ProcessCommonParams)
-    IPC_MESSAGE_HANDLER(SyncCompositorMsg_SynchronousUpdateState,
-                        SynchronousUpdateState)
+    IPC_MESSAGE_HANDLER(SyncCompositorMsg_ZoomBy, SynchronouslyZoomBy)
   IPC_END_MESSAGE_MAP()
 }
 
@@ -398,12 +397,15 @@
   }
 }
 
-void SynchronousCompositorProxy::SynchronousUpdateState(
+void SynchronousCompositorProxy::SynchronouslyZoomBy(
     const SyncCompositorCommonBrowserParams& common_params,
+    float zoom_delta,
+    const gfx::Point& anchor,
     SyncCompositorCommonRendererParams* common_renderer_params) {
   DCHECK(!inside_receive_);
   base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true);
   ProcessCommonParams(common_params);
+  input_handler_proxy_->SynchronouslyZoomBy(zoom_delta, anchor);
   PopulateCommonParams(common_renderer_params);
 }
 
diff --git a/content/renderer/android/synchronous_compositor_proxy.h b/content/renderer/android/synchronous_compositor_proxy.h
index 8b15859..8d89833 100644
--- a/content/renderer/android/synchronous_compositor_proxy.h
+++ b/content/renderer/android/synchronous_compositor_proxy.h
@@ -109,8 +109,10 @@
   void DemandDrawSw(const SyncCompositorCommonBrowserParams& common_params,
                     const SyncCompositorDemandDrawSwParams& params,
                     IPC::Message* reply_message);
-  void SynchronousUpdateState(
+  void SynchronouslyZoomBy(
       const SyncCompositorCommonBrowserParams& common_params,
+      float zoom_delta,
+      const gfx::Point& anchor,
       SyncCompositorCommonRendererParams* common_renderer_params);
 
   void SwapBuffersHw(uint32_t output_surface_id, cc::CompositorFrame* frame);
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index 09f54d63d..75e0482 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -273,8 +273,8 @@
 }
 
 bool BrowserPlugin::initialize(WebPluginContainer* container) {
-  if (!container)
-    return false;
+  DCHECK(container);
+  DCHECK_EQ(this, container->plugin());
 
   container_ = container;
   container_->setWantsWheelEvents(true);
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.cc b/content/renderer/gpu/gpu_benchmarking_extension.cc
index e95a9f0d..028bdee 100644
--- a/content/renderer/gpu/gpu_benchmarking_extension.cc
+++ b/content/renderer/gpu/gpu_benchmarking_extension.cc
@@ -496,6 +496,9 @@
       .SetMethod("swipe", &GpuBenchmarking::Swipe)
       .SetMethod("scrollBounce", &GpuBenchmarking::ScrollBounce)
       .SetMethod("pinchBy", &GpuBenchmarking::PinchBy)
+      .SetMethod("pageScaleFactor", &GpuBenchmarking::PageScaleFactor)
+      .SetMethod("visualViewportX", &GpuBenchmarking::VisualViewportX)
+      .SetMethod("visualViewportY", &GpuBenchmarking::VisualViewportY)
       .SetMethod("visualViewportHeight", &GpuBenchmarking::VisualViewportHeight)
       .SetMethod("visualViewportWidth", &GpuBenchmarking::VisualViewportWidth)
       .SetMethod("tap", &GpuBenchmarking::Tap)
@@ -765,6 +768,7 @@
   scoped_ptr<SyntheticPinchGestureParams> gesture_params(
       new SyntheticPinchGestureParams);
 
+  // TODO(bokan): Remove page scale here when change land in Catapult.
   // Convert coordinates from CSS pixels to density independent pixels (DIPs).
   float page_scale_factor = context.web_view()->pageScaleFactor();
 
@@ -791,6 +795,27 @@
   return true;
 }
 
+float GpuBenchmarking::PageScaleFactor() {
+  GpuBenchmarkingContext context;
+  if (!context.Init(false))
+    return 0.0;
+  return context.web_view()->pageScaleFactor();
+}
+
+float GpuBenchmarking::VisualViewportY() {
+  GpuBenchmarkingContext context;
+  if (!context.Init(false))
+    return 0.0;
+  return context.web_view()->visualViewportOffset().y;
+}
+
+float GpuBenchmarking::VisualViewportX() {
+  GpuBenchmarkingContext context;
+  if (!context.Init(false))
+    return 0.0;
+  return context.web_view()->visualViewportOffset().x;
+}
+
 float GpuBenchmarking::VisualViewportHeight() {
   GpuBenchmarkingContext context;
   if (!context.Init(false))
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.h b/content/renderer/gpu/gpu_benchmarking_extension.h
index b77aa5a..19fcbcb9 100644
--- a/content/renderer/gpu/gpu_benchmarking_extension.h
+++ b/content/renderer/gpu/gpu_benchmarking_extension.h
@@ -48,8 +48,11 @@
   bool Swipe(gin::Arguments* args);
   bool ScrollBounce(gin::Arguments* args);
   bool PinchBy(gin::Arguments* args);
+  float VisualViewportX();
+  float VisualViewportY();
   float VisualViewportHeight();
   float VisualViewportWidth();
+  float PageScaleFactor();
   bool Tap(gin::Arguments* args);
   void ClearImageCache();
   int RunMicroBenchmark(gin::Arguments* args);
diff --git a/content/renderer/media/rtc_video_encoder_factory.cc b/content/renderer/media/rtc_video_encoder_factory.cc
index 194a236f..7e99b7c 100644
--- a/content/renderer/media/rtc_video_encoder_factory.cc
+++ b/content/renderer/media/rtc_video_encoder_factory.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/common/feature_h264_with_openh264_ffmpeg.h"
 #include "content/renderer/media/rtc_video_encoder.h"
 #include "media/gpu/ipc/client/gpu_video_encode_accelerator_host.h"
 #include "media/renderers/gpu_video_accelerator_factories.h"
@@ -32,7 +33,13 @@
         webrtc::kVideoCodecVP8, "VP8", width, height, fps));
   } else if (profile.profile >= media::H264PROFILE_MIN &&
              profile.profile <= media::H264PROFILE_MAX) {
-    if (cmd_line->HasSwitch(switches::kEnableWebRtcHWH264Encoding)) {
+    bool webrtc_h264_enabled = false;
+#if BUILDFLAG(RTC_USE_H264) && defined(OS_MACOSX)
+    webrtc_h264_enabled =
+        base::FeatureList::IsEnabled(kWebRtcH264WithOpenH264FFmpeg);
+#endif  // BUILDFLAG(RTC_USE_H264) && defined(OS_MACOSX)
+    if (cmd_line->HasSwitch(switches::kEnableWebRtcHWH264Encoding) ||
+        webrtc_h264_enabled) {
       codecs->push_back(cricket::WebRtcVideoEncoderFactory::VideoCodec(
           webrtc::kVideoCodecH264, "H264", width, height, fps));
     }
diff --git a/content/renderer/pepper/pepper_webplugin_impl.cc b/content/renderer/pepper/pepper_webplugin_impl.cc
index af5a4d2..130cde2 100644
--- a/content/renderer/pepper/pepper_webplugin_impl.cc
+++ b/content/renderer/pepper/pepper_webplugin_impl.cc
@@ -65,9 +65,8 @@
       full_frame_(params.loadManually),
       throttler_(std::move(throttler)),
       instance_object_(PP_MakeUndefined()),
-      container_(NULL),
-      destroyed_(false),
-      weak_factory_(this) {
+      container_(nullptr),
+      destroyed_(false) {
   DCHECK(plugin_module);
   init_data_->module = plugin_module;
   init_data_->render_frame = render_frame;
@@ -91,34 +90,32 @@
 }
 
 bool PepperWebPluginImpl::initialize(WebPluginContainer* container) {
+  DCHECK(container);
+  DCHECK_EQ(this, container->plugin());
+
+  container_ = container;
+
   // The plugin delegate may have gone away.
   instance_ = init_data_->module->CreateInstance(
       init_data_->render_frame, container, init_data_->url);
-  if (!instance_.get())
+  if (!instance_)
     return false;
 
-  auto weak_this = weak_factory_.GetWeakPtr();
-  bool success =
-      instance_->Initialize(init_data_->arg_names, init_data_->arg_values,
-                            full_frame_, std::move(throttler_));
-  // The above call to Initialize can result in re-entrancy and destruction of
-  // the plugin instance. In this case it's quite unclear whether this object
-  // could also have been destroyed. We could return false here, but it would be
-  // better if this object was guaranteed to outlast the recursive call.
-  // Otherwise, the caller of this function would also have to take care that,
-  // in the case of the object being deleted, we never access it again, and we
-  // would just keep passing that responsibility further up the call stack.
-  // Classes tend not to be written with this possibility in mind so it's best
-  // to make this assumption as far down the call stack (as close to the
-  // re-entrant call) as possible. Also take care not to access the plugin
-  // instance again in that case. crbug.com/487146.
-  CHECK(weak_this);
+  if (!instance_->Initialize(init_data_->arg_names, init_data_->arg_values,
+                             full_frame_, std::move(throttler_))) {
+    // If |container_| is nullptr, this object has already been synchronously
+    // destroy()-ed during |instance_|'s Initialize call. In that case, we early
+    // exit. We neither create a replacement plugin nor destroy() ourselves.
+    if (!container_)
+      return false;
 
-  if (!success) {
-    if (instance_) {
-      instance_->Delete();
-      instance_ = NULL;
-    }
+    DCHECK(!destroyed_);
+
+    DCHECK(instance_);
+    ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_);
+    instance_object_ = PP_MakeUndefined();
+    instance_->Delete();
+    instance_ = nullptr;
 
     blink::WebPlugin* replacement_plugin =
         GetContentClient()->renderer()->CreatePluginReplacement(
@@ -141,8 +138,6 @@
   }
 
   init_data_.reset();
-  CHECK(container->plugin() == this);
-  container_ = container;
   return true;
 }
 
@@ -151,11 +146,13 @@
   CHECK(!destroyed_);
   destroyed_ = true;
 
-  if (instance_.get()) {
+  container_ = nullptr;
+
+  if (instance_) {
     ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(instance_object_);
     instance_object_ = PP_MakeUndefined();
     instance_->Delete();
-    instance_ = NULL;
+    instance_ = nullptr;
   }
 
   base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
@@ -165,22 +162,22 @@
       v8::Isolate* isolate) {
   // Re-entrancy may cause JS to try to execute script on the plugin before it
   // is fully initialized. See e.g. crbug.com/503401.
-  if (!instance_.get())
+  if (!instance_)
     return v8::Local<v8::Object>();
   // Call through the plugin to get its instance object. The plugin should pass
   // us a reference which we release in destroy().
   if (instance_object_.type == PP_VARTYPE_UNDEFINED)
     instance_object_ = instance_->GetInstanceObject(isolate);
   // GetInstanceObject talked to the plugin which may have removed the instance
-  // from the DOM, in which case instance_ would be NULL now.
-  if (!instance_.get())
+  // from the DOM, in which case instance_ would be nullptr now.
+  if (!instance_)
     return v8::Local<v8::Object>();
 
   scoped_refptr<V8ObjectVar> object_var(
       V8ObjectVar::FromPPVar(instance_object_));
   // If there's an InstanceObject, tell the Instance's MessageChannel to pass
   // any non-postMessage calls to it.
-  if (object_var.get()) {
+  if (object_var) {
     MessageChannel* message_channel = instance_->message_channel();
     if (message_channel)
       message_channel->SetPassthroughObject(object_var->GetHandle());
@@ -238,20 +235,20 @@
 void PepperWebPluginImpl::didReceiveData(const char* data, int data_length) {
   blink::WebURLLoaderClient* document_loader = instance_->document_loader();
   if (document_loader)
-    document_loader->didReceiveData(NULL, data, data_length, 0);
+    document_loader->didReceiveData(nullptr, data, data_length, 0);
 }
 
 void PepperWebPluginImpl::didFinishLoading() {
   blink::WebURLLoaderClient* document_loader = instance_->document_loader();
   if (document_loader)
     document_loader->didFinishLoading(
-        NULL, 0.0, blink::WebURLLoaderClient::kUnknownEncodedDataLength);
+        nullptr, 0.0, blink::WebURLLoaderClient::kUnknownEncodedDataLength);
 }
 
 void PepperWebPluginImpl::didFailLoading(const blink::WebURLError& error) {
   blink::WebURLLoaderClient* document_loader = instance_->document_loader();
   if (document_loader)
-    document_loader->didFail(NULL, error);
+    document_loader->didFail(nullptr, error);
 }
 
 bool PepperWebPluginImpl::hasSelection() const {
diff --git a/content/renderer/pepper/pepper_webplugin_impl.h b/content/renderer/pepper/pepper_webplugin_impl.h
index db4c5ae..7b4423c 100644
--- a/content/renderer/pepper/pepper_webplugin_impl.h
+++ b/content/renderer/pepper/pepper_webplugin_impl.h
@@ -103,8 +103,6 @@
   // TODO(tommycli): Remove once we fix https://crbug.com/588624.
   bool destroyed_;
 
-  base::WeakPtrFactory<PepperWebPluginImpl> weak_factory_;
-
   DISALLOW_COPY_AND_ASSIGN(PepperWebPluginImpl);
 };
 
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index f4a1764..e24d104 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -302,11 +302,6 @@
 
 namespace {
 
-const char kDefaultAcceptHeader[] =
-    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/"
-    "*;q=0.8";
-const char kAcceptHeader[] = "Accept";
-
 const size_t kExtraCharsBeforeAndAfterSelection = 100;
 
 typedef std::map<int, RenderFrameImpl*> RoutingIDFrameMap;
@@ -3758,15 +3753,6 @@
     stream_override = old_extra_data->TakeStreamOverrideOwnership();
   }
 
-  // Add the default accept header for frame request if it has not been set
-  // already.
-  if ((request.getFrameType() == blink::WebURLRequest::FrameTypeTopLevel ||
-       request.getFrameType() == blink::WebURLRequest::FrameTypeNested) &&
-      request.httpHeaderField(WebString::fromUTF8(kAcceptHeader)).isEmpty()) {
-    request.setHTTPHeaderField(WebString::fromUTF8(kAcceptHeader),
-                               WebString::fromUTF8(kDefaultAcceptHeader));
-  }
-
   // Add an empty HTTP origin header for non GET methods if none is currently
   // present.
   request.addHTTPOriginIfNeeded(WebString());
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index bb7b4e7..30047189 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -813,9 +813,13 @@
   DCHECK(parsed_num_raster_threads) << string_value;
   DCHECK_GT(num_raster_threads, 0);
 
-  // TODO(vmpstr): If the flag sticks, we should clean it up and always have
-  // image decode tasks.
+#if defined(OS_ANDROID)
+  // Note: Currently, enabling image decode tasks only provides a benefit if
+  // we use high quality interpolation filters, which are disabled on android.
+  are_image_decode_tasks_enabled_ = false;
+#else
   are_image_decode_tasks_enabled_ = true;
+#endif
 
   raster_worker_pool_->Start(num_raster_threads);
 
diff --git a/content/shell/browser/shell_browser_context.h b/content/shell/browser/shell_browser_context.h
index 1b3c0c48..b848ca36 100644
--- a/content/shell/browser/shell_browser_context.h
+++ b/content/shell/browser/shell_browser_context.h
@@ -58,15 +58,14 @@
   SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   PermissionManager* GetPermissionManager() override;
   BackgroundSyncController* GetBackgroundSyncController() override;
-
   net::URLRequestContextGetter* CreateRequestContext(
       ProtocolHandlerMap* protocol_handlers,
-      URLRequestInterceptorScopedVector request_interceptors);
+      URLRequestInterceptorScopedVector request_interceptors) override;
   net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
       const base::FilePath& partition_path,
       bool in_memory,
       ProtocolHandlerMap* protocol_handlers,
-      URLRequestInterceptorScopedVector request_interceptors);
+      URLRequestInterceptorScopedVector request_interceptors) override;
 
  protected:
   // Contains URLRequestContextGetter required for resource loading.
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc
index 73d258f..904133c2 100644
--- a/content/shell/browser/shell_content_browser_client.cc
+++ b/content/shell/browser/shell_content_browser_client.cc
@@ -157,30 +157,6 @@
   return base::MatchPattern(origin, pattern);
 }
 
-net::URLRequestContextGetter* ShellContentBrowserClient::CreateRequestContext(
-    BrowserContext* content_browser_context,
-    ProtocolHandlerMap* protocol_handlers,
-    URLRequestInterceptorScopedVector request_interceptors) {
-  ShellBrowserContext* shell_browser_context =
-      ShellBrowserContextForBrowserContext(content_browser_context);
-  return shell_browser_context->CreateRequestContext(
-      protocol_handlers, std::move(request_interceptors));
-}
-
-net::URLRequestContextGetter*
-ShellContentBrowserClient::CreateRequestContextForStoragePartition(
-    BrowserContext* content_browser_context,
-    const base::FilePath& partition_path,
-    bool in_memory,
-    ProtocolHandlerMap* protocol_handlers,
-    URLRequestInterceptorScopedVector request_interceptors) {
-  ShellBrowserContext* shell_browser_context =
-      ShellBrowserContextForBrowserContext(content_browser_context);
-  return shell_browser_context->CreateRequestContextForStoragePartition(
-      partition_path, in_memory, protocol_handlers,
-      std::move(request_interceptors));
-}
-
 bool ShellContentBrowserClient::IsHandledURL(const GURL& url) {
   if (!url.is_valid())
     return false;
@@ -380,13 +356,4 @@
   return new ShellAccessTokenStore(browser_context());
 }
 
-ShellBrowserContext*
-ShellContentBrowserClient::ShellBrowserContextForBrowserContext(
-    BrowserContext* content_browser_context) {
-  if (content_browser_context == browser_context())
-    return browser_context();
-  DCHECK_EQ(content_browser_context, off_the_record_browser_context());
-  return off_the_record_browser_context();
-}
-
 }  // namespace content
diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h
index 74cc249..cd8106f 100644
--- a/content/shell/browser/shell_content_browser_client.h
+++ b/content/shell/browser/shell_content_browser_client.h
@@ -35,16 +35,6 @@
       const MainFunctionParams& parameters) override;
   bool DoesSiteRequireDedicatedProcess(BrowserContext* browser_context,
                                        const GURL& effective_url) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      BrowserContext* browser_context,
-      ProtocolHandlerMap* protocol_handlers,
-      URLRequestInterceptorScopedVector request_interceptors) override;
-  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
-      BrowserContext* browser_context,
-      const base::FilePath& partition_path,
-      bool in_memory,
-      ProtocolHandlerMap* protocol_handlers,
-      URLRequestInterceptorScopedVector request_interceptors) override;
   bool IsHandledURL(const GURL& url) override;
   void RegisterInProcessMojoApplications(
       StaticMojoApplicationMap* apps) override;
@@ -117,8 +107,6 @@
   }
 
  private:
-  ShellBrowserContext* ShellBrowserContextForBrowserContext(
-      BrowserContext* content_browser_context);
 
   scoped_ptr<ShellResourceDispatcherHostDelegate>
       resource_dispatcher_host_delegate_;
diff --git a/content/shell/browser/shell_url_request_context_getter.h b/content/shell/browser/shell_url_request_context_getter.h
index a7fa233b..3c2a7cdd 100644
--- a/content/shell/browser/shell_url_request_context_getter.h
+++ b/content/shell/browser/shell_url_request_context_getter.h
@@ -10,7 +10,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
-#include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/browser_context.h"
 #include "net/proxy/proxy_config_service.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_job_factory.h"
diff --git a/content/test/data/web_ui_mojo_shell_test.js b/content/test/data/web_ui_mojo_shell_test.js
index 219f47dd..dbe4c14 100644
--- a/content/test/data/web_ui_mojo_shell_test.js
+++ b/content/test/data/web_ui_mojo_shell_test.js
@@ -13,12 +13,10 @@
 define('main', [
   'mojo/public/js/core',
   'mojo/public/js/router',
-  'mojo/services/network/public/interfaces/url_loader.mojom',
   'mojo/shell/public/interfaces/connector.mojom',
   'content/public/renderer/frame_service_registry',
   'content/public/test/test_mojo_service.mojom',
-], function (core, router, urlMojom, connectorMojom, serviceRegistry,
-             testMojom) {
+], function (core, router, connectorMojom, serviceRegistry, testMojom) {
 
   var connectToService = function(serviceProvider, iface) {
     var pipe = core.createMessagePipe();
diff --git a/content/test/gpu/PRESUBMIT.py b/content/test/gpu/PRESUBMIT.py
index 769587c0..da0d24f 100644
--- a/content/test/gpu/PRESUBMIT.py
+++ b/content/test/gpu/PRESUBMIT.py
@@ -80,8 +80,9 @@
     return []
 
   bots = [
-    'tryserver.chromium.win:win_optional_gpu_tests_rel',
+    'tryserver.chromium.linux:linux_optional_gpu_tests_rel',
     'tryserver.chromium.mac:mac_optional_gpu_tests_rel',
+    'tryserver.chromium.win:win_optional_gpu_tests_rel',
   ]
 
   results = []
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py
index a96fa20f..e4875a48 100644
--- a/content/test/gpu/gpu_tests/pixel_expectations.py
+++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -23,9 +23,3 @@
     # TODO(ccameron): Remove suppression after rebaseline.
     self.Fail('Pixel.CSS3DBlueBox', ['mac'], bug=533690)
     self.Fail('Pixel.CSS3DBlueBoxES3', ['mac'], bug=533690)
-
-    # TODO(erikchen): Remove suppression after generating reference images.
-    self.Fail('Pixel.IOSurface2DCanvasWebGL', ['mac'], bug=595063)
-
-    # TODO(erikchen): Remove suppression after generating reference images.
-    self.Fail('Pixel.2DCanvasWebGL', bug=595063)
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
index ed8c5e6..2dc49bf 100644
--- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -11,13 +11,6 @@
 
   def SetExpectations(self):
     # All platforms.
-    self.Skip('deqp/data/gles3/shaders/functions.html', bug=483282)
-    self.Skip('deqp/data/gles3/shaders/linkage.html', bug=483282)
-    self.Skip('deqp/data/gles3/shaders/preprocessor.html', bug=483282)
-
-    self.Skip('deqp/framework/opengl/simplereference/referencecontext.html',
-        bug=483282)
-
     self.Skip('deqp/functional/gles3/attriblocation.html', bug=483282)
     self.Skip('deqp/functional/gles3/builtinprecision*.html', bug=483282)
     self.Skip('deqp/functional/gles3/draw.html', bug=483282)
@@ -60,6 +53,9 @@
     self.Skip('deqp/functional/gles3/uniformbuffers.html', bug=483282)
     self.Skip('deqp/functional/gles3/vertexarrays.html', bug=483282)
 
+    self.Fail('deqp/data/gles3/shaders/linkage.html', bug=483282)
+    self.Fail('deqp/data/gles3/shaders/preprocessor.html', bug=483282)
+
     self.Fail('conformance2/glsl3/forbidden-operators.html', bug=483282)
 
     self.Fail('conformance2/misc/expando-loss-2.html', bug=483282)
@@ -377,14 +373,12 @@
         ['mac', 'intel'], bug=483282)
 
     # Linux only.
-    self.Fail('deqp/functional/gles3/fbostatequery.html',
+    self.Fail('deqp/data/gles3/shaders/functions.html',
         ['linux'], bug=483282)
     self.Skip('deqp/functional/gles3/shaderswitch.html',
         ['linux'], bug=483282)
     self.Fail('conformance2/glsl3/vector-dynamic-indexing.html',
         ['linux'], bug=483282)
-    self.Fail('conformance2/reading/read-pixels-from-fbo-test.html',
-        ['linux'], bug=483282)
     self.Fail('conformance2/rendering/draw-buffers.html',
         ['linux'], bug=483282)
     self.Fail('conformance2/textures/misc/tex-unpack-params.html',
@@ -395,6 +389,12 @@
     self.Flaky('deqp/functional/gles3/negativeshaderapi.html',
         ['linux', 'amd', 'nvidia'], bug=483282)
 
+    # Linux NVIDIA only.
+    self.Fail('deqp/functional/gles3/fbostatequery.html',
+        ['linux', 'nvidia'], bug=483282)
+    self.Fail('conformance2/reading/read-pixels-from-fbo-test.html',
+        ['linux', 'nvidia'], bug=483282)
+
     # Linux AMD only.
     # It looks like AMD shader compiler rejects many valid ES3 semantics.
     self.Skip('deqp/data/gles3/shaders/arrays.html',
@@ -403,14 +403,8 @@
         ['linux', 'amd'], bug=483282)
     self.Skip('deqp/functional/gles3/texturestatequery.html',
         ['linux', 'amd'], bug=483282)
-    self.Fail('conformance2/buffers/buffer-type-restrictions.html',
-        ['linux', 'amd'], bug=483282)
-    self.Fail('conformance2/buffers/buffer-overflow-test.html',
-        ['linux', 'amd'], bug=483282)
     self.Fail('conformance2/renderbuffers/framebuffer-texture-layer.html',
         ['linux', 'amd'], bug=295792)
-    self.Fail('conformance2/textures/misc/tex-storage-compressed-formats.html',
-        ['linux', 'amd'], bug=295792)
 
     self.Fail('deqp/data/gles3/shaders/conversions.html',
         ['linux', 'amd'], bug=483282)
@@ -420,6 +414,8 @@
         ['linux', 'amd'], bug=483282)
     self.Fail('deqp/functional/gles3/samplerobject.html',
         ['linux', 'amd'], bug=483282)
+    self.Fail('deqp/functional/gles3/shaderprecision.html',
+        ['linux', 'amd'], bug=483282)
     self.Fail('conformance2/misc/uninitialized-test-2.html',
         ['linux', 'amd'], bug=483282)
     self.Fail('conformance2/reading/read-pixels-pack-parameters.html',
diff --git a/device/usb/usb_device_impl.cc b/device/usb/usb_device_impl.cc
index 30220b1..4a134bf 100644
--- a/device/usb/usb_device_impl.cc
+++ b/device/usb/usb_device_impl.cc
@@ -203,7 +203,6 @@
 
 void UsbDeviceImpl::HandleClosed(scoped_refptr<UsbDeviceHandle> handle) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ContainsValue(handles_, handle.get()));
   handles_.remove(handle.get());
 }
 
@@ -214,7 +213,10 @@
 
 void UsbDeviceImpl::OnDisconnect() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  for (UsbDeviceHandle* handle : handles_)
+  // Swap out the handle list as HandleClosed() will try to modify it.
+  std::list<UsbDeviceHandle*> handles;
+  handles.swap(handles_);
+  for (UsbDeviceHandle* handle : handles)
     handle->Close();
 }
 
diff --git a/extensions/browser/api/guest_view/web_view/web_view_internal_api.cc b/extensions/browser/api/guest_view/web_view/web_view_internal_api.cc
index 0b8d4af..e33962d 100644
--- a/extensions/browser/api/guest_view/web_view/web_view_internal_api.cc
+++ b/extensions/browser/api/guest_view/web_view/web_view_internal_api.cc
@@ -258,6 +258,10 @@
   return RunAsyncSafe(guest);
 }
 
+WebViewInternalCaptureVisibleRegionFunction::
+    WebViewInternalCaptureVisibleRegionFunction()
+    : is_guest_transparent_(false) {}
+
 bool WebViewInternalCaptureVisibleRegionFunction::RunAsyncSafe(
     WebViewGuest* guest) {
   using api::extension_types::ImageDetails;
@@ -273,6 +277,7 @@
     image_details = ImageDetails::FromValue(*spec);
   }
 
+  is_guest_transparent_ = guest->allow_transparency();
   return CaptureAsync(guest->web_contents(), image_details.get(),
                       base::Bind(&WebViewInternalCaptureVisibleRegionFunction::
                                      CopyFromBackingStoreComplete,
@@ -283,6 +288,10 @@
   return true;
 }
 
+bool WebViewInternalCaptureVisibleRegionFunction::ClientAllowsTransparency() {
+  return is_guest_transparent_;
+}
+
 void WebViewInternalCaptureVisibleRegionFunction::OnCaptureSuccess(
     const SkBitmap& bitmap) {
   std::string base64_result;
diff --git a/extensions/browser/api/guest_view/web_view/web_view_internal_api.h b/extensions/browser/api/guest_view/web_view/web_view_internal_api.h
index 388491ea..9f646e6 100644
--- a/extensions/browser/api/guest_view/web_view/web_view_internal_api.h
+++ b/extensions/browser/api/guest_view/web_view/web_view_internal_api.h
@@ -43,7 +43,7 @@
  public:
   DECLARE_EXTENSION_FUNCTION("webViewInternal.captureVisibleRegion",
                              WEBVIEWINTERNAL_CAPTUREVISIBLEREGION);
-  WebViewInternalCaptureVisibleRegionFunction() {}
+  WebViewInternalCaptureVisibleRegionFunction();
 
  protected:
   ~WebViewInternalCaptureVisibleRegionFunction() override {}
@@ -54,9 +54,12 @@
 
   // extensions::WebContentsCaptureClient:
   bool IsScreenshotEnabled() override;
+  bool ClientAllowsTransparency() override;
   void OnCaptureSuccess(const SkBitmap& bitmap) override;
   void OnCaptureFailure(FailureReason reason) override;
 
+  bool is_guest_transparent_;
+
   DISALLOW_COPY_AND_ASSIGN(WebViewInternalCaptureVisibleRegionFunction);
 };
 
diff --git a/extensions/browser/api/web_contents_capture_client.cc b/extensions/browser/api/web_contents_capture_client.cc
index 78c3760..6dff09e 100644
--- a/extensions/browser/api/web_contents_capture_client.cc
+++ b/extensions/browser/api/web_contents_capture_client.cc
@@ -107,6 +107,7 @@
   DCHECK(base64_result);
   std::vector<unsigned char> data;
   SkAutoLockPixels screen_capture_lock(bitmap);
+  const bool should_discard_alpha = !ClientAllowsTransparency();
   bool encoded = false;
   std::string mime_type;
   switch (image_format_) {
@@ -118,10 +119,8 @@
       mime_type = kMimeTypeJpeg;
       break;
     case api::extension_types::IMAGE_FORMAT_PNG:
-      encoded =
-          gfx::PNGCodec::EncodeBGRASkBitmap(bitmap,
-                                            true,  // Discard transparency.
-                                            &data);
+      encoded = gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, should_discard_alpha,
+                                                  &data);
       mime_type = kMimeTypePng;
       break;
     default:
diff --git a/extensions/browser/api/web_contents_capture_client.h b/extensions/browser/api/web_contents_capture_client.h
index 4107ee4e..6535354 100644
--- a/extensions/browser/api/web_contents_capture_client.h
+++ b/extensions/browser/api/web_contents_capture_client.h
@@ -28,6 +28,7 @@
   virtual ~WebContentsCaptureClient() {}
 
   virtual bool IsScreenshotEnabled() = 0;
+  virtual bool ClientAllowsTransparency() = 0;
 
   enum FailureReason {
     FAILURE_REASON_UNKNOWN,
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index 4bfb028d..a36b774 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1172,6 +1172,7 @@
   INPUT_IME_SHOWWINDOW,
   INPUT_IME_HIDEWINDOW,
   INPUTMETHODPRIVATE_SHOWINPUTVIEW,
+  WALLPAPERPRIVATE_RECORDWALLPAPERUMA,
   // Last entry: Add new entries above, then run:
   // python tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/extensions/shell/browser/shell_browser_context.cc b/extensions/shell/browser/shell_browser_context.cc
index fb1d5134..4fd5a33 100644
--- a/extensions/shell/browser/shell_browser_context.cc
+++ b/extensions/shell/browser/shell_browser_context.cc
@@ -10,6 +10,10 @@
 #include "components/guest_view/browser/guest_view_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/content_switches.h"
+#include "extensions/browser/extension_protocols.h"
+#include "extensions/common/constants.h"
+#include "extensions/shell/browser/shell_browser_main_parts.h"
+#include "extensions/shell/browser/shell_extension_system.h"
 #include "extensions/shell/browser/shell_network_delegate.h"
 #include "extensions/shell/browser/shell_special_storage_policy.h"
 #include "extensions/shell/browser/shell_url_request_context_getter.h"
@@ -27,10 +31,12 @@
 
 // Create a normal recording browser context. If we used an incognito context
 // then app_shell would also have to create a normal context and manage both.
-ShellBrowserContext::ShellBrowserContext()
+ShellBrowserContext::ShellBrowserContext(
+    ShellBrowserMainParts* browser_main_parts)
     : content::ShellBrowserContext(false /* off_the_record */,
                                    nullptr /* net_log */),
-      storage_policy_(new ShellSpecialStoragePolicy) {
+      storage_policy_(new ShellSpecialStoragePolicy),
+      browser_main_parts_(browser_main_parts) {
 }
 
 ShellBrowserContext::~ShellBrowserContext() {
@@ -46,9 +52,19 @@
 
 net::URLRequestContextGetter* ShellBrowserContext::CreateRequestContext(
       content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors,
-      InfoMap* extension_info_map) {
+      content::URLRequestInterceptorScopedVector request_interceptors) {
   DCHECK(!url_request_context_getter());
+  // Handle only chrome-extension:// requests. app_shell does not support
+  // chrome-extension-resource:// requests (it does not store shared extension
+  // data in its installation directory).
+  InfoMap* extension_info_map =
+      browser_main_parts_->extension_system()->info_map();
+  (*protocol_handlers)[kExtensionScheme] =
+      linked_ptr<net::URLRequestJobFactory::ProtocolHandler>(
+          CreateExtensionProtocolHandler(false /* is_incognito */,
+                                         extension_info_map)
+              .release());
+
   set_url_request_context_getter(new ShellURLRequestContextGetter(
       this, IgnoreCertificateErrors(), GetPath(),
       content::BrowserThread::GetMessageLoopProxyForThread(
diff --git a/extensions/shell/browser/shell_browser_context.h b/extensions/shell/browser/shell_browser_context.h
index 8d2a215..a98ef1e 100644
--- a/extensions/shell/browser/shell_browser_context.h
+++ b/extensions/shell/browser/shell_browser_context.h
@@ -13,28 +13,28 @@
 namespace extensions {
 
 class InfoMap;
+class ShellBrowserMainParts;
 class ShellSpecialStoragePolicy;
 
 // The BrowserContext used by the content, apps and extensions systems in
 // app_shell.
 class ShellBrowserContext : public content::ShellBrowserContext {
  public:
-  ShellBrowserContext();
+  explicit ShellBrowserContext(ShellBrowserMainParts* browser_main_parts);
   ~ShellBrowserContext() override;
 
   // content::BrowserContext implementation.
   content::BrowserPluginGuestManager* GetGuestManager() override;
   storage::SpecialStoragePolicy* GetSpecialStoragePolicy() override;
-
   net::URLRequestContextGetter* CreateRequestContext(
       content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors,
-      InfoMap* extension_info_map);
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
  private:
   void InitURLRequestContextOnIOThread();
 
   scoped_refptr<storage::SpecialStoragePolicy> storage_policy_;
+  ShellBrowserMainParts* browser_main_parts_;
 
   DISALLOW_COPY_AND_ASSIGN(ShellBrowserContext);
 };
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc
index 6ab35b5..e636fa0b9 100644
--- a/extensions/shell/browser/shell_browser_main_parts.cc
+++ b/extensions/shell/browser/shell_browser_main_parts.cc
@@ -142,7 +142,7 @@
 
 void ShellBrowserMainParts::PreMainMessageLoopRun() {
   // Initialize our "profile" equivalent.
-  browser_context_.reset(new ShellBrowserContext);
+  browser_context_.reset(new ShellBrowserContext(this));
 
   // app_shell only supports a single user, so all preferences live in the user
   // data directory, including the device-wide local state.
diff --git a/extensions/shell/browser/shell_content_browser_client.cc b/extensions/shell/browser/shell_content_browser_client.cc
index 8a2b45d..26298c70 100644
--- a/extensions/shell/browser/shell_content_browser_client.cc
+++ b/extensions/shell/browser/shell_content_browser_client.cc
@@ -117,28 +117,11 @@
   return true;
 }
 
-net::URLRequestContextGetter* ShellContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* content_browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  // Handle only chrome-extension:// requests. app_shell does not support
-  // chrome-extension-resource:// requests (it does not store shared extension
-  // data in its installation directory).
-  InfoMap* extension_info_map =
-      browser_main_parts_->extension_system()->info_map();
-  (*protocol_handlers)[kExtensionScheme] =
-      linked_ptr<net::URLRequestJobFactory::ProtocolHandler>(
-          CreateExtensionProtocolHandler(false /* is_incognito */,
-                                         extension_info_map)
-              .release());
-  return browser_main_parts_->browser_context()->CreateRequestContext(
-      protocol_handlers, std::move(request_interceptors), extension_info_map);
-}
-
 bool ShellContentBrowserClient::IsHandledURL(const GURL& url) {
   if (!url.is_valid())
     return false;
-  // Keep in sync with ProtocolHandlers added in CreateRequestContext() and in
+  // Keep in sync with ProtocolHandlers added in
+  // ShellBrowserContext::CreateRequestContext() and in
   // content::ShellURLRequestContextGetter::GetURLRequestContext().
   static const char* const kProtocolList[] = {
       url::kBlobScheme,
diff --git a/extensions/shell/browser/shell_content_browser_client.h b/extensions/shell/browser/shell_content_browser_client.h
index 8abdc1e..a87d36e 100644
--- a/extensions/shell/browser/shell_content_browser_client.h
+++ b/extensions/shell/browser/shell_content_browser_client.h
@@ -43,10 +43,6 @@
   void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
   bool ShouldUseProcessPerSite(content::BrowserContext* browser_context,
                                const GURL& effective_url) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
   // TODO(jamescook): Quota management?
   bool IsHandledURL(const GURL& url) override;
   void SiteInstanceGotProcess(content::SiteInstance* site_instance) override;
diff --git a/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.cc b/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.cc
index f8680781..9a2a596 100644
--- a/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.cc
+++ b/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.cc
@@ -34,12 +34,11 @@
 // static
 scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
 WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext(
-    const gpu::gles2::ContextCreationAttribHelper& attributes,
-    bool share_resources) {
+    const gpu::gles2::ContextCreationAttribHelper& attributes) {
   bool is_offscreen = true;
   return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl(
-      scoped_ptr<::gpu::GLInProcessContext>(), attributes, share_resources,
-      is_offscreen, gfx::kNullAcceleratedWidget));
+      scoped_ptr<::gpu::GLInProcessContext>(), attributes, is_offscreen,
+      gfx::kNullAcceleratedWidget));
 }
 
 scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
@@ -47,21 +46,18 @@
     scoped_ptr<::gpu::GLInProcessContext> context,
     const gpu::gles2::ContextCreationAttribHelper& attributes) {
   bool is_offscreen = true;                      // Not used.
-  bool share_resources = false;                  // Not used.
   gfx::AcceleratedWidget window = gfx::kNullAcceleratedWidget;  // Not used.
   return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl(
-      std::move(context), attributes, share_resources, is_offscreen, window));
+      std::move(context), attributes, is_offscreen, window));
 }
 
 WebGraphicsContext3DInProcessCommandBufferImpl::
     WebGraphicsContext3DInProcessCommandBufferImpl(
         scoped_ptr<::gpu::GLInProcessContext> context,
         const gpu::gles2::ContextCreationAttribHelper& attributes,
-        bool share_resources,
         bool is_offscreen,
         gfx::AcceleratedWidget window)
     : attributes_(attributes),
-      share_resources_(share_resources),
       is_offscreen_(is_offscreen),
       window_(window),
       context_(std::move(context)) {}
@@ -92,16 +88,11 @@
         NULL,                                          /* service */
         NULL,                                          /* surface */
         is_offscreen_, window_, gfx::Size(1, 1), NULL, /* share_context */
-        share_resources_, attributes_, gpu_preference,
+        attributes_, gpu_preference,
         ::gpu::GLInProcessContextSharedMemoryLimits(), nullptr, nullptr));
   }
 
-  if (context_) {
-    base::Closure context_lost_callback = base::Bind(
-        &WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost,
-        base::Unretained(this));
-    context_->SetContextLostCallback(context_lost_callback);
-  } else {
+  if (!context_) {
     initialize_failed_ = true;
     return false;
   }
@@ -134,10 +125,4 @@
   return real_gl_;
 }
 
-void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() {
-  if (context_lost_callback_) {
-    context_lost_callback_->onContextLost();
-  }
-}
-
 }  // namespace gpu_blink
diff --git a/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.h b/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.h
index b52673f..2dd275d 100644
--- a/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.h
+++ b/gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.h
@@ -40,8 +40,7 @@
 
   static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
   CreateOffscreenContext(
-      const gpu::gles2::ContextCreationAttribHelper& attributes,
-      bool share_resources);
+      const gpu::gles2::ContextCreationAttribHelper& attributes);
 
   static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> WrapContext(
       scoped_ptr<::gpu::GLInProcessContext> context,
@@ -64,7 +63,6 @@
   WebGraphicsContext3DInProcessCommandBufferImpl(
       scoped_ptr<::gpu::GLInProcessContext> context,
       const gpu::gles2::ContextCreationAttribHelper& attributes,
-      bool share_resources,
       bool is_offscreen,
       gfx::AcceleratedWidget window);
 
@@ -77,7 +75,6 @@
   void ClearContext();
 
   ::gpu::gles2::ContextCreationAttribHelper attributes_;
-  bool share_resources_;
 
   bool is_offscreen_;
   // Only used when not offscreen.
diff --git a/gpu/command_buffer/client/gl_in_process_context.cc b/gpu/command_buffer/client/gl_in_process_context.cc
index 99e4b786a..c11e01a 100644
--- a/gpu/command_buffer/client/gl_in_process_context.cc
+++ b/gpu/command_buffer/client/gl_in_process_context.cc
@@ -57,7 +57,6 @@
 
   bool Initialize(scoped_refptr<gfx::GLSurface> surface,
                   bool is_offscreen,
-                  bool use_global_share_group,
                   GLInProcessContext* share_context,
                   gfx::AcceleratedWidget window,
                   const gfx::Size& size,
@@ -90,28 +89,16 @@
   scoped_ptr<InProcessCommandBuffer> command_buffer_;
 
   const GLInProcessContextSharedMemoryLimits mem_limits_;
-  bool context_lost_;
   base::Closure context_lost_callback_;
-  base::Lock* lock_;
 
   DISALLOW_COPY_AND_ASSIGN(GLInProcessContextImpl);
 };
 
-base::LazyInstance<base::Lock> g_all_shared_contexts_lock =
-    LAZY_INSTANCE_INITIALIZER;
-base::LazyInstance<std::set<GLInProcessContextImpl*> > g_all_shared_contexts =
-    LAZY_INSTANCE_INITIALIZER;
-
 GLInProcessContextImpl::GLInProcessContextImpl(
     const GLInProcessContextSharedMemoryLimits& mem_limits)
-    : mem_limits_(mem_limits), context_lost_(false), lock_(nullptr) {
-}
+    : mem_limits_(mem_limits) {}
 
 GLInProcessContextImpl::~GLInProcessContextImpl() {
-  {
-    base::AutoLock lock(g_all_shared_contexts_lock.Get());
-    g_all_shared_contexts.Get().erase(this);
-  }
   Destroy();
 }
 
@@ -124,8 +111,7 @@
 }
 
 void GLInProcessContextImpl::SetLock(base::Lock* lock) {
-  command_buffer_->SetLock(lock);
-  lock_ = lock;
+  NOTREACHED();
 }
 
 void GLInProcessContextImpl::SetContextLostCallback(
@@ -134,19 +120,13 @@
 }
 
 void GLInProcessContextImpl::OnContextLost() {
-  scoped_ptr<base::AutoLock> lock;
-  if (lock_)
-    lock.reset(new base::AutoLock(*lock_));
-  context_lost_ = true;
-  if (!context_lost_callback_.is_null()) {
+  if (!context_lost_callback_.is_null())
     context_lost_callback_.Run();
-  }
 }
 
 bool GLInProcessContextImpl::Initialize(
     scoped_refptr<gfx::GLSurface> surface,
     bool is_offscreen,
-    bool use_global_share_group,
     GLInProcessContext* share_context,
     gfx::AcceleratedWidget window,
     const gfx::Size& size,
@@ -155,7 +135,6 @@
     const scoped_refptr<InProcessCommandBuffer::Service>& service,
     GpuMemoryBufferManager* gpu_memory_buffer_manager,
     ImageFactory* image_factory) {
-  DCHECK(!use_global_share_group || !share_context);
   DCHECK(size.width() >= 0 && size.height() >= 0);
 
   std::vector<int32_t> attrib_vector;
@@ -165,31 +144,14 @@
       base::Bind(&GLInProcessContextImpl::OnContextLost, AsWeakPtr());
   command_buffer_.reset(new InProcessCommandBuffer(service));
 
-  scoped_ptr<base::AutoLock> scoped_shared_context_lock;
   scoped_refptr<gles2::ShareGroup> share_group;
-  InProcessCommandBuffer* share_command_buffer = NULL;
-  if (use_global_share_group) {
-    scoped_shared_context_lock.reset(
-        new base::AutoLock(g_all_shared_contexts_lock.Get()));
-    for (std::set<GLInProcessContextImpl*>::const_iterator it =
-             g_all_shared_contexts.Get().begin();
-         it != g_all_shared_contexts.Get().end();
-         it++) {
-      const GLInProcessContextImpl* context = *it;
-      if (!context->context_lost_) {
-        share_group = context->gles2_implementation_->share_group();
-        share_command_buffer = context->command_buffer_.get();
-        DCHECK(share_group.get());
-        DCHECK(share_command_buffer);
-        break;
-      }
-    }
-  } else if (share_context) {
+  InProcessCommandBuffer* share_command_buffer = nullptr;
+  if (share_context) {
     GLInProcessContextImpl* impl =
         static_cast<GLInProcessContextImpl*>(share_context);
     share_group = impl->gles2_implementation_->share_group();
     share_command_buffer = impl->command_buffer_.get();
-    DCHECK(share_group.get());
+    DCHECK(share_group);
     DCHECK(share_command_buffer);
   }
 
@@ -203,7 +165,7 @@
                                    share_command_buffer,
                                    gpu_memory_buffer_manager,
                                    image_factory)) {
-    LOG(ERROR) << "Failed to initialize InProcessCommmandBuffer";
+    DLOG(ERROR) << "Failed to initialize InProcessCommmandBuffer";
     return false;
   }
 
@@ -233,11 +195,6 @@
                                      support_client_side_arrays,
                                      command_buffer_.get()));
 
-  if (use_global_share_group) {
-    g_all_shared_contexts.Get().insert(this);
-    scoped_shared_context_lock.reset();
-  }
-
   if (!gles2_implementation_->Initialize(
           mem_limits_.start_transfer_buffer_size,
           mem_limits_.min_transfer_buffer_size,
@@ -295,13 +252,11 @@
     gfx::AcceleratedWidget window,
     const gfx::Size& size,
     GLInProcessContext* share_context,
-    bool use_global_share_group,
     const ::gpu::gles2::ContextCreationAttribHelper& attribs,
     gfx::GpuPreference gpu_preference,
     const GLInProcessContextSharedMemoryLimits& memory_limits,
     GpuMemoryBufferManager* gpu_memory_buffer_manager,
     ImageFactory* image_factory) {
-  DCHECK(!use_global_share_group || !share_context);
   if (surface.get()) {
     DCHECK_EQ(surface->IsOffscreen(), is_offscreen);
     DCHECK(surface->GetSize() == size);
@@ -312,7 +267,6 @@
       new GLInProcessContextImpl(memory_limits));
   if (!context->Initialize(surface,
                            is_offscreen,
-                           use_global_share_group,
                            share_context,
                            window,
                            size,
diff --git a/gpu/command_buffer/client/gl_in_process_context.h b/gpu/command_buffer/client/gl_in_process_context.h
index 36484cef..a338f829 100644
--- a/gpu/command_buffer/client/gl_in_process_context.h
+++ b/gpu/command_buffer/client/gl_in_process_context.h
@@ -55,8 +55,6 @@
   // service must run on the same thread as this client because GLSurface is
   // not thread safe. If |surface| is NULL, then the other parameters are used
   // to correctly create a surface.
-  // Only one of |share_context| and |use_global_share_group| can be used at
-  // the same time.
   static GLInProcessContext* Create(
       scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
       scoped_refptr<gfx::GLSurface> surface,
@@ -64,7 +62,6 @@
       gfx::AcceleratedWidget window,
       const gfx::Size& size,
       GLInProcessContext* share_context,
-      bool use_global_share_group,
       const gpu::gles2::ContextCreationAttribHelper& attribs,
       gfx::GpuPreference gpu_preference,
       const GLInProcessContextSharedMemoryLimits& memory_limits,
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index 9483bf1..27824398 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -210,7 +210,6 @@
     const scoped_refptr<Service>& service)
     : command_buffer_id_(
           CommandBufferId::FromUnsafeValue(g_next_command_buffer_id.GetNext())),
-      context_lost_(false),
       delayed_work_pending_(false),
       image_factory_(nullptr),
       last_put_offset_(-1),
@@ -233,12 +232,17 @@
   CheckSequencedThread();
   command_buffer_lock_.AssertAcquired();
 
-  if (!context_lost_ && decoder_->MakeCurrent())
-    return true;
-  DLOG(ERROR) << "Context lost because MakeCurrent failed.";
-  command_buffer_->SetContextLostReason(decoder_->GetContextLostReason());
-  command_buffer_->SetParseError(gpu::error::kLostContext);
-  return false;
+  if (error::IsError(command_buffer_->GetLastState().error)) {
+    DLOG(ERROR) << "MakeCurrent failed because context lost.";
+    return false;
+  }
+  if (!decoder_->MakeCurrent()) {
+    DLOG(ERROR) << "Context lost because MakeCurrent failed.";
+    command_buffer_->SetContextLostReason(decoder_->GetContextLostReason());
+    command_buffer_->SetParseError(gpu::error::kLostContext);
+    return false;
+  }
+  return true;
 }
 
 void InProcessCommandBuffer::PumpCommands() {
@@ -497,8 +501,6 @@
     context_lost_callback_.Run();
     context_lost_callback_.Reset();
   }
-
-  context_lost_ = true;
 }
 
 CommandBuffer::State InProcessCommandBuffer::GetStateFast() {
@@ -535,14 +537,13 @@
       base::AutoLock lock(state_after_last_flush_lock_);
       state_after_last_flush_ = command_buffer_->GetLastState();
     }
-    DCHECK((!error::IsError(state_after_last_flush_.error) && !context_lost_) ||
-           (error::IsError(state_after_last_flush_.error) && context_lost_));
 
     // Currently the in process command buffer does not support being
     // descheduled, if it does we would need to back off on calling the finish
     // processing number function until the message is rescheduled and finished
     // processing. This DCHECK is to enforce this.
-    DCHECK(context_lost_ || put_offset == state_after_last_flush_.get_offset);
+    DCHECK(error::IsError(state_after_last_flush_.error) ||
+           put_offset == state_after_last_flush_.get_offset);
   }
 
   // If we've processed all pending commands but still have pending queries,
@@ -917,6 +918,8 @@
 }
 
 void InProcessCommandBuffer::SetLock(base::Lock*) {
+  // No support for using on multiple threads.
+  NOTREACHED();
 }
 
 bool InProcessCommandBuffer::IsGpuChannelLost() {
diff --git a/gpu/command_buffer/service/in_process_command_buffer.h b/gpu/command_buffer/service/in_process_command_buffer.h
index af3956a..731c486 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.h
+++ b/gpu/command_buffer/service/in_process_command_buffer.h
@@ -83,7 +83,7 @@
   explicit InProcessCommandBuffer(const scoped_refptr<Service>& service);
   ~InProcessCommandBuffer() override;
 
-  // If |surface| is not NULL, use it directly; in this case, the command
+  // If |surface| is not null, use it directly; in this case, the command
   // buffer gpu thread must be the same as the client thread. Otherwise create
   // a new GLSurface.
   bool Initialize(scoped_refptr<gfx::GLSurface> surface,
diff --git a/headless/lib/browser/headless_browser_context.cc b/headless/lib/browser/headless_browser_context.cc
index 13ffced4..b48f090 100644
--- a/headless/lib/browser/headless_browser_context.cc
+++ b/headless/lib/browser/headless_browser_context.cc
@@ -152,14 +152,34 @@
   return nullptr;
 }
 
+net::URLRequestContextGetter* HeadlessBrowserContext::CreateRequestContext(
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  scoped_refptr<HeadlessURLRequestContextGetter> url_request_context_getter(
+      new HeadlessURLRequestContextGetter(
+          false /* ignore_certificate_errors */, GetPath(),
+          content::BrowserThread::GetMessageLoopProxyForThread(
+              content::BrowserThread::IO),
+          content::BrowserThread::GetMessageLoopProxyForThread(
+              content::BrowserThread::FILE),
+          protocol_handlers, std::move(request_interceptors),
+          nullptr /* net_log */, options()));
+  resource_context_->set_url_request_context_getter(url_request_context_getter);
+  return url_request_context_getter.get();
+}
+
+net::URLRequestContextGetter*
+HeadlessBrowserContext::CreateRequestContextForStoragePartition(
+    const base::FilePath& partition_path,
+    bool in_memory,
+    content::ProtocolHandlerMap* protocol_handlers,
+    content::URLRequestInterceptorScopedVector request_interceptors) {
+  return nullptr;
+}
+
 void HeadlessBrowserContext::SetOptionsForTesting(
     const HeadlessBrowser::Options& options) {
   options_ = options;
 }
 
-void HeadlessBrowserContext::SetURLRequestContextGetter(
-    scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) {
-  resource_context_->set_url_request_context_getter(url_request_context_getter);
-}
-
 }  // namespace headless
diff --git a/headless/lib/browser/headless_browser_context.h b/headless/lib/browser/headless_browser_context.h
index d7c7f19..6fd6676 100644
--- a/headless/lib/browser/headless_browser_context.h
+++ b/headless/lib/browser/headless_browser_context.h
@@ -42,15 +42,18 @@
   content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
   content::PermissionManager* GetPermissionManager() override;
   content::BackgroundSyncController* GetBackgroundSyncController() override;
+  net::URLRequestContextGetter* CreateRequestContext(
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
+  net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
+      const base::FilePath& partition_path,
+      bool in_memory,
+      content::ProtocolHandlerMap* protocol_handlers,
+      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
   const HeadlessBrowser::Options& options() const { return options_; }
   void SetOptionsForTesting(const HeadlessBrowser::Options& options);
 
-  // Configure the URL request context getter to be used for serving URL
-  // requests in this browser instance.
-  void SetURLRequestContextGetter(
-      scoped_refptr<net::URLRequestContextGetter> url_request_context_getter);
-
  private:
   // Performs initialization of the HeadlessBrowserContext while IO is still
   // allowed on the current thread.
diff --git a/headless/lib/browser/headless_content_browser_client.cc b/headless/lib/browser/headless_content_browser_client.cc
index 0fa3681..a56a1fe 100644
--- a/headless/lib/browser/headless_content_browser_client.cc
+++ b/headless/lib/browser/headless_content_browser_client.cc
@@ -8,7 +8,6 @@
 
 #include "base/memory/ptr_util.h"
 #include "content/public/browser/browser_thread.h"
-#include "headless/lib/browser/headless_browser_context.h"
 #include "headless/lib/browser/headless_browser_impl.h"
 #include "headless/lib/browser/headless_browser_main_parts.h"
 
@@ -28,27 +27,4 @@
   return browser_main_parts.release();
 }
 
-net::URLRequestContextGetter*
-HeadlessContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* content_browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  CHECK(content_browser_context == browser_context());
-  scoped_refptr<HeadlessURLRequestContextGetter> url_request_context_getter(
-      new HeadlessURLRequestContextGetter(
-          false /* ignore_certificate_errors */, browser_context()->GetPath(),
-          content::BrowserThread::GetMessageLoopProxyForThread(
-              content::BrowserThread::IO),
-          content::BrowserThread::GetMessageLoopProxyForThread(
-              content::BrowserThread::FILE),
-          protocol_handlers, std::move(request_interceptors),
-          nullptr /* net_log */, browser_context()->options()));
-  browser_context()->SetURLRequestContextGetter(url_request_context_getter);
-  return url_request_context_getter.get();
-}
-
-HeadlessBrowserContext* HeadlessContentBrowserClient::browser_context() const {
-  return browser_->browser_context();
-}
-
 }  // namespace headless
diff --git a/headless/lib/browser/headless_content_browser_client.h b/headless/lib/browser/headless_content_browser_client.h
index cf124e1..16d9ef3 100644
--- a/headless/lib/browser/headless_content_browser_client.h
+++ b/headless/lib/browser/headless_content_browser_client.h
@@ -11,7 +11,6 @@
 
 class HeadlessBrowserImpl;
 class HeadlessBrowserMainParts;
-class HeadlessBrowserContext;
 
 class HeadlessContentBrowserClient : public content::ContentBrowserClient {
  public:
@@ -21,12 +20,6 @@
   // content::ContentBrowserClient implementation:
   content::BrowserMainParts* CreateBrowserMainParts(
       const content::MainFunctionParams&) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
-
-  HeadlessBrowserContext* browser_context() const;
 
  private:
   HeadlessBrowserImpl* browser_;  // Not owned.
diff --git a/headless/lib/browser/headless_url_request_context_getter.h b/headless/lib/browser/headless_url_request_context_getter.h
index 0e5912f..99340a6c 100644
--- a/headless/lib/browser/headless_url_request_context_getter.h
+++ b/headless/lib/browser/headless_url_request_context_getter.h
@@ -11,6 +11,7 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
 #include "headless/public/headless_browser.h"
 #include "net/proxy/proxy_config_service.h"
diff --git a/infra/config/cq.cfg b/infra/config/cq.cfg
index 2cd7c29..7eceb77 100644
--- a/infra/config/cq.cfg
+++ b/infra/config/cq.cfg
@@ -44,7 +44,6 @@
       builders { name: "chromeos_daisy_chromium_compile_only_ng" }
       builders { name: "chromeos_x86-generic_chromium_compile_only_ng" }
       builders { name: "chromium_presubmit" }
-      builders { name: "linux_blink_oilpan_rel" }
       builders { name: "linux_chromium_asan_rel_ng" }
       builders { name: "linux_chromium_chromeos_compile_dbg_ng" }
       builders { name: "linux_chromium_chromeos_ozone_rel_ng" }
diff --git a/ios/build/bots/chromium.fyi/Chromium_iOS_Device.json b/ios/build/bots/chromium.fyi/Chromium_iOS_Device.json
index 283a859..350f9d7 100644
--- a/ios/build/bots/chromium.fyi/Chromium_iOS_Device.json
+++ b/ios/build/bots/chromium.fyi/Chromium_iOS_Device.json
@@ -10,7 +10,7 @@
     "chromium_ios_signing": "0",
     "target_subarch": "arm32"
   },
-  "compiler": "xcodebuild",
+  "compiler": "ninja",
   "configuration": "Release",
   "sdk": "iphoneos9.0",
   "tests": [
diff --git "a/ios/build/bots/chromium.fyi/Chromium_iOS_Simulator_\050dbg\051.json" "b/ios/build/bots/chromium.fyi/Chromium_iOS_Simulator_\050dbg\051.json"
index d12ff59..54bc4cbf 100644
--- "a/ios/build/bots/chromium.fyi/Chromium_iOS_Simulator_\050dbg\051.json"
+++ "b/ios/build/bots/chromium.fyi/Chromium_iOS_Simulator_\050dbg\051.json"
@@ -10,7 +10,7 @@
     "chromium_ios_signing": "0",
     "target_subarch": "both"
   },
-  "compiler": "xcodebuild",
+  "compiler": "ninja",
   "configuration": "Debug",
   "sdk": "iphonesimulator9.0",
   "tests": [
diff --git a/ios/build/bots/chromium.mac/iOS_Device.json b/ios/build/bots/chromium.mac/iOS_Device.json
index 283a859..350f9d7 100644
--- a/ios/build/bots/chromium.mac/iOS_Device.json
+++ b/ios/build/bots/chromium.mac/iOS_Device.json
@@ -10,7 +10,7 @@
     "chromium_ios_signing": "0",
     "target_subarch": "arm32"
   },
-  "compiler": "xcodebuild",
+  "compiler": "ninja",
   "configuration": "Release",
   "sdk": "iphoneos9.0",
   "tests": [
diff --git "a/ios/build/bots/chromium.mac/iOS_Simulator_\050dbg\051.json" "b/ios/build/bots/chromium.mac/iOS_Simulator_\050dbg\051.json"
index d12ff59..54bc4cbf 100644
--- "a/ios/build/bots/chromium.mac/iOS_Simulator_\050dbg\051.json"
+++ "b/ios/build/bots/chromium.mac/iOS_Simulator_\050dbg\051.json"
@@ -10,7 +10,7 @@
     "chromium_ios_signing": "0",
     "target_subarch": "both"
   },
-  "compiler": "xcodebuild",
+  "compiler": "ninja",
   "configuration": "Debug",
   "sdk": "iphonesimulator9.0",
   "tests": [
diff --git a/ios/build/bots/tryserver.chromium.mac/ios_dbg_simulator.json b/ios/build/bots/tryserver.chromium.mac/ios_dbg_simulator.json
index d12ff59..54bc4cbf 100644
--- a/ios/build/bots/tryserver.chromium.mac/ios_dbg_simulator.json
+++ b/ios/build/bots/tryserver.chromium.mac/ios_dbg_simulator.json
@@ -10,7 +10,7 @@
     "chromium_ios_signing": "0",
     "target_subarch": "both"
   },
-  "compiler": "xcodebuild",
+  "compiler": "ninja",
   "configuration": "Debug",
   "sdk": "iphonesimulator9.0",
   "tests": [
diff --git a/ios/build/bots/tryserver.chromium.mac/ios_rel_device.json b/ios/build/bots/tryserver.chromium.mac/ios_rel_device.json
index 283a859..350f9d7 100644
--- a/ios/build/bots/tryserver.chromium.mac/ios_rel_device.json
+++ b/ios/build/bots/tryserver.chromium.mac/ios_rel_device.json
@@ -10,7 +10,7 @@
     "chromium_ios_signing": "0",
     "target_subarch": "arm32"
   },
-  "compiler": "xcodebuild",
+  "compiler": "ninja",
   "configuration": "Release",
   "sdk": "iphoneos9.0",
   "tests": [
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 9a5ff10..28d20a0 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -218,71 +218,7 @@
       </message>
 
       <!-- Safe Browsing -->
-      <!-- - harmful download interstitials -->
-      <message name="IDS_IOS_HARMFUL_V3_EXPLANATION_PARAGRAPH" desc="The explanation of why Safe Browsing has blocked the page.">
-        Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>found harmful programs<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>.
-      </message>
-      <message name="IDS_IOS_HARMFUL_V3_HEADING" desc="The large heading at the top of the social engineering interstitial.">
-        The site ahead contains harmful programs
-      </message>
-      <message name="IDS_IOS_HARMFUL_V3_PRIMARY_PARAGRAPH" desc="Mobile: The primary explanatory paragraph for the social engineering interstitial.">
-        Attackers on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might attempt to trick you into installing programs that harm your browsing experience (for example, by changing your homepage or showing extra ads on sites you visit).
-      </message>
-      <message name="IDS_IOS_HARMFUL_V3_PROCEED_PARAGRAPH" desc="The paragraph that lets the user skip the warning.">
-        If you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this site<ph name="END_LINK">&lt;/a&gt;</ph> before the harmful programs have been removed.
-      </message>
-      <!-- - malware interstitials -->
-      <message name="IDS_IOS_MALWARE_V3_EXPLANATION_PARAGRAPH" desc="The explanation of why Safe Browsing has blocked the page.">
-        Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware.
-      </message>
-      <message name="IDS_IOS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE" desc="The explanation of why Safe Browsing has blocked the page.">
-        Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware. The malicious content comes from <ph name="SUBRESOURCE_HOST">$2<ex>evil.com</ex></ph>, a known malware distributor.
-      </message>
-      <message name="IDS_IOS_MALWARE_V3_HEADING" desc="The large heading at the top of the malware interstitial.">
-        The site ahead contains malware
-      </message>
-      <message name="IDS_IOS_MALWARE_V3_PRIMARY_PARAGRAPH" desc="Mobile: The primary explanatory paragraph for the malware interstitial.">
-        Attackers currently on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might attempt to install dangerous apps on your device that steal or delete your information (for example, photos, passwords, messages, and credit cards).
-      </message>
-      <message name="IDS_IOS_MALWARE_V3_PROCEED_PARAGRAPH" desc="The paragraph that lets the user skip the warning.">
-        If you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this unsafe site<ph name="END_LINK">&lt;/a&gt;</ph> before the dangerous programs have been removed.
-      </message>
-      <!-- - phishing interstitials -->
-      <message name="IDS_IOS_PHISHING_V3_EXPLANATION_PARAGRAPH" desc="The explanation of why Safe Browsing has blocked the page.">
-      Google Safe Browsing recently detected phishing on <ph name="SITE">$1<ex>example.com</ex></ph>. <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>Phishing sites<ph name="END_LINK">&lt;/a&gt;</ph> pretend to be other websites to trick you.
-      </message>
-      <message name="IDS_IOS_PHISHING_V3_HEADING" desc="The large heading at the top of the phishing interstitial.">
-        Phishing attack ahead
-      </message>
-      <message name="IDS_IOS_PHISHING_V3_PRIMARY_PARAGRAPH" desc="The primary explanatory paragraph for the malware interstitial.">
-        Attackers on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might try to trick you to steal your information (for example, passwords, messages, or credit cards).
-      </message>
-      <message name="IDS_IOS_PHISHING_V3_PROCEED_PARAGRAPH" desc="The paragraph that lets the user skip the warning.">
-        If you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this unsafe site<ph name="END_LINK">&lt;/a&gt;</ph>.
-      </message>
-      <message name="IDS_IOS_PHISHING_V4_HEADING" desc="The large heading at the top of the phishing interstitial.">
-        Deceptive site ahead
-      </message>
-      <message name="IDS_IOS_PHISHING_V4_PRIMARY_PARAGRAPH" desc="The primary explanatory paragraph for the malware interstitial.">
-        Attackers on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> may trick you into doing something dangerous like installing software or revealing your personal information (for example, passwords, phone numbers, or credit cards).
-      </message>
-      <message name="IDS_IOS_PHISHING_V4_PROCEED_AND_REPORT_PARAGRAPH" desc="The paragraph that lets the user skip the warning.">
-        You can <ph name="BEGIN_ERROR_LINK">&lt;a href="#" id="report-error-link"&gt;</ph>report a detection problem<ph name="END_ERROR_LINK">&lt;/a&gt;</ph> or, if you understand the risks to your security, <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this unsafe site<ph name="END_LINK">&lt;/a&gt;</ph>.
-      </message>
       <!-- - shared strings -->
-      <message name="IDS_IOS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON" desc="The text for the button that takes the user back to the previous page.">
-        Back to safety
-      </message>
-      <message name="IDS_IOS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON" desc="The text for the button that hides the details.">
-        Hide details
-      </message>
-      <message name="IDS_IOS_SAFEBROWSING_V3_OPEN_DETAILS_BUTTON" desc="The text for the button that expands the details.">
-        Details
-      </message>
-      <message name="IDS_IOS_SAFEBROWSING_V3_TITLE" desc="The tab title for the Safe Browsing interstitials.">
-        Security error
-      </message>
-
       <message name="IDS_IOS_INTERSTITIAL_HEADING_SPOOFING_ATTEMPT_ERROR" desc="Header error message to tell user that the requested URI might be misleading [Length: 20em]">
         Warning: Something's Not Right Here!
       </message>
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn
index 96b0664..d2b26998 100644
--- a/ios/chrome/browser/BUILD.gn
+++ b/ios/chrome/browser/BUILD.gn
@@ -19,12 +19,6 @@
   google_test_sync_url = ""
 }
 
-proto_library("metadata_proto") {
-  sources = [
-    "safe_browsing/metadata.proto",
-  ]
-}
-
 source_set("browser") {
   sources = [
     "app_startup_parameters.h",
@@ -323,20 +317,6 @@
     "reading_list/reading_list_model_storage.h",
     "reading_list/reading_list_model_storage_defaults.h",
     "reading_list/reading_list_model_storage_defaults.mm",
-    "safe_browsing/hit_report.cc",
-    "safe_browsing/hit_report.h",
-    "safe_browsing/ping_manager.cc",
-    "safe_browsing/ping_manager.h",
-    "safe_browsing/protocol_manager_helper.cc",
-    "safe_browsing/protocol_manager_helper.h",
-    "safe_browsing/safe_browsing_blocking_page.h",
-    "safe_browsing/safe_browsing_blocking_page.mm",
-    "safe_browsing/safe_browsing_service.cc",
-    "safe_browsing/safe_browsing_service.h",
-    "safe_browsing/ui_manager.h",
-    "safe_browsing/ui_manager.mm",
-    "safe_browsing/util.cc",
-    "safe_browsing/util.h",
     "search/search_util.h",
     "search/search_util.mm",
     "search_engines/search_engines_util.cc",
@@ -553,7 +533,6 @@
   deps = [
     ":about_flags",
     ":injected_js",
-    ":metadata_proto",
     "//base",
     "//breakpad:client",
     "//components/about_handler",
@@ -742,7 +721,6 @@
     "geolocation/test_location_manager.mm",
     "net/mock_image_fetcher.h",
     "net/mock_image_fetcher.mm",
-    "safe_browsing/util_unittest.cc",
     "signin/fake_oauth2_token_service_builder.h",
     "signin/fake_oauth2_token_service_builder.mm",
     "signin/fake_signin_manager_builder.cc",
diff --git a/ios/chrome/browser/application_context.h b/ios/chrome/browser/application_context.h
index 17279f1..1c5154b4 100644
--- a/ios/chrome/browser/application_context.h
+++ b/ios/chrome/browser/application_context.h
@@ -131,9 +131,6 @@
   // Gets the CRLSetFetcher.
   virtual CRLSetFetcher* GetCRLSetFetcher() = 0;
 
-  // Gets the SafeBrowsingService.
-  virtual safe_browsing::SafeBrowsingService* GetSafeBrowsingService() = 0;
-
  protected:
   // Sets the global ApplicationContext instance.
   static void SetApplicationContext(ApplicationContext* context);
diff --git a/ios/chrome/browser/application_context_impl.cc b/ios/chrome/browser/application_context_impl.cc
index 82d75af..424f5e1e 100644
--- a/ios/chrome/browser/application_context_impl.cc
+++ b/ios/chrome/browser/application_context_impl.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/path_service.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
@@ -45,7 +46,6 @@
 #include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
 #include "ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h"
-#include "ios/chrome/browser/safe_browsing/safe_browsing_service.h"
 #include "ios/chrome/browser/update_client/ios_chrome_update_query_params_delegate.h"
 #include "ios/chrome/browser/web_resource/web_resource_util.h"
 #include "ios/chrome/common/channel_info.h"
@@ -104,13 +104,10 @@
 
 void ApplicationContextImpl::StartTearDown() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  // We need to destroy the MetricsServicesManager and
-  // SafeBrowsing before the IO thread gets destroyed, since their destructors
-  // can call the URLFetcher destructor, which does a PostDelayedTask operation
-  // on the IO thread. (The IO thread will handle that URLFetcher operation
-  // before going away.)
-  if (safe_browsing_service_)
-    safe_browsing_service_->ShutDown();
+  // We need to destroy the MetricsServicesManager before the IO thread gets
+  // destroyed, since the destructor can call the URLFetcher destructor, which
+  // does a PostDelayedTask operation on the IO thread. (The IO thread will
+  // handle that URLFetcher operation before going away.)
 
   metrics_services_manager_.reset();
 
@@ -224,7 +221,7 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   if (!metrics_services_manager_) {
     metrics_services_manager_.reset(
-        new metrics_services_manager::MetricsServicesManager(make_scoped_ptr(
+        new metrics_services_manager::MetricsServicesManager(base::WrapUnique(
             new IOSChromeMetricsServicesManagerClient(GetLocalState()))));
   }
   return metrics_services_manager_.get();
@@ -255,8 +252,8 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   if (!network_time_tracker_) {
     network_time_tracker_.reset(new network_time::NetworkTimeTracker(
-        make_scoped_ptr(new base::DefaultClock),
-        make_scoped_ptr(new base::DefaultTickClock), GetLocalState()));
+        base::WrapUnique(new base::DefaultClock),
+        base::WrapUnique(new base::DefaultTickClock), GetLocalState()));
   }
   return network_time_tracker_.get();
 }
@@ -303,17 +300,6 @@
   return crl_set_fetcher_.get();
 }
 
-safe_browsing::SafeBrowsingService*
-ApplicationContextImpl::GetSafeBrowsingService() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!safe_browsing_service_) {
-    safe_browsing_service_ =
-        safe_browsing::SafeBrowsingService::CreateSafeBrowsingService();
-    safe_browsing_service_->Initialize();
-  }
-  return safe_browsing_service_.get();
-}
-
 void ApplicationContextImpl::SetApplicationLocale(const std::string& locale) {
   DCHECK(thread_checker_.CalledOnValidThread());
   application_locale_ = locale;
@@ -362,7 +348,7 @@
           base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
 
   gcm_driver_ = gcm::CreateGCMDriverDesktop(
-      make_scoped_ptr(new gcm::GCMClientFactory), GetLocalState(), store_path,
+      base::WrapUnique(new gcm::GCMClientFactory), GetLocalState(), store_path,
       GetSystemURLRequestContext(), ::GetChannel(),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::UI),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::IO),
diff --git a/ios/chrome/browser/application_context_impl.h b/ios/chrome/browser/application_context_impl.h
index 02bd11c5..b9ffd7e 100644
--- a/ios/chrome/browser/application_context_impl.h
+++ b/ios/chrome/browser/application_context_impl.h
@@ -5,11 +5,11 @@
 #ifndef IOS_CHROME_BROWSER_APPLICATION_CONTEXT_IMPL_H_
 #define IOS_CHROME_BROWSER_APPLICATION_CONTEXT_IMPL_H_
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "ios/chrome/browser/application_context.h"
 
@@ -65,7 +65,6 @@
   component_updater::ComponentUpdateService* GetComponentUpdateService()
       override;
   CRLSetFetcher* GetCRLSetFetcher() override;
-  safe_browsing::SafeBrowsingService* GetSafeBrowsingService() override;
 
  private:
   // Sets the locale used by the application.
@@ -78,17 +77,16 @@
   void CreateGCMDriver();
 
   base::ThreadChecker thread_checker_;
-  scoped_ptr<PrefService> local_state_;
-  scoped_ptr<net_log::ChromeNetLog> net_log_;
-  scoped_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
-  scoped_ptr<IOSChromeIOThread> ios_chrome_io_thread_;
-  scoped_ptr<metrics_services_manager::MetricsServicesManager>
+  std::unique_ptr<PrefService> local_state_;
+  std::unique_ptr<net_log::ChromeNetLog> net_log_;
+  std::unique_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
+  std::unique_ptr<IOSChromeIOThread> ios_chrome_io_thread_;
+  std::unique_ptr<metrics_services_manager::MetricsServicesManager>
       metrics_services_manager_;
-  scoped_ptr<gcm::GCMDriver> gcm_driver_;
-  scoped_ptr<component_updater::ComponentUpdateService> component_updater_;
+  std::unique_ptr<gcm::GCMDriver> gcm_driver_;
+  std::unique_ptr<component_updater::ComponentUpdateService> component_updater_;
   scoped_refptr<CRLSetFetcher> crl_set_fetcher_;
-  scoped_refptr<safe_browsing::SafeBrowsingService> safe_browsing_service_;
-  scoped_ptr<ios::ChromeBrowserStateManager> chrome_browser_state_manager_;
+  std::unique_ptr<ios::ChromeBrowserStateManager> chrome_browser_state_manager_;
   std::string application_locale_;
 
   // Sequenced task runner for local state related I/O tasks.
diff --git a/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc b/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc
index 22dc1e3..e1c429b 100644
--- a/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc
+++ b/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/autocomplete/autocomplete_classifier_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/omnibox/browser/autocomplete_classifier.h"
@@ -19,15 +20,15 @@
 namespace ios {
 namespace {
 
-scoped_ptr<KeyedService> BuildAutocompleteClassifier(
+std::unique_ptr<KeyedService> BuildAutocompleteClassifier(
     web::BrowserState* context) {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new AutocompleteClassifier(
-      make_scoped_ptr(new AutocompleteController(
-          make_scoped_ptr(new AutocompleteProviderClientImpl(browser_state)),
+  return base::WrapUnique(new AutocompleteClassifier(
+      base::WrapUnique(new AutocompleteController(
+          base::WrapUnique(new AutocompleteProviderClientImpl(browser_state)),
           nullptr, AutocompleteClassifier::kDefaultOmniboxProviders)),
-      make_scoped_ptr(new AutocompleteSchemeClassifierImpl)));
+      base::WrapUnique(new AutocompleteSchemeClassifierImpl)));
 }
 
 }  // namespace
@@ -61,7 +62,8 @@
 
 AutocompleteClassifierFactory::~AutocompleteClassifierFactory() {}
 
-scoped_ptr<KeyedService> AutocompleteClassifierFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+AutocompleteClassifierFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   return BuildAutocompleteClassifier(context);
 }
diff --git a/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.h b/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.h
index 89acfc5..9ccf98b 100644
--- a/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.h
+++ b/ios/chrome/browser/autocomplete/autocomplete_classifier_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_CLASSIFIER_FACTORY_H_
 #define IOS_CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_CLASSIFIER_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -40,7 +41,7 @@
   ~AutocompleteClassifierFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.cc b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.cc
index 328fd6a..ba5a6c16 100644
--- a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.cc
+++ b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.cc
@@ -97,7 +97,7 @@
       browser_state_);
 }
 
-scoped_ptr<KeywordExtensionsDelegate>
+std::unique_ptr<KeywordExtensionsDelegate>
 AutocompleteProviderClientImpl::GetKeywordExtensionsDelegate(
     KeywordProvider* keyword_provider) {
   return nullptr;
diff --git a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h
index 901494b..600272d 100644
--- a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h
+++ b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h
@@ -37,7 +37,7 @@
   const SearchTermsData& GetSearchTermsData() const override;
   scoped_refptr<ShortcutsBackend> GetShortcutsBackend() override;
   scoped_refptr<ShortcutsBackend> GetShortcutsBackendIfExists() override;
-  scoped_ptr<KeywordExtensionsDelegate> GetKeywordExtensionsDelegate(
+  std::unique_ptr<KeywordExtensionsDelegate> GetKeywordExtensionsDelegate(
       KeywordProvider* keyword_provider) override;
   std::string GetAcceptLanguages() const override;
   std::string GetEmbedderRepresentationOfAboutScheme() override;
diff --git a/ios/chrome/browser/autocomplete/in_memory_url_index_factory.cc b/ios/chrome/browser/autocomplete/in_memory_url_index_factory.cc
index 867ae8a..ed876b2 100644
--- a/ios/chrome/browser/autocomplete/in_memory_url_index_factory.cc
+++ b/ios/chrome/browser/autocomplete/in_memory_url_index_factory.cc
@@ -22,7 +22,8 @@
 
 namespace {
 
-scoped_ptr<KeyedService> BuildInMemoryURLIndex(web::BrowserState* context) {
+std::unique_ptr<KeyedService> BuildInMemoryURLIndex(
+    web::BrowserState* context) {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
 
@@ -30,7 +31,7 @@
   schemes_to_whilelist.insert(kChromeUIScheme);
 
   // Do not force creation of the HistoryService if saving history is disabled.
-  scoped_ptr<InMemoryURLIndex> in_memory_url_index(new InMemoryURLIndex(
+  std::unique_ptr<InMemoryURLIndex> in_memory_url_index(new InMemoryURLIndex(
       ios::BookmarkModelFactory::GetForBrowserState(browser_state),
       ios::HistoryServiceFactory::GetForBrowserState(
           browser_state, ServiceAccessType::IMPLICIT_ACCESS),
@@ -72,7 +73,7 @@
   return &BuildInMemoryURLIndex;
 }
 
-scoped_ptr<KeyedService> InMemoryURLIndexFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> InMemoryURLIndexFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   return BuildInMemoryURLIndex(context);
 }
diff --git a/ios/chrome/browser/autocomplete/in_memory_url_index_factory.h b/ios/chrome/browser/autocomplete/in_memory_url_index_factory.h
index 7e7cded..75d4054 100644
--- a/ios/chrome/browser/autocomplete/in_memory_url_index_factory.h
+++ b/ios/chrome/browser/autocomplete/in_memory_url_index_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_AUTOCOMPLETE_IN_MEMORY_URL_INDEX_FACTORY_H_
 #define IOS_CHROME_BROWSER_AUTOCOMPLETE_IN_MEMORY_URL_INDEX_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -40,7 +41,7 @@
   ~InMemoryURLIndexFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm b/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm
index 8d33e86e..2d1c763 100644
--- a/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm
+++ b/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/autocomplete/shortcuts_backend_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -26,7 +27,7 @@
     bool suppress_db) {
   scoped_refptr<ShortcutsBackend> shortcuts_backend(new ShortcutsBackend(
       ios::TemplateURLServiceFactory::GetForBrowserState(browser_state),
-      make_scoped_ptr(new ios::UIThreadSearchTermsData(browser_state)),
+      base::WrapUnique(new ios::UIThreadSearchTermsData(browser_state)),
       ios::HistoryServiceFactory::GetForBrowserState(
           browser_state, ServiceAccessType::EXPLICIT_ACCESS),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::DB),
diff --git a/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm b/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm
index 4e819f4..9185c63 100644
--- a/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm
+++ b/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm
@@ -4,12 +4,13 @@
 
 #import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h"
 
+#include <memory>
+
 #include "base/ios/block_types.h"
 #include "base/ios/ios_util.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_block.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #import "components/autofill/core/browser/keyboard_accessory_metrics_logger.h"
 #import "components/autofill/ios/browser/js_suggestion_manager.h"
 #import "ios/chrome/browser/autofill/form_input_accessory_view.h"
@@ -198,7 +199,7 @@
 
 @implementation FormInputAccessoryViewController {
   // Bridge to observe the web state from Objective-C.
-  scoped_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
+  std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
 
   // Last registered keyboard rectangle.
   CGRect _keyboardFrame;
@@ -224,7 +225,7 @@
   base::WeakNSProtocol<id<FormInputAccessoryViewProvider>> _currentProvider;
 
   // Logs UMA metrics for the keyboard accessory.
-  scoped_ptr<autofill::KeyboardAccessoryMetricsLogger>
+  std::unique_ptr<autofill::KeyboardAccessoryMetricsLogger>
       _keyboardAccessoryMetricsLogger;
 }
 
diff --git a/ios/chrome/browser/autofill/form_suggestion_controller.mm b/ios/chrome/browser/autofill/form_suggestion_controller.mm
index 9eba0a4d..71a5d78 100644
--- a/ios/chrome/browser/autofill/form_suggestion_controller.mm
+++ b/ios/chrome/browser/autofill/form_suggestion_controller.mm
@@ -4,12 +4,13 @@
 
 #import "ios/chrome/browser/autofill/form_suggestion_controller.h"
 
+#include <memory>
+
 #include "base/ios/ios_util.h"
 #include "base/ios/weak_nsobject.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_block.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_field_trial_ios.h"
@@ -59,7 +60,7 @@
       accessoryViewUpdateBlock_;
 
   // Autofill suggestion state.
-  scoped_ptr<AutofillSuggestionState> _suggestionState;
+  std::unique_ptr<AutofillSuggestionState> _suggestionState;
 
   // Providers for suggestions, sorted according to the order in which
   // they should be asked for suggestions, with highest priority in front.
@@ -85,7 +86,7 @@
 
 @implementation FormSuggestionController {
   // Bridge to observe the web state from Objective-C.
-  scoped_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
+  std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
 
   // Manager for FormSuggestion JavaScripts.
   base::scoped_nsobject<JsSuggestionManager> _jsSuggestionManager;
diff --git a/ios/chrome/browser/autofill/personal_data_manager_factory.cc b/ios/chrome/browser/autofill/personal_data_manager_factory.cc
index 18f6424..e217913 100644
--- a/ios/chrome/browser/autofill/personal_data_manager_factory.cc
+++ b/ios/chrome/browser/autofill/personal_data_manager_factory.cc
@@ -42,11 +42,12 @@
 
 PersonalDataManagerFactory::~PersonalDataManagerFactory() {}
 
-scoped_ptr<KeyedService> PersonalDataManagerFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+PersonalDataManagerFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<autofill::PersonalDataManager> service(
+  std::unique_ptr<autofill::PersonalDataManager> service(
       new autofill::PersonalDataManager(
           GetApplicationContext()->GetApplicationLocale()));
   service->Init(
diff --git a/ios/chrome/browser/autofill/personal_data_manager_factory.h b/ios/chrome/browser/autofill/personal_data_manager_factory.h
index 49b4b89..2ff07be 100644
--- a/ios/chrome/browser/autofill/personal_data_manager_factory.h
+++ b/ios/chrome/browser/autofill/personal_data_manager_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_AUTOFILL_PERSONAL_DATA_MANAGER_FACTORY_H_
 #define IOS_CHROME_BROWSER_AUTOFILL_PERSONAL_DATA_MANAGER_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -37,7 +38,7 @@
   ~PersonalDataManagerFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(PersonalDataManagerFactory);
diff --git a/ios/chrome/browser/bookmarks/bookmark_model_factory.cc b/ios/chrome/browser/bookmarks/bookmark_model_factory.cc
index 4305013..16ae64d 100644
--- a/ios/chrome/browser/bookmarks/bookmark_model_factory.cc
+++ b/ios/chrome/browser/bookmarks/bookmark_model_factory.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_utils.h"
@@ -57,13 +58,13 @@
   bookmarks::RegisterProfilePrefs(registry);
 }
 
-scoped_ptr<KeyedService> BookmarkModelFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> BookmarkModelFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<bookmarks::BookmarkModel> bookmark_model(
+  std::unique_ptr<bookmarks::BookmarkModel> bookmark_model(
       new bookmarks::BookmarkModel(
-          make_scoped_ptr(new BookmarkClientImpl(browser_state))));
+          base::WrapUnique(new BookmarkClientImpl(browser_state))));
   bookmark_model->Load(
       browser_state->GetPrefs(),
       browser_state->GetStatePath(),
diff --git a/ios/chrome/browser/bookmarks/bookmark_model_factory.h b/ios/chrome/browser/bookmarks/bookmark_model_factory.h
index fceae98..a1e21ec 100644
--- a/ios/chrome/browser/bookmarks/bookmark_model_factory.h
+++ b/ios/chrome/browser/bookmarks/bookmark_model_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_FACTORY_H_
 #define IOS_CHROME_BROWSER_BOOKMARKS_BOOKMARK_MODEL_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -41,7 +42,7 @@
   // BrowserStateKeyedServiceFactory implementation.
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.cc b/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.cc
index 0d4c2e5395..21ffdeb 100644
--- a/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.cc
+++ b/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "base/sequenced_task_runner.h"
 #include "components/bookmarks/browser/startup_task_runner_service.h"
@@ -35,12 +36,12 @@
 StartupTaskRunnerServiceFactory::~StartupTaskRunnerServiceFactory() {
 }
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 StartupTaskRunnerServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new bookmarks::StartupTaskRunnerService(
+  return base::WrapUnique(new bookmarks::StartupTaskRunnerService(
       browser_state->GetIOTaskRunner()));
 }
 
diff --git a/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h b/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h
index a6e21db0..c50a8724 100644
--- a/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h
+++ b/ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_BOOKMARKS_STARTUP_TASK_RUNNER_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_BOOKMARKS_STARTUP_TASK_RUNNER_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -37,7 +38,7 @@
   ~StartupTaskRunnerServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(StartupTaskRunnerServiceFactory);
diff --git a/ios/chrome/browser/browser_state/browser_state_info_cache.cc b/ios/chrome/browser/browser_state/browser_state_info_cache.cc
index 95130f06..074eb31b 100644
--- a/ios/chrome/browser/browser_state/browser_state_info_cache.cc
+++ b/ios/chrome/browser/browser_state/browser_state_info_cache.cc
@@ -7,10 +7,10 @@
 #include <stddef.h>
 
 #include <algorithm>
+#include <memory>
 
 #include "base/i18n/case_conversion.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/values.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/scoped_user_pref_update.h"
@@ -48,7 +48,7 @@
   DictionaryPrefUpdate update(prefs_, prefs::kBrowserStateInfoCache);
   base::DictionaryValue* cache = update.Get();
 
-  scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue);
+  std::unique_ptr<base::DictionaryValue> info(new base::DictionaryValue);
   info->SetString(kGAIAIdKey, gaia_id);
   info->SetString(kUserNameKey, user_name);
   cache->SetWithoutPathExpansion(key, info.release());
@@ -147,7 +147,7 @@
     return;
   }
 
-  scoped_ptr<base::DictionaryValue> info(
+  std::unique_ptr<base::DictionaryValue> info(
       GetInfoForBrowserStateAtIndex(index)->DeepCopy());
 
   info->SetString(kGAIAIdKey, gaia_id);
@@ -162,7 +162,7 @@
   if (value == BrowserStateIsAuthErrorAtIndex(index))
     return;
 
-  scoped_ptr<base::DictionaryValue> info(
+  std::unique_ptr<base::DictionaryValue> info(
       GetInfoForBrowserStateAtIndex(index)->DeepCopy());
   info->SetBoolean(kIsAuthErrorKey, value);
   // This takes ownership of |info|.
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc b/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc
index 97378fc..015658e 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl.cc
@@ -199,7 +199,7 @@
 }
 
 void ChromeBrowserStateImpl::SetOffTheRecordChromeBrowserState(
-    scoped_ptr<ios::ChromeBrowserState> otr_state) {
+    std::unique_ptr<ios::ChromeBrowserState> otr_state) {
   DCHECK(!otr_state_);
   otr_state_ = std::move(otr_state);
 }
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
index b79e34b..990fcb3 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_
 #define IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IMPL_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h"
 
@@ -59,7 +60,7 @@
 
   // Sets the OffTheRecordChromeBrowserState.
   void SetOffTheRecordChromeBrowserState(
-      scoped_ptr<ios::ChromeBrowserState> otr_state);
+      std::unique_ptr<ios::ChromeBrowserState> otr_state);
 
   base::FilePath state_path_;
 
@@ -67,7 +68,7 @@
   // ChromeBrowserState instance. NULL if |GetOffTheRecordChromeBrowserState()|
   // has never been called or has not been called since
   // |DestroyOffTheRecordChromeBrowserState()|.
-  scoped_ptr<ios::ChromeBrowserState> otr_state_;
+  std::unique_ptr<ios::ChromeBrowserState> otr_state_;
   base::FilePath otr_state_path_;
 
   // !!! BIG HONKING WARNING !!!
@@ -79,12 +80,13 @@
   // Keep |prefs_| on top for destruction order because |io_data_| and others
   // store pointers to |prefs_| and shall be destructed first.
   scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_;
-  scoped_ptr<syncable_prefs::PrefServiceSyncable> prefs_;
-  scoped_ptr<syncable_prefs::PrefServiceSyncable> otr_prefs_;
-  scoped_ptr<ChromeBrowserStateImplIOData::Handle> io_data_;
+  std::unique_ptr<syncable_prefs::PrefServiceSyncable> prefs_;
+  std::unique_ptr<syncable_prefs::PrefServiceSyncable> otr_prefs_;
+  std::unique_ptr<ChromeBrowserStateImplIOData::Handle> io_data_;
 
-  scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
-  scoped_ptr<ssl_config::SSLConfigServiceManager> ssl_config_service_manager_;
+  std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
+  std::unique_ptr<ssl_config::SSLConfigServiceManager>
+      ssl_config_service_manager_;
 
   // STOP!!!! DO NOT ADD ANY MORE ITEMS HERE!!!!
   //
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h
index 8da2ba4..7c5376b 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h
@@ -79,7 +79,8 @@
     // Collect references to context getters in reverse order, i.e. last item
     // will be main request getter. This list is passed to |io_data_|
     // for invalidation on IO thread.
-    scoped_ptr<IOSChromeURLRequestContextGetterVector> GetAllContextGetters();
+    std::unique_ptr<IOSChromeURLRequestContextGetterVector>
+    GetAllContextGetters();
 
     // The getters will be invalidated on the IO thread before
     // ChromeBrowserStateIOData instance is deleted.
@@ -113,7 +114,7 @@
   ~ChromeBrowserStateImplIOData() override;
 
   void InitializeInternal(
-      scoped_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
+      std::unique_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
       ProfileParams* profile_params,
       ProtocolHandlerMap* protocol_handlers) const override;
   AppRequestContext* InitializeAppRequestContext(
@@ -128,26 +129,26 @@
   void ClearNetworkingHistorySinceOnIOThread(base::Time time,
                                              const base::Closure& completion);
 
-  mutable scoped_ptr<IOSChromeNetworkDelegate> network_delegate_;
+  mutable std::unique_ptr<IOSChromeNetworkDelegate> network_delegate_;
 
   // Lazy initialization params.
-  mutable scoped_ptr<LazyParams> lazy_params_;
+  mutable std::unique_ptr<LazyParams> lazy_params_;
 
   mutable scoped_refptr<JsonPrefStore> network_json_store_;
 
-  mutable scoped_ptr<net::HttpNetworkSession> http_network_session_;
-  mutable scoped_ptr<net::HttpTransactionFactory> main_http_factory_;
+  mutable std::unique_ptr<net::HttpNetworkSession> http_network_session_;
+  mutable std::unique_ptr<net::HttpTransactionFactory> main_http_factory_;
 
   // Same as |ChromeBrowserState::http_server_properties_|, owned there to
   // maintain destruction ordering.
   mutable net::HttpServerPropertiesManager* http_server_properties_manager_;
 
-  mutable scoped_ptr<net::CookieStore> main_cookie_store_;
+  mutable std::unique_ptr<net::CookieStore> main_cookie_store_;
 
-  mutable scoped_ptr<net::URLRequestJobFactory> main_job_factory_;
+  mutable std::unique_ptr<net::URLRequestJobFactory> main_job_factory_;
 
-  mutable scoped_ptr<net::SdchManager> sdch_manager_;
-  mutable scoped_ptr<net::SdchOwner> sdch_policy_;
+  mutable std::unique_ptr<net::SdchManager> sdch_manager_;
+  mutable std::unique_ptr<net::SdchOwner> sdch_policy_;
 
   // Parameters needed for isolated apps.
   base::FilePath profile_path_;
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
index ede5e23..26b0cf9 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
@@ -4,13 +4,14 @@
 
 #include "ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.h"
 
+#include <memory>
 #include <set>
 #include <utility>
 
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/sequenced_task_runner.h"
 #include "base/threading/sequenced_worker_pool.h"
 #include "base/threading/worker_pool.h"
@@ -103,7 +104,7 @@
     return result_value->GetAsDictionary(result);
   }
 
-  void SetValue(scoped_ptr<base::DictionaryValue> value) override {
+  void SetValue(std::unique_ptr<base::DictionaryValue> value) override {
     storage_->SetValue(storage_key_, std::move(value),
                        WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
   }
@@ -260,19 +261,16 @@
   PrefService* pref_service = browser_state_->GetPrefs();
   io_data_->http_server_properties_manager_ =
       HttpServerPropertiesManagerFactory::CreateManager(pref_service);
-  io_data_->set_http_server_properties(scoped_ptr<net::HttpServerProperties>(
-      io_data_->http_server_properties_manager_));
-  io_data_->safe_browsing_enabled()->Init(prefs::kSafeBrowsingEnabled,
-                                          pref_service);
-  io_data_->safe_browsing_enabled()->MoveToThread(
-      web::WebThread::GetTaskRunnerForThread(web::WebThread::IO));
+  io_data_->set_http_server_properties(
+      base::WrapUnique(io_data_->http_server_properties_manager_));
   io_data_->InitializeOnUIThread(browser_state_);
 }
 
-scoped_ptr<ChromeBrowserStateIOData::IOSChromeURLRequestContextGetterVector>
+std::unique_ptr<
+    ChromeBrowserStateIOData::IOSChromeURLRequestContextGetterVector>
 ChromeBrowserStateImplIOData::Handle::GetAllContextGetters() {
   IOSChromeURLRequestContextGetterMap::iterator iter;
-  scoped_ptr<IOSChromeURLRequestContextGetterVector> context_getters(
+  std::unique_ptr<IOSChromeURLRequestContextGetterVector> context_getters(
       new IOSChromeURLRequestContextGetterVector());
 
   iter = app_request_context_getter_map_.begin();
@@ -298,7 +296,7 @@
 ChromeBrowserStateImplIOData::~ChromeBrowserStateImplIOData() {}
 
 void ChromeBrowserStateImplIOData::InitializeInternal(
-    scoped_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
+    std::unique_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
     ProfileParams* profile_params,
     ProtocolHandlerMap* protocol_handlers) const {
   // Set up a persistent store for use by the network stack on the IO thread.
@@ -308,7 +306,7 @@
       network_json_store_filepath,
       JsonPrefStore::GetTaskRunnerForFile(network_json_store_filepath,
                                           web::WebThread::GetBlockingPool()),
-      scoped_ptr<PrefFilter>());
+      std::unique_ptr<PrefFilter>());
   network_json_store_->ReadPrefsAsync(nullptr);
 
   net::URLRequestContext* main_context = main_request_context();
@@ -377,7 +375,7 @@
   main_context->set_channel_id_service(channel_id_service);
   main_cookie_store_->SetChannelIDServiceID(channel_id_service->GetUniqueID());
 
-  scoped_ptr<net::HttpCache::BackendFactory> main_backend(
+  std::unique_ptr<net::HttpCache::BackendFactory> main_backend(
       new net::HttpCache::DefaultBackend(
           net::DISK_CACHE, net::CACHE_BACKEND_BLOCKFILE,
           lazy_params_->cache_path, lazy_params_->cache_max_size,
@@ -387,7 +385,7 @@
                                              std::move(main_backend));
   main_context->set_http_transaction_factory(main_http_factory_.get());
 
-  scoped_ptr<net::URLRequestJobFactoryImpl> main_job_factory(
+  std::unique_ptr<net::URLRequestJobFactoryImpl> main_job_factory(
       new net::URLRequestJobFactoryImpl());
   InstallProtocolHandlers(main_job_factory.get(), protocol_handlers);
 
@@ -406,7 +404,7 @@
   sdch_policy_.reset(new net::SdchOwner(sdch_manager_.get(), main_context));
   main_context->set_sdch_manager(sdch_manager_.get());
   sdch_policy_->EnablePersistentStorage(
-      make_scoped_ptr(new SdchOwnerPrefStorage(network_json_store_.get())));
+      base::WrapUnique(new SdchOwnerPrefStorage(network_json_store_.get())));
 
   lazy_params_.reset();
 }
@@ -419,30 +417,31 @@
   context->CopyFrom(main_context);
 
   // Use a separate HTTP disk cache for isolated apps.
-  scoped_ptr<net::HttpCache::BackendFactory> app_backend =
+  std::unique_ptr<net::HttpCache::BackendFactory> app_backend =
       net::HttpCache::DefaultBackend::InMemory(0);
-  scoped_ptr<net::HttpCache> app_http_cache =
+  std::unique_ptr<net::HttpCache> app_http_cache =
       CreateHttpFactory(http_network_session_.get(), std::move(app_backend));
 
   cookie_util::CookieStoreConfig ios_cookie_config(
       base::FilePath(),
       cookie_util::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES,
       cookie_util::CookieStoreConfig::COOKIE_STORE_IOS, nullptr);
-  scoped_ptr<net::CookieStore> cookie_store =
+  std::unique_ptr<net::CookieStore> cookie_store =
       cookie_util::CreateCookieStore(ios_cookie_config);
 
   // Transfer ownership of the cookies and cache to AppRequestContext.
   context->SetCookieStore(std::move(cookie_store));
   context->SetHttpTransactionFactory(std::move(app_http_cache));
 
-  scoped_ptr<net::URLRequestJobFactoryImpl> job_factory(
+  std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory(
       new net::URLRequestJobFactoryImpl());
   // TODO(crbug.com/592012): Delete request_interceptor and its handling if
   // it's not needed in the future.
   URLRequestInterceptorScopedVector request_interceptors;
-  scoped_ptr<net::URLRequestJobFactory> top_job_factory(SetUpJobFactoryDefaults(
-      std::move(job_factory), std::move(request_interceptors),
-      main_context->network_delegate()));
+  std::unique_ptr<net::URLRequestJobFactory> top_job_factory(
+      SetUpJobFactoryDefaults(std::move(job_factory),
+                              std::move(request_interceptors),
+                              main_context->network_delegate()));
   context->SetJobFactory(std::move(top_job_factory));
 
   return context;
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc
index d5819c1..a81fc522 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc
@@ -17,6 +17,7 @@
 #include "base/debug/alias.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/path_service.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
@@ -71,7 +72,8 @@
 // For safe shutdown, must be called before the ChromeBrowserStateIOData is
 // destroyed.
 void NotifyContextGettersOfShutdownOnIO(
-    scoped_ptr<ChromeBrowserStateIOData::IOSChromeURLRequestContextGetterVector>
+    std::unique_ptr<
+        ChromeBrowserStateIOData::IOSChromeURLRequestContextGetterVector>
         getters) {
   DCHECK_CURRENTLY_ON(web::WebThread::IO);
   ChromeBrowserStateIOData::IOSChromeURLRequestContextGetterVector::iterator
@@ -86,7 +88,7 @@
     ios::ChromeBrowserState* browser_state) {
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
   PrefService* pref_service = browser_state->GetPrefs();
-  scoped_ptr<ProfileParams> params(new ProfileParams);
+  std::unique_ptr<ProfileParams> params(new ProfileParams);
   params->path = browser_state->GetOriginalChromeBrowserState()->GetStatePath();
 
   params->io_thread = GetApplicationContext()->GetIOSChromeIOThread();
@@ -133,19 +135,19 @@
 ChromeBrowserStateIOData::AppRequestContext::AppRequestContext() {}
 
 void ChromeBrowserStateIOData::AppRequestContext::SetCookieStore(
-    scoped_ptr<net::CookieStore> cookie_store) {
+    std::unique_ptr<net::CookieStore> cookie_store) {
   cookie_store_ = std::move(cookie_store);
   set_cookie_store(cookie_store_.get());
 }
 
 void ChromeBrowserStateIOData::AppRequestContext::SetHttpTransactionFactory(
-    scoped_ptr<net::HttpTransactionFactory> http_factory) {
+    std::unique_ptr<net::HttpTransactionFactory> http_factory) {
   http_factory_ = std::move(http_factory);
   set_http_transaction_factory(http_factory_.get());
 }
 
 void ChromeBrowserStateIOData::AppRequestContext::SetJobFactory(
-    scoped_ptr<net::URLRequestJobFactory> job_factory) {
+    std::unique_ptr<net::URLRequestJobFactory> job_factory) {
   job_factory_ = std::move(job_factory);
   set_job_factory(job_factory_.get());
 }
@@ -241,7 +243,7 @@
   for (ProtocolHandlerMap::iterator it = protocol_handlers->begin();
        it != protocol_handlers->end(); ++it) {
     bool set_protocol = job_factory->SetProtocolHandler(
-        it->first, make_scoped_ptr(it->second.release()));
+        it->first, base::WrapUnique(it->second.release()));
     DCHECK(set_protocol);
   }
   protocol_handlers->clear();
@@ -269,7 +271,7 @@
 }
 
 void ChromeBrowserStateIOData::SetCookieStoreForPartitionPath(
-    scoped_ptr<net::CookieStore> cookie_store,
+    std::unique_ptr<net::CookieStore> cookie_store,
     const base::FilePath& partition_path) {
   DCHECK(ContainsKey(app_request_context_map_, partition_path));
   app_request_context_map_[partition_path]->SetCookieStore(
@@ -314,7 +316,7 @@
 }
 
 void ChromeBrowserStateIOData::set_http_server_properties(
-    scoped_ptr<net::HttpServerProperties> http_server_properties) const {
+    std::unique_ptr<net::HttpServerProperties> http_server_properties) const {
   http_server_properties_ = std::move(http_server_properties);
 }
 
@@ -338,7 +340,7 @@
   // Create the common request contexts.
   main_request_context_.reset(new net::URLRequestContext());
 
-  scoped_ptr<IOSChromeNetworkDelegate> network_delegate(
+  std::unique_ptr<IOSChromeNetworkDelegate> network_delegate(
       new IOSChromeNetworkDelegate());
 
   network_delegate->set_cookie_settings(profile_params_->cookie_settings.get());
@@ -384,50 +386,49 @@
   context->set_ssl_config_service(profile_params_->ssl_config_service.get());
 }
 
-scoped_ptr<net::URLRequestJobFactory>
+std::unique_ptr<net::URLRequestJobFactory>
 ChromeBrowserStateIOData::SetUpJobFactoryDefaults(
-    scoped_ptr<net::URLRequestJobFactoryImpl> job_factory,
+    std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory,
     URLRequestInterceptorScopedVector request_interceptors,
     net::NetworkDelegate* network_delegate) const {
   // NOTE(willchan): Keep these protocol handlers in sync with
   // ChromeBrowserStateIOData::IsHandledProtocol().
   bool set_protocol = job_factory->SetProtocolHandler(
       url::kFileScheme,
-      make_scoped_ptr(new net::FileProtocolHandler(
+      base::WrapUnique(new net::FileProtocolHandler(
           web::WebThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
               base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))));
   DCHECK(set_protocol);
 
   set_protocol = job_factory->SetProtocolHandler(
-      url::kDataScheme, make_scoped_ptr(new net::DataProtocolHandler()));
+      url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler()));
   DCHECK(set_protocol);
 
   job_factory->SetProtocolHandler(
       url::kAboutScheme,
-      make_scoped_ptr(new about_handler::AboutProtocolHandler()));
+      base::WrapUnique(new about_handler::AboutProtocolHandler()));
 
   // Set up interceptors in the reverse order.
-  scoped_ptr<net::URLRequestJobFactory> top_job_factory =
+  std::unique_ptr<net::URLRequestJobFactory> top_job_factory =
       std::move(job_factory);
   for (URLRequestInterceptorScopedVector::reverse_iterator i =
            request_interceptors.rbegin();
        i != request_interceptors.rend(); ++i) {
     top_job_factory.reset(new net::URLRequestInterceptingJobFactory(
-        std::move(top_job_factory), make_scoped_ptr(*i)));
+        std::move(top_job_factory), base::WrapUnique(*i)));
   }
   request_interceptors.weak_clear();
   return top_job_factory;
 }
 
 void ChromeBrowserStateIOData::ShutdownOnUIThread(
-    scoped_ptr<IOSChromeURLRequestContextGetterVector> context_getters) {
+    std::unique_ptr<IOSChromeURLRequestContextGetterVector> context_getters) {
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
 
   google_services_user_account_id_.Destroy();
   enable_referrers_.Destroy();
   enable_do_not_track_.Destroy();
   enable_metrics_.Destroy();
-  safe_browsing_enabled_.Destroy();
   sync_disabled_.Destroy();
   signin_allowed_.Destroy();
   if (chrome_http_user_agent_settings_)
@@ -451,7 +452,7 @@
   channel_id_service_.reset(channel_id_service);
 }
 
-scoped_ptr<net::HttpNetworkSession>
+std::unique_ptr<net::HttpNetworkSession>
 ChromeBrowserStateIOData::CreateHttpNetworkSession(
     const ProfileParams& profile_params) const {
   net::HttpNetworkSession::Params params;
@@ -462,25 +463,26 @@
   io_thread->InitializeNetworkSessionParams(&params);
   net::URLRequestContextBuilder::SetHttpNetworkSessionComponents(context,
                                                                  &params);
-  if (!IsOffTheRecord()) {
+  if (!IsOffTheRecord() && io_thread->globals()->network_quality_estimator) {
     params.socket_performance_watcher_factory =
-        io_thread->globals()->network_quality_estimator.get();
+        io_thread->globals()
+            ->network_quality_estimator->GetSocketPerformanceWatcherFactory();
   }
 
-  return scoped_ptr<net::HttpNetworkSession>(
+  return std::unique_ptr<net::HttpNetworkSession>(
       new net::HttpNetworkSession(params));
 }
 
-scoped_ptr<net::HttpCache> ChromeBrowserStateIOData::CreateMainHttpFactory(
+std::unique_ptr<net::HttpCache> ChromeBrowserStateIOData::CreateMainHttpFactory(
     net::HttpNetworkSession* session,
-    scoped_ptr<net::HttpCache::BackendFactory> main_backend) const {
-  return scoped_ptr<net::HttpCache>(
+    std::unique_ptr<net::HttpCache::BackendFactory> main_backend) const {
+  return std::unique_ptr<net::HttpCache>(
       new net::HttpCache(session, std::move(main_backend), true));
 }
 
-scoped_ptr<net::HttpCache> ChromeBrowserStateIOData::CreateHttpFactory(
+std::unique_ptr<net::HttpCache> ChromeBrowserStateIOData::CreateHttpFactory(
     net::HttpNetworkSession* shared_session,
-    scoped_ptr<net::HttpCache::BackendFactory> backend) const {
-  return scoped_ptr<net::HttpCache>(
+    std::unique_ptr<net::HttpCache::BackendFactory> backend) const {
+  return std::unique_ptr<net::HttpCache>(
       new net::HttpCache(shared_session, std::move(backend), true));
 }
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h
index 7e806d07..dfa3dd1e 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h
@@ -6,6 +6,7 @@
 #define IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_IO_DATA_H_
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -13,7 +14,6 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/prefs/pref_member.h"
@@ -93,8 +93,9 @@
 
   // Sets the cookie store associated with a partition path.
   // The path must exist. If there is already a cookie store, it is deleted.
-  void SetCookieStoreForPartitionPath(scoped_ptr<net::CookieStore> cookie_store,
-                                      const base::FilePath& partition_path);
+  void SetCookieStoreForPartitionPath(
+      std::unique_ptr<net::CookieStore> cookie_store,
+      const base::FilePath& partition_path);
 
   // These are useful when the Chrome layer is called from the content layer
   // with a content::ResourceContext, and they want access to Chrome data for
@@ -106,10 +107,6 @@
     return &google_services_user_account_id_;
   }
 
-  BooleanPrefMember* safe_browsing_enabled() const {
-    return &safe_browsing_enabled_;
-  }
-
   net::TransportSecurityState* transport_security_state() const {
     return transport_security_state_.get();
   }
@@ -136,17 +133,17 @@
    public:
     AppRequestContext();
 
-    void SetCookieStore(scoped_ptr<net::CookieStore> cookie_store);
+    void SetCookieStore(std::unique_ptr<net::CookieStore> cookie_store);
     void SetHttpTransactionFactory(
-        scoped_ptr<net::HttpTransactionFactory> http_factory);
-    void SetJobFactory(scoped_ptr<net::URLRequestJobFactory> job_factory);
+        std::unique_ptr<net::HttpTransactionFactory> http_factory);
+    void SetJobFactory(std::unique_ptr<net::URLRequestJobFactory> job_factory);
 
     ~AppRequestContext() override;
 
    private:
-    scoped_ptr<net::CookieStore> cookie_store_;
-    scoped_ptr<net::HttpTransactionFactory> http_factory_;
-    scoped_ptr<net::URLRequestJobFactory> job_factory_;
+    std::unique_ptr<net::CookieStore> cookie_store_;
+    std::unique_ptr<net::HttpTransactionFactory> http_factory_;
+    std::unique_ptr<net::URLRequestJobFactory> job_factory_;
   };
 
   // Created on the UI thread, read on the IO thread during
@@ -165,7 +162,7 @@
     // We need to initialize the ProxyConfigService from the UI thread
     // because on linux it relies on initializing things through gconf,
     // and needs to be on the main thread.
-    scoped_ptr<net::ProxyConfigService> proxy_config_service;
+    std::unique_ptr<net::ProxyConfigService> proxy_config_service;
 
     // The browser state this struct was populated from. It's passed as a void*
     // to ensure it's not accidently used on the IO thread.
@@ -178,8 +175,8 @@
   void InitializeOnUIThread(ios::ChromeBrowserState* browser_state);
   void ApplyProfileParamsToContext(net::URLRequestContext* context) const;
 
-  scoped_ptr<net::URLRequestJobFactory> SetUpJobFactoryDefaults(
-      scoped_ptr<net::URLRequestJobFactoryImpl> job_factory,
+  std::unique_ptr<net::URLRequestJobFactory> SetUpJobFactoryDefaults(
+      std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory,
       URLRequestInterceptorScopedVector request_interceptors,
       net::NetworkDelegate* network_delegate) const;
 
@@ -191,7 +188,7 @@
   // TODO(mmenke):  Passing all those URLRequestContextGetters around like this
   //     is really silly.  Can we do something cleaner?
   void ShutdownOnUIThread(
-      scoped_ptr<IOSChromeURLRequestContextGetterVector> context_getters);
+      std::unique_ptr<IOSChromeURLRequestContextGetterVector> context_getters);
 
   // A ChannelIDService object is created by a derived class of
   // ChromeBrowserStateIOData, and the derived class calls this method to set
@@ -203,7 +200,7 @@
   base::WeakPtr<net::HttpServerProperties> http_server_properties() const;
 
   void set_http_server_properties(
-      scoped_ptr<net::HttpServerProperties> http_server_properties) const;
+      std::unique_ptr<net::HttpServerProperties> http_server_properties) const;
 
   net::URLRequestContext* main_request_context() const {
     return main_request_context_.get();
@@ -211,18 +208,18 @@
 
   bool initialized() const { return initialized_; }
 
-  scoped_ptr<net::HttpNetworkSession> CreateHttpNetworkSession(
+  std::unique_ptr<net::HttpNetworkSession> CreateHttpNetworkSession(
       const ProfileParams& profile_params) const;
 
   // Creates main network transaction factory.
-  scoped_ptr<net::HttpCache> CreateMainHttpFactory(
+  std::unique_ptr<net::HttpCache> CreateMainHttpFactory(
       net::HttpNetworkSession* session,
-      scoped_ptr<net::HttpCache::BackendFactory> main_backend) const;
+      std::unique_ptr<net::HttpCache::BackendFactory> main_backend) const;
 
   // Creates network transaction factory.
-  scoped_ptr<net::HttpCache> CreateHttpFactory(
+  std::unique_ptr<net::HttpCache> CreateHttpFactory(
       net::HttpNetworkSession* shared_session,
-      scoped_ptr<net::HttpCache::BackendFactory> backend) const;
+      std::unique_ptr<net::HttpCache::BackendFactory> backend) const;
 
  private:
   typedef std::map<base::FilePath, AppRequestContext*> URLRequestContextMap;
@@ -234,7 +231,7 @@
   // Does the actual initialization of the ChromeBrowserStateIOData subtype.
   // Subtypes should use the static helper functions above to implement this.
   virtual void InitializeInternal(
-      scoped_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
+      std::unique_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
       ProfileParams* profile_params,
       ProtocolHandlerMap* protocol_handlers) const = 0;
 
@@ -266,33 +263,34 @@
 
   // Data from the UI thread from the ChromeBrowserState, used to initialize
   // ChromeBrowserStateIOData. Deleted after lazy initialization.
-  mutable scoped_ptr<ProfileParams> profile_params_;
+  mutable std::unique_ptr<ProfileParams> profile_params_;
 
   mutable StringPrefMember google_services_user_account_id_;
 
   // Member variables which are pointed to by the various context objects.
   mutable BooleanPrefMember enable_referrers_;
   mutable BooleanPrefMember enable_do_not_track_;
-  mutable BooleanPrefMember safe_browsing_enabled_;
   mutable BooleanPrefMember sync_disabled_;
   mutable BooleanPrefMember signin_allowed_;
 
   BooleanPrefMember enable_metrics_;
 
   // Pointed to by URLRequestContext.
-  mutable scoped_ptr<net::ChannelIDService> channel_id_service_;
+  mutable std::unique_ptr<net::ChannelIDService> channel_id_service_;
 
-  mutable scoped_ptr<net::ProxyService> proxy_service_;
-  mutable scoped_ptr<net::TransportSecurityState> transport_security_state_;
-  mutable scoped_ptr<net::CTVerifier> cert_transparency_verifier_;
-  mutable scoped_ptr<net::HttpServerProperties> http_server_properties_;
-  mutable scoped_ptr<net::TransportSecurityPersister>
+  mutable std::unique_ptr<net::ProxyService> proxy_service_;
+  mutable std::unique_ptr<net::TransportSecurityState>
+      transport_security_state_;
+  mutable std::unique_ptr<net::CTVerifier> cert_transparency_verifier_;
+  mutable std::unique_ptr<net::HttpServerProperties> http_server_properties_;
+  mutable std::unique_ptr<net::TransportSecurityPersister>
       transport_security_persister_;
-  mutable scoped_ptr<net::CertificateReportSender> certificate_report_sender_;
+  mutable std::unique_ptr<net::CertificateReportSender>
+      certificate_report_sender_;
 
   // These are only valid in between LazyInitialize() and their accessor being
   // called.
-  mutable scoped_ptr<net::URLRequestContext> main_request_context_;
+  mutable std::unique_ptr<net::URLRequestContext> main_request_context_;
   // One URLRequestContext per isolated app for main and media requests.
   mutable URLRequestContextMap app_request_context_map_;
 
@@ -300,7 +298,7 @@
 
   mutable scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
 
-  mutable scoped_ptr<IOSChromeHttpUserAgentSettings>
+  mutable std::unique_ptr<IOSChromeHttpUserAgentSettings>
       chrome_http_user_agent_settings_;
 
   // TODO(jhawkins): Remove once crbug.com/102004 is fixed.
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
index 443935e..dbba9fb6 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
@@ -141,7 +141,7 @@
     return iter->second.get();
   }
 
-  scoped_ptr<ChromeBrowserStateImpl> browser_state_impl(
+  std::unique_ptr<ChromeBrowserStateImpl> browser_state_impl(
       new ChromeBrowserStateImpl(path));
   DCHECK(!browser_state_impl->IsOffTheRecord());
 
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.h b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.h
index 1b53e68..34bed61 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.h
@@ -6,10 +6,10 @@
 #define IOS_CHROME_BROWSER_BROWSER_STATE_CHROME_BROWSER_STATE_MANAGER_IMPL_H_
 
 #include <map>
+#include <memory>
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/chrome/browser/browser_state/browser_state_info_cache.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
 
@@ -29,7 +29,7 @@
 
  private:
   using ChromeBrowserStateImplPathMap =
-      std::map<base::FilePath, scoped_ptr<ChromeBrowserStateImpl>>;
+      std::map<base::FilePath, std::unique_ptr<ChromeBrowserStateImpl>>;
 
   // Get the path of the last used browser state, or if that's undefined, the
   // default browser state.
@@ -46,7 +46,7 @@
 
   // Holds the ChromeBrowserStateImpl instances that this instance has created.
   ChromeBrowserStateImplPathMap browser_states_;
-  scoped_ptr<BrowserStateInfoCache> browser_state_info_cache_;
+  std::unique_ptr<BrowserStateInfoCache> browser_state_info_cache_;
 
   DISALLOW_COPY_AND_ASSIGN(ChromeBrowserStateManagerImpl);
 };
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
index 6f0e8ce..75aecfe68 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_impl.h
@@ -57,8 +57,8 @@
   // Weak pointer owned by |original_chrome_browser_state_|.
   syncable_prefs::PrefServiceSyncable* prefs_;
 
-  scoped_ptr<OffTheRecordChromeBrowserStateIOData::Handle> io_data_;
-  scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
+  std::unique_ptr<OffTheRecordChromeBrowserStateIOData::Handle> io_data_;
+  std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
 
   DISALLOW_COPY_AND_ASSIGN(OffTheRecordChromeBrowserStateImpl);
 };
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.h b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.h
index 4848d55..a9c7f5b 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.h
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.h
@@ -5,12 +5,13 @@
 #ifndef IOS_CHROME_BROWSER_BROWSER_STATE_OFF_THE_RECORD_CHROME_BROWSER_STATE_IO_DATA_H_
 #define IOS_CHROME_BROWSER_BROWSER_STATE_OFF_THE_RECORD_CHROME_BROWSER_STATE_IO_DATA_H_
 
+#include <memory>
+
 #include "base/callback.h"
 #include "base/containers/hash_tables.h"
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state_io_data.h"
 #include "ios/chrome/browser/net/net_types.h"
 
@@ -70,7 +71,8 @@
     // Collect references to context getters in reverse order, i.e. last item
     // will be main request getter. This list is passed to |io_data_|
     // for invalidation on IO thread.
-    scoped_ptr<IOSChromeURLRequestContextGetterVector> GetAllContextGetters();
+    std::unique_ptr<IOSChromeURLRequestContextGetterVector>
+    GetAllContextGetters();
 
     // The getters will be invalidated on the IO thread before
     // ProfileIOData instance is deleted.
@@ -92,7 +94,7 @@
   ~OffTheRecordChromeBrowserStateIOData() override;
 
   void InitializeInternal(
-      scoped_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
+      std::unique_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
       ProfileParams* profile_params,
       ProtocolHandlerMap* protocol_handlers) const override;
   AppRequestContext* InitializeAppRequestContext(
@@ -100,21 +102,21 @@
   AppRequestContext* AcquireIsolatedAppRequestContext(
       net::URLRequestContext* main_context) const override;
 
-  mutable scoped_ptr<IOSChromeNetworkDelegate> network_delegate_;
+  mutable std::unique_ptr<IOSChromeNetworkDelegate> network_delegate_;
 
-  mutable scoped_ptr<net::HttpNetworkSession> http_network_session_;
-  mutable scoped_ptr<net::HttpTransactionFactory> main_http_factory_;
+  mutable std::unique_ptr<net::HttpNetworkSession> http_network_session_;
+  mutable std::unique_ptr<net::HttpTransactionFactory> main_http_factory_;
 
-  mutable scoped_ptr<net::CookieStore> main_cookie_store_;
+  mutable std::unique_ptr<net::CookieStore> main_cookie_store_;
 
-  mutable scoped_ptr<net::URLRequestJobFactory> main_job_factory_;
+  mutable std::unique_ptr<net::URLRequestJobFactory> main_job_factory_;
 
   // Server bound certificates and cookies are persisted to the disk on iOS.
   base::FilePath cookie_path_;
   base::FilePath channel_id_path_;
 
-  mutable scoped_ptr<net::SdchManager> sdch_manager_;
-  mutable scoped_ptr<net::SdchOwner> sdch_policy_;
+  mutable std::unique_ptr<net::SdchManager> sdch_manager_;
+  mutable std::unique_ptr<net::SdchOwner> sdch_policy_;
 
   DISALLOW_COPY_AND_ASSIGN(OffTheRecordChromeBrowserStateIOData);
 };
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
index 4a5da6f..3a87bce 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
@@ -118,10 +118,6 @@
   // Set initialized_ to true at the beginning in case any of the objects
   // below try to get the ResourceContext pointer.
   initialized_ = true;
-  io_data_->safe_browsing_enabled()->Init(prefs::kSafeBrowsingEnabled,
-                                          browser_state_->GetPrefs());
-  io_data_->safe_browsing_enabled()->MoveToThread(
-      web::WebThread::GetTaskRunnerForThread(web::WebThread::IO));
   io_data_->InitializeOnUIThread(browser_state_);
 
   // Once initialized, listen to memory warnings.
@@ -132,9 +128,10 @@
       nullptr, CFNotificationSuspensionBehaviorCoalesce);
 }
 
-scoped_ptr<ChromeBrowserStateIOData::IOSChromeURLRequestContextGetterVector>
+std::unique_ptr<
+    ChromeBrowserStateIOData::IOSChromeURLRequestContextGetterVector>
 OffTheRecordChromeBrowserStateIOData::Handle::GetAllContextGetters() {
-  scoped_ptr<IOSChromeURLRequestContextGetterVector> context_getters(
+  std::unique_ptr<IOSChromeURLRequestContextGetterVector> context_getters(
       new IOSChromeURLRequestContextGetterVector());
   if (main_request_context_getter_.get())
     context_getters->push_back(main_request_context_getter_);
@@ -149,7 +146,7 @@
 OffTheRecordChromeBrowserStateIOData::~OffTheRecordChromeBrowserStateIOData() {}
 
 void OffTheRecordChromeBrowserStateIOData::InitializeInternal(
-    scoped_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
+    std::unique_ptr<IOSChromeNetworkDelegate> chrome_network_delegate,
     ProfileParams* profile_params,
     ProtocolHandlerMap* protocol_handlers) const {
   net::URLRequestContext* main_context = main_request_context();
@@ -178,7 +175,7 @@
       io_thread_globals->url_request_backoff_manager.get());
 
   // For incognito, we use the default non-persistent HttpServerPropertiesImpl.
-  set_http_server_properties(scoped_ptr<net::HttpServerProperties>(
+  set_http_server_properties(std::unique_ptr<net::HttpServerProperties>(
       new net::HttpServerPropertiesImpl()));
   main_context->set_http_server_properties(http_server_properties());
 
@@ -211,7 +208,7 @@
 
   main_context->set_http_transaction_factory(main_http_factory_.get());
 
-  scoped_ptr<net::URLRequestJobFactoryImpl> main_job_factory(
+  std::unique_ptr<net::URLRequestJobFactoryImpl> main_job_factory(
       new net::URLRequestJobFactoryImpl());
 
   InstallProtocolHandlers(main_job_factory.get(), protocol_handlers);
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state.h b/ios/chrome/browser/browser_state/test_chrome_browser_state.h
index 93a4ad20..fb40e754 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state.h
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state.h
@@ -5,10 +5,11 @@
 #ifndef IOS_CHROME_BROWSER_BROWSER_STATE_TEST_CHROME_BROWSER_STATE_H_
 #define IOS_CHROME_BROWSER_BROWSER_STATE_TEST_CHROME_BROWSER_STATE_H_
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 #include "components/keyed_service/ios/refcounted_browser_state_keyed_service_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
@@ -109,10 +110,11 @@
     void SetPath(const base::FilePath& path);
 
     // Sets the PrefService to be used by the ChromeBrowserState.
-    void SetPrefService(scoped_ptr<syncable_prefs::PrefServiceSyncable> prefs);
+    void SetPrefService(
+        std::unique_ptr<syncable_prefs::PrefServiceSyncable> prefs);
 
     // Creates the TestChromeBrowserState using previously-set settings.
-    scoped_ptr<TestChromeBrowserState> Build();
+    std::unique_ptr<TestChromeBrowserState> Build();
 
    private:
     // If true, Build() has been called.
@@ -120,7 +122,7 @@
 
     // Various staging variables where values are held until Build() is invoked.
     base::FilePath state_path_;
-    scoped_ptr<syncable_prefs::PrefServiceSyncable> pref_service_;
+    std::unique_ptr<syncable_prefs::PrefServiceSyncable> pref_service_;
 
     TestingFactories testing_factories_;
     RefcountedTestingFactories refcounted_testing_factories_;
@@ -132,7 +134,7 @@
   // Used to create the principal TestChromeBrowserState.
   TestChromeBrowserState(
       const base::FilePath& path,
-      scoped_ptr<syncable_prefs::PrefServiceSyncable> prefs,
+      std::unique_ptr<syncable_prefs::PrefServiceSyncable> prefs,
       const TestingFactories& testing_factories,
       const RefcountedTestingFactories& refcounted_testing_factories);
 
@@ -158,12 +160,12 @@
 
   // If non-null, |testing_prefs_| points to |prefs_|. It is there to avoid
   // casting as |prefs_| may not be a TestingPrefServiceSyncable.
-  scoped_ptr<syncable_prefs::PrefServiceSyncable> prefs_;
+  std::unique_ptr<syncable_prefs::PrefServiceSyncable> prefs_;
   syncable_prefs::TestingPrefServiceSyncable* testing_prefs_;
 
   // The incognito ChromeBrowserState instance that is associated with this
   // non-incognito ChromeBrowserState instance.
-  scoped_ptr<TestChromeBrowserState> otr_browser_state_;
+  std::unique_ptr<TestChromeBrowserState> otr_browser_state_;
   TestChromeBrowserState* original_browser_state_;
 
   DISALLOW_COPY_AND_ASSIGN(TestChromeBrowserState);
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state.mm b/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
index 50d2f5f..c99f899f 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state.mm
@@ -10,6 +10,7 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
@@ -46,21 +47,21 @@
 #include "net/url_request/url_request_test_util.h"
 
 namespace {
-scoped_ptr<KeyedService> BuildHistoryService(web::BrowserState* context) {
+std::unique_ptr<KeyedService> BuildHistoryService(web::BrowserState* context) {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new history::HistoryService(
-      make_scoped_ptr(new HistoryClientImpl(
+  return base::WrapUnique(new history::HistoryService(
+      base::WrapUnique(new HistoryClientImpl(
           ios::BookmarkModelFactory::GetForBrowserState(browser_state))),
       nullptr));
 }
 
-scoped_ptr<KeyedService> BuildBookmarkModel(web::BrowserState* context) {
+std::unique_ptr<KeyedService> BuildBookmarkModel(web::BrowserState* context) {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<bookmarks::BookmarkModel> bookmark_model(
+  std::unique_ptr<bookmarks::BookmarkModel> bookmark_model(
       new bookmarks::BookmarkModel(
-          make_scoped_ptr(new BookmarkClientImpl(browser_state))));
+          base::WrapUnique(new BookmarkClientImpl(browser_state))));
   bookmark_model->Load(
       browser_state->GetPrefs(),
       browser_state->GetStatePath(), browser_state->GetIOTaskRunner(),
@@ -73,9 +74,9 @@
   NOTREACHED();
 }
 
-scoped_ptr<KeyedService> BuildWebDataService(web::BrowserState* context) {
+std::unique_ptr<KeyedService> BuildWebDataService(web::BrowserState* context) {
   const base::FilePath& browser_state_path = context->GetStatePath();
-  return make_scoped_ptr(new WebDataServiceWrapper(
+  return base::WrapUnique(new WebDataServiceWrapper(
       browser_state_path, GetApplicationContext()->GetApplicationLocale(),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::UI),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::DB),
@@ -125,7 +126,7 @@
 
 TestChromeBrowserState::TestChromeBrowserState(
     const base::FilePath& path,
-    scoped_ptr<syncable_prefs::PrefServiceSyncable> prefs,
+    std::unique_ptr<syncable_prefs::PrefServiceSyncable> prefs,
     const TestingFactories& testing_factories,
     const RefcountedTestingFactories& refcounted_testing_factories)
     : state_path_(path),
@@ -410,14 +411,15 @@
 }
 
 void TestChromeBrowserState::Builder::SetPrefService(
-    scoped_ptr<syncable_prefs::PrefServiceSyncable> prefs) {
+    std::unique_ptr<syncable_prefs::PrefServiceSyncable> prefs) {
   DCHECK(!build_called_);
   pref_service_ = std::move(prefs);
 }
 
-scoped_ptr<TestChromeBrowserState> TestChromeBrowserState::Builder::Build() {
+std::unique_ptr<TestChromeBrowserState>
+TestChromeBrowserState::Builder::Build() {
   DCHECK(!build_called_);
-  return make_scoped_ptr(new TestChromeBrowserState(
+  return base::WrapUnique(new TestChromeBrowserState(
       state_path_, std::move(pref_service_), testing_factories_,
       refcounted_testing_factories_));
 }
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.h b/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.h
index 6978910..f000de5 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.h
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_BROWSER_STATE_TEST_CHROME_BROWSER_STATE_ISOLATED_CONTEXT_H_
 #define IOS_CHROME_BROWSER_BROWSER_STATE_TEST_CHROME_BROWSER_STATE_ISOLATED_CONTEXT_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/public/provider/chrome/browser/ui/default_ios_web_view_factory.h"
@@ -19,7 +21,7 @@
   bool MainContextCalled() const;
   IOSWebViewFactoryExternalService SharingService();
 
-  static scoped_ptr<TestChromeBrowserStateWithIsolatedContext> Build();
+  static std::unique_ptr<TestChromeBrowserStateWithIsolatedContext> Build();
 
   // ChromeBrowserState:
   net::URLRequestContextGetter* GetRequestContext() override;
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.mm b/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.mm
index 0f23ae5..100c7b1 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.mm
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state_isolated_context.mm
@@ -11,10 +11,11 @@
 
 TestChromeBrowserStateWithIsolatedContext::
     TestChromeBrowserStateWithIsolatedContext()
-    : TestChromeBrowserState(base::FilePath(),
-                             scoped_ptr<syncable_prefs::PrefServiceSyncable>(),
-                             TestingFactories(),
-                             RefcountedTestingFactories()),
+    : TestChromeBrowserState(
+          base::FilePath(),
+          std::unique_ptr<syncable_prefs::PrefServiceSyncable>(),
+          TestingFactories(),
+          RefcountedTestingFactories()),
       main_context_called_(false),
       request_context_(new net::TestURLRequestContextGetter(
           web::WebThread::GetTaskRunnerForThread(web::WebThread::IO))) {}
diff --git a/ios/chrome/browser/browsing_data/browsing_data_remover_helper.cc b/ios/chrome/browser/browsing_data/browsing_data_remover_helper.cc
index 3df5741..0a8bc06 100644
--- a/ios/chrome/browser/browsing_data/browsing_data_remover_helper.cc
+++ b/ios/chrome/browser/browsing_data/browsing_data_remover_helper.cc
@@ -42,7 +42,7 @@
     DCHECK(current_remover_);
     auto pending_removals_iter = pending_removals_.find(browser_state);
     if (pending_removals_iter == pending_removals_.end()) {
-      scoped_ptr<BrowsingDataRemovalInfo> removal_info(
+      std::unique_ptr<BrowsingDataRemovalInfo> removal_info(
           new BrowsingDataRemovalInfo(remove_mask, callback));
       pending_removals_[browser_state] = std::move(removal_info);
     } else {
@@ -50,7 +50,7 @@
       pending_removals_iter->second->callbacks.push_back(callback);
     }
   } else {
-    scoped_ptr<BrowsingDataRemovalInfo> removal_info(
+    std::unique_ptr<BrowsingDataRemovalInfo> removal_info(
         new BrowsingDataRemovalInfo(remove_mask, callback));
     DoRemove(browser_state, std::move(removal_info));
   }
@@ -74,7 +74,7 @@
 
   ios::ChromeBrowserState* next_browser_state =
       pending_removals_.begin()->first;
-  scoped_ptr<BrowsingDataRemovalInfo> removal_info =
+  std::unique_ptr<BrowsingDataRemovalInfo> removal_info =
       std::move(pending_removals_[next_browser_state]);
   pending_removals_.erase(next_browser_state);
   DoRemove(next_browser_state, std::move(removal_info));
@@ -82,7 +82,7 @@
 
 void BrowsingDataRemoverHelper::DoRemove(
     ios::ChromeBrowserState* browser_state,
-    scoped_ptr<BrowsingDataRemovalInfo> removal_info) {
+    std::unique_ptr<BrowsingDataRemovalInfo> removal_info) {
   DCHECK(!current_remover_ && !IOSChromeBrowsingDataRemover::is_removing());
 
   current_removal_info_ = std::move(removal_info);
diff --git a/ios/chrome/browser/browsing_data/browsing_data_remover_helper.h b/ios/chrome/browser/browsing_data/browsing_data_remover_helper.h
index 9ae632a..a5b73e9 100644
--- a/ios/chrome/browser/browsing_data/browsing_data_remover_helper.h
+++ b/ios/chrome/browser/browsing_data/browsing_data_remover_helper.h
@@ -6,10 +6,10 @@
 #define IOS_CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_HELPER_H_
 
 #include <map>
+#include <memory>
 #include <vector>
 
 #include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h"
 
 namespace ios {
@@ -56,14 +56,14 @@
   // IOSChromeBrowsingDataRemover
   // must not be running.
   void DoRemove(ios::ChromeBrowserState* browser_state,
-                scoped_ptr<BrowsingDataRemovalInfo> removal_info);
+                std::unique_ptr<BrowsingDataRemovalInfo> removal_info);
 
   // A map that contains the all the ChromeBrowserStates that have a removal
   // operation pending along with their associated BrowsingDataRemovalInfo.
-  std::map<ios::ChromeBrowserState*, scoped_ptr<BrowsingDataRemovalInfo>>
+  std::map<ios::ChromeBrowserState*, std::unique_ptr<BrowsingDataRemovalInfo>>
       pending_removals_;
   // The BrowsingDataRemovalInfo of the currently enqueued removal operation.
-  scoped_ptr<BrowsingDataRemovalInfo> current_removal_info_;
+  std::unique_ptr<BrowsingDataRemovalInfo> current_removal_info_;
   // The actual object that perfoms the removal of browsing data.
   IOSChromeBrowsingDataRemover* current_remover_;
 };
diff --git a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h
index 0d5d9a3d..e20be6c 100644
--- a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h
+++ b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_BROWSING_DATA_IOS_CHROME_BROWSING_DATA_REMOVER_H_
 #define IOS_CHROME_BROWSER_BROWSING_DATA_IOS_CHROME_BROWSING_DATA_REMOVER_H_
 
+#include <memory>
 #include <set>
 
 #include "base/gtest_prod_util.h"
@@ -109,7 +110,7 @@
   };
 
   using Callback = base::Callback<void(const NotificationDetails&)>;
-  using CallbackSubscription = scoped_ptr<
+  using CallbackSubscription = std::unique_ptr<
       base::CallbackList<void(const NotificationDetails&)>::Subscription>;
 
   // Creates a IOSChromeBrowsingDataRemover bound to a specific period of time
@@ -263,7 +264,7 @@
   // Used if we need to clear history.
   base::CancelableTaskTracker history_task_tracker_;
 
-  scoped_ptr<TemplateURLService::Subscription> template_url_sub_;
+  std::unique_ptr<TemplateURLService::Subscription> template_url_sub_;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeBrowsingDataRemover);
 };
diff --git a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm
index c7f6990..7e8472b 100644
--- a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm
+++ b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm
@@ -236,23 +236,6 @@
   if (remove_mask & REMOVE_COOKIES) {
     web::RecordAction(UserMetricsAction("ClearBrowsingData_Cookies"));
 
-    // Clear the safebrowsing cookies only if time period is for "all time".  It
-    // doesn't make sense to apply the time period of deleting in the last X
-    // hours/days to the safebrowsing cookies since they aren't the result of
-    // any user action.
-    if (delete_begin_ == base::Time()) {
-      scoped_refptr<net::URLRequestContextGetter> safe_browsing_context =
-          make_scoped_refptr(ios::GetChromeBrowserProvider()
-                                 ->GetSafeBrowsingURLRequestContext());
-      if (safe_browsing_context) {
-        ++waiting_for_clear_cookies_count_;
-        WebThread::PostTask(
-            WebThread::IO, FROM_HERE,
-            base::Bind(&IOSChromeBrowsingDataRemover::ClearCookiesOnIOThread,
-                       base::Unretained(this), safe_browsing_context, GURL()));
-      }
-    }
-
     ++waiting_for_clear_cookies_count_;
     WebThread::PostTask(
         WebThread::IO, FROM_HERE,
diff --git a/ios/chrome/browser/chrome_switches.cc b/ios/chrome/browser/chrome_switches.cc
index c9223b47..1f78eac 100644
--- a/ios/chrome/browser/chrome_switches.cc
+++ b/ios/chrome/browser/chrome_switches.cc
@@ -117,11 +117,6 @@
 const char kIOSTestingFixedHttpPort[] = "testing-fixed-http-port";
 const char kIOSTestingFixedHttpsPort[] = "testing-fixed-https-port";
 
-// Disable several subsystems which run network requests in the background.
-// This is for use when doing network performance testing to avoid noise in the
-// measurements.
-const char kDisableBackgroundNetworking[] = "disable-background-networking";
-
 // Enables grouping websites by domain and filtering them by period.
 const char kHistoryEnableGroupByDomain[] = "enable-grouped-history";
 
@@ -130,9 +125,4 @@
 const char kMarkNonSecureAsNeutral[] = "neutral";
 const char kMarkNonSecureAsNonSecure[] = "non-secure";
 
-// If present, safebrowsing only performs update when
-// SafeBrowsingProtocolManager::ForceScheduleNextUpdate() is explicitly called.
-// This is used for testing only.
-const char kSbDisableAutoUpdate[] = "safebrowsing-disable-auto-update";
-
 }  // namespace switches
diff --git a/ios/chrome/browser/chrome_switches.h b/ios/chrome/browser/chrome_switches.h
index 627574a..302e56f 100644
--- a/ios/chrome/browser/chrome_switches.h
+++ b/ios/chrome/browser/chrome_switches.h
@@ -47,12 +47,10 @@
 // TODO(crbug.com/567136): those switches are duplicated between desktop
 // and iOS. Once the corresponding code has been componentized or is no longer
 // used by iOS, remove the duplicate definition.
-extern const char kDisableBackgroundNetworking[];
 extern const char kHistoryEnableGroupByDomain[];
 extern const char kMarkNonSecureAs[];
 extern const char kMarkNonSecureAsNeutral[];
 extern const char kMarkNonSecureAsNonSecure[];
-extern const char kSbDisableAutoUpdate[];
 
 }  // namespace switches
 
diff --git a/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm b/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm
index 052fa78..8fded8fb 100644
--- a/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm
+++ b/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm
@@ -4,10 +4,11 @@
 
 #import "ios/chrome/browser/crash_report/crash_report_multi_parameter.h"
 
+#include <memory>
+
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/values.h"
 #import "ios/chrome/browser/crash_report/breakpad_helper.h"
@@ -21,7 +22,7 @@
 
 @implementation CrashReportMultiParameter {
   base::scoped_nsobject<NSString> crashReportKey_;
-  scoped_ptr<base::DictionaryValue> dictionary_;
+  std::unique_ptr<base::DictionaryValue> dictionary_;
 }
 
 - (instancetype)init {
diff --git a/ios/chrome/browser/dom_distiller/distiller_viewer.cc b/ios/chrome/browser/dom_distiller/distiller_viewer.cc
index 68ae648..8820e44 100644
--- a/ios/chrome/browser/dom_distiller/distiller_viewer.cc
+++ b/ios/chrome/browser/dom_distiller/distiller_viewer.cc
@@ -32,7 +32,7 @@
       dom_distiller::DomDistillerServiceFactory::GetForBrowserState(
           browser_state);
 
-  scoped_ptr<ViewerHandle> viewer_handle = distillerService->ViewUrl(
+  std::unique_ptr<ViewerHandle> viewer_handle = distillerService->ViewUrl(
       this, distillerService->CreateDefaultDistillerPage(gfx::Size()), url);
 
   TakeViewerHandle(std::move(viewer_handle));
diff --git a/ios/chrome/browser/dom_distiller/distiller_viewer.h b/ios/chrome/browser/dom_distiller/distiller_viewer.h
index 58904625..936b789 100644
--- a/ios/chrome/browser/dom_distiller/distiller_viewer.h
+++ b/ios/chrome/browser/dom_distiller/distiller_viewer.h
@@ -5,10 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_DOM_DISTILLER_DISTILLER_VIEWER_H_
 #define IOS_CHROME_BROWSER_DOM_DISTILLER_DISTILLER_VIEWER_H_
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/dom_distiller/core/dom_distiller_request_view_base.h"
 #include "components/dom_distiller/core/task_tracker.h"
 
diff --git a/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.cc b/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.cc
index 1a7eb1e..e101c6a 100644
--- a/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.cc
+++ b/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.cc
@@ -8,6 +8,7 @@
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "base/threading/sequenced_worker_pool.h"
 #include "components/dom_distiller/core/article_entry.h"
@@ -32,10 +33,11 @@
       public dom_distiller::DomDistillerService {
  public:
   DomDistillerKeyedService(
-      scoped_ptr<dom_distiller::DomDistillerStoreInterface> store,
-      scoped_ptr<dom_distiller::DistillerFactory> distiller_factory,
-      scoped_ptr<dom_distiller::DistillerPageFactory> distiller_page_factory,
-      scoped_ptr<dom_distiller::DistilledPagePrefs> distilled_page_prefs)
+      std::unique_ptr<dom_distiller::DomDistillerStoreInterface> store,
+      std::unique_ptr<dom_distiller::DistillerFactory> distiller_factory,
+      std::unique_ptr<dom_distiller::DistillerPageFactory>
+          distiller_page_factory,
+      std::unique_ptr<dom_distiller::DistilledPagePrefs> distilled_page_prefs)
       : DomDistillerService(std::move(store),
                             std::move(distiller_factory),
                             std::move(distiller_page_factory),
@@ -71,34 +73,36 @@
 DomDistillerServiceFactory::~DomDistillerServiceFactory() {
 }
 
-scoped_ptr<KeyedService> DomDistillerServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+DomDistillerServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   scoped_refptr<base::SequencedTaskRunner> background_task_runner =
       web::WebThread::GetBlockingPool()->GetSequencedTaskRunner(
           web::WebThread::GetBlockingPool()->GetSequenceToken());
 
-  scoped_ptr<leveldb_proto::ProtoDatabaseImpl<ArticleEntry>> db(
+  std::unique_ptr<leveldb_proto::ProtoDatabaseImpl<ArticleEntry>> db(
       new leveldb_proto::ProtoDatabaseImpl<ArticleEntry>(
           background_task_runner));
 
   base::FilePath database_dir(
       context->GetStatePath().Append(FILE_PATH_LITERAL("Articles")));
 
-  scoped_ptr<DomDistillerStore> dom_distiller_store(
+  std::unique_ptr<DomDistillerStore> dom_distiller_store(
       new DomDistillerStore(std::move(db), database_dir));
 
-  scoped_ptr<DistillerPageFactory> distiller_page_factory(
+  std::unique_ptr<DistillerPageFactory> distiller_page_factory(
       new DistillerPageFactoryIOS(context));
-  scoped_ptr<DistillerURLFetcherFactory> distiller_url_fetcher_factory(
+  std::unique_ptr<DistillerURLFetcherFactory> distiller_url_fetcher_factory(
       new DistillerURLFetcherFactory(context->GetRequestContext()));
 
   dom_distiller::proto::DomDistillerOptions options;
-  scoped_ptr<DistillerFactory> distiller_factory(new DistillerFactoryImpl(
+  std::unique_ptr<DistillerFactory> distiller_factory(new DistillerFactoryImpl(
       std::move(distiller_url_fetcher_factory), options));
-  scoped_ptr<DistilledPagePrefs> distilled_page_prefs(new DistilledPagePrefs(
-      ios::ChromeBrowserState::FromBrowserState(context)->GetPrefs()));
+  std::unique_ptr<DistilledPagePrefs> distilled_page_prefs(
+      new DistilledPagePrefs(
+          ios::ChromeBrowserState::FromBrowserState(context)->GetPrefs()));
 
-  return make_scoped_ptr(new DomDistillerKeyedService(
+  return base::WrapUnique(new DomDistillerKeyedService(
       std::move(dom_distiller_store), std::move(distiller_factory),
       std::move(distiller_page_factory), std::move(distilled_page_prefs)));
 }
diff --git a/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h b/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h
index 80e2294e..6abaa13 100644
--- a/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h
+++ b/ios/chrome/browser/dom_distiller/dom_distiller_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_DOM_DISTILLER_DOM_DISTILLER_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_DOM_DISTILLER_DOM_DISTILLER_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -37,7 +38,7 @@
   ~DomDistillerServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/favicon/favicon_loader.h b/ios/chrome/browser/favicon/favicon_loader.h
index b1ad40bae..60f8ccc 100644
--- a/ios/chrome/browser/favicon/favicon_loader.h
+++ b/ios/chrome/browser/favicon/favicon_loader.h
@@ -5,11 +5,11 @@
 #ifndef IOS_CHROME_BROWSER_FAVICON_FAVICON_LOADER_H_
 #define IOS_CHROME_BROWSER_FAVICON_FAVICON_LOADER_H_
 
+#include <memory>
 #include <vector>
 
 #import "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "base/threading/thread_checker.h"
 #include "components/favicon_base/favicon_types.h"
@@ -53,7 +53,7 @@
   // Called when the favicon load request completes. Saves image into the
   // cache. Desktop code assumes this image is in PNG format.
   void OnFaviconAvailable(
-      scoped_ptr<RequestData> request_data,
+      std::unique_ptr<RequestData> request_data,
       const std::vector<favicon_base::FaviconRawBitmapResult>&
           favicon_bitmap_results);
 
diff --git a/ios/chrome/browser/favicon/favicon_loader.mm b/ios/chrome/browser/favicon/favicon_loader.mm
index 5f22de0..eb947b1 100644
--- a/ios/chrome/browser/favicon/favicon_loader.mm
+++ b/ios/chrome/browser/favicon/favicon_loader.mm
@@ -53,7 +53,7 @@
   if (favicon_service_) {
     int size = gfx::kFaviconSize * [UIScreen mainScreen].scale;
 
-    scoped_ptr<RequestData> request_data(new RequestData(key, block));
+    std::unique_ptr<RequestData> request_data(new RequestData(key, block));
     favicon_base::FaviconResultsCallback callback =
         base::Bind(&FaviconLoader::OnFaviconAvailable, base::Unretained(this),
                    base::Passed(&request_data));
@@ -72,7 +72,7 @@
 }
 
 void FaviconLoader::OnFaviconAvailable(
-    scoped_ptr<RequestData> request_data,
+    std::unique_ptr<RequestData> request_data,
     const std::vector<favicon_base::FaviconRawBitmapResult>&
         favicon_bitmap_results) {
   DCHECK(request_data);
diff --git a/ios/chrome/browser/favicon/favicon_service_factory.cc b/ios/chrome/browser/favicon/favicon_service_factory.cc
index 824baca4..8a9381b 100644
--- a/ios/chrome/browser/favicon/favicon_service_factory.cc
+++ b/ios/chrome/browser/favicon/favicon_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/favicon/favicon_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/favicon/core/favicon_service.h"
 #include "components/keyed_service/core/service_access_type.h"
@@ -47,12 +48,12 @@
 FaviconServiceFactory::~FaviconServiceFactory() {
 }
 
-scoped_ptr<KeyedService> FaviconServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> FaviconServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new favicon::FaviconService(
-      make_scoped_ptr(new FaviconClientImpl(browser_state)),
+  return base::WrapUnique(new favicon::FaviconService(
+      base::WrapUnique(new FaviconClientImpl(browser_state)),
       ios::HistoryServiceFactory::GetForBrowserState(
           browser_state, ServiceAccessType::EXPLICIT_ACCESS)));
 }
diff --git a/ios/chrome/browser/favicon/favicon_service_factory.h b/ios/chrome/browser/favicon/favicon_service_factory.h
index 3e40d91..8d81f8c 100644
--- a/ios/chrome/browser/favicon/favicon_service_factory.h
+++ b/ios/chrome/browser/favicon/favicon_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_FAVICON_FAVICON_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_FAVICON_FAVICON_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -40,7 +41,7 @@
   ~FaviconServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(FaviconServiceFactory);
diff --git a/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h b/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h
index 2843bbd..ca2bbcd 100644
--- a/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h
+++ b/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_FAVICON_IOS_CHROME_FAVICON_LOADER_FACTORY_H_
 #define IOS_CHROME_BROWSER_FAVICON_IOS_CHROME_FAVICON_LOADER_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 class FaviconLoader;
@@ -37,7 +38,7 @@
   ~IOSChromeFaviconLoaderFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.mm b/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.mm
index 253820b..dc54bf3 100644
--- a/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.mm
+++ b/ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.mm
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -37,11 +38,12 @@
 
 IOSChromeFaviconLoaderFactory::~IOSChromeFaviconLoaderFactory() {}
 
-scoped_ptr<KeyedService> IOSChromeFaviconLoaderFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+IOSChromeFaviconLoaderFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(
+  return base::WrapUnique(
       new FaviconLoader(ios::FaviconServiceFactory::GetForBrowserState(
           browser_state, ServiceAccessType::IMPLICIT_ACCESS)));
 }
diff --git a/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.cc b/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.cc
index 6b2627a..13b191c 100644
--- a/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.cc
+++ b/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "ios/chrome/browser/browser_state/browser_state_otr_helper.h"
@@ -29,10 +30,10 @@
 
 IOSChromeLargeIconCacheFactory::~IOSChromeLargeIconCacheFactory() {}
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromeLargeIconCacheFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  return make_scoped_ptr(new LargeIconCache);
+  return base::WrapUnique(new LargeIconCache);
 }
 
 web::BrowserState* IOSChromeLargeIconCacheFactory::GetBrowserStateToUse(
diff --git a/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.h b/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.h
index 6a20527..e676da6 100644
--- a/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.h
+++ b/ios/chrome/browser/favicon/ios_chrome_large_icon_cache_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_FAVICON_IOS_CHROME_LARGE_ICON_CACHE_FACTORY_H_
 #define IOS_CHROME_BROWSER_FAVICON_IOS_CHROME_LARGE_ICON_CACHE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 class KeyedService;
@@ -37,7 +38,7 @@
   ~IOSChromeLargeIconCacheFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.cc b/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.cc
index 47c84b76..ee54834 100644
--- a/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.cc
+++ b/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "base/thread_task_runner_handle.h"
 #include "components/favicon/core/large_icon_service.h"
@@ -34,13 +35,13 @@
 
 IOSChromeLargeIconServiceFactory::~IOSChromeLargeIconServiceFactory() {}
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromeLargeIconServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
 
-  return make_scoped_ptr(new favicon::LargeIconService(
+  return base::WrapUnique(new favicon::LargeIconService(
       ios::FaviconServiceFactory::GetForBrowserState(
           browser_state, ServiceAccessType::EXPLICIT_ACCESS),
       web::WebThread::GetBlockingPool()));
diff --git a/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h b/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h
index d6611c3..d6883a7 100644
--- a/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h
+++ b/ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_FAVICON_IOS_CHROME_LARGE_ICON_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_FAVICON_IOS_CHROME_LARGE_ICON_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 class KeyedService;
@@ -41,7 +42,7 @@
   ~IOSChromeLargeIconServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/favicon/large_icon_cache.cc b/ios/chrome/browser/favicon/large_icon_cache.cc
index b05b79b9..a63cb48 100644
--- a/ios/chrome/browser/favicon/large_icon_cache.cc
+++ b/ios/chrome/browser/favicon/large_icon_cache.cc
@@ -18,7 +18,7 @@
   LargeIconCacheEntry() {}
   ~LargeIconCacheEntry() {}
 
-  scoped_ptr<favicon_base::LargeIconResult> result;
+  std::unique_ptr<favicon_base::LargeIconResult> result;
 };
 
 LargeIconCache::LargeIconCache() : cache_(kMaxCacheSize) {}
@@ -28,12 +28,12 @@
 void LargeIconCache::SetCachedResult(
     const GURL& url,
     const favicon_base::LargeIconResult& result) {
-  scoped_ptr<LargeIconCacheEntry> entry(new LargeIconCacheEntry);
+  std::unique_ptr<LargeIconCacheEntry> entry(new LargeIconCacheEntry);
   entry->result = CloneLargeIconResult(result);
   cache_.Put(url, std::move(entry));
 }
 
-scoped_ptr<favicon_base::LargeIconResult> LargeIconCache::GetCachedResult(
+std::unique_ptr<favicon_base::LargeIconResult> LargeIconCache::GetCachedResult(
     const GURL& url) {
   auto iter = cache_.Get(url);
   if (iter != cache_.end()) {
@@ -41,12 +41,13 @@
     return CloneLargeIconResult(*iter->second->result.get());
   }
 
-  return scoped_ptr<favicon_base::LargeIconResult>();
+  return std::unique_ptr<favicon_base::LargeIconResult>();
 }
 
-scoped_ptr<favicon_base::LargeIconResult> LargeIconCache::CloneLargeIconResult(
+std::unique_ptr<favicon_base::LargeIconResult>
+LargeIconCache::CloneLargeIconResult(
     const favicon_base::LargeIconResult& large_icon_result) {
-  scoped_ptr<favicon_base::LargeIconResult> clone;
+  std::unique_ptr<favicon_base::LargeIconResult> clone;
   if (large_icon_result.bitmap.is_valid()) {
     clone.reset(new favicon_base::LargeIconResult(large_icon_result.bitmap));
   } else {
diff --git a/ios/chrome/browser/favicon/large_icon_cache.h b/ios/chrome/browser/favicon/large_icon_cache.h
index 5d7d4472..1845c7c 100644
--- a/ios/chrome/browser/favicon/large_icon_cache.h
+++ b/ios/chrome/browser/favicon/large_icon_cache.h
@@ -5,9 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_FAVICON_LARGE_ICON_CACHE_H_
 #define IOS_CHROME_BROWSER_FAVICON_LARGE_ICON_CACHE_H_
 
+#include <memory>
+
 #include "base/containers/mru_cache.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 class GURL;
@@ -26,7 +27,7 @@
 // Example usage:
 //   LargeIconCache* large_icon_cache =
 //       IOSChromeLargeIconServiceFactory::GetForBrowserState(browser_state);
-//   scoped_ptr<favicon_base::LargeIconResult> icon =
+//   std::unique_ptr<favicon_base::LargeIconResult> icon =
 //       large_icon_cache->GetCachedResult(...);
 //
 class LargeIconCache : public KeyedService {
@@ -40,14 +41,15 @@
   void SetCachedResult(const GURL& url, const favicon_base::LargeIconResult&);
 
   // Returns a cached LargeIconResult.
-  scoped_ptr<favicon_base::LargeIconResult> GetCachedResult(const GURL& url);
+  std::unique_ptr<favicon_base::LargeIconResult> GetCachedResult(
+      const GURL& url);
 
  private:
   // Clones a LargeIconResult.
-  scoped_ptr<favicon_base::LargeIconResult> CloneLargeIconResult(
+  std::unique_ptr<favicon_base::LargeIconResult> CloneLargeIconResult(
       const favicon_base::LargeIconResult& large_icon_result);
 
-  base::MRUCache<GURL, scoped_ptr<LargeIconCacheEntry>> cache_;
+  base::MRUCache<GURL, std::unique_ptr<LargeIconCacheEntry>> cache_;
 
   DISALLOW_COPY_AND_ASSIGN(LargeIconCache);
 };
diff --git a/ios/chrome/browser/favicon/large_icon_cache_unittest.cc b/ios/chrome/browser/favicon/large_icon_cache_unittest.cc
index 29d2be3..020c442 100644
--- a/ios/chrome/browser/favicon/large_icon_cache_unittest.cc
+++ b/ios/chrome/browser/favicon/large_icon_cache_unittest.cc
@@ -50,9 +50,10 @@
   ~LargeIconCacheTest() override {}
 
  protected:
-  scoped_ptr<LargeIconCache> large_icon_cache_;
+  std::unique_ptr<LargeIconCache> large_icon_cache_;
   favicon_base::FaviconRawBitmapResult expected_bitmap_;
-  scoped_ptr<favicon_base::FallbackIconStyle> expected_fallback_icon_style_;
+  std::unique_ptr<favicon_base::FallbackIconStyle>
+      expected_fallback_icon_style_;
 
   bool is_callback_invoked_;
 
@@ -61,13 +62,13 @@
 };
 
 TEST_F(LargeIconCacheTest, EmptyCache) {
-  scoped_ptr<LargeIconCache> large_icon_cache(new LargeIconCache);
+  std::unique_ptr<LargeIconCache> large_icon_cache(new LargeIconCache);
   EXPECT_EQ(nullptr, large_icon_cache->GetCachedResult(GURL(kDummyUrl)));
 }
 
 TEST_F(LargeIconCacheTest, RetreiveItem) {
-  scoped_ptr<favicon_base::LargeIconResult> expected_result1;
-  scoped_ptr<favicon_base::LargeIconResult> expected_result2;
+  std::unique_ptr<favicon_base::LargeIconResult> expected_result1;
+  std::unique_ptr<favicon_base::LargeIconResult> expected_result2;
   expected_result1.reset(new favicon_base::LargeIconResult(expected_bitmap_));
   expected_result2.reset(new favicon_base::LargeIconResult(
       new favicon_base::FallbackIconStyle(*expected_fallback_icon_style_)));
@@ -75,12 +76,12 @@
   large_icon_cache_->SetCachedResult(GURL(kDummyUrl), *expected_result1);
   large_icon_cache_->SetCachedResult(GURL(kDummyUrl2), *expected_result2);
 
-  scoped_ptr<favicon_base::LargeIconResult> result1 =
+  std::unique_ptr<favicon_base::LargeIconResult> result1 =
       large_icon_cache_->GetCachedResult(GURL(kDummyUrl));
   EXPECT_EQ(true, result1->bitmap.is_valid());
   EXPECT_EQ(expected_result1->bitmap.pixel_size, result1->bitmap.pixel_size);
 
-  scoped_ptr<favicon_base::LargeIconResult> result2 =
+  std::unique_ptr<favicon_base::LargeIconResult> result2 =
       large_icon_cache_->GetCachedResult(GURL(kDummyUrl2));
   EXPECT_EQ(false, result2->bitmap.is_valid());
   EXPECT_EQ(expected_result2->fallback_icon_style->background_color,
@@ -88,7 +89,7 @@
 
   // Test overwriting kDummyUrl.
   large_icon_cache_->SetCachedResult(GURL(kDummyUrl), *expected_result2);
-  scoped_ptr<favicon_base::LargeIconResult> result3 =
+  std::unique_ptr<favicon_base::LargeIconResult> result3 =
       large_icon_cache_->GetCachedResult(GURL(kDummyUrl2));
   EXPECT_EQ(false, result3->bitmap.is_valid());
   EXPECT_EQ(expected_result2->fallback_icon_style->background_color,
diff --git a/ios/chrome/browser/find_in_page/find_in_page_controller.mm b/ios/chrome/browser/find_in_page/find_in_page_controller.mm
index 5a7b6cf8..1f167a0 100644
--- a/ios/chrome/browser/find_in_page/find_in_page_controller.mm
+++ b/ios/chrome/browser/find_in_page/find_in_page_controller.mm
@@ -5,13 +5,14 @@
 #import "ios/chrome/browser/find_in_page/find_in_page_controller.h"
 
 #import <UIKit/UIKit.h>
+
 #import <cmath>
+#include <memory>
 
 #include "base/ios/ios_util.h"
 #include "base/logging.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #import "ios/chrome/browser/find_in_page/find_in_page_model.h"
 #import "ios/chrome/browser/find_in_page/js_findinpage_manager.h"
 #import "ios/chrome/browser/web/dom_altering_lock.h"
@@ -81,7 +82,7 @@
   BOOL _findStringStarted;
 
   // Bridge to observe the web state from Objective-C.
-  scoped_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
+  std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
 }
 
 @synthesize delegate = _delegate;
diff --git a/ios/chrome/browser/find_in_page/js_findinpage_manager.mm b/ios/chrome/browser/find_in_page/js_findinpage_manager.mm
index 9f411e28..5302ec3 100644
--- a/ios/chrome/browser/find_in_page/js_findinpage_manager.mm
+++ b/ios/chrome/browser/find_in_page/js_findinpage_manager.mm
@@ -4,13 +4,13 @@
 
 #import "ios/chrome/browser/find_in_page/js_findinpage_manager.h"
 
+#include <memory>
 #include <string>
 
 #import "base/ios/weak_nsobject.h"
 #include "base/json/json_reader.h"
 #include "base/json/string_escape.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/values.h"
 #import "ios/chrome/browser/find_in_page/find_in_page_model.h"
@@ -173,7 +173,7 @@
 
   // Parse JSONs.
   std::string json([result UTF8String]);
-  scoped_ptr<base::Value> root(base::JSONReader::Read(json, false));
+  std::unique_ptr<base::Value> root(base::JSONReader::Read(json, false));
   if (!root.get())
     return YES;
   if (!root->IsType(base::Value::TYPE_LIST))
@@ -221,7 +221,7 @@
 
 - (FindInPageEntry)findInPageEntryForJson:(NSString*)jsonStr {
   std::string json([jsonStr UTF8String]);
-  scoped_ptr<base::Value> root(base::JSONReader::Read(json, false));
+  std::unique_ptr<base::Value> root(base::JSONReader::Read(json, false));
   if (!root.get())
     return kFindInPageEntryZero;
 
diff --git a/ios/chrome/browser/geolocation/omnibox_geolocation_local_state_unittest.mm b/ios/chrome/browser/geolocation/omnibox_geolocation_local_state_unittest.mm
index 215d9ac..80d6644 100644
--- a/ios/chrome/browser/geolocation/omnibox_geolocation_local_state_unittest.mm
+++ b/ios/chrome/browser/geolocation/omnibox_geolocation_local_state_unittest.mm
@@ -2,13 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ios/chrome/browser/geolocation/omnibox_geolocation_local_state.h"
+
+#include <memory>
 #include <string>
 
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/prefs/testing_pref_service.h"
 #include "ios/chrome/browser/geolocation/location_manager.h"
-#include "ios/chrome/browser/geolocation/omnibox_geolocation_local_state.h"
 #include "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
 #include "ios/chrome/test/testing_application_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ios/chrome/browser/google/google_url_tracker_factory.cc b/ios/chrome/browser/google/google_url_tracker_factory.cc
index bdee6bd..434c9209 100644
--- a/ios/chrome/browser/google/google_url_tracker_factory.cc
+++ b/ios/chrome/browser/google/google_url_tracker_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/google/google_url_tracker_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/google/core/browser/google_pref_names.h"
 #include "components/google/core/browser/google_url_tracker.h"
@@ -36,7 +37,7 @@
 GoogleURLTrackerFactory::~GoogleURLTrackerFactory() {
 }
 
-scoped_ptr<KeyedService> GoogleURLTrackerFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> GoogleURLTrackerFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
@@ -46,8 +47,8 @@
   browser_state->GetOriginalChromeBrowserState()->GetPrefs()->ClearPref(
       prefs::kLastPromptedGoogleURL);
 
-  return make_scoped_ptr(new GoogleURLTracker(
-      make_scoped_ptr(new GoogleURLTrackerClientImpl(browser_state)),
+  return base::WrapUnique(new GoogleURLTracker(
+      base::WrapUnique(new GoogleURLTrackerClientImpl(browser_state)),
       GoogleURLTracker::NORMAL_MODE));
 }
 
diff --git a/ios/chrome/browser/google/google_url_tracker_factory.h b/ios/chrome/browser/google/google_url_tracker_factory.h
index 5fed645..2ee6d020 100644
--- a/ios/chrome/browser/google/google_url_tracker_factory.h
+++ b/ios/chrome/browser/google/google_url_tracker_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_FACTORY_H_
 #define IOS_CHROME_BROWSER_GOOGLE_GOOGLE_URL_TRACKER_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -35,7 +36,7 @@
   ~GoogleURLTrackerFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/history/history_client_impl.cc b/ios/chrome/browser/history/history_client_impl.cc
index 780a59d..35860d1 100644
--- a/ios/chrome/browser/history/history_client_impl.cc
+++ b/ios/chrome/browser/history/history_client_impl.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/history/core/browser/history_service.h"
 #include "ios/chrome/browser/history/history_backend_client_impl.h"
@@ -62,9 +63,9 @@
 void HistoryClientImpl::NotifyProfileError(sql::InitStatus init_status) {
 }
 
-scoped_ptr<history::HistoryBackendClient>
+std::unique_ptr<history::HistoryBackendClient>
 HistoryClientImpl::CreateBackendClient() {
-  return make_scoped_ptr(new HistoryBackendClientImpl(bookmark_model_));
+  return base::WrapUnique(new HistoryBackendClientImpl(bookmark_model_));
 }
 
 void HistoryClientImpl::BookmarkModelChanged() {
diff --git a/ios/chrome/browser/history/history_client_impl.h b/ios/chrome/browser/history/history_client_impl.h
index abcfff3..bae4809d 100644
--- a/ios/chrome/browser/history/history_client_impl.h
+++ b/ios/chrome/browser/history/history_client_impl.h
@@ -5,12 +5,12 @@
 #ifndef IOS_CHROME_BROWSER_HISTORY_HISTORY_CLIENT_IMPL_H_
 #define IOS_CHROME_BROWSER_HISTORY_HISTORY_CLIENT_IMPL_H_
 
+#include <memory>
 #include <set>
 
 #include "base/callback_forward.h"
 #include "base/callback_list.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
 #include "components/history/core/browser/history_client.h"
 
@@ -34,7 +34,7 @@
   void Shutdown() override;
   bool CanAddURL(const GURL& url) override;
   void NotifyProfileError(sql::InitStatus init_status) override;
-  scoped_ptr<history::HistoryBackendClient> CreateBackendClient() override;
+  std::unique_ptr<history::HistoryBackendClient> CreateBackendClient() override;
 
   // bookmarks::BaseBookmarkModelObserver implementation.
   void BookmarkModelChanged() override;
@@ -57,8 +57,8 @@
   base::Callback<void(const std::set<GURL>&)> on_bookmarks_removed_;
 
   // Subscription for notifications of changes to favicons.
-  scoped_ptr<base::CallbackList<void(const std::set<GURL>&,
-                                     const GURL&)>::Subscription>
+  std::unique_ptr<base::CallbackList<void(const std::set<GURL>&,
+                                          const GURL&)>::Subscription>
       favicons_changed_subscription_;
 
   DISALLOW_COPY_AND_ASSIGN(HistoryClientImpl);
diff --git a/ios/chrome/browser/history/history_service_factory.cc b/ios/chrome/browser/history/history_service_factory.cc
index 8748271..965c10a9 100644
--- a/ios/chrome/browser/history/history_service_factory.cc
+++ b/ios/chrome/browser/history/history_service_factory.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/history/core/browser/history_database_params.h"
 #include "components/history/core/browser/history_service.h"
@@ -67,13 +68,13 @@
 HistoryServiceFactory::~HistoryServiceFactory() {
 }
 
-scoped_ptr<KeyedService> HistoryServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> HistoryServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<history::HistoryService> history_service(
+  std::unique_ptr<history::HistoryService> history_service(
       new history::HistoryService(
-          make_scoped_ptr(new HistoryClientImpl(
+          base::WrapUnique(new HistoryClientImpl(
               ios::BookmarkModelFactory::GetForBrowserState(browser_state))),
           nullptr));
   if (!history_service->Init(history::HistoryDatabaseParamsForPath(
diff --git a/ios/chrome/browser/history/history_service_factory.h b/ios/chrome/browser/history/history_service_factory.h
index 6f3523a0..c6f2e47 100644
--- a/ios/chrome/browser/history/history_service_factory.h
+++ b/ios/chrome/browser/history/history_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_HISTORY_HISTORY_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_HISTORY_HISTORY_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -43,7 +44,7 @@
   ~HistoryServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/history/web_history_service_factory.cc b/ios/chrome/browser/history/web_history_service_factory.cc
index 9211fc6..9436a2cb 100644
--- a/ios/chrome/browser/history/web_history_service_factory.cc
+++ b/ios/chrome/browser/history/web_history_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/history/web_history_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/browser_sync/browser/profile_sync_service.h"
 #include "components/history/core/browser/web_history_service.h"
@@ -62,11 +63,11 @@
 WebHistoryServiceFactory::~WebHistoryServiceFactory() {
 }
 
-scoped_ptr<KeyedService> WebHistoryServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> WebHistoryServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new history::WebHistoryService(
+  return base::WrapUnique(new history::WebHistoryService(
       OAuth2TokenServiceFactory::GetForBrowserState(browser_state),
       ios::SigninManagerFactory::GetForBrowserState(browser_state),
       browser_state->GetRequestContext()));
diff --git a/ios/chrome/browser/history/web_history_service_factory.h b/ios/chrome/browser/history/web_history_service_factory.h
index c2a067a0..7207ab6 100644
--- a/ios/chrome/browser/history/web_history_service_factory.h
+++ b/ios/chrome/browser/history/web_history_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_HISTORY_WEB_HISTORY_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_HISTORY_WEB_HISTORY_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -37,7 +38,7 @@
   ~WebHistoryServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(WebHistoryServiceFactory);
diff --git a/ios/chrome/browser/infobars/infobar.h b/ios/chrome/browser/infobars/infobar.h
index faad0a7..a6cf4b11 100644
--- a/ios/chrome/browser/infobars/infobar.h
+++ b/ios/chrome/browser/infobars/infobar.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_INFOBARS_INFOBAR_H_
 #define IOS_CHROME_BROWSER_INFOBARS_INFOBAR_H_
 
+#include <memory>
+
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
 #include "components/infobars/core/infobar.h"
@@ -19,7 +21,7 @@
 // InfoBar for iOS acts as a UIViewController for InfoBarView.
 class InfoBarIOS : public infobars::InfoBar, public InfoBarViewDelegate {
  public:
-  explicit InfoBarIOS(scoped_ptr<infobars::InfoBarDelegate> delegate);
+  explicit InfoBarIOS(std::unique_ptr<infobars::InfoBarDelegate> delegate);
   ~InfoBarIOS() override;
 
   // Layouts the infobar using data from delegate and prepare it for adding to
diff --git a/ios/chrome/browser/infobars/infobar.mm b/ios/chrome/browser/infobars/infobar.mm
index 00ae46b..6851a77a 100644
--- a/ios/chrome/browser/infobars/infobar.mm
+++ b/ios/chrome/browser/infobars/infobar.mm
@@ -16,7 +16,7 @@
 using infobars::InfoBar;
 using infobars::InfoBarDelegate;
 
-InfoBarIOS::InfoBarIOS(scoped_ptr<InfoBarDelegate> delegate)
+InfoBarIOS::InfoBarIOS(std::unique_ptr<InfoBarDelegate> delegate)
     : InfoBar(std::move(delegate)) {}
 
 InfoBarIOS::~InfoBarIOS() {
diff --git a/ios/chrome/browser/infobars/infobar_controller.mm b/ios/chrome/browser/infobars/infobar_controller.mm
index c2c4875..e55cbe7 100644
--- a/ios/chrome/browser/infobars/infobar_controller.mm
+++ b/ios/chrome/browser/infobars/infobar_controller.mm
@@ -4,8 +4,9 @@
 
 #include "ios/chrome/browser/infobars/infobar_controller.h"
 
+#include <memory>
+
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #import "ios/public/provider/chrome/browser/ui/infobar_view_protocol.h"
 
 @interface InfoBarController () {
diff --git a/ios/chrome/browser/infobars/infobar_manager_impl.h b/ios/chrome/browser/infobars/infobar_manager_impl.h
index d1a934f..648b8cb7 100644
--- a/ios/chrome/browser/infobars/infobar_manager_impl.h
+++ b/ios/chrome/browser/infobars/infobar_manager_impl.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_INFOBARS_INFOBAR_MANAGER_IMPL_H_
 #define IOS_CHROME_BROWSER_INFOBARS_INFOBAR_MANAGER_IMPL_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/infobars/core/infobar_manager.h"
 #include "ios/web/public/web_state/web_state_observer.h"
 #include "ios/web/public/web_state/web_state_user_data.h"
@@ -39,8 +40,8 @@
 
   // InfoBarManager implementation.
   int GetActiveEntryID() override;
-  scoped_ptr<infobars::InfoBar> CreateConfirmInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate> delegate) override;
+  std::unique_ptr<infobars::InfoBar> CreateConfirmInfoBar(
+      std::unique_ptr<ConfirmInfoBarDelegate> delegate) override;
 
   // web::WebStateObserver implementation.
   void NavigationItemCommitted(
diff --git a/ios/chrome/browser/infobars/infobar_manager_impl.mm b/ios/chrome/browser/infobars/infobar_manager_impl.mm
index 57b95db..d417fef3 100644
--- a/ios/chrome/browser/infobars/infobar_manager_impl.mm
+++ b/ios/chrome/browser/infobars/infobar_manager_impl.mm
@@ -62,8 +62,8 @@
   return visible_item ? visible_item->GetUniqueID() : 0;
 }
 
-scoped_ptr<infobars::InfoBar> InfoBarManagerImpl::CreateConfirmInfoBar(
-    scoped_ptr<ConfirmInfoBarDelegate> delegate) {
+std::unique_ptr<infobars::InfoBar> InfoBarManagerImpl::CreateConfirmInfoBar(
+    std::unique_ptr<ConfirmInfoBarDelegate> delegate) {
   return ::CreateConfirmInfoBar(std::move(delegate));
 }
 
diff --git a/ios/chrome/browser/infobars/infobar_utils.h b/ios/chrome/browser/infobars/infobar_utils.h
index e731751e..109c1f2 100644
--- a/ios/chrome/browser/infobars/infobar_utils.h
+++ b/ios/chrome/browser/infobars/infobar_utils.h
@@ -5,7 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_INFOBARS_INFOBAR_UTILS_H_
 #define IOS_CHROME_BROWSER_INFOBARS_INFOBAR_UTILS_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 class ConfirmInfoBarDelegate;
 
@@ -15,7 +15,7 @@
 
 // Returns a confirm infobar that owns |delegate|.
 // Visible for testing.
-scoped_ptr<infobars::InfoBar> CreateConfirmInfoBar(
-    scoped_ptr<ConfirmInfoBarDelegate> delegate);
+std::unique_ptr<infobars::InfoBar> CreateConfirmInfoBar(
+    std::unique_ptr<ConfirmInfoBarDelegate> delegate);
 
 #endif  // IOS_CHROME_BROWSER_INFOBARS_INFOBAR_UTILS_H_
diff --git a/ios/chrome/browser/infobars/infobar_utils.mm b/ios/chrome/browser/infobars/infobar_utils.mm
index f3e9a0b..37ad255a 100644
--- a/ios/chrome/browser/infobars/infobar_utils.mm
+++ b/ios/chrome/browser/infobars/infobar_utils.mm
@@ -4,17 +4,17 @@
 
 #include "ios/chrome/browser/infobars/infobar_utils.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/infobars/core/confirm_infobar_delegate.h"
 #include "ios/chrome/browser/infobars/confirm_infobar_controller.h"
 #include "ios/chrome/browser/infobars/infobar.h"
 
-scoped_ptr<infobars::InfoBar> CreateConfirmInfoBar(
-    scoped_ptr<ConfirmInfoBarDelegate> delegate) {
-  scoped_ptr<InfoBarIOS> infobar(new InfoBarIOS(std::move(delegate)));
+std::unique_ptr<infobars::InfoBar> CreateConfirmInfoBar(
+    std::unique_ptr<ConfirmInfoBarDelegate> delegate) {
+  std::unique_ptr<InfoBarIOS> infobar(new InfoBarIOS(std::move(delegate)));
   base::scoped_nsobject<ConfirmInfoBarController> controller(
       [[ConfirmInfoBarController alloc] initWithDelegate:infobar.get()]);
   infobar->SetController(controller);
diff --git a/ios/chrome/browser/installation_notifier.mm b/ios/chrome/browser/installation_notifier.mm
index 8cc6f9ad..1ea3e3ee 100644
--- a/ios/chrome/browser/installation_notifier.mm
+++ b/ios/chrome/browser/installation_notifier.mm
@@ -4,13 +4,14 @@
 
 #import "ios/chrome/browser/installation_notifier.h"
 
-#include <stdint.h>
 #import <UIKit/UIKit.h>
+#include <stdint.h>
+
+#include <memory>
 
 #include "base/ios/weak_nsobject.h"
 #include "base/logging.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
 #include "ios/web/public/web_thread.h"
 #include "net/base/backoff_entry.h"
@@ -62,7 +63,7 @@
 @end
 
 @implementation InstallationNotifier {
-  scoped_ptr<net::BackoffEntry> _backoffEntry;
+  std::unique_ptr<net::BackoffEntry> _backoffEntry;
   base::scoped_nsprotocol<id<DispatcherProtocol>> _dispatcher;
   // Dictionary mapping URL schemes to mutable sets of observers.
   base::scoped_nsobject<NSMutableDictionary> _installedAppObservers;
diff --git a/ios/chrome/browser/installation_notifier_unittest.mm b/ios/chrome/browser/installation_notifier_unittest.mm
index 1910a2d..dbca44d2 100644
--- a/ios/chrome/browser/installation_notifier_unittest.mm
+++ b/ios/chrome/browser/installation_notifier_unittest.mm
@@ -151,7 +151,7 @@
   base::scoped_nsobject<MockNotificationReceiver> notificationReceiver1_;
   base::scoped_nsobject<MockNotificationReceiver> notificationReceiver2_;
   base::scoped_nsobject<MockUIApplication> sharedApplication_;
-  scoped_ptr<base::HistogramTester> histogramTester_;
+  std::unique_ptr<base::HistogramTester> histogramTester_;
 };
 
 TEST_F(InstallationNotifierTest, RegisterWithAppAlreadyInstalled) {
diff --git a/ios/chrome/browser/interstitials/ios_chrome_controller_client.mm b/ios/chrome/browser/interstitials/ios_chrome_controller_client.mm
index 9579649..19b5ac8 100644
--- a/ios/chrome/browser/interstitials/ios_chrome_controller_client.mm
+++ b/ios/chrome/browser/interstitials/ios_chrome_controller_client.mm
@@ -60,5 +60,5 @@
 }
 
 const std::string IOSChromeControllerClient::GetExtendedReportingPrefName() {
-  return prefs::kSafeBrowsingExtendedReportingEnabled;
+  return std::string();
 }
diff --git a/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm b/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm
index 79d79be..dc9158a 100644
--- a/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm
+++ b/ios/chrome/browser/interstitials/ios_security_interstitial_page.mm
@@ -35,7 +35,7 @@
   DCHECK(!web_interstitial_);
   web_interstitial_ = web::WebInterstitial::CreateHtmlInterstitial(
       web_state_, ShouldCreateNewNavigation(), request_url_,
-      scoped_ptr<web::HtmlWebInterstitialDelegate>(this));
+      std::unique_ptr<web::HtmlWebInterstitialDelegate>(this));
   web_interstitial_->Show();
   AfterShow();
 }
diff --git a/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h b/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h
index 5fc2bf3..8c2aa6a 100644
--- a/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h
+++ b/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_INVALIDATION_IOS_CHROME_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_
 #define IOS_CHROME_BROWSER_INVALIDATION_IOS_CHROME_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
@@ -45,7 +47,7 @@
   ~IOSChromeProfileInvalidationProviderFactory() override;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
diff --git a/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.mm b/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.mm
index 3baae19..b4c9c73 100644
--- a/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.mm
+++ b/ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.mm
@@ -4,10 +4,11 @@
 
 #include "ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/gcm_driver/gcm_profile_service.h"
 #include "components/invalidation/impl/invalidator_storage.h"
@@ -57,29 +58,30 @@
 IOSChromeProfileInvalidationProviderFactory::
     ~IOSChromeProfileInvalidationProviderFactory() {}
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromeProfileInvalidationProviderFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
 
-  scoped_ptr<IdentityProvider> identity_provider(new ProfileIdentityProvider(
-      ios::SigninManagerFactory::GetForBrowserState(browser_state),
-      OAuth2TokenServiceFactory::GetForBrowserState(browser_state),
-      // LoginUIServiceFactory is not built on iOS.
-      base::Closure()));
+  std::unique_ptr<IdentityProvider> identity_provider(
+      new ProfileIdentityProvider(
+          ios::SigninManagerFactory::GetForBrowserState(browser_state),
+          OAuth2TokenServiceFactory::GetForBrowserState(browser_state),
+          // LoginUIServiceFactory is not built on iOS.
+          base::Closure()));
 
-  scoped_ptr<TiclInvalidationService> service(new TiclInvalidationService(
+  std::unique_ptr<TiclInvalidationService> service(new TiclInvalidationService(
       web::GetWebClient()->GetUserAgent(false), std::move(identity_provider),
-      make_scoped_ptr(new invalidation::TiclProfileSettingsProvider(
+      base::WrapUnique(new invalidation::TiclProfileSettingsProvider(
           browser_state->GetPrefs())),
       IOSChromeGCMProfileServiceFactory::GetForBrowserState(browser_state)
           ->driver(),
       browser_state->GetRequestContext()));
   service->Init(
-      make_scoped_ptr(new InvalidatorStorage(browser_state->GetPrefs())));
+      base::WrapUnique(new InvalidatorStorage(browser_state->GetPrefs())));
 
-  return make_scoped_ptr(new ProfileInvalidationProvider(std::move(service)));
+  return base::WrapUnique(new ProfileInvalidationProvider(std::move(service)));
 }
 
 void IOSChromeProfileInvalidationProviderFactory::RegisterBrowserStatePrefs(
diff --git a/ios/chrome/browser/ios_chrome_io_thread.h b/ios/chrome/browser/ios_chrome_io_thread.h
index 34d4507..7827dcca 100644
--- a/ios/chrome/browser/ios_chrome_io_thread.h
+++ b/ios/chrome/browser/ios_chrome_io_thread.h
@@ -9,6 +9,7 @@
 #include <stdint.h>
 
 #include <map>
+#include <memory>
 #include <set>
 #include <string>
 #include <vector>
@@ -16,7 +17,6 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string_piece.h"
 #include "base/time/time.h"
@@ -105,31 +105,32 @@
 
     // The "system" NetworkDelegate, used for BrowserState-agnostic network
     // events.
-    scoped_ptr<net::NetworkDelegate> system_network_delegate;
-    scoped_ptr<net::HostResolver> host_resolver;
-    scoped_ptr<net::CertVerifier> cert_verifier;
+    std::unique_ptr<net::NetworkDelegate> system_network_delegate;
+    std::unique_ptr<net::HostResolver> host_resolver;
+    std::unique_ptr<net::CertVerifier> cert_verifier;
     // The ChannelIDService must outlive the HttpTransactionFactory.
-    scoped_ptr<net::ChannelIDService> system_channel_id_service;
+    std::unique_ptr<net::ChannelIDService> system_channel_id_service;
     // This TransportSecurityState doesn't load or save any state. It's only
     // used to enforce pinning for system requests and will only use built-in
     // pins.
-    scoped_ptr<net::TransportSecurityState> transport_security_state;
-    scoped_ptr<net::CTVerifier> cert_transparency_verifier;
-    scoped_ptr<net::CTPolicyEnforcer> ct_policy_enforcer;
+    std::unique_ptr<net::TransportSecurityState> transport_security_state;
+    std::unique_ptr<net::CTVerifier> cert_transparency_verifier;
+    std::unique_ptr<net::CTPolicyEnforcer> ct_policy_enforcer;
     scoped_refptr<net::SSLConfigService> ssl_config_service;
-    scoped_ptr<net::HttpAuthPreferences> http_auth_preferences;
-    scoped_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory;
-    scoped_ptr<net::HttpServerProperties> http_server_properties;
-    scoped_ptr<net::URLRequestBackoffManager> url_request_backoff_manager;
-    scoped_ptr<net::ProxyService> system_proxy_service;
-    scoped_ptr<net::HttpNetworkSession> system_http_network_session;
-    scoped_ptr<net::HttpTransactionFactory> system_http_transaction_factory;
-    scoped_ptr<net::URLRequestJobFactory> system_url_request_job_factory;
-    scoped_ptr<net::URLRequestContext> system_request_context;
+    std::unique_ptr<net::HttpAuthPreferences> http_auth_preferences;
+    std::unique_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory;
+    std::unique_ptr<net::HttpServerProperties> http_server_properties;
+    std::unique_ptr<net::URLRequestBackoffManager> url_request_backoff_manager;
+    std::unique_ptr<net::ProxyService> system_proxy_service;
+    std::unique_ptr<net::HttpNetworkSession> system_http_network_session;
+    std::unique_ptr<net::HttpTransactionFactory>
+        system_http_transaction_factory;
+    std::unique_ptr<net::URLRequestJobFactory> system_url_request_job_factory;
+    std::unique_ptr<net::URLRequestContext> system_request_context;
     SystemRequestContextLeakChecker system_request_context_leak_checker;
-    scoped_ptr<net::CookieStore> system_cookie_store;
-    scoped_ptr<net::HttpUserAgentSettings> http_user_agent_settings;
-    scoped_ptr<net::NetworkQualityEstimator> network_quality_estimator;
+    std::unique_ptr<net::CookieStore> system_cookie_store;
+    std::unique_ptr<net::HttpUserAgentSettings> http_user_agent_settings;
+    std::unique_ptr<net::NetworkQualityEstimator> network_quality_estimator;
     uint16_t testing_fixed_http_port;
     uint16_t testing_fixed_https_port;
     Optional<bool> enable_tcp_fast_open_for_ssl;
@@ -375,17 +376,18 @@
 
   // Observer that logs network changes to the ChromeNetLog.
   class LoggingNetworkChangeObserver;
-  scoped_ptr<LoggingNetworkChangeObserver> network_change_observer_;
+  std::unique_ptr<LoggingNetworkChangeObserver> network_change_observer_;
 
   // This is an instance of the default SSLConfigServiceManager for the current
   // platform and it gets SSL preferences from local_state object.
-  scoped_ptr<ssl_config::SSLConfigServiceManager> ssl_config_service_manager_;
+  std::unique_ptr<ssl_config::SSLConfigServiceManager>
+      ssl_config_service_manager_;
 
   // These member variables are initialized by a task posted to the IO thread,
   // which gets posted by calling certain member functions of IOSChromeIOThread.
-  scoped_ptr<net::ProxyConfigService> system_proxy_config_service_;
+  std::unique_ptr<net::ProxyConfigService> system_proxy_config_service_;
 
-  scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
+  std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
 
   scoped_refptr<net::URLRequestContextGetter>
       system_url_request_context_getter_;
diff --git a/ios/chrome/browser/ios_chrome_io_thread.mm b/ios/chrome/browser/ios_chrome_io_thread.mm
index 46f014e..862fc42 100644
--- a/ios/chrome/browser/ios_chrome_io_thread.mm
+++ b/ios/chrome/browser/ios_chrome_io_thread.mm
@@ -17,6 +17,7 @@
 #include "base/environment.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/field_trial.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
@@ -160,12 +161,13 @@
   }
 };
 
-scoped_ptr<net::HostResolver> CreateGlobalHostResolver(net::NetLog* net_log) {
+std::unique_ptr<net::HostResolver> CreateGlobalHostResolver(
+    net::NetLog* net_log) {
   TRACE_EVENT0("startup", "IOSChromeIOThread::CreateGlobalHostResolver");
   const base::CommandLine& command_line =
       *base::CommandLine::ForCurrentProcess();
 
-  scoped_ptr<net::HostResolver> global_host_resolver =
+  std::unique_ptr<net::HostResolver> global_host_resolver =
       net::HostResolver::CreateSystemResolver(net::HostResolver::Options(),
                                               net_log);
 
@@ -175,7 +177,7 @@
   if (!command_line.HasSwitch(switches::kIOSHostResolverRules))
     return global_host_resolver;
 
-  scoped_ptr<net::MappedHostResolver> remapped_resolver(
+  std::unique_ptr<net::MappedHostResolver> remapped_resolver(
       new net::MappedHostResolver(std::move(global_host_resolver)));
   remapped_resolver->SetRulesFromString(
       command_line.GetSwitchValueASCII(switches::kIOSHostResolverRules));
@@ -406,7 +408,7 @@
   // Setup the HistogramWatcher to run on the IO thread.
   net::NetworkChangeNotifier::InitHistogramWatcher();
 
-  scoped_ptr<IOSChromeNetworkDelegate> chrome_network_delegate(
+  std::unique_ptr<IOSChromeNetworkDelegate> chrome_network_delegate(
       new IOSChromeNetworkDelegate());
 
   globals_->system_network_delegate = std::move(chrome_network_delegate);
@@ -416,7 +418,7 @@
   variations::GetVariationParams(kNetworkQualityEstimatorFieldTrialName,
                                  &network_quality_estimator_params);
 
-  scoped_ptr<net::ExternalEstimateProvider> external_estimate_provider;
+  std::unique_ptr<net::ExternalEstimateProvider> external_estimate_provider;
   // Pass ownership.
   globals_->network_quality_estimator.reset(new net::NetworkQualityEstimator(
       std::move(external_estimate_provider), network_quality_estimator_params));
@@ -1021,7 +1023,7 @@
   // Data URLs are always loaded through the system request context on iOS
   // (due to UIWebView limitations).
   bool set_protocol = system_job_factory->SetProtocolHandler(
-      url::kDataScheme, make_scoped_ptr(new net::DataProtocolHandler()));
+      url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler()));
   DCHECK(set_protocol);
   globals->system_url_request_job_factory.reset(system_job_factory);
   context->set_job_factory(globals->system_url_request_job_factory.get());
diff --git a/ios/chrome/browser/ios_chrome_main_parts.h b/ios/chrome/browser/ios_chrome_main_parts.h
index 4ddc094..8a372d93 100644
--- a/ios/chrome/browser/ios_chrome_main_parts.h
+++ b/ios/chrome/browser/ios_chrome_main_parts.h
@@ -5,9 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_IOS_CHROME_MAIN_PARTS_H_
 #define IOS_CHROME_BROWSER_IOS_CHROME_MAIN_PARTS_H_
 
+#include <memory>
+
 #include "base/command_line.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/field_trial.h"
 #include "ios/web/public/app/web_main_parts.h"
 
@@ -46,17 +47,17 @@
 
   const base::CommandLine& parsed_command_line_;
 
-  scoped_ptr<ApplicationContextImpl> application_context_;
+  std::unique_ptr<ApplicationContextImpl> application_context_;
   scoped_refptr<metrics::TrackingSynchronizer> tracking_synchronizer_;
 
   // Statistical testing infrastructure for the entire browser. NULL until
   // SetUpMetricsAndFieldTrials is called.
-  scoped_ptr<base::FieldTrialList> field_trial_list_;
+  std::unique_ptr<base::FieldTrialList> field_trial_list_;
 
   PrefService* local_state_;
 
   // Initialized in SetupMetricsAndFieldTrials.
-  scoped_ptr<ios::FieldTrialSynchronizer> field_trial_synchronizer_;
+  std::unique_ptr<ios::FieldTrialSynchronizer> field_trial_synchronizer_;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeMainParts);
 };
diff --git a/ios/chrome/browser/ios_chrome_main_parts.mm b/ios/chrome/browser/ios_chrome_main_parts.mm
index c75c83487..fab26e1 100644
--- a/ios/chrome/browser/ios_chrome_main_parts.mm
+++ b/ios/chrome/browser/ios_chrome_main_parts.mm
@@ -8,6 +8,7 @@
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/path_service.h"
 #include "base/time/default_tick_clock.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
@@ -105,7 +106,7 @@
 
   // Initialize tracking synchronizer system.
   tracking_synchronizer_ = new metrics::TrackingSynchronizer(
-      make_scoped_ptr(new base::DefaultTickClock()),
+      base::WrapUnique(new base::DefaultTickClock()),
       base::Bind(&metrics::IOSTrackingSynchronizerDelegate::Create));
 
   // Now the command line has been mutated based on about:flags, we can setup
@@ -149,7 +150,7 @@
       FirstRun::GetPingDelayPrefName());
   // Negative ping delay means to send ping immediately after a first search is
   // recorded.
-  rlz::RLZTracker::SetRlzDelegate(make_scoped_ptr(new RLZTrackerDelegateImpl));
+  rlz::RLZTracker::SetRlzDelegate(base::WrapUnique(new RLZTrackerDelegateImpl));
   rlz::RLZTracker::InitRlzDelayed(
       FirstRun::IsChromeFirstRun(), ping_delay < 0,
       base::TimeDelta::FromMilliseconds(abs(ping_delay)),
@@ -221,7 +222,7 @@
     CHECK(result) << "Invalid --" << switches::kIOSForceVariationIds
                   << " list specified.";
   }
-  scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
+  std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   feature_list->InitializeFromCommandLine(
       command_line->GetSwitchValueASCII(switches::kEnableIOSFeatures),
       command_line->GetSwitchValueASCII(switches::kDisableIOSFeatures));
diff --git a/ios/chrome/browser/memory/memory_debugger.mm b/ios/chrome/browser/memory/memory_debugger.mm
index b37625a..7762fbe 100644
--- a/ios/chrome/browser/memory/memory_debugger.mm
+++ b/ios/chrome/browser/memory/memory_debugger.mm
@@ -42,7 +42,7 @@
   base::scoped_nsobject<UITextField> _continuousMemoryWarningField;
 
   // A place to store the artifical memory bloat.
-  scoped_ptr<uint8_t> _bloat;
+  std::unique_ptr<uint8_t> _bloat;
 
   // Distance the view was pushed up to accomodate the keyboard.
   CGFloat _keyboardOffset;
diff --git a/ios/chrome/browser/memory/memory_metrics.cc b/ios/chrome/browser/memory/memory_metrics.cc
index 1de2e2a..43bf6874 100644
--- a/ios/chrome/browser/memory/memory_metrics.cc
+++ b/ios/chrome/browser/memory/memory_metrics.cc
@@ -8,9 +8,10 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/logging.h"
 #include "base/mac/scoped_mach_port.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/process/process_handle.h"
 #include "base/process/process_metrics.h"
 #include "build/build_config.h"
@@ -47,7 +48,7 @@
 
 uint64_t GetRealMemoryUsedInBytes() {
   base::ProcessHandle process_handle = base::GetCurrentProcessHandle();
-  scoped_ptr<base::ProcessMetrics> process_metrics(
+  std::unique_ptr<base::ProcessMetrics> process_metrics(
       base::ProcessMetrics::CreateProcessMetrics(process_handle));
   return static_cast<uint64_t>(process_metrics->GetWorkingSetSize());
 }
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc
index cb480c27..7223da6 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.cc
@@ -14,6 +14,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "base/process/process_metrics.h"
 #include "base/rand_util.h"
@@ -91,12 +92,13 @@
 }
 
 // static
-scoped_ptr<IOSChromeMetricsServiceClient> IOSChromeMetricsServiceClient::Create(
+std::unique_ptr<IOSChromeMetricsServiceClient>
+IOSChromeMetricsServiceClient::Create(
     metrics::MetricsStateManager* state_manager,
     PrefService* local_state) {
   // Perform two-phase initialization so that |client->metrics_service_| only
   // receives pointers to fully constructed objects.
-  scoped_ptr<IOSChromeMetricsServiceClient> client(
+  std::unique_ptr<IOSChromeMetricsServiceClient> client(
       new IOSChromeMetricsServiceClient(state_manager));
   client->Initialize();
 
@@ -174,10 +176,10 @@
   }
 }
 
-scoped_ptr<metrics::MetricsLogUploader>
+std::unique_ptr<metrics::MetricsLogUploader>
 IOSChromeMetricsServiceClient::CreateUploader(
     const base::Callback<void(int)>& on_upload_complete) {
-  return scoped_ptr<metrics::MetricsLogUploader>(
+  return std::unique_ptr<metrics::MetricsLogUploader>(
       new metrics::NetMetricsLogUploader(
           GetApplicationContext()->GetSystemURLRequestContext(),
           metrics::kDefaultMetricsServerUrl, metrics::kDefaultMetricsMimeType,
@@ -214,51 +216,52 @@
 
   // Register metrics providers.
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(new metrics::NetworkMetricsProvider(
-          web::WebThread::GetBlockingPool())));
+      std::unique_ptr<metrics::MetricsProvider>(
+          new metrics::NetworkMetricsProvider(
+              web::WebThread::GetBlockingPool())));
 
   // Currently, we configure OmniboxMetricsProvider to not log events to UMA
   // if there is a single incognito session visible. In the future, it may
   // be worth revisiting this to still log events from non-incognito sessions.
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider(
+      std::unique_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider(
           base::Bind(&::IsOffTheRecordSessionActive))));
 
   stability_metrics_provider_ = new IOSChromeStabilityMetricsProvider(
       GetApplicationContext()->GetLocalState());
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(stability_metrics_provider_));
+      std::unique_ptr<metrics::MetricsProvider>(stability_metrics_provider_));
 
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(
+      std::unique_ptr<metrics::MetricsProvider>(
           new metrics::ScreenInfoMetricsProvider));
 
   drive_metrics_provider_ = new metrics::DriveMetricsProvider(
       web::WebThread::GetTaskRunnerForThread(web::WebThread::FILE),
       ios::FILE_LOCAL_STATE);
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(drive_metrics_provider_));
+      std::unique_ptr<metrics::MetricsProvider>(drive_metrics_provider_));
 
   profiler_metrics_provider_ =
       new metrics::ProfilerMetricsProvider(base::Bind(&IsCellularLogicEnabled));
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(profiler_metrics_provider_));
+      std::unique_ptr<metrics::MetricsProvider>(profiler_metrics_provider_));
 
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(
+      std::unique_ptr<metrics::MetricsProvider>(
           new metrics::CallStackProfileMetricsProvider));
 
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(
-          SigninStatusMetricsProvider::CreateInstance(make_scoped_ptr(
+      std::unique_ptr<metrics::MetricsProvider>(
+          SigninStatusMetricsProvider::CreateInstance(base::WrapUnique(
               new IOSChromeSigninStatusMetricsProviderDelegate))));
 
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(
+      std::unique_ptr<metrics::MetricsProvider>(
           new MobileSessionShutdownMetricsProvider(metrics_service_.get())));
 
   metrics_service_->RegisterMetricsProvider(
-      scoped_ptr<metrics::MetricsProvider>(
+      std::unique_ptr<metrics::MetricsProvider>(
           new sync_driver::DeviceCountMetricsProvider(
               base::Bind(&IOSChromeSyncClient::GetDeviceInfoTrackers))));
 }
@@ -308,7 +311,7 @@
   // shared between the iOS port's usage and
   // ChromeMetricsServiceClient::CollectFinalHistograms()'s usage of
   // MetricsMemoryDetails.
-  scoped_ptr<base::ProcessMetrics> process_metrics(
+  std::unique_ptr<base::ProcessMetrics> process_metrics(
       base::ProcessMetrics::CreateProcessMetrics(
           base::GetCurrentProcessHandle()));
   UMA_HISTOGRAM_MEMORY_KB("Memory.Browser",
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h
index f2a9f8d3..f0014a37 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h
@@ -7,11 +7,11 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "components/metrics/metrics_service_client.h"
@@ -44,7 +44,7 @@
   ~IOSChromeMetricsServiceClient() override;
 
   // Factory function.
-  static scoped_ptr<IOSChromeMetricsServiceClient> Create(
+  static std::unique_ptr<IOSChromeMetricsServiceClient> Create(
       metrics::MetricsStateManager* state_manager,
       PrefService* local_state);
 
@@ -65,7 +65,7 @@
   void InitializeSystemProfileMetrics(
       const base::Closure& done_callback) override;
   void CollectFinalMetricsForLog(const base::Closure& done_callback) override;
-  scoped_ptr<metrics::MetricsLogUploader> CreateUploader(
+  std::unique_ptr<metrics::MetricsLogUploader> CreateUploader(
       const base::Callback<void(int)>& on_upload_complete) override;
   base::TimeDelta GetStandardUploadInterval() override;
   base::string16 GetRegistryBackupKey() override;
@@ -120,7 +120,7 @@
   metrics::MetricsStateManager* metrics_state_manager_;
 
   // The MetricsService that |this| is a client of.
-  scoped_ptr<metrics::MetricsService> metrics_service_;
+  std::unique_ptr<metrics::MetricsService> metrics_service_;
 
   // The IOSChromeStabilityMetricsProvider instance that was registered with
   // MetricsService. Has the same lifetime as |metrics_service_|.
@@ -144,12 +144,12 @@
   const base::TimeTicks start_time_;
 
   // Subscription for receiving callbacks that a tab was parented.
-  scoped_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
+  std::unique_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
       tab_parented_subscription_;
 
   // Subscription for receiving callbacks that a URL was opened from the
   // omnibox.
-  scoped_ptr<base::CallbackList<void(OmniboxLog*)>::Subscription>
+  std::unique_ptr<base::CallbackList<void(OmniboxLog*)>::Subscription>
       omnibox_url_opened_subscription_;
 
   // Whether this client has already uploaded profiler data during this session.
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.h b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.h
index 314c00b..38d939f 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.h
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_METRICS_IOS_CHROME_METRICS_SERVICES_MANAGER_CLIENT_H_
 #define IOS_CHROME_BROWSER_METRICS_IOS_CHROME_METRICS_SERVICES_MANAGER_CLIENT_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "components/metrics_services_manager/metrics_services_manager_client.h"
 
@@ -26,9 +27,10 @@
 
  private:
   // metrics_services_manager::MetricsServicesManagerClient:
-  scoped_ptr<rappor::RapporService> CreateRapporService() override;
-  scoped_ptr<variations::VariationsService> CreateVariationsService() override;
-  scoped_ptr<metrics::MetricsServiceClient> CreateMetricsServiceClient()
+  std::unique_ptr<rappor::RapporService> CreateRapporService() override;
+  std::unique_ptr<variations::VariationsService> CreateVariationsService()
+      override;
+  std::unique_ptr<metrics::MetricsServiceClient> CreateMetricsServiceClient()
       override;
   net::URLRequestContextGetter* GetURLRequestContext() override;
   bool IsSafeBrowsingEnabled(const base::Closure& on_update_callback) override;
@@ -40,7 +42,7 @@
   metrics::MetricsStateManager* GetMetricsStateManager();
 
   // MetricsStateManager which is passed as a parameter to service constructors.
-  scoped_ptr<metrics::MetricsStateManager> metrics_state_manager_;
+  std::unique_ptr<metrics::MetricsStateManager> metrics_state_manager_;
 
   // Ensures that all functions are called from the same thread.
   base::ThreadChecker thread_checker_;
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
index 5c94899..1337ab2 100644
--- a/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
+++ b/ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.mm
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "components/metrics/metrics_state_manager.h"
 #include "components/prefs/pref_service.h"
 #include "components/rappor/rappor_service.h"
@@ -23,8 +24,8 @@
 
 void PostStoreMetricsClientInfo(const metrics::ClientInfo& client_info) {}
 
-scoped_ptr<metrics::ClientInfo> LoadMetricsClientInfo() {
-  return scoped_ptr<metrics::ClientInfo>();
+std::unique_ptr<metrics::ClientInfo> LoadMetricsClientInfo() {
+  return std::unique_ptr<metrics::ClientInfo>();
 }
 
 }  // namespace
@@ -36,18 +37,16 @@
 }
 
 IOSChromeMetricsServicesManagerClient::
-    ~IOSChromeMetricsServicesManagerClient() {
-  ios::GetChromeBrowserProvider()->OnMetricsServicesManagerClientDestroyed();
-}
+    ~IOSChromeMetricsServicesManagerClient() = default;
 
-scoped_ptr<rappor::RapporService>
+std::unique_ptr<rappor::RapporService>
 IOSChromeMetricsServicesManagerClient::CreateRapporService() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  return make_scoped_ptr(new rappor::RapporService(
+  return base::WrapUnique(new rappor::RapporService(
       local_state_, base::Bind(&::IsOffTheRecordSessionActive)));
 }
 
-scoped_ptr<variations::VariationsService>
+std::unique_ptr<variations::VariationsService>
 IOSChromeMetricsServicesManagerClient::CreateVariationsService() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
@@ -55,12 +54,12 @@
   // a dummy value for the name of the switch that disables background
   // networking.
   return variations::VariationsService::Create(
-      make_scoped_ptr(new IOSChromeVariationsServiceClient), local_state_,
+      base::WrapUnique(new IOSChromeVariationsServiceClient), local_state_,
       GetMetricsStateManager(), "dummy-disable-background-switch",
       ::CreateUIStringOverrider());
 }
 
-scoped_ptr<metrics::MetricsServiceClient>
+std::unique_ptr<metrics::MetricsServiceClient>
 IOSChromeMetricsServicesManagerClient::CreateMetricsServiceClient() {
   DCHECK(thread_checker_.CalledOnValidThread());
   return IOSChromeMetricsServiceClient::Create(GetMetricsStateManager(),
diff --git a/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider_unittest.cc b/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider_unittest.cc
index 2202f69d..a4399c4 100644
--- a/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider_unittest.cc
+++ b/ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider_unittest.cc
@@ -23,7 +23,7 @@
   TestingPrefServiceSimple* prefs() { return prefs_.get(); }
 
  private:
-  scoped_ptr<TestingPrefServiceSimple> prefs_;
+  std::unique_ptr<TestingPrefServiceSimple> prefs_;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeStabilityMetricsProviderTest);
 };
diff --git a/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h b/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h
index 18c9f4ca..8255216 100644
--- a/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h
+++ b/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_METRICS_MOBILE_SESSION_SHUTDOWN_METRICS_PROVIDER_H_
 #define IOS_CHROME_BROWSER_METRICS_MOBILE_SESSION_SHUTDOWN_METRICS_PROVIDER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/metrics/metrics_provider.h"
 
 namespace metrics {
diff --git a/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider_unittest.mm b/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider_unittest.mm
index 09c8d0c..0e3955a 100644
--- a/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider_unittest.mm
+++ b/ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider_unittest.mm
@@ -4,9 +4,10 @@
 
 #include "ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h"
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/test/histogram_tester.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_service.h"
@@ -77,9 +78,10 @@
  protected:
   TestingPrefServiceSimple local_state_;
   metrics::TestMetricsServiceClient metrics_client_;
-  scoped_ptr<metrics::MetricsStateManager> metrics_state_;
-  scoped_ptr<metrics::MetricsService> metrics_service_;
-  scoped_ptr<MobileSessionShutdownMetricsProviderForTesting> metrics_provider_;
+  std::unique_ptr<metrics::MetricsStateManager> metrics_state_;
+  std::unique_ptr<metrics::MetricsService> metrics_service_;
+  std::unique_ptr<MobileSessionShutdownMetricsProviderForTesting>
+      metrics_provider_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MobileSessionShutdownMetricsProviderTest);
diff --git a/ios/chrome/browser/net/cookie_util.h b/ios/chrome/browser/net/cookie_util.h
index 1f21f08c..73197e7 100644
--- a/ios/chrome/browser/net/cookie_util.h
+++ b/ios/chrome/browser/net/cookie_util.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_NET_COOKIE_UTIL_H_
 #define IOS_CHROME_BROWSER_NET_COOKIE_UTIL_H_
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "net/cookies/canonical_cookie.h"
@@ -74,7 +76,8 @@
 
 // Creates a cookie store wich is internally either a CookieMonster or a
 // CookieStoreIOS.
-scoped_ptr<net::CookieStore> CreateCookieStore(const CookieStoreConfig& config);
+std::unique_ptr<net::CookieStore> CreateCookieStore(
+    const CookieStoreConfig& config);
 
 // Returns true if the cookies should be cleared.
 // Current implementation returns true if the device has rebooted since the
diff --git a/ios/chrome/browser/net/cookie_util.mm b/ios/chrome/browser/net/cookie_util.mm
index 6b2520fd..7ae2920 100644
--- a/ios/chrome/browser/net/cookie_util.mm
+++ b/ios/chrome/browser/net/cookie_util.mm
@@ -10,6 +10,7 @@
 
 #include "base/logging.h"
 #import "base/mac/bind_objc_block.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/net/cookies/cookie_store_ios.h"
@@ -44,11 +45,11 @@
 }
 
 // Creates a CookieMonster configured by |config|.
-scoped_ptr<net::CookieMonster> CreateCookieMonster(
+std::unique_ptr<net::CookieMonster> CreateCookieMonster(
     const CookieStoreConfig& config) {
   if (config.path.empty()) {
     // Empty path means in-memory store.
-    return make_scoped_ptr(new net::CookieMonster(nullptr, nullptr));
+    return base::WrapUnique(new net::CookieMonster(nullptr, nullptr));
   }
 
   const bool restore_old_session_cookies =
@@ -56,7 +57,7 @@
   scoped_refptr<net::SQLitePersistentCookieStore> persistent_store =
       CreatePersistentCookieStore(config.path, restore_old_session_cookies,
                                   config.crypto_delegate);
-  scoped_ptr<net::CookieMonster> cookie_monster(
+  std::unique_ptr<net::CookieMonster> cookie_monster(
       new net::CookieMonster(persistent_store.get(), nullptr));
   if (restore_old_session_cookies)
     cookie_monster->SetPersistSessionCookies(true);
@@ -78,7 +79,7 @@
 
 CookieStoreConfig::~CookieStoreConfig() {}
 
-scoped_ptr<net::CookieStore> CreateCookieStore(
+std::unique_ptr<net::CookieStore> CreateCookieStore(
     const CookieStoreConfig& config) {
   if (config.cookie_store_type == CookieStoreConfig::COOKIE_MONSTER)
     return CreateCookieMonster(config);
@@ -91,7 +92,7 @@
         config.path, true /* restore_old_session_cookies */,
         config.crypto_delegate);
   }
-  return make_scoped_ptr(new net::CookieStoreIOS(persistent_store.get()));
+  return base::WrapUnique(new net::CookieStoreIOS(persistent_store.get()));
 }
 
 bool ShouldClearSessionCookies() {
diff --git a/ios/chrome/browser/net/image_fetcher.mm b/ios/chrome/browser/net/image_fetcher.mm
index 245045c..264120b 100644
--- a/ios/chrome/browser/net/image_fetcher.mm
+++ b/ios/chrome/browser/net/image_fetcher.mm
@@ -112,7 +112,7 @@
   }
 
   // Ensures that |fetcher| will be deleted in the event of early return.
-  scoped_ptr<const net::URLFetcher> fetcher_deleter(fetcher);
+  std::unique_ptr<const net::URLFetcher> fetcher_deleter(fetcher);
 
   // Retrieves the callback and ensures that it will be deleted in the event
   // of early return.
diff --git a/ios/chrome/browser/net/image_fetcher_unittest.mm b/ios/chrome/browser/net/image_fetcher_unittest.mm
index fd91b8f..d315669 100644
--- a/ios/chrome/browser/net/image_fetcher_unittest.mm
+++ b/ios/chrome/browser/net/image_fetcher_unittest.mm
@@ -103,7 +103,7 @@
   base::mac::ScopedBlock<image_fetcher::ImageFetchedCallback> callback_;
   net::TestURLFetcherFactory factory_;
   scoped_refptr<base::SequencedWorkerPool> pool_;
-  scoped_ptr<image_fetcher::ImageFetcher> image_fetcher_;
+  std::unique_ptr<image_fetcher::ImageFetcher> image_fetcher_;
   UIImage* result_;
   bool called_;
 };
diff --git a/ios/chrome/browser/net/ios_chrome_network_delegate.h b/ios/chrome/browser/net/ios_chrome_network_delegate.h
index 50fe056f0..41efdb79 100644
--- a/ios/chrome/browser/net/ios_chrome_network_delegate.h
+++ b/ios/chrome/browser/net/ios_chrome_network_delegate.h
@@ -7,9 +7,10 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
 #include "net/base/network_delegate_impl.h"
 
diff --git a/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc b/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc
index 0c53bc14..cabb942 100644
--- a/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc
+++ b/ios/chrome/browser/net/ios_chrome_url_request_context_getter.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/compiler_specific.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state_io_data.h"
 #include "ios/chrome/browser/ios_chrome_io_thread.h"
@@ -83,7 +84,7 @@
 // ----------------------------------------------------------------------------
 
 IOSChromeURLRequestContextGetter::IOSChromeURLRequestContextGetter(
-    scoped_ptr<IOSChromeURLRequestContextFactory> factory)
+    std::unique_ptr<IOSChromeURLRequestContextFactory> factory)
     : factory_(std::move(factory)), url_request_context_(nullptr) {
   DCHECK(factory_);
 }
@@ -126,7 +127,7 @@
     const ChromeBrowserStateIOData* io_data,
     ProtocolHandlerMap* protocol_handlers) {
   return new IOSChromeURLRequestContextGetter(
-      make_scoped_ptr(new FactoryForMain(io_data, protocol_handlers)));
+      base::WrapUnique(new FactoryForMain(io_data, protocol_handlers)));
 }
 
 // static
@@ -135,6 +136,6 @@
     net::URLRequestContextGetter* main_context,
     const ChromeBrowserStateIOData* io_data,
     const base::FilePath& partition_path) {
-  return new IOSChromeURLRequestContextGetter(make_scoped_ptr(
+  return new IOSChromeURLRequestContextGetter(base::WrapUnique(
       new FactoryForIsolatedApp(io_data, partition_path, main_context)));
 }
diff --git a/ios/chrome/browser/net/ios_chrome_url_request_context_getter.h b/ios/chrome/browser/net/ios_chrome_url_request_context_getter.h
index 531490d9..9e8cc8f 100644
--- a/ios/chrome/browser/net/ios_chrome_url_request_context_getter.h
+++ b/ios/chrome/browser/net/ios_chrome_url_request_context_getter.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_NET_IOS_CHROME_URL_REQUEST_CONTEXT_GETTER_H_
 #define IOS_CHROME_BROWSER_NET_IOS_CHROME_URL_REQUEST_CONTEXT_GETTER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/chrome/browser/net/net_types.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -25,7 +26,7 @@
   // Constructs a ChromeURLRequestContextGetter that will use |factory| to
   // create the URLRequestContext.
   explicit IOSChromeURLRequestContextGetter(
-      scoped_ptr<IOSChromeURLRequestContextFactory> factory);
+      std::unique_ptr<IOSChromeURLRequestContextFactory> factory);
 
   // Note that GetURLRequestContext() can only be called from the IO
   // thread (it will assert otherwise).
@@ -58,7 +59,7 @@
 
   // Deferred logic for creating a URLRequestContext.
   // Access only from the IO thread.
-  scoped_ptr<IOSChromeURLRequestContextFactory> factory_;
+  std::unique_ptr<IOSChromeURLRequestContextFactory> factory_;
 
   // NULL before initialization and after invalidation.
   // Otherwise, it is the URLRequestContext instance that
diff --git a/ios/chrome/browser/net/proxy_service_factory.cc b/ios/chrome/browser/net/proxy_service_factory.cc
index f0180bb..9ca7382d 100644
--- a/ios/chrome/browser/net/proxy_service_factory.cc
+++ b/ios/chrome/browser/net/proxy_service_factory.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "components/proxy_config/pref_proxy_config_tracker_impl.h"
 #include "ios/web/public/web_thread.h"
 #include "net/proxy/proxy_config_service.h"
@@ -14,9 +15,9 @@
 namespace ios {
 
 // static
-scoped_ptr<net::ProxyConfigService>
+std::unique_ptr<net::ProxyConfigService>
 ProxyServiceFactory::CreateProxyConfigService(PrefProxyConfigTracker* tracker) {
-  scoped_ptr<net::ProxyConfigService> base_service(
+  std::unique_ptr<net::ProxyConfigService> base_service(
       net::ProxyService::CreateSystemProxyConfigService(
           web::WebThread::GetTaskRunnerForThread(web::WebThread::IO),
           web::WebThread::GetTaskRunnerForThread(web::WebThread::FILE)));
@@ -24,33 +25,33 @@
 }
 
 // static
-scoped_ptr<PrefProxyConfigTracker>
+std::unique_ptr<PrefProxyConfigTracker>
 ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile(
     PrefService* browser_state_prefs,
     PrefService* local_state_prefs) {
-  return make_scoped_ptr(new PrefProxyConfigTrackerImpl(
+  return base::WrapUnique(new PrefProxyConfigTrackerImpl(
       browser_state_prefs,
       web::WebThread::GetTaskRunnerForThread(web::WebThread::IO)));
 }
 
 // static
-scoped_ptr<PrefProxyConfigTracker>
+std::unique_ptr<PrefProxyConfigTracker>
 ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState(
     PrefService* local_state_prefs) {
-  return make_scoped_ptr(new PrefProxyConfigTrackerImpl(
+  return base::WrapUnique(new PrefProxyConfigTrackerImpl(
       local_state_prefs,
       web::WebThread::GetTaskRunnerForThread(web::WebThread::IO)));
 }
 
 // static
-scoped_ptr<net::ProxyService> ProxyServiceFactory::CreateProxyService(
+std::unique_ptr<net::ProxyService> ProxyServiceFactory::CreateProxyService(
     net::NetLog* net_log,
     net::URLRequestContext* context,
     net::NetworkDelegate* network_delegate,
-    scoped_ptr<net::ProxyConfigService> proxy_config_service,
+    std::unique_ptr<net::ProxyConfigService> proxy_config_service,
     bool quick_check_enabled) {
   DCHECK_CURRENTLY_ON(web::WebThread::IO);
-  scoped_ptr<net::ProxyService> proxy_service(
+  std::unique_ptr<net::ProxyService> proxy_service(
       net::ProxyService::CreateUsingSystemProxyResolver(
           std::move(proxy_config_service), 0, net_log));
   proxy_service->set_quick_check_enabled(quick_check_enabled);
diff --git a/ios/chrome/browser/net/proxy_service_factory.h b/ios/chrome/browser/net/proxy_service_factory.h
index 7710680..a7cefa1 100644
--- a/ios/chrome/browser/net/proxy_service_factory.h
+++ b/ios/chrome/browser/net/proxy_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_NET_PROXY_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_NET_PROXY_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 class PrefProxyConfigTracker;
 class PrefService;
@@ -24,25 +25,25 @@
 class ProxyServiceFactory {
  public:
   // Creates a ProxyConfigService that delivers the system preferences.
-  static scoped_ptr<net::ProxyConfigService> CreateProxyConfigService(
+  static std::unique_ptr<net::ProxyConfigService> CreateProxyConfigService(
       PrefProxyConfigTracker* tracker);
 
   // Creates a PrefProxyConfigTracker that tracks browser state preferences.
-  static scoped_ptr<PrefProxyConfigTracker>
+  static std::unique_ptr<PrefProxyConfigTracker>
   CreatePrefProxyConfigTrackerOfProfile(PrefService* browser_state_prefs,
                                         PrefService* local_state_prefs);
 
   // Creates a PrefProxyConfigTracker that tracks local state only. This tracker
   // should be used for the system request context.
-  static scoped_ptr<PrefProxyConfigTracker>
+  static std::unique_ptr<PrefProxyConfigTracker>
   CreatePrefProxyConfigTrackerOfLocalState(PrefService* local_state_prefs);
 
   // Create a proxy service.
-  static scoped_ptr<net::ProxyService> CreateProxyService(
+  static std::unique_ptr<net::ProxyService> CreateProxyService(
       net::NetLog* net_log,
       net::URLRequestContext* context,
       net::NetworkDelegate* network_delegate,
-      scoped_ptr<net::ProxyConfigService> proxy_config_service,
+      std::unique_ptr<net::ProxyConfigService> proxy_config_service,
       bool quick_check_enabled);
 
  private:
diff --git a/ios/chrome/browser/net/retryable_url_fetcher.mm b/ios/chrome/browser/net/retryable_url_fetcher.mm
index 8269ca6..87aca533 100644
--- a/ios/chrome/browser/net/retryable_url_fetcher.mm
+++ b/ios/chrome/browser/net/retryable_url_fetcher.mm
@@ -4,8 +4,9 @@
 
 #import "ios/chrome/browser/net/retryable_url_fetcher.h"
 
+#include <memory>
+
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #include "net/http/http_status_code.h"
 #include "net/url_request/url_fetcher.h"
@@ -30,9 +31,9 @@
 
 @implementation RetryableURLFetcher {
   scoped_refptr<net::URLRequestContextGetter> requestContextGetter_;
-  scoped_ptr<URLRequestDelegate> fetcherDelegate_;
-  scoped_ptr<net::URLFetcher> fetcher_;
-  scoped_ptr<net::BackoffEntry> backoffEntry_;
+  std::unique_ptr<URLRequestDelegate> fetcherDelegate_;
+  std::unique_ptr<net::URLFetcher> fetcher_;
+  std::unique_ptr<net::BackoffEntry> backoffEntry_;
   int retryCount_;
   id<RetryableURLFetcherDelegate> delegate_;  // Weak.
 }
diff --git a/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm b/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm
index 9c8f48b1..a5934ad 100644
--- a/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm
+++ b/ios/chrome/browser/net/retryable_url_fetcher_unittest.mm
@@ -53,7 +53,7 @@
   }
 
   net::TestURLFetcherFactory factory_;
-  scoped_ptr<web::TestWebThread> io_thread_;
+  std::unique_ptr<web::TestWebThread> io_thread_;
   base::MessageLoop message_loop_;
   base::scoped_nsobject<TestRetryableURLFetcherDelegate> test_delegate_;
 };
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
index e142273..c60c19c 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.cc
@@ -5,6 +5,7 @@
 #include "ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.h"
 
 #include "base/json/json_reader.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "base/thread_task_runner_handle.h"
 #include "base/values.h"
@@ -30,7 +31,7 @@
     const ntp_snippets::NTPSnippetsService::SuccessCallback& success_callback,
     const ntp_snippets::NTPSnippetsService::ErrorCallback& error_callback) {
   base::JSONReader json_reader;
-  scoped_ptr<base::Value> value = json_reader.ReadToValue(json);
+  std::unique_ptr<base::Value> value = json_reader.ReadToValue(json);
   if (value) {
     base::ThreadTaskRunnerHandle::Get()->PostTask(
         FROM_HERE, base::Bind(success_callback, base::Passed(&value)));
@@ -66,7 +67,7 @@
 
 IOSChromeNTPSnippetsServiceFactory::~IOSChromeNTPSnippetsServiceFactory() {}
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromeNTPSnippetsServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* browser_state) const {
   ios::ChromeBrowserState* chrome_browser_state =
@@ -84,10 +85,10 @@
           ->GetSequencedTaskRunnerWithShutdownBehavior(
               base::SequencedWorkerPool::GetSequenceToken(),
               base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
-  return make_scoped_ptr(new ntp_snippets::NTPSnippetsService(
+  return base::WrapUnique(new ntp_snippets::NTPSnippetsService(
       chrome_browser_state->GetPrefs(), suggestions_service, task_runner,
       GetApplicationContext()->GetApplicationLocale(), scheduler,
-      make_scoped_ptr(new ntp_snippets::NTPSnippetsFetcher(
+      base::WrapUnique(new ntp_snippets::NTPSnippetsFetcher(
           task_runner, request_context,
           GetChannel() == version_info::Channel::STABLE)),
       base::Bind(&ParseJson)));
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.h b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.h
index 350badd..cd1383e 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.h
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_ntp_snippets_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_NTP_SNIPPETS_IOS_CHROME_NTP_SNIPPETS_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_NTP_SNIPPETS_IOS_CHROME_NTP_SNIPPETS_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -39,7 +40,7 @@
   ~IOSChromeNTPSnippetsServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeNTPSnippetsServiceFactory);
diff --git a/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.h b/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.h
index cf0fb71..2682772 100644
--- a/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.h
+++ b/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.h
@@ -5,7 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_OPEN_FROM_CLIPBOARD_CREATE_CLIPBOARD_RECENT_CONTENT_H_
 #define IOS_CHROME_BROWSER_OPEN_FROM_CLIPBOARD_CREATE_CLIPBOARD_RECENT_CONTENT_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 class ClipboardRecentContent;
 
@@ -14,6 +14,6 @@
 //
 // This helper function allow the construction of ClipboardRecentContentIOS
 // from a pure C++ (ClipboardRecentContentIOS is an Objective-C++).
-scoped_ptr<ClipboardRecentContent> CreateClipboardRecentContentIOS();
+std::unique_ptr<ClipboardRecentContent> CreateClipboardRecentContentIOS();
 
 #endif  // IOS_CHROME_BROWSER_OPEN_FROM_CLIPBOARD_CREATE_CLIPBOARD_RECENT_CONTENT_H_
diff --git a/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.mm b/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.mm
index 492dd2b..fce8149 100644
--- a/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.mm
+++ b/ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.mm
@@ -4,11 +4,12 @@
 
 #include "ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.h"
 
+#include "base/memory/ptr_util.h"
 #import "components/open_from_clipboard/clipboard_recent_content_ios.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
 #include "ios/chrome/common/app_group/app_group_constants.h"
 
-scoped_ptr<ClipboardRecentContent> CreateClipboardRecentContentIOS() {
-  return make_scoped_ptr(new ClipboardRecentContentIOS(
+std::unique_ptr<ClipboardRecentContent> CreateClipboardRecentContentIOS() {
+  return base::WrapUnique(new ClipboardRecentContentIOS(
       kChromeUIScheme, app_group::GetGroupUserDefaults()));
 }
diff --git a/ios/chrome/browser/passwords/credential_manager.h b/ios/chrome/browser/passwords/credential_manager.h
index 01c2e83..da6c4d6 100644
--- a/ios/chrome/browser/passwords/credential_manager.h
+++ b/ios/chrome/browser/passwords/credential_manager.h
@@ -5,12 +5,12 @@
 #ifndef IOS_CHROME_BROWSER_PASSWORDS_CREDENTIAL_MANAGER_H_
 #define IOS_CHROME_BROWSER_PASSWORDS_CREDENTIAL_MANAGER_H_
 
+#include <memory>
 #include <string>
 #include <vector>
 
 #import "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "components/password_manager/core/browser/credential_manager_password_form_manager.h"
 #include "components/password_manager/core/browser/credential_manager_pending_request_task.h"
@@ -100,15 +100,16 @@
   bool GetUrlWithAbsoluteTrust(GURL* page_url);
 
   // The request to retrieve credentials from the PasswordStore.
-  scoped_ptr<password_manager::CredentialManagerPendingRequestTask>
+  std::unique_ptr<password_manager::CredentialManagerPendingRequestTask>
       pending_request_;
 
   // The task to notify the password manager that the user was signed out.
-  scoped_ptr<password_manager::CredentialManagerPendingRequireUserMediationTask>
+  std::unique_ptr<
+      password_manager::CredentialManagerPendingRequireUserMediationTask>
       pending_require_user_mediation_;
 
   // Saves credentials to the PasswordStore.
-  scoped_ptr<password_manager::CredentialManagerPasswordFormManager>
+  std::unique_ptr<password_manager::CredentialManagerPasswordFormManager>
       form_manager_;
 
   // Injected JavaScript to provide the API to web pages.
diff --git a/ios/chrome/browser/passwords/credential_manager.mm b/ios/chrome/browser/passwords/credential_manager.mm
index 7626115..b1e86fd 100644
--- a/ios/chrome/browser/passwords/credential_manager.mm
+++ b/ios/chrome/browser/passwords/credential_manager.mm
@@ -194,7 +194,7 @@
 
   // Store the signed-in credential so that the user can save it, if desired.
   // Prompting the user and saving are handled by the PasswordFormManager.
-  scoped_ptr<autofill::PasswordForm> form(
+  std::unique_ptr<autofill::PasswordForm> form(
       password_manager::CreatePasswordFormFromCredentialInfo(
           CredentialInfoFromWebCredential(credential), page_url));
   form->skip_zero_click = !IsZeroClickAllowed();
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
index 7dd4735c..0b2e4a8 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
@@ -22,7 +22,7 @@
 
 // Shows UI to prompt the user to save the password.
 - (void)showSavePasswordInfoBar:
-    (scoped_ptr<password_manager::PasswordFormManager>)formToSave;
+    (std::unique_ptr<password_manager::PasswordFormManager>)formToSave;
 
 @property(readonly, nonatomic) ios::ChromeBrowserState* browserState;
 
@@ -42,7 +42,7 @@
   // password_manager::PasswordManagerClient implementation.
   password_manager::PasswordSyncState GetPasswordSyncState() const override;
   bool PromptUserToSaveOrUpdatePassword(
-      scoped_ptr<password_manager::PasswordFormManager> form_to_save,
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_save,
       password_manager::CredentialSourceType type,
       bool update_password) override;
   bool PromptUserToChooseCredentials(
@@ -50,15 +50,16 @@
       ScopedVector<autofill::PasswordForm> federated_forms,
       const GURL& origin,
       const CredentialsCallback& callback) override;
-  void AutomaticPasswordSave(scoped_ptr<password_manager::PasswordFormManager>
-                                 saved_form_manager) override;
+  void AutomaticPasswordSave(
+      std::unique_ptr<password_manager::PasswordFormManager> saved_form_manager)
+      override;
   bool IsOffTheRecord() const override;
   PrefService* GetPrefs() override;
   password_manager::PasswordStore* GetPasswordStore() const override;
   void NotifyUserAutoSignin(ScopedVector<autofill::PasswordForm> local_forms,
                             const GURL& origin) override;
   void NotifyUserCouldBeAutoSignedIn(
-      scoped_ptr<autofill::PasswordForm> form) override;
+      std::unique_ptr<autofill::PasswordForm> form) override;
   void NotifySuccessfulLoginWithExistingPassword(
       const autofill::PasswordForm& form) override;
   void ForceSavePassword() override;
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
index 756596f..464b27d 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
@@ -4,9 +4,9 @@
 
 #import "ios/chrome/browser/passwords/ios_chrome_password_manager_client.h"
 
+#include <memory>
 #include <utility>
 
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/browser_sync/browser/profile_sync_service.h"
 #include "components/keyed_service/core/service_access_type.h"
@@ -69,7 +69,7 @@
 }
 
 bool IOSChromePasswordManagerClient::PromptUserToSaveOrUpdatePassword(
-    scoped_ptr<PasswordFormManager> form_to_save,
+    std::unique_ptr<PasswordFormManager> form_to_save,
     password_manager::CredentialSourceType type,
     bool update_password) {
   if (form_to_save->IsBlacklisted())
@@ -79,7 +79,7 @@
 }
 
 void IOSChromePasswordManagerClient::AutomaticPasswordSave(
-    scoped_ptr<PasswordFormManager> saved_form_manager) {
+    std::unique_ptr<PasswordFormManager> saved_form_manager) {
   NOTIMPLEMENTED();
 }
 
@@ -102,7 +102,7 @@
     const GURL& origin) {}
 
 void IOSChromePasswordManagerClient::NotifyUserCouldBeAutoSignedIn(
-    scoped_ptr<autofill::PasswordForm> form) {}
+    std::unique_ptr<autofill::PasswordForm> form) {}
 
 void IOSChromePasswordManagerClient::NotifySuccessfulLoginWithExistingPassword(
     const autofill::PasswordForm& form) {}
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.cc b/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.cc
index cb24ecb0..928cb3e 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.cc
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/password_manager/sync/browser/password_manager_setting_migrator_service.h"
@@ -35,12 +36,12 @@
 IOSChromePasswordManagerSettingMigratorServiceFactory::
     ~IOSChromePasswordManagerSettingMigratorServiceFactory() {}
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromePasswordManagerSettingMigratorServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(
+  return base::WrapUnique(
       new password_manager::PasswordManagerSettingMigratorService(
           browser_state->GetSyncablePrefs()));
 }
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h
index 5eb4e48..d8f1f66 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_setting_migrator_service_factory.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_PASSWORDS_IOS_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_PASSWORDS_IOS_PASSWORD_MANAGER_SETTING_MIGRATOR_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
@@ -39,7 +41,7 @@
   ~IOSChromePasswordManagerSettingMigratorServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc b/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
index ff692d78..e2c3ff68 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
+++ b/ios/chrome/browser/passwords/ios_chrome_password_store_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/command_line.h"
@@ -73,7 +74,7 @@
 scoped_refptr<RefcountedKeyedService>
 IOSChromePasswordStoreFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  scoped_ptr<password_manager::LoginDatabase> login_db(
+  std::unique_ptr<password_manager::LoginDatabase> login_db(
       password_manager::CreateLoginDatabase(context->GetStatePath()));
 
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner(
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
index cf9117e..b378107 100644
--- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
+++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_PASSWORDS_IOS_CHROME_SAVE_PASSWORD_INFOBAR_DELEGATE_H_
 #define IOS_CHROME_BROWSER_PASSWORDS_IOS_CHROME_SAVE_PASSWORD_INFOBAR_DELEGATE_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/infobars/core/confirm_infobar_delegate.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 
@@ -29,14 +30,14 @@
   static void Create(
       bool is_smart_lock_branding_enabled,
       infobars::InfoBarManager* infobar_manager,
-      scoped_ptr<password_manager::PasswordFormManager> form_to_save);
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_save);
 
   ~IOSChromeSavePasswordInfoBarDelegate() override;
 
  private:
   IOSChromeSavePasswordInfoBarDelegate(
       bool is_smart_lock_branding_enabled,
-      scoped_ptr<password_manager::PasswordFormManager> form_to_save);
+      std::unique_ptr<password_manager::PasswordFormManager> form_to_save);
 
   // ConfirmInfoBarDelegate implementation.
   Type GetInfoBarType() const override;
@@ -51,7 +52,7 @@
 
   // The password_manager::PasswordFormManager managing the form we're asking
   // the user about, and should update as per her decision.
-  scoped_ptr<password_manager::PasswordFormManager> form_to_save_;
+  std::unique_ptr<password_manager::PasswordFormManager> form_to_save_;
 
   // Used to track the results we get from the info bar.
   password_manager::metrics_util::UIDismissalReason infobar_response_;
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
index 17a2ef2..af12ac09 100644
--- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/mac/scoped_nsobject.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string16.h"
 #include "components/infobars/core/infobar.h"
@@ -30,9 +31,9 @@
 void IOSChromeSavePasswordInfoBarDelegate::Create(
     bool is_smart_lock_branding_enabled,
     infobars::InfoBarManager* infobar_manager,
-    scoped_ptr<PasswordFormManager> form_to_save) {
+    std::unique_ptr<PasswordFormManager> form_to_save) {
   DCHECK(infobar_manager);
-  auto delegate = make_scoped_ptr(new IOSChromeSavePasswordInfoBarDelegate(
+  auto delegate = base::WrapUnique(new IOSChromeSavePasswordInfoBarDelegate(
       is_smart_lock_branding_enabled, std::move(form_to_save)));
   infobar_manager->AddInfoBar(
       infobar_manager->CreateConfirmInfoBar(std::move(delegate)));
@@ -44,7 +45,7 @@
 
 IOSChromeSavePasswordInfoBarDelegate::IOSChromeSavePasswordInfoBarDelegate(
     bool is_smart_lock_branding_enabled,
-    scoped_ptr<PasswordFormManager> form_to_save)
+    std::unique_ptr<PasswordFormManager> form_to_save)
     : form_to_save_(std::move(form_to_save)),
       infobar_response_(password_manager::metrics_util::NO_DIRECT_INTERACTION),
       is_smart_lock_branding_enabled_(is_smart_lock_branding_enabled) {}
diff --git a/ios/chrome/browser/passwords/password_controller.h b/ios/chrome/browser/passwords/password_controller.h
index f74a8450..e98a09a 100644
--- a/ios/chrome/browser/passwords/password_controller.h
+++ b/ios/chrome/browser/passwords/password_controller.h
@@ -6,6 +6,8 @@
 
 #import <Foundation/NSObject.h>
 
+#include <memory>
+
 #import "ios/chrome/browser/autofill/form_suggestion_provider.h"
 #import "ios/chrome/browser/passwords/ios_chrome_password_manager_client.h"
 #import "ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h"
@@ -54,7 +56,7 @@
 - (instancetype)
    initWithWebState:(web::WebState*)webState
 passwordsUiDelegate:(id<PasswordsUiDelegate>)UIDelegate
-             client:(scoped_ptr<password_manager::PasswordManagerClient>)
+             client:(std::unique_ptr<password_manager::PasswordManagerClient>)
                         passwordManagerClient NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/passwords/password_controller.mm b/ios/chrome/browser/passwords/password_controller.mm
index 7c252ae0..98369d96 100644
--- a/ios/chrome/browser/passwords/password_controller.mm
+++ b/ios/chrome/browser/passwords/password_controller.mm
@@ -7,6 +7,7 @@
 #include <stddef.h>
 
 #include <algorithm>
+#include <memory>
 #include <utility>
 #include <vector>
 
@@ -15,7 +16,7 @@
 #include "base/json/json_writer.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
@@ -193,14 +194,14 @@
   // Input elements in the form. The list does not necessarily contain
   // all elements from the form, but all elements listed here are required
   // to identify the right form to fill.
-  auto fieldList = make_scoped_ptr(new base::ListValue());
+  auto fieldList = base::WrapUnique(new base::ListValue());
 
-  auto usernameField = make_scoped_ptr(new base::DictionaryValue());
+  auto usernameField = base::WrapUnique(new base::DictionaryValue());
   usernameField->SetString("name", formData.username_field.name);
   usernameField->SetString("value", formData.username_field.value);
   fieldList->Append(usernameField.release());
 
-  auto passwordField = make_scoped_ptr(new base::DictionaryValue());
+  auto passwordField = base::WrapUnique(new base::DictionaryValue());
   passwordField->SetString("name", formData.password_field.name);
   passwordField->SetString("value", formData.password_field.value);
   fieldList->Append(passwordField.release());
@@ -226,19 +227,19 @@
 }  // namespace
 
 @implementation PasswordController {
-  scoped_ptr<PasswordManager> passwordManager_;
-  scoped_ptr<PasswordGenerationManager> passwordGenerationManager_;
-  scoped_ptr<PasswordManagerClient> passwordManagerClient_;
-  scoped_ptr<PasswordManagerDriver> passwordManagerDriver_;
+  std::unique_ptr<PasswordManager> passwordManager_;
+  std::unique_ptr<PasswordGenerationManager> passwordGenerationManager_;
+  std::unique_ptr<PasswordManagerClient> passwordManagerClient_;
+  std::unique_ptr<PasswordManagerDriver> passwordManagerDriver_;
   base::scoped_nsobject<PasswordGenerationAgent> passwordGenerationAgent_;
 
   JsPasswordManager* passwordJsManager_;  // weak
 
   // The pending form data.
-  scoped_ptr<autofill::PasswordFormFillData> formData_;
+  std::unique_ptr<autofill::PasswordFormFillData> formData_;
 
   // Bridge to observe WebState from Objective-C.
-  scoped_ptr<web::WebStateObserverBridge> webStateObserverBridge_;
+  std::unique_ptr<web::WebStateObserverBridge> webStateObserverBridge_;
 }
 
 - (instancetype)initWithWebState:(web::WebState*)webState
@@ -251,7 +252,7 @@
 
 - (instancetype)initWithWebState:(web::WebState*)webState
              passwordsUiDelegate:(id<PasswordsUiDelegate>)UIDelegate
-                          client:(scoped_ptr<PasswordManagerClient>)
+                          client:(std::unique_ptr<PasswordManagerClient>)
                                      passwordManagerClient {
   DCHECK(webState);
   self = [super init];
@@ -325,7 +326,7 @@
       // Initialize |matches| to satisfy the expectation from
       // InitPasswordFormFillData() that the preferred match (3rd parameter)
       // should be one of the |matches|.
-      auto scoped_form = make_scoped_ptr(new autofill::PasswordForm(form));
+      auto scoped_form = base::WrapUnique(new autofill::PasswordForm(form));
       matches.insert(
           std::make_pair(form.username_value, std::move(scoped_form)));
       autofill::InitPasswordFormFillData(form, matches, &form, false, false,
@@ -428,7 +429,7 @@
 
   int errorCode = 0;
   std::string errorMessage;
-  scoped_ptr<base::Value> jsonData(base::JSONReader::ReadAndReturnError(
+  std::unique_ptr<base::Value> jsonData(base::JSONReader::ReadAndReturnError(
       std::string([jsonString UTF8String]), false, &errorCode, &errorMessage));
   if (errorCode || !jsonData || !jsonData->IsType(base::Value::TYPE_LIST)) {
     VLOG(1) << "JSON parse error " << errorMessage
@@ -492,8 +493,9 @@
 
   int errorCode = 0;
   std::string errorMessage;
-  scoped_ptr<const base::Value> jsonData(base::JSONReader::ReadAndReturnError(
-      std::string([jsonString UTF8String]), false, &errorCode, &errorMessage));
+  std::unique_ptr<const base::Value> jsonData(
+      base::JSONReader::ReadAndReturnError(std::string([jsonString UTF8String]),
+                                           false, &errorCode, &errorMessage));
 
   // If the the JSON string contains null, there is no identifiable password
   // form on the page.
@@ -740,7 +742,8 @@
   return YES;
 }
 
-- (void)showSavePasswordInfoBar:(scoped_ptr<PasswordFormManager>)formToSave {
+- (void)showSavePasswordInfoBar:
+    (std::unique_ptr<PasswordFormManager>)formToSave {
   if (!webStateObserverBridge_ || !webStateObserverBridge_->web_state())
     return;
 
diff --git a/ios/chrome/browser/passwords/password_controller_unittest.mm b/ios/chrome/browser/passwords/password_controller_unittest.mm
index 2188359..70c19cc3 100644
--- a/ios/chrome/browser/passwords/password_controller_unittest.mm
+++ b/ios/chrome/browser/passwords/password_controller_unittest.mm
@@ -4,10 +4,11 @@
 
 #import "ios/chrome/browser/passwords/password_controller.h"
 
+#include <memory>
 #include <vector>
 
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "components/password_manager/core/browser/log_manager.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
 #include "components/password_manager/core/browser/stub_password_manager_client.h"
@@ -37,9 +38,9 @@
                     bool update_password));
   MOCK_CONST_METHOD0(GetLogManager, password_manager::LogManager*(void));
 
-  // Workaround for scoped_ptr<> lacking a copy constructor.
+  // Workaround for std::unique_ptr<> lacking a copy constructor.
   bool PromptUserToSaveOrUpdatePassword(
-      scoped_ptr<password_manager::PasswordFormManager> manager,
+      std::unique_ptr<password_manager::PasswordFormManager> manager,
       password_manager::CredentialSourceType type,
       bool update_password) override {
     PromptUserToSaveOrUpdatePasswordPtr(manager.get(), type, update_password);
@@ -61,15 +62,15 @@
   // Create the PasswordController with a MockPasswordManagerClient.
   TestChromeBrowserState::Builder builder;
   auto pref_service =
-      make_scoped_ptr(new syncable_prefs::TestingPrefServiceSyncable);
+      base::WrapUnique(new syncable_prefs::TestingPrefServiceSyncable);
   pref_service->registry()->RegisterBooleanPref(
       password_manager::prefs::kPasswordManagerSavingEnabled, true);
   builder.SetPrefService(std::move(pref_service));
-  scoped_ptr<TestChromeBrowserState> browser_state(builder.Build());
+  std::unique_ptr<TestChromeBrowserState> browser_state(builder.Build());
   MockWebState web_state;
   ON_CALL(web_state, GetBrowserState())
       .WillByDefault(testing::Return(browser_state.get()));
-  auto client = make_scoped_ptr(new MockPasswordManagerClient);
+  auto client = base::WrapUnique(new MockPasswordManagerClient);
   MockPasswordManagerClient* weak_client = client.get();
   base::scoped_nsobject<PasswordController> passwordController =
       [[PasswordController alloc] initWithWebState:&web_state
diff --git a/ios/chrome/browser/passwords/password_generation_agent.mm b/ios/chrome/browser/passwords/password_generation_agent.mm
index eeb389c..7f5b1ba 100644
--- a/ios/chrome/browser/passwords/password_generation_agent.mm
+++ b/ios/chrome/browser/passwords/password_generation_agent.mm
@@ -121,7 +121,7 @@
 
 @implementation PasswordGenerationAgent {
   // Bridge to observe the web state from Objective-C.
-  scoped_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
+  std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
 
   // The origin URLs of forms on the current page that contain account creation
   // forms as reported by autofill.
@@ -132,13 +132,13 @@
   std::vector<GURL> _allowedGenerationFormOrigins;
 
   // Stores the account creation form we detected on the page.
-  scoped_ptr<autofill::PasswordForm> _possibleAccountCreationForm;
+  std::unique_ptr<autofill::PasswordForm> _possibleAccountCreationForm;
 
   // Password fields found in |_possibleAccountCreationForm|.
   std::vector<autofill::FormFieldData> _passwordFields;
 
   // The password field that triggers the password generation UI.
-  scoped_ptr<autofill::FormFieldData> _passwordGenerationField;
+  std::unique_ptr<autofill::FormFieldData> _passwordGenerationField;
 
   // Wrapper for suggestion JavaScript. Used for form navigation.
   base::scoped_nsobject<JsSuggestionManager> _JSSuggestionManager;
diff --git a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc
index 7fea3ee..59aa019 100644
--- a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc
+++ b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.cc
@@ -7,6 +7,7 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "components/prefs/json_pref_store.h"
 #include "components/prefs/persistent_pref_store.h"
@@ -35,7 +36,7 @@
                     const base::FilePath& pref_filename,
                     base::SequencedTaskRunner* pref_io_task_runner) {
   factory->set_user_prefs(make_scoped_refptr(new JsonPrefStore(
-      pref_filename, pref_io_task_runner, scoped_ptr<PrefFilter>())));
+      pref_filename, pref_io_task_runner, std::unique_ptr<PrefFilter>())));
 
   factory->set_read_error_callback(base::Bind(&HandleReadError));
   factory->SetPrefModelAssociatorClient(
@@ -44,7 +45,7 @@
 
 }  // namespace
 
-scoped_ptr<PrefService> CreateLocalState(
+std::unique_ptr<PrefService> CreateLocalState(
     const base::FilePath& pref_filename,
     base::SequencedTaskRunner* pref_io_task_runner,
     const scoped_refptr<PrefRegistry>& pref_registry) {
@@ -53,7 +54,7 @@
   return factory.Create(pref_registry.get());
 }
 
-scoped_ptr<syncable_prefs::PrefServiceSyncable> CreateBrowserStatePrefs(
+std::unique_ptr<syncable_prefs::PrefServiceSyncable> CreateBrowserStatePrefs(
     const base::FilePath& browser_state_path,
     base::SequencedTaskRunner* pref_io_task_runner,
     const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry) {
@@ -65,13 +66,13 @@
   syncable_prefs::PrefServiceSyncableFactory factory;
   PrepareFactory(&factory, browser_state_path.Append(kPreferencesFilename),
                  pref_io_task_runner);
-  scoped_ptr<syncable_prefs::PrefServiceSyncable> pref_service =
+  std::unique_ptr<syncable_prefs::PrefServiceSyncable> pref_service =
       factory.CreateSyncable(pref_registry.get());
   ConfigureDefaultSearchPrefMigrationToDictionaryValue(pref_service.get());
   return pref_service;
 }
 
-scoped_ptr<syncable_prefs::PrefServiceSyncable>
+std::unique_ptr<syncable_prefs::PrefServiceSyncable>
 CreateIncognitoBrowserStatePrefs(
     syncable_prefs::PrefServiceSyncable* pref_service) {
   // List of keys that cannot be changed in the user prefs file by the incognito
@@ -79,7 +80,7 @@
   // history or behaviour of the user should have this property.
   std::vector<const char*> overlay_pref_names;
   overlay_pref_names.push_back(proxy_config::prefs::kProxy);
-  return make_scoped_ptr(pref_service->CreateIncognitoPrefService(
+  return base::WrapUnique(pref_service->CreateIncognitoPrefService(
       nullptr,  // incognito_extension_pref_store
       overlay_pref_names));
 }
diff --git a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h
index c5a8d36..4195223 100644
--- a/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h
+++ b/ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_PREFS_IOS_CHROME_PREF_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_PREFS_IOS_CHROME_PREF_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 
 class PrefRegistry;
 class PrefService;
@@ -34,19 +35,19 @@
 // to the user preference file. This is the usual way to create a new
 // PrefService. |pref_registry| keeps the list of registered prefs and their
 // default values.
-scoped_ptr<PrefService> CreateLocalState(
+std::unique_ptr<PrefService> CreateLocalState(
     const base::FilePath& pref_filename,
     base::SequencedTaskRunner* pref_io_task_runner,
     const scoped_refptr<PrefRegistry>& pref_registry);
 
-scoped_ptr<syncable_prefs::PrefServiceSyncable> CreateBrowserStatePrefs(
+std::unique_ptr<syncable_prefs::PrefServiceSyncable> CreateBrowserStatePrefs(
     const base::FilePath& browser_state_path,
     base::SequencedTaskRunner* pref_io_task_runner,
     const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry);
 
 // Creates an incognito copy of |pref_service| that shares most prefs but uses
 // a fresh non-persistent overlay for the user pref store.
-scoped_ptr<syncable_prefs::PrefServiceSyncable>
+std::unique_ptr<syncable_prefs::PrefServiceSyncable>
 CreateIncognitoBrowserStatePrefs(
     syncable_prefs::PrefServiceSyncable* main_pref_store);
 
diff --git a/ios/chrome/browser/reading_list/reading_list_model_factory.cc b/ios/chrome/browser/reading_list/reading_list_model_factory.cc
index 17052494..a0b21662 100644
--- a/ios/chrome/browser/reading_list/reading_list_model_factory.cc
+++ b/ios/chrome/browser/reading_list/reading_list_model_factory.cc
@@ -39,11 +39,11 @@
 
 ReadingListModelFactory::~ReadingListModelFactory() {}
 
-scoped_ptr<KeyedService> ReadingListModelFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> ReadingListModelFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   std::unique_ptr<ReadingListModelStorage> storage(
       new ReadingListModelStorageDefaults());
-  scoped_ptr<ReadingListModelMemory> reading_list_model(
+  std::unique_ptr<ReadingListModelMemory> reading_list_model(
       new ReadingListModelMemory(std::move(storage)));
   return std::move(reading_list_model);
 }
diff --git a/ios/chrome/browser/reading_list/reading_list_model_factory.h b/ios/chrome/browser/reading_list/reading_list_model_factory.h
index 96a6638..e766391 100644
--- a/ios/chrome/browser/reading_list/reading_list_model_factory.h
+++ b/ios/chrome/browser/reading_list/reading_list_model_factory.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_READING_LIST_READING_LIST_MODEL_FACTORY_H_
 #define IOS_CHROME_BROWSER_READING_LIST_READING_LIST_MODEL_FACTORY_H_
 
+#include <memory>
+
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -35,7 +37,7 @@
   ~ReadingListModelFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/reading_list/reading_list_model_memory.h b/ios/chrome/browser/reading_list/reading_list_model_memory.h
index 584fba8..f7fbdcf3 100644
--- a/ios/chrome/browser/reading_list/reading_list_model_memory.h
+++ b/ios/chrome/browser/reading_list/reading_list_model_memory.h
@@ -5,7 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_READING_LIST_READING_LIST_MODEL_MEMORY_H_
 #define IOS_CHROME_BROWSER_READING_LIST_READING_LIST_MODEL_MEMORY_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "components/keyed_service/core/keyed_service.h"
 #include "ios/chrome/browser/reading_list/reading_list_entry.h"
 #include "ios/chrome/browser/reading_list/reading_list_model.h"
diff --git a/ios/chrome/browser/reading_list/reading_list_model_unittest.cc b/ios/chrome/browser/reading_list/reading_list_model_unittest.cc
index 506c5eb3..dd0c466 100644
--- a/ios/chrome/browser/reading_list/reading_list_model_unittest.cc
+++ b/ios/chrome/browser/reading_list/reading_list_model_unittest.cc
@@ -91,7 +91,7 @@
   int observer_add_read_;
   int observer_did_apply_;
 
-  scoped_ptr<ReadingListModelMemory> model_;
+  std::unique_ptr<ReadingListModelMemory> model_;
 };
 
 TEST_F(ReadingListModelTest, EmptyLoaded) {
diff --git a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h
index 8be2a2b..5c2be98 100644
--- a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h
+++ b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h
@@ -5,10 +5,11 @@
 #ifndef IOS_CHROME_BROWSER_RLZ_RLZ_TRACKER_DELEGATE_IMPL_H_
 #define IOS_CHROME_BROWSER_RLZ_RLZ_TRACKER_DELEGATE_IMPL_H_
 
+#include <memory>
+
 #include "base/callback.h"
 #include "base/callback_list.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/rlz/rlz_tracker_delegate.h"
 
 struct OmniboxLog;
@@ -48,7 +49,7 @@
   void OnURLOpenedFromOmnibox(OmniboxLog* log);
 
   base::Closure on_omnibox_search_callback_;
-  scoped_ptr<base::CallbackList<void(OmniboxLog*)>::Subscription>
+  std::unique_ptr<base::CallbackList<void(OmniboxLog*)>::Subscription>
       on_omnibox_url_opened_subscription_;
 
   DISALLOW_COPY_AND_ASSIGN(RLZTrackerDelegateImpl);
diff --git a/ios/chrome/browser/safe_browsing/BUILD.gn b/ios/chrome/browser/safe_browsing/BUILD.gn
deleted file mode 100644
index 6ae55a6..0000000
--- a/ios/chrome/browser/safe_browsing/BUILD.gn
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//third_party/protobuf/proto_library.gni")
-
-proto_library("proto") {
-  sources = [
-    "metadata.proto",
-  ]
-}
diff --git a/ios/chrome/browser/safe_browsing/hit_report.cc b/ios/chrome/browser/safe_browsing/hit_report.cc
deleted file mode 100644
index a536e97..0000000
--- a/ios/chrome/browser/safe_browsing/hit_report.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/safe_browsing/hit_report.h"
-
-#include "components/metrics/metrics_service.h"
-#include "ios/chrome/browser/application_context.h"
-
-namespace safe_browsing {
-
-HitReport::HitReport() {}
-
-HitReport::~HitReport() {}
-
-bool IsMetricsReportingActive() {
-  const metrics::MetricsService* metrics =
-      GetApplicationContext()->GetMetricsService();
-  return metrics && metrics->reporting_active();
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/safe_browsing/hit_report.h b/ios/chrome/browser/safe_browsing/hit_report.h
deleted file mode 100644
index 1b11ba3..0000000
--- a/ios/chrome/browser/safe_browsing/hit_report.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Datastructures that hold details of a Safe Browsing hit for reporting.
-
-#ifndef IOS_CHROME_BROWSER_SAFE_BROWSING_HIT_REPORT_H_
-#define IOS_CHROME_BROWSER_SAFE_BROWSING_HIT_REPORT_H_
-
-#include "ios/chrome/browser/safe_browsing/util.h"
-#include "url/gurl.h"
-
-namespace safe_browsing {
-
-// What service classified this threat as unsafe.
-enum class ThreatSource {
-  UNKNOWN,
-  DATA_SAVER,   // From the Data Reduction service.
-  LOCAL_PVER3,  // From LocalSafeBrowingDatabaseManager, protocol v3
-  LOCAL_PVER4,  // From LocalSafeBrowingDatabaseManager, protocol v4
-  REMOTE,       // From RemoteSafeBrowingDatabaseManager
-};
-
-// Data to report about the contents of a particular threat (malware, phishing,
-// unsafe download URL).  If post_data is non-empty, the request will be
-// sent as a POST instead of a GET.
-struct HitReport {
-  HitReport();
-  ~HitReport();
-
-  GURL malicious_url;
-  GURL page_url;
-  GURL referrer_url;
-
-  bool is_subresource;
-  SBThreatType threat_type;
-  ThreatSource threat_source;
-  bool is_extended_reporting;
-  bool is_metrics_reporting_active;
-
-  std::string post_data;
-};
-
-// Return true if the user has opted in to UMA metrics reporting.
-// Used when filling out a HitReport.
-bool IsMetricsReportingActive();
-
-}  // namespace safe_browsing
-
-#endif  // IOS_CHROME_BROWSER_SAFE_BROWSING_HIT_REPORT_H_
diff --git a/ios/chrome/browser/safe_browsing/metadata.proto b/ios/chrome/browser/safe_browsing/metadata.proto
deleted file mode 100644
index d37c15a..0000000
--- a/ios/chrome/browser/safe_browsing/metadata.proto
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-syntax = "proto2";
-
-option optimize_for = LITE_RUNTIME;
-
-package safe_browsing;
-
-// Everything below this comment was copied from the page
-// <https://developers.google.com/safe-browsing/developers_guide_v3>,
-// section "Full Hash Metadata".
-
-// Metadata for the goog-malware-shavar list.
-message MalwarePatternType {
-  enum PATTERN_TYPE {
-    LANDING = 1;
-    DISTRIBUTION = 2;
-  }
-
-  required PATTERN_TYPE pattern_type = 1;
-}
diff --git a/ios/chrome/browser/safe_browsing/ping_manager.cc b/ios/chrome/browser/safe_browsing/ping_manager.cc
deleted file mode 100644
index 37e477d..0000000
--- a/ios/chrome/browser/safe_browsing/ping_manager.cc
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/safe_browsing/ping_manager.h"
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "components/certificate_reporting/error_reporter.h"
-#include "google_apis/google_api_keys.h"
-#include "ios/web/public/web_thread.h"
-#include "net/base/escape.h"
-#include "net/base/load_flags.h"
-#include "net/ssl/ssl_info.h"
-#include "net/url_request/certificate_report_sender.h"
-#include "net/url_request/url_fetcher.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/url_request/url_request_status.h"
-#include "url/gurl.h"
-
-namespace {
-// URLs to upload invalid certificate chain reports. The HTTP URL is
-// preferred since a client seeing an invalid cert might not be able to
-// make an HTTPS connection to report it.
-const char kExtendedReportingUploadUrlInsecure[] =
-    "http://safebrowsing.googleusercontent.com/safebrowsing/clientreport/"
-    "chrome-certs";
-const char kExtendedReportingUploadUrlSecure[] =
-    "https://sb-ssl.google.com/safebrowsing/clientreport/chrome-certs";
-}  // namespace
-
-namespace safe_browsing {
-
-// SafeBrowsingPingManager implementation ----------------------------------
-
-// static
-SafeBrowsingPingManager* SafeBrowsingPingManager::Create(
-    net::URLRequestContextGetter* request_context_getter,
-    const SafeBrowsingProtocolConfig& config) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-  return new SafeBrowsingPingManager(request_context_getter, config);
-}
-
-SafeBrowsingPingManager::SafeBrowsingPingManager(
-    net::URLRequestContextGetter* request_context_getter,
-    const SafeBrowsingProtocolConfig& config)
-    : client_name_(config.client_name),
-      request_context_getter_(request_context_getter),
-      url_prefix_(config.url_prefix) {
-  DCHECK(!url_prefix_.empty());
-
-  if (request_context_getter) {
-    // Set the upload URL and whether or not to send cookies with
-    // certificate reports sent to Safe Browsing servers.
-    bool use_insecure_certificate_upload_url =
-        certificate_reporting::ErrorReporter::IsHttpUploadUrlSupported();
-
-    net::CertificateReportSender::CookiesPreference cookies_preference;
-    GURL certificate_upload_url;
-    if (use_insecure_certificate_upload_url) {
-      cookies_preference = net::CertificateReportSender::DO_NOT_SEND_COOKIES;
-      certificate_upload_url = GURL(kExtendedReportingUploadUrlInsecure);
-    } else {
-      cookies_preference = net::CertificateReportSender::SEND_COOKIES;
-      certificate_upload_url = GURL(kExtendedReportingUploadUrlSecure);
-    }
-
-    certificate_error_reporter_.reset(new certificate_reporting::ErrorReporter(
-        request_context_getter->GetURLRequestContext(), certificate_upload_url,
-        cookies_preference));
-  }
-
-  version_ = SafeBrowsingProtocolManagerHelper::Version();
-}
-
-SafeBrowsingPingManager::~SafeBrowsingPingManager() {
-  // Delete in-progress safebrowsing reports (hits and details).
-  STLDeleteContainerPointers(safebrowsing_reports_.begin(),
-                             safebrowsing_reports_.end());
-}
-
-// net::URLFetcherDelegate implementation ----------------------------------
-
-// All SafeBrowsing request responses are handled here.
-void SafeBrowsingPingManager::OnURLFetchComplete(
-    const net::URLFetcher* source) {
-  Reports::iterator sit = safebrowsing_reports_.find(source);
-  DCHECK(sit != safebrowsing_reports_.end());
-  delete *sit;
-  safebrowsing_reports_.erase(sit);
-}
-
-// Sends a SafeBrowsing "hit" report.
-void SafeBrowsingPingManager::ReportSafeBrowsingHit(
-    const safe_browsing::HitReport& hit_report) {
-  GURL report_url = SafeBrowsingHitUrl(hit_report);
-  net::URLFetcher* report =
-      net::URLFetcher::Create(report_url, hit_report.post_data.empty()
-                                              ? net::URLFetcher::GET
-                                              : net::URLFetcher::POST,
-                              this)
-          .release();
-  report->SetLoadFlags(net::LOAD_DISABLE_CACHE);
-  report->SetRequestContext(request_context_getter_.get());
-  if (!hit_report.post_data.empty())
-    report->SetUploadData("text/plain", hit_report.post_data);
-  safebrowsing_reports_.insert(report);
-  report->Start();
-}
-
-// Sends threat details for users who opt-in.
-void SafeBrowsingPingManager::ReportThreatDetails(const std::string& report) {
-  GURL report_url = ThreatDetailsUrl();
-  net::URLFetcher* fetcher =
-      net::URLFetcher::Create(report_url, net::URLFetcher::POST, this)
-          .release();
-  fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE);
-  fetcher->SetRequestContext(request_context_getter_.get());
-  fetcher->SetUploadData("application/octet-stream", report);
-  // Don't try too hard to send reports on failures.
-  fetcher->SetAutomaticallyRetryOn5xx(false);
-  fetcher->Start();
-  safebrowsing_reports_.insert(fetcher);
-}
-
-void SafeBrowsingPingManager::ReportInvalidCertificateChain(
-    const std::string& serialized_report) {
-  DCHECK(certificate_error_reporter_);
-  certificate_error_reporter_->SendExtendedReportingReport(serialized_report);
-}
-
-void SafeBrowsingPingManager::SetCertificateErrorReporterForTesting(
-    scoped_ptr<certificate_reporting::ErrorReporter>
-        certificate_error_reporter) {
-  certificate_error_reporter_ = std::move(certificate_error_reporter);
-}
-
-GURL SafeBrowsingPingManager::SafeBrowsingHitUrl(
-    const safe_browsing::HitReport& hit_report) const {
-  DCHECK(hit_report.threat_type == SB_THREAT_TYPE_URL_MALWARE ||
-         hit_report.threat_type == SB_THREAT_TYPE_URL_PHISHING ||
-         hit_report.threat_type == SB_THREAT_TYPE_URL_UNWANTED ||
-         hit_report.threat_type == SB_THREAT_TYPE_BINARY_MALWARE_URL ||
-         hit_report.threat_type == SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL ||
-         hit_report.threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL);
-  std::string url = SafeBrowsingProtocolManagerHelper::ComposeUrl(
-      url_prefix_, "report", client_name_, version_, std::string(),
-      hit_report.is_extended_reporting);
-
-  std::string threat_list = "none";
-  switch (hit_report.threat_type) {
-    case SB_THREAT_TYPE_URL_MALWARE:
-      threat_list = "malblhit";
-      break;
-    case SB_THREAT_TYPE_URL_PHISHING:
-      threat_list = "phishblhit";
-      break;
-    case SB_THREAT_TYPE_URL_UNWANTED:
-      threat_list = "uwsblhit";
-      break;
-    case SB_THREAT_TYPE_BINARY_MALWARE_URL:
-      threat_list = "binurlhit";
-      break;
-    case SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL:
-      threat_list = "phishcsdhit";
-      break;
-    case SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL:
-      threat_list = "malcsdhit";
-      break;
-    default:
-      NOTREACHED();
-  }
-
-  std::string threat_source = "none";
-  switch (hit_report.threat_source) {
-    case safe_browsing::ThreatSource::DATA_SAVER:
-      threat_source = "ds";
-      break;
-    case safe_browsing::ThreatSource::REMOTE:
-      threat_source = "rem";
-      break;
-    case safe_browsing::ThreatSource::LOCAL_PVER3:
-      threat_source = "l3";
-      break;
-    case safe_browsing::ThreatSource::LOCAL_PVER4:
-      threat_source = "l4";
-      break;
-    case safe_browsing::ThreatSource::UNKNOWN:
-      NOTREACHED();
-  }
-
-  return GURL(base::StringPrintf(
-      "%s&evts=%s&evtd=%s&evtr=%s&evhr=%s&evtb=%d&src=%s&m=%d", url.c_str(),
-      threat_list.c_str(),
-      net::EscapeQueryParamValue(hit_report.malicious_url.spec(), true).c_str(),
-      net::EscapeQueryParamValue(hit_report.page_url.spec(), true).c_str(),
-      net::EscapeQueryParamValue(hit_report.referrer_url.spec(), true).c_str(),
-      hit_report.is_subresource, threat_source.c_str(),
-      hit_report.is_metrics_reporting_active));
-}
-
-GURL SafeBrowsingPingManager::ThreatDetailsUrl() const {
-  std::string url = base::StringPrintf(
-      "%s/clientreport/malware?client=%s&appver=%s&pver=1.0",
-      url_prefix_.c_str(), client_name_.c_str(), version_.c_str());
-  std::string api_key = google_apis::GetAPIKey();
-  if (!api_key.empty()) {
-    base::StringAppendF(&url, "&key=%s",
-                        net::EscapeQueryParamValue(api_key, true).c_str());
-  }
-  return GURL(url);
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/safe_browsing/ping_manager.h b/ios/chrome/browser/safe_browsing/ping_manager.h
deleted file mode 100644
index 5e0a121..0000000
--- a/ios/chrome/browser/safe_browsing/ping_manager.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_SAFE_BROWSING_PING_MANAGER_H_
-#define IOS_CHROME_BROWSER_SAFE_BROWSING_PING_MANAGER_H_
-
-// A class that reports safebrowsing statistics to Google's SafeBrowsing
-// servers.
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/gtest_prod_util.h"
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "ios/chrome/browser/safe_browsing/hit_report.h"
-#include "ios/chrome/browser/safe_browsing/protocol_manager_helper.h"
-#include "ios/chrome/browser/safe_browsing/util.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "url/gurl.h"
-
-namespace certificate_reporting {
-class ErrorReporter;
-}
-
-namespace net {
-class SSLInfo;
-class URLRequestContextGetter;
-}  // namespace net
-
-namespace safe_browsing {
-
-class SafeBrowsingPingManager : public net::URLFetcherDelegate {
- public:
-  ~SafeBrowsingPingManager() override;
-
-  // Create an instance of the safe browsing ping manager.
-  static SafeBrowsingPingManager* Create(
-      net::URLRequestContextGetter* request_context_getter,
-      const SafeBrowsingProtocolConfig& config);
-
-  // net::URLFetcherDelegate interface.
-  void OnURLFetchComplete(const net::URLFetcher* source) override;
-
-  // Report to Google when a SafeBrowsing warning is shown to the user.
-  // |hit_report.threat_type| should be one of the types known by
-  // SafeBrowsingtHitUrl.
-  void ReportSafeBrowsingHit(const safe_browsing::HitReport& hit_report);
-
-  // Users can opt-in on the SafeBrowsing interstitial to send detailed
-  // threat reports. |report| is the serialized report.
-  void ReportThreatDetails(const std::string& report);
-
-  // Users can opt-in on the SSL interstitial to send reports of invalid
-  // certificate chains.
-  void ReportInvalidCertificateChain(const std::string& serialized_report);
-
-  void SetCertificateErrorReporterForTesting(
-      scoped_ptr<certificate_reporting::ErrorReporter>
-          certificate_error_reporter);
-
- private:
-  FRIEND_TEST_ALL_PREFIXES(SafeBrowsingPingManagerTest, TestSafeBrowsingHitUrl);
-  FRIEND_TEST_ALL_PREFIXES(SafeBrowsingPingManagerTest, TestThreatDetailsUrl);
-
-  typedef std::set<const net::URLFetcher*> Reports;
-
-  // Constructs a SafeBrowsingPingManager that issues network requests
-  // using |request_context_getter|.
-  SafeBrowsingPingManager(net::URLRequestContextGetter* request_context_getter,
-                          const SafeBrowsingProtocolConfig& config);
-
-  // Generates URL for reporting safe browsing hits.
-  GURL SafeBrowsingHitUrl(const safe_browsing::HitReport& hit_report) const;
-
-  // Generates URL for reporting threat details for users who opt-in.
-  GURL ThreatDetailsUrl() const;
-
-  // Current product version sent in each request.
-  std::string version_;
-
-  // The safe browsing client name sent in each request.
-  std::string client_name_;
-
-  // The context we use to issue network requests.
-  scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
-
-  // URL prefix where browser reports hits to the safebrowsing list and
-  // sends detaild threat reports for UMA users.
-  std::string url_prefix_;
-
-  // Track outstanding SafeBrowsing report fetchers for clean up.
-  // We add both "hit" and "detail" fetchers in this set.
-  Reports safebrowsing_reports_;
-
-  // Sends reports of invalid SSL certificate chains.
-  scoped_ptr<certificate_reporting::ErrorReporter> certificate_error_reporter_;
-
-  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingPingManager);
-};
-
-}  // namespace safe_browsing
-
-#endif  // IOS_CHROME_BROWSER_SAFE_BROWSING_PING_MANAGER_H_
diff --git a/ios/chrome/browser/safe_browsing/protocol_manager_helper.cc b/ios/chrome/browser/safe_browsing/protocol_manager_helper.cc
deleted file mode 100644
index 2783727..0000000
--- a/ios/chrome/browser/safe_browsing/protocol_manager_helper.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/safe_browsing/protocol_manager_helper.h"
-
-#include "base/environment.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "components/version_info/version_info.h"
-#include "google_apis/google_api_keys.h"
-#include "net/base/escape.h"
-
-namespace safe_browsing {
-
-SafeBrowsingProtocolConfig::SafeBrowsingProtocolConfig()
-    : disable_auto_update(false) {}
-
-SafeBrowsingProtocolConfig::~SafeBrowsingProtocolConfig() {}
-
-// static
-std::string SafeBrowsingProtocolManagerHelper::Version() {
-  if (version_info::GetVersionNumber().empty())
-    return "0.1";
-  else
-    return version_info::GetVersionNumber();
-}
-
-// static
-std::string SafeBrowsingProtocolManagerHelper::ComposeUrl(
-    const std::string& prefix,
-    const std::string& method,
-    const std::string& client_name,
-    const std::string& version,
-    const std::string& additional_query) {
-  DCHECK(!prefix.empty() && !method.empty() && !client_name.empty() &&
-         !version.empty());
-  std::string url =
-      base::StringPrintf("%s/%s?client=%s&appver=%s&pver=3.0", prefix.c_str(),
-                         method.c_str(), client_name.c_str(), version.c_str());
-  std::string api_key = google_apis::GetAPIKey();
-  if (!api_key.empty()) {
-    base::StringAppendF(&url, "&key=%s",
-                        net::EscapeQueryParamValue(api_key, true).c_str());
-  }
-  if (!additional_query.empty()) {
-    DCHECK(url.find("?") != std::string::npos);
-    url.append("&");
-    url.append(additional_query);
-  }
-  return url;
-}
-
-// static
-std::string SafeBrowsingProtocolManagerHelper::ComposeUrl(
-    const std::string& prefix,
-    const std::string& method,
-    const std::string& client_name,
-    const std::string& version,
-    const std::string& additional_query,
-    bool is_extended_reporting) {
-  std::string url =
-      ComposeUrl(prefix, method, client_name, version, additional_query);
-  if (is_extended_reporting) {
-    url.append("&ext=1");
-  } else {
-    url.append("&ext=0");
-  }
-  return url;
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/safe_browsing/protocol_manager_helper.h b/ios/chrome/browser/safe_browsing/protocol_manager_helper.h
deleted file mode 100644
index cc4846a..0000000
--- a/ios/chrome/browser/safe_browsing/protocol_manager_helper.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_HELPER_H_
-#define IOS_CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_HELPER_H_
-
-// A class that provides common functionality for safebrowsing protocol managers
-// that communicate with Google servers.
-
-#include <string>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-
-namespace safe_browsing {
-
-struct SafeBrowsingProtocolConfig {
-  SafeBrowsingProtocolConfig();
-  ~SafeBrowsingProtocolConfig();
-  std::string client_name;
-  std::string url_prefix;
-  std::string backup_connect_error_url_prefix;
-  std::string backup_http_error_url_prefix;
-  std::string backup_network_error_url_prefix;
-  std::string version;
-  bool disable_auto_update;
-};
-
-class SafeBrowsingProtocolManagerHelper {
- public:
-  // returns version
-  static std::string Version();
-
-  // Composes a URL using |prefix|, |method| (e.g.: gethash, download, report).
-  // |client_name| and |version|. When not empty, |additional_query| is
-  // appended to the URL with an additional "&" in the front.
-  static std::string ComposeUrl(const std::string& prefix,
-                                const std::string& method,
-                                const std::string& client_name,
-                                const std::string& version,
-                                const std::string& additional_query);
-
-  // Similar to above function, and appends "&ext=1" at the end of URL if
-  // |is_extended_reporting| is true, otherwise, appends "&ext=0".
-  static std::string ComposeUrl(const std::string& prefix,
-                                const std::string& method,
-                                const std::string& client_name,
-                                const std::string& version,
-                                const std::string& additional_query,
-                                bool is_extended_reporting);
-
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(SafeBrowsingProtocolManagerHelper);
-};
-
-}  // namespace safe_browsing
-
-#endif  // IOS_CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_HELPER_H_
diff --git a/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.h b/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.h
deleted file mode 100644
index c99f4eb3..0000000
--- a/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.h
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Classes for managing the SafeBrowsing interstitial pages.
-//
-// When a user is about to visit a page the SafeBrowsing system has deemed to
-// be malicious, either as malware or a phishing page, we show an interstitial
-// page with some options (go back, continue) to give the user a chance to avoid
-// the harmful page.
-//
-// The SafeBrowsingBlockingPage is created by the SafeBrowsingUIManager on the
-// UI thread when we've determined that a page is malicious. The operation of
-// the blocking page occurs on the UI thread, where it waits for the user to
-// make a decision about what to do: either go back or continue on.
-//
-// The blocking page forwards the result of the user's choice back to the
-// SafeBrowsingUIManager so that we can cancel the request for the new page,
-// or allow it to continue.
-//
-// A web page may contain several resources flagged as malware/phishing.  This
-// results into more than one interstitial being shown.  On the first unsafe
-// resource received we show an interstitial.  Any subsequent unsafe resource
-// notifications while the first interstitial is showing is queued.  If the user
-// decides to proceed in the first interstitial, we display all queued unsafe
-// resources in a new interstitial.
-
-#ifndef IOS_CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_
-#define IOS_CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "ios/chrome/browser/interstitials/ios_security_interstitial_page.h"
-#include "ios/chrome/browser/safe_browsing/ui_manager.h"
-#include "url/gurl.h"
-
-namespace web {
-class WebState;
-}
-
-namespace safe_browsing {
-
-class SafeBrowsingBlockingPageFactory;
-
-class SafeBrowsingBlockingPage : public IOSSecurityInterstitialPage {
- public:
-  typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource;
-  typedef std::vector<UnsafeResource> UnsafeResourceList;
-  typedef std::map<web::WebState*, UnsafeResourceList> UnsafeResourceMap;
-
-  ~SafeBrowsingBlockingPage() override;
-
-  // Creates a blocking page. Use ShowBlockingPage if you don't need to access
-  // the blocking page directly.
-  static SafeBrowsingBlockingPage* CreateBlockingPage(
-      SafeBrowsingUIManager* ui_manager,
-      web::WebState* web_state,
-      const UnsafeResource& unsafe_resource);
-
-  // Shows a blocking page warning the user about phishing/malware for a
-  // specific resource.
-  // You can call this method several times, if an interstitial is already
-  // showing, the new one will be queued and displayed if the user decides
-  // to proceed on the currently showing interstitial.
-  static void ShowBlockingPage(web::WebState* web_state,
-                               SafeBrowsingUIManager* ui_manager,
-                               const UnsafeResource& resource);
-
-  // Makes the passed |factory| the factory used to instantiate
-  // SafeBrowsingBlockingPage objects. Useful for tests.
-  static void RegisterFactory(SafeBrowsingBlockingPageFactory* factory) {
-    factory_ = factory;
-  }
-
-  // InterstitialPageDelegate method:
-  void OnProceed() override;
-  void OnDontProceed() override;
-  void CommandReceived(const std::string& command) override;
-
- protected:
-  void UpdateReportingPref();  // Used for the transition from old to new pref.
-
-  // Don't instantiate this class directly, use ShowBlockingPage instead.
-  SafeBrowsingBlockingPage(SafeBrowsingUIManager* ui_manager,
-                           web::WebState* web_state,
-                           const UnsafeResourceList& unsafe_resources);
-
-  // IOSSecurityInterstitialPage methods:
-  bool ShouldCreateNewNavigation() const override;
-  void PopulateInterstitialStrings(
-      base::DictionaryValue* load_time_data) const override;
-  void AfterShow() override;
-
-  // A list of SafeBrowsingUIManager::UnsafeResource for a tab that the user
-  // should be warned about.  They are queued when displaying more than one
-  // interstitial at a time.
-  static UnsafeResourceMap* GetUnsafeResourcesMap();
-
-  // Returns true if the passed |unsafe_resources| is blocking the load of
-  // the main page.
-  static bool IsMainPageLoadBlocked(const UnsafeResourceList& unsafe_resources);
-
-  friend class SafeBrowsingBlockingPageFactoryImpl;
-
-  // For reporting back user actions.
-  SafeBrowsingUIManager* ui_manager_;
-
-  // True if the interstitial is blocking the main page because it is on one
-  // of our lists.  False if a subresource is being blocked, or in the case of
-  // client-side detection where the interstitial is shown after page load
-  // finishes.
-  bool is_main_frame_load_blocked_;
-
-  // The index of a navigation entry that should be removed when DontProceed()
-  // is invoked, -1 if not entry should be removed.
-  int navigation_entry_index_to_remove_;
-
-  // The list of unsafe resources this page is warning about.
-  UnsafeResourceList unsafe_resources_;
-
-  bool proceeded_;
-
-  // Which type of Safe Browsing interstitial this is.
-  enum SBInterstitialReason {
-    SB_REASON_MALWARE,
-    SB_REASON_HARMFUL,
-    SB_REASON_PHISHING,
-  } interstitial_reason_;
-
-  // The factory used to instantiate SafeBrowsingBlockingPage objects.
-  // Useful for tests, so they can provide their own implementation of
-  // SafeBrowsingBlockingPage.
-  static SafeBrowsingBlockingPageFactory* factory_;
-
- private:
-  // Fills the passed dictionary with the values to be passed to the template
-  // when creating the HTML.
-  void PopulateMalwareLoadTimeData(base::DictionaryValue* load_time_data) const;
-  void PopulateHarmfulLoadTimeData(base::DictionaryValue* load_time_data) const;
-  void PopulatePhishingLoadTimeData(
-      base::DictionaryValue* load_time_data) const;
-
-  std::string GetMetricPrefix() const;
-  std::string GetExtraMetricsSuffix() const;
-  std::string GetRapporPrefix() const;
-  std::string GetSamplingEventName() const;
-
-  scoped_ptr<IOSChromeControllerClient> controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPage);
-};
-
-// Factory for creating SafeBrowsingBlockingPage.  Useful for tests.
-class SafeBrowsingBlockingPageFactory {
- public:
-  virtual ~SafeBrowsingBlockingPageFactory() {}
-
-  virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage(
-      SafeBrowsingUIManager* ui_manager,
-      web::WebState* web_state,
-      const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) = 0;
-};
-
-}  // namespace safe_browsing
-
-#endif  // IOS_CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_
diff --git a/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.mm b/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.mm
deleted file mode 100644
index de757dd..0000000
--- a/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.mm
+++ /dev/null
@@ -1,598 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Implementation of the SafeBrowsingBlockingPage class.
-
-#include "ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
-
-#include <string>
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/i18n/rtl.h"
-#include "base/lazy_instance.h"
-#include "base/macros.h"
-#include "base/metrics/field_trial.h"
-#include "base/metrics/histogram.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_piece.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/time/time.h"
-#include "base/values.h"
-#include "components/google/core/browser/google_util.h"
-#include "components/prefs/pref_service.h"
-#include "components/security_interstitials/core/controller_client.h"
-#include "ios/chrome/browser/application_context.h"
-#include "ios/chrome/browser/chrome_url_constants.h"
-#include "ios/chrome/browser/interstitials/ios_chrome_controller_client.h"
-#include "ios/chrome/browser/interstitials/ios_chrome_metrics_helper.h"
-#include "ios/chrome/browser/pref_names.h"
-#include "ios/chrome/browser/safe_browsing/ui_manager.h"
-#include "ios/chrome/grit/ios_strings.h"
-#include "ios/web/public/interstitials/web_interstitial.h"
-#import "ios/web/public/navigation_manager.h"
-#include "ios/web/public/web_state/web_state.h"
-#include "ios/web/public/web_thread.h"
-#include "net/base/escape.h"
-#include "ui/base/l10n/l10n_util.h"
-
-namespace safe_browsing {
-
-namespace {
-
-// For malware interstitial pages, we link the problematic URL to Google's
-// diagnostic page.
-#if defined(GOOGLE_CHROME_BUILD)
-const char kSbDiagnosticUrl[] =
-    "https://www.google.com/safebrowsing/"
-    "diagnostic?site=%s&client=googlechrome";
-#else
-const char kSbDiagnosticUrl[] =
-    "https://www.google.com/safebrowsing/diagnostic?site=%s&client=chromium";
-#endif
-
-// URL for malware and phishing, V2.
-const char kLearnMoreMalwareUrlV2[] =
-    "https://www.google.com/transparencyreport/safebrowsing/";
-const char kLearnMorePhishingUrlV2[] =
-    "https://www.google.com/transparencyreport/safebrowsing/";
-
-// Constants for the V4 phishing string upgrades.
-const char kSocialEngineeringTrial[] = "SafeBrowsingSocialEngineeringStrings";
-const char kSocialEngineeringEnabled[] = "Enabled";
-
-// Constants for the Experience Sampling instrumentation.
-const char kEventNameMalware[] = "safebrowsing_interstitial_";
-const char kEventNameHarmful[] = "harmful_interstitial_";
-const char kEventNamePhishing[] = "phishing_interstitial_";
-const char kEventNameOther[] = "safebrowsing_other_interstitial_";
-
-// Constants for the V4 phishing string upgrades.
-const char kReportPhishingErrorUrl[] =
-    "https://www.google.com/safebrowsing/report_error/";
-const char kReportPhishingErrorTrial[] = "SafeBrowsingReportPhishingErrorLink";
-const char kReportPhishingErrorEnabled[] = "Enabled";
-
-base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap>
-    g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER;
-
-}  // namespace
-
-// static
-SafeBrowsingBlockingPageFactory* SafeBrowsingBlockingPage::factory_ = nullptr;
-
-// The default SafeBrowsingBlockingPageFactory.  Global, made a singleton so we
-// don't leak it.
-class SafeBrowsingBlockingPageFactoryImpl
-    : public SafeBrowsingBlockingPageFactory {
- public:
-  SafeBrowsingBlockingPage* CreateSafeBrowsingPage(
-      SafeBrowsingUIManager* ui_manager,
-      web::WebState* web_state,
-      const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources)
-      override {
-    return new SafeBrowsingBlockingPage(ui_manager, web_state,
-                                        unsafe_resources);
-  }
-
- private:
-  friend struct base::DefaultLazyInstanceTraits<
-      SafeBrowsingBlockingPageFactoryImpl>;
-
-  SafeBrowsingBlockingPageFactoryImpl() {}
-
-  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageFactoryImpl);
-};
-
-static base::LazyInstance<SafeBrowsingBlockingPageFactoryImpl>
-    g_safe_browsing_blocking_page_factory_impl = LAZY_INSTANCE_INITIALIZER;
-
-SafeBrowsingBlockingPage::SafeBrowsingBlockingPage(
-    SafeBrowsingUIManager* ui_manager,
-    web::WebState* web_state,
-    const UnsafeResourceList& unsafe_resources)
-    : IOSSecurityInterstitialPage(web_state, unsafe_resources[0].url),
-      ui_manager_(ui_manager),
-      is_main_frame_load_blocked_(IsMainPageLoadBlocked(unsafe_resources)),
-      unsafe_resources_(unsafe_resources),
-      proceeded_(false),
-      controller_(new IOSChromeControllerClient(web_state)) {
-  bool malware = false;
-  bool harmful = false;
-  bool phishing = false;
-  for (UnsafeResourceList::const_iterator iter = unsafe_resources_.begin();
-       iter != unsafe_resources_.end(); ++iter) {
-    const UnsafeResource& resource = *iter;
-    SBThreatType threat_type = resource.threat_type;
-    if (threat_type == SB_THREAT_TYPE_URL_MALWARE ||
-        threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL) {
-      malware = true;
-    } else if (threat_type == SB_THREAT_TYPE_URL_UNWANTED) {
-      harmful = true;
-    } else {
-      DCHECK(threat_type == SB_THREAT_TYPE_URL_PHISHING ||
-             threat_type == SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL);
-      phishing = true;
-    }
-  }
-  DCHECK(phishing || malware || harmful);
-  if (malware)
-    interstitial_reason_ = SB_REASON_MALWARE;
-  else if (harmful)
-    interstitial_reason_ = SB_REASON_HARMFUL;
-  else
-    interstitial_reason_ = SB_REASON_PHISHING;
-
-  // This must be done after calculating |interstitial_reason_| above.
-  security_interstitials::MetricsHelper::ReportDetails reporting_info;
-  reporting_info.metric_prefix = GetMetricPrefix();
-  reporting_info.extra_suffix = GetExtraMetricsSuffix();
-  reporting_info.rappor_prefix = GetRapporPrefix();
-  reporting_info.rappor_report_type = rappor::SAFEBROWSING_RAPPOR_TYPE;
-  controller_->set_metrics_helper(make_scoped_ptr(
-      new IOSChromeMetricsHelper(web_state, request_url(), reporting_info)));
-  controller_->metrics_helper()->RecordUserDecision(
-      security_interstitials::MetricsHelper::SHOW);
-  controller_->metrics_helper()->RecordUserInteraction(
-      security_interstitials::MetricsHelper::TOTAL_VISITS);
-  if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
-    controller_->metrics_helper()->RecordUserDecision(
-        security_interstitials::MetricsHelper::PROCEEDING_DISABLED);
-  }
-
-  if (!is_main_frame_load_blocked_) {
-    navigation_entry_index_to_remove_ =
-        web_state->GetNavigationManager()->GetLastCommittedItemIndex();
-  } else {
-    navigation_entry_index_to_remove_ = -1;
-  }
-}
-
-SafeBrowsingBlockingPage::~SafeBrowsingBlockingPage() {}
-
-void SafeBrowsingBlockingPage::CommandReceived(const std::string& page_cmd) {
-  if (page_cmd == "\"pageLoadComplete\"") {
-    // content::WaitForRenderFrameReady sends this message when the page
-    // load completes. Ignore it.
-    return;
-  }
-
-  int command = 0;
-  bool retval = base::StringToInt(page_cmd, &command);
-  DCHECK(retval) << page_cmd;
-
-  switch (command) {
-    case security_interstitials::CMD_DO_REPORT: {
-      // User enabled SB Extended Reporting via the checkbox.
-      controller_->SetReportingPreference(true);
-      break;
-    }
-    case security_interstitials::CMD_DONT_REPORT: {
-      // User disabled SB Extended Reporting via the checkbox.
-      controller_->SetReportingPreference(false);
-      break;
-    }
-    case security_interstitials::CMD_OPEN_HELP_CENTER: {
-      // User pressed "Learn more".
-      controller_->metrics_helper()->RecordUserInteraction(
-          security_interstitials::MetricsHelper::SHOW_LEARN_MORE);
-      GURL learn_more_url(interstitial_reason_ == SB_REASON_PHISHING
-                              ? kLearnMorePhishingUrlV2
-                              : kLearnMoreMalwareUrlV2);
-      learn_more_url = google_util::AppendGoogleLocaleParam(
-          learn_more_url, GetApplicationContext()->GetApplicationLocale());
-      web_state()->OpenURL(web::WebState::OpenURLParams(
-          learn_more_url, web::Referrer(), CURRENT_TAB,
-          ui::PAGE_TRANSITION_LINK, false));
-      break;
-    }
-    case security_interstitials::CMD_OPEN_REPORTING_PRIVACY: {
-      // User pressed on the SB Extended Reporting "privacy policy" link.
-      controller_->OpenExtendedReportingPrivacyPolicy();
-      break;
-    }
-    case security_interstitials::CMD_PROCEED: {
-      // User pressed on the button to proceed.
-      if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
-        controller_->metrics_helper()->RecordUserDecision(
-            security_interstitials::MetricsHelper::PROCEED);
-        web_interstitial()->Proceed();
-        // |this| has been deleted after Proceed() returns.
-        break;
-      }
-      // If the user can't proceed, fall through to CMD_DONT_PROCEED.
-    }
-    case security_interstitials::CMD_DONT_PROCEED: {
-      // User pressed on the button to return to safety.
-      // Don't record the user action here because there are other ways of
-      // triggering DontProceed, like clicking the back button.
-      if (is_main_frame_load_blocked_) {
-        // If the load is blocked, we want to close the interstitial and discard
-        // the pending entry.
-        web_interstitial()->DontProceed();
-        // |this| has been deleted after DontProceed() returns.
-        break;
-      }
-
-      // Otherwise the offending entry has committed, and we need to go back or
-      // to a safe page.  We will close the interstitial when that page commits.
-      if (web_state()->GetNavigationManager()->CanGoBack()) {
-        web_state()->GetNavigationManager()->GoBack();
-      } else {
-        web_state()->OpenURL(web::WebState::OpenURLParams(
-            GURL(kChromeUINewTabURL), web::Referrer(), CURRENT_TAB,
-            ui::PAGE_TRANSITION_AUTO_TOPLEVEL, false));
-      }
-      break;
-    }
-    case security_interstitials::CMD_OPEN_DIAGNOSTIC: {
-      // User wants to see why this page is blocked.
-      const UnsafeResource& unsafe_resource = unsafe_resources_[0];
-      std::string bad_url_spec = unsafe_resource.url.spec();
-      controller_->metrics_helper()->RecordUserInteraction(
-          security_interstitials::MetricsHelper::SHOW_DIAGNOSTIC);
-      std::string diagnostic = base::StringPrintf(
-          kSbDiagnosticUrl,
-          net::EscapeQueryParamValue(bad_url_spec, true).c_str());
-      GURL diagnostic_url(diagnostic);
-      diagnostic_url = google_util::AppendGoogleLocaleParam(
-          diagnostic_url, GetApplicationContext()->GetApplicationLocale());
-      DCHECK(unsafe_resource.threat_type == SB_THREAT_TYPE_URL_MALWARE ||
-             unsafe_resource.threat_type ==
-                 SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL ||
-             unsafe_resource.threat_type == SB_THREAT_TYPE_URL_UNWANTED);
-      web_state()->OpenURL(web::WebState::OpenURLParams(
-          diagnostic_url, web::Referrer(), CURRENT_TAB,
-          ui::PAGE_TRANSITION_LINK, false));
-      break;
-    }
-    case security_interstitials::CMD_SHOW_MORE_SECTION: {
-      // User has opened up the hidden text.
-      controller_->metrics_helper()->RecordUserInteraction(
-          security_interstitials::MetricsHelper::SHOW_ADVANCED);
-      break;
-    }
-    case security_interstitials::CMD_REPORT_PHISHING_ERROR: {
-      // User wants to report a phishing error.
-      controller_->metrics_helper()->RecordUserInteraction(
-          security_interstitials::MetricsHelper::REPORT_PHISHING_ERROR);
-      GURL phishing_error_url(kReportPhishingErrorUrl);
-      phishing_error_url = google_util::AppendGoogleLocaleParam(
-          phishing_error_url, GetApplicationContext()->GetApplicationLocale());
-      web_state()->OpenURL(web::WebState::OpenURLParams(
-          phishing_error_url, web::Referrer(), CURRENT_TAB,
-          ui::PAGE_TRANSITION_LINK, false));
-      break;
-    }
-  }
-}
-
-void SafeBrowsingBlockingPage::OnProceed() {
-  proceeded_ = true;
-  ui_manager_->OnBlockingPageDone(unsafe_resources_, true);
-
-  // Check to see if some new notifications of unsafe resources have been
-  // received while we were showing the interstitial.
-  UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap();
-  UnsafeResourceMap::iterator iter = unsafe_resource_map->find(web_state());
-  SafeBrowsingBlockingPage* blocking_page = nullptr;
-  if (iter != unsafe_resource_map->end() && !iter->second.empty()) {
-    // Build an interstitial for all the unsafe resources notifications.
-    // Don't show it now as showing an interstitial while an interstitial is
-    // already showing would cause DontProceed() to be invoked.
-    blocking_page = factory_->CreateSafeBrowsingPage(ui_manager_, web_state(),
-                                                     iter->second);
-    unsafe_resource_map->erase(iter);
-  }
-
-  // Now that this interstitial is gone, we can show the new one.
-  if (blocking_page)
-    blocking_page->Show();
-}
-
-bool SafeBrowsingBlockingPage::ShouldCreateNewNavigation() const {
-  return is_main_frame_load_blocked_;
-}
-
-void SafeBrowsingBlockingPage::OnDontProceed() {
-  // We could have already called Proceed(), in which case we must not notify
-  // the SafeBrowsingUIManager again, as the client has been deleted.
-  if (proceeded_)
-    return;
-
-  if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
-    controller_->metrics_helper()->RecordUserDecision(
-        security_interstitials::MetricsHelper::DONT_PROCEED);
-  }
-
-  ui_manager_->OnBlockingPageDone(unsafe_resources_, false);
-
-  // The user does not want to proceed, clear the queued unsafe resources
-  // notifications we received while the interstitial was showing.
-  UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap();
-  UnsafeResourceMap::iterator iter = unsafe_resource_map->find(web_state());
-  if (iter != unsafe_resource_map->end() && !iter->second.empty()) {
-    ui_manager_->OnBlockingPageDone(iter->second, false);
-    unsafe_resource_map->erase(iter);
-  }
-
-  // We don't remove the navigation entry if the tab is being destroyed as this
-  // would trigger a navigation that would cause trouble as the render view host
-  // for the tab has by then already been destroyed.  We also don't delete the
-  // current entry if it has been committed again, which is possible on a page
-  // that had a subresource warning.
-  int last_committed_index =
-      web_state()->GetNavigationManager()->GetLastCommittedItemIndex();
-  if (navigation_entry_index_to_remove_ != -1 &&
-      navigation_entry_index_to_remove_ != last_committed_index &&
-      !web_state()->IsBeingDestroyed()) {
-    CHECK(web_state()->GetNavigationManager()->RemoveItemAtIndex(
-        navigation_entry_index_to_remove_));
-    navigation_entry_index_to_remove_ = -1;
-  }
-}
-
-// static
-SafeBrowsingBlockingPage::UnsafeResourceMap*
-SafeBrowsingBlockingPage::GetUnsafeResourcesMap() {
-  return g_unsafe_resource_map.Pointer();
-}
-
-// static
-SafeBrowsingBlockingPage* SafeBrowsingBlockingPage::CreateBlockingPage(
-    SafeBrowsingUIManager* ui_manager,
-    web::WebState* web_state,
-    const UnsafeResource& unsafe_resource) {
-  std::vector<UnsafeResource> resources;
-  resources.push_back(unsafe_resource);
-  // Set up the factory if this has not been done already (tests do that
-  // before this method is called).
-  if (!factory_)
-    factory_ = g_safe_browsing_blocking_page_factory_impl.Pointer();
-  return factory_->CreateSafeBrowsingPage(ui_manager, web_state, resources);
-}
-
-// static
-void SafeBrowsingBlockingPage::ShowBlockingPage(
-    web::WebState* web_state,
-    SafeBrowsingUIManager* ui_manager,
-    const UnsafeResource& unsafe_resource) {
-  DVLOG(1) << __FUNCTION__ << " " << unsafe_resource.url.spec();
-  web::WebInterstitial* web_interstitial =
-      web::WebInterstitial::GetWebInterstitial(web_state);
-  if (web_interstitial && !unsafe_resource.is_subresource) {
-    // There is already an interstitial showing and we are about to display a
-    // new one for the main frame. Just hide the current one, it is now
-    // irrelevent
-    web_interstitial->DontProceed();
-    web_interstitial = nullptr;
-  }
-
-  if (!web_interstitial) {
-    // There are no interstitial currently showing in that tab, go ahead and
-    // show this interstitial.
-    SafeBrowsingBlockingPage* blocking_page =
-        CreateBlockingPage(ui_manager, web_state, unsafe_resource);
-    blocking_page->Show();
-    return;
-  }
-
-  // This is an interstitial for a page's resource, let's queue it.
-  UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap();
-  (*unsafe_resource_map)[web_state].push_back(unsafe_resource);
-}
-
-// static
-bool SafeBrowsingBlockingPage::IsMainPageLoadBlocked(
-    const UnsafeResourceList& unsafe_resources) {
-  // If there is more than one unsafe resource, the main page load must not be
-  // blocked. Otherwise, check if the one resource is.
-  return unsafe_resources.size() == 1 &&
-         unsafe_resources[0].IsMainPageLoadBlocked();
-}
-
-std::string SafeBrowsingBlockingPage::GetMetricPrefix() const {
-  bool primary_subresource = unsafe_resources_[0].is_subresource;
-  switch (interstitial_reason_) {
-    case SB_REASON_MALWARE:
-      return primary_subresource ? "malware_subresource" : "malware";
-    case SB_REASON_HARMFUL:
-      return primary_subresource ? "harmful_subresource" : "harmful";
-    case SB_REASON_PHISHING:
-      return primary_subresource ? "phishing_subresource" : "phishing";
-  }
-  NOTREACHED();
-  return std::string();
-}
-
-// We populate a parallel set of metrics to differentiate some threat sources.
-std::string SafeBrowsingBlockingPage::GetExtraMetricsSuffix() const {
-  switch (unsafe_resources_[0].threat_source) {
-    case safe_browsing::ThreatSource::DATA_SAVER:
-      return "from_data_saver";
-    case safe_browsing::ThreatSource::REMOTE:
-    case safe_browsing::ThreatSource::LOCAL_PVER3:
-      // REMOTE and LOCAL_PVER3 can be distinguished in the logs
-      // by platform type: Remote is mobile, local_pver3 is desktop.
-      return "from_device";
-    case safe_browsing::ThreatSource::LOCAL_PVER4:
-      return "from_device_v4";
-    case safe_browsing::ThreatSource::UNKNOWN:
-      break;
-  }
-  NOTREACHED();
-  return std::string();
-}
-
-std::string SafeBrowsingBlockingPage::GetRapporPrefix() const {
-  switch (interstitial_reason_) {
-    case SB_REASON_MALWARE:
-      return "malware";
-    case SB_REASON_HARMFUL:
-      return "harmful";
-    case SB_REASON_PHISHING:
-      return "phishing";
-  }
-  NOTREACHED();
-  return std::string();
-}
-
-std::string SafeBrowsingBlockingPage::GetSamplingEventName() const {
-  switch (interstitial_reason_) {
-    case SB_REASON_MALWARE:
-      return kEventNameMalware;
-    case SB_REASON_HARMFUL:
-      return kEventNameHarmful;
-    case SB_REASON_PHISHING:
-      return kEventNamePhishing;
-    default:
-      return kEventNameOther;
-  }
-}
-
-void SafeBrowsingBlockingPage::PopulateInterstitialStrings(
-    base::DictionaryValue* load_time_data) const {
-  CHECK(load_time_data);
-  CHECK(!unsafe_resources_.empty());
-
-  load_time_data->SetString("type", "SAFEBROWSING");
-  load_time_data->SetString(
-      "tabTitle", l10n_util::GetStringUTF16(IDS_IOS_SAFEBROWSING_V3_TITLE));
-  load_time_data->SetString(
-      "openDetails",
-      l10n_util::GetStringUTF16(IDS_IOS_SAFEBROWSING_V3_OPEN_DETAILS_BUTTON));
-  load_time_data->SetString(
-      "closeDetails",
-      l10n_util::GetStringUTF16(IDS_IOS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON));
-  load_time_data->SetString(
-      "primaryButtonText", l10n_util::GetStringUTF16(
-                               IDS_IOS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON));
-  // TODO(crbug.com/390675): Undo this forkage. This is a temporary fix to make
-  // sure the broken proceed-from-unsafe-resource path can't be hit on iOS.
-  // Always set subresource alerts to be non-overridable. Otherwise obey the
-  // global pref.
-  bool overridable = !unsafe_resources_[0].is_subresource &&
-                     !IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled);
-  load_time_data->SetBoolean("overridable", overridable);
-
-  switch (interstitial_reason_) {
-    case SB_REASON_MALWARE:
-      PopulateMalwareLoadTimeData(load_time_data);
-      break;
-    case SB_REASON_HARMFUL:
-      PopulateHarmfulLoadTimeData(load_time_data);
-      break;
-    case SB_REASON_PHISHING:
-      PopulatePhishingLoadTimeData(load_time_data);
-      break;
-  }
-}
-
-void SafeBrowsingBlockingPage::AfterShow() {
-  controller_->SetWebInterstitial(web_interstitial());
-}
-
-void SafeBrowsingBlockingPage::PopulateMalwareLoadTimeData(
-    base::DictionaryValue* load_time_data) const {
-  load_time_data->SetBoolean("phishing", false);
-  load_time_data->SetString(
-      "heading", l10n_util::GetStringUTF16(IDS_IOS_MALWARE_V3_HEADING));
-  load_time_data->SetString(
-      "primaryParagraph",
-      l10n_util::GetStringFUTF16(IDS_IOS_MALWARE_V3_PRIMARY_PARAGRAPH,
-                                 GetFormattedHostName()));
-  load_time_data->SetString(
-      "explanationParagraph",
-      is_main_frame_load_blocked_
-          ? l10n_util::GetStringFUTF16(IDS_IOS_MALWARE_V3_EXPLANATION_PARAGRAPH,
-                                       GetFormattedHostName())
-          : l10n_util::GetStringFUTF16(
-                IDS_IOS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE,
-                base::UTF8ToUTF16(web_state()->GetVisibleURL().host()),
-                GetFormattedHostName()));
-  load_time_data->SetString(
-      "finalParagraph",
-      l10n_util::GetStringUTF16(IDS_IOS_MALWARE_V3_PROCEED_PARAGRAPH));
-
-  load_time_data->SetBoolean(security_interstitials::kDisplayCheckBox, false);
-}
-
-void SafeBrowsingBlockingPage::PopulateHarmfulLoadTimeData(
-    base::DictionaryValue* load_time_data) const {
-  load_time_data->SetBoolean("phishing", false);
-  load_time_data->SetString(
-      "heading", l10n_util::GetStringUTF16(IDS_IOS_HARMFUL_V3_HEADING));
-  load_time_data->SetString(
-      "primaryParagraph",
-      l10n_util::GetStringFUTF16(IDS_IOS_HARMFUL_V3_PRIMARY_PARAGRAPH,
-                                 GetFormattedHostName()));
-  load_time_data->SetString(
-      "explanationParagraph",
-      l10n_util::GetStringFUTF16(IDS_IOS_HARMFUL_V3_EXPLANATION_PARAGRAPH,
-                                 GetFormattedHostName()));
-  load_time_data->SetString(
-      "finalParagraph",
-      l10n_util::GetStringUTF16(IDS_IOS_HARMFUL_V3_PROCEED_PARAGRAPH));
-
-  load_time_data->SetBoolean(security_interstitials::kDisplayCheckBox, false);
-}
-
-void SafeBrowsingBlockingPage::PopulatePhishingLoadTimeData(
-    base::DictionaryValue* load_time_data) const {
-  bool use_social_engineering_strings =
-      base::FieldTrialList::FindFullName(kSocialEngineeringTrial) ==
-      kSocialEngineeringEnabled;
-  load_time_data->SetBoolean("phishing", true);
-  load_time_data->SetString(
-      "heading", l10n_util::GetStringUTF16(use_social_engineering_strings
-                                               ? IDS_IOS_PHISHING_V4_HEADING
-                                               : IDS_IOS_PHISHING_V3_HEADING));
-  load_time_data->SetString(
-      "primaryParagraph",
-      l10n_util::GetStringFUTF16(use_social_engineering_strings
-                                     ? IDS_IOS_PHISHING_V4_PRIMARY_PARAGRAPH
-                                     : IDS_IOS_PHISHING_V3_PRIMARY_PARAGRAPH,
-                                 GetFormattedHostName()));
-  load_time_data->SetString(
-      "explanationParagraph",
-      l10n_util::GetStringFUTF16(IDS_IOS_PHISHING_V3_EXPLANATION_PARAGRAPH,
-                                 GetFormattedHostName()));
-
-  if (base::FieldTrialList::FindFullName(kReportPhishingErrorTrial) ==
-      kReportPhishingErrorEnabled) {
-    load_time_data->SetString(
-        "finalParagraph",
-        l10n_util::GetStringUTF16(
-            IDS_IOS_PHISHING_V4_PROCEED_AND_REPORT_PARAGRAPH));
-  } else {
-    load_time_data->SetString(
-        "finalParagraph",
-        l10n_util::GetStringUTF16(IDS_IOS_PHISHING_V3_PROCEED_PARAGRAPH));
-  }
-
-  load_time_data->SetBoolean(security_interstitials::kDisplayCheckBox, false);
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/safe_browsing/safe_browsing_service.cc b/ios/chrome/browser/safe_browsing/safe_browsing_service.cc
deleted file mode 100644
index e2bbe92a..0000000
--- a/ios/chrome/browser/safe_browsing/safe_browsing_service.cc
+++ /dev/null
@@ -1,435 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/safe_browsing/safe_browsing_service.h"
-
-#include <vector>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/command_line.h"
-#include "base/lazy_instance.h"
-#include "base/macros.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/path_service.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/threading/thread.h"
-#include "base/threading/thread_restrictions.h"
-#include "components/prefs/pref_change_registrar.h"
-#include "components/prefs/pref_service.h"
-#include "ios/chrome/browser/application_context.h"
-#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
-#include "ios/chrome/browser/chrome_paths.h"
-#include "ios/chrome/browser/chrome_switches.h"
-#include "ios/chrome/browser/pref_names.h"
-#include "ios/chrome/browser/safe_browsing/ping_manager.h"
-#include "ios/chrome/browser/safe_browsing/ui_manager.h"
-#include "ios/web/public/web_thread.h"
-#include "net/cookies/cookie_monster.h"
-#include "net/extras/sqlite/cookie_crypto_delegate.h"
-#include "net/extras/sqlite/sqlite_persistent_cookie_store.h"
-#include "net/http/http_response_headers.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_getter.h"
-
-namespace safe_browsing {
-
-namespace {
-
-const base::FilePath::CharType kIOSChromeSafeBrowsingBaseFilename[] =
-    FILE_PATH_LITERAL("Safe Browsing");
-
-// Filename suffix for the cookie database.
-const base::FilePath::CharType kCookiesFile[] = FILE_PATH_LITERAL(" Cookies");
-
-// The default URL prefix where browser fetches chunk updates, hashes,
-// and reports safe browsing hits and malware details.
-const char kSbDefaultURLPrefix[] =
-    "https://safebrowsing.google.com/safebrowsing";
-
-// The backup URL prefix used when there are issues establishing a connection
-// with the server at the primary URL.
-const char kSbBackupConnectErrorURLPrefix[] =
-    "https://alt1-safebrowsing.google.com/safebrowsing";
-
-// The backup URL prefix used when there are HTTP-specific issues with the
-// server at the primary URL.
-const char kSbBackupHttpErrorURLPrefix[] =
-    "https://alt2-safebrowsing.google.com/safebrowsing";
-
-// The backup URL prefix used when there are local network specific issues.
-const char kSbBackupNetworkErrorURLPrefix[] =
-    "https://alt3-safebrowsing.google.com/safebrowsing";
-
-}  // namespace
-
-class SafeBrowsingURLRequestContextGetter
-    : public net::URLRequestContextGetter {
- public:
-  explicit SafeBrowsingURLRequestContextGetter(
-      scoped_refptr<net::URLRequestContextGetter> system_context_getter);
-
-  // Implementation for net::UrlRequestContextGetter.
-  net::URLRequestContext* GetURLRequestContext() override;
-  scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
-      const override;
-
-  // Shuts down any pending requests using the getter, and sets |shut_down_| to
-  // true.
-  void ServiceShuttingDown();
-
- protected:
-  ~SafeBrowsingURLRequestContextGetter() override;
-
- private:
-  bool shut_down_;
-
-  scoped_refptr<net::URLRequestContextGetter> system_context_getter_;
-
-  scoped_ptr<net::CookieStore> safe_browsing_cookie_store_;
-
-  scoped_ptr<net::URLRequestContext> safe_browsing_request_context_;
-
-  scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
-};
-
-SafeBrowsingURLRequestContextGetter::SafeBrowsingURLRequestContextGetter(
-    scoped_refptr<net::URLRequestContextGetter> system_context_getter)
-    : shut_down_(false),
-      system_context_getter_(system_context_getter),
-      network_task_runner_(
-          web::WebThread::GetTaskRunnerForThread(web::WebThread::IO)) {}
-
-net::URLRequestContext*
-SafeBrowsingURLRequestContextGetter::GetURLRequestContext() {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-
-  // Check if the service has been shut down.
-  if (shut_down_)
-    return nullptr;
-
-  if (!safe_browsing_request_context_) {
-    safe_browsing_request_context_.reset(new net::URLRequestContext());
-    // May be NULL in unit tests.
-    if (system_context_getter_) {
-      safe_browsing_request_context_->CopyFrom(
-          system_context_getter_->GetURLRequestContext());
-    }
-
-    scoped_refptr<net::SQLitePersistentCookieStore> sqlite_store(
-        new net::SQLitePersistentCookieStore(
-            base::FilePath(SafeBrowsingService::GetBaseFilename().value() +
-                           kCookiesFile),
-            network_task_runner_,
-            web::WebThread::GetBlockingPool()->GetSequencedTaskRunner(
-                web::WebThread::GetBlockingPool()->GetSequenceToken()),
-            false, nullptr));
-    safe_browsing_cookie_store_.reset(
-        new net::CookieMonster(sqlite_store.get(), nullptr));
-    safe_browsing_request_context_->set_cookie_store(
-        safe_browsing_cookie_store_.get());
-  }
-
-  return safe_browsing_request_context_.get();
-}
-
-scoped_refptr<base::SingleThreadTaskRunner>
-SafeBrowsingURLRequestContextGetter::GetNetworkTaskRunner() const {
-  return network_task_runner_;
-}
-
-void SafeBrowsingURLRequestContextGetter::ServiceShuttingDown() {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-
-  shut_down_ = true;
-  URLRequestContextGetter::NotifyContextShuttingDown();
-  safe_browsing_request_context_.reset();
-}
-
-SafeBrowsingURLRequestContextGetter::~SafeBrowsingURLRequestContextGetter() {}
-
-// static
-SafeBrowsingServiceFactory* SafeBrowsingService::factory_ = nullptr;
-
-// The default SafeBrowsingServiceFactory.  Global, made a singleton so we
-// don't leak it.
-class SafeBrowsingServiceFactoryImpl : public SafeBrowsingServiceFactory {
- public:
-  SafeBrowsingService* CreateSafeBrowsingService() override {
-    return new SafeBrowsingService();
-  }
-
- private:
-  friend struct base::DefaultLazyInstanceTraits<SafeBrowsingServiceFactoryImpl>;
-
-  SafeBrowsingServiceFactoryImpl() {}
-
-  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingServiceFactoryImpl);
-};
-
-static base::LazyInstance<SafeBrowsingServiceFactoryImpl>::Leaky
-    g_safe_browsing_service_factory_impl = LAZY_INSTANCE_INITIALIZER;
-
-// static
-base::FilePath SafeBrowsingService::GetBaseFilename() {
-  base::FilePath path;
-  bool result = PathService::Get(ios::DIR_USER_DATA, &path);
-  DCHECK(result);
-  return path.Append(kIOSChromeSafeBrowsingBaseFilename);
-}
-
-// static
-SafeBrowsingService* SafeBrowsingService::CreateSafeBrowsingService() {
-  if (!factory_)
-    factory_ = g_safe_browsing_service_factory_impl.Pointer();
-  return factory_->CreateSafeBrowsingService();
-}
-
-SafeBrowsingService::SafeBrowsingService()
-    : ping_manager_(nullptr), enabled_(false), enabled_by_prefs_(false) {}
-
-SafeBrowsingService::~SafeBrowsingService() {
-  // We should have already been shut down. If we're still enabled, then the
-  // database isn't going to be closed properly, which could lead to corruption.
-  DCHECK(!enabled_);
-}
-
-void SafeBrowsingService::Initialize() {
-  url_request_context_getter_ = new SafeBrowsingURLRequestContextGetter(
-      GetApplicationContext()->GetSystemURLRequestContext());
-
-  ui_manager_ = CreateUIManager();
-
-  // Track the safe browsing preference of existing browser states.
-  // The SafeBrowsingService will be started if any existing browser state has
-  // the preference enabled. It will also listen for updates to the preferences.
-  ios::ChromeBrowserStateManager* browser_state_manager =
-      GetApplicationContext()->GetChromeBrowserStateManager();
-  DCHECK(browser_state_manager);
-
-  std::vector<ios::ChromeBrowserState*> browser_states =
-      browser_state_manager->GetLoadedBrowserStates();
-  DCHECK_GT(browser_states.size(), 0u);
-  for (ios::ChromeBrowserState* browser_state : browser_states) {
-    if (browser_state->IsOffTheRecord())
-      continue;
-    AddPrefService(browser_state->GetPrefs());
-  }
-}
-
-void SafeBrowsingService::ShutDown() {
-  // Deletes the PrefChangeRegistrars, whose dtors also unregister |this| as an
-  // observer of the preferences.
-  STLDeleteValues(&prefs_map_);
-
-  Stop(true);
-
-  // Since URLRequestContextGetters are refcounted, can't count on clearing
-  // |url_request_context_getter_| to delete it, so need to shut it down first,
-  // which will cancel any requests that are currently using it, and prevent
-  // new requests from using it as well.
-  web::WebThread::PostNonNestableTask(
-      web::WebThread::IO, FROM_HERE,
-      base::Bind(&SafeBrowsingURLRequestContextGetter::ServiceShuttingDown,
-                 url_request_context_getter_));
-
-  // Release the URLRequestContextGetter after passing it to the IOThread.  It
-  // has to be released now rather than in the destructor because it can only
-  // be deleted on the IOThread, and the SafeBrowsingService outlives the IO
-  // thread.
-  url_request_context_getter_ = nullptr;
-}
-
-// Binhash verification is only enabled for UMA users for now.
-bool SafeBrowsingService::DownloadBinHashNeeded() const {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-
-  return false;
-}
-
-net::URLRequestContextGetter* SafeBrowsingService::url_request_context() {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  return url_request_context_getter_.get();
-}
-
-const scoped_refptr<SafeBrowsingUIManager>& SafeBrowsingService::ui_manager()
-    const {
-  return ui_manager_;
-}
-
-SafeBrowsingPingManager* SafeBrowsingService::ping_manager() const {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-  return ping_manager_;
-}
-
-SBThreatType SafeBrowsingService::CheckResponseFromProxyRequestHeaders(
-    scoped_refptr<net::HttpResponseHeaders> headers) {
-  SBThreatType result = SB_THREAT_TYPE_SAFE;
-
-  if (!headers.get())
-    return result;
-
-  // If safebrowsing service is disabled, don't do any check.
-  if (!enabled())
-    return result;
-
-  if (headers->HasHeader("X-Phishing-Url"))
-    result = SB_THREAT_TYPE_URL_PHISHING;
-  else if (headers->HasHeader("X-Malware-Url"))
-    result = SB_THREAT_TYPE_URL_MALWARE;
-
-  return result;
-}
-
-SafeBrowsingUIManager* SafeBrowsingService::CreateUIManager() {
-  return new SafeBrowsingUIManager(this);
-}
-
-SafeBrowsingProtocolConfig SafeBrowsingService::GetProtocolConfig() const {
-  SafeBrowsingProtocolConfig config;
-#if defined(GOOGLE_CHROME_BUILD)
-  config.client_name = "googlechrome";
-#else
-  config.client_name = "chromium";
-#endif
-
-  // Mark client string to allow server to differentiate mobile.
-  config.client_name.append("-i");
-
-  base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
-  config.disable_auto_update =
-      cmdline->HasSwitch(switches::kSbDisableAutoUpdate) ||
-      cmdline->HasSwitch(switches::kDisableBackgroundNetworking);
-  config.url_prefix = kSbDefaultURLPrefix;
-  config.backup_connect_error_url_prefix = kSbBackupConnectErrorURLPrefix;
-  config.backup_http_error_url_prefix = kSbBackupHttpErrorURLPrefix;
-  config.backup_network_error_url_prefix = kSbBackupNetworkErrorURLPrefix;
-
-  return config;
-}
-
-void SafeBrowsingService::StartOnIOThread(
-    net::URLRequestContextGetter* url_request_context_getter) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-  if (enabled_)
-    return;
-  enabled_ = true;
-
-  SafeBrowsingProtocolConfig config = GetProtocolConfig();
-
-  DCHECK(!ping_manager_);
-  ping_manager_ =
-      SafeBrowsingPingManager::Create(url_request_context_getter, config);
-}
-
-void SafeBrowsingService::StopOnIOThread(bool shutdown) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-
-  ui_manager_->StopOnIOThread(shutdown);
-
-  if (enabled_) {
-    enabled_ = false;
-
-    delete ping_manager_;
-    ping_manager_ = nullptr;
-  }
-}
-
-void SafeBrowsingService::Start() {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-
-  web::WebThread::PostTask(
-      web::WebThread::IO, FROM_HERE,
-      base::Bind(&SafeBrowsingService::StartOnIOThread, this,
-                 base::RetainedRef(url_request_context_getter_)));
-}
-
-void SafeBrowsingService::Stop(bool shutdown) {
-  web::WebThread::PostTask(
-      web::WebThread::IO, FROM_HERE,
-      base::Bind(&SafeBrowsingService::StopOnIOThread, this, shutdown));
-}
-
-void SafeBrowsingService::AddPrefService(PrefService* pref_service) {
-  DCHECK(prefs_map_.find(pref_service) == prefs_map_.end());
-  PrefChangeRegistrar* registrar = new PrefChangeRegistrar();
-  registrar->Init(pref_service);
-  registrar->Add(
-      prefs::kSafeBrowsingEnabled,
-      base::Bind(&SafeBrowsingService::RefreshState, base::Unretained(this)));
-  // ClientSideDetectionService will need to be refresh the models
-  // renderers have if extended-reporting changes.
-  registrar->Add(
-      prefs::kSafeBrowsingExtendedReportingEnabled,
-      base::Bind(&SafeBrowsingService::RefreshState, base::Unretained(this)));
-  prefs_map_[pref_service] = registrar;
-  RefreshState();
-
-  // Record the current pref state.
-  UMA_HISTOGRAM_BOOLEAN("SafeBrowsing.Pref.General",
-                        pref_service->GetBoolean(prefs::kSafeBrowsingEnabled));
-  UMA_HISTOGRAM_BOOLEAN(
-      "SafeBrowsing.Pref.Extended",
-      pref_service->GetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled));
-}
-
-void SafeBrowsingService::RemovePrefService(PrefService* pref_service) {
-  if (prefs_map_.find(pref_service) != prefs_map_.end()) {
-    delete prefs_map_[pref_service];
-    prefs_map_.erase(pref_service);
-    RefreshState();
-  } else {
-    NOTREACHED();
-  }
-}
-
-scoped_ptr<SafeBrowsingService::StateSubscription>
-SafeBrowsingService::RegisterStateCallback(
-    const base::Callback<void(void)>& callback) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  return state_callback_list_.Add(callback);
-}
-
-void SafeBrowsingService::RefreshState() {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  // Check if any browser state requires the service to be active.
-  bool enable = false;
-  std::map<PrefService*, PrefChangeRegistrar*>::iterator iter;
-  for (iter = prefs_map_.begin(); iter != prefs_map_.end(); ++iter) {
-    if (iter->first->GetBoolean(prefs::kSafeBrowsingEnabled)) {
-      enable = true;
-      break;
-    }
-  }
-
-  enabled_by_prefs_ = enable;
-
-  if (enable)
-    Start();
-  else
-    Stop(false);
-
-  state_callback_list_.Notify();
-}
-
-void SafeBrowsingService::SendDownloadRecoveryReport(
-    const std::string& report) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  web::WebThread::PostTask(
-      web::WebThread::IO, FROM_HERE,
-      base::Bind(&SafeBrowsingService::OnSendDownloadRecoveryReport, this,
-                 report));
-}
-
-void SafeBrowsingService::OnSendDownloadRecoveryReport(
-    const std::string& report) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-  if (ping_manager())
-    ping_manager()->ReportThreatDetails(report);
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/safe_browsing/safe_browsing_service.h b/ios/chrome/browser/safe_browsing/safe_browsing_service.h
deleted file mode 100644
index 4b3507a3..0000000
--- a/ios/chrome/browser/safe_browsing/safe_browsing_service.h
+++ /dev/null
@@ -1,215 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// The Safe Browsing service is responsible for downloading anti-phishing and
-// anti-malware tables and checking urls against them.
-
-#ifndef IOS_CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_SERVICE_H_
-#define IOS_CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_SERVICE_H_
-
-#include <map>
-#include <string>
-
-#include "base/callback.h"
-#include "base/callback_list.h"
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/observer_list.h"
-#include "base/sequenced_task_runner_helpers.h"
-#include "ios/chrome/browser/safe_browsing/util.h"
-#include "ios/web/public/web_thread.h"
-
-class PrefChangeRegistrar;
-class PrefService;
-class TrackedPreferenceValidationDelegate;
-
-namespace base {
-class Thread;
-}
-
-namespace net {
-class HttpResponseHeaders;
-class URLRequest;
-class URLRequestContextGetter;
-}
-
-namespace safe_browsing {
-class ClientSideDetectionService;
-class DownloadProtectionService;
-struct SafeBrowsingProtocolConfig;
-class SafeBrowsingPingManager;
-class SafeBrowsingServiceFactory;
-class SafeBrowsingUIManager;
-class SafeBrowsingURLRequestContextGetter;
-
-// Construction needs to happen on the main thread.
-// The SafeBrowsingService owns both the UI and Database managers which do
-// the heavylifting of safebrowsing service. Both of these managers stay
-// alive until SafeBrowsingService is destroyed, however, they are disabled
-// permanently when Shutdown method is called.
-class SafeBrowsingService
-    : public base::RefCountedThreadSafe<SafeBrowsingService,
-                                        web::WebThread::DeleteOnUIThread> {
- public:
-  // Makes the passed |factory| the factory used to instanciate
-  // a SafeBrowsingService. Useful for tests.
-  static void RegisterFactory(SafeBrowsingServiceFactory* factory) {
-    factory_ = factory;
-  }
-
-  static base::FilePath GetBaseFilename();
-
-  // Create an instance of the safe browsing service.
-  static SafeBrowsingService* CreateSafeBrowsingService();
-
-  // Called on the UI thread to initialize the service.
-  void Initialize();
-
-  // Called on the main thread to let us know that the io_thread is going away.
-  void ShutDown();
-
-  // Called on UI thread to decide if the download file's sha256 hash
-  // should be calculated for safebrowsing.
-  bool DownloadBinHashNeeded() const;
-
-  // Create a protocol config struct.
-  SafeBrowsingProtocolConfig GetProtocolConfig() const;
-
-  // Get current enabled status. Must be called on IO thread.
-  bool enabled() const {
-    DCHECK_CURRENTLY_ON(web::WebThread::IO);
-    return enabled_;
-  }
-
-  // Whether the service is enabled by the current set of profiles.
-  bool enabled_by_prefs() const {
-    DCHECK_CURRENTLY_ON(web::WebThread::UI);
-    return enabled_by_prefs_;
-  }
-
-  net::URLRequestContextGetter* url_request_context();
-
-  const scoped_refptr<SafeBrowsingUIManager>& ui_manager() const;
-
-  SafeBrowsingPingManager* ping_manager() const;
-
-  // Checks |headers| from a request that has passed through a proxy which
-  // adds safe browsing headers, and returns the threat type indicated by those
-  // headers (or SB_THREAT_TYPE_SAFE if no threat is indicated).
-  SBThreatType CheckResponseFromProxyRequestHeaders(
-      scoped_refptr<net::HttpResponseHeaders> headers);
-
-  // Type for subscriptions to SafeBrowsing service state.
-  typedef base::CallbackList<void(void)>::Subscription StateSubscription;
-
-  // Adds a listener for when SafeBrowsing preferences might have changed.
-  // To get the current state, the callback should call enabled_by_prefs().
-  // Should only be called on the UI thread.
-  scoped_ptr<StateSubscription> RegisterStateCallback(
-      const base::Callback<void(void)>& callback);
-
-  // Sends serialized download recovery report to backend.
-  void SendDownloadRecoveryReport(const std::string& report);
-
- protected:
-  // Creates the safe browsing service.  Need to initialize before using.
-  SafeBrowsingService();
-
-  virtual ~SafeBrowsingService();
-
-  SafeBrowsingUIManager* CreateUIManager();
-
- private:
-  friend class SafeBrowsingServiceFactoryImpl;
-  friend struct web::WebThread::DeleteOnThread<web::WebThread::UI>;
-  friend class base::DeleteHelper<SafeBrowsingService>;
-  friend class SafeBrowsingURLRequestContextGetter;
-
-  // Called to initialize objects that are used on the io_thread.  This may be
-  // called multiple times during the life of the SafeBrowsingService.
-  void StartOnIOThread(
-      net::URLRequestContextGetter* url_request_context_getter);
-
-  // Called to stop or shutdown operations on the io_thread. This may be called
-  // multiple times to stop during the life of the SafeBrowsingService. If
-  // shutdown is true, then the operations on the io thread are shutdown
-  // permanently and cannot be restarted.
-  void StopOnIOThread(bool shutdown);
-
-  // Start up SafeBrowsing objects. This can be called at browser start, or when
-  // the user checks the "Enable SafeBrowsing" option in the Advanced options
-  // UI.
-  void Start();
-
-  // Stops the SafeBrowsingService. This can be called when the safe browsing
-  // preference is disabled. When shutdown is true, operation is permanently
-  // shutdown and cannot be restarted.
-  void Stop(bool shutdown);
-
-  // Starts following the safe browsing preference on |pref_service|.
-  void AddPrefService(PrefService* pref_service);
-
-  // Stop following the safe browsing preference on |pref_service|.
-  void RemovePrefService(PrefService* pref_service);
-
-  // Checks if any profile is currently using the safe browsing service, and
-  // starts or stops the service accordingly.
-  void RefreshState();
-
-  void OnSendDownloadRecoveryReport(const std::string& report);
-
-  // The factory used to instanciate a SafeBrowsingService object.
-  // Useful for tests, so they can provide their own implementation of
-  // SafeBrowsingService.
-  static SafeBrowsingServiceFactory* factory_;
-
-  // The SafeBrowsingURLRequestContextGetter used to access
-  // |url_request_context_|. Accessed on UI thread.
-  scoped_refptr<SafeBrowsingURLRequestContextGetter>
-      url_request_context_getter_;
-
-  // Provides phishing and malware statistics. Accessed on IO thread.
-  SafeBrowsingPingManager* ping_manager_;
-
-  // Whether the service is running. 'enabled_' is used by SafeBrowsingService
-  // on the IO thread during normal operations.
-  bool enabled_;
-
-  // Whether SafeBrowsing is enabled by the current set of profiles.
-  // Accessed on UI thread.
-  bool enabled_by_prefs_;
-
-  // Tracks existing PrefServices, and the safe browsing preference on each.
-  // This is used to determine if any profile is currently using the safe
-  // browsing service, and to start it up or shut it down accordingly.
-  // Accessed on UI thread.
-  std::map<PrefService*, PrefChangeRegistrar*> prefs_map_;
-
-  // Callbacks when SafeBrowsing state might have changed.
-  // Should only be accessed on the UI thread.
-  base::CallbackList<void(void)> state_callback_list_;
-
-  // The UI manager handles showing interstitials.  Accessed on both UI and IO
-  // thread.
-  scoped_refptr<SafeBrowsingUIManager> ui_manager_;
-
-  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingService);
-};
-
-// Factory for creating SafeBrowsingService.  Useful for tests.
-class SafeBrowsingServiceFactory {
- public:
-  SafeBrowsingServiceFactory() {}
-  virtual ~SafeBrowsingServiceFactory() {}
-  virtual SafeBrowsingService* CreateSafeBrowsingService() = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingServiceFactory);
-};
-
-}  // namespace safe_browsing
-
-#endif  // IOS_CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_SERVICE_H_
diff --git a/ios/chrome/browser/safe_browsing/ui_manager.h b/ios/chrome/browser/safe_browsing/ui_manager.h
deleted file mode 100644
index 1111614..0000000
--- a/ios/chrome/browser/safe_browsing/ui_manager.h
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// The Safe Browsing service is responsible for downloading anti-phishing and
-// anti-malware tables and checking urls against them.
-
-#ifndef IOS_CHROME_BROWSER_SAFE_BROWSING_UI_MANAGER_H_
-#define IOS_CHROME_BROWSER_SAFE_BROWSING_UI_MANAGER_H_
-
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
-#include "base/time/time.h"
-#include "ios/chrome/browser/safe_browsing/hit_report.h"
-#include "ios/chrome/browser/safe_browsing/util.h"
-#include "url/gurl.h"
-
-namespace base {
-class Thread;
-}  // namespace base
-
-namespace net {
-class SSLInfo;
-}  // namespace net
-
-namespace web {
-class WebState;
-}  // namespace web
-
-namespace safe_browsing {
-
-class SafeBrowsingService;
-
-// Construction needs to happen on the main thread.
-class SafeBrowsingUIManager
-    : public base::RefCountedThreadSafe<SafeBrowsingUIManager> {
- public:
-  // Passed a boolean indicating whether or not it is OK to proceed with
-  // loading an URL.
-  typedef base::Callback<void(bool /*proceed*/)> UrlCheckCallback;
-
-  // Structure used to pass parameters between the IO and UI thread when
-  // interacting with the blocking page.
-  struct UnsafeResource {
-    UnsafeResource();
-    ~UnsafeResource();
-
-    bool IsMainPageLoadBlocked() const;
-
-    GURL url;
-    GURL original_url;
-    std::vector<GURL> redirect_urls;
-    bool is_subresource;
-    bool is_subframe;
-    SBThreatType threat_type;
-    std::string threat_metadata;
-    UrlCheckCallback callback;  // This is called back on |callback_thread|.
-    scoped_refptr<base::SingleThreadTaskRunner> callback_thread;
-    base::WeakPtr<web::WebState> weak_web_state;
-    safe_browsing::ThreatSource threat_source;
-  };
-
-  // Observer class can be used to get notified when a SafeBrowsing hit
-  // was found.
-  class Observer {
-   public:
-    // The |resource| was classified as unsafe by SafeBrowsing, and is
-    // not whitelisted.
-    // The |resource| must not be accessed after OnSafeBrowsingHit returns.
-    // This method will be called on the UI thread.
-    virtual void OnSafeBrowsingHit(const UnsafeResource& resource) = 0;
-
-   protected:
-    Observer() {}
-    virtual ~Observer() {}
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(Observer);
-  };
-
-  explicit SafeBrowsingUIManager(
-      const scoped_refptr<SafeBrowsingService>& service);
-
-  // Called to stop or shutdown operations on the io_thread. This may be called
-  // multiple times during the life of the UIManager. Should be called
-  // on IO thread. If shutdown is true, the manager is disabled permanently.
-  void StopOnIOThread(bool shutdown);
-
-  // Called on the UI thread to display an interstitial page.
-  // |url| is the url of the resource that matches a safe browsing list.
-  // If the request contained a chain of redirects, |url| is the last url
-  // in the chain, and |original_url| is the first one (the root of the
-  // chain). Otherwise, |original_url| = |url|.
-  virtual void DisplayBlockingPage(const UnsafeResource& resource);
-
-  // Returns true if we already displayed an interstitial for that top-level
-  // site in a given WebContents. Called on the UI thread.
-  bool IsWhitelisted(const UnsafeResource& resource);
-
-  // The blocking page on the UI thread has completed.
-  void OnBlockingPageDone(const std::vector<UnsafeResource>& resources,
-                          bool proceed);
-
-  // Log the user perceived delay caused by SafeBrowsing. This delay is the time
-  // delta starting from when we would have started reading data from the
-  // network, and ending when the SafeBrowsing check completes indicating that
-  // the current page is 'safe'.
-  void LogPauseDelay(base::TimeDelta time);
-
-  // Called on the IO thread by the ThreatDetails with the serialized
-  // protocol buffer, so the service can send it over.
-  virtual void SendSerializedThreatDetails(const std::string& serialized);
-
-  // Report hits to the unsafe contents (malware, phishing, unsafe download URL)
-  // to the server. Can only be called on UI thread.  If |post_data| is
-  // non-empty, the request will be sent as a POST instead of a GET.
-  // Will report only for UMA || is_extended_reporting.
-  virtual void MaybeReportSafeBrowsingHit(
-      const safe_browsing::HitReport& hit_report);
-
-  // Report an invalid TLS/SSL certificate chain to the server. Can only
-  // be called on UI thread.
-  void ReportInvalidCertificateChain(const std::string& serialized_report,
-                                     const base::Closure& callback);
-
-  // Add and remove observers.  These methods must be invoked on the UI thread.
-  void AddObserver(Observer* observer);
-  void RemoveObserver(Observer* remove);
-
- protected:
-  virtual ~SafeBrowsingUIManager();
-
- private:
-  friend class base::RefCountedThreadSafe<SafeBrowsingUIManager>;
-
-  // Call protocol manager on IO thread to report hits of unsafe contents.
-  void ReportSafeBrowsingHitOnIOThread(
-      const safe_browsing::HitReport& hit_report);
-
-  // Sends an invalid certificate chain report over the network.
-  void ReportInvalidCertificateChainOnIOThread(
-      const std::string& serialized_report);
-
-  // Updates the whitelist state.  Called on the UI thread.
-  void AddToWhitelist(const UnsafeResource& resource);
-
-  // Safebrowsing service.
-  scoped_refptr<SafeBrowsingService> sb_service_;
-
-  base::ObserverList<Observer> observer_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingUIManager);
-};
-
-}  // namespace safe_browsing
-
-#endif  // IOS_CHROME_BROWSER_SAFE_BROWSING_UI_MANAGER_H_
diff --git a/ios/chrome/browser/safe_browsing/ui_manager.mm b/ios/chrome/browser/safe_browsing/ui_manager.mm
deleted file mode 100644
index 884d642..0000000
--- a/ios/chrome/browser/safe_browsing/ui_manager.mm
+++ /dev/null
@@ -1,336 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/safe_browsing/ui_manager.h"
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/debug/leak_tracker.h"
-#include "base/macros.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/threading/thread.h"
-#include "base/threading/thread_restrictions.h"
-#include "components/prefs/pref_service.h"
-#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
-#include "ios/chrome/browser/safe_browsing/metadata.pb.h"
-#include "ios/chrome/browser/safe_browsing/ping_manager.h"
-#include "ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
-#include "ios/chrome/browser/safe_browsing/safe_browsing_service.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
-#include "ios/web/public/navigation_item.h"
-#import "ios/web/public/navigation_manager.h"
-#include "ios/web/public/web_state/web_state.h"
-#include "ios/web/public/web_thread.h"
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
-#include "net/ssl/ssl_info.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_getter.h"
-
-namespace {
-
-const void* const kWhitelistKey = &kWhitelistKey;
-
-class WhitelistUrlSet : public base::SupportsUserData::Data {
- public:
-  WhitelistUrlSet() {}
-
-  bool Contains(const GURL url) {
-    auto iter = set_.find(url.GetWithEmptyPath());
-    return iter != set_.end();
-  }
-
-  void Insert(const GURL url) { set_.insert(url.GetWithEmptyPath()); }
-
- private:
-  std::set<GURL> set_;
-
-  DISALLOW_COPY_AND_ASSIGN(WhitelistUrlSet);
-};
-
-web::NavigationItem* GetActiveItemForNavigationManager(
-    web::NavigationManager* navigation_manager) {
-  web::NavigationItem* active_item = navigation_manager->GetTransientItem();
-  if (!active_item)
-    active_item = navigation_manager->GetPendingItem();
-  if (!active_item)
-    active_item = navigation_manager->GetLastCommittedItem();
-  return active_item;
-}
-
-}  // namespace
-
-namespace safe_browsing {
-
-// SafeBrowsingUIManager::UnsafeResource ---------------------------------------
-
-SafeBrowsingUIManager::UnsafeResource::UnsafeResource()
-    : is_subresource(false),
-      threat_type(SB_THREAT_TYPE_SAFE),
-      threat_source(safe_browsing::ThreatSource::UNKNOWN) {}
-
-SafeBrowsingUIManager::UnsafeResource::~UnsafeResource() {}
-
-bool SafeBrowsingUIManager::UnsafeResource::IsMainPageLoadBlocked() const {
-  // Subresource hits cannot happen until after main page load is committed.
-  if (is_subresource)
-    return false;
-
-  // Client-side phishing detection interstitials never block the main frame
-  // load, since they happen after the page is finished loading.
-  if (threat_type == SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL ||
-      threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL) {
-    return false;
-  }
-
-  return true;
-}
-
-// SafeBrowsingUIManager -------------------------------------------------------
-
-SafeBrowsingUIManager::SafeBrowsingUIManager(
-    const scoped_refptr<SafeBrowsingService>& service)
-    : sb_service_(service) {}
-
-SafeBrowsingUIManager::~SafeBrowsingUIManager() {}
-
-void SafeBrowsingUIManager::StopOnIOThread(bool shutdown) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-
-  if (shutdown)
-    sb_service_ = nullptr;
-}
-
-void SafeBrowsingUIManager::LogPauseDelay(base::TimeDelta time) {
-  UMA_HISTOGRAM_LONG_TIMES("SB2.Delay", time);
-}
-
-void SafeBrowsingUIManager::OnBlockingPageDone(
-    const std::vector<UnsafeResource>& resources,
-    bool proceed) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  for (const auto& resource : resources) {
-    if (!resource.callback.is_null()) {
-      DCHECK(resource.callback_thread);
-      resource.callback_thread->PostTask(
-          FROM_HERE, base::Bind(resource.callback, proceed));
-    }
-
-    if (proceed)
-      AddToWhitelist(resource);
-  }
-}
-
-void SafeBrowsingUIManager::DisplayBlockingPage(
-    const UnsafeResource& resource) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  if (resource.is_subresource && !resource.is_subframe) {
-    // Sites tagged as serving Unwanted Software should only show a warning for
-    // main-frame or sub-frame resource. Similar warning restrictions should be
-    // applied to malware sites tagged as "landing sites" (see "Types of
-    // Malware sites" under
-    // https://developers.google.com/safe-browsing/developers_guide_v3#UserWarnings).
-    MalwarePatternType proto;
-    if (resource.threat_type == SB_THREAT_TYPE_URL_UNWANTED ||
-        (resource.threat_type == SB_THREAT_TYPE_URL_MALWARE &&
-         !resource.threat_metadata.empty() &&
-         proto.ParseFromString(resource.threat_metadata) &&
-         proto.pattern_type() == MalwarePatternType::LANDING)) {
-      if (!resource.callback.is_null()) {
-        DCHECK(resource.callback_thread);
-        resource.callback_thread->PostTask(FROM_HERE,
-                                           base::Bind(resource.callback, true));
-      }
-
-      return;
-    }
-  }
-
-  // The tab might have been closed. If it was closed, just act as if "Don't
-  // Proceed" had been chosen.
-  web::WebState* web_state = resource.weak_web_state.get();
-  if (!web_state) {
-    std::vector<UnsafeResource> resources;
-    resources.push_back(resource);
-    OnBlockingPageDone(resources, false);
-    return;
-  }
-
-  // Check if the user has already ignored a SB warning for the same WebState
-  // and top-level domain.
-  if (IsWhitelisted(resource)) {
-    if (!resource.callback.is_null()) {
-      DCHECK(resource.callback_thread);
-      resource.callback_thread->PostTask(FROM_HERE,
-                                         base::Bind(resource.callback, true));
-    }
-    return;
-  }
-
-  if (resource.threat_type != SB_THREAT_TYPE_SAFE) {
-    HitReport hit_report;
-    hit_report.malicious_url = resource.url;
-    hit_report.page_url = web_state->GetVisibleURL();
-    hit_report.is_subresource = resource.is_subresource;
-    hit_report.threat_type = resource.threat_type;
-    hit_report.threat_source = resource.threat_source;
-
-    web::NavigationItem* item =
-        GetActiveItemForNavigationManager(web_state->GetNavigationManager());
-    if (item) {
-      hit_report.referrer_url = item->GetReferrer().url;
-    }
-
-    // When the malicious url is on the main frame, and resource.original_url
-    // is not the same as the resource.url, that means we have a redirect from
-    // resource.original_url to resource.url.
-    // Also, at this point, page_url points to the _previous_ page that we
-    // were on. We replace page_url with resource.original_url and referrer
-    // with page_url.
-    if (!resource.is_subresource && !resource.original_url.is_empty() &&
-        resource.original_url != resource.url) {
-      hit_report.referrer_url = hit_report.page_url;
-      hit_report.page_url = resource.original_url;
-    }
-
-    ios::ChromeBrowserState* browser_state =
-        ios::ChromeBrowserState::FromBrowserState(web_state->GetBrowserState());
-    hit_report.is_extended_reporting =
-        browser_state &&
-        browser_state->GetPrefs()->GetBoolean(
-            prefs::kSafeBrowsingExtendedReportingEnabled);
-    hit_report.is_metrics_reporting_active =
-        safe_browsing::IsMetricsReportingActive();
-
-    MaybeReportSafeBrowsingHit(hit_report);
-  }
-
-  if (resource.threat_type != SB_THREAT_TYPE_SAFE) {
-    FOR_EACH_OBSERVER(Observer, observer_list_, OnSafeBrowsingHit(resource));
-  }
-  SafeBrowsingBlockingPage::ShowBlockingPage(web_state, this, resource);
-}
-
-// A safebrowsing hit is sent after a blocking page for malware/phishing
-// or after the warning dialog for download urls, only for
-// UMA || extended_reporting users.
-void SafeBrowsingUIManager::MaybeReportSafeBrowsingHit(
-    const HitReport& hit_report) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-
-  // Decide if we should send this report.
-  if (hit_report.is_metrics_reporting_active ||
-      hit_report.is_extended_reporting) {
-    web::WebThread::PostTask(
-        web::WebThread::IO, FROM_HERE,
-        base::Bind(&SafeBrowsingUIManager::ReportSafeBrowsingHitOnIOThread,
-                   this, hit_report));
-  }
-}
-
-void SafeBrowsingUIManager::ReportSafeBrowsingHitOnIOThread(
-    const HitReport& hit_report) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-
-  // The service may delete the ping manager (i.e. when user disabling service,
-  // etc). This happens on the IO thread.
-  if (!sb_service_ || !sb_service_->ping_manager())
-    return;
-
-  DVLOG(1) << "ReportSafeBrowsingHit: " << hit_report.malicious_url << " "
-           << hit_report.page_url << " " << hit_report.referrer_url << " "
-           << hit_report.is_subresource << " " << hit_report.threat_type;
-  sb_service_->ping_manager()->ReportSafeBrowsingHit(hit_report);
-}
-
-void SafeBrowsingUIManager::ReportInvalidCertificateChain(
-    const std::string& serialized_report,
-    const base::Closure& callback) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  web::WebThread::PostTaskAndReply(
-      web::WebThread::IO, FROM_HERE,
-      base::Bind(
-          &SafeBrowsingUIManager::ReportInvalidCertificateChainOnIOThread, this,
-          serialized_report),
-      callback);
-}
-
-void SafeBrowsingUIManager::AddObserver(Observer* observer) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  observer_list_.AddObserver(observer);
-}
-
-void SafeBrowsingUIManager::RemoveObserver(Observer* observer) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  observer_list_.RemoveObserver(observer);
-}
-
-void SafeBrowsingUIManager::ReportInvalidCertificateChainOnIOThread(
-    const std::string& serialized_report) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-
-  // The service may delete the ping manager (i.e. when user disabling service,
-  // etc). This happens on the IO thread.
-  if (!sb_service_ || !sb_service_->ping_manager())
-    return;
-
-  sb_service_->ping_manager()->ReportInvalidCertificateChain(serialized_report);
-}
-
-// If the user had opted-in to send ThreatDetails, this gets called
-// when the report is ready.
-void SafeBrowsingUIManager::SendSerializedThreatDetails(
-    const std::string& serialized) {
-  DCHECK_CURRENTLY_ON(web::WebThread::IO);
-
-  // The service may delete the ping manager (i.e. when user disabling service,
-  // etc). This happens on the IO thread.
-  if (sb_service_.get() == nullptr || sb_service_->ping_manager() == nullptr)
-    return;
-
-  if (!serialized.empty()) {
-    DVLOG(1) << "Sending serialized threat details.";
-    sb_service_->ping_manager()->ReportThreatDetails(serialized);
-  }
-}
-
-// Whitelist this domain in the current WebState. Either add the
-// domain to an existing WhitelistUrlSet, or create a new WhitelistUrlSet.
-void SafeBrowsingUIManager::AddToWhitelist(const UnsafeResource& resource) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  DCHECK(resource.weak_web_state.get());
-
-  web::WebState* web_state = resource.weak_web_state.get();
-  WhitelistUrlSet* site_list =
-      static_cast<WhitelistUrlSet*>(web_state->GetUserData(kWhitelistKey));
-  if (!site_list) {
-    site_list = new WhitelistUrlSet;
-    web_state->SetUserData(kWhitelistKey, site_list);
-  }
-
-  GURL whitelisted_url(resource.is_subresource ? web_state->GetVisibleURL()
-                                               : resource.url);
-  site_list->Insert(whitelisted_url);
-}
-
-// Check if the user has already ignored a SB warning for this WebState and
-// top-level domain.
-bool SafeBrowsingUIManager::IsWhitelisted(const UnsafeResource& resource) {
-  DCHECK_CURRENTLY_ON(web::WebThread::UI);
-  DCHECK(resource.weak_web_state.get());
-
-  web::WebState* web_state = resource.weak_web_state.get();
-  GURL maybe_whitelisted_url(
-      resource.is_subresource ? web_state->GetVisibleURL() : resource.url);
-  WhitelistUrlSet* site_list =
-      static_cast<WhitelistUrlSet*>(web_state->GetUserData(kWhitelistKey));
-  if (!site_list)
-    return false;
-  return site_list->Contains(maybe_whitelisted_url);
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/safe_browsing/util.cc b/ios/chrome/browser/safe_browsing/util.cc
deleted file mode 100644
index 34052cb..0000000
--- a/ios/chrome/browser/safe_browsing/util.cc
+++ /dev/null
@@ -1,395 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/safe_browsing/util.h"
-
-#include <stddef.h>
-
-#include "base/macros.h"
-#include "base/strings/string_util.h"
-#include "crypto/sha2.h"
-#include "net/base/escape.h"
-#include "url/gurl.h"
-#include "url/url_util.h"
-
-namespace safe_browsing {
-
-// Utility functions -----------------------------------------------------------
-
-namespace {
-bool IsKnownList(const std::string& name) {
-  for (size_t i = 0; i < arraysize(kAllLists); ++i) {
-    if (!strcmp(kAllLists[i], name.c_str())) {
-      return true;
-    }
-  }
-  return false;
-}
-}  // namespace
-
-// SBCachedFullHashResult ------------------------------------------------------
-
-SBCachedFullHashResult::SBCachedFullHashResult() {}
-
-SBCachedFullHashResult::SBCachedFullHashResult(
-    const base::Time& in_expire_after)
-    : expire_after(in_expire_after) {}
-
-SBCachedFullHashResult::~SBCachedFullHashResult() {}
-
-// Listnames that browser can process.
-const char kMalwareList[] = "goog-malware-shavar";
-const char kPhishingList[] = "goog-phish-shavar";
-const char kBinUrlList[] = "goog-badbinurl-shavar";
-const char kCsdWhiteList[] = "goog-csdwhite-sha256";
-const char kDownloadWhiteList[] = "goog-downloadwhite-digest256";
-const char kExtensionBlacklist[] = "goog-badcrxids-digestvar";
-const char kIPBlacklist[] = "goog-badip-digest256";
-const char kUnwantedUrlList[] = "goog-unwanted-shavar";
-const char kInclusionWhitelist[] = "goog-csdinclusionwhite-sha256";
-
-const char* kAllLists[9] = {
-    kMalwareList,  kPhishingList,      kBinUrlList,
-    kCsdWhiteList, kDownloadWhiteList, kExtensionBlacklist,
-    kIPBlacklist,  kUnwantedUrlList,   kInclusionWhitelist,
-};
-
-ListType GetListId(const base::StringPiece& name) {
-  ListType id;
-  if (name == kMalwareList) {
-    id = MALWARE;
-  } else if (name == kPhishingList) {
-    id = PHISH;
-  } else if (name == kBinUrlList) {
-    id = BINURL;
-  } else if (name == kCsdWhiteList) {
-    id = CSDWHITELIST;
-  } else if (name == kDownloadWhiteList) {
-    id = DOWNLOADWHITELIST;
-  } else if (name == kExtensionBlacklist) {
-    id = EXTENSIONBLACKLIST;
-  } else if (name == kIPBlacklist) {
-    id = IPBLACKLIST;
-  } else if (name == kUnwantedUrlList) {
-    id = UNWANTEDURL;
-  } else if (name == kInclusionWhitelist) {
-    id = INCLUSIONWHITELIST;
-  } else {
-    id = INVALID;
-  }
-  return id;
-}
-
-bool GetListName(ListType list_id, std::string* list) {
-  switch (list_id) {
-    case MALWARE:
-      *list = kMalwareList;
-      break;
-    case PHISH:
-      *list = kPhishingList;
-      break;
-    case BINURL:
-      *list = kBinUrlList;
-      break;
-    case CSDWHITELIST:
-      *list = kCsdWhiteList;
-      break;
-    case DOWNLOADWHITELIST:
-      *list = kDownloadWhiteList;
-      break;
-    case EXTENSIONBLACKLIST:
-      *list = kExtensionBlacklist;
-      break;
-    case IPBLACKLIST:
-      *list = kIPBlacklist;
-      break;
-    case UNWANTEDURL:
-      *list = kUnwantedUrlList;
-      break;
-    case INCLUSIONWHITELIST:
-      *list = kInclusionWhitelist;
-      break;
-    default:
-      return false;
-  }
-  DCHECK(IsKnownList(*list));
-  return true;
-}
-
-SBFullHash SBFullHashForString(const base::StringPiece& str) {
-  SBFullHash h;
-  crypto::SHA256HashString(str, &h.full_hash, sizeof(h.full_hash));
-  return h;
-}
-
-SBFullHash StringToSBFullHash(const std::string& hash_in) {
-  DCHECK_EQ(crypto::kSHA256Length, hash_in.size());
-  SBFullHash hash_out;
-  memcpy(hash_out.full_hash, hash_in.data(), crypto::kSHA256Length);
-  return hash_out;
-}
-
-std::string SBFullHashToString(const SBFullHash& hash) {
-  DCHECK_EQ(crypto::kSHA256Length, sizeof(hash.full_hash));
-  return std::string(hash.full_hash, sizeof(hash.full_hash));
-}
-
-std::string Unescape(const std::string& url) {
-  std::string unescaped_str(url);
-  const int kMaxLoopIterations = 1024;
-  size_t old_size = 0;
-  int loop_var = 0;
-  do {
-    old_size = unescaped_str.size();
-    unescaped_str = net::UnescapeURLComponent(
-        unescaped_str,
-        net::UnescapeRule::SPOOFING_AND_CONTROL_CHARS |
-            net::UnescapeRule::SPACES | net::UnescapeRule::PATH_SEPARATORS |
-            net::UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS);
-  } while (old_size != unescaped_str.size() &&
-           ++loop_var <= kMaxLoopIterations);
-
-  return unescaped_str;
-}
-
-std::string Escape(const std::string& url) {
-  std::string escaped_str;
-  // The escaped string is larger so allocate double the length to reduce the
-  // chance of the string being grown.
-  escaped_str.reserve(url.length() * 2);
-  const char* kHexString = "0123456789ABCDEF";
-  for (size_t i = 0; i < url.length(); i++) {
-    unsigned char c = static_cast<unsigned char>(url[i]);
-    if (c <= ' ' || c > '~' || c == '#' || c == '%') {
-      escaped_str += '%';
-      escaped_str += kHexString[c >> 4];
-      escaped_str += kHexString[c & 0xf];
-    } else {
-      escaped_str += c;
-    }
-  }
-
-  return escaped_str;
-}
-
-std::string RemoveConsecutiveChars(base::StringPiece str, const char c) {
-  std::string output;
-  // Output is at most the length of the original string.
-  output.reserve(str.size());
-
-  size_t i = 0;
-  while (i < str.size()) {
-    output.append(1, str[i++]);
-    if (str[i - 1] == c) {
-      while (i < str.size() && str[i] == c) {
-        i++;
-      }
-    }
-  }
-
-  return output;
-}
-
-// Canonicalizes url as per Google Safe Browsing Specification.
-// See section 6.1 in
-// http://code.google.com/p/google-safe-browsing/wiki/Protocolv2Spec.
-void CanonicalizeUrl(const GURL& url,
-                     std::string* canonicalized_hostname,
-                     std::string* canonicalized_path,
-                     std::string* canonicalized_query) {
-  DCHECK(url.is_valid());
-
-  // We only canonicalize "normal" URLs.
-  if (!url.IsStandard())
-    return;
-
-  // Following canonicalization steps are excluded since url parsing takes care
-  // of those :-
-  // 1. Remove any tab (0x09), CR (0x0d), and LF (0x0a) chars from url.
-  //    (Exclude escaped version of these chars).
-  // 2. Normalize hostname to 4 dot-seperated decimal values.
-  // 3. Lowercase hostname.
-  // 4. Resolve path sequences "/../" and "/./".
-
-  // That leaves us with the following :-
-  // 1. Remove fragment in URL.
-  GURL url_without_fragment;
-  GURL::Replacements f_replacements;
-  f_replacements.ClearRef();
-  f_replacements.ClearUsername();
-  f_replacements.ClearPassword();
-  url_without_fragment = url.ReplaceComponents(f_replacements);
-
-  // 2. Do URL unescaping until no more hex encoded characters exist.
-  std::string url_unescaped_str(Unescape(url_without_fragment.spec()));
-  url::Parsed parsed;
-  url::ParseStandardURL(url_unescaped_str.data(), url_unescaped_str.length(),
-                        &parsed);
-
-  // 3. In hostname, remove all leading and trailing dots.
-  base::StringPiece host;
-  if (parsed.host.len > 0)
-    host.set(url_unescaped_str.data() + parsed.host.begin, parsed.host.len);
-
-  base::StringPiece host_without_end_dots =
-      base::TrimString(host, ".", base::TrimPositions::TRIM_ALL);
-
-  // 4. In hostname, replace consecutive dots with a single dot.
-  std::string host_without_consecutive_dots(
-      RemoveConsecutiveChars(host_without_end_dots, '.'));
-
-  // 5. In path, replace runs of consecutive slashes with a single slash.
-  base::StringPiece path;
-  if (parsed.path.len > 0)
-    path.set(url_unescaped_str.data() + parsed.path.begin, parsed.path.len);
-  std::string path_without_consecutive_slash(RemoveConsecutiveChars(path, '/'));
-
-  url::Replacements<char> hp_replacements;
-  hp_replacements.SetHost(
-      host_without_consecutive_dots.data(),
-      url::Component(0, host_without_consecutive_dots.length()));
-  hp_replacements.SetPath(
-      path_without_consecutive_slash.data(),
-      url::Component(0, path_without_consecutive_slash.length()));
-
-  std::string url_unescaped_with_can_hostpath;
-  url::StdStringCanonOutput output(&url_unescaped_with_can_hostpath);
-  url::Parsed temp_parsed;
-  url::ReplaceComponents(url_unescaped_str.data(), url_unescaped_str.length(),
-                         parsed, hp_replacements, NULL, &output, &temp_parsed);
-  output.Complete();
-
-  // 6. Step needed to revert escaping done in url::ReplaceComponents.
-  url_unescaped_with_can_hostpath = Unescape(url_unescaped_with_can_hostpath);
-
-  // 7. After performing all above steps, percent-escape all chars in url which
-  // are <= ASCII 32, >= 127, #, %. Escapes must be uppercase hex characters.
-  std::string escaped_canon_url_str(Escape(url_unescaped_with_can_hostpath));
-  url::Parsed final_parsed;
-  url::ParseStandardURL(escaped_canon_url_str.data(),
-                        escaped_canon_url_str.length(), &final_parsed);
-
-  if (canonicalized_hostname && final_parsed.host.len > 0) {
-    *canonicalized_hostname = escaped_canon_url_str.substr(
-        final_parsed.host.begin, final_parsed.host.len);
-  }
-  if (canonicalized_path && final_parsed.path.len > 0) {
-    *canonicalized_path = escaped_canon_url_str.substr(final_parsed.path.begin,
-                                                       final_parsed.path.len);
-  }
-  if (canonicalized_query && final_parsed.query.len > 0) {
-    *canonicalized_query = escaped_canon_url_str.substr(
-        final_parsed.query.begin, final_parsed.query.len);
-  }
-}
-
-void UrlToFullHashes(const GURL& url,
-                     bool include_whitelist_hashes,
-                     std::vector<SBFullHash>* full_hashes) {
-  std::vector<std::string> hosts;
-  if (url.HostIsIPAddress()) {
-    hosts.push_back(url.host());
-  } else {
-    GenerateHostsToCheck(url, &hosts);
-  }
-
-  std::vector<std::string> paths;
-  GeneratePathsToCheck(url, &paths);
-
-  for (const std::string& host : hosts) {
-    for (const std::string& path : paths) {
-      full_hashes->push_back(SBFullHashForString(host + path));
-
-      // We may have /foo as path-prefix in the whitelist which should
-      // also match with /foo/bar and /foo?bar.  Hence, for every path
-      // that ends in '/' we also add the path without the slash.
-      if (include_whitelist_hashes && path.size() > 1 &&
-          path[path.size() - 1] == '/') {
-        full_hashes->push_back(
-            SBFullHashForString(host + path.substr(0, path.size() - 1)));
-      }
-    }
-  }
-}
-
-void GenerateHostsToCheck(const GURL& url, std::vector<std::string>* hosts) {
-  hosts->clear();
-
-  std::string canon_host;
-  CanonicalizeUrl(url, &canon_host, NULL, NULL);
-
-  const std::string host = canon_host;  // const sidesteps GCC bugs below!
-  if (host.empty())
-    return;
-
-  // Per the Safe Browsing Protocol v2 spec, we try the host, and also up to 4
-  // hostnames formed by starting with the last 5 components and successively
-  // removing the leading component.  The last component isn't examined alone,
-  // since it's the TLD or a subcomponent thereof.
-  //
-  // Note that we don't need to be clever about stopping at the "real" eTLD --
-  // the data on the server side has been filtered to ensure it will not
-  // blacklist a whole TLD, and it's not significantly slower on our side to
-  // just check too much.
-  //
-  // Also note that because we have a simple blacklist, not some sort of complex
-  // whitelist-in-blacklist or vice versa, it doesn't matter what order we check
-  // these in.
-  const size_t kMaxHostsToCheck = 4;
-  bool skipped_last_component = false;
-  for (std::string::const_reverse_iterator i(host.rbegin());
-       i != host.rend() && hosts->size() < kMaxHostsToCheck; ++i) {
-    if (*i == '.') {
-      if (skipped_last_component)
-        hosts->push_back(std::string(i.base(), host.end()));
-      else
-        skipped_last_component = true;
-    }
-  }
-  hosts->push_back(host);
-}
-
-void GeneratePathsToCheck(const GURL& url, std::vector<std::string>* paths) {
-  paths->clear();
-
-  std::string canon_path;
-  std::string canon_query;
-  CanonicalizeUrl(url, NULL, &canon_path, &canon_query);
-
-  const std::string path = canon_path;  // const sidesteps GCC bugs below!
-  const std::string query = canon_query;
-  if (path.empty())
-    return;
-
-  // Per the Safe Browsing Protocol v2 spec, we try the exact path with/without
-  // the query parameters, and also up to 4 paths formed by starting at the root
-  // and adding more path components.
-  //
-  // As with the hosts above, it doesn't matter what order we check these in.
-  const size_t kMaxPathsToCheck = 4;
-  for (std::string::const_iterator i(path.begin());
-       i != path.end() && paths->size() < kMaxPathsToCheck; ++i) {
-    if (*i == '/')
-      paths->push_back(std::string(path.begin(), i + 1));
-  }
-
-  if (!paths->empty() && paths->back() != path)
-    paths->push_back(path);
-
-  if (!query.empty())
-    paths->push_back(path + "?" + query);
-}
-
-void GeneratePatternsToCheck(const GURL& url, std::vector<std::string>* urls) {
-  std::vector<std::string> hosts, paths;
-  GenerateHostsToCheck(url, &hosts);
-  GeneratePathsToCheck(url, &paths);
-  for (size_t h = 0; h < hosts.size(); ++h) {
-    for (size_t p = 0; p < paths.size(); ++p) {
-      urls->push_back(hosts[h] + paths[p]);
-    }
-  }
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/safe_browsing/util.h b/ios/chrome/browser/safe_browsing/util.h
deleted file mode 100644
index 50552f3..0000000
--- a/ios/chrome/browser/safe_browsing/util.h
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Utilities for the SafeBrowsing DB code.
-
-#ifndef IOS_CHROME_BROWSER_SAFE_BROWSING_UTIL_H_
-#define IOS_CHROME_BROWSER_SAFE_BROWSING_UTIL_H_
-
-#include <stdint.h>
-
-#include <cstring>
-#include <string>
-#include <vector>
-
-#include "base/strings/string_piece.h"
-#include "base/time/time.h"
-
-class GURL;
-
-namespace safe_browsing {
-
-// Different types of threats that SafeBrowsing protects against.
-enum SBThreatType {
-  // No threat at all.
-  SB_THREAT_TYPE_SAFE,
-
-  // The URL is being used for phishing.
-  SB_THREAT_TYPE_URL_PHISHING,
-
-  // The URL hosts malware.
-  SB_THREAT_TYPE_URL_MALWARE,
-
-  // The URL hosts unwanted programs.
-  SB_THREAT_TYPE_URL_UNWANTED,
-
-  // The download URL is malware.
-  SB_THREAT_TYPE_BINARY_MALWARE_URL,
-
-  // Url detected by the client-side phishing model.  Note that unlike the
-  // above values, this does not correspond to a downloaded list.
-  SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL,
-
-  // The Chrome extension or app (given by its ID) is malware.
-  SB_THREAT_TYPE_EXTENSION,
-
-  // Url detected by the client-side malware IP list. This IP list is part
-  // of the client side detection model.
-  SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL,
-};
-
-// A truncated hash's type.
-typedef uint32_t SBPrefix;
-
-// A full hash.
-union SBFullHash {
-  char full_hash[32];
-  SBPrefix prefix;
-};
-
-// Used when we get a gethash response.
-struct SBFullHashResult {
-  SBFullHash hash;
-  // TODO(shess): Refactor to allow ListType here.
-  int list_id;
-  std::string metadata;
-};
-
-// Caches individual response from GETHASH request.
-struct SBCachedFullHashResult {
-  SBCachedFullHashResult();
-  explicit SBCachedFullHashResult(const base::Time& in_expire_after);
-  ~SBCachedFullHashResult();
-
-  base::Time expire_after;
-  std::vector<SBFullHashResult> full_hashes;
-};
-
-// SafeBrowsing list names.
-extern const char kMalwareList[];
-extern const char kPhishingList[];
-// Binary Download list name.
-extern const char kBinUrlList[];
-// SafeBrowsing client-side detection whitelist list name.
-extern const char kCsdWhiteList[];
-// SafeBrowsing download whitelist list name.
-extern const char kDownloadWhiteList[];
-// SafeBrowsing extension list name.
-extern const char kExtensionBlacklist[];
-// SafeBrowsing csd malware IP blacklist name.
-extern const char kIPBlacklist[];
-// SafeBrowsing unwanted URL list.
-extern const char kUnwantedUrlList[];
-// SafeBrowsing off-domain inclusion whitelist list name.
-extern const char kInclusionWhitelist[];
-// This array must contain all Safe Browsing lists.
-extern const char* kAllLists[9];
-
-enum ListType {
-  INVALID = -1,
-  MALWARE = 0,
-  PHISH = 1,
-  BINURL = 2,
-  // Obsolete BINHASH = 3,
-  CSDWHITELIST = 4,
-  // SafeBrowsing lists are stored in pairs.  Keep ListType 5
-  // available for a potential second list that we would store in the
-  // csd-whitelist store file.
-  DOWNLOADWHITELIST = 6,
-  // See above comment. Leave 7 available.
-  EXTENSIONBLACKLIST = 8,
-  // See above comment. Leave 9 available.
-  // Obsolete SIDEEFFECTFREEWHITELIST = 10,
-  // See above comment. Leave 11 available.
-  IPBLACKLIST = 12,
-  // See above comment.  Leave 13 available.
-  UNWANTEDURL = 14,
-  // See above comment.  Leave 15 available.
-  INCLUSIONWHITELIST = 16,
-  // See above comment.  Leave 17 available.
-};
-
-inline bool SBFullHashEqual(const SBFullHash& a, const SBFullHash& b) {
-  return !memcmp(a.full_hash, b.full_hash, sizeof(a.full_hash));
-}
-
-inline bool SBFullHashLess(const SBFullHash& a, const SBFullHash& b) {
-  return memcmp(a.full_hash, b.full_hash, sizeof(a.full_hash)) < 0;
-}
-
-// Generate full hash for the given string.
-SBFullHash SBFullHashForString(const base::StringPiece& str);
-SBFullHash StringToSBFullHash(const std::string& hash_in);
-std::string SBFullHashToString(const SBFullHash& hash_out);
-
-// Maps a list name to ListType.
-ListType GetListId(const base::StringPiece& name);
-
-// Maps a ListId to list name. Return false if fails.
-bool GetListName(ListType list_id, std::string* list);
-
-// Canonicalizes url as per Google Safe Browsing Specification.
-// See section 6.1 in
-// http://code.google.com/p/google-safe-browsing/wiki/Protocolv2Spec.
-void CanonicalizeUrl(const GURL& url,
-                     std::string* canonicalized_hostname,
-                     std::string* canonicalized_path,
-                     std::string* canonicalized_query);
-
-// Generate the set of full hashes to check for |url|.  If
-// |include_whitelist_hashes| is true we will generate additional path-prefixes
-// to match against the csd whitelist.  E.g., if the path-prefix /foo is on the
-// whitelist it should also match /foo/bar which is not the case for all the
-// other lists.  We'll also always add a pattern for the empty path.
-void UrlToFullHashes(const GURL& url,
-                     bool include_whitelist_hashes,
-                     std::vector<SBFullHash>* full_hashes);
-
-// Given a URL, returns all the hosts we need to check.  They are returned
-// in order of size (i.e. b.c is first, then a.b.c).
-void GenerateHostsToCheck(const GURL& url, std::vector<std::string>* hosts);
-
-// Given a URL, returns all the paths we need to check.
-void GeneratePathsToCheck(const GURL& url, std::vector<std::string>* paths);
-
-// Given a URL, returns all the patterns we need to check.
-void GeneratePatternsToCheck(const GURL& url, std::vector<std::string>* urls);
-
-}  // namespace safe_browsing
-
-#endif  // IOS_CHROME_BROWSER_SAFE_BROWSING_UTIL_H_
diff --git a/ios/chrome/browser/safe_browsing/util_unittest.cc b/ios/chrome/browser/safe_browsing/util_unittest.cc
deleted file mode 100644
index 01da998..0000000
--- a/ios/chrome/browser/safe_browsing/util_unittest.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stddef.h>
-
-#include <algorithm>
-
-#include "base/macros.h"
-#include "base/strings/stringprintf.h"
-#include "ios/chrome/browser/safe_browsing/util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-namespace safe_browsing {
-
-namespace {
-
-bool VectorContains(const std::vector<std::string>& data,
-                    const std::string& str) {
-  return std::find(data.begin(), data.end(), str) != data.end();
-}
-
-}  // namespace
-
-// Tests that we generate the required host/path combinations for testing
-// according to the Safe Browsing spec.
-// See section 6.2 in
-// http://code.google.com/p/google-safe-browsing/wiki/Protocolv2Spec.
-TEST(SafeBrowsingDbUtilTest, UrlParsing) {
-  std::vector<std::string> hosts, paths;
-
-  GURL url("http://a.b.c/1/2.html?param=1");
-  GenerateHostsToCheck(url, &hosts);
-  GeneratePathsToCheck(url, &paths);
-  EXPECT_EQ(hosts.size(), static_cast<size_t>(2));
-  EXPECT_EQ(paths.size(), static_cast<size_t>(4));
-  EXPECT_EQ(hosts[0], "b.c");
-  EXPECT_EQ(hosts[1], "a.b.c");
-
-  EXPECT_TRUE(VectorContains(paths, "/1/2.html?param=1"));
-  EXPECT_TRUE(VectorContains(paths, "/1/2.html"));
-  EXPECT_TRUE(VectorContains(paths, "/1/"));
-  EXPECT_TRUE(VectorContains(paths, "/"));
-
-  url = GURL("http://a.b.c.d.e.f.g/1.html");
-  GenerateHostsToCheck(url, &hosts);
-  GeneratePathsToCheck(url, &paths);
-  EXPECT_EQ(hosts.size(), static_cast<size_t>(5));
-  EXPECT_EQ(paths.size(), static_cast<size_t>(2));
-  EXPECT_EQ(hosts[0], "f.g");
-  EXPECT_EQ(hosts[1], "e.f.g");
-  EXPECT_EQ(hosts[2], "d.e.f.g");
-  EXPECT_EQ(hosts[3], "c.d.e.f.g");
-  EXPECT_EQ(hosts[4], "a.b.c.d.e.f.g");
-  EXPECT_TRUE(VectorContains(paths, "/1.html"));
-  EXPECT_TRUE(VectorContains(paths, "/"));
-
-  url = GURL("http://a.b/saw-cgi/eBayISAPI.dll/");
-  GeneratePathsToCheck(url, &paths);
-  EXPECT_EQ(paths.size(), static_cast<size_t>(3));
-  EXPECT_TRUE(VectorContains(paths, "/saw-cgi/eBayISAPI.dll/"));
-  EXPECT_TRUE(VectorContains(paths, "/saw-cgi/"));
-  EXPECT_TRUE(VectorContains(paths, "/"));
-}
-
-// Tests the url canonicalization according to the Safe Browsing spec.
-// See section 6.1 in
-// http://code.google.com/p/google-safe-browsing/wiki/Protocolv2Spec.
-TEST(SafeBrowsingDbUtilTest, CanonicalizeUrl) {
-  struct {
-    const char* input_url;
-    const char* expected_canonicalized_hostname;
-    const char* expected_canonicalized_path;
-    const char* expected_canonicalized_query;
-  } tests[] = {
-      {"http://host/%25%32%35", "host", "/%25", ""},
-      {"http://host/%25%32%35%25%32%35", "host", "/%25%25", ""},
-      {"http://host/%2525252525252525", "host", "/%25", ""},
-      {"http://host/asdf%25%32%35asd", "host", "/asdf%25asd", ""},
-      {"http://host/%%%25%32%35asd%%", "host", "/%25%25%25asd%25%25", ""},
-      {"http://host/%%%25%32%35asd%%", "host", "/%25%25%25asd%25%25", ""},
-      {"http://www.google.com/", "www.google.com", "/", ""},
-      {"http://%31%36%38%2e%31%38%38%2e%39%39%2e%32%36/%2E%73%65%63%75%72%65/"
-       "%77"
-       "%77%77%2E%65%62%61%79%2E%63%6F%6D/",
-       "168.188.99.26", "/.secure/www.ebay.com/", ""},
-      {"http://195.127.0.11/uploads/%20%20%20%20/.verify/"
-       ".eBaysecure=updateuserd"
-       "ataxplimnbqmn-xplmvalidateinfoswqpcmlx=hgplmcx/",
-       "195.127.0.11",
-       "/uploads/%20%20%20%20/.verify/"
-       ".eBaysecure=updateuserdataxplimnbqmn-xplmv"
-       "alidateinfoswqpcmlx=hgplmcx/",
-       ""},
-      {"http://host.com/%257Ea%2521b%2540c%2523d%2524e%25f%255E00%252611%252A"
-       "22%252833%252944_55%252B",
-       "host.com", "/~a!b@c%23d$e%25f^00&11*22(33)44_55+", ""},
-      {"http://3279880203/blah", "195.127.0.11", "/blah", ""},
-      {"http://www.google.com/blah/..", "www.google.com", "/", ""},
-      {"http://www.google.com/blah#fraq", "www.google.com", "/blah", ""},
-      {"http://www.GOOgle.com/", "www.google.com", "/", ""},
-      {"http://www.google.com.../", "www.google.com", "/", ""},
-      {"http://www.google.com/q?", "www.google.com", "/q", ""},
-      {"http://www.google.com/q?r?", "www.google.com", "/q", "r?"},
-      {"http://www.google.com/q?r?s", "www.google.com", "/q", "r?s"},
-      {"http://evil.com/foo#bar#baz", "evil.com", "/foo", ""},
-      {"http://evil.com/foo;", "evil.com", "/foo;", ""},
-      {"http://evil.com/foo?bar;", "evil.com", "/foo", "bar;"},
-      {"http://notrailingslash.com", "notrailingslash.com", "/", ""},
-      {"http://www.gotaport.com:1234/", "www.gotaport.com", "/", ""},
-      {"  http://www.google.com/  ", "www.google.com", "/", ""},
-      {"http:// leadingspace.com/", "%20leadingspace.com", "/", ""},
-      {"http://%20leadingspace.com/", "%20leadingspace.com", "/", ""},
-      {"https://www.securesite.com/", "www.securesite.com", "/", ""},
-      {"http://host.com/ab%23cd", "host.com", "/ab%23cd", ""},
-      {"http://host%3e.com//twoslashes?more//slashes", "host>.com",
-       "/twoslashes", "more//slashes"},
-      {"http://host.com/abc?val=xyz#anything", "host.com", "/abc", "val=xyz"},
-      {"http://abc:def@host.com/xyz", "host.com", "/xyz", ""},
-      {"http://host%3e.com/abc/%2e%2e%2fdef", "host>.com", "/def", ""},
-      {"http://.......host...com.....//abc/////def%2F%2F%2Fxyz", "host.com",
-       "/abc/def/xyz", ""},
-      {"ftp://host.com/foo?bar", "host.com", "/foo", "bar"},
-      {"data:text/html;charset=utf-8,%0D%0A", "", "", ""},
-      {"javascript:alert()", "", "", ""},
-      {"mailto:abc@example.com", "", "", ""},
-  };
-  for (size_t i = 0; i < arraysize(tests); ++i) {
-    SCOPED_TRACE(base::StringPrintf("Test: %s", tests[i].input_url));
-    GURL url(tests[i].input_url);
-
-    std::string canonicalized_hostname;
-    std::string canonicalized_path;
-    std::string canonicalized_query;
-    CanonicalizeUrl(url, &canonicalized_hostname, &canonicalized_path,
-                    &canonicalized_query);
-
-    EXPECT_EQ(tests[i].expected_canonicalized_hostname, canonicalized_hostname);
-    EXPECT_EQ(tests[i].expected_canonicalized_path, canonicalized_path);
-    EXPECT_EQ(tests[i].expected_canonicalized_query, canonicalized_query);
-  }
-}
-
-TEST(SafeBrowsingDbUtilTest, UrlToFullHashes) {
-  std::vector<SBFullHash> results;
-  GURL url("http://www.evil.com/evil1/evilness.html");
-  UrlToFullHashes(url, false, &results);
-
-  EXPECT_EQ(6UL, results.size());
-  EXPECT_TRUE(SBFullHashEqual(SBFullHashForString("evil.com/"), results[0]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("evil.com/evil1/"), results[1]));
-  EXPECT_TRUE(SBFullHashEqual(
-      SBFullHashForString("evil.com/evil1/evilness.html"), results[2]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("www.evil.com/"), results[3]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("www.evil.com/evil1/"), results[4]));
-  EXPECT_TRUE(SBFullHashEqual(
-      SBFullHashForString("www.evil.com/evil1/evilness.html"), results[5]));
-
-  results.clear();
-  GURL url2("http://www.evil.com/evil1/evilness.html");
-  UrlToFullHashes(url2, true, &results);
-
-  EXPECT_EQ(8UL, results.size());
-  EXPECT_TRUE(SBFullHashEqual(SBFullHashForString("evil.com/"), results[0]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("evil.com/evil1/"), results[1]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("evil.com/evil1"), results[2]));
-  EXPECT_TRUE(SBFullHashEqual(
-      SBFullHashForString("evil.com/evil1/evilness.html"), results[3]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("www.evil.com/"), results[4]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("www.evil.com/evil1/"), results[5]));
-  EXPECT_TRUE(
-      SBFullHashEqual(SBFullHashForString("www.evil.com/evil1"), results[6]));
-  EXPECT_TRUE(SBFullHashEqual(
-      SBFullHashForString("www.evil.com/evil1/evilness.html"), results[7]));
-}
-
-TEST(SafeBrowsingDbUtilTest, ListIdListNameConversion) {
-  std::string list_name;
-  EXPECT_FALSE(GetListName(INVALID, &list_name));
-  EXPECT_TRUE(GetListName(MALWARE, &list_name));
-  EXPECT_EQ(list_name, std::string(kMalwareList));
-  EXPECT_EQ(MALWARE, GetListId(list_name));
-
-  EXPECT_TRUE(GetListName(PHISH, &list_name));
-  EXPECT_EQ(list_name, std::string(kPhishingList));
-  EXPECT_EQ(PHISH, GetListId(list_name));
-
-  EXPECT_TRUE(GetListName(BINURL, &list_name));
-  EXPECT_EQ(list_name, std::string(kBinUrlList));
-  EXPECT_EQ(BINURL, GetListId(list_name));
-}
-
-// Since the ids are saved in file, we need to make sure they don't change.
-// Since only the last bit of each id is saved in file together with
-// chunkids, this checks only last bit.
-TEST(SafeBrowsingDbUtilTest, ListIdVerification) {
-  EXPECT_EQ(0, MALWARE % 2);
-  EXPECT_EQ(1, PHISH % 2);
-  EXPECT_EQ(0, BINURL % 2);
-}
-
-TEST(SafeBrowsingDbUtilTest, StringToSBFullHashAndSBFullHashToString) {
-  // 31 chars plus the last \0 as full_hash.
-  const std::string hash_in = "12345678902234567890323456789012";
-  SBFullHash hash_out = StringToSBFullHash(hash_in);
-  EXPECT_EQ(0x34333231U, hash_out.prefix);
-  EXPECT_EQ(0, memcmp(hash_in.data(), hash_out.full_hash, sizeof(SBFullHash)));
-
-  std::string hash_final = SBFullHashToString(hash_out);
-  EXPECT_EQ(hash_in, hash_final);
-}
-
-TEST(SafeBrowsingDbUtilTest, FullHashOperators) {
-  const SBFullHash kHash1 = SBFullHashForString("one");
-  const SBFullHash kHash2 = SBFullHashForString("two");
-
-  EXPECT_TRUE(SBFullHashEqual(kHash1, kHash1));
-  EXPECT_TRUE(SBFullHashEqual(kHash2, kHash2));
-  EXPECT_FALSE(SBFullHashEqual(kHash1, kHash2));
-  EXPECT_FALSE(SBFullHashEqual(kHash2, kHash1));
-
-  EXPECT_FALSE(SBFullHashLess(kHash1, kHash2));
-  EXPECT_TRUE(SBFullHashLess(kHash2, kHash1));
-
-  EXPECT_FALSE(SBFullHashLess(kHash1, kHash1));
-  EXPECT_FALSE(SBFullHashLess(kHash2, kHash2));
-}
-
-}  // namespace safe_browsing
diff --git a/ios/chrome/browser/search_engines/template_url_service_factory.cc b/ios/chrome/browser/search_engines/template_url_service_factory.cc
index a4d2936..264fe0d 100644
--- a/ios/chrome/browser/search_engines/template_url_service_factory.cc
+++ b/ios/chrome/browser/search_engines/template_url_service_factory.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -37,15 +38,16 @@
 #endif
 }
 
-scoped_ptr<KeyedService> BuildTemplateURLService(web::BrowserState* context) {
+std::unique_ptr<KeyedService> BuildTemplateURLService(
+    web::BrowserState* context) {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new TemplateURLService(
+  return base::WrapUnique(new TemplateURLService(
       browser_state->GetPrefs(),
-      make_scoped_ptr(new ios::UIThreadSearchTermsData(browser_state)),
+      base::WrapUnique(new ios::UIThreadSearchTermsData(browser_state)),
       ios::WebDataServiceFactory::GetKeywordWebDataForBrowserState(
           browser_state, ServiceAccessType::EXPLICIT_ACCESS),
-      make_scoped_ptr(new ios::TemplateURLServiceClientImpl(
+      base::WrapUnique(new ios::TemplateURLServiceClientImpl(
           ios::HistoryServiceFactory::GetForBrowserState(
               browser_state, ServiceAccessType::EXPLICIT_ACCESS))),
       ios::GoogleURLTrackerFactory::GetForBrowserState(browser_state),
@@ -90,7 +92,8 @@
   TemplateURLService::RegisterProfilePrefs(registry);
 }
 
-scoped_ptr<KeyedService> TemplateURLServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+TemplateURLServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   return BuildTemplateURLService(context);
 }
diff --git a/ios/chrome/browser/search_engines/template_url_service_factory.h b/ios/chrome/browser/search_engines/template_url_service_factory.h
index 36fbf6f5..ac819c8 100644
--- a/ios/chrome/browser/search_engines/template_url_service_factory.h
+++ b/ios/chrome/browser/search_engines/template_url_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -42,7 +43,7 @@
   // BrowserStateKeyedServiceFactory implementation.
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.cc b/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.cc
index 6f176ef..abe148c2 100644
--- a/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.cc
+++ b/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/singleton.h"
 #include "base/threading/sequenced_worker_pool.h"
@@ -41,7 +42,7 @@
 
 IOSChromeGCMProfileServiceFactory::~IOSChromeGCMProfileServiceFactory() {}
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromeGCMProfileServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   DCHECK(!context->IsOffTheRecord());
@@ -53,14 +54,14 @@
           base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new gcm::GCMProfileService(
+  return base::WrapUnique(new gcm::GCMProfileService(
       browser_state->GetPrefs(), browser_state->GetStatePath(),
       browser_state->GetRequestContext(), ::GetChannel(),
-      make_scoped_ptr(new ProfileIdentityProvider(
+      base::WrapUnique(new ProfileIdentityProvider(
           ios::SigninManagerFactory::GetForBrowserState(browser_state),
           OAuth2TokenServiceFactory::GetForBrowserState(browser_state),
           base::Closure())),
-      make_scoped_ptr(new gcm::GCMClientFactory),
+      base::WrapUnique(new gcm::GCMClientFactory),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::UI),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::IO),
       blocking_task_runner));
diff --git a/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.h b/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.h
index 93794fcc..edef829 100644
--- a/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.h
+++ b/ios/chrome/browser/services/gcm/ios_chrome_gcm_profile_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SERVICES_GCM_IOS_CHROME_GCM_PROFILE_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SERVICES_GCM_IOS_CHROME_GCM_PROFILE_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -39,7 +40,7 @@
   ~IOSChromeGCMProfileServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeGCMProfileServiceFactory);
diff --git a/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.cc b/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.cc
index ff57860..b96e022 100644
--- a/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.cc
+++ b/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/sessions/core/persistent_tab_restore_service.h"
@@ -12,13 +13,14 @@
 
 namespace {
 
-scoped_ptr<KeyedService> BuildTabRestoreService(web::BrowserState* context) {
+std::unique_ptr<KeyedService> BuildTabRestoreService(
+    web::BrowserState* context) {
   DCHECK(!context->IsOffTheRecord());
 
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new sessions::PersistentTabRestoreService(
-      make_scoped_ptr(new IOSChromeTabRestoreServiceClient(browser_state)),
+  return base::WrapUnique(new sessions::PersistentTabRestoreService(
+      base::WrapUnique(new IOSChromeTabRestoreServiceClient(browser_state)),
       nullptr));
 }
 
@@ -55,7 +57,7 @@
   return true;
 }
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromeTabRestoreServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   return BuildTabRestoreService(context);
diff --git a/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h b/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h
index eb7f59cd..73daf12 100644
--- a/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h
+++ b/ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_SESSIONS_IOS_CHROME_TAB_RESTORE_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SESSIONS_IOS_CHROME_TAB_RESTORE_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
@@ -43,7 +45,7 @@
   ~IOSChromeTabRestoreServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   bool ServiceIsNULLWhileTesting() const override;
 
diff --git a/ios/chrome/browser/share_extension/share_extension_service.h b/ios/chrome/browser/share_extension/share_extension_service.h
index df62907..516aa31 100644
--- a/ios/chrome/browser/share_extension/share_extension_service.h
+++ b/ios/chrome/browser/share_extension/share_extension_service.h
@@ -5,7 +5,6 @@
 #ifndef IOS_INTERNAL_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_
 #define IOS_INTERNAL_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_H_
 
-#include "base/memory/scoped_ptr.h"
 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "ios/chrome/browser/reading_list/reading_list_model_observer.h"
diff --git a/ios/chrome/browser/share_extension/share_extension_service_factory.cc b/ios/chrome/browser/share_extension/share_extension_service_factory.cc
index 04f155b..1bde094 100644
--- a/ios/chrome/browser/share_extension/share_extension_service_factory.cc
+++ b/ios/chrome/browser/share_extension/share_extension_service_factory.cc
@@ -41,11 +41,12 @@
 
 ShareExtensionServiceFactory::~ShareExtensionServiceFactory() {}
 
-scoped_ptr<KeyedService> ShareExtensionServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+ShareExtensionServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<ShareExtensionService> share_extension_service(
+  std::unique_ptr<ShareExtensionService> share_extension_service(
       new ShareExtensionService(
           ios::BookmarkModelFactory::GetForBrowserState(chrome_browser_state),
           ReadingListModelFactory::GetForBrowserState(chrome_browser_state)));
diff --git a/ios/chrome/browser/share_extension/share_extension_service_factory.h b/ios/chrome/browser/share_extension/share_extension_service_factory.h
index 9dfa912..1947dce 100644
--- a/ios/chrome/browser/share_extension/share_extension_service_factory.h
+++ b/ios/chrome/browser/share_extension/share_extension_service_factory.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SHARE_EXTENSION_SHARE_EXTENSION_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -35,7 +37,7 @@
   ~ShareExtensionServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/signin/about_signin_internals_factory.cc b/ios/chrome/browser/signin/about_signin_internals_factory.cc
index 33f66fd..09ea8d0 100644
--- a/ios/chrome/browser/signin/about_signin_internals_factory.cc
+++ b/ios/chrome/browser/signin/about_signin_internals_factory.cc
@@ -45,11 +45,12 @@
   return base::Singleton<AboutSigninInternalsFactory>::get();
 }
 
-scoped_ptr<KeyedService> AboutSigninInternalsFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+AboutSigninInternalsFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<AboutSigninInternals> service(new AboutSigninInternals(
+  std::unique_ptr<AboutSigninInternals> service(new AboutSigninInternals(
       OAuth2TokenServiceFactory::GetForBrowserState(chrome_browser_state),
       AccountTrackerServiceFactory::GetForBrowserState(chrome_browser_state),
       SigninManagerFactory::GetForBrowserState(chrome_browser_state),
diff --git a/ios/chrome/browser/signin/about_signin_internals_factory.h b/ios/chrome/browser/signin/about_signin_internals_factory.h
index 70175e76..45d70f7 100644
--- a/ios/chrome/browser/signin/about_signin_internals_factory.h
+++ b/ios/chrome/browser/signin/about_signin_internals_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_ABOUT_SIGNIN_INTERNALS_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_ABOUT_SIGNIN_INTERNALS_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -39,7 +40,7 @@
   ~AboutSigninInternalsFactory() override;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
diff --git a/ios/chrome/browser/signin/account_consistency_service_factory.h b/ios/chrome/browser/signin/account_consistency_service_factory.h
index 055ca67f..beee94c3 100644
--- a/ios/chrome/browser/signin/account_consistency_service_factory.h
+++ b/ios/chrome/browser/signin/account_consistency_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_CONSISTENCY_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_CONSISTENCY_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -44,7 +45,7 @@
   // BrowserStateKeyedServiceFactory:
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(AccountConsistencyServiceFactory);
diff --git a/ios/chrome/browser/signin/account_consistency_service_factory.mm b/ios/chrome/browser/signin/account_consistency_service_factory.mm
index f01e0e8..f3a9818 100644
--- a/ios/chrome/browser/signin/account_consistency_service_factory.mm
+++ b/ios/chrome/browser/signin/account_consistency_service_factory.mm
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/signin/account_consistency_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/signin/ios/browser/account_consistency_service.h"
@@ -47,12 +48,12 @@
   AccountConsistencyService::RegisterPrefs(registry);
 }
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 AccountConsistencyServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new AccountConsistencyService(
+  return base::WrapUnique(new AccountConsistencyService(
       chrome_browser_state,
       ios::AccountReconcilorFactory::GetForBrowserState(chrome_browser_state),
       ios::CookieSettingsFactory::GetForBrowserState(chrome_browser_state),
diff --git a/ios/chrome/browser/signin/account_fetcher_service_factory.cc b/ios/chrome/browser/signin/account_fetcher_service_factory.cc
index cce0abd..f052d4f 100644
--- a/ios/chrome/browser/signin/account_fetcher_service_factory.cc
+++ b/ios/chrome/browser/signin/account_fetcher_service_factory.cc
@@ -45,11 +45,12 @@
   AccountFetcherService::RegisterPrefs(registry);
 }
 
-scoped_ptr<KeyedService> AccountFetcherServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+AccountFetcherServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<AccountFetcherService> service(new AccountFetcherService());
+  std::unique_ptr<AccountFetcherService> service(new AccountFetcherService());
   service->Initialize(
       SigninClientFactory::GetForBrowserState(browser_state),
       OAuth2TokenServiceFactory::GetForBrowserState(browser_state),
diff --git a/ios/chrome/browser/signin/account_fetcher_service_factory.h b/ios/chrome/browser/signin/account_fetcher_service_factory.h
index 3090acd1..10150c9 100644
--- a/ios/chrome/browser/signin/account_fetcher_service_factory.h
+++ b/ios/chrome/browser/signin/account_fetcher_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_FETCHER_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_FETCHER_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 class AccountFetcherService;
@@ -35,7 +36,7 @@
   // BrowserStateKeyedServiceFactory implementation
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(AccountFetcherServiceFactory);
diff --git a/ios/chrome/browser/signin/account_reconcilor_factory.cc b/ios/chrome/browser/signin/account_reconcilor_factory.cc
index cefb147..a4b81e343 100644
--- a/ios/chrome/browser/signin/account_reconcilor_factory.cc
+++ b/ios/chrome/browser/signin/account_reconcilor_factory.cc
@@ -41,11 +41,11 @@
   return base::Singleton<AccountReconcilorFactory>::get();
 }
 
-scoped_ptr<KeyedService> AccountReconcilorFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> AccountReconcilorFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<AccountReconcilor> reconcilor(new AccountReconcilor(
+  std::unique_ptr<AccountReconcilor> reconcilor(new AccountReconcilor(
       OAuth2TokenServiceFactory::GetForBrowserState(chrome_browser_state),
       SigninManagerFactory::GetForBrowserState(chrome_browser_state),
       SigninClientFactory::GetForBrowserState(chrome_browser_state),
diff --git a/ios/chrome/browser/signin/account_reconcilor_factory.h b/ios/chrome/browser/signin/account_reconcilor_factory.h
index 6a69d75..553fb7d8 100644
--- a/ios/chrome/browser/signin/account_reconcilor_factory.h
+++ b/ios/chrome/browser/signin/account_reconcilor_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -40,7 +41,7 @@
   ~AccountReconcilorFactory() override;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(AccountReconcilorFactory);
diff --git a/ios/chrome/browser/signin/account_tracker_service_factory.cc b/ios/chrome/browser/signin/account_tracker_service_factory.cc
index 6d4e1d0..8ce413c 100644
--- a/ios/chrome/browser/signin/account_tracker_service_factory.cc
+++ b/ios/chrome/browser/signin/account_tracker_service_factory.cc
@@ -40,11 +40,12 @@
   AccountTrackerService::RegisterPrefs(registry);
 }
 
-scoped_ptr<KeyedService> AccountTrackerServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+AccountTrackerServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<AccountTrackerService> service(new AccountTrackerService());
+  std::unique_ptr<AccountTrackerService> service(new AccountTrackerService());
   service->Initialize(
       SigninClientFactory::GetForBrowserState(chrome_browser_state));
   return std::move(service);
diff --git a/ios/chrome/browser/signin/account_tracker_service_factory.h b/ios/chrome/browser/signin/account_tracker_service_factory.h
index 507d995..415a03b 100644
--- a/ios/chrome/browser/signin/account_tracker_service_factory.h
+++ b/ios/chrome/browser/signin/account_tracker_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_TRACKER_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_ACCOUNT_TRACKER_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 class AccountTrackerService;
@@ -43,7 +44,7 @@
   // BrowserStateKeyedServiceFactory implementation.
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(AccountTrackerServiceFactory);
diff --git a/ios/chrome/browser/signin/chrome_identity_service_observer_bridge_unittest.mm b/ios/chrome/browser/signin/chrome_identity_service_observer_bridge_unittest.mm
index 5a1120a11..fa0eff5 100644
--- a/ios/chrome/browser/signin/chrome_identity_service_observer_bridge_unittest.mm
+++ b/ios/chrome/browser/signin/chrome_identity_service_observer_bridge_unittest.mm
@@ -4,8 +4,9 @@
 
 #import "ios/chrome/browser/signin/chrome_identity_service_observer_bridge.h"
 
+#include <memory>
+
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
 #include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
 #include "testing/gtest_mac.h"
@@ -24,7 +25,7 @@
 @end
 
 @implementation TestChromeIdentityServiceObserver {
-  scoped_ptr<ios::ChromeIdentityService::Observer> observer_bridge_;
+  std::unique_ptr<ios::ChromeIdentityService::Observer> observer_bridge_;
 }
 
 @synthesize onIdentityListChangedCalled = _onIdentityListChangedCalled;
diff --git a/ios/chrome/browser/signin/fake_oauth2_token_service_builder.h b/ios/chrome/browser/signin/fake_oauth2_token_service_builder.h
index fde891d9..0887666 100644
--- a/ios/chrome/browser/signin/fake_oauth2_token_service_builder.h
+++ b/ios/chrome/browser/signin/fake_oauth2_token_service_builder.h
@@ -5,7 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_FAKE_OAUTH2_TOKEN_SERVICE_BUILDER_H_
 #define IOS_CHROME_BROWSER_SIGNIN_FAKE_OAUTH2_TOKEN_SERVICE_BUILDER_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 namespace web {
 class BrowserState;
@@ -16,7 +16,7 @@
 // Helper function to be used with
 // BrowserStateKeyedServiceFactory::SetTestingFactory() that returns a
 // FakeProfileOAuth2TokenService object.
-scoped_ptr<KeyedService> BuildFakeOAuth2TokenService(
+std::unique_ptr<KeyedService> BuildFakeOAuth2TokenService(
     web::BrowserState* context);
 
 #endif  // IOS_CHROME_BROWSER_SIGNIN_FAKE_OAUTH2_TOKEN_SERVICE_BUILDER_H_
diff --git a/ios/chrome/browser/signin/fake_oauth2_token_service_builder.mm b/ios/chrome/browser/signin/fake_oauth2_token_service_builder.mm
index edb2800..2ff9a2f 100644
--- a/ios/chrome/browser/signin/fake_oauth2_token_service_builder.mm
+++ b/ios/chrome/browser/signin/fake_oauth2_token_service_builder.mm
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/signin/fake_oauth2_token_service_builder.h"
 
+#include "base/memory/ptr_util.h"
 #include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
 #include "components/signin/ios/browser/fake_profile_oauth2_token_service_ios_delegate.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
@@ -12,7 +13,7 @@
 #include "ios/chrome/browser/signin/signin_error_controller_factory.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 
-scoped_ptr<KeyedService> BuildFakeOAuth2TokenService(
+std::unique_ptr<KeyedService> BuildFakeOAuth2TokenService(
     web::BrowserState* context) {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
@@ -23,5 +24,5 @@
               ->GetProfileOAuth2TokenServiceIOSProvider(),
           ios::AccountTrackerServiceFactory::GetForBrowserState(browser_state),
           ios::SigninErrorControllerFactory::GetForBrowserState(browser_state));
-  return make_scoped_ptr(new FakeProfileOAuth2TokenService(delegate));
+  return base::WrapUnique(new FakeProfileOAuth2TokenService(delegate));
 }
diff --git a/ios/chrome/browser/signin/fake_signin_manager_builder.cc b/ios/chrome/browser/signin/fake_signin_manager_builder.cc
index d2d97e7..8ac5c86 100644
--- a/ios/chrome/browser/signin/fake_signin_manager_builder.cc
+++ b/ios/chrome/browser/signin/fake_signin_manager_builder.cc
@@ -16,11 +16,11 @@
 
 namespace ios {
 
-scoped_ptr<KeyedService> BuildFakeSigninManager(
+std::unique_ptr<KeyedService> BuildFakeSigninManager(
     web::BrowserState* browser_state) {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(browser_state);
-  scoped_ptr<SigninManager> manager(new FakeSigninManager(
+  std::unique_ptr<SigninManager> manager(new FakeSigninManager(
       SigninClientFactory::GetForBrowserState(chrome_browser_state),
       OAuth2TokenServiceFactory::GetForBrowserState(chrome_browser_state),
       ios::AccountTrackerServiceFactory::GetForBrowserState(
diff --git a/ios/chrome/browser/signin/fake_signin_manager_builder.h b/ios/chrome/browser/signin/fake_signin_manager_builder.h
index f752597..1d06ad4 100644
--- a/ios/chrome/browser/signin/fake_signin_manager_builder.h
+++ b/ios/chrome/browser/signin/fake_signin_manager_builder.h
@@ -5,7 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_H_
 #define IOS_CHROME_BROWSER_SIGNIN_FAKE_SIGNIN_MANAGER_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 namespace web {
 class BrowserState;
@@ -17,7 +17,7 @@
 
 // Helper function to be used with KeyedService::SetTestingFactory().
 // The returned instance is initialized.
-scoped_ptr<KeyedService> BuildFakeSigninManager(
+std::unique_ptr<KeyedService> BuildFakeSigninManager(
     web::BrowserState* browser_state);
 
 }  // namespace ios
diff --git a/ios/chrome/browser/signin/gaia_auth_fetcher_ios.h b/ios/chrome/browser/signin/gaia_auth_fetcher_ios.h
index 01ecf71..48a8f089 100644
--- a/ios/chrome/browser/signin/gaia_auth_fetcher_ios.h
+++ b/ios/chrome/browser/signin/gaia_auth_fetcher_ios.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_GAIA_AUTH_FETCHER_IOS_H_
 #define IOS_CHROME_BROWSER_SIGNIN_GAIA_AUTH_FETCHER_IOS_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "google_apis/gaia/gaia_auth_fetcher.h"
 
 class GaiaAuthFetcherIOSBridge;
@@ -57,7 +58,7 @@
                      const net::URLRequestStatus& status,
                      int response_code);
 
-  scoped_ptr<GaiaAuthFetcherIOSBridge> bridge_;
+  std::unique_ptr<GaiaAuthFetcherIOSBridge> bridge_;
   web::BrowserState* browser_state_;
 
   DISALLOW_COPY_AND_ASSIGN(GaiaAuthFetcherIOS);
diff --git a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_unittest.mm b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_unittest.mm
index 9b5fa1c..5263f67d 100644
--- a/ios/chrome/browser/signin/gaia_auth_fetcher_ios_unittest.mm
+++ b/ios/chrome/browser/signin/gaia_auth_fetcher_ios_unittest.mm
@@ -4,8 +4,9 @@
 
 #include "ios/chrome/browser/signin/gaia_auth_fetcher_ios.h"
 
+#include <memory>
+
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/run_loop.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "ios/chrome/browser/signin/gaia_auth_fetcher_ios_private.h"
@@ -77,7 +78,7 @@
   // BrowserState, required for WKWebView creation.
   web::TestBrowserState browser_state_;
   MockGaiaConsumer consumer_;
-  scoped_ptr<GaiaAuthFetcherIOS> gaia_auth_fetcher_;
+  std::unique_ptr<GaiaAuthFetcherIOS> gaia_auth_fetcher_;
 };
 
 // Tests that the cancel mechanism works properly by cancelling an OAuthLogin
@@ -134,7 +135,7 @@
   EXPECT_CALL(consumer_, OnGetCheckConnectionInfoSuccess(data)).Times(1);
 
   // Set up the fake URL Fetcher.
-  scoped_ptr<net::FakeURLFetcherFactory> fake_url_fetcher_factory(
+  std::unique_ptr<net::FakeURLFetcherFactory> fake_url_fetcher_factory(
       new net::FakeURLFetcherFactory(new net::URLFetcherImplFactory()));
   fake_url_fetcher_factory->SetFakeResponse(
       GaiaUrls::GetInstance()->GetCheckConnectionInfoURLWithSource(
diff --git a/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.cc b/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.cc
index bb20c11..7ee2d70 100644
--- a/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.cc
+++ b/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/signin/gaia_cookie_manager_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -39,12 +40,12 @@
   return base::Singleton<GaiaCookieManagerServiceFactory>::get();
 }
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 GaiaCookieManagerServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new GaiaCookieManagerService(
+  return base::WrapUnique(new GaiaCookieManagerService(
       OAuth2TokenServiceFactory::GetForBrowserState(chrome_browser_state),
       GaiaConstants::kChromeSource,
       SigninClientFactory::GetForBrowserState(chrome_browser_state)));
diff --git a/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.h b/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.h
index f23bbd3..9471403 100644
--- a/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.h
+++ b/ios/chrome/browser/signin/gaia_cookie_manager_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_GAIA_COOKIE_MANAGER_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_GAIA_COOKIE_MANAGER_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -41,7 +42,7 @@
   ~GaiaCookieManagerServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(GaiaCookieManagerServiceFactory);
diff --git a/ios/chrome/browser/signin/oauth2_token_service_factory.h b/ios/chrome/browser/signin/oauth2_token_service_factory.h
index 1f757aa..39bef718 100644
--- a/ios/chrome/browser/signin/oauth2_token_service_factory.h
+++ b/ios/chrome/browser/signin/oauth2_token_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_OAUTH2_TOKEN_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_OAUTH2_TOKEN_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace ios {
@@ -41,7 +42,7 @@
   ~OAuth2TokenServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
diff --git a/ios/chrome/browser/signin/oauth2_token_service_factory.mm b/ios/chrome/browser/signin/oauth2_token_service_factory.mm
index 63de60a4..154b95b 100644
--- a/ios/chrome/browser/signin/oauth2_token_service_factory.mm
+++ b/ios/chrome/browser/signin/oauth2_token_service_factory.mm
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/signin/oauth2_token_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
@@ -45,7 +46,8 @@
   registry->RegisterListPref(prefs::kTokenServiceExcludedSecondaryAccounts);
 }
 
-scoped_ptr<KeyedService> OAuth2TokenServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+OAuth2TokenServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
@@ -58,5 +60,5 @@
               chrome_browser_state),
           ios::SigninErrorControllerFactory::GetForBrowserState(
               chrome_browser_state));
-  return make_scoped_ptr(new ProfileOAuth2TokenService(delegate));
+  return base::WrapUnique(new ProfileOAuth2TokenService(delegate));
 }
diff --git a/ios/chrome/browser/signin/signin_client_factory.cc b/ios/chrome/browser/signin/signin_client_factory.cc
index 5ba3b3b..6d59667 100644
--- a/ios/chrome/browser/signin/signin_client_factory.cc
+++ b/ios/chrome/browser/signin/signin_client_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/signin/signin_client_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -32,11 +33,11 @@
 
 SigninClientFactory::~SigninClientFactory() {}
 
-scoped_ptr<KeyedService> SigninClientFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> SigninClientFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new SigninClientImpl(
+  return base::WrapUnique(new SigninClientImpl(
       chrome_browser_state,
       ios::SigninErrorControllerFactory::GetForBrowserState(
           chrome_browser_state)));
diff --git a/ios/chrome/browser/signin/signin_client_factory.h b/ios/chrome/browser/signin/signin_client_factory.h
index aec8a12..42c6b07 100644
--- a/ios/chrome/browser/signin/signin_client_factory.h
+++ b/ios/chrome/browser/signin/signin_client_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_SIGNIN_CLIENT_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_SIGNIN_CLIENT_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -35,7 +36,7 @@
   ~SigninClientFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(SigninClientFactory);
diff --git a/ios/chrome/browser/signin/signin_client_impl.h b/ios/chrome/browser/signin/signin_client_impl.h
index fca1fc8..bdca2d4 100644
--- a/ios/chrome/browser/signin/signin_client_impl.h
+++ b/ios/chrome/browser/signin/signin_client_impl.h
@@ -5,9 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_SIGNIN_CLIENT_IMPL_H_
 #define IOS_CHROME_BROWSER_SIGNIN_SIGNIN_CLIENT_IMPL_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/signin/core/browser/signin_client.h"
 #include "components/signin/core/browser/signin_error_controller.h"
 #include "google_apis/gaia/gaia_oauth_client.h"
@@ -69,7 +70,7 @@
   // <Build Info> <OS> <Version number> (<Last change>)<channel or "-devel">
   // If version information is unavailable, returns "invalid."
   std::string GetProductVersion() override;
-  scoped_ptr<CookieChangedSubscription> AddCookieChangedCallback(
+  std::unique_ptr<CookieChangedSubscription> AddCookieChangedCallback(
       const GURL& url,
       const std::string& name,
       const net::CookieStore::CookieChangedCallback& callback) override;
@@ -83,7 +84,7 @@
 
   // gaia::GaiaOAuthClient::Delegate implementation.
   void OnGetTokenInfoResponse(
-      scoped_ptr<base::DictionaryValue> token_info) override;
+      std::unique_ptr<base::DictionaryValue> token_info) override;
   void OnOAuthError() override;
   void OnNetworkError(int response_code) override;
 
@@ -104,8 +105,8 @@
   SigninErrorController* signin_error_controller_;
   std::list<base::Closure> delayed_callbacks_;
 
-  scoped_ptr<gaia::GaiaOAuthClient> oauth_client_;
-  scoped_ptr<OAuth2TokenService::Request> oauth_request_;
+  std::unique_ptr<gaia::GaiaOAuthClient> oauth_client_;
+  std::unique_ptr<OAuth2TokenService::Request> oauth_request_;
 
   DISALLOW_COPY_AND_ASSIGN(SigninClientImpl);
 };
diff --git a/ios/chrome/browser/signin/signin_client_impl.mm b/ios/chrome/browser/signin/signin_client_impl.mm
index e3d76392..64ace6e 100644
--- a/ios/chrome/browser/signin/signin_client_impl.mm
+++ b/ios/chrome/browser/signin/signin_client_impl.mm
@@ -133,7 +133,7 @@
       ->RemoveObserver(observer);
 }
 
-scoped_ptr<SigninClient::CookieChangedSubscription>
+std::unique_ptr<SigninClient::CookieChangedSubscription>
 SigninClientImpl::AddCookieChangedCallback(
     const GURL& url,
     const std::string& name,
@@ -141,7 +141,7 @@
   scoped_refptr<net::URLRequestContextGetter> context_getter =
       browser_state_->GetRequestContext();
   DCHECK(context_getter.get());
-  scoped_ptr<SigninCookieChangedSubscription> subscription(
+  std::unique_ptr<SigninCookieChangedSubscription> subscription(
       new SigninCookieChangedSubscription(context_getter, url, name, callback));
   return std::move(subscription);
 }
@@ -176,7 +176,7 @@
 }
 
 void SigninClientImpl::OnGetTokenInfoResponse(
-    scoped_ptr<base::DictionaryValue> token_info) {
+    std::unique_ptr<base::DictionaryValue> token_info) {
   oauth_request_.reset();
 }
 
diff --git a/ios/chrome/browser/signin/signin_error_controller_factory.cc b/ios/chrome/browser/signin/signin_error_controller_factory.cc
index 86106b2..e959680 100644
--- a/ios/chrome/browser/signin/signin_error_controller_factory.cc
+++ b/ios/chrome/browser/signin/signin_error_controller_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/signin/signin_error_controller_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/service_access_type.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -33,9 +34,10 @@
 SigninErrorControllerFactory::~SigninErrorControllerFactory() {
 }
 
-scoped_ptr<KeyedService> SigninErrorControllerFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+SigninErrorControllerFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  return make_scoped_ptr(new SigninErrorController);
+  return base::WrapUnique(new SigninErrorController);
 }
 
 }  // namespace ios
diff --git a/ios/chrome/browser/signin/signin_error_controller_factory.h b/ios/chrome/browser/signin/signin_error_controller_factory.h
index c0ae719..75fd678f 100644
--- a/ios/chrome/browser/signin/signin_error_controller_factory.h
+++ b/ios/chrome/browser/signin/signin_error_controller_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_SIGNIN_ERROR_CONTROLLER_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_SIGNIN_ERROR_CONTROLLER_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -35,7 +36,7 @@
   ~SigninErrorControllerFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(SigninErrorControllerFactory);
diff --git a/ios/chrome/browser/signin/signin_manager_factory.cc b/ios/chrome/browser/signin/signin_manager_factory.cc
index 201bc99..aef5a4b 100644
--- a/ios/chrome/browser/signin/signin_manager_factory.cc
+++ b/ios/chrome/browser/signin/signin_manager_factory.cc
@@ -79,11 +79,11 @@
                     SigninManagerCreated(manager));
 }
 
-scoped_ptr<KeyedService> SigninManagerFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> SigninManagerFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* chrome_browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  scoped_ptr<SigninManager> service(new SigninManager(
+  std::unique_ptr<SigninManager> service(new SigninManager(
       SigninClientFactory::GetForBrowserState(chrome_browser_state),
       OAuth2TokenServiceFactory::GetForBrowserState(chrome_browser_state),
       ios::AccountTrackerServiceFactory::GetForBrowserState(
diff --git a/ios/chrome/browser/signin/signin_manager_factory.h b/ios/chrome/browser/signin/signin_manager_factory.h
index 3bfb2b7..357f443 100644
--- a/ios/chrome/browser/signin/signin_manager_factory.h
+++ b/ios/chrome/browser/signin/signin_manager_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_FACTORY_H_
 #define IOS_CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/observer_list.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
@@ -62,7 +63,7 @@
   mutable base::ObserverList<SigninManagerFactoryObserver, true> observer_list_;
 
   // BrowserStateKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   void BrowserStateShutdown(web::BrowserState* context) override;
 };
diff --git a/ios/chrome/browser/snapshots/lru_cache.mm b/ios/chrome/browser/snapshots/lru_cache.mm
index d9a35c6..ffbf1dd 100644
--- a/ios/chrome/browser/snapshots/lru_cache.mm
+++ b/ios/chrome/browser/snapshots/lru_cache.mm
@@ -6,11 +6,12 @@
 
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/containers/hash_tables.h"
 #include "base/containers/mru_cache.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace {
 
@@ -56,7 +57,7 @@
 }  // namespace
 
 @implementation LRUCache {
-  scoped_ptr<NSObjectMRUCache> _cache;
+  std::unique_ptr<NSObjectMRUCache> _cache;
 }
 
 @synthesize maxCacheSize = _maxCacheSize;
diff --git a/ios/chrome/browser/ssl/ios_chrome_security_state_model_client.h b/ios/chrome/browser/ssl/ios_chrome_security_state_model_client.h
index 63d032a..4503c8da 100644
--- a/ios/chrome/browser/ssl/ios_chrome_security_state_model_client.h
+++ b/ios/chrome/browser/ssl/ios_chrome_security_state_model_client.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SSL_IOS_CHROME_SECURITY_STATE_MODEL_CLIENT_H_
 #define IOS_CHROME_BROWSER_SSL_IOS_CHROME_SECURITY_STATE_MODEL_CLIENT_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/security_state/security_state_model.h"
 #include "components/security_state/security_state_model_client.h"
 #include "ios/web/public/web_state/web_state_user_data.h"
@@ -38,7 +39,7 @@
   friend class web::WebStateUserData<IOSChromeSecurityStateModelClient>;
 
   web::WebState* web_state_;
-  scoped_ptr<security_state::SecurityStateModel> security_state_model_;
+  std::unique_ptr<security_state::SecurityStateModel> security_state_model_;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeSecurityStateModelClient);
 };
diff --git a/ios/chrome/browser/ssl/ios_ssl_blocking_page.h b/ios/chrome/browser/ssl/ios_ssl_blocking_page.h
index be5b9463..c653a5e 100644
--- a/ios/chrome/browser/ssl/ios_ssl_blocking_page.h
+++ b/ios/chrome/browser/ssl/ios_ssl_blocking_page.h
@@ -71,8 +71,8 @@
   // expired.
   const bool expired_but_previously_allowed_;
 
-  scoped_ptr<IOSChromeControllerClient> controller_;
-  scoped_ptr<security_interstitials::SSLErrorUI> ssl_error_ui_;
+  std::unique_ptr<IOSChromeControllerClient> controller_;
+  std::unique_ptr<security_interstitials::SSLErrorUI> ssl_error_ui_;
 
   DISALLOW_COPY_AND_ASSIGN(IOSSSLBlockingPage);
 };
diff --git a/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm b/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm
index e41fec13..659711e 100644
--- a/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm
+++ b/ios/chrome/browser/ssl/ios_ssl_blocking_page.mm
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
@@ -93,7 +94,7 @@
   reporting_info.rappor_report_type = rappor::UMA_RAPPOR_TYPE;
   IOSChromeMetricsHelper* ios_chrome_metrics_helper =
       new IOSChromeMetricsHelper(web_state, request_url, reporting_info);
-  controller_->set_metrics_helper(make_scoped_ptr(ios_chrome_metrics_helper));
+  controller_->set_metrics_helper(base::WrapUnique(ios_chrome_metrics_helper));
 
   ssl_error_ui_.reset(new SSLErrorUI(request_url, cert_error, ssl_info,
                                      options_mask, time_triggered,
diff --git a/ios/chrome/browser/suggestions/image_fetcher_impl.h b/ios/chrome/browser/suggestions/image_fetcher_impl.h
index 8cd0c01..a0f0036 100644
--- a/ios/chrome/browser/suggestions/image_fetcher_impl.h
+++ b/ios/chrome/browser/suggestions/image_fetcher_impl.h
@@ -5,9 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_SUGGESTIONS_IMAGE_FETCHER_IMPL_H_
 #define IOS_CHROME_BROWSER_SUGGESTIONS_IMAGE_FETCHER_IMPL_H_
 
+#include <memory>
+
 #include "base/callback_forward.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/suggestions/image_fetcher.h"
 
 class GURL;
@@ -44,7 +45,7 @@
       base::Callback<void(const GURL&, const SkBitmap*)> callback) override;
 
  private:
-  scoped_ptr<image_fetcher::ImageFetcher> imageFetcher_;
+  std::unique_ptr<image_fetcher::ImageFetcher> imageFetcher_;
 
   ImageFetcherDelegate* delegate_;
 
diff --git a/ios/chrome/browser/suggestions/suggestions_service_factory.h b/ios/chrome/browser/suggestions/suggestions_service_factory.h
index 0cb8f821..d9d9c8c 100644
--- a/ios/chrome/browser/suggestions/suggestions_service_factory.h
+++ b/ios/chrome/browser/suggestions/suggestions_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SUGGESTIONS_SUGGESTIONS_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SUGGESTIONS_SUGGESTIONS_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -39,7 +40,7 @@
   ~SuggestionsServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   void RegisterBrowserStatePrefs(
       user_prefs::PrefRegistrySyncable* registry) override;
diff --git a/ios/chrome/browser/suggestions/suggestions_service_factory.mm b/ios/chrome/browser/suggestions/suggestions_service_factory.mm
index 52e03d0db..b771df4 100644
--- a/ios/chrome/browser/suggestions/suggestions_service_factory.mm
+++ b/ios/chrome/browser/suggestions/suggestions_service_factory.mm
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "base/sequenced_task_runner.h"
 #include "base/threading/sequenced_worker_pool.h"
@@ -58,7 +59,8 @@
 SuggestionsServiceFactory::~SuggestionsServiceFactory() {
 }
 
-scoped_ptr<KeyedService> SuggestionsServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+SuggestionsServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   base::SequencedWorkerPool* sequenced_worker_pool =
       web::WebThread::GetBlockingPool();
@@ -76,18 +78,18 @@
       IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state);
   base::FilePath database_dir(
       browser_state->GetStatePath().Append(kThumbnailDirectory));
-  scoped_ptr<SuggestionsStore> suggestions_store(
+  std::unique_ptr<SuggestionsStore> suggestions_store(
       new SuggestionsStore(browser_state->GetPrefs()));
-  scoped_ptr<BlacklistStore> blacklist_store(
+  std::unique_ptr<BlacklistStore> blacklist_store(
       new BlacklistStore(browser_state->GetPrefs()));
-  scoped_ptr<leveldb_proto::ProtoDatabaseImpl<ImageData>> db(
+  std::unique_ptr<leveldb_proto::ProtoDatabaseImpl<ImageData>> db(
       new leveldb_proto::ProtoDatabaseImpl<ImageData>(background_task_runner));
-  scoped_ptr<ImageFetcher> image_fetcher(new ImageFetcherImpl(
+  std::unique_ptr<ImageFetcher> image_fetcher(new ImageFetcherImpl(
       browser_state->GetRequestContext(), sequenced_worker_pool));
-  scoped_ptr<ImageManager> thumbnail_manager(new ImageManager(
+  std::unique_ptr<ImageManager> thumbnail_manager(new ImageManager(
       std::move(image_fetcher), std::move(db), database_dir,
       web::WebThread::GetTaskRunnerForThread(web::WebThread::DB)));
-  return make_scoped_ptr(new SuggestionsService(
+  return base::WrapUnique(new SuggestionsService(
       signin_manager, token_service, sync_service,
       browser_state->GetRequestContext(), std::move(suggestions_store),
       std::move(thumbnail_manager), std::move(blacklist_store)));
diff --git a/ios/chrome/browser/sync/fake_sync_service_factory.cc b/ios/chrome/browser/sync/fake_sync_service_factory.cc
index 8889f0b..7e5b0d29 100644
--- a/ios/chrome/browser/sync/fake_sync_service_factory.cc
+++ b/ios/chrome/browser/sync/fake_sync_service_factory.cc
@@ -5,6 +5,7 @@
 #include "ios/chrome/browser/sync/fake_sync_service_factory.h"
 
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -60,9 +61,9 @@
 
 FakeSyncServiceFactory::~FakeSyncServiceFactory() {}
 
-scoped_ptr<KeyedService> FakeSyncServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> FakeSyncServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  return make_scoped_ptr(new KeyedFakeSyncService);
+  return base::WrapUnique(new KeyedFakeSyncService);
 }
 
 }  // namespace ios
diff --git a/ios/chrome/browser/sync/fake_sync_service_factory.h b/ios/chrome/browser/sync/fake_sync_service_factory.h
index 60741fb..cc5de42 100644
--- a/ios/chrome/browser/sync/fake_sync_service_factory.h
+++ b/ios/chrome/browser/sync/fake_sync_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SYNC_FAKE_SYNC_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SYNC_FAKE_SYNC_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -42,7 +43,7 @@
   ~FakeSyncServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(FakeSyncServiceFactory);
diff --git a/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.cc b/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.cc
index 361b57d..4c8a4a0 100644
--- a/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.cc
+++ b/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "base/time/time.h"
 #include "components/browser_sync/browser/profile_sync_service.h"
@@ -108,7 +109,7 @@
 
 IOSChromeProfileSyncServiceFactory::~IOSChromeProfileSyncServiceFactory() {}
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 IOSChromeProfileSyncServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
@@ -128,12 +129,12 @@
 
   ProfileSyncService::InitParams init_params;
   init_params.signin_wrapper =
-      make_scoped_ptr(new SigninManagerWrapper(signin));
+      base::WrapUnique(new SigninManagerWrapper(signin));
   init_params.oauth2_token_service =
       OAuth2TokenServiceFactory::GetForBrowserState(browser_state);
   init_params.start_behavior = ProfileSyncService::MANUAL_START;
   init_params.sync_client =
-      make_scoped_ptr(new IOSChromeSyncClient(browser_state));
+      base::WrapUnique(new IOSChromeSyncClient(browser_state));
   init_params.network_time_update_callback = base::Bind(&UpdateNetworkTime);
   init_params.base_directory = browser_state->GetStatePath();
   init_params.url_request_context = browser_state->GetRequestContext();
@@ -145,7 +146,7 @@
       web::WebThread::GetTaskRunnerForThread(web::WebThread::FILE);
   init_params.blocking_pool = web::WebThread::GetBlockingPool();
 
-  auto pss = make_scoped_ptr(new ProfileSyncService(std::move(init_params)));
+  auto pss = base::WrapUnique(new ProfileSyncService(std::move(init_params)));
 
   // Will also initialize the sync client.
   pss->Initialize();
diff --git a/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h b/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h
index 3b66d08..d455a23 100644
--- a/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h
+++ b/ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_SYNC_IOS_CHROME_PROFILE_SYNC_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SYNC_IOS_CHROME_PROFILE_SYNC_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
@@ -40,7 +42,7 @@
   ~IOSChromeProfileSyncServiceFactory() override;
 
   // BrowserContextKeyedServiceFactory:
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 };
 
diff --git a/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.cc b/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.cc
index b53ab59..f530e233 100644
--- a/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.cc
+++ b/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.cc
@@ -5,6 +5,7 @@
 #include "ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.h"
 
 #include "base/bind.h"
+#include "base/memory/ptr_util.h"
 #include "components/browser_sync/browser/profile_sync_service_mock.h"
 #include "components/browser_sync/browser/profile_sync_test_util.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
@@ -18,18 +19,18 @@
 #include "ios/web/public/web_thread.h"
 
 ProfileSyncService::InitParams CreateProfileSyncServiceParamsForTest(
-    scoped_ptr<sync_driver::SyncClient> sync_client,
+    std::unique_ptr<sync_driver::SyncClient> sync_client,
     ios::ChromeBrowserState* browser_state) {
   ProfileSyncService::InitParams init_params;
 
-  init_params.signin_wrapper = make_scoped_ptr(new SigninManagerWrapper(
+  init_params.signin_wrapper = base::WrapUnique(new SigninManagerWrapper(
       ios::SigninManagerFactory::GetForBrowserState(browser_state)));
   init_params.oauth2_token_service =
       OAuth2TokenServiceFactory::GetForBrowserState(browser_state);
   init_params.start_behavior = ProfileSyncService::MANUAL_START;
   init_params.sync_client =
       sync_client ? std::move(sync_client)
-                  : make_scoped_ptr(new IOSChromeSyncClient(browser_state));
+                  : base::WrapUnique(new IOSChromeSyncClient(browser_state));
   init_params.network_time_update_callback =
       base::Bind(&browser_sync::EmptyNetworkTimeUpdate);
   init_params.base_directory = browser_state->GetStatePath();
@@ -45,9 +46,9 @@
   return init_params;
 }
 
-scoped_ptr<KeyedService> BuildMockProfileSyncService(
+std::unique_ptr<KeyedService> BuildMockProfileSyncService(
     web::BrowserState* context) {
-  return make_scoped_ptr(
+  return base::WrapUnique(
       new ProfileSyncServiceMock(CreateProfileSyncServiceParamsForTest(
           nullptr, ios::ChromeBrowserState::FromBrowserState(context))));
 }
diff --git a/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.h b/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.h
index 4968ff81..3444237 100644
--- a/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.h
+++ b/ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.h
@@ -5,7 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_SYNC_IOS_CHROME_PROFILE_SYNC_TEST_UTIL_H_
 #define IOS_CHROME_BROWSER_SYNC_IOS_CHROME_PROFILE_SYNC_TEST_UTIL_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "components/browser_sync/browser/profile_sync_service.h"
 
 namespace ios {
@@ -23,12 +24,12 @@
 // Helper method for constructing ProfileSyncService mocks. If |sync_client|
 // is null, a fresh one is created.
 ProfileSyncService::InitParams CreateProfileSyncServiceParamsForTest(
-    scoped_ptr<sync_driver::SyncClient> sync_client,
+    std::unique_ptr<sync_driver::SyncClient> sync_client,
     ios::ChromeBrowserState* browser_state);
 
 // Helper routine to be used in conjunction with
 // BrowserStateKeyedServiceFactory::SetTestingFactory().
-scoped_ptr<KeyedService> BuildMockProfileSyncService(
+std::unique_ptr<KeyedService> BuildMockProfileSyncService(
     web::BrowserState* context);
 
 #endif  // IOS_CHROME_BROWSER_SYNC_IOS_CHROME_PROFILE_SYNC_TEST_UTIL_H_
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.h b/ios/chrome/browser/sync/ios_chrome_sync_client.h
index 3708fdf..2a5fafa9 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.h
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_SYNC_IOS_CHROME_SYNC_CLIENT_H__
 #define IOS_CHROME_BROWSER_SYNC_IOS_CHROME_SYNC_CLIENT_H__
 
+#include <memory>
 #include <vector>
 
 #include "base/macros.h"
@@ -59,7 +60,7 @@
   sync_driver::SyncApiComponentFactory* GetSyncApiComponentFactory() override;
 
   void SetSyncApiComponentFactoryForTesting(
-      scoped_ptr<sync_driver::SyncApiComponentFactory> component_factory);
+      std::unique_ptr<sync_driver::SyncApiComponentFactory> component_factory);
 
   // Iterates over browser states and returns any trackers that can be found.
   static void GetDeviceInfoTrackers(
@@ -69,14 +70,14 @@
   ios::ChromeBrowserState* const browser_state_;
 
   // The sync api component factory in use by this client.
-  scoped_ptr<sync_driver::SyncApiComponentFactory> component_factory_;
+  std::unique_ptr<sync_driver::SyncApiComponentFactory> component_factory_;
 
   // Members that must be fetched on the UI thread but accessed on their
   // respective backend threads.
   scoped_refptr<autofill::AutofillWebDataService> web_data_service_;
   scoped_refptr<password_manager::PasswordStore> password_store_;
 
-  scoped_ptr<sync_sessions::SyncSessionsClient> sync_sessions_client_;
+  std::unique_ptr<sync_sessions::SyncSessionsClient> sync_sessions_client_;
 
   const scoped_refptr<syncer::ExtensionsActivity> dummy_extensions_activity_;
 
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.mm b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
index 4d0796d..c5ec6a6 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.mm
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "components/autofill/core/browser/webdata/autocomplete_syncable_service.h"
 #include "components/autofill/core/browser/webdata/autofill_profile_syncable_service.h"
 #include "components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.h"
@@ -110,18 +111,18 @@
     return window_delegates_getter_.get();
   }
 
-  scoped_ptr<browser_sync::LocalSessionEventRouter> GetLocalSessionEventRouter()
-      override {
+  std::unique_ptr<browser_sync::LocalSessionEventRouter>
+  GetLocalSessionEventRouter() override {
     syncer::SyncableService::StartSyncFlare flare(
         ios::sync_start_util::GetFlareForSyncableService(
             browser_state_->GetStatePath()));
-    return make_scoped_ptr(
+    return base::WrapUnique(
         new IOSChromeLocalSessionEventRouter(browser_state_, this, flare));
   }
 
  private:
   ios::ChromeBrowserState* const browser_state_;
-  const scoped_ptr<browser_sync::SyncedWindowDelegatesGetter>
+  const std::unique_ptr<browser_sync::SyncedWindowDelegatesGetter>
       window_delegates_getter_;
 
   DISALLOW_COPY_AND_ASSIGN(SyncSessionsClientImpl);
@@ -381,7 +382,7 @@
 }
 
 void IOSChromeSyncClient::SetSyncApiComponentFactoryForTesting(
-    scoped_ptr<sync_driver::SyncApiComponentFactory> component_factory) {
+    std::unique_ptr<sync_driver::SyncApiComponentFactory> component_factory) {
   component_factory_ = std::move(component_factory);
 }
 
diff --git a/ios/chrome/browser/sync/sessions/ios_chrome_local_session_event_router.h b/ios/chrome/browser/sync/sessions/ios_chrome_local_session_event_router.h
index 08b7e09..4d79429f 100644
--- a/ios/chrome/browser/sync/sessions/ios_chrome_local_session_event_router.h
+++ b/ios/chrome/browser/sync/sessions/ios_chrome_local_session_event_router.h
@@ -7,6 +7,7 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <set>
 
 #include "base/callback_list.h"
@@ -72,11 +73,11 @@
   sync_sessions::SyncSessionsClient* const sessions_client_;
   syncer::SyncableService::StartSyncFlare flare_;
 
-  scoped_ptr<base::CallbackList<void(const std::set<GURL>&,
-                                     const GURL&)>::Subscription>
+  std::unique_ptr<base::CallbackList<void(const std::set<GURL>&,
+                                          const GURL&)>::Subscription>
       favicon_changed_subscription_;
 
-  scoped_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
+  std::unique_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
       tab_parented_subscription_;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeLocalSessionEventRouter);
diff --git a/ios/chrome/browser/sync/sync_setup_service_factory.cc b/ios/chrome/browser/sync/sync_setup_service_factory.cc
index 1f44598..6a197d5 100644
--- a/ios/chrome/browser/sync/sync_setup_service_factory.cc
+++ b/ios/chrome/browser/sync/sync_setup_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/sync/sync_setup_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/browser_sync/browser/profile_sync_service.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
@@ -40,11 +41,11 @@
 SyncSetupServiceFactory::~SyncSetupServiceFactory() {
 }
 
-scoped_ptr<KeyedService> SyncSetupServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> SyncSetupServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(new SyncSetupService(
+  return base::WrapUnique(new SyncSetupService(
       IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state),
       browser_state->GetPrefs()));
 }
diff --git a/ios/chrome/browser/sync/sync_setup_service_factory.h b/ios/chrome/browser/sync/sync_setup_service_factory.h
index e0870959..6ad3c22 100644
--- a/ios/chrome/browser/sync/sync_setup_service_factory.h
+++ b/ios/chrome/browser/sync/sync_setup_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_SYNC_SYNC_SETUP_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_SYNC_SYNC_SETUP_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -38,7 +39,7 @@
   ~SyncSetupServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(SyncSetupServiceFactory);
diff --git a/ios/chrome/browser/tab_parenting_global_observer.cc b/ios/chrome/browser/tab_parenting_global_observer.cc
index 1ed07d1..8c0ae3b 100644
--- a/ios/chrome/browser/tab_parenting_global_observer.cc
+++ b/ios/chrome/browser/tab_parenting_global_observer.cc
@@ -10,7 +10,7 @@
   return base::Singleton<TabParentingGlobalObserver>::get();
 }
 
-scoped_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
+std::unique_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
 TabParentingGlobalObserver::RegisterCallback(const OnTabParentedCallback& cb) {
   return on_tab_parented_callback_list_.Add(cb);
 }
diff --git a/ios/chrome/browser/tab_parenting_global_observer.h b/ios/chrome/browser/tab_parenting_global_observer.h
index 61f64ac..ff14a07 100644
--- a/ios/chrome/browser/tab_parenting_global_observer.h
+++ b/ios/chrome/browser/tab_parenting_global_observer.h
@@ -5,9 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_TAB_PARENTING_GLOBAL_OBSERVER_H_
 #define IOS_CHROME_BROWSER_TAB_PARENTING_GLOBAL_OBSERVER_H_
 
+#include <memory>
+
 #include "base/callback_list.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace base {
 template <typename T>
@@ -29,7 +30,7 @@
   static TabParentingGlobalObserver* GetInstance();
 
   // Registers |cb| to be invoked when a tab is parented.
-  scoped_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
+  std::unique_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
   RegisterCallback(const OnTabParentedCallback& cb);
 
   // Called to notify all registered callbacks that |web_state| was parented.
diff --git a/ios/chrome/browser/translate/chrome_ios_translate_client.h b/ios/chrome/browser/translate/chrome_ios_translate_client.h
index 63b1f936..da7d420 100644
--- a/ios/chrome/browser/translate/chrome_ios_translate_client.h
+++ b/ios/chrome/browser/translate/chrome_ios_translate_client.h
@@ -5,10 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_TRANSLATE_CHROME_IOS_TRANSLATE_CLIENT_H_
 #define IOS_CHROME_BROWSER_TRANSLATE_CHROME_IOS_TRANSLATE_CLIENT_H_
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/translate/core/browser/translate_client.h"
 #include "components/translate/core/browser/translate_step.h"
 #include "components/translate/core/common/translate_errors.h"
@@ -36,7 +36,7 @@
   ~ChromeIOSTranslateClient() override;
 
   // Helper method to return a new TranslatePrefs instance.
-  static scoped_ptr<translate::TranslatePrefs> CreateTranslatePrefs(
+  static std::unique_ptr<translate::TranslatePrefs> CreateTranslatePrefs(
       PrefService* prefs);
 
   // Gets the associated TranslateManager.
@@ -45,11 +45,12 @@
   // TranslateClient implementation.
   translate::TranslateDriver* GetTranslateDriver() override;
   PrefService* GetPrefs() override;
-  scoped_ptr<translate::TranslatePrefs> GetTranslatePrefs() override;
+  std::unique_ptr<translate::TranslatePrefs> GetTranslatePrefs() override;
   translate::TranslateAcceptLanguages* GetTranslateAcceptLanguages() override;
   int GetInfobarIconID() const override;
-  scoped_ptr<infobars::InfoBar> CreateInfoBar(
-      scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const override;
+  std::unique_ptr<infobars::InfoBar> CreateInfoBar(
+      std::unique_ptr<translate::TranslateInfoBarDelegate> delegate)
+      const override;
   void ShowTranslateUI(translate::TranslateStep step,
                        const std::string& source_language,
                        const std::string& target_language,
@@ -65,7 +66,7 @@
   // web::WebStateObserver implementation.
   void WebStateDestroyed() override;
 
-  scoped_ptr<translate::TranslateManager> translate_manager_;
+  std::unique_ptr<translate::TranslateManager> translate_manager_;
   translate::IOSTranslateDriver translate_driver_;
 
   DISALLOW_COPY_AND_ASSIGN(ChromeIOSTranslateClient);
diff --git a/ios/chrome/browser/translate/chrome_ios_translate_client.mm b/ios/chrome/browser/translate/chrome_ios_translate_client.mm
index 33c9bb5..6338ae52 100644
--- a/ios/chrome/browser/translate/chrome_ios_translate_client.mm
+++ b/ios/chrome/browser/translate/chrome_ios_translate_client.mm
@@ -46,9 +46,9 @@
 }
 
 // static
-scoped_ptr<translate::TranslatePrefs>
+std::unique_ptr<translate::TranslatePrefs>
 ChromeIOSTranslateClient::CreateTranslatePrefs(PrefService* prefs) {
-  return scoped_ptr<translate::TranslatePrefs>(
+  return std::unique_ptr<translate::TranslatePrefs>(
       new translate::TranslatePrefs(prefs, prefs::kAcceptLanguages, nullptr));
 }
 
@@ -58,11 +58,11 @@
 
 // TranslateClient implementation:
 
-scoped_ptr<infobars::InfoBar> ChromeIOSTranslateClient::CreateInfoBar(
-    scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const {
+std::unique_ptr<infobars::InfoBar> ChromeIOSTranslateClient::CreateInfoBar(
+    std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) const {
   translate::TranslateStep step = delegate->translate_step();
 
-  scoped_ptr<InfoBarIOS> infobar(new InfoBarIOS(std::move(delegate)));
+  std::unique_ptr<InfoBarIOS> infobar(new InfoBarIOS(std::move(delegate)));
   base::scoped_nsobject<InfoBarController> controller;
   switch (step) {
     case translate::TRANSLATE_STEP_AFTER_TRANSLATE:
@@ -119,7 +119,7 @@
   return chrome_browser_state->GetOriginalChromeBrowserState()->GetPrefs();
 }
 
-scoped_ptr<translate::TranslatePrefs>
+std::unique_ptr<translate::TranslatePrefs>
 ChromeIOSTranslateClient::GetTranslatePrefs() {
   DCHECK(web_state());
   ios::ChromeBrowserState* chrome_browser_state =
diff --git a/ios/chrome/browser/translate/translate_accept_languages_factory.cc b/ios/chrome/browser/translate/translate_accept_languages_factory.cc
index 53f7483..f7b45a5 100644
--- a/ios/chrome/browser/translate/translate_accept_languages_factory.cc
+++ b/ios/chrome/browser/translate/translate_accept_languages_factory.cc
@@ -5,6 +5,7 @@
 #include "ios/chrome/browser/translate/translate_accept_languages_factory.h"
 
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/prefs/pref_service.h"
@@ -67,12 +68,12 @@
 TranslateAcceptLanguagesFactory::~TranslateAcceptLanguagesFactory() {
 }
 
-scoped_ptr<KeyedService>
+std::unique_ptr<KeyedService>
 TranslateAcceptLanguagesFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   ios::ChromeBrowserState* browser_state =
       ios::ChromeBrowserState::FromBrowserState(context);
-  return make_scoped_ptr(
+  return base::WrapUnique(
       new TranslateAcceptLanguagesService(browser_state->GetPrefs()));
 }
 
diff --git a/ios/chrome/browser/translate/translate_accept_languages_factory.h b/ios/chrome/browser/translate/translate_accept_languages_factory.h
index 14852538..9c20619 100644
--- a/ios/chrome/browser/translate/translate_accept_languages_factory.h
+++ b/ios/chrome/browser/translate/translate_accept_languages_factory.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CHROME_BROWSER_TRANSLATE_TRANSLATE_ACCEPT_LANGUAGES_FACTORY_H_
 #define IOS_CHROME_BROWSER_TRANSLATE_TRANSLATE_ACCEPT_LANGUAGES_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
@@ -32,7 +34,7 @@
   ~TranslateAcceptLanguagesFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/ui/autofill/autofill_client_ios.h b/ios/chrome/browser/ui/autofill/autofill_client_ios.h
index e3e87ba2..646c154 100644
--- a/ios/chrome/browser/ui/autofill/autofill_client_ios.h
+++ b/ios/chrome/browser/ui/autofill/autofill_client_ios.h
@@ -5,11 +5,11 @@
 #ifndef IOS_CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_CLIENT_IOS_H_
 #define IOS_CHROME_BROWSER_UI_AUTOFILL_AUTOFILL_CLIENT_IOS_H_
 
+#include <memory>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/autofill/core/browser/autofill_client.h"
 #include "components/autofill/core/browser/ui/card_unmask_prompt_controller_impl.h"
 #include "components/autofill/ios/browser/autofill_client_ios_bridge.h"
@@ -46,7 +46,7 @@
       infobars::InfoBarManager* infobar_manager,
       id<AutofillClientIOSBridge> bridge,
       password_manager::PasswordGenerationManager* password_generation_manager,
-      scoped_ptr<IdentityProvider> identity_provider);
+      std::unique_ptr<IdentityProvider> identity_provider);
   ~AutofillClientIOS() override;
 
   // AutofillClient implementation.
@@ -64,7 +64,7 @@
                                     const base::Closure& callback) override;
   void ConfirmSaveCreditCardToCloud(
       const CreditCard& card,
-      scoped_ptr<base::DictionaryValue> legal_message,
+      std::unique_ptr<base::DictionaryValue> legal_message,
       const base::Closure& callback) override;
   void LoadRiskData(
       const base::Callback<void(const std::string&)>& callback) override;
@@ -98,7 +98,7 @@
   infobars::InfoBarManager* infobar_manager_;
   id<AutofillClientIOSBridge> bridge_;  // Weak
   password_manager::PasswordGenerationManager* password_generation_manager_;
-  scoped_ptr<IdentityProvider> identity_provider_;
+  std::unique_ptr<IdentityProvider> identity_provider_;
   CardUnmaskPromptControllerImpl unmask_controller_;
 
   DISALLOW_COPY_AND_ASSIGN(AutofillClientIOS);
diff --git a/ios/chrome/browser/ui/autofill/autofill_client_ios.mm b/ios/chrome/browser/ui/autofill/autofill_client_ios.mm
index e0f2eb97..279f96f 100644
--- a/ios/chrome/browser/ui/autofill/autofill_client_ios.mm
+++ b/ios/chrome/browser/ui/autofill/autofill_client_ios.mm
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/memory/ptr_util.h"
 #include "components/autofill/core/browser/autofill_save_card_infobar_delegate_mobile.h"
 #include "components/autofill/core/browser/autofill_save_card_infobar_mobile.h"
 #include "components/autofill/core/browser/ui/card_unmask_prompt_view.h"
@@ -30,7 +31,7 @@
     infobars::InfoBarManager* infobar_manager,
     id<AutofillClientIOSBridge> bridge,
     password_manager::PasswordGenerationManager* password_generation_manager,
-    scoped_ptr<IdentityProvider> identity_provider)
+    std::unique_ptr<IdentityProvider> identity_provider)
     : browser_state_(browser_state),
       infobar_manager_(infobar_manager),
       bridge_(bridge),
@@ -95,16 +96,17 @@
   // InfoBarService is a WebContentsUserData, it must also be alive at this
   // time.
   infobar_manager_->AddInfoBar(CreateSaveCardInfoBarMobile(
-      make_scoped_ptr(new AutofillSaveCardInfoBarDelegateMobile(
-          false, card, scoped_ptr<base::DictionaryValue>(nullptr), callback))));
+      base::WrapUnique(new AutofillSaveCardInfoBarDelegateMobile(
+          false, card, std::unique_ptr<base::DictionaryValue>(nullptr),
+          callback))));
 }
 
 void AutofillClientIOS::ConfirmSaveCreditCardToCloud(
     const CreditCard& card,
-    scoped_ptr<base::DictionaryValue> legal_message,
+    std::unique_ptr<base::DictionaryValue> legal_message,
     const base::Closure& callback) {
   infobar_manager_->AddInfoBar(CreateSaveCardInfoBarMobile(
-      make_scoped_ptr(new AutofillSaveCardInfoBarDelegateMobile(
+      base::WrapUnique(new AutofillSaveCardInfoBarDelegateMobile(
           true, card, std::move(legal_message), callback))));
 }
 
diff --git a/ios/chrome/browser/ui/autofill/autofill_save_card_infobar.mm b/ios/chrome/browser/ui/autofill/autofill_save_card_infobar.mm
index 0f34f3d..3f07713 100644
--- a/ios/chrome/browser/ui/autofill/autofill_save_card_infobar.mm
+++ b/ios/chrome/browser/ui/autofill/autofill_save_card_infobar.mm
@@ -11,8 +11,8 @@
 
 namespace autofill {
 
-scoped_ptr<infobars::InfoBar> CreateSaveCardInfoBarMobile(
-    scoped_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate) {
+std::unique_ptr<infobars::InfoBar> CreateSaveCardInfoBarMobile(
+    std::unique_ptr<AutofillSaveCardInfoBarDelegateMobile> delegate) {
   // TODO(jdonnelly): Implement iOS save card infobar. http://crbug.com/535784
   return ::CreateConfirmInfoBar(std::move(delegate));
 }
diff --git a/ios/chrome/browser/ui/webui/flags_ui.cc b/ios/chrome/browser/ui/webui/flags_ui.cc
index 9d48d27..c72ce34 100644
--- a/ios/chrome/browser/ui/webui/flags_ui.cc
+++ b/ios/chrome/browser/ui/webui/flags_ui.cc
@@ -113,7 +113,7 @@
   void HandleResetAllFlags(const base::ListValue* args);
 
  private:
-  scoped_ptr<flags_ui::FlagsStorage> flags_storage_;
+  std::unique_ptr<flags_ui::FlagsStorage> flags_storage_;
   flags_ui::FlagAccess access_;
   bool experimental_features_requested_;
 
@@ -158,8 +158,8 @@
 
   base::DictionaryValue results;
 
-  scoped_ptr<base::ListValue> supported_features(new base::ListValue);
-  scoped_ptr<base::ListValue> unsupported_features(new base::ListValue);
+  std::unique_ptr<base::ListValue> supported_features(new base::ListValue);
+  std::unique_ptr<base::ListValue> unsupported_features(new base::ListValue);
   GetFlagFeatureEntries(flags_storage_.get(), access_, supported_features.get(),
                         unsupported_features.get());
   results.Set(flags_ui::kSupportedFeatures, supported_features.release());
diff --git a/ios/chrome/browser/ui/webui/history/browsing_history_handler.cc b/ios/chrome/browser/ui/webui/history/browsing_history_handler.cc
index da8d6d2..73a1d26 100644
--- a/ios/chrome/browser/ui/webui/history/browsing_history_handler.cc
+++ b/ios/chrome/browser/ui/webui/history/browsing_history_handler.cc
@@ -110,7 +110,7 @@
   DCHECK(sync_service->GetDeviceInfoTracker());
   DCHECK(sync_service->GetDeviceInfoTracker()->IsSyncing());
 
-  scoped_ptr<sync_driver::DeviceInfo> device_info =
+  std::unique_ptr<sync_driver::DeviceInfo> device_info =
       sync_service->GetDeviceInfoTracker()->GetDeviceInfo(client_id);
   if (device_info.get()) {
     *name = device_info->client_name();
@@ -182,11 +182,12 @@
   result->SetString("title", title_to_set);
 }
 
-scoped_ptr<base::DictionaryValue> BrowsingHistoryHandler::HistoryEntry::ToValue(
+std::unique_ptr<base::DictionaryValue>
+BrowsingHistoryHandler::HistoryEntry::ToValue(
     BookmarkModel* bookmark_model,
     SupervisedUserService* supervised_user_service,
     const ProfileSyncService* sync_service) const {
-  scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue());
+  std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
   SetUrlAndTitle(result.get());
 
   base::string16 domain = url_formatter::IDNToUnicode(url.host());
@@ -203,7 +204,7 @@
   result->SetDouble("time", time.ToJsTime());
 
   // Pass the timestamps in a list.
-  scoped_ptr<base::ListValue> timestamps(new base::ListValue);
+  std::unique_ptr<base::ListValue> timestamps(new base::ListValue);
   for (int64_t timestamp : all_timestamps) {
     timestamps->AppendDouble(
         base::Time::FromInternalValue(timestamp).ToJsTime());
@@ -589,7 +590,7 @@
   // Convert the result vector into a ListValue.
   base::ListValue results_value;
   for (const BrowsingHistoryHandler::HistoryEntry& entry : query_results_) {
-    scoped_ptr<base::Value> value(
+    std::unique_ptr<base::Value> value(
         entry.ToValue(bookmark_model, nullptr, sync_service));
     results_value.Append(value.release());
   }
diff --git a/ios/chrome/browser/ui/webui/history/browsing_history_handler.h b/ios/chrome/browser/ui/webui/history/browsing_history_handler.h
index 1a6254c..233ffad0 100644
--- a/ios/chrome/browser/ui/webui/history/browsing_history_handler.h
+++ b/ios/chrome/browser/ui/webui/history/browsing_history_handler.h
@@ -7,10 +7,10 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observer.h"
 #include "base/strings/string16.h"
@@ -68,7 +68,7 @@
     void SetUrlAndTitle(base::DictionaryValue* result) const;
 
     // Converts the entry to a DictionaryValue to be owned by the caller.
-    scoped_ptr<base::DictionaryValue> ToValue(
+    std::unique_ptr<base::DictionaryValue> ToValue(
         bookmarks::BookmarkModel* bookmark_model,
         SupervisedUserService* supervised_user_service,
         const ProfileSyncService* sync_service) const;
@@ -186,7 +186,7 @@
 
   // The currently-executing request for synced history results.
   // Deleting the request will cancel it.
-  scoped_ptr<history::WebHistoryService::Request> web_history_request_;
+  std::unique_ptr<history::WebHistoryService::Request> web_history_request_;
 
   // True if there is a pending delete requests to the history service.
   bool has_pending_delete_request_;
diff --git a/ios/chrome/browser/ui/webui/net_export/net_export_ui.cc b/ios/chrome/browser/ui/webui/net_export/net_export_ui.cc
index 4c68b8b..6e822b21 100644
--- a/ios/chrome/browser/ui/webui/net_export/net_export_ui.cc
+++ b/ios/chrome/browser/ui/webui/net_export/net_export_ui.cc
@@ -4,12 +4,12 @@
 
 #include "ios/chrome/browser/ui/webui/net_export/net_export_ui.h"
 
+#include <memory>
 #include <string>
 
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
@@ -226,7 +226,7 @@
 }
 
 void NetExportMessageHandler::OnExportNetLogInfoChanged(base::Value* arg) {
-  scoped_ptr<base::Value> value(arg);
+  std::unique_ptr<base::Value> value(arg);
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
   web_ui()->CallJavascriptFunction(net_log::kOnExportNetLogInfoChanged, *arg);
 }
diff --git a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc
index d48d2ee..0f4cb54 100644
--- a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc
+++ b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc
@@ -120,7 +120,7 @@
     const base::ListValue* args) {
   DCHECK(args->empty());
   base::DictionaryValue event_details;
-  scoped_ptr<base::ListValue> type_list(new base::ListValue());
+  std::unique_ptr<base::ListValue> type_list(new base::ListValue());
   ModelTypeSet protocol_types = syncer::ProtocolTypes();
   for (ModelTypeSet::Iterator it = protocol_types.First(); it.Good();
        it.Inc()) {
@@ -150,7 +150,7 @@
 
 void SyncInternalsMessageHandler::OnReceivedAllNodes(
     int request_id,
-    scoped_ptr<base::ListValue> nodes) {
+    std::unique_ptr<base::ListValue> nodes) {
   base::FundamentalValue id(request_id);
   web_ui()->CallJavascriptFunction(
       sync_driver::sync_ui_util::kGetAllNodesCallback, id, *nodes);
@@ -162,7 +162,7 @@
 
 void SyncInternalsMessageHandler::OnProtocolEvent(
     const syncer::ProtocolEvent& event) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       syncer::ProtocolEvent::ToValue(event));
   web_ui()->CallJavascriptFunction(
       sync_driver::sync_ui_util::kDispatchEvent,
@@ -193,8 +193,8 @@
 void SyncInternalsMessageHandler::EmitCounterUpdate(
     syncer::ModelType type,
     const std::string& counter_type,
-    scoped_ptr<base::DictionaryValue> value) {
-  scoped_ptr<base::DictionaryValue> details(new base::DictionaryValue());
+    std::unique_ptr<base::DictionaryValue> value) {
+  std::unique_ptr<base::DictionaryValue> details(new base::DictionaryValue());
   details->SetString(sync_driver::sync_ui_util::kModelType,
                      ModelTypeToString(type));
   details->SetString(sync_driver::sync_ui_util::kCounterType, counter_type);
@@ -219,7 +219,7 @@
   SigninManager* signin_manager =
       ios::SigninManagerFactory::GetForBrowserState(browser_state);
   sync_driver::SyncService* sync_service = GetSyncService();
-  scoped_ptr<base::DictionaryValue> value =
+  std::unique_ptr<base::DictionaryValue> value =
       sync_driver::sync_ui_util::ConstructAboutInformation(
           sync_service, signin_manager, GetChannel());
   web_ui()->CallJavascriptFunction(
diff --git a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.h b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.h
index 40c5f89..6ff02ee 100644
--- a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.h
+++ b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_UI_WEBUI_SYNC_INTERNALS_SYNC_INTERNALS_MESSAGE_HANDLER_H_
 #define IOS_CHROME_BROWSER_UI_WEBUI_SYNC_INTERNALS_SYNC_INTERNALS_MESSAGE_HANDLER_H_
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
@@ -52,7 +53,8 @@
                      const syncer::JsEventDetails& details) override;
 
   // Callback used in GetAllNodes.
-  void OnReceivedAllNodes(int request_id, scoped_ptr<base::ListValue> nodes);
+  void OnReceivedAllNodes(int request_id,
+                          std::unique_ptr<base::ListValue> nodes);
 
   // sync_driver::SyncServiceObserver implementation.
   void OnStateChanged() override;
@@ -75,7 +77,7 @@
   // counter type.
   void EmitCounterUpdate(syncer::ModelType type,
                          const std::string& counter_type,
-                         scoped_ptr<base::DictionaryValue> value);
+                         std::unique_ptr<base::DictionaryValue> value);
 
  private:
   // Fetches updated aboutInfo and sends it to the page in the form of an
diff --git a/ios/chrome/browser/ui/webui/version_handler.cc b/ios/chrome/browser/ui/webui/version_handler.cc
index 9dd03a15..ba654cf 100644
--- a/ios/chrome/browser/ui/webui/version_handler.cc
+++ b/ios/chrome/browser/ui/webui/version_handler.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/values.h"
 #include "components/version_ui/version_handler_helper.h"
 #include "components/version_ui/version_ui_constants.h"
diff --git a/ios/chrome/browser/undo/bookmark_undo_service_factory.cc b/ios/chrome/browser/undo/bookmark_undo_service_factory.cc
index f08731d..b500a4a 100644
--- a/ios/chrome/browser/undo/bookmark_undo_service_factory.cc
+++ b/ios/chrome/browser/undo/bookmark_undo_service_factory.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/ios/browser_state_dependency_manager.h"
 #include "components/undo/bookmark_undo_service.h"
@@ -39,9 +40,10 @@
 BookmarkUndoServiceFactory::~BookmarkUndoServiceFactory() {
 }
 
-scoped_ptr<KeyedService> BookmarkUndoServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService>
+BookmarkUndoServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
-  return make_scoped_ptr(new BookmarkUndoService);
+  return base::WrapUnique(new BookmarkUndoService);
 }
 
 }  // namespace ios
diff --git a/ios/chrome/browser/undo/bookmark_undo_service_factory.h b/ios/chrome/browser/undo/bookmark_undo_service_factory.h
index cbd569cb..0427de4 100644
--- a/ios/chrome/browser/undo/bookmark_undo_service_factory.h
+++ b/ios/chrome/browser/undo/bookmark_undo_service_factory.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_BROWSER_UNDO_BOOKMARK_UNDO_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_UNDO_BOOKMARK_UNDO_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -37,7 +38,7 @@
   ~BookmarkUndoServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(BookmarkUndoServiceFactory);
diff --git a/ios/chrome/browser/updatable_config/updatable_config_base.mm b/ios/chrome/browser/updatable_config/updatable_config_base.mm
index f6c4cfd..3c0b809 100644
--- a/ios/chrome/browser/updatable_config/updatable_config_base.mm
+++ b/ios/chrome/browser/updatable_config/updatable_config_base.mm
@@ -6,11 +6,12 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/logging.h"
 #import "base/mac/bind_objc_block.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/updatable_resource_provider.h"
 #include "ios/web/public/web_thread.h"
@@ -97,14 +98,14 @@
  private:
   UpdatableConfigBase* owner_;
   id<UpdatableResourceDescriptorBridge> descriptor_;
-  scoped_ptr<net::URLFetcher> fetcher_;
+  std::unique_ptr<net::URLFetcher> fetcher_;
 };
 
 }  // namespace
 
 @implementation UpdatableConfigBase {
   base::scoped_nsprotocol<id<UpdatableResourceBridge>> _updatableResource;
-  scoped_ptr<ConfigFetcher> _configFetcher;
+  std::unique_ptr<ConfigFetcher> _configFetcher;
   scoped_refptr<net::URLRequestContextGetter> _requestContextGetter;
 }
 
diff --git a/ios/chrome/browser/web_data_service_factory.cc b/ios/chrome/browser/web_data_service_factory.cc
index a070cd0f..b49f331 100644
--- a/ios/chrome/browser/web_data_service_factory.cc
+++ b/ios/chrome/browser/web_data_service_factory.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/singleton.h"
 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
 #include "components/keyed_service/core/service_access_type.h"
@@ -93,10 +94,10 @@
 WebDataServiceFactory::~WebDataServiceFactory() {
 }
 
-scoped_ptr<KeyedService> WebDataServiceFactory::BuildServiceInstanceFor(
+std::unique_ptr<KeyedService> WebDataServiceFactory::BuildServiceInstanceFor(
     web::BrowserState* context) const {
   const base::FilePath& browser_state_path = context->GetStatePath();
-  return make_scoped_ptr(new WebDataServiceWrapper(
+  return base::WrapUnique(new WebDataServiceWrapper(
       browser_state_path, GetApplicationContext()->GetApplicationLocale(),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::UI),
       web::WebThread::GetTaskRunnerForThread(web::WebThread::DB),
diff --git a/ios/chrome/browser/web_data_service_factory.h b/ios/chrome/browser/web_data_service_factory.h
index fee7432..99801be 100644
--- a/ios/chrome/browser/web_data_service_factory.h
+++ b/ios/chrome/browser/web_data_service_factory.h
@@ -5,9 +5,10 @@
 #ifndef IOS_CHROME_BROWSER_WEB_DATA_SERVICE_FACTORY_H_
 #define IOS_CHROME_BROWSER_WEB_DATA_SERVICE_FACTORY_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
 
 namespace base {
@@ -64,7 +65,7 @@
   ~WebDataServiceFactory() override;
 
   // BrowserStateKeyedServiceFactory implementation.
-  scoped_ptr<KeyedService> BuildServiceInstanceFor(
+  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
       web::BrowserState* context) const override;
   web::BrowserState* GetBrowserStateToUse(
       web::BrowserState* context) const override;
diff --git a/ios/chrome/browser/web_resource/web_resource_util.cc b/ios/chrome/browser/web_resource/web_resource_util.cc
index cceb553..f759da2 100644
--- a/ios/chrome/browser/web_resource/web_resource_util.cc
+++ b/ios/chrome/browser/web_resource/web_resource_util.cc
@@ -42,7 +42,7 @@
     return;
   }
 
-  scoped_ptr<base::Value> value(base::JSONReader::Read(data));
+  std::unique_ptr<base::Value> value(base::JSONReader::Read(data));
   if (!value.get()) {
     // Page information not properly read, or corrupted.
     PostErrorTask(task_runner, error_callback, kInvalidDataTypeError);
diff --git a/ios/chrome/browser/web_resource/web_resource_util_unittest.cc b/ios/chrome/browser/web_resource/web_resource_util_unittest.cc
index b01f6d9..15293a8 100644
--- a/ios/chrome/browser/web_resource/web_resource_util_unittest.cc
+++ b/ios/chrome/browser/web_resource/web_resource_util_unittest.cc
@@ -33,7 +33,7 @@
   }
 
   // Called on success.
-  void OnParseSuccess(scoped_ptr<base::Value> value) {
+  void OnParseSuccess(std::unique_ptr<base::Value> value) {
     success_called_ = true;
     value_ = std::move(value);
   }
@@ -56,7 +56,7 @@
 
   base::MessageLoop loop_;
   std::string error_;
-  scoped_ptr<base::Value> value_;
+  std::unique_ptr<base::Value> value_;
   bool error_called_;
   bool success_called_;
 };
diff --git a/ios/chrome/ios_chrome.gyp b/ios/chrome/ios_chrome.gyp
index ac2fe3a..e054957 100644
--- a/ios/chrome/ios_chrome.gyp
+++ b/ios/chrome/ios_chrome.gyp
@@ -682,28 +682,6 @@
             'ios_chrome_browser_rlz',
           ],
         }],
-        ['safe_browsing!=0', {
-          'sources': [
-            'browser/safe_browsing/hit_report.cc',
-            'browser/safe_browsing/hit_report.h',
-            'browser/safe_browsing/ping_manager.cc',
-            'browser/safe_browsing/ping_manager.h',
-            'browser/safe_browsing/protocol_manager_helper.cc',
-            'browser/safe_browsing/protocol_manager_helper.h',
-            'browser/safe_browsing/safe_browsing_blocking_page.h',
-            'browser/safe_browsing/safe_browsing_blocking_page.mm',
-            'browser/safe_browsing/safe_browsing_service.cc',
-            'browser/safe_browsing/safe_browsing_service.h',
-            'browser/safe_browsing/ui_manager.h',
-            'browser/safe_browsing/ui_manager.mm',
-            'browser/safe_browsing/util.cc',
-            'browser/safe_browsing/util.h',
-          ],
-          'dependencies': [
-            '../../crypto/crypto.gyp:crypto',
-            'ios_chrome_safe_browsing_proto',
-          ],
-        }]
       ],
       # TODO(crbug.com/569158): Suppresses warnings that are treated as errors
       # when minimum iOS version support is increased to iOS 9 and up.
@@ -877,20 +855,5 @@
         },
       ],
     }],
-    ['safe_browsing!=0', {
-      'targets': [
-        {
-          # GN version: //ios/chrome/browser/safe_browsing:proto
-          'target_name': 'ios_chrome_safe_browsing_proto',
-          'type': 'static_library',
-          'sources': [ 'browser/safe_browsing/metadata.proto' ],
-          'variables': {
-            'proto_in_dir': 'browser/safe_browsing',
-            'proto_out_dir': 'ios/chrome/browser/safe_browsing',
-          },
-          'includes': [ '../../build/protoc.gypi' ],
-        },
-      ],
-    }],
   ],
 }
diff --git a/ios/chrome/ios_chrome_tests.gyp b/ios/chrome/ios_chrome_tests.gyp
index 66bd53b..ab4d86b 100644
--- a/ios/chrome/ios_chrome_tests.gyp
+++ b/ios/chrome/ios_chrome_tests.gyp
@@ -90,13 +90,6 @@
           'includes': [ '../../build/copy_test_data_ios.gypi' ]
         },
       ],
-      'conditions': [
-        ['safe_browsing!=0', {
-          'sources': [
-            'browser/safe_browsing/util_unittest.cc',
-          ],
-        }],
-      ],
       'includes': ['ios_chrome_resources_bundle.gypi'],
     },
     {
diff --git a/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.h b/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.h
index b457384..18b57e58 100644
--- a/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.h
+++ b/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_TEST_IOS_CHROME_SCOPED_TESTING_CHROME_BROWSER_PROVIDER_H_
 #define IOS_CHROME_TEST_IOS_CHROME_SCOPED_TESTING_CHROME_BROWSER_PROVIDER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace ios {
 class ChromeBrowserProvider;
@@ -17,11 +18,11 @@
 class IOSChromeScopedTestingChromeBrowserProvider {
  public:
   explicit IOSChromeScopedTestingChromeBrowserProvider(
-      scoped_ptr<ios::ChromeBrowserProvider> chrome_browser_provider);
+      std::unique_ptr<ios::ChromeBrowserProvider> chrome_browser_provider);
   ~IOSChromeScopedTestingChromeBrowserProvider();
 
  private:
-  scoped_ptr<ios::ChromeBrowserProvider> chrome_browser_provider_;
+  std::unique_ptr<ios::ChromeBrowserProvider> chrome_browser_provider_;
   ios::ChromeBrowserProvider* original_chrome_browser_provider_;
 
   DISALLOW_COPY_AND_ASSIGN(IOSChromeScopedTestingChromeBrowserProvider);
diff --git a/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.mm b/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.mm
index 8d71507..9f87bb4 100644
--- a/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.mm
+++ b/ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_provider.mm
@@ -9,7 +9,7 @@
 
 IOSChromeScopedTestingChromeBrowserProvider::
     IOSChromeScopedTestingChromeBrowserProvider(
-        scoped_ptr<ios::ChromeBrowserProvider> chrome_browser_provider)
+        std::unique_ptr<ios::ChromeBrowserProvider> chrome_browser_provider)
     : chrome_browser_provider_(std::move(chrome_browser_provider)),
       original_chrome_browser_provider_(ios::GetChromeBrowserProvider()) {
   ios::SetChromeBrowserProvider(chrome_browser_provider_.get());
diff --git a/ios/chrome/test/ios_chrome_unit_test_suite.mm b/ios/chrome/test/ios_chrome_unit_test_suite.mm
index 203d2f23..f72ea03 100644
--- a/ios/chrome/test/ios_chrome_unit_test_suite.mm
+++ b/ios/chrome/test/ios_chrome_unit_test_suite.mm
@@ -51,10 +51,10 @@
   }
 
  private:
-  scoped_ptr<web::WebClient> web_client_;
-  scoped_ptr<ios::TestChromeProviderInitializer>
+  std::unique_ptr<web::WebClient> web_client_;
+  std::unique_ptr<ios::TestChromeProviderInitializer>
       test_ios_chrome_provider_initializer_;
-  scoped_ptr<ApplicationContext> application_context_;
+  std::unique_ptr<ApplicationContext> application_context_;
   DISALLOW_COPY_AND_ASSIGN(IOSChromeUnitTestSuiteInitializer);
 };
 
diff --git a/ios/chrome/test/testing_application_context.h b/ios/chrome/test/testing_application_context.h
index be61a58..506e520 100644
--- a/ios/chrome/test/testing_application_context.h
+++ b/ios/chrome/test/testing_application_context.h
@@ -5,8 +5,9 @@
 #ifndef IOS_CHROME_TEST_TESTING_APPLICATION_CONTEXT_H_
 #define IOS_CHROME_TEST_TESTING_APPLICATION_CONTEXT_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "ios/chrome/browser/application_context.h"
 
@@ -49,14 +50,13 @@
   component_updater::ComponentUpdateService* GetComponentUpdateService()
       override;
   CRLSetFetcher* GetCRLSetFetcher() override;
-  safe_browsing::SafeBrowsingService* GetSafeBrowsingService() override;
 
  private:
   base::ThreadChecker thread_checker_;
   std::string application_locale_;
   PrefService* local_state_;
   ios::ChromeBrowserStateManager* chrome_browser_state_manager_;
-  scoped_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
+  std::unique_ptr<network_time::NetworkTimeTracker> network_time_tracker_;
   bool was_last_shutdown_clean_;
 
   DISALLOW_COPY_AND_ASSIGN(TestingApplicationContext);
diff --git a/ios/chrome/test/testing_application_context.mm b/ios/chrome/test/testing_application_context.mm
index e2372bc..0bf790e5 100644
--- a/ios/chrome/test/testing_application_context.mm
+++ b/ios/chrome/test/testing_application_context.mm
@@ -5,6 +5,7 @@
 #include "ios/chrome/test/testing_application_context.h"
 
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/time/default_clock.h"
 #include "base/time/default_tick_clock.h"
 #include "components/network_time/network_time_tracker.h"
@@ -125,8 +126,8 @@
   if (!network_time_tracker_) {
     DCHECK(local_state_);
     network_time_tracker_.reset(new network_time::NetworkTimeTracker(
-        make_scoped_ptr(new base::DefaultClock),
-        make_scoped_ptr(new base::DefaultTickClock), local_state_));
+        base::WrapUnique(new base::DefaultClock),
+        base::WrapUnique(new base::DefaultTickClock), local_state_));
   }
   return network_time_tracker_.get();
 }
@@ -157,9 +158,3 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   return nullptr;
 }
-
-safe_browsing::SafeBrowsingService*
-TestingApplicationContext::GetSafeBrowsingService() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  return nullptr;
-}
diff --git a/ios/chrome/tools/strings/generate_localizable_strings.mm b/ios/chrome/tools/strings/generate_localizable_strings.mm
index 0352f9e..95e733f 100644
--- a/ios/chrome/tools/strings/generate_localizable_strings.mm
+++ b/ios/chrome/tools/strings/generate_localizable_strings.mm
@@ -41,9 +41,10 @@
 
 // Load the packed resource data pack for |locale| from |packed_data_pack_dir|.
 // If loading fails, null is returned.
-scoped_ptr<ui::DataPack> LoadResourceDataPack(NSString* packed_data_pack_dir,
-                                              NSString* locale_name) {
-  scoped_ptr<ui::DataPack> resource_data_pack;
+std::unique_ptr<ui::DataPack> LoadResourceDataPack(
+    NSString* packed_data_pack_dir,
+    NSString* locale_name) {
+  std::unique_ptr<ui::DataPack> resource_data_pack;
   NSString* resource_path =
       [NSString stringWithFormat:@"%@/%@.lproj/locale.pak",
                                  packed_data_pack_dir, locale_name];
@@ -336,7 +337,7 @@
   }
 
   for (NSString* locale in locales) {
-    scoped_ptr<ui::DataPack> data_pack =
+    std::unique_ptr<ui::DataPack> data_pack =
         LoadResourceDataPack(data_pack_dir, locale);
     if (!data_pack) {
       fprintf(stderr, "ERROR: Failed to load branded pak for language: %s\n",
diff --git a/ios/crnet/crnet_environment.h b/ios/crnet/crnet_environment.h
index 5a698897..34dd2f8f 100644
--- a/ios/crnet/crnet_environment.h
+++ b/ios/crnet/crnet_environment.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CRNET_CRNET_ENVIRONMENT_H_
 #define IOS_CRNET_CRNET_ENVIRONMENT_H_
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
@@ -138,24 +140,25 @@
   std::string sdch_pref_store_filename_;
 
   static CrNetEnvironment* chrome_net_;
-  scoped_ptr<base::Thread> network_io_thread_;
-  scoped_ptr<base::Thread> network_cache_thread_;
-  scoped_ptr<base::Thread> file_thread_;
-  scoped_ptr<base::Thread> file_user_blocking_thread_;
-  scoped_ptr<net::SdchManager> sdch_manager_;
-  scoped_ptr<net::SdchOwner> sdch_owner_;
+  std::unique_ptr<base::Thread> network_io_thread_;
+  std::unique_ptr<base::Thread> network_cache_thread_;
+  std::unique_ptr<base::Thread> file_thread_;
+  std::unique_ptr<base::Thread> file_user_blocking_thread_;
+  std::unique_ptr<net::SdchManager> sdch_manager_;
+  std::unique_ptr<net::SdchOwner> sdch_owner_;
   scoped_refptr<base::SequencedTaskRunner> pref_store_worker_pool_;
   scoped_refptr<JsonPrefStore> net_pref_store_;
-  scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
-  scoped_ptr<net::ProxyConfigService> proxy_config_service_;
-  scoped_ptr<net::HttpServerProperties> http_server_properties_;
-  scoped_ptr<net::CookieStore> cookie_store_;
+  std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_;
+  std::unique_ptr<net::ProxyConfigService> proxy_config_service_;
+  std::unique_ptr<net::HttpServerProperties> http_server_properties_;
+  std::unique_ptr<net::CookieStore> cookie_store_;
   scoped_refptr<net::URLRequestContextGetter> main_context_getter_;
-  scoped_ptr<net::URLRequestContext> main_context_;
-  scoped_ptr<CrNetHttpProtocolHandlerDelegate> http_protocol_handler_delegate_;
+  std::unique_ptr<net::URLRequestContext> main_context_;
+  std::unique_ptr<CrNetHttpProtocolHandlerDelegate>
+      http_protocol_handler_delegate_;
   std::string user_agent_product_name_;
-  scoped_ptr<net::NetLog> net_log_;
-  scoped_ptr<net::WriteToFileNetLogObserver> net_log_observer_;
+  std::unique_ptr<net::NetLog> net_log_;
+  std::unique_ptr<net::WriteToFileNetLogObserver> net_log_observer_;
 
   DISALLOW_COPY_AND_ASSIGN(CrNetEnvironment);
 };
diff --git a/ios/crnet/crnet_environment.mm b/ios/crnet/crnet_environment.mm
index 7f2428f..b564111 100644
--- a/ios/crnet/crnet_environment.mm
+++ b/ios/crnet/crnet_environment.mm
@@ -20,6 +20,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_block.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/statistics_recorder.h"
 #include "base/path_service.h"
 #include "base/threading/worker_pool.h"
@@ -352,13 +353,11 @@
   if (!sdch_pref_store_filename_.empty()) {
     base::FilePath path(sdch_pref_store_filename_);
     pref_store_worker_pool_ = file_user_blocking_thread_->task_runner();
-    net_pref_store_ = new JsonPrefStore(
-        path,
-        pref_store_worker_pool_.get(),
-        scoped_ptr<PrefFilter>());
+    net_pref_store_ = new JsonPrefStore(path, pref_store_worker_pool_.get(),
+                                        std::unique_ptr<PrefFilter>());
     net_pref_store_->ReadPrefsAsync(nullptr);
     sdch_owner_->EnablePersistentStorage(
-        scoped_ptr<net::SdchOwner::PrefStorage>(
+        std::unique_ptr<net::SdchOwner::PrefStorage>(
             new SdchOwnerPrefStorage(net_pref_store_.get())));
   }
   context->set_sdch_manager(sdch_manager_.get());
@@ -425,7 +424,7 @@
   base::FilePath cache_path =
       base::mac::NSStringToFilePath([dirs objectAtIndex:0]);
   cache_path = cache_path.Append(FILE_PATH_LITERAL("crnet"));
-  scoped_ptr<net::HttpCache::DefaultBackend> main_backend(
+  std::unique_ptr<net::HttpCache::DefaultBackend> main_backend(
       new net::HttpCache::DefaultBackend(net::DISK_CACHE,
                                          net::CACHE_BACKEND_DEFAULT, cache_path,
                                          0,  // Default cache size.
@@ -473,9 +472,9 @@
   net::URLRequestJobFactoryImpl* job_factory =
       new net::URLRequestJobFactoryImpl;
   job_factory->SetProtocolHandler(
-      "data", make_scoped_ptr(new net::DataProtocolHandler));
+      "data", base::WrapUnique(new net::DataProtocolHandler));
   job_factory->SetProtocolHandler(
-      "file", make_scoped_ptr(
+      "file", base::WrapUnique(
                   new net::FileProtocolHandler(file_thread_->task_runner())));
   main_context_->set_job_factory(job_factory);
 
diff --git a/ios/crnet/sdch_owner_pref_storage.cc b/ios/crnet/sdch_owner_pref_storage.cc
index 3af81f5..292eaa24 100644
--- a/ios/crnet/sdch_owner_pref_storage.cc
+++ b/ios/crnet/sdch_owner_pref_storage.cc
@@ -72,7 +72,8 @@
   return result_value->GetAsDictionary(result);
 }
 
-void SdchOwnerPrefStorage::SetValue(scoped_ptr<base::DictionaryValue> value) {
+void SdchOwnerPrefStorage::SetValue(
+    std::unique_ptr<base::DictionaryValue> value) {
   storage_->SetValue(storage_key_, std::move(value),
                      WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
 }
diff --git a/ios/crnet/sdch_owner_pref_storage.h b/ios/crnet/sdch_owner_pref_storage.h
index fbb177e..5ecaf1e 100644
--- a/ios/crnet/sdch_owner_pref_storage.h
+++ b/ios/crnet/sdch_owner_pref_storage.h
@@ -5,6 +5,8 @@
 #ifndef IOS_CRNET_SDCH_OWNER_PREF_STORAGE_H_
 #define IOS_CRNET_SDCH_OWNER_PREF_STORAGE_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "components/prefs/pref_store.h"
 #include "net/sdch/sdch_owner.h"
@@ -24,7 +26,7 @@
   ReadError GetReadError() const override;
   bool GetValue(const base::DictionaryValue** result) const override;
   bool GetMutableValue(base::DictionaryValue** result) override;
-  void SetValue(scoped_ptr<base::DictionaryValue> value) override;
+  void SetValue(std::unique_ptr<base::DictionaryValue> value) override;
   void ReportValueChanged() override;
   bool IsInitializationComplete() override;
   void StartObservingInit(net::SdchOwner* observer) override;
diff --git a/ios/net/clients/crn_network_client_protocol.h b/ios/net/clients/crn_network_client_protocol.h
index d000789..b8142ab 100644
--- a/ios/net/clients/crn_network_client_protocol.h
+++ b/ios/net/clients/crn_network_client_protocol.h
@@ -8,7 +8,6 @@
 #import <Foundation/Foundation.h>
 
 #include "base/callback_forward.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string_util.h"
 
 namespace net {
diff --git a/ios/net/cookies/cookie_store_ios.h b/ios/net/cookies/cookie_store_ios.h
index 4a08929d..ee2f678 100644
--- a/ios/net/cookies/cookie_store_ios.h
+++ b/ios/net/cookies/cookie_store_ios.h
@@ -6,6 +6,7 @@
 #define IOS_NET_COOKIES_COOKIE_STORE_IOS_H_
 
 #include <map>
+#include <memory>
 #include <string>
 #include <utility>
 #include <vector>
@@ -14,7 +15,6 @@
 #include "base/cancelable_callback.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
@@ -88,7 +88,7 @@
   // as its default backend and is initially synchronized with it.
   // Apple does not persist the cookies' creation dates in NSHTTPCookieStorage,
   // so callers should not expect these values to be populated.
-  static scoped_ptr<CookieStoreIOS> CreateCookieStore(
+  static std::unique_ptr<CookieStoreIOS> CreateCookieStore(
       NSHTTPCookieStorage* cookie_storage);
 
   // As there is only one system store, only one CookieStoreIOS at a time may
@@ -157,7 +157,7 @@
   void DeleteSessionCookiesAsync(const DeleteCallback& callback) override;
   void FlushStore(const base::Closure& callback) override;
 
-  scoped_ptr<CookieChangedSubscription> AddCallbackForCookie(
+  std::unique_ptr<CookieChangedSubscription> AddCallbackForCookie(
       const GURL& url,
       const std::string& name,
       const CookieChangedCallback& callback) override;
@@ -204,9 +204,9 @@
   void DeleteCookiesWithFilter(const CookieFilterFunction& filter,
                                const DeleteCallback& callback);
 
-  scoped_ptr<net::CookieMonster> cookie_monster_;
+  std::unique_ptr<net::CookieMonster> cookie_monster_;
   base::scoped_nsobject<NSHTTPCookieStorage> system_store_;
-  scoped_ptr<CookieCreationTimeManager> creation_time_manager_;
+  std::unique_ptr<CookieCreationTimeManager> creation_time_manager_;
   bool metrics_enabled_;
   base::TimeDelta flush_delay_;
   base::CancelableClosure flush_closure_;
@@ -321,7 +321,7 @@
 
   // Cached values of system cookies. Only cookies which have an observer added
   // with AddCallbackForCookie are kept in this cache.
-  scoped_ptr<CookieCache> cookie_cache_;
+  std::unique_ptr<CookieCache> cookie_cache_;
 
   // Callbacks for cookie changes installed by AddCallbackForCookie.
   typedef std::map<std::pair<GURL, std::string>, CookieChangedCallbackList*>
diff --git a/ios/net/cookies/cookie_store_ios.mm b/ios/net/cookies/cookie_store_ios.mm
index 78fb510f..84e687dc 100644
--- a/ios/net/cookies/cookie_store_ios.mm
+++ b/ios/net/cookies/cookie_store_ios.mm
@@ -327,7 +327,7 @@
 }
 
 // static
-scoped_ptr<CookieStoreIOS> CookieStoreIOS::CreateCookieStore(
+std::unique_ptr<CookieStoreIOS> CookieStoreIOS::CreateCookieStore(
     NSHTTPCookieStorage* cookie_storage) {
   DCHECK(cookie_storage);
   // TODO(huey): Update this when CrNet supports multiple cookie jars.
@@ -335,7 +335,7 @@
 
   // Create a cookie store with no persistent store backing. Then, populate
   // it from the system's cookie jar.
-  scoped_ptr<CookieStoreIOS> cookie_store(
+  std::unique_ptr<CookieStoreIOS> cookie_store(
       new CookieStoreIOS(nullptr, cookie_storage));
   cookie_store->synchronization_state_ = SYNCHRONIZED;
   cookie_store->FlushStore(base::Closure());
@@ -482,11 +482,10 @@
 
       // First create a CanonicalCookie, to normalize the arguments,
       // particularly domain and path, and perform validation.
-      scoped_ptr<net::CanonicalCookie> canonical_cookie =
+      std::unique_ptr<net::CanonicalCookie> canonical_cookie =
           net::CanonicalCookie::Create(
               url, name, value, domain, path, creation_time, expiration_time,
-              secure, http_only, same_site, enforce_strict_secure,
-              priority);
+              secure, http_only, same_site, enforce_strict_secure, priority);
 
       if (canonical_cookie) {
         NSHTTPCookie* cookie =
@@ -981,7 +980,7 @@
       FROM_HERE, flush_closure_.callback(), flush_delay_);
 }
 
-scoped_ptr<net::CookieStore::CookieChangedSubscription>
+std::unique_ptr<net::CookieStore::CookieChangedSubscription>
 CookieStoreIOS::AddCallbackForCookie(const GURL& gurl,
                                      const std::string& name,
                                      const CookieChangedCallback& callback) {
diff --git a/ios/net/cookies/cookie_store_ios_unittest.mm b/ios/net/cookies/cookie_store_ios_unittest.mm
index af2c94e..f5cd3c1 100644
--- a/ios/net/cookies/cookie_store_ios_unittest.mm
+++ b/ios/net/cookies/cookie_store_ios_unittest.mm
@@ -6,9 +6,11 @@
 
 #import <Foundation/Foundation.h>
 
+#include <memory>
+
 #include "base/bind_helpers.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/sys_string_conversions.h"
 #import "net/base/mac/url_conversions.h"
@@ -30,9 +32,9 @@
 namespace net {
 
 struct CookieStoreIOSTestTraits {
-  static scoped_ptr<net::CookieStore> Create() {
+  static std::unique_ptr<net::CookieStore> Create() {
     ClearCookies();
-    scoped_ptr<CookieStoreIOS> store(new CookieStoreIOS(nullptr));
+    std::unique_ptr<CookieStoreIOS> store(new CookieStoreIOS(nullptr));
     store->synchronization_state_ = CookieStoreIOS::SYNCHRONIZED;
     return std::move(store);
   }
@@ -49,8 +51,8 @@
 };
 
 struct InactiveCookieStoreIOSTestTraits {
-  static scoped_ptr<net::CookieStore> Create() {
-    return make_scoped_ptr(new CookieStoreIOS(nullptr));
+  static std::unique_ptr<net::CookieStore> Create() {
+    return base::WrapUnique(new CookieStoreIOS(nullptr));
   }
 
   static const bool is_cookie_monster = false;
@@ -172,11 +174,11 @@
     store_->FlushStore(callback);
   }
 
-  scoped_ptr<CookieStore::CookieChangedSubscription> AddCallbackForCookie(
+  std::unique_ptr<CookieStore::CookieChangedSubscription> AddCallbackForCookie(
       const GURL& url,
       const std::string& name,
       const CookieChangedCallback& callback) override {
-    return scoped_ptr<CookieStore::CookieChangedSubscription>();
+    return std::unique_ptr<CookieStore::CookieChangedSubscription>();
   }
 
   bool IsEphemeral() override {
@@ -193,16 +195,16 @@
     CookieStoreIOS::SwitchSynchronizedStore(dummy_store_.get(), store_.get());
   }
 
-  scoped_ptr<CookieStoreIOS> store_;
+  std::unique_ptr<CookieStoreIOS> store_;
   // |dummy_store_| is not directly used, but is needed to make |store_|
   // inactive.
-  scoped_ptr<CookieStoreIOS> dummy_store_;
+  std::unique_ptr<CookieStoreIOS> dummy_store_;
 };
 
 struct RoundTripTestCookieStoreTraits {
-  static scoped_ptr<net::CookieStore> Create() {
+  static std::unique_ptr<net::CookieStore> Create() {
     ClearCookies();
-    return make_scoped_ptr(new RoundTripTestCookieStore());
+    return base::WrapUnique(new RoundTripTestCookieStore());
   }
 
   static const bool is_cookie_monster = false;
@@ -250,7 +252,7 @@
     net::CookieOptions options;
     options.set_include_httponly();
 
-    scoped_ptr<net::CanonicalCookie> cookie(net::CanonicalCookie::Create(
+    std::unique_ptr<net::CanonicalCookie> cookie(net::CanonicalCookie::Create(
         kTestCookieURL, "a=b", base::Time::Now(), options));
     cookies.push_back(cookie.release());
 
@@ -433,8 +435,8 @@
 
   base::MessageLoop loop_;
   scoped_refptr<TestPersistentCookieStore> backend_;
-  scoped_ptr<net::CookieStoreIOS> store_;
-  scoped_ptr<net::CookieStore::CookieChangedSubscription>
+  std::unique_ptr<net::CookieStoreIOS> store_;
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription>
       cookie_changed_callback_;
   std::vector<net::CanonicalCookie> cookies_changed_;
   std::vector<bool> cookies_removed_;
@@ -533,7 +535,7 @@
   base::MessageLoop loop;
   const GURL kTestCookieURL("http://foo.google.com/bar");
   ClearCookies();
-  scoped_ptr<CookieStoreIOS> cookie_store(new CookieStoreIOS(nullptr));
+  std::unique_ptr<CookieStoreIOS> cookie_store(new CookieStoreIOS(nullptr));
   CookieStoreIOS::SwitchSynchronizedStore(nullptr, cookie_store.get());
   // Add a cookie.
   net::CookieOptions options;
@@ -611,7 +613,7 @@
 // unsynchronized while synchronization is in progress).
 TEST_F(CookieStoreIOSWithBackend, SyncThenUnsync) {
   ClearCookies();
-  scoped_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr));
+  std::unique_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr));
   // Switch back and forth before synchronization can complete.
   CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get());
   CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get());
@@ -632,7 +634,7 @@
 // and there are pending tasks).
 TEST_F(CookieStoreIOSWithBackend, SyncThenUnsyncWithPendingTasks) {
   ClearCookies();
-  scoped_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr));
+  std::unique_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr));
   // Start synchornization.
   CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get());
   // Create a pending task while synchronization is in progress.
@@ -730,7 +732,7 @@
 }
 
 TEST_F(CookieStoreIOSWithBackend, FlushOnSwitch) {
-  scoped_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr));
+  std::unique_ptr<CookieStoreIOS> dummy_store(new CookieStoreIOS(nullptr));
   CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get());
   EXPECT_FALSE(backend_->flushed());
   CookieStoreIOS::SwitchSynchronizedStore(store_.get(), dummy_store.get());
@@ -801,7 +803,7 @@
   backend_->RunLoadedCallback();
   std::vector<net::CanonicalCookie> cookies;
   std::vector<bool> removes;
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL, "abc",
           base::Bind(&RecordCookieChanges, &cookies, &removes));
@@ -828,7 +830,7 @@
   backend_->RunLoadedCallback();
   std::vector<net::CanonicalCookie> cookies;
   std::vector<bool> removes;
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL, "abc",
           base::Bind(&RecordCookieChanges, &cookies, &removes));
@@ -855,7 +857,7 @@
   std::vector<net::CanonicalCookie> cookies;
   std::vector<bool> removes;
   SetSystemCookie(kTestCookieURL, "abc", "def");
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL, "abc",
           base::Bind(&RecordCookieChanges, &cookies, &removes));
@@ -876,7 +878,7 @@
   CookieStoreIOS::SwitchSynchronizedStore(nullptr, store_.get());
   backend_->RunLoadedCallback();
   std::vector<net::CanonicalCookie> cookies;
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL, "abc",
           base::Bind(&RecordCookieChanges, &cookies, nullptr));
@@ -896,19 +898,19 @@
   std::vector<net::CanonicalCookie> cookies2;
   std::vector<net::CanonicalCookie> cookies3;
   std::vector<net::CanonicalCookie> cookies4;
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL, "abc",
           base::Bind(&RecordCookieChanges, &cookies, nullptr));
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle2 =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle2 =
       store_->AddCallbackForCookie(
           kTestCookieURL2, "abc",
           base::Bind(&RecordCookieChanges, &cookies2, nullptr));
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle3 =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle3 =
       store_->AddCallbackForCookie(
           kTestCookieURL3, "abc",
           base::Bind(&RecordCookieChanges, &cookies3, nullptr));
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle4 =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle4 =
       store_->AddCallbackForCookie(
           kTestCookieURL4, "abc",
           base::Bind(&RecordCookieChanges, &cookies4, nullptr));
@@ -932,7 +934,7 @@
   backend_->RunLoadedCallback();
   std::vector<net::CanonicalCookie> cookies;
   SetSystemCookie(kTestCookieURL2, "abc", "def");
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL2, "abc",
           base::Bind(&RecordCookieChanges, &cookies, nullptr));
@@ -948,7 +950,7 @@
   backend_->RunLoadedCallback();
   std::vector<net::CanonicalCookie> cookies;
   SetSystemCookie(kTestCookieURL3, "abc", "def");
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL2, "abc",
           base::Bind(&RecordCookieChanges, &cookies, nullptr));
@@ -964,7 +966,7 @@
   backend_->RunLoadedCallback();
   std::vector<net::CanonicalCookie> cookies;
   SetSystemCookie(kTestCookieURL3, "abc", "def");
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL2, "abc",
           base::Bind(&RecordCookieChanges, &cookies, nullptr));
@@ -980,7 +982,7 @@
   backend_->RunLoadedCallback();
   std::vector<net::CanonicalCookie> cookies;
   SetSystemCookie(kTestCookieURL, "abc", "def");
-  scoped_ptr<net::CookieStore::CookieChangedSubscription> handle =
+  std::unique_ptr<net::CookieStore::CookieChangedSubscription> handle =
       store_->AddCallbackForCookie(
           kTestCookieURL, "abc",
           base::Bind(&RecordCookieChanges, &cookies, nullptr));
diff --git a/ios/net/crn_http_protocol_handler.mm b/ios/net/crn_http_protocol_handler.mm
index 477eb13..845d19c 100644
--- a/ios/net/crn_http_protocol_handler.mm
+++ b/ios/net/crn_http_protocol_handler.mm
@@ -6,6 +6,7 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <utility>
 #include <vector>
 
@@ -14,8 +15,8 @@
 #include "base/mac/bind_objc_block.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
@@ -199,7 +200,7 @@
   // Stream delegate to read the HTTPBodyStream.
   base::scoped_nsobject<CRWHTTPStreamDelegate> stream_delegate_;
   // Vector of readers used to accumulate a POST data stream.
-  std::vector<scoped_ptr<UploadElementReader>> post_data_readers_;
+  std::vector<std::unique_ptr<UploadElementReader>> post_data_readers_;
 
   // This cannot be a scoped pointer because it must be deleted on the IO
   // thread.
@@ -243,7 +244,7 @@
       if (!post_data_readers_.empty()) {
         // NOTE: This call will result in |post_data_readers_| being cleared,
         // which is the desired behavior.
-        net_request_->set_upload(make_scoped_ptr(
+        net_request_->set_upload(base::WrapUnique(
             new ElementsUploadDataStream(std::move(post_data_readers_), 0)));
         DCHECK(post_data_readers_.empty());
       }
@@ -259,7 +260,7 @@
       if (length) {
         std::vector<char> owned_data(buffer_->data(), buffer_->data() + length);
         post_data_readers_.push_back(
-            make_scoped_ptr(new UploadOwnedBytesElementReader(&owned_data)));
+            base::WrapUnique(new UploadOwnedBytesElementReader(&owned_data)));
       }
       break;
     }
@@ -721,7 +722,7 @@
   if (body_length > 0) {
     const char* source_bytes = reinterpret_cast<const char*>([body bytes]);
     std::vector<char> owned_data(source_bytes, source_bytes + body_length);
-    scoped_ptr<UploadElementReader> reader(
+    std::unique_ptr<UploadElementReader> reader(
         new UploadOwnedBytesElementReader(&owned_data));
     net_request_->set_upload(
         ElementsUploadDataStream::CreateWithReader(std::move(reader), 0));
diff --git a/ios/net/http_cache_helper.cc b/ios/net/http_cache_helper.cc
index 1702cac..45f86db 100644
--- a/ios/net/http_cache_helper.cc
+++ b/ios/net/http_cache_helper.cc
@@ -30,7 +30,7 @@
 }
 
 // Clears the disk_cache::Backend on the IO thread and deletes |backend|.
-void DoomHttpCache(scoped_ptr<disk_cache::Backend*> backend,
+void DoomHttpCache(std::unique_ptr<disk_cache::Backend*> backend,
                    const scoped_refptr<base::TaskRunner>& client_task_runner,
                    const net::CompletionCallback& callback,
                    int error) {
@@ -66,7 +66,8 @@
   if (sdch_manager)
     sdch_manager->ClearData();
 
-  scoped_ptr<disk_cache::Backend*> backend(new disk_cache::Backend*(nullptr));
+  std::unique_ptr<disk_cache::Backend*> backend(
+      new disk_cache::Backend*(nullptr));
   disk_cache::Backend** backend_ptr = backend.get();
   net::CompletionCallback doom_callback =
       base::Bind(&DoomHttpCache, base::Passed(std::move(backend)),
diff --git a/ios/net/http_response_headers_util.h b/ios/net/http_response_headers_util.h
index 4bc00199..34b5b26 100644
--- a/ios/net/http_response_headers_util.h
+++ b/ios/net/http_response_headers_util.h
@@ -5,7 +5,6 @@
 #ifndef IOS_NET_HTTP_RESPONSE_HEADERS_UTIL_H_
 #define IOS_NET_HTTP_RESPONSE_HEADERS_UTIL_H_
 
-#include "base/memory/scoped_ptr.h"
 #include "net/http/http_response_headers.h"
 
 @class NSHTTPURLResponse;
diff --git a/ios/net/protocol_handler_util_unittest.mm b/ios/net/protocol_handler_util_unittest.mm
index 5e7226fd..eab5338 100644
--- a/ios/net/protocol_handler_util_unittest.mm
+++ b/ios/net/protocol_handler_util_unittest.mm
@@ -4,10 +4,11 @@
 
 #import "ios/net/protocol_handler_util.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/sys_string_conversions.h"
@@ -114,9 +115,9 @@
   ProtocolHandlerUtilTest() : request_context_(new TestURLRequestContext) {
     // Ownership of the protocol handlers is transferred to the factory.
     job_factory_.SetProtocolHandler("http",
-                                    make_scoped_ptr(new NetProtocolHandler));
+                                    base::WrapUnique(new NetProtocolHandler));
     job_factory_.SetProtocolHandler("data",
-                                    make_scoped_ptr(new DataProtocolHandler));
+                                    base::WrapUnique(new DataProtocolHandler));
     request_context_->set_job_factory(&job_factory_);
   }
 
@@ -131,7 +132,7 @@
     url_string += ",";
     GURL url(url_string);
 
-    scoped_ptr<URLRequest> request(
+    std::unique_ptr<URLRequest> request(
         request_context_->CreateRequest(url, DEFAULT_PRIORITY, this));
     request->Start();
     base::RunLoop loop;
@@ -155,7 +156,7 @@
  protected:
   base::MessageLoop loop_;
   URLRequestJobFactoryImpl job_factory_;
-  scoped_ptr<URLRequestContext> request_context_;
+  std::unique_ptr<URLRequestContext> request_context_;
 };
 
 }  // namespace
@@ -173,7 +174,7 @@
 TEST_F(ProtocolHandlerUtilTest, GetResponseHttpTest) {
   // Create a request.
   GURL url(std::string("http://url"));
-  scoped_ptr<URLRequest> request(
+  std::unique_ptr<URLRequest> request(
       request_context_->CreateRequest(url, DEFAULT_PRIORITY, this));
   request->Start();
   // Create a response from the request.
@@ -200,7 +201,7 @@
   // Create a request using the magic domain that triggers a garbage
   // content-type in the test framework.
   GURL url(std::string("http://badcontenttype"));
-  scoped_ptr<URLRequest> request(
+  std::unique_ptr<URLRequest> request(
       request_context_->CreateRequest(url, DEFAULT_PRIORITY, this));
   request->Start();
   // Create a response from the request.
@@ -216,7 +217,7 @@
   // Create a request using the magic domain that triggers a garbage
   // content-type in the test framework.
   GURL url(std::string("http://multiplecontenttype"));
-  scoped_ptr<URLRequest> request(
+  std::unique_ptr<URLRequest> request(
       request_context_->CreateRequest(url, DEFAULT_PRIORITY, this));
   request->Start();
   // Create a response from the request.
@@ -239,7 +240,7 @@
       @"Accept" : @"money/cash",
       @"Foo" : @"bar",
   }];
-  scoped_ptr<URLRequest> out_request(
+  std::unique_ptr<URLRequest> out_request(
       request_context_->CreateRequest(url, DEFAULT_PRIORITY, nullptr));
   CopyHttpHeaders(in_request, out_request.get());
 
@@ -258,10 +259,10 @@
   GURL url(std::string("http://url"));
   base::scoped_nsobject<NSMutableURLRequest> in_request(
       [[NSMutableURLRequest alloc] initWithURL:NSURLWithGURL(url)]);
-  scoped_ptr<URLRequest> out_request(
+  std::unique_ptr<URLRequest> out_request(
       request_context_->CreateRequest(url, DEFAULT_PRIORITY, nullptr));
   out_request->set_method("POST");
-  scoped_ptr<UploadElementReader> reader(
+  std::unique_ptr<UploadElementReader> reader(
       new UploadBytesElementReader(nullptr, 0));
   out_request->set_upload(
       ElementsUploadDataStream::CreateWithReader(std::move(reader), 0));
diff --git a/ios/public/provider/chrome/browser/chrome_browser_provider.h b/ios/public/provider/chrome/browser/chrome_browser_provider.h
index 69daac1..6083525 100644
--- a/ios/public/provider/chrome/browser/chrome_browser_provider.h
+++ b/ios/public/provider/chrome/browser/chrome_browser_provider.h
@@ -7,12 +7,13 @@
 
 #include <CoreGraphics/CoreGraphics.h>
 #include <stddef.h>
+
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/callback_forward.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/favicon_base/favicon_callback.h"
 
 class AutocompleteProvider;
@@ -113,17 +114,9 @@
   // metrics_services_manager_client.h for details on |on_update_callback|.
   virtual bool IsSafeBrowsingEnabled(const base::Closure& on_update_callback);
 
-  // Called when the IOSChromeMetricsServiceClientManager instance is
-  // destroyed.
-  virtual void OnMetricsServicesManagerClientDestroyed();
-
   // Returns the SyncedWindowDelegatesGetter implementation.
-  virtual scoped_ptr<browser_sync::SyncedWindowDelegatesGetter>
+  virtual std::unique_ptr<browser_sync::SyncedWindowDelegatesGetter>
   CreateSyncedWindowDelegatesGetter(ios::ChromeBrowserState* browser_state);
-
-  // Gets the URLRequestContextGetter used by the SafeBrowsing service. Returns
-  // null if there is no SafeBrowsing service.
-  virtual net::URLRequestContextGetter* GetSafeBrowsingURLRequestContext();
 };
 
 }  // namespace ios
diff --git a/ios/public/provider/chrome/browser/chrome_browser_provider.mm b/ios/public/provider/chrome/browser/chrome_browser_provider.mm
index 3254f1f..8d48b480 100644
--- a/ios/public/provider/chrome/browser/chrome_browser_provider.mm
+++ b/ios/public/provider/chrome/browser/chrome_browser_provider.mm
@@ -104,17 +104,10 @@
   return false;
 }
 
-void ChromeBrowserProvider::OnMetricsServicesManagerClientDestroyed() {}
-
-scoped_ptr<browser_sync::SyncedWindowDelegatesGetter>
+std::unique_ptr<browser_sync::SyncedWindowDelegatesGetter>
 ChromeBrowserProvider::CreateSyncedWindowDelegatesGetter(
     ios::ChromeBrowserState* browser_state) {
   return nullptr;
 }
 
-net::URLRequestContextGetter*
-ChromeBrowserProvider::GetSafeBrowsingURLRequestContext() {
-  return nullptr;
-}
-
 }  // namespace ios
diff --git a/ios/public/provider/chrome/browser/test_chrome_browser_provider.h b/ios/public/provider/chrome/browser/test_chrome_browser_provider.h
index 863121f..760d314 100644
--- a/ios/public/provider/chrome/browser/test_chrome_browser_provider.h
+++ b/ios/public/provider/chrome/browser/test_chrome_browser_provider.h
@@ -5,8 +5,9 @@
 #ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_TEST_CHROME_BROWSER_PROVIDER_H_
 #define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_TEST_CHROME_BROWSER_PROVIDER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 
 class FakeProfileOAuth2TokenServiceIOSProvider;
@@ -30,10 +31,11 @@
   UpdatableResourceProvider* GetUpdatableResourceProvider() override;
 
  private:
-  scoped_ptr<FakeProfileOAuth2TokenServiceIOSProvider>
+  std::unique_ptr<FakeProfileOAuth2TokenServiceIOSProvider>
       oauth2_token_service_provider_;
-  scoped_ptr<ChromeIdentityService> chrome_identity_service_;
-  scoped_ptr<TestUpdatableResourceProvider> test_updatable_resource_provider_;
+  std::unique_ptr<ChromeIdentityService> chrome_identity_service_;
+  std::unique_ptr<TestUpdatableResourceProvider>
+      test_updatable_resource_provider_;
 
   DISALLOW_COPY_AND_ASSIGN(TestChromeBrowserProvider);
 };
diff --git a/ios/public/provider/chrome/browser/test_chrome_provider_initializer.h b/ios/public/provider/chrome/browser/test_chrome_provider_initializer.h
index 2f2bb49..c9ef180 100644
--- a/ios/public/provider/chrome/browser/test_chrome_provider_initializer.h
+++ b/ios/public/provider/chrome/browser/test_chrome_provider_initializer.h
@@ -5,8 +5,9 @@
 #ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_TEST_CHROME_PROVIDER_INITIALIZER_H_
 #define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_TEST_CHROME_PROVIDER_INITIALIZER_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace ios {
 
@@ -21,7 +22,7 @@
   virtual ~TestChromeProviderInitializer();
 
  private:
-  scoped_ptr<TestChromeBrowserProvider> chrome_browser_provider_;
+  std::unique_ptr<TestChromeBrowserProvider> chrome_browser_provider_;
 
   DISALLOW_COPY_AND_ASSIGN(TestChromeProviderInitializer);
 };
diff --git a/ios/public/provider/web/web_controller_provider.h b/ios/public/provider/web/web_controller_provider.h
index 0845ad6..1fe9aef 100644
--- a/ios/public/provider/web/web_controller_provider.h
+++ b/ios/public/provider/web/web_controller_provider.h
@@ -5,7 +5,8 @@
 #ifndef IOS_PUBLIC_PROVIDER_WEB_WEB_CONTROLLER_PROVIDER_H_
 #define IOS_PUBLIC_PROVIDER_WEB_WEB_CONTROLLER_PROVIDER_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "ios/web/public/block_types.h"
 #include "ios/web/public/web_state/web_state_observer.h"
 #include "url/gurl.h"
@@ -60,7 +61,7 @@
 
   // Vends WebControllerProviders created using |browser_state|, passing
   // ownership to callers.
-  virtual scoped_ptr<WebControllerProvider> CreateWebControllerProvider(
+  virtual std::unique_ptr<WebControllerProvider> CreateWebControllerProvider(
       web::BrowserState* browser_state);
 };
 
diff --git a/ios/public/provider/web/web_controller_provider.mm b/ios/public/provider/web/web_controller_provider.mm
index 82aa875..70fde98 100644
--- a/ios/public/provider/web/web_controller_provider.mm
+++ b/ios/public/provider/web/web_controller_provider.mm
@@ -43,10 +43,10 @@
 WebControllerProviderFactory::~WebControllerProviderFactory() {
 }
 
-scoped_ptr<WebControllerProvider>
+std::unique_ptr<WebControllerProvider>
 WebControllerProviderFactory::CreateWebControllerProvider(
     web::BrowserState* browser_state) {
-  return scoped_ptr<WebControllerProvider>(
+  return std::unique_ptr<WebControllerProvider>(
       new WebControllerProvider(browser_state));
 }
 
diff --git a/ios/web/active_state_manager_impl_unittest.mm b/ios/web/active_state_manager_impl_unittest.mm
index 110fdb0..8538860 100644
--- a/ios/web/active_state_manager_impl_unittest.mm
+++ b/ios/web/active_state_manager_impl_unittest.mm
@@ -4,7 +4,6 @@
 
 #include "ios/web/active_state_manager_impl.h"
 
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/public/active_state_manager.h"
 #include "ios/web/public/browser_state.h"
 #include "ios/web/public/test/test_browser_state.h"
diff --git a/ios/web/app/web_main_loop.h b/ios/web/app/web_main_loop.h
index 9797cfc..67f0fb5 100644
--- a/ios/web/app/web_main_loop.h
+++ b/ios/web/app/web_main_loop.h
@@ -5,9 +5,10 @@
 #ifndef IOS_WEB_APP_WEB_MAIN_LOOP_H_
 #define IOS_WEB_APP_WEB_MAIN_LOOP_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace base {
 class CommandLine;
@@ -68,28 +69,28 @@
   bool created_threads_;
 
   // Members initialized in |MainMessageLoopStart()| ---------------------------
-  scoped_ptr<base::MessageLoop> main_message_loop_;
-  scoped_ptr<base::SystemMonitor> system_monitor_;
-  scoped_ptr<base::PowerMonitor> power_monitor_;
-  scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
+  std::unique_ptr<base::MessageLoop> main_message_loop_;
+  std::unique_ptr<base::SystemMonitor> system_monitor_;
+  std::unique_ptr<base::PowerMonitor> power_monitor_;
+  std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_;
 
   // Destroy parts_ before main_message_loop_ (required) and before other
   // classes constructed in web (but after main_thread_).
-  scoped_ptr<WebMainParts> parts_;
+  std::unique_ptr<WebMainParts> parts_;
 
   // Members initialized in |InitializeMainThread()| ---------------------------
   // This must get destroyed before other threads that are created in parts_.
-  scoped_ptr<WebThreadImpl> main_thread_;
+  std::unique_ptr<WebThreadImpl> main_thread_;
 
   // Members initialized in |RunMainMessageLoopParts()| ------------------------
-  scoped_ptr<WebThreadImpl> db_thread_;
-  scoped_ptr<WebThreadImpl> file_user_blocking_thread_;
-  scoped_ptr<WebThreadImpl> file_thread_;
-  scoped_ptr<WebThreadImpl> cache_thread_;
-  scoped_ptr<WebThreadImpl> io_thread_;
+  std::unique_ptr<WebThreadImpl> db_thread_;
+  std::unique_ptr<WebThreadImpl> file_user_blocking_thread_;
+  std::unique_ptr<WebThreadImpl> file_thread_;
+  std::unique_ptr<WebThreadImpl> cache_thread_;
+  std::unique_ptr<WebThreadImpl> io_thread_;
 
   // Members initialized in |WebThreadsStarted()| --------------------------
-  scoped_ptr<CookieNotificationBridge> cookie_notification_bridge_;
+  std::unique_ptr<CookieNotificationBridge> cookie_notification_bridge_;
 
   DISALLOW_COPY_AND_ASSIGN(WebMainLoop);
 };
diff --git a/ios/web/app/web_main_loop.mm b/ios/web/app/web_main_loop.mm
index ac91ba6..017ffa4 100644
--- a/ios/web/app/web_main_loop.mm
+++ b/ios/web/app/web_main_loop.mm
@@ -82,7 +82,7 @@
   system_monitor_.reset(new base::SystemMonitor);
 #endif
   // TODO(rohitrao): Do we need PowerMonitor on iOS, or can we get rid of it?
-  scoped_ptr<base::PowerMonitorSource> power_monitor_source(
+  std::unique_ptr<base::PowerMonitorSource> power_monitor_source(
       new base::PowerMonitorDeviceSource());
   power_monitor_.reset(new base::PowerMonitor(std::move(power_monitor_source)));
   network_change_notifier_.reset(net::NetworkChangeNotifier::Create());
@@ -130,7 +130,7 @@
   // Must be size_t so we can increment it.
   for (size_t thread_id = WebThread::UI + 1; thread_id < WebThread::ID_COUNT;
        ++thread_id) {
-    scoped_ptr<WebThreadImpl>* thread_to_start = nullptr;
+    std::unique_ptr<WebThreadImpl>* thread_to_start = nullptr;
     base::Thread::Options options;
 
     switch (thread_id) {
diff --git a/ios/web/app/web_main_runner.mm b/ios/web/app/web_main_runner.mm
index cf0dbba..ac422f7 100644
--- a/ios/web/app/web_main_runner.mm
+++ b/ios/web/app/web_main_runner.mm
@@ -112,8 +112,8 @@
   // Used if the embedder doesn't set one.
   WebClient empty_web_client_;
 
-  scoped_ptr<base::AtExitManager> exit_manager_;
-  scoped_ptr<WebMainLoop> main_loop_;
+  std::unique_ptr<base::AtExitManager> exit_manager_;
+  std::unique_ptr<WebMainLoop> main_loop_;
 
   DISALLOW_COPY_AND_ASSIGN(WebMainRunnerImpl);
 };
diff --git a/ios/web/browser_state_web_view_partition_inttest.mm b/ios/web/browser_state_web_view_partition_inttest.mm
index 9e39ea6..3497478 100644
--- a/ios/web/browser_state_web_view_partition_inttest.mm
+++ b/ios/web/browser_state_web_view_partition_inttest.mm
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <string>
 #import <WebKit/WebKit.h>
 
+#include <memory>
+#include <string>
+
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/test/ios/wait_util.h"
 #include "ios/web/public/browser_state.h"
 #import "ios/web/public/test/http_server.h"
@@ -133,7 +134,7 @@
 
  private:
   // The ResponseProvider used to load a simple web page.
-  scoped_ptr<web::ResponseProvider> provider_;
+  std::unique_ptr<web::ResponseProvider> provider_;
   // The OTR browser state used in tests.
   web::TestBrowserState otr_browser_state_;
 };
diff --git a/ios/web/interstitials/html_web_interstitial_impl.h b/ios/web/interstitials/html_web_interstitial_impl.h
index b590512..777f30ad 100644
--- a/ios/web/interstitials/html_web_interstitial_impl.h
+++ b/ios/web/interstitials/html_web_interstitial_impl.h
@@ -7,8 +7,9 @@
 
 #import <WebKit/WebKit.h>
 
+#include <memory>
+
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/interstitials/web_interstitial_impl.h"
 
 namespace web {
@@ -20,10 +21,11 @@
 // interstitials created via HTML.
 class HtmlWebInterstitialImpl : public WebInterstitialImpl {
  public:
-  HtmlWebInterstitialImpl(WebStateImpl* web_state,
-                          bool new_navigation,
-                          const GURL& url,
-                          scoped_ptr<HtmlWebInterstitialDelegate> delegate);
+  HtmlWebInterstitialImpl(
+      WebStateImpl* web_state,
+      bool new_navigation,
+      const GURL& url,
+      std::unique_ptr<HtmlWebInterstitialDelegate> delegate);
   ~HtmlWebInterstitialImpl() override;
 
   // Called by |web_view_controller_delegate_| when |web_view_controller_|
@@ -42,7 +44,7 @@
 
  private:
   // The HTML interstitial delegate.
-  scoped_ptr<HtmlWebInterstitialDelegate> delegate_;
+  std::unique_ptr<HtmlWebInterstitialDelegate> delegate_;
   // The |web_view_|'s delegate.  Used to forward JavaScript commands
   // resulting from user interaction with the interstitial content.
   base::scoped_nsprotocol<id<WKNavigationDelegate>> web_view_delegate_;
diff --git a/ios/web/interstitials/html_web_interstitial_impl.mm b/ios/web/interstitials/html_web_interstitial_impl.mm
index 0a22dba..1443b73 100644
--- a/ios/web/interstitials/html_web_interstitial_impl.mm
+++ b/ios/web/interstitials/html_web_interstitial_impl.mm
@@ -77,7 +77,7 @@
     WebState* web_state,
     bool new_navigation,
     const GURL& url,
-    scoped_ptr<HtmlWebInterstitialDelegate> delegate) {
+    std::unique_ptr<HtmlWebInterstitialDelegate> delegate) {
   WebStateImpl* web_state_impl = static_cast<WebStateImpl*>(web_state);
   return new HtmlWebInterstitialImpl(web_state_impl, new_navigation, url,
                                      std::move(delegate));
@@ -87,7 +87,7 @@
     WebStateImpl* web_state,
     bool new_navigation,
     const GURL& url,
-    scoped_ptr<HtmlWebInterstitialDelegate> delegate)
+    std::unique_ptr<HtmlWebInterstitialDelegate> delegate)
     : WebInterstitialImpl(web_state, new_navigation, url),
       delegate_(std::move(delegate)) {
   DCHECK(delegate_);
diff --git a/ios/web/interstitials/native_web_interstitial_impl.h b/ios/web/interstitials/native_web_interstitial_impl.h
index 1280ef49..4a9d4f4 100644
--- a/ios/web/interstitials/native_web_interstitial_impl.h
+++ b/ios/web/interstitials/native_web_interstitial_impl.h
@@ -7,6 +7,8 @@
 
 #include "ios/web/interstitials/web_interstitial_impl.h"
 
+#include <memory>
+
 #include "base/ios/weak_nsobject.h"
 #include "base/mac/scoped_nsobject.h"
 
@@ -18,10 +20,11 @@
 // interstitials created via native views.
 class NativeWebInterstitialImpl : public WebInterstitialImpl {
  public:
-  NativeWebInterstitialImpl(WebStateImpl* web_state,
-                            bool new_navigation,
-                            const GURL& url,
-                            scoped_ptr<NativeWebInterstitialDelegate> delegate);
+  NativeWebInterstitialImpl(
+      WebStateImpl* web_state,
+      bool new_navigation,
+      const GURL& url,
+      std::unique_ptr<NativeWebInterstitialDelegate> delegate);
   ~NativeWebInterstitialImpl() override;
 
   // WebInterstitialImpl implementation:
@@ -36,7 +39,7 @@
 
  private:
   // The native interstitial delegate.
-  scoped_ptr<NativeWebInterstitialDelegate> delegate_;
+  std::unique_ptr<NativeWebInterstitialDelegate> delegate_;
   // The transient content view containing interstitial content.
   base::scoped_nsobject<CRWContentView> content_view_;
 };
diff --git a/ios/web/interstitials/native_web_interstitial_impl.mm b/ios/web/interstitials/native_web_interstitial_impl.mm
index 438705e..a2a86dd7 100644
--- a/ios/web/interstitials/native_web_interstitial_impl.mm
+++ b/ios/web/interstitials/native_web_interstitial_impl.mm
@@ -19,7 +19,7 @@
     WebState* web_state,
     bool new_navigation,
     const GURL& url,
-    scoped_ptr<NativeWebInterstitialDelegate> delegate) {
+    std::unique_ptr<NativeWebInterstitialDelegate> delegate) {
   WebStateImpl* web_state_impl = static_cast<WebStateImpl*>(web_state);
   return new NativeWebInterstitialImpl(web_state_impl, new_navigation, url,
                                        std::move(delegate));
@@ -29,7 +29,7 @@
     WebStateImpl* web_state,
     bool new_navigation,
     const GURL& url,
-    scoped_ptr<NativeWebInterstitialDelegate> delegate)
+    std::unique_ptr<NativeWebInterstitialDelegate> delegate)
     : web::WebInterstitialImpl(web_state, new_navigation, url),
       delegate_(std::move(delegate)) {
   DCHECK(delegate_);
diff --git a/ios/web/navigation/crw_session_controller.mm b/ios/web/navigation/crw_session_controller.mm
index ba45a32..afd78bf 100644
--- a/ios/web/navigation/crw_session_controller.mm
+++ b/ios/web/navigation/crw_session_controller.mm
@@ -188,7 +188,7 @@
     scoped_items.release(&items);
 
     for (size_t i = 0; i < items.size(); ++i) {
-      scoped_ptr<web::NavigationItem> item(items[i]);
+      std::unique_ptr<web::NavigationItem> item(items[i]);
       base::scoped_nsobject<CRWSessionEntry> entry(
           [[CRWSessionEntry alloc] initWithNavigationItem:std::move(item)]);
       [_entries addObject:entry];
@@ -873,7 +873,7 @@
   GURL loaded_url(url);
   BOOL urlWasRewritten = NO;
   if (_navigationManager) {
-    scoped_ptr<std::vector<web::BrowserURLRewriter::URLRewriter>>
+    std::unique_ptr<std::vector<web::BrowserURLRewriter::URLRewriter>>
         transientRewriters = _navigationManager->GetTransientURLRewriters();
     if (transientRewriters) {
       urlWasRewritten = web::BrowserURLRewriter::RewriteURLWithWriters(
@@ -884,7 +884,7 @@
     web::BrowserURLRewriter::GetInstance()->RewriteURLIfNecessary(
         &loaded_url, _browserState);
   }
-  scoped_ptr<web::NavigationItemImpl> item(new web::NavigationItemImpl());
+  std::unique_ptr<web::NavigationItemImpl> item(new web::NavigationItemImpl());
   item->SetURL(loaded_url);
   item->SetReferrer(referrer);
   item->SetTransitionType(transition);
diff --git a/ios/web/navigation/crw_session_controller_unittest.mm b/ios/web/navigation/crw_session_controller_unittest.mm
index 807eff39..1c1731a 100644
--- a/ios/web/navigation/crw_session_controller_unittest.mm
+++ b/ios/web/navigation/crw_session_controller_unittest.mm
@@ -10,7 +10,6 @@
 
 #include "base/logging.h"
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #import "ios/web/navigation/crw_session_controller+private_constructors.h"
 #include "ios/web/navigation/crw_session_entry.h"
diff --git a/ios/web/navigation/crw_session_entry.h b/ios/web/navigation/crw_session_entry.h
index bb41c68e..2a8ce257 100644
--- a/ios/web/navigation/crw_session_entry.h
+++ b/ios/web/navigation/crw_session_entry.h
@@ -8,7 +8,8 @@
 #import <Foundation/Foundation.h>
 #include <stdint.h>
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "base/strings/string16.h"
 #include "base/time/time.h"
 #include "ui/base/page_transition_types.h"
@@ -71,7 +72,8 @@
 @property(nonatomic, readonly) web::NavigationItemImpl* navigationItemImpl;
 
 // Initialize the session entry with the given NavigationItem.
-- (instancetype)initWithNavigationItem:(scoped_ptr<web::NavigationItem>)item;
+- (instancetype)initWithNavigationItem:
+    (std::unique_ptr<web::NavigationItem>)item;
 
 @end
 
diff --git a/ios/web/navigation/crw_session_entry.mm b/ios/web/navigation/crw_session_entry.mm
index a4c462e..ae293f6 100644
--- a/ios/web/navigation/crw_session_entry.mm
+++ b/ios/web/navigation/crw_session_entry.mm
@@ -6,9 +6,10 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/mac/objc_property_releaser.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #include "ios/web/navigation/navigation_item_impl.h"
 #include "ios/web/navigation/nscoder_util.h"
@@ -48,7 +49,7 @@
 
   // The NavigationItemImpl corresponding to this CRWSessionEntry.
   // TODO(stuartmorgan): Move ownership to NavigationManagerImpl.
-  scoped_ptr<web::NavigationItemImpl> _navigationItem;
+  std::unique_ptr<web::NavigationItemImpl> _navigationItem;
 
   base::mac::ObjCPropertyReleaser _propertyReleaser_CRWSessionEntry;
 }
@@ -70,7 +71,8 @@
 
 @synthesize originalUrl = _originalUrl;
 
-- (instancetype)initWithNavigationItem:(scoped_ptr<web::NavigationItem>)item {
+- (instancetype)initWithNavigationItem:
+    (std::unique_ptr<web::NavigationItem>)item {
   self = [super init];
   if (self) {
     _propertyReleaser_CRWSessionEntry.Init(self, [CRWSessionEntry class]);
diff --git a/ios/web/navigation/crw_session_entry_unittest.mm b/ios/web/navigation/crw_session_entry_unittest.mm
index 3d7aae9e..97db7da3 100644
--- a/ios/web/navigation/crw_session_entry_unittest.mm
+++ b/ios/web/navigation/crw_session_entry_unittest.mm
@@ -39,7 +39,8 @@
     GURL url("http://init.test");
     ui::PageTransition transition =
         ui::PAGE_TRANSITION_AUTO_BOOKMARK;
-    scoped_ptr<web::NavigationItemImpl> item(new web::NavigationItemImpl());
+    std::unique_ptr<web::NavigationItemImpl> item(
+        new web::NavigationItemImpl());
     item->SetURL(url);
     item->SetTransitionType(transition);
     item->SetTimestamp(base::Time::Now());
diff --git a/ios/web/navigation/navigation_item_impl.h b/ios/web/navigation/navigation_item_impl.h
index 8462cbd..882b62dc 100644
--- a/ios/web/navigation/navigation_item_impl.h
+++ b/ios/web/navigation/navigation_item_impl.h
@@ -7,8 +7,9 @@
 
 #import <Foundation/Foundation.h>
 
+#include <memory>
+
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "ios/web/navigation/navigation_item_facade_delegate.h"
 #include "ios/web/public/favicon_status.h"
@@ -36,7 +37,7 @@
   // NOTE: to minimize facade synchronization code, NavigationItems take
   // ownership of their facade delegates.
   void SetFacadeDelegate(
-      scoped_ptr<NavigationItemFacadeDelegate> facade_delegate);
+      std::unique_ptr<NavigationItemFacadeDelegate> facade_delegate);
   NavigationItemFacadeDelegate* GetFacadeDelegate() const;
 
   // NavigationItem implementation:
@@ -138,7 +139,7 @@
   mutable base::string16 cached_display_title_;
 
   // Weak pointer to the facade delegate.
-  scoped_ptr<NavigationItemFacadeDelegate> facade_delegate_;
+  std::unique_ptr<NavigationItemFacadeDelegate> facade_delegate_;
 
   // Copy and assignment is explicitly allowed for this class.
 };
diff --git a/ios/web/navigation/navigation_item_impl.mm b/ios/web/navigation/navigation_item_impl.mm
index 7d7e748..6c79202 100644
--- a/ios/web/navigation/navigation_item_impl.mm
+++ b/ios/web/navigation/navigation_item_impl.mm
@@ -6,10 +6,10 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <utility>
 
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "components/url_formatter/url_formatter.h"
 #include "ui/base/page_transition_types.h"
 #include "ui/gfx/text_elider.h"
@@ -28,8 +28,8 @@
 namespace web {
 
 // static
-scoped_ptr<NavigationItem> NavigationItem::Create() {
-  return scoped_ptr<NavigationItem>(new NavigationItemImpl());
+std::unique_ptr<NavigationItem> NavigationItem::Create() {
+  return std::unique_ptr<NavigationItem>(new NavigationItemImpl());
 }
 
 NavigationItemImpl::NavigationItemImpl()
@@ -71,7 +71,7 @@
 }
 
 void NavigationItemImpl::SetFacadeDelegate(
-    scoped_ptr<NavigationItemFacadeDelegate> facade_delegate) {
+    std::unique_ptr<NavigationItemFacadeDelegate> facade_delegate) {
   facade_delegate_ = std::move(facade_delegate);
 }
 
diff --git a/ios/web/navigation/navigation_item_impl_unittest.mm b/ios/web/navigation/navigation_item_impl_unittest.mm
index 0189ea0..e978e2f 100644
--- a/ios/web/navigation/navigation_item_impl_unittest.mm
+++ b/ios/web/navigation/navigation_item_impl_unittest.mm
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ios/web/navigation/navigation_item_impl.h"
+
+#include <memory>
+
 #include "base/logging.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
-#include "ios/web/navigation/navigation_item_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/gtest_mac.h"
 #include "testing/platform_test.h"
@@ -31,7 +33,7 @@
   }
 
   // The NavigationItemImpl instance being tested.
-  scoped_ptr<NavigationItemImpl> item_;
+  std::unique_ptr<NavigationItemImpl> item_;
 };
 
 // TODO(rohitrao): Add and adapt tests from NavigationEntryImpl.
diff --git a/ios/web/navigation/navigation_manager_impl.h b/ios/web/navigation/navigation_manager_impl.h
index f8d8709..72eb2dc 100644
--- a/ios/web/navigation/navigation_manager_impl.h
+++ b/ios/web/navigation/navigation_manager_impl.h
@@ -7,11 +7,11 @@
 
 #include <stddef.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #import "ios/web/public/navigation_manager.h"
 #include "ui/base/page_transition_types.h"
@@ -120,7 +120,7 @@
   // the caller.
   // TODO(crbug.com/546197): remove once NavigationItem creation occurs in this
   // class.
-  scoped_ptr<std::vector<BrowserURLRewriter::URLRewriter>>
+  std::unique_ptr<std::vector<BrowserURLRewriter::URLRewriter>>
   GetTransientURLRewriters();
 
   // Called to reset the transient url rewriter list.
@@ -145,7 +145,7 @@
   NavigationManagerFacadeDelegate* facade_delegate_;
 
   // List of transient url rewriters added by |AddTransientURLRewriter()|.
-  scoped_ptr<std::vector<BrowserURLRewriter::URLRewriter>>
+  std::unique_ptr<std::vector<BrowserURLRewriter::URLRewriter>>
       transient_url_rewriters_;
 
   DISALLOW_COPY_AND_ASSIGN(NavigationManagerImpl);
diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm
index 9844df5..49ec5ae3 100644
--- a/ios/web/navigation/navigation_manager_impl.mm
+++ b/ios/web/navigation/navigation_manager_impl.mm
@@ -306,7 +306,7 @@
   delegate_->GetWebState()->OpenURL(params);
 }
 
-scoped_ptr<std::vector<BrowserURLRewriter::URLRewriter>>
+std::unique_ptr<std::vector<BrowserURLRewriter::URLRewriter>>
 NavigationManagerImpl::GetTransientURLRewriters() {
   return std::move(transient_url_rewriters_);
 }
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm
index 9460fb0..356a177f 100644
--- a/ios/web/navigation/navigation_manager_impl_unittest.mm
+++ b/ios/web/navigation/navigation_manager_impl_unittest.mm
@@ -17,7 +17,7 @@
   void SetUp() override {
     manager_.reset(new NavigationManagerImpl(NULL, &browser_state_));
   }
-  scoped_ptr<NavigationManagerImpl> manager_;
+  std::unique_ptr<NavigationManagerImpl> manager_;
   TestBrowserState browser_state_;
 };
 
diff --git a/ios/web/net/cert_verifier_block_adapter.cc b/ios/web/net/cert_verifier_block_adapter.cc
index dd3a8360..781e483 100644
--- a/ios/web/net/cert_verifier_block_adapter.cc
+++ b/ios/web/net/cert_verifier_block_adapter.cc
@@ -35,7 +35,7 @@
   // verification request is not cancelled. CertVerifierBlockAdapter::Verify
   // guarantees its completion handler to be called, which will not happen if
   // verification request is cancelled.
-  scoped_ptr<net::CertVerifier::Request> request;
+  std::unique_ptr<net::CertVerifier::Request> request;
   // The result of certificate verification.
   net::CertVerifyResult result;
   // Certificate being verified.
@@ -84,7 +84,7 @@
   net::CompletionCallback callback = base::BindBlock(^(int error) {
     completion_handler(context->result, error);
   });
-  scoped_ptr<net::CertVerifier::Request> request;
+  std::unique_ptr<net::CertVerifier::Request> request;
   int error = cert_verifier_->Verify(params.cert.get(), params.hostname,
                                      params.ocsp_response, params.flags,
                                      params.crl_set.get(), &(context->result),
diff --git a/ios/web/net/cert_verifier_block_adapter.h b/ios/web/net/cert_verifier_block_adapter.h
index e2d4732..851bdc1 100644
--- a/ios/web/net/cert_verifier_block_adapter.h
+++ b/ios/web/net/cert_verifier_block_adapter.h
@@ -5,7 +5,6 @@
 #ifndef IOS_WEB_NET_CERT_VERIFIER_BLOCK_ADAPTER_H_
 #define IOS_WEB_NET_CERT_VERIFIER_BLOCK_ADAPTER_H_
 
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/threading/thread_checker.h"
 #include "net/cert/cert_verifier.h"
diff --git a/ios/web/net/cert_verifier_block_adapter_unittest.cc b/ios/web/net/cert_verifier_block_adapter_unittest.cc
index 9480571..cfb8d9dc 100644
--- a/ios/web/net/cert_verifier_block_adapter_unittest.cc
+++ b/ios/web/net/cert_verifier_block_adapter_unittest.cc
@@ -87,7 +87,8 @@
 // net::CertVerifier and ok_cert.pem cert.
 TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndAsync) {
   // Call |Verify|.
-  scoped_ptr<net::CertVerifier> verifier(net::CertVerifier::CreateDefault());
+  std::unique_ptr<net::CertVerifier> verifier(
+      net::CertVerifier::CreateDefault());
   CertVerifierBlockAdapter test_adapter(verifier.get(), &net_log_);
   CertVerifierBlockAdapter::Params params(cert_.get(), kHostName);
   net::CertVerifyResult actual_result;
@@ -151,8 +152,9 @@
 // Tests that the completion handler passed to |Verify()| is called, even if the
 // adapter is destroyed.
 TEST_F(CertVerifierBlockAdapterTest, CompletionHandlerIsAlwaysCalled) {
-  scoped_ptr<net::CertVerifier> verifier(net::CertVerifier::CreateDefault());
-  scoped_ptr<CertVerifierBlockAdapter> test_adapter(
+  std::unique_ptr<net::CertVerifier> verifier(
+      net::CertVerifier::CreateDefault());
+  std::unique_ptr<CertVerifierBlockAdapter> test_adapter(
       new CertVerifierBlockAdapter(verifier.get(), &net_log_));
 
   // Call |Verify| and destroy the adapter.
diff --git a/ios/web/net/crw_cert_verification_controller.mm b/ios/web/net/crw_cert_verification_controller.mm
index d88925b4..188ab4a2 100644
--- a/ios/web/net/crw_cert_verification_controller.mm
+++ b/ios/web/net/crw_cert_verification_controller.mm
@@ -124,7 +124,7 @@
 @interface CRWCertVerificationController () {
   // Cert verification object which wraps |net::CertVerifier|. Must be created,
   // used and destroyed on IO Thread.
-  scoped_ptr<web::CertVerifierBlockAdapter> _certVerifier;
+  std::unique_ptr<web::CertVerifierBlockAdapter> _certVerifier;
 
   // URLRequestContextGetter for obtaining net layer objects.
   net::URLRequestContextGetter* _contextGetter;
diff --git a/ios/web/net/crw_ssl_status_updater_unittest.mm b/ios/web/net/crw_ssl_status_updater_unittest.mm
index d35fefe7..4cb05ff 100644
--- a/ios/web/net/crw_ssl_status_updater_unittest.mm
+++ b/ios/web/net/crw_ssl_status_updater_unittest.mm
@@ -121,7 +121,7 @@
 
   base::scoped_nsobject<CRWSSLStatusUpdaterTestDataSource> data_source_;
   base::scoped_nsprotocol<id> delegate_;
-  scoped_ptr<web::NavigationManagerImpl> nav_manager_;
+  std::unique_ptr<web::NavigationManagerImpl> nav_manager_;
   base::scoped_nsobject<CRWSSLStatusUpdater> ssl_status_updater_;
   base::scoped_nsobject<NSArray> cert_chain_;
 };
diff --git a/ios/web/net/request_tracker_impl_unittest.mm b/ios/web/net/request_tracker_impl_unittest.mm
index 2cc83a7..c3a5d05 100644
--- a/ios/web/net/request_tracker_impl_unittest.mm
+++ b/ios/web/net/request_tracker_impl_unittest.mm
@@ -9,6 +9,7 @@
 #include "base/logging.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/scoped_vector.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/sys_string_conversions.h"
@@ -236,7 +237,7 @@
   net::TestJobInterceptor* AddInterceptorToRequest(size_t i) {
     // |interceptor| will be deleted from |job_factory_|'s destructor.
     net::TestJobInterceptor* protocol_handler = new net::TestJobInterceptor();
-    job_factory_.SetProtocolHandler("http", make_scoped_ptr(protocol_handler));
+    job_factory_.SetProtocolHandler("http", base::WrapUnique(protocol_handler));
     contexts_[i]->set_job_factory(&job_factory_);
     return protocol_handler;
   }
@@ -440,7 +441,7 @@
   // TODO(mmenke):  This is really bizarre. Do something more reasonable.
   const_cast<net::HttpResponseInfo&>(request->response_info()).headers =
       new net::HttpResponseHeaders(headers);
-  scoped_ptr<net::URLRequestTestJob> job(new net::URLRequestTestJob(
+  std::unique_ptr<net::URLRequestTestJob> job(new net::URLRequestTestJob(
       request, request->context()->network_delegate(), headers, "", false));
   AddInterceptorToRequest(0)->set_main_intercept_job(std::move(job));
   request->Start();
diff --git a/ios/web/net/web_http_protocol_handler_delegate_unittest.mm b/ios/web/net/web_http_protocol_handler_delegate_unittest.mm
index 2e353fc1..bb53e698 100644
--- a/ios/web/net/web_http_protocol_handler_delegate_unittest.mm
+++ b/ios/web/net/web_http_protocol_handler_delegate_unittest.mm
@@ -6,9 +6,11 @@
 
 #import <Foundation/Foundation.h>
 
+#include <memory>
+
 #include "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/thread_task_runner_handle.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
@@ -51,12 +53,12 @@
       : context_getter_(new net::TestURLRequestContextGetter(
             base::ThreadTaskRunnerHandle::Get())),
         delegate_(new WebHTTPProtocolHandlerDelegate(context_getter_.get())),
-        web_client_(make_scoped_ptr(new AppSpecificURLTestWebClient)) {}
+        web_client_(base::WrapUnique(new AppSpecificURLTestWebClient)) {}
 
  protected:
   base::MessageLoop message_loop_;
   scoped_refptr<net::URLRequestContextGetter> context_getter_;
-  scoped_ptr<WebHTTPProtocolHandlerDelegate> delegate_;
+  std::unique_ptr<WebHTTPProtocolHandlerDelegate> delegate_;
   web::ScopedTestingWebClient web_client_;
 };
 
diff --git a/ios/web/public/app/web_main.h b/ios/web/public/app/web_main.h
index 34ac01a..8ae8ce8 100644
--- a/ios/web/public/app/web_main.h
+++ b/ios/web/public/app/web_main.h
@@ -5,7 +5,8 @@
 #ifndef IOS_WEB_PUBLIC_APP_WEB_MAIN_H_
 #define IOS_WEB_PUBLIC_APP_WEB_MAIN_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "ios/web/public/app/web_main_delegate.h"
 
 namespace web {
@@ -40,7 +41,7 @@
   ~WebMain();
 
  private:
-  scoped_ptr<WebMainRunner> web_main_runner_;
+  std::unique_ptr<WebMainRunner> web_main_runner_;
 };
 
 }  // namespace web
diff --git a/ios/web/public/interstitials/web_interstitial.h b/ios/web/public/interstitials/web_interstitial.h
index 35ba5d9..1aa22d0 100644
--- a/ios/web/public/interstitials/web_interstitial.h
+++ b/ios/web/public/interstitials/web_interstitial.h
@@ -5,7 +5,7 @@
 #ifndef IOS_WEB_PUBLIC_INTERSTITIALS_WEB_INTERSTITIAL_H_
 #define IOS_WEB_PUBLIC_INTERSTITIALS_WEB_INTERSTITIAL_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 class GURL;
 
@@ -36,12 +36,12 @@
       WebState* web_state,
       bool new_navigation,
       const GURL& url,
-      scoped_ptr<HtmlWebInterstitialDelegate> delegate);
+      std::unique_ptr<HtmlWebInterstitialDelegate> delegate);
   static WebInterstitial* CreateNativeInterstitial(
       WebState* web_state,
       bool new_navigation,
       const GURL& url,
-      scoped_ptr<NativeWebInterstitialDelegate> delegate);
+      std::unique_ptr<NativeWebInterstitialDelegate> delegate);
 
   // Retrieves the WebInterstitial if any associated with the specified
   // |web_state|.
diff --git a/ios/web/public/navigation_item.h b/ios/web/public/navigation_item.h
index d84240b..6e79828d 100644
--- a/ios/web/public/navigation_item.h
+++ b/ios/web/public/navigation_item.h
@@ -5,7 +5,8 @@
 #ifndef IOS_WEB_PUBLIC_NAVIGATION_ITEM_H_
 #define IOS_WEB_PUBLIC_NAVIGATION_ITEM_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "base/strings/string16.h"
 #include "base/supports_user_data.h"
 #include "base/time/time.h"
@@ -27,7 +28,7 @@
 class NavigationItem : public base::SupportsUserData {
  public:
   // Creates a new NavigationItem.
-  static scoped_ptr<NavigationItem> Create();
+  static std::unique_ptr<NavigationItem> Create();
 
   // Page-related stuff --------------------------------------------------------
 
diff --git a/ios/web/public/test/http_server.h b/ios/web/public/test/http_server.h
index bc96a1f..daf359f5 100644
--- a/ios/web/public/test/http_server.h
+++ b/ios/web/public/test/http_server.h
@@ -5,12 +5,12 @@
 #ifndef IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_
 #define IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_
 
+#include <memory>
 #include <vector>
 
 #import "base/mac/scoped_nsobject.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/synchronization/lock.h"
 #include "ios/web/public/test/response_providers/response_provider.h"
@@ -36,7 +36,7 @@
  private:
   friend class base::RefCounted<RefCountedResponseProviderWrapper>;
   // The ResponseProvider that backs this object.
-  scoped_ptr<ResponseProvider> response_provider_;
+  std::unique_ptr<ResponseProvider> response_provider_;
   virtual ~RefCountedResponseProviderWrapper();
 };
 
diff --git a/ios/web/public/test/http_server_inttest.mm b/ios/web/public/test/http_server_inttest.mm
index faf7d66..2c81da2a 100644
--- a/ios/web/public/test/http_server_inttest.mm
+++ b/ios/web/public/test/http_server_inttest.mm
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/web/public/test/http_server.h"
-
 #import <Foundation/Foundation.h>
+
+#include <memory>
 #include <string>
 
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #import "base/test/ios/wait_util.h"
+#import "ios/web/public/test/http_server.h"
 #include "ios/web/public/test/response_providers/string_response_provider.h"
 #import "ios/web/test/web_int_test.h"
 #import "net/base/mac/url_conversions.h"
@@ -25,7 +25,7 @@
 // requests and response from |TestResponseProvider|.
 TEST_F(HttpServerTest, StartAndInterfaceWithResponseProvider) {
   const std::string kHelloWorld = "Hello World";
-  scoped_ptr<web::StringResponseProvider> provider(
+  std::unique_ptr<web::StringResponseProvider> provider(
       new web::StringResponseProvider(kHelloWorld));
 
   web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance();
diff --git a/ios/web/public/test/response_providers/file_based_response_provider.h b/ios/web/public/test/response_providers/file_based_response_provider.h
index 5578e719..b9c98b7 100644
--- a/ios/web/public/test/response_providers/file_based_response_provider.h
+++ b/ios/web/public/test/response_providers/file_based_response_provider.h
@@ -5,8 +5,9 @@
 #ifndef IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_FILE_BASED_RESPONSE_PROVIDER_H_
 #define IOS_WEB_PUBLIC_TEST_RESPONSE_PROVIDERS_FILE_BASED_RESPONSE_PROVIDER_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/public/test/response_providers/file_based_response_provider_impl.h"
 #include "ios/web/public/test/response_providers/response_provider.h"
 
@@ -29,7 +30,7 @@
       const Request& request) override;
 
  private:
-  scoped_ptr<FileBasedResponseProviderImpl> response_provider_impl_;
+  std::unique_ptr<FileBasedResponseProviderImpl> response_provider_impl_;
 };
 }
 
diff --git a/ios/web/public/test/scoped_testing_web_client.h b/ios/web/public/test/scoped_testing_web_client.h
index 51f7969f..65a221e 100644
--- a/ios/web/public/test/scoped_testing_web_client.h
+++ b/ios/web/public/test/scoped_testing_web_client.h
@@ -5,8 +5,9 @@
 #ifndef IOS_WEB_PUBLIC_TEST_SCOPED_TESTING_WEB_CLIENT_H_
 #define IOS_WEB_PUBLIC_TEST_SCOPED_TESTING_WEB_CLIENT_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace web {
 
@@ -15,13 +16,13 @@
 // Helper class to register a WebClient during unit testing.
 class ScopedTestingWebClient {
  public:
-  explicit ScopedTestingWebClient(scoped_ptr<WebClient> web_client);
+  explicit ScopedTestingWebClient(std::unique_ptr<WebClient> web_client);
   ~ScopedTestingWebClient();
 
   WebClient* Get();
 
  private:
-  scoped_ptr<WebClient> web_client_;
+  std::unique_ptr<WebClient> web_client_;
   WebClient* original_web_client_;
 };
 
diff --git a/ios/web/public/test/scoped_testing_web_client.mm b/ios/web/public/test/scoped_testing_web_client.mm
index a24058333..fd06b97 100644
--- a/ios/web/public/test/scoped_testing_web_client.mm
+++ b/ios/web/public/test/scoped_testing_web_client.mm
@@ -9,7 +9,8 @@
 
 namespace web {
 
-ScopedTestingWebClient::ScopedTestingWebClient(scoped_ptr<WebClient> web_client)
+ScopedTestingWebClient::ScopedTestingWebClient(
+    std::unique_ptr<WebClient> web_client)
     : web_client_(std::move(web_client)), original_web_client_(GetWebClient()) {
   SetWebClient(web_client_.get());
 }
diff --git a/ios/web/public/test/test_web_client.h b/ios/web/public/test/test_web_client.h
index a912fed..9f3c0b2 100644
--- a/ios/web/public/test/test_web_client.h
+++ b/ios/web/public/test/test_web_client.h
@@ -9,7 +9,6 @@
 
 #include "base/compiler_specific.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/public/web_client.h"
 
 namespace web {
diff --git a/ios/web/public/test/test_web_thread.h b/ios/web/public/test/test_web_thread.h
index 4ad9eb70..b1159d1 100644
--- a/ios/web/public/test/test_web_thread.h
+++ b/ios/web/public/test/test_web_thread.h
@@ -5,8 +5,9 @@
 #ifndef IOS_WEB_PUBLIC_TEST_TEST_WEB_THREAD_H_
 #define IOS_WEB_PUBLIC_TEST_TEST_WEB_THREAD_H_
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/public/web_thread.h"
 
 namespace base {
@@ -44,7 +45,7 @@
   bool IsRunning();
 
  private:
-  scoped_ptr<TestWebThreadImpl> impl_;
+  std::unique_ptr<TestWebThreadImpl> impl_;
 
   DISALLOW_COPY_AND_ASSIGN(TestWebThread);
 };
diff --git a/ios/web/public/test/test_web_thread_bundle.h b/ios/web/public/test/test_web_thread_bundle.h
index 1f586d5..47f76b8 100644
--- a/ios/web/public/test/test_web_thread_bundle.h
+++ b/ios/web/public/test/test_web_thread_bundle.h
@@ -30,8 +30,9 @@
 // IO_MAINLOOP will use a MessageLoopForIO for the main MessageLoop.
 // Most of the time, this avoids needing to use a REAL_IO_THREAD.
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 
 namespace base {
 class MessageLoop;
@@ -64,13 +65,13 @@
  private:
   void Init(int options);
 
-  scoped_ptr<base::MessageLoop> message_loop_;
-  scoped_ptr<TestWebThread> ui_thread_;
-  scoped_ptr<TestWebThread> db_thread_;
-  scoped_ptr<TestWebThread> file_thread_;
-  scoped_ptr<TestWebThread> file_user_blocking_thread_;
-  scoped_ptr<TestWebThread> cache_thread_;
-  scoped_ptr<TestWebThread> io_thread_;
+  std::unique_ptr<base::MessageLoop> message_loop_;
+  std::unique_ptr<TestWebThread> ui_thread_;
+  std::unique_ptr<TestWebThread> db_thread_;
+  std::unique_ptr<TestWebThread> file_thread_;
+  std::unique_ptr<TestWebThread> file_user_blocking_thread_;
+  std::unique_ptr<TestWebThread> cache_thread_;
+  std::unique_ptr<TestWebThread> io_thread_;
 
   DISALLOW_COPY_AND_ASSIGN(TestWebThreadBundle);
 };
diff --git a/ios/web/public/web_controller_factory.h b/ios/web/public/web_controller_factory.h
index c6d1545..e846762 100644
--- a/ios/web/public/web_controller_factory.h
+++ b/ios/web/public/web_controller_factory.h
@@ -5,7 +5,7 @@
 #ifndef IOS_WEB_PUBLIC_WEB_CONTROLLER_FACTORY_H_
 #define IOS_WEB_PUBLIC_WEB_CONTROLLER_FACTORY_H_
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
 
 @class CRWWebController;
 
@@ -16,7 +16,7 @@
 
 // Returns a new instance of CRWWebViewController.
 // Note: Callers are responsible for releasing the returned web controller.
-CRWWebController* CreateWebController(scoped_ptr<WebStateImpl> web_state);
+CRWWebController* CreateWebController(std::unique_ptr<WebStateImpl> web_state);
 
 // Returns a new instance of CRWWebViewController.
 // Temporary factory method for use in components that require a web controller.
diff --git a/ios/web/public/web_controller_factory.mm b/ios/web/public/web_controller_factory.mm
index e23e880..2947af8 100644
--- a/ios/web/public/web_controller_factory.mm
+++ b/ios/web/public/web_controller_factory.mm
@@ -12,14 +12,15 @@
 
 namespace web {
 
-CRWWebController* CreateWebController(scoped_ptr<WebStateImpl> web_state) {
+CRWWebController* CreateWebController(std::unique_ptr<WebStateImpl> web_state) {
   return
       [[CRWWKWebViewWebController alloc] initWithWebState:std::move(web_state)];
 }
 
 CRWWebController* CreateWebController(BrowserState* browser_state) {
   DCHECK(browser_state);
-  scoped_ptr<web::WebStateImpl> web_state(new web::WebStateImpl(browser_state));
+  std::unique_ptr<web::WebStateImpl> web_state(
+      new web::WebStateImpl(browser_state));
   web_state->GetNavigationManagerImpl().InitializeSession(nil, nil, NO, -1);
   return CreateWebController(std::move(web_state));
 }
diff --git a/ios/web/public/web_thread.h b/ios/web/public/web_thread.h
index 7c71956..7f7c414 100644
--- a/ios/web/public/web_thread.h
+++ b/ios/web/public/web_thread.h
@@ -217,9 +217,9 @@
   // Returns an appropriate error message for when DCHECK_CURRENTLY_ON() fails.
   static std::string GetDCheckCurrentlyOnErrorMessage(ID expected);
 
-  // Use these templates in conjunction with RefCountedThreadSafe or scoped_ptr
-  // when you want to ensure that an object is deleted on a specific thread.
-  // This is needed when an object can hop between threads
+  // Use these templates in conjunction with RefCountedThreadSafe or
+  // std::unique_ptr when you want to ensure that an object is deleted on a
+  // specific thread. This is needed when an object can hop between threads
   // (i.e. IO -> FILE -> IO), and thread switching delays can mean that the
   // final IO tasks executes before the FILE task's stack unwinds.
   // This would lead to the object destructing on the FILE thread, which often
@@ -257,8 +257,8 @@
   //
   //   ~Foo();
   //
-  // Sample usage with scoped_ptr:
-  // scoped_ptr<Foo, web::WebThread::DeleteOnIOThread> ptr;
+  // Sample usage with std::unique_ptr:
+  // std::unique_ptr<Foo, web::WebThread::DeleteOnIOThread> ptr;
   struct DeleteOnUIThread : public DeleteOnThread<UI> {};
   struct DeleteOnIOThread : public DeleteOnThread<IO> {};
   struct DeleteOnFileThread : public DeleteOnThread<FILE> {};
diff --git a/ios/web/shell/app_delegate.mm b/ios/web/shell/app_delegate.mm
index d5d239b..87e65a5 100644
--- a/ios/web/shell/app_delegate.mm
+++ b/ios/web/shell/app_delegate.mm
@@ -4,8 +4,9 @@
 
 #import "ios/web/shell/app_delegate.h"
 
+#include <memory>
+
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/public/app/web_main.h"
 #include "ios/web/public/web_client.h"
 #include "ios/web/public/web_state/web_state.h"
@@ -15,8 +16,8 @@
 #import "ios/web/shell/view_controller.h"
 
 @interface AppDelegate () {
-  scoped_ptr<web::ShellMainDelegate> _delegate;
-  scoped_ptr<web::WebMain> _webMain;
+  std::unique_ptr<web::ShellMainDelegate> _delegate;
+  std::unique_ptr<web::WebMain> _webMain;
 }
 @end
 
diff --git a/ios/web/shell/shell_browser_state.h b/ios/web/shell/shell_browser_state.h
index f08121da..b9a693d 100644
--- a/ios/web/shell/shell_browser_state.h
+++ b/ios/web/shell/shell_browser_state.h
@@ -5,12 +5,10 @@
 #ifndef IOS_WEB_SHELL_SHELL_BROWSER_STATE_H_
 #define IOS_WEB_SHELL_SHELL_BROWSER_STATE_H_
 
-#include "ios/web/public/browser_state.h"
-
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
+#include "ios/web/public/browser_state.h"
 
 namespace web {
 
diff --git a/ios/web/shell/shell_browser_state.mm b/ios/web/shell/shell_browser_state.mm
index 08f5a25..ecffe42 100644
--- a/ios/web/shell/shell_browser_state.mm
+++ b/ios/web/shell/shell_browser_state.mm
@@ -6,7 +6,6 @@
 
 #include "base/base_paths.h"
 #include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/threading/thread_restrictions.h"
diff --git a/ios/web/shell/shell_main_delegate.h b/ios/web/shell/shell_main_delegate.h
index 7f07f63..afd2ccb 100644
--- a/ios/web/shell/shell_main_delegate.h
+++ b/ios/web/shell/shell_main_delegate.h
@@ -5,8 +5,9 @@
 #ifndef IOS_WEB_SHELL_SHELL_MAIN_DELEGATE_H_
 #define IOS_WEB_SHELL_SHELL_MAIN_DELEGATE_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/public/app/web_main_delegate.h"
 
 namespace web {
@@ -20,7 +21,7 @@
   void BasicStartupComplete() override;
 
  private:
-  scoped_ptr<ShellWebClient> web_client_;
+  std::unique_ptr<ShellWebClient> web_client_;
 };
 
 }  // namespace web
diff --git a/ios/web/shell/shell_url_request_context_getter.h b/ios/web/shell/shell_url_request_context_getter.h
index 2d536765..9d440e93 100644
--- a/ios/web/shell/shell_url_request_context_getter.h
+++ b/ios/web/shell/shell_url_request_context_getter.h
@@ -5,11 +5,12 @@
 #ifndef IOS_WEB_SHELL_SHELL_URL_REQUEST_CONTEXT_GETTER_H_
 #define IOS_WEB_SHELL_SHELL_URL_REQUEST_CONTEXT_GETTER_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/single_thread_task_runner.h"
 #include "net/url_request/url_request_context_getter.h"
 
@@ -47,12 +48,13 @@
   scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> cache_task_runner_;
-  scoped_ptr<net::ProxyConfigService> proxy_config_service_;
-  scoped_ptr<net::NetworkDelegate> network_delegate_;
-  scoped_ptr<net::URLRequestContextStorage> storage_;
-  scoped_ptr<net::URLRequestContext> url_request_context_;
-  scoped_ptr<net::NetLog> net_log_;
-  scoped_ptr<net::TransportSecurityPersister> transport_security_persister_;
+  std::unique_ptr<net::ProxyConfigService> proxy_config_service_;
+  std::unique_ptr<net::NetworkDelegate> network_delegate_;
+  std::unique_ptr<net::URLRequestContextStorage> storage_;
+  std::unique_ptr<net::URLRequestContext> url_request_context_;
+  std::unique_ptr<net::NetLog> net_log_;
+  std::unique_ptr<net::TransportSecurityPersister>
+      transport_security_persister_;
 
   DISALLOW_COPY_AND_ASSIGN(ShellURLRequestContextGetter);
 };
diff --git a/ios/web/shell/shell_url_request_context_getter.mm b/ios/web/shell/shell_url_request_context_getter.mm
index e93a2e6..1a352fb3 100644
--- a/ios/web/shell/shell_url_request_context_getter.mm
+++ b/ios/web/shell/shell_url_request_context_getter.mm
@@ -4,12 +4,13 @@
 
 #include "ios/web/shell/shell_url_request_context_getter.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/base_paths.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
 #include "base/threading/worker_pool.h"
 #include "ios/net/cookies/cookie_store_ios.h"
@@ -77,13 +78,13 @@
             web::WebThread::GetBlockingPool()->GetSequencedTaskRunner(
                 web::WebThread::GetBlockingPool()->GetSequenceToken()),
             true, nullptr);
-    scoped_ptr<net::CookieStoreIOS> cookie_store(
+    std::unique_ptr<net::CookieStoreIOS> cookie_store(
         new net::CookieStoreIOS(persistent_store.get()));
     net::CookieStoreIOS::SwitchSynchronizedStore(nullptr, cookie_store.get());
     storage_->set_cookie_store(std::move(cookie_store));
 
     std::string user_agent = web::GetWebClient()->GetUserAgent(false);
-    storage_->set_http_user_agent_settings(make_scoped_ptr(
+    storage_->set_http_user_agent_settings(base::WrapUnique(
         new net::StaticHttpUserAgentSettings("en-us,en", user_agent)));
     storage_->set_proxy_service(
         net::ProxyService::CreateUsingSystemProxyResolver(
@@ -93,17 +94,18 @@
     storage_->set_cert_verifier(net::CertVerifier::CreateDefault());
 
     storage_->set_transport_security_state(
-        make_scoped_ptr(new net::TransportSecurityState()));
+        base::WrapUnique(new net::TransportSecurityState()));
     transport_security_persister_.reset(new net::TransportSecurityPersister(
         url_request_context_->transport_security_state(), base_path_,
         file_task_runner_, false));
-    storage_->set_channel_id_service(make_scoped_ptr(
+    storage_->set_channel_id_service(base::WrapUnique(
         new net::ChannelIDService(new net::DefaultChannelIDStore(nullptr),
                                   base::WorkerPool::GetTaskRunner(true))));
-    storage_->set_http_server_properties(scoped_ptr<net::HttpServerProperties>(
-        new net::HttpServerPropertiesImpl()));
+    storage_->set_http_server_properties(
+        std::unique_ptr<net::HttpServerProperties>(
+            new net::HttpServerPropertiesImpl()));
 
-    scoped_ptr<net::HostResolver> host_resolver(
+    std::unique_ptr<net::HostResolver> host_resolver(
         net::HostResolver::CreateDefaultResolver(
             url_request_context_->net_log()));
     storage_->set_http_auth_handler_factory(
@@ -130,21 +132,21 @@
         url_request_context_->host_resolver();
 
     base::FilePath cache_path = base_path_.Append(FILE_PATH_LITERAL("Cache"));
-    scoped_ptr<net::HttpCache::DefaultBackend> main_backend(
+    std::unique_ptr<net::HttpCache::DefaultBackend> main_backend(
         new net::HttpCache::DefaultBackend(net::DISK_CACHE,
                                            net::CACHE_BACKEND_DEFAULT,
                                            cache_path, 0, cache_task_runner_));
 
     storage_->set_http_network_session(
-        make_scoped_ptr(new net::HttpNetworkSession(network_session_params)));
-    storage_->set_http_transaction_factory(make_scoped_ptr(new net::HttpCache(
+        base::WrapUnique(new net::HttpNetworkSession(network_session_params)));
+    storage_->set_http_transaction_factory(base::WrapUnique(new net::HttpCache(
         storage_->http_network_session(), std::move(main_backend),
         true /* set_up_quic_server_info */)));
 
-    scoped_ptr<net::URLRequestJobFactoryImpl> job_factory(
+    std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory(
         new net::URLRequestJobFactoryImpl());
     bool set_protocol = job_factory->SetProtocolHandler(
-        "data", make_scoped_ptr(new net::DataProtocolHandler));
+        "data", base::WrapUnique(new net::DataProtocolHandler));
     DCHECK(set_protocol);
 
     storage_->set_job_factory(std::move(job_factory));
diff --git a/ios/web/shell/shell_web_client.h b/ios/web/shell/shell_web_client.h
index 85ad1e4..0f26919 100644
--- a/ios/web/shell/shell_web_client.h
+++ b/ios/web/shell/shell_web_client.h
@@ -5,9 +5,10 @@
 #ifndef IOS_WEB_SHELL_SHELL_WEB_CLIENT_H_
 #define IOS_WEB_SHELL_SHELL_WEB_CLIENT_H_
 
+#include <memory>
+
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "ios/web/public/web_client.h"
 
 namespace web {
@@ -27,7 +28,7 @@
   ShellBrowserState* browser_state() const;
 
  private:
-  scoped_ptr<ShellWebMainParts> web_main_parts_;
+  std::unique_ptr<ShellWebMainParts> web_main_parts_;
 
   DISALLOW_COPY_AND_ASSIGN(ShellWebClient);
 };
diff --git a/ios/web/shell/shell_web_main_parts.h b/ios/web/shell/shell_web_main_parts.h
index 6b6f001e..2cd6a87f 100644
--- a/ios/web/shell/shell_web_main_parts.h
+++ b/ios/web/shell/shell_web_main_parts.h
@@ -5,9 +5,10 @@
 #ifndef IOS_WEB_SHELL_SHELL_WEB_MAIN_PARTS_H_
 #define IOS_WEB_SHELL_SHELL_WEB_MAIN_PARTS_H_
 
+#include <memory>
+
 #include "ios/web/public/app/web_main_parts.h"
 
-#include "base/memory/scoped_ptr.h"
 
 namespace web {
 class ShellBrowserState;
@@ -24,7 +25,7 @@
   void PreMainMessageLoopRun() override;
 
  private:
-  scoped_ptr<ShellBrowserState> browser_state_;
+  std::unique_ptr<ShellBrowserState> browser_state_;
 };
 
 }  // namespace web
diff --git a/ios/web/shell/view_controller.mm b/ios/web/shell/view_controller.mm
index 98ebd10a..5bf37c5 100644
--- a/ios/web/shell/view_controller.mm
+++ b/ios/web/shell/view_controller.mm
@@ -6,11 +6,11 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <utility>
 
 #include "base/mac/objc_property_releaser.h"
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/sys_string_conversions.h"
 #include "ios/net/cookies/cookie_store_ios.h"
 #import "ios/net/crn_http_protocol_handler.h"
@@ -33,7 +33,7 @@
 @interface ViewController ()<CRWWebStateObserver> {
   web::BrowserState* _browserState;
   base::scoped_nsobject<CRWWebController> _webController;
-  scoped_ptr<web::WebStateObserverBridge> _webStateObserver;
+  std::unique_ptr<web::WebStateObserverBridge> _webStateObserver;
 
   base::mac::ObjCPropertyReleaser _propertyReleaser_ViewController;
 }
@@ -110,7 +110,8 @@
   // Set up the network stack before creating the WebState.
   [self setUpNetworkStack];
 
-  scoped_ptr<web::WebStateImpl> webState(new web::WebStateImpl(_browserState));
+  std::unique_ptr<web::WebStateImpl> webState(
+      new web::WebStateImpl(_browserState));
   webState->GetNavigationManagerImpl().InitializeSession(nil, nil, NO, 0);
   _webController.reset(web::CreateWebController(std::move(webState)));
   [_webController setDelegate:self];
diff --git a/ios/web/test/web_test.mm b/ios/web/test/web_test.mm
index fb43ada..0ef56ead 100644
--- a/ios/web/test/web_test.mm
+++ b/ios/web/test/web_test.mm
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/base64.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/stringprintf.h"
 #import "base/test/ios/wait_util.h"
 #import "ios/testing/ocmock_complex_type_helper.h"
@@ -36,7 +37,7 @@
 
 #pragma mark -
 
-WebTest::WebTest() : web_client_(make_scoped_ptr(new TestWebClient)) {}
+WebTest::WebTest() : web_client_(base::WrapUnique(new TestWebClient)) {}
 WebTest::~WebTest() {}
 
 void WebTest::SetUp() {
@@ -219,7 +220,8 @@
 }
 
 CRWWebController* WebTestWithWebController::CreateWebController() {
-  scoped_ptr<WebStateImpl> web_state_impl(new WebStateImpl(GetBrowserState()));
+  std::unique_ptr<WebStateImpl> web_state_impl(
+      new WebStateImpl(GetBrowserState()));
   return [[CRWWKWebViewWebController alloc]
       initWithWebState:std::move(web_state_impl)];
 }
diff --git a/ios/web/web_state/crw_pass_kit_downloader.mm b/ios/web/web_state/crw_pass_kit_downloader.mm
index 1b61538..15b6012 100644
--- a/ios/web/web_state/crw_pass_kit_downloader.mm
+++ b/ios/web/web_state/crw_pass_kit_downloader.mm
@@ -4,10 +4,11 @@
 
 #import "ios/web/web_state/crw_pass_kit_downloader.h"
 
+#include <memory>
+
 #import "base/ios/weak_nsobject.h"
 #include "base/mac/scoped_block.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/sys_string_conversions.h"
 #import "ios/web/crw_network_activity_indicator_manager.h"
@@ -86,10 +87,10 @@
 
   // URLFetcher with which PassKit data is downloaded. It is initialized
   // whenever |downloadPassKitFileWithURL| is called.
-  scoped_ptr<URLFetcher> _fetcher;
+  std::unique_ptr<URLFetcher> _fetcher;
 
   // Delegate to bridge between URLFetcher callback and CRWPassKitDownlaoder.
-  scoped_ptr<PassKitFetcherDelegate> _fetcherDelegate;
+  std::unique_ptr<PassKitFetcherDelegate> _fetcherDelegate;
 
   // Context getter which is passed to the URLFetcher, as required by
   // URLFetcher API.
diff --git a/ios/web/web_state/crw_pass_kit_downloader_unittest.mm b/ios/web/web_state/crw_pass_kit_downloader_unittest.mm
index c65b238..b7bf7ac 100644
--- a/ios/web/web_state/crw_pass_kit_downloader_unittest.mm
+++ b/ios/web/web_state/crw_pass_kit_downloader_unittest.mm
@@ -6,8 +6,9 @@
 
 #import <Foundation/Foundation.h>
 
+#include <memory>
+
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #import "ios/web/test/web_test.h"
 #include "net/base/net_errors.h"
 #include "net/http/http_response_headers.h"
@@ -63,7 +64,7 @@
 
   // Test fetcher factory from which we access and control the URLFetcher
   // used in CRWPassKitDownloader.
-  scoped_ptr<net::TestURLFetcherFactory> fetcher_factory_;
+  std::unique_ptr<net::TestURLFetcherFactory> fetcher_factory_;
 
   // The CRWPassKitDownloader that is being tested.
   base::scoped_nsobject<CRWPassKitDownloader> downloader_;
diff --git a/ios/web/web_state/js/credential_util_unittest.mm b/ios/web/web_state/js/credential_util_unittest.mm
index 92d8e66eb..5716660 100644
--- a/ios/web/web_state/js/credential_util_unittest.mm
+++ b/ios/web/web_state/js/credential_util_unittest.mm
@@ -4,7 +4,9 @@
 
 #include "ios/web/public/web_state/js/credential_util.h"
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
+#include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "ios/web/public/web_state/credential.h"
@@ -64,8 +66,9 @@
 
 // Returns a value representing the credential returned by
 // |GetTestPasswordCredential()|.
-scoped_ptr<base::DictionaryValue> GetTestPasswordCredentialDictionaryValue() {
-  scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+std::unique_ptr<base::DictionaryValue>
+GetTestPasswordCredentialDictionaryValue() {
+  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue);
   value->SetString("type", kTestCredentialTypePassword);
   value->SetString("id", kTestCredentialID);
   value->SetString("name", kTestCredentialName);
@@ -76,8 +79,9 @@
 
 // Returns a value representing the credential returned by
 // |GetTestFederatedCredentialDictionaryValue()|.
-scoped_ptr<base::DictionaryValue> GetTestFederatedCredentialDictionaryValue() {
-  scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+std::unique_ptr<base::DictionaryValue>
+GetTestFederatedCredentialDictionaryValue() {
+  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue);
   value->SetString("type", kTestCredentialTypeFederated);
   value->SetString("id", kTestCredentialID);
   value->SetString("name", kTestCredentialName);
@@ -96,7 +100,7 @@
 
 // Tests that parsing a value with a bad type fails.
 TEST(CredentialUtilTest, ParsingValueWithBadTypeFails) {
-  scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue);
   value->SetString("type", "FooCredential");
   Credential credential;
   EXPECT_FALSE(DictionaryValueToCredential(*value, &credential));
@@ -114,7 +118,7 @@
 // Tests that parsing a value representing a PasswordCredential but with no ID
 // specified fails.
 TEST(CredentialUtilTest, ParsingPasswordCredentialWithNoIDFails) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       GetTestPasswordCredentialDictionaryValue());
   value->RemoveWithoutPathExpansion("id", nullptr);
   Credential credential;
@@ -124,7 +128,7 @@
 // Tests that parsing a value representing a PasswordCredential with a badly-
 // formed avatarURL fails.
 TEST(CredentialUtilTest, ParsingPasswordCredentialWithBadAvatarURLFails) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       GetTestPasswordCredentialDictionaryValue());
   value->SetString("avatarURL", "foo");
   Credential credential;
@@ -134,7 +138,7 @@
 // Tests that parsing a value representing a PasswordCredential with no password
 // specified fails.
 TEST(CredentialUtilTest, ParsingPasswordCredentialWithNoPasswordFails) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       GetTestPasswordCredentialDictionaryValue());
   value->Remove("password", nullptr);
   Credential credential;
@@ -153,7 +157,7 @@
 // Tests that parsing a value representing a FederatedCredential with no ID
 // fails.
 TEST(CredentialUtilTest, ParsingFederatedCredentialWithNoIDFails) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       GetTestFederatedCredentialDictionaryValue());
   value->RemoveWithoutPathExpansion("id", nullptr);
   Credential credential;
@@ -163,7 +167,7 @@
 // Tests that parsing a value representing a FederatedCredential with a badly-
 // formed avatarURL fails.
 TEST(CredentialUtilTest, ParsingFederatedCredentialWithBadAvatarURLFails) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       GetTestFederatedCredentialDictionaryValue());
   value->SetString("avatarURL", "foo");
   Credential credential;
@@ -173,7 +177,7 @@
 // Tests that parsing a value representing a FederatedCredential with no
 // federation URL fails.
 TEST(CredentialUtilTest, ParsingFederatedValueWithNoFederationURLFails) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       GetTestFederatedCredentialDictionaryValue());
   value->Remove("federation", nullptr);
   Credential credential;
@@ -183,7 +187,7 @@
 // Tests that parsing a value representing a FederatedCredential with a badly-
 // formed federationURL fails.
 TEST(CredentialUtilTest, ParsingFederatedValueWithBadFederationURLFails) {
-  scoped_ptr<base::DictionaryValue> value(
+  std::unique_ptr<base::DictionaryValue> value(
       GetTestFederatedCredentialDictionaryValue());
   value->SetString("federation", "bar");
   Credential credential;
@@ -213,7 +217,7 @@
   base::DictionaryValue value;
   Credential credential;
   CredentialToDictionaryValue(credential, &value);
-  EXPECT_TRUE(make_scoped_ptr(new base::DictionaryValue)->Equals(&value));
+  EXPECT_TRUE(base::WrapUnique(new base::DictionaryValue)->Equals(&value));
 }
 
 TEST(CredentialUtilTest, SerializeEmptyCredentialIntoNonEmptyDictionary) {
@@ -221,7 +225,7 @@
   value.SetString("foo", "bar");
   Credential credential;
   CredentialToDictionaryValue(credential, &value);
-  EXPECT_TRUE(make_scoped_ptr(new base::DictionaryValue)->Equals(&value));
+  EXPECT_TRUE(base::WrapUnique(new base::DictionaryValue)->Equals(&value));
 }
 
 }  // namespace
diff --git a/ios/web/web_state/js/crw_js_early_script_manager_unittest.mm b/ios/web/web_state/js/crw_js_early_script_manager_unittest.mm
index c06ad6e..ef5f5a6fa 100644
--- a/ios/web/web_state/js/crw_js_early_script_manager_unittest.mm
+++ b/ios/web/web_state/js/crw_js_early_script_manager_unittest.mm
@@ -5,6 +5,7 @@
 #import "ios/web/web_state/js/crw_js_early_script_manager.h"
 
 #include "base/mac/scoped_nsobject.h"
+#include "base/memory/ptr_util.h"
 #import "ios/web/public/test/crw_test_js_injection_receiver.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
 #include "ios/web/public/web_client.h"
@@ -17,7 +18,8 @@
 
 class CRWJSEarlyScriptManagerTest : public PlatformTest {
  public:
-  CRWJSEarlyScriptManagerTest() : web_client_(make_scoped_ptr(new WebClient)) {}
+  CRWJSEarlyScriptManagerTest()
+      : web_client_(base::WrapUnique(new WebClient)) {}
 
  protected:
   void SetUp() override {
diff --git a/ios/web/web_state/js/crw_js_window_id_manager_unittest.mm b/ios/web/web_state/js/crw_js_window_id_manager_unittest.mm
index 758855c8..040e656 100644
--- a/ios/web/web_state/js/crw_js_window_id_manager_unittest.mm
+++ b/ios/web/web_state/js/crw_js_window_id_manager_unittest.mm
@@ -5,6 +5,7 @@
 #import "ios/web/web_state/js/crw_js_window_id_manager.h"
 
 #include "base/mac/scoped_nsobject.h"
+#include "base/memory/ptr_util.h"
 #import "ios/web/public/test/crw_test_js_injection_receiver.h"
 #import "ios/web/public/test/js_test_util.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
@@ -16,7 +17,7 @@
 
 class JSWindowIDManagerTest : public PlatformTest {
  public:
-  JSWindowIDManagerTest() : web_client_(make_scoped_ptr(new web::WebClient)) {}
+  JSWindowIDManagerTest() : web_client_(base::WrapUnique(new web::WebClient)) {}
 
  protected:
   void SetUp() override {
diff --git a/ios/web/web_state/ui/crw_web_controller+protected.h b/ios/web/web_state/ui/crw_web_controller+protected.h
index a1105cc48..a0ee53b 100644
--- a/ios/web/web_state/ui/crw_web_controller+protected.h
+++ b/ios/web/web_state/ui/crw_web_controller+protected.h
@@ -9,6 +9,8 @@
 
 #import <WebKit/WebKit.h>
 
+#include <memory>
+
 #include "base/mac/scoped_nsobject.h"
 #import "ios/web/public/navigation_manager.h"
 #include "ios/web/public/referrer.h"
@@ -80,7 +82,7 @@
 @property(nonatomic, readonly) CRWPassKitDownloader* passKitDownloader;
 
 // Designated initializer.
-- (instancetype)initWithWebState:(scoped_ptr<web::WebStateImpl>)webState;
+- (instancetype)initWithWebState:(std::unique_ptr<web::WebStateImpl>)webState;
 
 // Creates a web view if it's not yet created.
 - (void)ensureWebViewCreated;
diff --git a/ios/web/web_state/ui/crw_web_controller.h b/ios/web/web_state/ui/crw_web_controller.h
index 1448f1f..582485d 100644
--- a/ios/web/web_state/ui/crw_web_controller.h
+++ b/ios/web/web_state/ui/crw_web_controller.h
@@ -7,7 +7,6 @@
 
 #import <UIKit/UIKit.h>
 
-#include "base/memory/scoped_ptr.h"
 #import "ios/web/net/crw_request_tracker_delegate.h"
 #import "ios/web/public/navigation_manager.h"
 #import "ios/web/public/web_state/crw_web_user_interface_delegate.h"
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 7af8b46..1fa5259 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -8,6 +8,7 @@
 #include <stddef.h>
 
 #include <cmath>
+#include <memory>
 #include <utility>
 
 #include "base/ios/block_types.h"
@@ -22,7 +23,6 @@
 #include "base/mac/objc_property_releaser.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/string_util.h"
@@ -45,8 +45,8 @@
 #include "ios/web/net/request_group_util.h"
 #include "ios/web/public/browser_state.h"
 #include "ios/web/public/favicon_url.h"
-#import "ios/web/public/navigation_manager.h"
 #include "ios/web/public/navigation_item.h"
+#import "ios/web/public/navigation_manager.h"
 #include "ios/web/public/referrer.h"
 #include "ios/web/public/referrer_util.h"
 #include "ios/web/public/ssl_status.h"
@@ -71,10 +71,10 @@
 #import "ios/web/web_state/crw_web_view_proxy_impl.h"
 #import "ios/web/web_state/error_translation_util.h"
 #include "ios/web/web_state/frame_info.h"
-#import "ios/web/web_state/page_viewport_state.h"
 #import "ios/web/web_state/js/crw_js_early_script_manager.h"
 #import "ios/web/web_state/js/crw_js_plugin_placeholder_manager.h"
 #import "ios/web/web_state/js/crw_js_window_id_manager.h"
+#import "ios/web/web_state/page_viewport_state.h"
 #import "ios/web/web_state/ui/crw_context_menu_provider.h"
 #import "ios/web/web_state/ui/crw_swipe_recognizer_provider.h"
 #import "ios/web/web_state/ui/crw_web_controller+protected.h"
@@ -247,11 +247,11 @@
   // because retreiving DOM element relies on async API so element info can not
   // be built on demand. May contain the following keys: "href", "src", "title",
   // "referrerPolicy". All values are strings. Used for showing context menus.
-  scoped_ptr<base::DictionaryValue> _DOMElementForLastTouch;
+  std::unique_ptr<base::DictionaryValue> _DOMElementForLastTouch;
   // Whether a click is in progress.
   BOOL _clickInProgress;
   // Data on the recorded last user interaction.
-  scoped_ptr<web::UserInteractionEvent> _lastUserInteraction;
+  std::unique_ptr<web::UserInteractionEvent> _lastUserInteraction;
   // YES if there has been user interaction with views owned by this controller.
   BOOL _userInteractedWithWebController;
   // The time of the last page transfer start, measured in seconds since Jan 1
@@ -275,10 +275,10 @@
   // window.history.didPushState or window.history.didReplaceState.
   BOOL _changingHistoryState;
 
-  scoped_ptr<web::NewWindowInfo> _externalRequest;
+  std::unique_ptr<web::NewWindowInfo> _externalRequest;
 
   // The WebStateImpl instance associated with this CRWWebController.
-  scoped_ptr<WebStateImpl> _webStateImpl;
+  std::unique_ptr<WebStateImpl> _webStateImpl;
 
   // A set of URLs opened in external applications; stored so that errors
   // from the web view can be identified as resulting from these events.
@@ -350,7 +350,8 @@
 // way to run the evaluation or the evaluation returns a nil value) or an
 // NSError if there is an error. The |handler| can be nil.
 - (void)evaluateJavaScript:(NSString*)script
-         JSONResultHandler:(void (^)(scoped_ptr<base::Value>, NSError*))handler;
+         JSONResultHandler:
+             (void (^)(std::unique_ptr<base::Value>, NSError*))handler;
 // Attempts to handle a script message. Returns YES on success, NO otherwise.
 - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage;
 // Generates the JavaScript string used to update the UIWebView's URL so that it
@@ -397,12 +398,13 @@
 // for element format description.
 - (void)fetchDOMElementAtPoint:(CGPoint)point
              completionHandler:
-                 (void (^)(scoped_ptr<base::DictionaryValue>))handler;
+                 (void (^)(std::unique_ptr<base::DictionaryValue>))handler;
 // Extracts context menu information from the given DOM element.
 // result keys are defined in crw_context_menu_provider.h.
 - (NSDictionary*)contextMenuInfoForElement:(base::DictionaryValue*)element;
 // Sets the value of |_DOMElementForLastTouch|.
-- (void)setDOMElementForLastTouch:(scoped_ptr<base::DictionaryValue>)element;
+- (void)setDOMElementForLastTouch:
+    (std::unique_ptr<base::DictionaryValue>)element;
 // Called when the window has determined there was a long-press and context menu
 // must be shown.
 - (void)showContextMenu:(UIGestureRecognizer*)gestureRecognizer;
@@ -576,7 +578,7 @@
   return [super allocWithZone:zone];
 }
 
-- (instancetype)initWithWebState:(scoped_ptr<WebStateImpl>)webState {
+- (instancetype)initWithWebState:(std::unique_ptr<WebStateImpl>)webState {
   self = [super init];
   if (self) {
     _webStateImpl = std::move(webState);
@@ -880,16 +882,18 @@
                     completionHandler:(void (^)(BOOL))completionHandler {
   CGPoint webViewPoint = [gestureRecognizer locationInView:self.webView];
   base::WeakNSObject<CRWWebController> weakSelf(self);
-  [self fetchDOMElementAtPoint:webViewPoint
-             completionHandler:^(scoped_ptr<base::DictionaryValue> element) {
-               std::string link;
-               BOOL hasLink =
-                   element && element->GetString("href", &link) && link.size();
-               completionHandler(hasLink);
-             }];
+  [self
+      fetchDOMElementAtPoint:webViewPoint
+           completionHandler:^(std::unique_ptr<base::DictionaryValue> element) {
+             std::string link;
+             BOOL hasLink =
+                 element && element->GetString("href", &link) && link.size();
+             completionHandler(hasLink);
+           }];
 }
 
-- (void)setDOMElementForLastTouch:(scoped_ptr<base::DictionaryValue>)element {
+- (void)setDOMElementForLastTouch:
+    (std::unique_ptr<base::DictionaryValue>)element {
   _DOMElementForLastTouch = std::move(element);
 }
 
@@ -1854,12 +1858,12 @@
 
 - (void)evaluateJavaScript:(NSString*)script
          JSONResultHandler:
-             (void (^)(scoped_ptr<base::Value>, NSError*))handler {
+             (void (^)(std::unique_ptr<base::Value>, NSError*))handler {
   [self evaluateJavaScript:script
        stringResultHandler:^(NSString* stringResult, NSError* error) {
          DCHECK(stringResult || error);
          if (handler) {
-           scoped_ptr<base::Value> result(
+           std::unique_ptr<base::Value> result(
                base::JSONReader::Read(base::SysNSStringToUTF8(stringResult)));
            handler(std::move(result), error);
          }
@@ -2133,9 +2137,10 @@
   CHECK(scriptMessage.frameInfo.mainFrame);
   int errorCode = 0;
   std::string errorMessage;
-  scoped_ptr<base::Value> inputJSONData(base::JSONReader::ReadAndReturnError(
-      base::SysNSStringToUTF8(scriptMessage.body), false, &errorCode,
-      &errorMessage));
+  std::unique_ptr<base::Value> inputJSONData(
+      base::JSONReader::ReadAndReturnError(
+          base::SysNSStringToUTF8(scriptMessage.body), false, &errorCode,
+          &errorMessage));
   if (errorCode) {
     DLOG(WARNING) << "JSON parse error: %s" << errorMessage.c_str();
     return NO;
@@ -3042,10 +3047,11 @@
   // fetched - system context menu will be shown.
   [self setDOMElementForLastTouch:nullptr];
   base::WeakNSObject<CRWWebController> weakSelf(self);
-  [self fetchDOMElementAtPoint:[touch locationInView:self.webView]
-             completionHandler:^(scoped_ptr<base::DictionaryValue> element) {
-               [weakSelf setDOMElementForLastTouch:std::move(element)];
-             }];
+  [self
+      fetchDOMElementAtPoint:[touch locationInView:self.webView]
+           completionHandler:^(std::unique_ptr<base::DictionaryValue> element) {
+             [weakSelf setDOMElementForLastTouch:std::move(element)];
+           }];
   return YES;
 }
 
@@ -3604,7 +3610,7 @@
 
 - (void)fetchDOMElementAtPoint:(CGPoint)point
              completionHandler:
-                 (void (^)(scoped_ptr<base::DictionaryValue>))handler {
+                 (void (^)(std::unique_ptr<base::DictionaryValue>))handler {
   DCHECK(handler);
   // Convert point into web page's coordinate system (which may be scaled and/or
   // scrolled).
@@ -3618,20 +3624,21 @@
     NSString* const kGetElementScript =
         [NSString stringWithFormat:@"__gCrWeb.getElementFromPoint(%g, %g);",
                                    localPoint.x, localPoint.y];
-    [weakSelf evaluateJavaScript:kGetElementScript
-               JSONResultHandler:^(scoped_ptr<base::Value> element, NSError*) {
-                 // Release raw element and call handler with DictionaryValue.
-                 scoped_ptr<base::DictionaryValue> elementAsDict;
-                 if (element) {
-                   base::DictionaryValue* elementAsDictPtr = nullptr;
-                   element.release()->GetAsDictionary(&elementAsDictPtr);
-                   // |rawElement| and |elementPtr| now point to the same
-                   // memory. |elementPtr| ownership will be transferred to
-                   // |element| scoped_ptr.
-                   elementAsDict.reset(elementAsDictPtr);
-                 }
-                 handler(std::move(elementAsDict));
-               }];
+    [weakSelf
+        evaluateJavaScript:kGetElementScript
+         JSONResultHandler:^(std::unique_ptr<base::Value> element, NSError*) {
+           // Release raw element and call handler with DictionaryValue.
+           std::unique_ptr<base::DictionaryValue> elementAsDict;
+           if (element) {
+             base::DictionaryValue* elementAsDictPtr = nullptr;
+             element.release()->GetAsDictionary(&elementAsDictPtr);
+             // |rawElement| and |elementPtr| now point to the same
+             // memory. |elementPtr| ownership will be transferred to
+             // |element| scoped_ptr.
+             elementAsDict.reset(elementAsDictPtr);
+           }
+           handler(std::move(elementAsDict));
+         }];
   }];
 }
 
diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm
index a6d426a9..ffa44dad 100644
--- a/ios/web/web_state/ui/crw_web_controller_unittest.mm
+++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
@@ -151,7 +151,7 @@
 
 @implementation MockInteractionLoader {
   // Backs up the property with the same name.
-  scoped_ptr<web::BlockedPopupInfo> _blockedPopupInfo;
+  std::unique_ptr<web::BlockedPopupInfo> _blockedPopupInfo;
 }
 @synthesize popupURL = _popupURL;
 @synthesize sourceURL = _sourceURL;
diff --git a/ios/web/web_state/ui/crw_wk_script_message_router_unittest.mm b/ios/web/web_state/ui/crw_wk_script_message_router_unittest.mm
index 2e91f43..0f25615 100644
--- a/ios/web/web_state/ui/crw_wk_script_message_router_unittest.mm
+++ b/ios/web/web_state/ui/crw_wk_script_message_router_unittest.mm
@@ -6,6 +6,7 @@
 
 #include "base/mac/scoped_block.h"
 #include "base/mac/scoped_nsobject.h"
+#include "base/memory/ptr_util.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
 #include "ios/web/public/test/test_browser_state.h"
 #import "ios/web/public/test/test_web_client.h"
@@ -28,7 +29,7 @@
 class CRWWKScriptMessageRouterTest : public web::WebTest {
  public:
   CRWWKScriptMessageRouterTest()
-      : web_client_(make_scoped_ptr(new web::WebClient)) {}
+      : web_client_(base::WrapUnique(new web::WebClient)) {}
 
  protected:
   void SetUp() override {
diff --git a/ios/web/web_state/ui/crw_wk_web_view_web_controller.h b/ios/web/web_state/ui/crw_wk_web_view_web_controller.h
index 394f446..44eef2d2 100644
--- a/ios/web/web_state/ui/crw_wk_web_view_web_controller.h
+++ b/ios/web/web_state/ui/crw_wk_web_view_web_controller.h
@@ -7,11 +7,13 @@
 
 #import "ios/web/web_state/ui/crw_web_controller.h"
 
+#include <memory>
+
 // A concrete implementation of CRWWebController based on WKWebView.
 @interface CRWWKWebViewWebController : CRWWebController
 
 // Designated initializer.
-- (instancetype)initWithWebState:(scoped_ptr<web::WebStateImpl>)webState;
+- (instancetype)initWithWebState:(std::unique_ptr<web::WebStateImpl>)webState;
 
 @end
 
diff --git a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
index 884a4a00..ece3a51c 100644
--- a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
+++ b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
@@ -190,7 +190,7 @@
   // Key is leaf-cert/host pair. This storage is used to carry calculated
   // cert status from |didReceiveAuthenticationChallenge:| to
   // |didFailProvisionalNavigation:| delegate method.
-  scoped_ptr<CertVerificationErrorsCacheType> _certVerificationErrors;
+  std::unique_ptr<CertVerificationErrorsCacheType> _certVerificationErrors;
 
   // YES if the user has interacted with the content area since the last URL
   // change.
@@ -352,7 +352,7 @@
 
 #pragma mark CRWWebController public methods
 
-- (instancetype)initWithWebState:(scoped_ptr<web::WebStateImpl>)webState {
+- (instancetype)initWithWebState:(std::unique_ptr<web::WebStateImpl>)webState {
   DCHECK(webState);
   web::BrowserState* browserState = webState->GetBrowserState();
   self = [super initWithWebState:std::move(webState)];
diff --git a/ios/web/web_state/ui/wk_back_forward_list_item_holder_unittest.mm b/ios/web/web_state/ui/wk_back_forward_list_item_holder_unittest.mm
index 8be0bdcf..e293335e 100644
--- a/ios/web/web_state/ui/wk_back_forward_list_item_holder_unittest.mm
+++ b/ios/web/web_state/ui/wk_back_forward_list_item_holder_unittest.mm
@@ -20,7 +20,7 @@
 // Tests that FromNavigationItem returns the same holder for the same
 // NavigationItem.
 TEST_F(WKBackForwardListItemHolderTest, GetHolderFromNavigationItem) {
-  scoped_ptr<web::NavigationItem> item(NavigationItem::Create());
+  std::unique_ptr<web::NavigationItem> item(NavigationItem::Create());
   WKBackForwardListItemHolder* holder1 =
       WKBackForwardListItemHolder::FromNavigationItem(item.get());
   WKBackForwardListItemHolder* holder2 =
@@ -32,8 +32,8 @@
 // NavigationItem objects.
 TEST_F(WKBackForwardListItemHolderTest, GetHolderFromDifferentNavigationItem) {
   // Create two NavigationItem objects.
-  scoped_ptr<web::NavigationItem> item1(NavigationItem::Create());
-  scoped_ptr<web::NavigationItem> item2(NavigationItem::Create());
+  std::unique_ptr<web::NavigationItem> item1(NavigationItem::Create());
+  std::unique_ptr<web::NavigationItem> item2(NavigationItem::Create());
   EXPECT_NE(item1.get(), item2.get());
 
   // Verify that the two objects have different holders.
@@ -49,7 +49,7 @@
 // because WKBackForwardListItem alloc/release is not designed to be called
 // directly and will crash.
 TEST_F(WKBackForwardListItemHolderTest, GetBackForwardListItemFromHolder) {
-  scoped_ptr<web::NavigationItem> item(NavigationItem::Create());
+  std::unique_ptr<web::NavigationItem> item(NavigationItem::Create());
   base::scoped_nsobject<NSObject> input([[NSObject alloc] init]);
   WKBackForwardListItemHolder* holder =
       WKBackForwardListItemHolder::FromNavigationItem(item.get());
@@ -61,7 +61,7 @@
 
 // Tests that acessors for navigation type work as expected.
 TEST_F(WKBackForwardListItemHolderTest, GetNavigationTypeFromHolder) {
-  scoped_ptr<web::NavigationItem> item(NavigationItem::Create());
+  std::unique_ptr<web::NavigationItem> item(NavigationItem::Create());
   WKBackForwardListItemHolder* holder =
       WKBackForwardListItemHolder::FromNavigationItem(item.get());
 
@@ -107,7 +107,7 @@
 // instead of WKBackForwardListItem because WKBackForwardListItem alloc/
 // release is not designed to be called directly and will crash.
 TEST_F(WKBackForwardListItemHolderTest, GetNilBackForwardListItemFromHolder) {
-  scoped_ptr<web::NavigationItem> item(NavigationItem::Create());
+  std::unique_ptr<web::NavigationItem> item(NavigationItem::Create());
   WKBackForwardListItemHolder* holder =
       WKBackForwardListItemHolder::FromNavigationItem(item.get());
 
diff --git a/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm b/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm
index 70c0bee2..8196b96 100644
--- a/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm
+++ b/ios/web/web_state/ui/wk_web_view_configuration_provider_unittest.mm
@@ -7,6 +7,7 @@
 #import <WebKit/WebKit.h>
 
 #import "base/ios/weak_nsobject.h"
+#include "base/memory/ptr_util.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
 #include "ios/web/public/test/test_browser_state.h"
 #include "ios/web/public/web_client.h"
@@ -22,7 +23,7 @@
 class WKWebViewConfigurationProviderTest : public PlatformTest {
  public:
   WKWebViewConfigurationProviderTest()
-      : web_client_(make_scoped_ptr(new web::WebClient)) {}
+      : web_client_(base::WrapUnique(new web::WebClient)) {}
 
  protected:
   // Returns WKWebViewConfigurationProvider associated with |browser_state_|.
diff --git a/ios/web/web_state/web_state_impl.h b/ios/web/web_state/web_state_impl.h
index 7924ae2..5b506bd 100644
--- a/ios/web/web_state/web_state_impl.h
+++ b/ios/web/web_state/web_state_impl.h
@@ -9,12 +9,12 @@
 #include <stdint.h>
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/observer_list.h"
 #include "base/values.h"
 #include "ios/web/navigation/navigation_manager_delegate.h"
@@ -295,7 +295,7 @@
 
   // |web::WebUIIOS| object for the current page if it is a WebUI page that
   // uses the web-based WebUI framework, or nullptr otherwise.
-  scoped_ptr<web::WebUIIOS> web_ui_;
+  std::unique_ptr<web::WebUIIOS> web_ui_;
 
   // A list of observers notified when page state changes. Weak references.
   base::ObserverList<WebStateObserver, true> observers_;
diff --git a/ios/web/web_state/web_state_impl_unittest.mm b/ios/web/web_state/web_state_impl_unittest.mm
index 15bef0a..e946cea 100644
--- a/ios/web/web_state/web_state_impl_unittest.mm
+++ b/ios/web/web_state/web_state_impl_unittest.mm
@@ -2,11 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ios/web/web_state/web_state_impl.h"
+
 #include <stddef.h>
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/values.h"
 #include "ios/web/public/load_committed_details.h"
 #include "ios/web/public/test/test_browser_state.h"
@@ -14,7 +17,6 @@
 #include "ios/web/public/web_state/web_state_observer.h"
 #include "ios/web/public/web_state/web_state_policy_decider.h"
 #include "ios/web/web_state/global_web_state_event_tracker.h"
-#include "ios/web/web_state/web_state_impl.h"
 #include "net/http/http_response_headers.h"
 #include "net/http/http_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -230,7 +232,7 @@
   }
 
   web::TestBrowserState browser_state_;
-  scoped_ptr<WebStateImpl> web_state_;
+  std::unique_ptr<WebStateImpl> web_state_;
 };
 
 TEST_F(WebStateTest, ResponseHeaders) {
@@ -293,7 +295,7 @@
 }
 
 TEST_F(WebStateTest, ObserverTest) {
-  scoped_ptr<TestWebStateObserver> observer(
+  std::unique_ptr<TestWebStateObserver> observer(
       new TestWebStateObserver(web_state_.get()));
   EXPECT_EQ(web_state_.get(), observer->web_state());
 
@@ -345,7 +347,7 @@
 
 // Verifies that GlobalWebStateObservers are called when expected.
 TEST_F(WebStateTest, GlobalObserverTest) {
-  scoped_ptr<TestGlobalWebStateObserver> observer(
+  std::unique_ptr<TestGlobalWebStateObserver> observer(
       new TestGlobalWebStateObserver());
 
   // Test that NavigationItemsPruned() is called.
diff --git a/ios/web/web_state/web_view_internal_creation_util_unittest.mm b/ios/web/web_state/web_view_internal_creation_util_unittest.mm
index fa3a4ec..bac88e85 100644
--- a/ios/web/web_state/web_view_internal_creation_util_unittest.mm
+++ b/ios/web/web_state/web_view_internal_creation_util_unittest.mm
@@ -8,6 +8,7 @@
 #import <WebKit/WebKit.h>
 
 #include "base/mac/scoped_nsobject.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "ios/web/net/request_group_util.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
@@ -36,7 +37,7 @@
 class WebViewCreationUtilsTest : public WebTest {
  public:
   WebViewCreationUtilsTest()
-      : web_client_(make_scoped_ptr(new CreationUtilsWebClient)) {}
+      : web_client_(base::WrapUnique(new CreationUtilsWebClient)) {}
 
  protected:
   CreationUtilsWebClient* creation_utils_web_client() {
diff --git a/ios/web/web_state/wk_web_view_security_util_unittest.mm b/ios/web/web_state/wk_web_view_security_util_unittest.mm
index b785e02..bce18cf7e 100644
--- a/ios/web/web_state/wk_web_view_security_util_unittest.mm
+++ b/ios/web/web_state/wk_web_view_security_util_unittest.mm
@@ -7,8 +7,9 @@
 #import <Foundation/Foundation.h>
 #include <Security/Security.h>
 
+#include <memory>
+
 #include "base/mac/scoped_cftyperef.h"
-#include "base/memory/scoped_ptr.h"
 #include "crypto/rsa_private_key.h"
 #include "net/cert/x509_cert_types.h"
 #include "net/cert/x509_certificate.h"
@@ -28,7 +29,7 @@
 // Returns an autoreleased certificate chain for testing. Chain will contain a
 // single self-signed cert with |subject| as a subject.
 NSArray* MakeTestCertChain(const std::string& subject) {
-  scoped_ptr<crypto::RSAPrivateKey> private_key;
+  std::unique_ptr<crypto::RSAPrivateKey> private_key;
   std::string der_cert;
   net::x509_util::CreateKeyAndSelfSignedCert(
       "CN=" + subject, 1, base::Time::Now(),
diff --git a/ios/web/webui/crw_web_ui_manager.h b/ios/web/webui/crw_web_ui_manager.h
index a4b8053..b9550d2 100644
--- a/ios/web/webui/crw_web_ui_manager.h
+++ b/ios/web/webui/crw_web_ui_manager.h
@@ -7,6 +7,8 @@
 
 #import <Foundation/Foundation.h>
 
+#include <memory>
+
 #import "ios/web/public/web_state/web_state_observer_bridge.h"
 #import "ios/web/webui/url_fetcher_block_adapter.h"
 
@@ -31,9 +33,9 @@
 
 // Returns URLFetcherBlockAdapter for fetching resource for URL. Can be
 // overwritten by test classes to mock resource retrieval.
-- (scoped_ptr<web::URLFetcherBlockAdapter>)
-        fetcherForURL:(const GURL&)URL
-    completionHandler:(web::URLFetcherBlockAdapterCompletion)handler;
+- (std::unique_ptr<web::URLFetcherBlockAdapter>)
+    fetcherForURL:(const GURL&)URL
+completionHandler:(web::URLFetcherBlockAdapterCompletion)handler;
 
 @end
 
diff --git a/ios/web/webui/crw_web_ui_manager.mm b/ios/web/webui/crw_web_ui_manager.mm
index 84cd21a..2a8bd77 100644
--- a/ios/web/webui/crw_web_ui_manager.mm
+++ b/ios/web/webui/crw_web_ui_manager.mm
@@ -52,7 +52,7 @@
   // Set of live WebUI fetchers for retrieving data.
   ScopedVector<web::URLFetcherBlockAdapter> _fetchers;
   // Bridge to observe the web state from Objective-C.
-  scoped_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
+  std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge;
   // Weak WebStateImpl this CRWWebUIManager is associated with.
   web::WebStateImpl* _webState;
 }
@@ -215,10 +215,10 @@
 
 #pragma mark - Testing-Only Methods
 
-- (scoped_ptr<web::URLFetcherBlockAdapter>)
-        fetcherForURL:(const GURL&)URL
-    completionHandler:(web::URLFetcherBlockAdapterCompletion)handler {
-  return scoped_ptr<web::URLFetcherBlockAdapter>(
+- (std::unique_ptr<web::URLFetcherBlockAdapter>)
+    fetcherForURL:(const GURL&)URL
+completionHandler:(web::URLFetcherBlockAdapterCompletion)handler {
+  return std::unique_ptr<web::URLFetcherBlockAdapter>(
       new web::URLFetcherBlockAdapter(
           URL, _webState->GetBrowserState()->GetRequestContext(), handler));
 }
diff --git a/ios/web/webui/crw_web_ui_manager_unittest.mm b/ios/web/webui/crw_web_ui_manager_unittest.mm
index c5fac6f..48528011 100644
--- a/ios/web/webui/crw_web_ui_manager_unittest.mm
+++ b/ios/web/webui/crw_web_ui_manager_unittest.mm
@@ -4,11 +4,13 @@
 
 #import "ios/web/webui/crw_web_ui_manager.h"
 
+#include <memory>
+
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #import "base/mac/scoped_nsobject.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
@@ -93,16 +95,16 @@
 // Subclass of CRWWebUIManager for testing.
 @interface CRWTestWebUIManager : CRWWebUIManager
 // Use mock URLFetcherBlockAdapter.
-- (scoped_ptr<web::URLFetcherBlockAdapter>)
-        fetcherForURL:(const GURL&)URL
-    completionHandler:(web::URLFetcherBlockAdapterCompletion)handler;
+- (std::unique_ptr<web::URLFetcherBlockAdapter>)
+    fetcherForURL:(const GURL&)URL
+completionHandler:(web::URLFetcherBlockAdapterCompletion)handler;
 @end
 
 @implementation CRWTestWebUIManager
-- (scoped_ptr<web::URLFetcherBlockAdapter>)
-        fetcherForURL:(const GURL&)URL
-    completionHandler:(web::URLFetcherBlockAdapterCompletion)handler {
-  return scoped_ptr<web::URLFetcherBlockAdapter>(
+- (std::unique_ptr<web::URLFetcherBlockAdapter>)
+    fetcherForURL:(const GURL&)URL
+completionHandler:(web::URLFetcherBlockAdapterCompletion)handler {
+  return std::unique_ptr<web::URLFetcherBlockAdapter>(
       new web::MockURLFetcherBlockAdapter(URL, nil, handler));
 }
 @end
@@ -113,7 +115,7 @@
 class CRWWebUIManagerTest : public PlatformTest {
  public:
   CRWWebUIManagerTest()
-      : web_client_(make_scoped_ptr(new web::AppSpecificTestWebClient)) {}
+      : web_client_(base::WrapUnique(new web::AppSpecificTestWebClient)) {}
 
  protected:
   void SetUp() override {
@@ -125,10 +127,10 @@
   }
 
   // TestBrowserState for creation of WebStateImpl.
-  scoped_ptr<TestBrowserState> test_browser_state_;
+  std::unique_ptr<TestBrowserState> test_browser_state_;
   // MockWebStateImpl for detection of LoadHtml and EvaluateJavaScriptAync
   // calls.
-  scoped_ptr<MockWebStateImpl> web_state_impl_;
+  std::unique_ptr<MockWebStateImpl> web_state_impl_;
   // WebUIManager for testing.
   base::scoped_nsobject<CRWTestWebUIManager> web_ui_manager_;
   // The WebClient used in tests.
@@ -153,7 +155,7 @@
   // Create mock JavaScript message to request favicon.
   base::ListValue* arguments(new base::ListValue());
   arguments->AppendString(favicon_url_string);
-  scoped_ptr<base::DictionaryValue> message(new base::DictionaryValue());
+  std::unique_ptr<base::DictionaryValue> message(new base::DictionaryValue());
   message->SetString("message", "webui.requestFavicon");
   message->Set("arguments", arguments);
 
diff --git a/ios/web/webui/url_data_manager_ios_backend.h b/ios/web/webui/url_data_manager_ios_backend.h
index 1135881..e483c321 100644
--- a/ios/web/webui/url_data_manager_ios_backend.h
+++ b/ios/web/webui/url_data_manager_ios_backend.h
@@ -6,12 +6,12 @@
 #define IOS_INTERNAL_WEB_WEBUI_URL_DATA_MANAGER_BACKEND_IOS_H_
 
 #include <map>
+#include <memory>
 #include <string>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/supports_user_data.h"
 #include "ios/web/public/url_data_source_ios.h"
 #include "ios/web/webui/url_data_manager_ios.h"
@@ -40,7 +40,7 @@
 
   // Invoked to create the protocol handler for chrome://. |is_incognito| should
   // be set for incognito browser states. Called on the UI thread.
-  static scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
+  static std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>
   CreateProtocolHandler(BrowserState* browser_state);
 
   // Adds a DataSource to the collection of data sources.
diff --git a/ios/web/webui/url_data_manager_ios_backend.mm b/ios/web/webui/url_data_manager_ios_backend.mm
index ce3e279..5ee98be 100644
--- a/ios/web/webui/url_data_manager_ios_backend.mm
+++ b/ios/web/webui/url_data_manager_ios_backend.mm
@@ -12,6 +12,7 @@
 #include "base/debug/alias.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/memory/weak_ptr.h"
@@ -397,10 +398,10 @@
 }
 
 // static
-scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
+std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>
 URLDataManagerIOSBackend::CreateProtocolHandler(BrowserState* browser_state) {
   DCHECK(browser_state);
-  return make_scoped_ptr(new ChromeProtocolHandler(
+  return base::WrapUnique(new ChromeProtocolHandler(
       browser_state, browser_state->IsOffTheRecord()));
 }
 
diff --git a/ios/web/webui/url_data_source_ios_impl.h b/ios/web/webui/url_data_source_ios_impl.h
index 8544f83..bb9b2b1 100644
--- a/ios/web/webui/url_data_source_ios_impl.h
+++ b/ios/web/webui/url_data_source_ios_impl.h
@@ -5,8 +5,9 @@
 #ifndef IOS_INTERNAL_WEB_WEBUI_URL_DATA_SOURCE_IMPL_IOS_H_
 #define IOS_INTERNAL_WEB_WEBUI_URL_DATA_SOURCE_IMPL_IOS_H_
 
+#include <memory>
+
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/sequenced_task_runner_helpers.h"
 #include "ios/web/webui/url_data_manager_ios.h"
 
@@ -91,7 +92,7 @@
   // source.
   URLDataManagerIOSBackend* backend_;
 
-  scoped_ptr<URLDataSourceIOS> source_;
+  std::unique_ptr<URLDataSourceIOS> source_;
 };
 
 }  // namespace web
diff --git a/ios/web/webui/url_fetcher_block_adapter.h b/ios/web/webui/url_fetcher_block_adapter.h
index 095240b4..b55381e 100644
--- a/ios/web/webui/url_fetcher_block_adapter.h
+++ b/ios/web/webui/url_fetcher_block_adapter.h
@@ -7,8 +7,9 @@
 
 #import <Foundation/Foundation.h>
 
+#include <memory>
+
 #include "base/mac/scoped_block.h"
-#include "base/memory/scoped_ptr.h"
 #include "net/url_request/url_fetcher_delegate.h"
 #include "url/gurl.h"
 
@@ -52,7 +53,7 @@
   base::mac::ScopedBlock<web::URLFetcherBlockAdapterCompletion>
       completion_handler_;
   // URLFetcher for retrieving data from net stack.
-  scoped_ptr<net::URLFetcher> fetcher_;
+  std::unique_ptr<net::URLFetcher> fetcher_;
 };
 
 }  // namespace web
diff --git a/ios/web/webui/web_ui_ios_impl.h b/ios/web/webui/web_ui_ios_impl.h
index 2d7a72e..d7595e8 100644
--- a/ios/web/webui/web_ui_ios_impl.h
+++ b/ios/web/webui/web_ui_ios_impl.h
@@ -6,10 +6,10 @@
 #define IOS_WEB_WEBUI_WEB_UI_IOS_IMPL_H_
 
 #include <map>
+#include <memory>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
 #include "ios/public/provider/web/web_ui_ios.h"
@@ -70,7 +70,7 @@
   // Non-owning pointer to the WebStateImpl this WebUIIOS is associated with.
   WebStateImpl* web_state_;
 
-  scoped_ptr<WebUIIOSController> controller_;
+  std::unique_ptr<WebUIIOSController> controller_;
 
   DISALLOW_COPY_AND_ASSIGN(WebUIIOSImpl);
 };
diff --git a/mash/quick_launch/quick_launch_application.cc b/mash/quick_launch/quick_launch_application.cc
index 9e26168f..179c6af 100644
--- a/mash/quick_launch/quick_launch_application.cc
+++ b/mash/quick_launch/quick_launch_application.cc
@@ -158,5 +158,9 @@
   window->Show();
 }
 
+bool QuickLaunchApplication::AcceptConnection(mojo::Connection* connection) {
+  return true;
+}
+
 }  // namespace quick_launch
 }  // namespace mash
diff --git a/mash/quick_launch/quick_launch_application.h b/mash/quick_launch/quick_launch_application.h
index 0057e9c..a5c7b30 100644
--- a/mash/quick_launch/quick_launch_application.h
+++ b/mash/quick_launch/quick_launch_application.h
@@ -29,6 +29,7 @@
   void Initialize(mojo::Connector* connector,
                   const mojo::Identity& identity,
                   uint32_t id) override;
+  bool AcceptConnection(mojo::Connection* connection) override;
 
   mojo::TracingImpl tracing_;
   std::unique_ptr<views::AuraInit> aura_init_;
diff --git a/mash/session/session.cc b/mash/session/session.cc
index 0e5a142..843fab3 100644
--- a/mash/session/session.cc
+++ b/mash/session/session.cc
@@ -11,6 +11,16 @@
 #include "mojo/shell/public/cpp/connection.h"
 #include "mojo/shell/public/cpp/connector.h"
 
+namespace {
+
+void LogAndCallServiceRestartCallback(const std::string& url,
+                                      const base::Closure& callback) {
+  LOG(ERROR) << "Restarting service: " << url;
+  callback.Run();
+}
+
+}  // namespace
+
 namespace mash {
 namespace session {
 
@@ -128,7 +138,8 @@
   std::unique_ptr<mojo::Connection> connection = connector_->Connect(url);
   // Note: |connection| may be null if we've lost our connection to the shell.
   if (connection) {
-    connection->SetConnectionLostClosure(restart_callback);
+    connection->SetConnectionLostClosure(
+        base::Bind(&LogAndCallServiceRestartCallback, url, restart_callback));
     connection->AddInterface<mojom::Session>(this);
     connections_[url] = std::move(connection);
   }
diff --git a/media/audio/mac/audio_low_latency_input_mac.cc b/media/audio/mac/audio_low_latency_input_mac.cc
index d351940..6c519fe 100644
--- a/media/audio/mac/audio_low_latency_input_mac.cc
+++ b/media/audio/mac/audio_low_latency_input_mac.cc
@@ -78,6 +78,8 @@
 // Maps internal enumerator values (e.g. kAudioDevicePropertyDeviceHasChanged)
 // into local values that are suitable for UMA stats.
 // See AudioObjectPropertySelector in CoreAudio/AudioHardware.h for details.
+// TODO(henrika): ensure that the "other" bucket contains as few counts as
+// possible by adding more valid enumerators below.
 enum AudioDevicePropertyResult {
   PROPERTY_OTHER = 0,  // Use for all non-supported property changes
   PROPERTY_DEVICE_HAS_CHANGED = 1,
@@ -99,7 +101,42 @@
   PROPERTY_VOLUME_DECIBELS = 17,
   PROPERTY_VOLUME_SCALAR = 18,
   PROPERTY_MUTE = 19,
-  PROPERTY_MAX = PROPERTY_MUTE
+  PROPERTY_PLUGIN = 20,
+  PROPERTY_USES_VARIABLE_BUFFER_FRAME_SIZES = 21,
+  PROPERTY_IO_CYCLE_USAGE = 22,
+  PROPERTY_IO_PROC_STREAM_USAGE = 23,
+  PROPERTY_CONFIGURATION_APPLICATION = 24,
+  PROPERTY_DEVICE_UID = 25,
+  PROPERTY_MODE_UID = 26,
+  PROPERTY_TRANSPORT_TYPE = 27,
+  PROPERTY_RELATED_DEVICES = 28,
+  PROPERTY_CLOCK_DOMAIN = 29,
+  PROPERTY_DEVICE_CAN_BE_DEFAULT_DEVICE = 30,
+  PROPERTY_DEVICE_CAN_BE_DEFAULT_SYSTEM_DEVICE = 31,
+  PROPERTY_LATENCY = 32,
+  PROPERTY_STREAMS = 33,
+  PROPERTY_CONTROL_LIST = 34,
+  PROPERTY_SAFETY_OFFSET = 35,
+  PROPERTY_AVAILABLE_NOMINAL_SAMPLE_RATES = 36,
+  PROPERTY_ICON = 37,
+  PROPERTY_IS_HIDDEN = 38,
+  PROPERTY_PREFERRED_CHANNELS_FOR_STEREO = 39,
+  PROPERTY_PREFERRED_CHANNEL_LAYOUT = 40,
+  PROPERTY_VOLUME_RANGE_DECIBELS = 41,
+  PROPERTY_VOLUME_SCALAR_TO_DECIBELS = 42,
+  PROPERTY_VOLUME_DECIBEL_TO_SCALAR = 43,
+  PROPERTY_STEREO_PAN = 44,
+  PROPERTY_STEREO_PAN_CHANNELS = 45,
+  PROPERTY_SOLO = 46,
+  PROPERTY_PHANTOM_POWER = 47,
+  PROPERTY_PHASE_INVERT = 48,
+  PROPERTY_CLIP_LIGHT = 49,
+  PROPERTY_TALKBACK = 50,
+  PROPERTY_LISTENBACK = 51,
+  PROPERTY_CLOCK_SOURCE = 52,
+  PROPERTY_CLOCK_SOURCES = 53,
+  PROPERTY_SUB_MUTE = 54,
+  PROPERTY_MAX = PROPERTY_SUB_MUTE
 };
 
 // Add the provided value in |result| to a UMA histogram.
@@ -1200,10 +1237,9 @@
   // Scan the map of all available property changes (notification types) and
   // filter out some that make sense to add to UMA stats.
   // TODO(henrika): figure out if the set of stats is sufficient or not.
-  for (auto it = device_property_changes_map_.begin();
-       it != device_property_changes_map_.end(); ++it) {
-    UInt32 device_property = it->first;
-    int change_count = it->second;
+  for (const auto& entry : device_property_changes_map_) {
+    UInt32 device_property = entry.first;
+    int change_count = entry.second;
     AudioDevicePropertyResult uma_result = PROPERTY_OTHER;
     switch (device_property) {
       case kAudioDevicePropertyDeviceHasChanged:
@@ -1282,6 +1318,146 @@
         uma_result = PROPERTY_MUTE;
         DVLOG(1) << "kAudioDevicePropertyMute";
         break;
+      case kAudioDevicePropertyPlugIn:
+        uma_result = PROPERTY_PLUGIN;
+        DVLOG(1) << "kAudioDevicePropertyPlugIn";
+        break;
+      case kAudioDevicePropertyUsesVariableBufferFrameSizes:
+        uma_result = PROPERTY_USES_VARIABLE_BUFFER_FRAME_SIZES;
+        DVLOG(1) << "kAudioDevicePropertyUsesVariableBufferFrameSizes";
+        break;
+      case kAudioDevicePropertyIOCycleUsage:
+        uma_result = PROPERTY_IO_CYCLE_USAGE;
+        DVLOG(1) << "kAudioDevicePropertyIOCycleUsage";
+        break;
+      case kAudioDevicePropertyIOProcStreamUsage:
+        uma_result = PROPERTY_IO_PROC_STREAM_USAGE;
+        DVLOG(1) << "kAudioDevicePropertyIOProcStreamUsage";
+        break;
+      case kAudioDevicePropertyConfigurationApplication:
+        uma_result = PROPERTY_CONFIGURATION_APPLICATION;
+        DVLOG(1) << "kAudioDevicePropertyConfigurationApplication";
+        break;
+      case kAudioDevicePropertyDeviceUID:
+        uma_result = PROPERTY_DEVICE_UID;
+        DVLOG(1) << "kAudioDevicePropertyDeviceUID";
+        break;
+      case kAudioDevicePropertyModelUID:
+        uma_result = PROPERTY_MODE_UID;
+        DVLOG(1) << "kAudioDevicePropertyModelUID";
+        break;
+      case kAudioDevicePropertyTransportType:
+        uma_result = PROPERTY_TRANSPORT_TYPE;
+        DVLOG(1) << "kAudioDevicePropertyTransportType";
+        break;
+      case kAudioDevicePropertyRelatedDevices:
+        uma_result = PROPERTY_RELATED_DEVICES;
+        DVLOG(1) << "kAudioDevicePropertyRelatedDevices";
+        break;
+      case kAudioDevicePropertyClockDomain:
+        uma_result = PROPERTY_CLOCK_DOMAIN;
+        DVLOG(1) << "kAudioDevicePropertyClockDomain";
+        break;
+      case kAudioDevicePropertyDeviceCanBeDefaultDevice:
+        uma_result = PROPERTY_DEVICE_CAN_BE_DEFAULT_DEVICE;
+        DVLOG(1) << "kAudioDevicePropertyDeviceCanBeDefaultDevice";
+        break;
+      case kAudioDevicePropertyDeviceCanBeDefaultSystemDevice:
+        uma_result = PROPERTY_DEVICE_CAN_BE_DEFAULT_SYSTEM_DEVICE;
+        DVLOG(1) << "kAudioDevicePropertyDeviceCanBeDefaultSystemDevice";
+        break;
+      case kAudioDevicePropertyLatency:
+        uma_result = PROPERTY_LATENCY;
+        DVLOG(1) << "kAudioDevicePropertyLatency";
+        break;
+      case kAudioDevicePropertyStreams:
+        uma_result = PROPERTY_STREAMS;
+        DVLOG(1) << "kAudioDevicePropertyStreams";
+        break;
+      case kAudioObjectPropertyControlList:
+        uma_result = PROPERTY_CONTROL_LIST;
+        DVLOG(1) << "kAudioObjectPropertyControlList";
+        break;
+      case kAudioDevicePropertySafetyOffset:
+        uma_result = PROPERTY_SAFETY_OFFSET;
+        DVLOG(1) << "kAudioDevicePropertySafetyOffset";
+        break;
+      case kAudioDevicePropertyAvailableNominalSampleRates:
+        uma_result = PROPERTY_AVAILABLE_NOMINAL_SAMPLE_RATES;
+        DVLOG(1) << "kAudioDevicePropertyAvailableNominalSampleRates";
+        break;
+      case kAudioDevicePropertyIcon:
+        uma_result = PROPERTY_ICON;
+        DVLOG(1) << "kAudioDevicePropertyIcon";
+        break;
+      case kAudioDevicePropertyIsHidden:
+        uma_result = PROPERTY_IS_HIDDEN;
+        DVLOG(1) << "kAudioDevicePropertyIsHidden";
+        break;
+      case kAudioDevicePropertyPreferredChannelsForStereo:
+        uma_result = PROPERTY_PREFERRED_CHANNELS_FOR_STEREO;
+        DVLOG(1) << "kAudioDevicePropertyPreferredChannelsForStereo";
+        break;
+      case kAudioDevicePropertyPreferredChannelLayout:
+        uma_result = PROPERTY_PREFERRED_CHANNEL_LAYOUT;
+        DVLOG(1) << "kAudioDevicePropertyPreferredChannelLayout";
+        break;
+      case kAudioDevicePropertyVolumeRangeDecibels:
+        uma_result = PROPERTY_VOLUME_RANGE_DECIBELS;
+        DVLOG(1) << "kAudioDevicePropertyVolumeRangeDecibels";
+        break;
+      case kAudioDevicePropertyVolumeScalarToDecibels:
+        uma_result = PROPERTY_VOLUME_SCALAR_TO_DECIBELS;
+        DVLOG(1) << "kAudioDevicePropertyVolumeScalarToDecibels";
+        break;
+      case kAudioDevicePropertyVolumeDecibelsToScalar:
+        uma_result = PROPERTY_VOLUME_DECIBEL_TO_SCALAR;
+        DVLOG(1) << "kAudioDevicePropertyVolumeDecibelsToScalar";
+        break;
+      case kAudioDevicePropertyStereoPan:
+        uma_result = PROPERTY_STEREO_PAN;
+        DVLOG(1) << "kAudioDevicePropertyStereoPan";
+        break;
+      case kAudioDevicePropertyStereoPanChannels:
+        uma_result = PROPERTY_STEREO_PAN_CHANNELS;
+        DVLOG(1) << "kAudioDevicePropertyStereoPanChannels";
+        break;
+      case kAudioDevicePropertySolo:
+        uma_result = PROPERTY_SOLO;
+        DVLOG(1) << "kAudioDevicePropertySolo";
+        break;
+      case kAudioDevicePropertyPhantomPower:
+        uma_result = PROPERTY_PHANTOM_POWER;
+        DVLOG(1) << "kAudioDevicePropertyPhantomPower";
+        break;
+      case kAudioDevicePropertyPhaseInvert:
+        uma_result = PROPERTY_PHASE_INVERT;
+        DVLOG(1) << "kAudioDevicePropertyPhaseInvert";
+        break;
+      case kAudioDevicePropertyClipLight:
+        uma_result = PROPERTY_CLIP_LIGHT;
+        DVLOG(1) << "kAudioDevicePropertyClipLight";
+        break;
+      case kAudioDevicePropertyTalkback:
+        uma_result = PROPERTY_TALKBACK;
+        DVLOG(1) << "kAudioDevicePropertyTalkback";
+        break;
+      case kAudioDevicePropertyListenback:
+        uma_result = PROPERTY_LISTENBACK;
+        DVLOG(1) << "kAudioDevicePropertyListenback";
+        break;
+      case kAudioDevicePropertyClockSource:
+        uma_result = PROPERTY_CLOCK_SOURCE;
+        DVLOG(1) << "kAudioDevicePropertyClockSource";
+        break;
+      case kAudioDevicePropertyClockSources:
+        uma_result = PROPERTY_CLOCK_SOURCES;
+        DVLOG(1) << "kAudioDevicePropertyClockSources";
+        break;
+      case kAudioDevicePropertySubMute:
+        uma_result = PROPERTY_SUB_MUTE;
+        DVLOG(1) << "kAudioDevicePropertySubMute";
+        break;
       default:
         uma_result = PROPERTY_OTHER;
         DVLOG(1) << "Property change is ignored";
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
index 5599b459..a3afab08 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
@@ -209,20 +209,29 @@
                 // We blacklist popular Samsung Galaxy S4 models before Android L.
                 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
                         && (Build.MODEL.startsWith("GT-I9505")
-                                   || (Build.MODEL.startsWith("GT-I9500")))) {
+                                   || Build.MODEL.startsWith("GT-I9500"))) {
                     return false;
                 }
 
                 // Samsung Galaxy S4 Mini.
                 // Only GT-I9190 was tested with Android 4.4.2
                 // We blacklist it and the popular GT-I9195 for all Android versions.
-                if (Build.MODEL.startsWith("GT-I9190") || (Build.MODEL.startsWith("GT-I9195"))) {
+                if (Build.MODEL.startsWith("GT-I9190") || Build.MODEL.startsWith("GT-I9195")) {
                     return false;
                 }
             }
-        } else if (mime.equals("video/x-vnd.on2.vp9")
-                && Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
-            return false;
+            // MediaTek decoders do not work properly on vp8. See http://crbug.com/446974 and
+            // http://crbug.com/597836.
+            if (getDefaultCodecName(mime, MEDIA_CODEC_DECODER).startsWith("OMX.MTK.")) return false;
+        } else if (mime.equals("video/x-vnd.on2.vp9")) {
+            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return false;
+
+            // MediaTek decoders do not work properly on vp9 before Lollipop. See
+            // http://crbug.com/597836.
+            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
+                    && getDefaultCodecName(mime, MEDIA_CODEC_DECODER).startsWith("OMX.MTK.")) {
+                return false;
+            }
         } else if (mime.equals("audio/opus")
                 && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
             return false;
diff --git a/media/base/android/media_codec_util.cc b/media/base/android/media_codec_util.cc
index 5ad3254..ce92879 100644
--- a/media/base/android/media_codec_util.cc
+++ b/media/base/android/media_codec_util.cc
@@ -54,6 +54,13 @@
   return ConvertJavaStringToUTF8(env, j_codec_name.obj());
 }
 
+static bool IsDecoderSupportedByDevice(const std::string& mime_type) {
+  DCHECK(MediaCodecUtil::IsMediaCodecAvailable());
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime_type);
+  return Java_MediaCodecUtil_isDecoderSupportedForDevice(env, j_mime.obj());
+}
+
 // static
 bool MediaCodecUtil::IsMediaCodecAvailable() {
   // MediaCodec is only available on JB and greater.
@@ -120,19 +127,27 @@
   if (!codec_name.size())
     return true;
 
+  // MediaTek hardware vp8 is known slower than the software implementation.
+  // MediaTek hardware vp9 is known crashy, see http://crbug.com/446974 and
+  // http://crbug.com/597836.
+  if (base::StartsWith(codec_name, "OMX.MTK.", base::CompareCase::SENSITIVE)) {
+    if (mime_type == "video/x-vnd.on2.vp8")
+      return true;
+
+    if (mime_type == "video/x-vnd.on2.vp9")
+      return base::android::BuildInfo::GetInstance()->sdk_int() < 21;
+
+    return false;
+  }
+
   // It would be nice if MediaCodecInfo externalized some notion of
   // HW-acceleration but it doesn't. Android Media guidance is that the
   // "OMX.google" prefix is always used for SW decoders, so that's what we
   // use. "OMX.SEC.*" codec is Samsung software implementation - report it
-  // as unaccelerated as well. MediaTek hardware vp8 is known slower than
-  // the software implementation. http://crbug.com/446974.
+  // as unaccelerated as well.
   return base::StartsWith(codec_name, "OMX.google.",
                           base::CompareCase::SENSITIVE) ||
-         base::StartsWith(codec_name, "OMX.SEC.",
-                          base::CompareCase::SENSITIVE) ||
-         (base::StartsWith(codec_name, "OMX.MTK.",
-                           base::CompareCase::SENSITIVE) &&
-          mime_type == "video/x-vnd.on2.vp8");
+         base::StartsWith(codec_name, "OMX.SEC.", base::CompareCase::SENSITIVE);
 }
 
 // static
@@ -163,12 +178,7 @@
 
 // static
 bool MediaCodecUtil::IsVp8DecoderAvailable() {
-  if (!IsMediaCodecAvailable())
-    return false;
-
-  JNIEnv* env = AttachCurrentThread();
-  ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, "vp8");
-  return Java_MediaCodecUtil_isDecoderSupportedForDevice(env, j_mime.obj());
+  return IsMediaCodecAvailable() && IsDecoderSupportedByDevice("vp8");
 }
 
 // static
@@ -178,4 +188,9 @@
   return IsVp8DecoderAvailable();
 }
 
+// static
+bool MediaCodecUtil::IsVp9DecoderAvailable() {
+  return IsMediaCodecAvailable() && IsDecoderSupportedByDevice("vp9");
+}
+
 }  // namespace media
diff --git a/media/base/android/media_codec_util.h b/media/base/android/media_codec_util.h
index a6f13368..9603e38 100644
--- a/media/base/android/media_codec_util.h
+++ b/media/base/android/media_codec_util.h
@@ -69,6 +69,9 @@
   // Indicates if the vp8 decoder or encoder is available on this device.
   static bool IsVp8DecoderAvailable();
   static bool IsVp8EncoderAvailable();
+
+  // Indicates if the vp9 decoder is available on this device.
+  static bool IsVp9DecoderAvailable();
 };
 
 }  // namespace media
diff --git a/media/base/media.cc b/media/base/media.cc
index 920b33fd..9fd89cc 100644
--- a/media/base/media.cc
+++ b/media/base/media.cc
@@ -87,10 +87,6 @@
   return base::android::BuildInfo::GetInstance()->sdk_int() >= 21;
 }
 
-bool PlatformHasVp9Support() {
-  return base::android::BuildInfo::GetInstance()->sdk_int() >= 19;
-}
-
 bool IsUnifiedMediaPipelineEnabled() {
   // TODO(dalecurtis): This experiment is temporary and should be removed once
   // we have enough data to support the primacy of the unified media pipeline;
diff --git a/media/base/media.h b/media/base/media.h
index ca5a8175..c0fd87ee 100644
--- a/media/base/media.h
+++ b/media/base/media.h
@@ -28,10 +28,9 @@
 MEDIA_EXPORT void EnablePlatformDecoderSupport();
 MEDIA_EXPORT bool HasPlatformDecoderSupport();
 
-// Indicates if the platform supports Opus or VP9. Determined *ONLY* by the
-// platform version, so does not guarantee that either can actually be played.
+// Indicates if the platform supports Opus. Determined *ONLY* by the platform
+// version, so does not guarantee that either can actually be played.
 MEDIA_EXPORT bool PlatformHasOpusSupport();
-MEDIA_EXPORT bool PlatformHasVp9Support();
 
 // Returns true if the unified media pipeline is enabled; the pipeline may still
 // not work for all codecs if HasPlatformDecoderSupport() is false. Please see
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
index 882ccb7a..7a26254f 100644
--- a/media/base/mime_util_internal.cc
+++ b/media/base/mime_util_internal.cc
@@ -195,8 +195,9 @@
   platform_info_.has_platform_decoders = ArePlatformDecodersAvailable();
   platform_info_.has_platform_vp8_decoder =
       MediaCodecUtil::IsVp8DecoderAvailable();
+  platform_info_.has_platform_vp9_decoder =
+      MediaCodecUtil::IsVp9DecoderAvailable();
   platform_info_.supports_opus = PlatformHasOpusSupport();
-  platform_info_.supports_vp9 = PlatformHasVp9Support();
 #endif
 
   InitializeMimeTypeMaps();
@@ -553,7 +554,7 @@
         return true;
 
       // Otherwise, platform support is required.
-      return platform_info.supports_vp9;
+      return platform_info.has_platform_vp9_decoder;
     }
   }
 
diff --git a/media/base/mime_util_internal.h b/media/base/mime_util_internal.h
index ff215e9..67396cf6 100644
--- a/media/base/mime_util_internal.h
+++ b/media/base/mime_util_internal.h
@@ -48,8 +48,8 @@
     bool has_platform_decoders = false;
 
     bool has_platform_vp8_decoder = false;
+    bool has_platform_vp9_decoder = false;
     bool supports_opus = false;
-    bool supports_vp9 = false;
 
     bool is_unified_media_pipeline_enabled = false;
   };
diff --git a/media/base/mime_util_unittest.cc b/media/base/mime_util_unittest.cc
index 97474b76..4db5aa7c9 100644
--- a/media/base/mime_util_unittest.cc
+++ b/media/base/mime_util_unittest.cc
@@ -55,8 +55,8 @@
   // Stuff states to test into vectors for easy for_each() iteration.
   MAKE_TEST_VECTOR(has_platform_decoders);
   MAKE_TEST_VECTOR(has_platform_vp8_decoder);
+  MAKE_TEST_VECTOR(has_platform_vp9_decoder);
   MAKE_TEST_VECTOR(supports_opus);
-  MAKE_TEST_VECTOR(supports_vp9);
   MAKE_TEST_VECTOR(is_unified_media_pipeline_enabled);
 #undef MAKE_TEST_VECTOR
 
@@ -69,18 +69,19 @@
 
   RUN_TEST_VECTOR(has_platform_decoders) {
     RUN_TEST_VECTOR(has_platform_vp8_decoder) {
-      RUN_TEST_VECTOR(supports_opus) {
-        RUN_TEST_VECTOR(supports_vp9) {
+      RUN_TEST_VECTOR(has_platform_vp9_decoder) {
+        RUN_TEST_VECTOR(supports_opus) {
           RUN_TEST_VECTOR(is_unified_media_pipeline_enabled) {
             for (int codec = MimeUtil::INVALID_CODEC;
                  codec <= MimeUtil::LAST_CODEC; ++codec) {
               SCOPED_TRACE(base::StringPrintf(
                   "has_platform_decoders=%d, has_platform_vp8_decoder=%d, "
                   "supports_opus=%d, "
-                  "supports_vp9=%d, is_unified_media_pipeline_enabled=%d, "
+                  "has_platform_vp9_decoder=%d, "
+                  "is_unified_media_pipeline_enabled=%d, "
                   "codec=%d",
                   info.has_platform_decoders, info.has_platform_vp8_decoder,
-                  info.supports_opus, info.supports_vp9,
+                  info.supports_opus, info.has_platform_vp9_decoder,
                   info.is_unified_media_pipeline_enabled, codec));
               test_func(info, static_cast<MimeUtil::Codec>(codec));
             }
@@ -97,8 +98,8 @@
 static MimeUtil::PlatformInfo VaryAllFields() {
   MimeUtil::PlatformInfo states_to_vary;
   states_to_vary.has_platform_vp8_decoder = true;
+  states_to_vary.has_platform_vp9_decoder = true;
   states_to_vary.supports_opus = true;
-  states_to_vary.supports_vp9 = true;
   states_to_vary.is_unified_media_pipeline_enabled = true;
   states_to_vary.has_platform_decoders = true;
   return states_to_vary;
@@ -278,7 +279,7 @@
             break;
 
           case MimeUtil::VP9:
-            EXPECT_EQ(info.supports_vp9, result);
+            EXPECT_EQ(info.has_platform_vp9_decoder, result);
             break;
 
           case MimeUtil::HEVC_MAIN:
@@ -328,7 +329,7 @@
             break;
 
           case MimeUtil::VP9:
-            EXPECT_EQ(info.supports_vp9, result);
+            EXPECT_EQ(info.has_platform_vp9_decoder, result);
             break;
 
           case MimeUtil::HEVC_MAIN:
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
index b5dc7177..be839bb 100644
--- a/media/filters/ffmpeg_audio_decoder.cc
+++ b/media/filters/ffmpeg_audio_decoder.cc
@@ -300,10 +300,18 @@
       ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout(
           codec_context_->channel_layout, codec_context_->channels);
 
-      if (av_frame_->sample_rate != config_.samples_per_second() ||
-          channel_layout != config_.channel_layout() ||
+      bool is_config_stale =
+          av_frame_->sample_rate != config_.samples_per_second() ||
           channels != ChannelLayoutToChannelCount(config_.channel_layout()) ||
-          av_frame_->format != av_sample_format_) {
+          av_frame_->format != av_sample_format_;
+
+      // Only consider channel layout changes for AAC.
+      // TODO(tguilbert, dalecurtis): Due to http://crbug.com/600538 we need to
+      // allow channel layout changes for the moment. See if ffmpeg is fixable.
+      if (config_.codec() == kCodecAAC)
+        is_config_stale |= channel_layout != config_.channel_layout();
+
+      if (is_config_stale) {
         // Only allow midstream configuration changes for AAC. Sample format is
         // not expected to change between AAC profiles.
         if (config_.codec() == kCodecAAC &&
@@ -322,7 +330,8 @@
                              config_.extra_data(), config_.encryption_scheme(),
                              config_.seek_preroll(), config_.codec_delay());
           config_changed = true;
-          ResetTimestampState();
+          if (av_frame_->sample_rate != config_.samples_per_second())
+            ResetTimestampState();
         } else {
           MEDIA_LOG(ERROR, media_log_)
               << "Unsupported midstream configuration change!"
diff --git a/media/filters/h264_bit_reader.cc b/media/filters/h264_bit_reader.cc
index 5b009a1..145d2e19 100644
--- a/media/filters/h264_bit_reader.cc
+++ b/media/filters/h264_bit_reader.cc
@@ -79,7 +79,7 @@
   }
 
   *out |= (curr_byte_ >> (num_remaining_bits_in_curr_byte_ - bits_left));
-  *out &= ((1 << num_bits) - 1);
+  *out &= ((1u << num_bits) - 1u);
   num_remaining_bits_in_curr_byte_ -= bits_left;
 
   return true;
diff --git a/media/filters/h264_parser.cc b/media/filters/h264_parser.cc
index d751de7..d1fa685 100644
--- a/media/filters/h264_parser.cc
+++ b/media/filters/h264_parser.cc
@@ -2,13 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "media/filters/h264_parser.h"
+
+#include <limits>
+
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/stl_util.h"
-
 #include "media/base/decrypt_config.h"
-#include "media/filters/h264_parser.h"
 
 namespace media {
 
@@ -318,7 +320,15 @@
     return kInvalidStream;
 
   // Calculate exp-Golomb code value of size num_bits.
-  *val = (1 << num_bits) - 1;
+  // Special case for |num_bits| == 31 to avoid integer overflow. The only
+  // valid representation as an int is 2^31 - 1, so the remaining bits must
+  // be 0 or else the number is too large.
+  *val = (1u << num_bits) - 1u;
+
+  if (num_bits == 31) {
+    READ_BITS_OR_RETURN(num_bits, &rest);
+    return (rest == 0) ? kOk : kInvalidStream;
+  }
 
   if (num_bits > 0) {
     READ_BITS_OR_RETURN(num_bits, &rest);
diff --git a/media/filters/stream_parser_factory.cc b/media/filters/stream_parser_factory.cc
index 02470987..693e6518 100644
--- a/media/filters/stream_parser_factory.cc
+++ b/media/filters/stream_parser_factory.cc
@@ -348,7 +348,7 @@
         return false;
       }
       if (codec_info->tag == CodecInfo::HISTOGRAM_VP9 &&
-          !media::PlatformHasVp9Support() &&
+          !media::MediaCodecUtil::IsVp9DecoderAvailable() &&
           !media::IsUnifiedMediaPipelineEnabled()) {
         return false;
       }
diff --git a/media/muxers/webm_muxer.cc b/media/muxers/webm_muxer.cc
index 729f348..5cbaa79 100644
--- a/media/muxers/webm_muxer.cc
+++ b/media/muxers/webm_muxer.cc
@@ -117,8 +117,8 @@
     // http://www.matroska.org/technical/specs/index.html#Tracks
     AddVideoTrack(video_frame->visible_rect().size(),
                   GetFrameRate(video_frame));
-    if (first_frame_timestamp_.is_null())
-      first_frame_timestamp_ = timestamp;
+    if (first_frame_timestamp_video_.is_null())
+      first_frame_timestamp_video_ = timestamp;
   }
 
   // TODO(ajose): Support multiple tracks: http://crbug.com/528523
@@ -134,14 +134,15 @@
 
   // Dump all saved encoded video frames if any.
   while (!encoded_frames_queue_.empty()) {
-    AddFrame(std::move(encoded_frames_queue_.front()->data), video_track_index_,
-             encoded_frames_queue_.front()->timestamp,
-             encoded_frames_queue_.front()->is_keyframe);
+    AddFrame(
+        std::move(encoded_frames_queue_.front()->data), video_track_index_,
+        encoded_frames_queue_.front()->timestamp - first_frame_timestamp_video_,
+        encoded_frames_queue_.front()->is_keyframe);
     encoded_frames_queue_.pop_front();
   }
 
-  AddFrame(std::move(encoded_data), video_track_index_, timestamp,
-           is_key_frame);
+  AddFrame(std::move(encoded_data), video_track_index_,
+           timestamp - first_frame_timestamp_video_, is_key_frame);
 }
 
 void WebmMuxer::OnEncodedAudio(const media::AudioParameters& params,
@@ -152,8 +153,8 @@
 
   if (!audio_track_index_) {
     AddAudioTrack(params);
-    if (first_frame_timestamp_.is_null())
-      first_frame_timestamp_ = timestamp;
+    if (first_frame_timestamp_audio_.is_null())
+      first_frame_timestamp_audio_ = timestamp;
   }
 
   // TODO(ajose): Don't drop audio data: http://crbug.com/547948
@@ -165,13 +166,15 @@
 
   // Dump all saved encoded video frames if any.
   while (!encoded_frames_queue_.empty()) {
-    AddFrame(std::move(encoded_frames_queue_.front()->data), video_track_index_,
-             encoded_frames_queue_.front()->timestamp,
-             encoded_frames_queue_.front()->is_keyframe);
+    AddFrame(
+        std::move(encoded_frames_queue_.front()->data), video_track_index_,
+        encoded_frames_queue_.front()->timestamp - first_frame_timestamp_video_,
+        encoded_frames_queue_.front()->is_keyframe);
     encoded_frames_queue_.pop_front();
   }
 
-  AddFrame(std::move(encoded_data), audio_track_index_, timestamp,
+  AddFrame(std::move(encoded_data), audio_track_index_,
+           timestamp - first_frame_timestamp_audio_,
            true /* is_key_frame -- always true for audio */);
 }
 
@@ -280,15 +283,14 @@
 
 void WebmMuxer::AddFrame(scoped_ptr<std::string> encoded_data,
                          uint8_t track_index,
-                         base::TimeTicks timestamp,
+                         base::TimeDelta timestamp,
                          bool is_key_frame) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(!has_video_ || video_track_index_);
   DCHECK(!has_audio_ || audio_track_index_);
 
   most_recent_timestamp_ =
-      std::max(most_recent_timestamp_,
-               timestamp - total_time_in_pause_ - first_frame_timestamp_);
+      std::max(most_recent_timestamp_, timestamp - total_time_in_pause_);
 
   segment_.AddFrame(reinterpret_cast<const uint8_t*>(encoded_data->data()),
                     encoded_data->size(), track_index,
diff --git a/media/muxers/webm_muxer.h b/media/muxers/webm_muxer.h
index ecec31ce..1dd6c65 100644
--- a/media/muxers/webm_muxer.h
+++ b/media/muxers/webm_muxer.h
@@ -90,7 +90,7 @@
   // Helper to simplify saving frames.
   void AddFrame(scoped_ptr<std::string> encoded_data,
                 uint8_t track_index,
-                base::TimeTicks timestamp,
+                base::TimeDelta timestamp,
                 bool is_key_frame);
 
   // Used to DCHECK that we are called on the correct thread.
@@ -105,7 +105,8 @@
   uint8_t audio_track_index_;
 
   // Origin of times for frame timestamps.
-  base::TimeTicks first_frame_timestamp_;
+  base::TimeTicks first_frame_timestamp_video_;
+  base::TimeTicks first_frame_timestamp_audio_;
   base::TimeDelta most_recent_timestamp_;
 
   // Variables to measure and accumulate, respectively, the time in pause state.
diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc
index 6689e36c..0912eeb 100644
--- a/media/renderers/audio_renderer_impl.cc
+++ b/media/renderers/audio_renderer_impl.cc
@@ -535,6 +535,26 @@
       }
     }
   } else {
+    // TODO(chcunningham, tguilbert): Figure out if we want to support implicit
+    // config changes during src=. Doing so requires resampling each individual
+    // stream which is inefficient when there are many tags in a page.
+    //
+    // Check if the buffer we received matches the expected configuration.
+    // Note: We explicitly do not check channel layout here to avoid breaking
+    // weird behavior with multichannel wav files: http://crbug.com/600538.
+    if (!buffer->end_of_stream() &&
+        (buffer->sample_rate() != audio_parameters_.sample_rate() ||
+         buffer->channel_count() != audio_parameters_.channels())) {
+      MEDIA_LOG(ERROR, media_log_)
+          << "Unsupported midstream configuration change!"
+          << " Sample Rate: " << buffer->sample_rate() << " vs "
+          << audio_parameters_.sample_rate()
+          << ", Channels: " << buffer->channel_count() << " vs "
+          << audio_parameters_.channels();
+      HandleAbortedReadOrDecodeError(PIPELINE_ERROR_DECODE);
+      return;
+    }
+
     if (!splicer_->AddInput(buffer)) {
       HandleAbortedReadOrDecodeError(AUDIO_RENDERER_ERROR_SPLICE_FAILED);
       return;
diff --git a/mojo/BUILD.gn b/mojo/BUILD.gn
index 62bb452..218ba914 100644
--- a/mojo/BUILD.gn
+++ b/mojo/BUILD.gn
@@ -41,7 +41,6 @@
     "//mojo/edk/test:mojo_public_bindings_unittests",
     "//mojo/edk/test:mojo_public_system_perftests",
     "//mojo/edk/test:mojo_public_system_unittests",
-    "//mojo/services/network:unittests",
     "//mojo/shell/public/cpp/tests:mojo_public_application_unittests",
     "//mojo/shell/runner/host:mojo_runner_host_unittests",
     "//mojo/shell/tests",
diff --git a/mojo/converters/network/BUILD.gn b/mojo/converters/network/BUILD.gn
deleted file mode 100644
index 17308b07..0000000
--- a/mojo/converters/network/BUILD.gn
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("network") {
-  public_deps = [
-    "//mojo/services/network/public/interfaces",
-  ]
-  sources = [
-    "network_type_converters.cc",
-    "network_type_converters.h",
-  ]
-}
diff --git a/mojo/converters/network/network_type_converters.cc b/mojo/converters/network/network_type_converters.cc
deleted file mode 100644
index 1453c500..0000000
--- a/mojo/converters/network/network_type_converters.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/converters/network/network_type_converters.h"
-
-namespace mojo {
-
-// static
-URLRequestPtr TypeConverter<URLRequestPtr, std::string>::Convert(
-    const std::string& input) {
-  URLRequestPtr result(URLRequest::New());
-  result->url = input;
-  return result;
-}
-
-}  // namespace mojo
diff --git a/mojo/converters/network/network_type_converters.h b/mojo/converters/network/network_type_converters.h
deleted file mode 100644
index 4092cd7..0000000
--- a/mojo/converters/network/network_type_converters.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_CONVERTERS_NETWORK_NETWORK_TYPE_CONVERTERS_H_
-#define MOJO_CONVERTERS_NETWORK_NETWORK_TYPE_CONVERTERS_H_
-
-#include <string>
-
-#include "mojo/services/network/public/interfaces/url_loader.mojom.h"
-
-namespace mojo {
-
-template <>
-struct TypeConverter<URLRequestPtr, std::string> {
-  static URLRequestPtr Convert(const std::string& input);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_CONVERTERS_NETWORK_NETWORK_TYPE_CONVERTERS_H_
diff --git a/mojo/mojo_base.gyp b/mojo/mojo_base.gyp
index 009dda1..b13343b6 100644
--- a/mojo/mojo_base.gyp
+++ b/mojo/mojo_base.gyp
@@ -177,7 +177,6 @@
         '../base/base.gyp:base_i18n',
         'mojo_application_bindings',
         'mojo_public.gyp:mojo_message_pump_lib',
-        'mojo_services.gyp:network_type_converters',
       ],
     },
     {
@@ -187,10 +186,6 @@
       'dependencies': [
         'mojo_application_bindings_mojom',
         'mojo_public.gyp:mojo_cpp_bindings',
-        'mojo_services.gyp:network_service_bindings_lib',
-      ],
-      'export_dependent_settings': [
-        'mojo_services.gyp:network_service_bindings_lib',
       ],
     },
     {
diff --git a/mojo/mojo_services.gyp b/mojo/mojo_services.gyp
index a42243187..2ac03d0b 100644
--- a/mojo/mojo_services.gyp
+++ b/mojo/mojo_services.gyp
@@ -5,63 +5,6 @@
 {
   'targets': [
     {
-      'target_name': 'network_service_bindings_mojom',
-      'type': 'none',
-      'variables': {
-        'mojom_files': [
-          'services/network/public/interfaces/cookie_store.mojom',
-          'services/network/public/interfaces/http_connection.mojom',
-          'services/network/public/interfaces/http_message.mojom',
-          'services/network/public/interfaces/http_server.mojom',
-          'services/network/public/interfaces/net_address.mojom',
-          'services/network/public/interfaces/network_error.mojom',
-          'services/network/public/interfaces/network_service.mojom',
-          'services/network/public/interfaces/tcp_bound_socket.mojom',
-          'services/network/public/interfaces/tcp_connected_socket.mojom',
-          'services/network/public/interfaces/tcp_server_socket.mojom',
-          'services/network/public/interfaces/udp_socket.mojom',
-          'services/network/public/interfaces/url_loader.mojom',
-          'services/network/public/interfaces/url_loader_factory.mojom',
-          'services/network/public/interfaces/web_socket.mojom',
-          'services/network/public/interfaces/web_socket_factory.mojom',
-        ],
-        'mojom_include_path': '<(DEPTH)/mojo/services',
-      },
-      'includes': [
-        'mojom_bindings_generator_explicit.gypi',
-      ],
-    },
-    {
-      # GN version: //mojo/services/network/public/interfaces
-      'target_name': 'network_service_bindings_lib',
-      'type': 'static_library',
-      'dependencies': [
-        'network_service_bindings_mojom',
-      ],
-    },
-    {
-      # Target used to depend only on the bindings generation action, not on any
-      # outputs.
-      'target_name': 'network_service_bindings_generation',
-      'type': 'none',
-      'hard_dependency': 1,
-      'dependencies': [
-        'network_service_bindings_mojom',
-      ],
-    },
-    {
-      # GN version: //mojo/converters/network
-      'target_name': 'network_type_converters',
-      'type': 'static_library',
-      'dependencies': [
-        'network_service_bindings_lib',
-      ],
-      'sources': [
-        'converters/network/network_type_converters.cc',
-        'converters/network/network_type_converters.h',
-      ],
-    },
-    {
       'target_name': 'tracing_service_bindings_mojom',
       'type': 'none',
       'variables': {
diff --git a/mojo/mojo_shell.gyp b/mojo/mojo_shell.gyp
index 25e6bce2..1decb57f 100644
--- a/mojo/mojo_shell.gyp
+++ b/mojo/mojo_shell.gyp
@@ -147,5 +147,18 @@
         ],
       }],
     ],
+  }, {
+    # GN version: //mojo/services/catalog:manifest
+    'target_name': 'mojo_catalog_manifest',
+    'type': 'none',
+    'variables': {
+      'application_type': 'mojo',
+      'application_name': 'catalog',
+      'source_manifest': '<(DEPTH)/mojo/services/catalog/manifest.json',
+    },
+    'includes': [
+      '../mojo/public/mojo_application_manifest.gypi',
+    ],
+    'hard_dependency': 1,
   }],
 }
diff --git a/mojo/public/mojo_application_manifest.gni b/mojo/public/mojo_application_manifest.gni
index 589e30e..b66626b8 100644
--- a/mojo/public/mojo_application_manifest.gni
+++ b/mojo/public/mojo_application_manifest.gni
@@ -12,12 +12,20 @@
 #       The manifest file template for this application, must be valid JSON with
 #       a valid 'url' key matching application_name.
 #
+#   base_manifest (optional)
+#       A manifest file template to use as a base for |source|. Any properties
+#       defined in |source| will overwrite or be merged with properties defined
+#       in |base_manifest|.
+#
 #   application_name
 #       The host portion of the mojo: URL of the application. The script
 #       validates that the value of this parameter matches the host name portion
 #       of the 'url' property set in the manifest and throws a ValueError if
 #       they do not.
 #
+#   base_deps (optional)
+#       Dependencies required to generate |base_manifest| if applicable.
+#
 #   deps (optional)
 #       An array of dependent instances of this template. This template enforces
 #       that dependencies can only be instances of this template.
@@ -86,6 +94,11 @@
       "--output=$rebase_output",
     ]
 
+    if (defined(invoker.base_manifest)) {
+      rebase_base = rebase_path(invoker.base_manifest, root_build_dir)
+      args += [ "--base-manifest=$rebase_base" ]
+    }
+
     if (defined(invoker.packaged_applications)) {
       foreach(application_name, invoker.packaged_applications) {
         input = "$root_out_dir/$mojo_application_subdir/$application_name/manifest.json"
@@ -97,6 +110,9 @@
     if (defined(invoker.deps)) {
       deps += invoker.deps
     }
+    if (defined(invoker.base_deps)) {
+      deps += invoker.base_deps
+    }
   }
 
   all_deps = []
diff --git a/mojo/public/mojo_application_manifest.gypi b/mojo/public/mojo_application_manifest.gypi
index ddb202d2..bda8640 100644
--- a/mojo/public/mojo_application_manifest.gypi
+++ b/mojo/public/mojo_application_manifest.gypi
@@ -7,9 +7,11 @@
     'variables': {
       'application_name%': '<(application_name)',
       'application_type%': '<(application_type)',
+      'base_manifest%': 'none',
     },
     'application_type%': '<(application_type)',
     'application_name%': '<(application_name)',
+    'base_manifest%': '<(base_manifest)',
     'manifest_collator_script%':
         '<(DEPTH)/mojo/public/tools/manifest/manifest_collator.py',
     'source_manifest%': '<(source_manifest)',
@@ -19,6 +21,11 @@
       }, {
         'output_manifest%': '<(PRODUCT_DIR)/<(application_name)_manifest.json',
       }],
+      ['base_manifest!="none"', {
+        'extra_args%': [ '--base-manifest=<(base_manifest)', ],
+      }, {
+        'extra_args%': [],
+      }]
     ],
   },
   'actions': [{
@@ -36,6 +43,7 @@
       '--application-name', '<(application_name)',
       '--parent=<(source_manifest)',
       '--output=<(output_manifest)',
+      '<@(extra_args)',
     ],
   }],
 }
diff --git a/mojo/public/tools/manifest/manifest_collator.py b/mojo/public/tools/manifest/manifest_collator.py
index e05763b..fa95e37 100755
--- a/mojo/public/tools/manifest/manifest_collator.py
+++ b/mojo/public/tools/manifest/manifest_collator.py
@@ -11,6 +11,7 @@
 import sys
 import urlparse
 
+
 def ParseJSONFile(filename):
   with open(filename) as json_file:
     try:
@@ -19,18 +20,46 @@
       print "%s is not a valid JSON document" % filename
       return None
 
+
+def MergeDicts(left, right):
+  for k, v in right.iteritems():
+    if k not in left:
+      left[k] = v
+    else:
+      if isinstance(v, dict):
+        assert isinstance(left[k], dict)
+        MergeDicts(left[k], v)
+      elif isinstance(v, list):
+        assert isinstance(left[k], list)
+        left[k].extend(v)
+      else:
+        raise "Refusing to merge conflicting non-collection values."
+  return left
+
+
+def MergeBaseManifest(parent, base):
+  MergeDicts(parent["capabilities"], base["capabilities"])
+
+
 def main():
   parser = argparse.ArgumentParser(
       description="Collate Mojo application manifests.")
   parser.add_argument("--parent")
   parser.add_argument("--output")
   parser.add_argument("--application-name")
+  parser.add_argument("--base-manifest", default=None)
   args, children = parser.parse_known_args()
 
   parent = ParseJSONFile(args.parent)
   if parent == None:
     return 1
 
+  if args.base_manifest:
+    base = ParseJSONFile(args.base_manifest)
+    if base == None:
+      return 1
+    MergeBaseManifest(parent, base)
+
   app_path = parent['name'].split(':')[1]
   if app_path.startswith('//'):
     raise ValueError("Application name path component '%s' must not start " \
diff --git a/mojo/services/BUILD.gn b/mojo/services/BUILD.gn
index 969d793..aaf9aab 100644
--- a/mojo/services/BUILD.gn
+++ b/mojo/services/BUILD.gn
@@ -9,7 +9,6 @@
   testonly = true
   deps = [
     "//mojo/services/catalog",
-    "//mojo/services/network",
     "//mojo/services/tracing",
   ]
 }
diff --git a/mojo/services/catalog/BUILD.gn b/mojo/services/catalog/BUILD.gn
index 19369ba..fa28ec62 100644
--- a/mojo/services/catalog/BUILD.gn
+++ b/mojo/services/catalog/BUILD.gn
@@ -21,6 +21,7 @@
     "entry.h",
     "factory.cc",
     "factory.h",
+    "manifest_provider.h",
     "store.cc",
     "store.h",
     "types.h",
diff --git a/mojo/services/catalog/catalog.cc b/mojo/services/catalog/catalog.cc
index 1d75a301..c031022 100644
--- a/mojo/services/catalog/catalog.cc
+++ b/mojo/services/catalog/catalog.cc
@@ -6,10 +6,13 @@
 
 #include "base/bind.h"
 #include "base/json/json_file_value_serializer.h"
+#include "base/json/json_reader.h"
 #include "base/strings/string_split.h"
 #include "base/task_runner_util.h"
+#include "base/thread_task_runner_handle.h"
 #include "mojo/common/url_type_converters.h"
 #include "mojo/services/catalog/entry.h"
+#include "mojo/services/catalog/manifest_provider.h"
 #include "mojo/services/catalog/store.h"
 #include "mojo/shell/public/cpp/names.h"
 #include "url/gurl.h"
@@ -52,6 +55,27 @@
   return base::FilePath();
 }
 
+scoped_ptr<ReadManifestResult> ProcessManifest(
+    const base::FilePath& user_package_dir,
+    const base::FilePath& system_package_dir,
+    const std::string& name,
+    scoped_ptr<base::Value> manifest_root) {
+  scoped_ptr<Entry> entry(new Entry(name));
+  if (manifest_root) {
+    const base::DictionaryValue* dictionary = nullptr;
+    CHECK(manifest_root->GetAsDictionary(&dictionary));
+    entry = Entry::Deserialize(*dictionary);
+  }
+  entry->set_path(GetPackagePath(system_package_dir, name));
+
+  scoped_ptr<ReadManifestResult> result(new ReadManifestResult);
+  // NOTE: This TypeConverter must run on a thread which allows IO.
+  result->resolve_result = mojo::shell::mojom::ResolveResult::From(*entry);
+  result->catalog_entry = std::move(entry);
+  result->package_dir = system_package_dir;
+  return result;
+}
+
 scoped_ptr<ReadManifestResult> ReadManifest(
     const base::FilePath& user_package_dir,
     const base::FilePath& system_package_dir,
@@ -60,12 +84,11 @@
   JSONFileValueDeserializer deserializer(manifest_path);
   int error = 0;
   std::string message;
+
   // TODO(beng): probably want to do more detailed error checking. This should
   //             be done when figuring out if to unblock connection completion.
-  scoped_ptr<ReadManifestResult> result(new ReadManifestResult);
-  result->manifest_root = deserializer.Deserialize(&error, &message);
-  result->package_dir = system_package_dir;
-  return result;
+  return ProcessManifest(user_package_dir, system_package_dir, name,
+                         deserializer.Deserialize(&error, &message));
 }
 
 void AddEntryToMap(const Entry& entry,
@@ -85,8 +108,10 @@
 
 Catalog::Catalog(scoped_ptr<Store> store,
                  base::TaskRunner* file_task_runner,
-                 EntryCache* system_catalog)
-    : store_(std::move(store)),
+                 EntryCache* system_catalog,
+                 ManifestProvider* manifest_provider)
+    : manifest_provider_(manifest_provider),
+      store_(std::move(store)),
       file_task_runner_(file_task_runner),
       system_catalog_(system_catalog),
       weak_factory_(this) {
@@ -112,11 +137,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // Catalog, mojom::Resolver:
 
-void Catalog::ResolveResponse(mojo::URLResponsePtr response,
-                              const ResolveResponseCallback& callback) {
-  // TODO(beng): implement.
-}
-
 void Catalog::ResolveInterfaces(mojo::Array<mojo::String> interfaces,
                                 const ResolveInterfacesCallback& callback) {
   // TODO(beng): implement.
@@ -155,12 +175,27 @@
     callback.Run(mojo::shell::mojom::ResolveResult::From(*entry->second));
     return;
   }
-  base::PostTaskAndReplyWithResult(
-      file_task_runner_, FROM_HERE,
-      base::Bind(&ReadManifest, base::FilePath(), system_package_dir_,
-                 mojo_name),
-      base::Bind(&Catalog::OnReadManifest, weak_factory_.GetWeakPtr(),
-                  mojo_name, callback));
+
+  std::string manifest_contents;
+  if (manifest_provider_ &&
+      manifest_provider_->GetApplicationManifest(mojo_name.To<std::string>(),
+                                                 &manifest_contents)) {
+    scoped_ptr<base::Value> manifest_root =
+        base::JSONReader::Read(manifest_contents);
+    base::PostTaskAndReplyWithResult(
+        file_task_runner_, FROM_HERE,
+        base::Bind(&ProcessManifest, user_package_dir_, system_package_dir_,
+                   mojo_name, base::Passed(&manifest_root)),
+        base::Bind(&Catalog::OnReadManifest, weak_factory_.GetWeakPtr(),
+                   mojo_name, callback));
+  } else {
+    base::PostTaskAndReplyWithResult(
+        file_task_runner_, FROM_HERE,
+        base::Bind(&ReadManifest, user_package_dir_, system_package_dir_,
+                   mojo_name),
+        base::Bind(&Catalog::OnReadManifest, weak_factory_.GetWeakPtr(),
+                   mojo_name, callback));
+  }
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -224,18 +259,11 @@
                              const std::string& name,
                              const ResolveMojoNameCallback& callback,
                              scoped_ptr<ReadManifestResult> result) {
-  scoped_ptr<Entry> entry(new Entry(name));
-  if (result->manifest_root) {
-    const base::DictionaryValue* dictionary = nullptr;
-    CHECK(result->manifest_root->GetAsDictionary(&dictionary));
-    entry = Entry::Deserialize(*dictionary);
-  }
-  entry->set_path(GetPackagePath(result->package_dir, name));
-
-  callback.Run(mojo::shell::mojom::ResolveResult::From(*entry));
+  callback.Run(std::move(result ->resolve_result));
   if (catalog) {
     catalog->AddEntryToCatalog(
-        std::move(entry), result->package_dir == catalog->system_package_dir_);
+        std::move(result->catalog_entry),
+        result->package_dir == catalog->system_package_dir_);
   }
 }
 
diff --git a/mojo/services/catalog/catalog.h b/mojo/services/catalog/catalog.h
index d2dc7bd9..6e46120a 100644
--- a/mojo/services/catalog/catalog.h
+++ b/mojo/services/catalog/catalog.h
@@ -20,12 +20,14 @@
 
 namespace catalog {
 
+class ManifestProvider;
 class Store;
 
 struct ReadManifestResult {
   ReadManifestResult();
   ~ReadManifestResult();
-  scoped_ptr<base::Value> manifest_root;
+  mojo::shell::mojom::ResolveResultPtr resolve_result;
+  scoped_ptr<Entry> catalog_entry;
   base::FilePath package_dir;
 };
 
@@ -33,9 +35,11 @@
                 public mojo::shell::mojom::ShellResolver,
                 public mojom::Catalog {
  public:
+  // |manifest_provider| may be null.
   Catalog(scoped_ptr<Store> store,
           base::TaskRunner* file_task_runner,
-          EntryCache* system_catalog);
+          EntryCache* system_catalog,
+          ManifestProvider* manifest_provider);
   ~Catalog() override;
 
   void BindResolver(mojom::ResolverRequest request);
@@ -47,9 +51,6 @@
       std::map<std::string, std::pair<std::string, std::string>>;
 
   // mojom::Resolver:
-  void ResolveResponse(
-      mojo::URLResponsePtr response,
-      const ResolveResponseCallback& callback) override;
   void ResolveInterfaces(mojo::Array<mojo::String> interfaces,
                          const ResolveInterfacesCallback& callback) override;
   void ResolveMIMEType(const mojo::String& mime_type,
@@ -81,6 +82,8 @@
   // via callback.
   void AddEntryToCatalog(scoped_ptr<Entry> entry, bool is_system_catalog);
 
+  ManifestProvider* const manifest_provider_;
+
   // Directory that contains packages and executables visible to all users.
   base::FilePath system_package_dir_;
   // Directory that contains packages visible to this Catalog instance's user.
@@ -90,7 +93,7 @@
   scoped_ptr<Store> store_;
 
   // Task runner for performing file operations.
-  base::TaskRunner* file_task_runner_;
+  base::TaskRunner* const file_task_runner_;
 
   mojo::BindingSet<mojom::Resolver> resolver_bindings_;
   mojo::BindingSet<mojo::shell::mojom::ShellResolver> shell_resolver_bindings_;
diff --git a/mojo/services/catalog/factory.cc b/mojo/services/catalog/factory.cc
index 09b1806..89972ea 100644
--- a/mojo/services/catalog/factory.cc
+++ b/mojo/services/catalog/factory.cc
@@ -11,13 +11,17 @@
 
 namespace catalog {
 
-Factory::Factory(base::TaskRunner* file_task_runner, scoped_ptr<Store> store)
+Factory::Factory(base::TaskRunner* file_task_runner,
+                 scoped_ptr<Store> store,
+                 ManifestProvider* manifest_provider)
     : file_task_runner_(file_task_runner),
       store_(std::move(store)),
+      manifest_provider_(manifest_provider),
       weak_factory_(this) {
   mojo::shell::mojom::ShellClientRequest request = GetProxy(&shell_client_);
   shell_connection_.reset(new mojo::ShellConnection(this, std::move(request)));
 }
+
 Factory::~Factory() {}
 
 mojo::shell::mojom::ShellClientPtr Factory::TakeShellClient() {
@@ -58,8 +62,8 @@
     return it->second.get();
 
   // TODO(beng): There needs to be a way to load the store from different users.
-  Catalog* instance =
-      new Catalog(std::move(store_), file_task_runner_, &system_catalog_);
+  Catalog* instance = new Catalog(std::move(store_), file_task_runner_,
+                                  &system_catalog_, manifest_provider_);
   catalogs_[user_id] = make_scoped_ptr(instance);
   return instance;
 }
diff --git a/mojo/services/catalog/factory.h b/mojo/services/catalog/factory.h
index 758d9da..a21200b 100644
--- a/mojo/services/catalog/factory.h
+++ b/mojo/services/catalog/factory.h
@@ -30,6 +30,7 @@
 namespace catalog {
 
 class Catalog;
+class ManifestProvider;
 class Store;
 
 // Creates and owns an instance of the catalog. Exposes a ShellClientPtr that
@@ -40,7 +41,10 @@
       public mojo::InterfaceFactory<mojom::Resolver>,
       public mojo::InterfaceFactory<mojo::shell::mojom::ShellResolver> {
  public:
-  Factory(base::TaskRunner* file_task_runner, scoped_ptr<Store> store);
+  // |manifest_provider| may be null.
+  Factory(base::TaskRunner* file_task_runner,
+          scoped_ptr<Store> store,
+          ManifestProvider* manifest_provider);
   ~Factory() override;
 
   mojo::shell::mojom::ShellClientPtr TakeShellClient();
@@ -63,8 +67,9 @@
 
   Catalog* GetCatalogForUserId(const std::string& user_id);
 
-  base::TaskRunner* file_task_runner_;
+  base::TaskRunner* const file_task_runner_;
   scoped_ptr<Store> store_;
+  ManifestProvider* const manifest_provider_;
 
   mojo::shell::mojom::ShellClientPtr shell_client_;
   scoped_ptr<mojo::ShellConnection> shell_connection_;
diff --git a/mojo/services/catalog/manifest_provider.h b/mojo/services/catalog/manifest_provider.h
new file mode 100644
index 0000000..f3cf101
--- /dev/null
+++ b/mojo/services/catalog/manifest_provider.h
@@ -0,0 +1,29 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MOJO_SERVICES_CATALOG_MANIFEST_PROVIDER_H_
+#define MOJO_SERVICES_CATALOG_MANIFEST_PROVIDER_H_
+
+#include <string>
+
+#include "base/strings/string_piece.h"
+
+namespace catalog {
+
+// An interface which can be implemented by a catalog embedder to override
+// manifest fetching behavior.
+class ManifestProvider {
+ public:
+  virtual ~ManifestProvider() {}
+
+  // Retrieves the raw contents of the manifest for application named |name|.
+  // Returns true if |name| is known and |*manifest_contents| is populated.
+  // returns false otherwise.
+  virtual bool GetApplicationManifest(const base::StringPiece& name,
+                                      std::string* manifest_contents) = 0;
+};
+
+}  // namespace catalog
+
+#endif  // MOJO_SERVICES_CATALOG_MANIFEST_PROVIDER_H_
diff --git a/mojo/services/catalog/public/interfaces/BUILD.gn b/mojo/services/catalog/public/interfaces/BUILD.gn
index c775ebe..068a2fe0 100644
--- a/mojo/services/catalog/public/interfaces/BUILD.gn
+++ b/mojo/services/catalog/public/interfaces/BUILD.gn
@@ -13,7 +13,6 @@
   import_dirs = [ "//mojo/services" ]
 
   deps = [
-    "//mojo/services/network/public/interfaces",
     "//mojo/shell/public/interfaces",
   ]
 }
diff --git a/mojo/services/catalog/public/interfaces/resolver.mojom b/mojo/services/catalog/public/interfaces/resolver.mojom
index 1f370fa..0faf7e1 100644
--- a/mojo/services/catalog/public/interfaces/resolver.mojom
+++ b/mojo/services/catalog/public/interfaces/resolver.mojom
@@ -4,18 +4,9 @@
 
 module catalog.mojom;
 
-import "network/public/interfaces/url_loader.mojom";
-
 // Resolves various things to Mojo names that can be passed to mojo::Shell's
 // ConnectToApplication().
 interface Resolver {
-  // Returns the mojo: name of the service that can consume the content
-  // contained in |response|. The implementation takes the response and may read
-  // a small portion of it to make this determination, before passing it back
-  // via the supplied response callback.
-  ResolveResponse(mojo.URLResponse response) =>
-      (string resolved_mojo_name, mojo.URLResponse response);
-
   // Returns the mojo: name of the service that exports to the caller every
   // interface in |interfaces|.
   ResolveInterfaces(array<string> interfaces) => (string resolved_mojo_name);
diff --git a/mojo/services/network/BUILD.gn b/mojo/services/network/BUILD.gn
deleted file mode 100644
index 7d54a96..0000000
--- a/mojo/services/network/BUILD.gn
+++ /dev/null
@@ -1,170 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//mojo/public/mojo_application.gni")
-import("//mojo/public/mojo_application_manifest.gni")
-import("//testing/test.gni")
-
-if (is_android) {
-  import("//build/config/android/rules.gni")
-
-  java_library_path = "$target_out_dir/java_library.dex.jar"
-
-  mojo_android_application("network") {
-    output_name = "network_service"
-    input_so = "$root_shlib_dir/${shlib_prefix}network_service$shlib_extension"
-    input_dex_jar = java_library_path
-    deps = [
-      ":java_library",
-      ":native_library",
-    ]
-  }
-
-  shared_library("native_library") {
-    output_name = "network_service"
-
-    sources = [
-      "android_hooks.cc",
-    ]
-
-    deps = [
-      ":sources",
-      "//base",
-      "//build/config/sanitizers:deps",
-      "//net",
-    ]
-  }
-
-  android_standalone_library("java_library") {
-    dex_path = java_library_path
-
-    deps = [
-      "//net/android:net_java",
-    ]
-  }
-} else {
-  mojo_native_application("network") {
-    output_name = "network_service"
-
-    deps = [
-      ":sources",
-    ]
-  }
-}
-
-source_set("lib") {
-  sources = [
-    "cookie_store_impl.cc",
-    "cookie_store_impl.h",
-    "http_connection_impl.cc",
-    "http_connection_impl.h",
-    "http_server_impl.cc",
-    "http_server_impl.h",
-    "net_adapters.cc",
-    "net_adapters.h",
-    "net_address_type_converters.cc",
-    "net_address_type_converters.h",
-    "network_context.cc",
-    "network_context.h",
-    "network_service_delegate.cc",
-    "network_service_delegate.h",
-    "network_service_delegate_observer.h",
-    "network_service_impl.cc",
-    "network_service_impl.h",
-    "tcp_bound_socket_impl.cc",
-    "tcp_bound_socket_impl.h",
-    "tcp_connected_socket_impl.cc",
-    "tcp_connected_socket_impl.h",
-    "tcp_server_socket_impl.cc",
-    "tcp_server_socket_impl.h",
-    "udp_socket_impl.cc",
-    "udp_socket_impl.h",
-    "url_loader_factory_impl.cc",
-    "url_loader_factory_impl.h",
-    "url_loader_impl.cc",
-    "url_loader_impl.h",
-    "web_socket_factory_impl.cc",
-    "web_socket_factory_impl.h",
-    "web_socket_impl.cc",
-    "web_socket_impl.h",
-  ]
-
-  deps = [
-    "//base",
-    "//mojo/common:common_base",
-    "//mojo/common:url_type_converters",
-    "//mojo/message_pump",
-    "//mojo/public/cpp/system:system",
-    "//mojo/services/network/public/cpp",
-    "//mojo/services/network/public/interfaces",
-    "//mojo/services/tracing/public/cpp",
-    "//mojo/shell/public/cpp",
-    "//net",
-    "//net:extras",
-    "//net:http_server",
-    "//url",
-  ]
-}
-
-source_set("sources") {
-  visibility = [ ":*" ]
-
-  sources = [
-    "main.cc",
-  ]
-
-  deps = [
-    ":lib",
-    "//base",
-    "//mojo/public/c/system:for_shared_library",
-    "//mojo/public/cpp/bindings:bindings",
-    "//mojo/services/network/public/cpp",
-    "//mojo/services/network/public/interfaces",
-    "//mojo/shell/public/cpp",
-  ]
-}
-
-group("network_service_unittests") {
-  testonly = true
-  deps = [
-    ":unittests",
-  ]
-}
-
-test("unittests") {
-  output_name = "network_service_unittests"
-
-  sources = [
-    "http_server_unittest.cc",
-    "udp_socket_unittest.cc",
-    "url_loader_impl_unittest.cc",
-  ]
-
-  deps = [
-    ":lib",
-    ":network",
-    "//base",
-    "//mojo/common:common_base",
-    "//mojo/message_pump",
-    "//mojo/public/cpp/bindings:callback",
-    "//mojo/services/network/public/cpp",
-    "//mojo/services/network/public/interfaces",
-    "//mojo/shell/public/cpp:shell_test_support",
-    "//mojo/shell/public/cpp:sources",
-    "//mojo/shell/public/cpp/test:run_all_shelltests",
-    "//net",
-    "//net:test_support",
-    "//testing/gtest",
-  ]
-
-  data_deps = [
-    ":test_manifest",
-  ]
-}
-
-mojo_application_manifest("test_manifest") {
-  type = "exe"
-  application_name = "network_service_unittests"
-  source = "test_manifest.json"
-}
diff --git a/mojo/services/network/DEPS b/mojo/services/network/DEPS
deleted file mode 100644
index d7b3016..0000000
--- a/mojo/services/network/DEPS
+++ /dev/null
@@ -1,11 +0,0 @@
-include_rules = [
-  "+base",
-  "+components/filesystem/public/interfaces",
-  "+mojo/shell",
-  "+mojo/common",
-  "+mojo/message_pump",
-  "+mojo/services",
-  "+mojo/util",
-  "+net",
-  "+sql",
-]
diff --git a/mojo/services/network/android_hooks.cc b/mojo/services/network/android_hooks.cc
deleted file mode 100644
index cb06741..0000000
--- a/mojo/services/network/android_hooks.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <vector>
-
-#include "base/android/base_jni_onload.h"
-#include "base/android/context_utils.h"
-#include "base/android/jni_android.h"
-#include "base/android/library_loader/library_loader_hooks.h"
-#include "base/bind.h"
-#include "net/android/net_jni_registrar.h"
-
-namespace {
-bool RegisterJNI(JNIEnv* env) {
-  return net::android::RegisterJni(env);
-}
-
-bool Init() {
-  return true;
-}
-}  // namespace
-
-
-// This is called by the VM when the shared library is first loaded.
-JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
-  std::vector<base::android::RegisterCallback> register_callbacks;
-  register_callbacks.push_back(base::Bind(&RegisterJNI));
-
-  std::vector<base::android::InitCallback> init_callbacks;
-  init_callbacks.push_back(base::Bind(&Init));
-
-  if (!base::android::OnJNIOnLoadRegisterJNI(vm, register_callbacks) ||
-      !base::android::OnJNIOnLoadInit(init_callbacks)) {
-    return -1;
-  }
-
-  // There cannot be two AtExitManagers at the same time. Remove the one from
-  // LibraryLoader as ApplicationRunner also uses one.
-  base::android::LibraryLoaderExitHook();
-
-  return JNI_VERSION_1_4;
-}
-
-extern "C" JNI_EXPORT void InitApplicationContext(
-    const base::android::JavaRef<jobject>& context) {
-  JNIEnv* env = base::android::AttachCurrentThread();
-  base::android::InitApplicationContext(env, context);
-}
diff --git a/mojo/services/network/cookie_store_impl.cc b/mojo/services/network/cookie_store_impl.cc
deleted file mode 100644
index ebd0c92..0000000
--- a/mojo/services/network/cookie_store_impl.cc
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/cookie_store_impl.h"
-
-#include <utility>
-
-#include "mojo/common/url_type_converters.h"
-#include "mojo/services/network/network_context.h"
-#include "net/cookies/cookie_store.h"
-#include "net/url_request/url_request_context.h"
-
-namespace mojo {
-namespace {
-
-void AdaptGetCookiesCallback(const Callback<void(String)>& callback,
-                             const std::string& cookies) {
-  callback.Run(cookies);
-}
-
-void AdaptSetCookieCallback(const Callback<void(bool)>& callback,
-                            bool success) {
-  callback.Run(success);
-}
-
-}  // namespace
-
-CookieStoreImpl::CookieStoreImpl(NetworkContext* context,
-                                 const GURL& origin,
-                                 scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                                 InterfaceRequest<CookieStore> request)
-    : context_(context),
-      origin_(origin),
-      app_refcount_(std::move(app_refcount)),
-      binding_(this, std::move(request)) {}
-
-CookieStoreImpl::~CookieStoreImpl() {
-}
-
-void CookieStoreImpl::Get(const String& url,
-                          const Callback<void(String)>& callback) {
-  // TODO(darin): Perform origin restriction.
-  net::CookieStore* store = context_->url_request_context()->cookie_store();
-  if (!store) {
-    callback.Run(String());
-    return;
-  }
-  store->GetCookiesWithOptionsAsync(
-      url.To<GURL>(),
-      net::CookieOptions(),
-      base::Bind(&AdaptGetCookiesCallback, callback));
-}
-
-void CookieStoreImpl::Set(const String& url,
-                          const String& cookie,
-                          const Callback<void(bool)>& callback) {
-  // TODO(darin): Perform origin restriction.
-  net::CookieStore* store = context_->url_request_context()->cookie_store();
-  if (!store) {
-    callback.Run(false);
-    return;
-  }
-  store->SetCookieWithOptionsAsync(
-      url.To<GURL>(),
-      cookie,
-      net::CookieOptions(),
-      base::Bind(&AdaptSetCookieCallback, callback));
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/cookie_store_impl.h b/mojo/services/network/cookie_store_impl.h
deleted file mode 100644
index 224490c..0000000
--- a/mojo/services/network/cookie_store_impl.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_COOKIE_STORE_IMPL_H_
-#define MOJO_SERVICES_NETWORK_COOKIE_STORE_IMPL_H_
-
-#include "base/macros.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/cookie_store.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "url/gurl.h"
-
-namespace mojo {
-class NetworkContext;
-
-class CookieStoreImpl : public CookieStore {
- public:
-  CookieStoreImpl(NetworkContext* context,
-                  const GURL& origin,
-                  scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                  InterfaceRequest<CookieStore> request);
-  ~CookieStoreImpl() override;
-
- private:
-  // CookieStore methods:
-  void Get(const String& url, const Callback<void(String)>& callback) override;
-  void Set(const String& url,
-           const String& cookie,
-           const Callback<void(bool)>& callback) override;
-
-  NetworkContext* context_;
-  GURL origin_;
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-  StrongBinding<CookieStore> binding_;
-
-  DISALLOW_COPY_AND_ASSIGN(CookieStoreImpl);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_COOKIE_STORE_IMPL_H_
diff --git a/mojo/services/network/http_connection_impl.cc b/mojo/services/network/http_connection_impl.cc
deleted file mode 100644
index b2c7fd1..0000000
--- a/mojo/services/network/http_connection_impl.cc
+++ /dev/null
@@ -1,427 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/http_connection_impl.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <limits>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "mojo/message_pump/handle_watcher.h"
-#include "mojo/public/cpp/bindings/type_converter.h"
-#include "mojo/public/cpp/system/data_pipe.h"
-#include "mojo/services/network/http_server_impl.h"
-#include "mojo/services/network/net_adapters.h"
-#include "mojo/services/network/public/cpp/web_socket_read_queue.h"
-#include "mojo/services/network/public/cpp/web_socket_write_queue.h"
-#include "mojo/services/network/public/interfaces/web_socket.mojom.h"
-#include "net/base/net_errors.h"
-#include "net/http/http_request_headers.h"
-#include "net/http/http_status_code.h"
-#include "net/server/http_server.h"
-#include "net/server/http_server_request_info.h"
-#include "net/server/http_server_response_info.h"
-
-namespace mojo {
-
-// SimpleDataPipeReader reads till end-of-file, stores the data in a string and
-// notifies completion.
-class HttpConnectionImpl::SimpleDataPipeReader {
- public:
-  using CompletionCallback =
-      base::Callback<void(SimpleDataPipeReader*, scoped_ptr<std::string>)>;
-
-  SimpleDataPipeReader() {}
-  ~SimpleDataPipeReader() {}
-
-  void Start(ScopedDataPipeConsumerHandle consumer,
-             const CompletionCallback& completion_callback) {
-    DCHECK(consumer.is_valid() && !consumer_.is_valid());
-    consumer_ = std::move(consumer);
-    completion_callback_ = completion_callback;
-    buffer_.reset(new std::string);
-    ReadMore();
-  }
-
- private:
-  void ReadMore() {
-    const void* buf;
-    uint32_t buf_size;
-    MojoResult rv = BeginReadDataRaw(consumer_.get(), &buf, &buf_size,
-                                     MOJO_READ_DATA_FLAG_NONE);
-    if (rv == MOJO_RESULT_OK) {
-      buffer_->append(static_cast<const char*>(buf), buf_size);
-      EndReadDataRaw(consumer_.get(), buf_size);
-      WaitToReadMore();
-    } else if (rv == MOJO_RESULT_SHOULD_WAIT) {
-      WaitToReadMore();
-    } else if (rv == MOJO_RESULT_FAILED_PRECONDITION) {
-      // We reached end-of-file.
-      completion_callback_.Run(this, std::move(buffer_));
-      // Note: This object may have been destroyed in the callback.
-    } else {
-      CHECK(false);
-    }
-  }
-
-  void WaitToReadMore() {
-    watcher_.Start(consumer_.get(), MOJO_HANDLE_SIGNAL_READABLE,
-                   MOJO_DEADLINE_INDEFINITE,
-                   base::Bind(&SimpleDataPipeReader::OnHandleReady,
-                              base::Unretained(this)));
-  }
-
-  void OnHandleReady(MojoResult result) { ReadMore(); }
-
-  ScopedDataPipeConsumerHandle consumer_;
-  common::HandleWatcher watcher_;
-  CompletionCallback completion_callback_;
-  scoped_ptr<std::string> buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(SimpleDataPipeReader);
-};
-
-class HttpConnectionImpl::WebSocketImpl : public WebSocket {
- public:
-  // |connection| must outlive this object.
-  WebSocketImpl(HttpConnectionImpl* connection,
-                InterfaceRequest<WebSocket> request,
-                ScopedDataPipeConsumerHandle send_stream,
-                WebSocketClientPtr client)
-      : connection_(connection),
-        binding_(this, std::move(request)),
-        client_(std::move(client)),
-        send_stream_(std::move(send_stream)),
-        read_send_stream_(new WebSocketReadQueue(send_stream_.get())),
-        pending_send_count_(0) {
-    DCHECK(binding_.is_bound());
-    DCHECK(client_);
-    DCHECK(send_stream_.is_valid());
-
-    binding_.set_connection_error_handler([this]() { Close(); });
-    client_.set_connection_error_handler([this]() { Close(); });
-
-    DataPipe data_pipe;
-    receive_stream_ = std::move(data_pipe.producer_handle);
-    write_receive_stream_.reset(new WebSocketWriteQueue(receive_stream_.get()));
-
-    client_->DidConnect("", "", std::move(data_pipe.consumer_handle));
-  }
-
-  ~WebSocketImpl() override {}
-
-  void Close() {
-    DCHECK(!IsClosing());
-
-    binding_.Close();
-    client_.reset();
-
-    NotifyOwnerCloseIfAllDone();
-  }
-
-  void OnReceivedWebSocketMessage(const std::string& data) {
-    if (IsClosing())
-      return;
-
-    // TODO(yzshen): It shouldn't be an issue to pass an empty message. However,
-    // WebSocket{Read,Write}Queue doesn't handle that correctly.
-    if (data.empty())
-      return;
-
-    uint32_t size = static_cast<uint32_t>(data.size());
-    write_receive_stream_->Write(
-        &data[0], size,
-        base::Bind(&WebSocketImpl::OnFinishedWritingReceiveStream,
-                   base::Unretained(this), size));
-  }
-
- private:
-  // WebSocket implementation.
-  void Connect(const String& url,
-               Array<String> protocols,
-               const String& origin,
-               ScopedDataPipeConsumerHandle send_stream,
-               WebSocketClientPtr client) override {
-    NOTREACHED();
-  }
-
-  void Send(bool fin, MessageType type, uint32_t num_bytes) override {
-    if (!fin || type != MessageType::TEXT) {
-      NOTIMPLEMENTED();
-      Close();
-    }
-
-    // TODO(yzshen): It shouldn't be an issue to pass an empty message. However,
-    // WebSocket{Read,Write}Queue doesn't handle that correctly.
-    if (num_bytes == 0)
-      return;
-
-    pending_send_count_++;
-    read_send_stream_->Read(
-        num_bytes, base::Bind(&WebSocketImpl::OnFinishedReadingSendStream,
-                              base::Unretained(this), num_bytes));
-  }
-
-  void FlowControl(int64_t quota) override { NOTIMPLEMENTED(); }
-
-  void Close(uint16_t code, const String& reason) override {
-    Close();
-  }
-
-  void OnFinishedReadingSendStream(uint32_t num_bytes, const char* data) {
-    DCHECK_GT(pending_send_count_, 0u);
-    pending_send_count_--;
-
-    if (data) {
-      connection_->server_->server()->SendOverWebSocket(
-          connection_->connection_id_, std::string(data, num_bytes));
-    }
-
-    if (IsClosing())
-      NotifyOwnerCloseIfAllDone();
-  }
-
-  void OnFinishedWritingReceiveStream(uint32_t num_bytes, const char* buffer) {
-    if (IsClosing())
-      return;
-
-    if (buffer)
-      client_->DidReceiveData(true, MessageType::TEXT, num_bytes);
-  }
-
-  // Checks whether Close() has been called.
-  bool IsClosing() const { return !binding_.is_bound(); }
-
-  void NotifyOwnerCloseIfAllDone() {
-    DCHECK(IsClosing());
-
-    if (pending_send_count_ == 0)
-      connection_->OnWebSocketClosed();
-  }
-
-  HttpConnectionImpl* const connection_;
-
-  Binding<WebSocket> binding_;
-  WebSocketClientPtr client_;
-
-  ScopedDataPipeConsumerHandle send_stream_;
-  scoped_ptr<WebSocketReadQueue> read_send_stream_;
-  size_t pending_send_count_;
-
-  ScopedDataPipeProducerHandle receive_stream_;
-  scoped_ptr<WebSocketWriteQueue> write_receive_stream_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebSocketImpl);
-};
-
-template <>
-struct TypeConverter<HttpRequestPtr, net::HttpServerRequestInfo> {
-  static HttpRequestPtr Convert(const net::HttpServerRequestInfo& obj) {
-    HttpRequestPtr request(HttpRequest::New());
-    request->method = obj.method;
-    request->url = obj.path;
-    request->headers.resize(obj.headers.size());
-    size_t index = 0;
-    for (const auto& item : obj.headers) {
-      HttpHeaderPtr header(HttpHeader::New());
-      header->name = item.first;
-      header->value = item.second;
-      request->headers[index++] = std::move(header);
-    }
-    if (!obj.data.empty()) {
-      uint32_t num_bytes = static_cast<uint32_t>(obj.data.size());
-      MojoCreateDataPipeOptions options;
-      options.struct_size = sizeof(MojoCreateDataPipeOptions);
-      options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
-      options.element_num_bytes = 1;
-      options.capacity_num_bytes = num_bytes;
-      DataPipe data_pipe(options);
-      request->body = std::move(data_pipe.consumer_handle);
-      MojoResult result =
-          WriteDataRaw(data_pipe.producer_handle.get(), obj.data.data(),
-                       &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE);
-      CHECK_EQ(MOJO_RESULT_OK, result);
-    }
-    return request;
-  }
-};
-
-HttpConnectionImpl::HttpConnectionImpl(int connection_id,
-                                       HttpServerImpl* server,
-                                       HttpConnectionDelegatePtr delegate,
-                                       HttpConnectionPtr* connection)
-    : connection_id_(connection_id),
-      server_(server),
-      delegate_(std::move(delegate)),
-      binding_(this, connection) {
-  DCHECK(delegate_);
-  binding_.set_connection_error_handler([this]() { Close(); });
-  delegate_.set_connection_error_handler([this]() { Close(); });
-}
-
-HttpConnectionImpl::~HttpConnectionImpl() {
-  STLDeleteElements(&response_body_readers_);
-}
-
-void HttpConnectionImpl::OnReceivedHttpRequest(
-    const net::HttpServerRequestInfo& info) {
-  if (IsClosing())
-    return;
-
-  delegate_->OnReceivedRequest(
-      HttpRequest::From(info), [this](HttpResponsePtr response) {
-        if (response->body.is_valid()) {
-          SimpleDataPipeReader* reader = new SimpleDataPipeReader;
-          response_body_readers_.insert(reader);
-          ScopedDataPipeConsumerHandle body = std::move(response->body);
-          reader->Start(
-              std::move(body),
-              base::Bind(&HttpConnectionImpl::OnFinishedReadingResponseBody,
-                         base::Unretained(this), base::Passed(&response)));
-        } else {
-          OnFinishedReadingResponseBody(std::move(response), nullptr, nullptr);
-        }
-      });
-}
-
-void HttpConnectionImpl::OnReceivedWebSocketRequest(
-    const net::HttpServerRequestInfo& info) {
-  if (IsClosing())
-    return;
-
-  delegate_->OnReceivedWebSocketRequest(
-      HttpRequest::From(info),
-      [this, info](InterfaceRequest<WebSocket> web_socket,
-                   ScopedDataPipeConsumerHandle send_stream,
-                   WebSocketClientPtr web_socket_client) {
-        if (!web_socket.is_pending() || !send_stream.is_valid() ||
-            !web_socket_client) {
-          Close();
-          return;
-        }
-
-        web_socket_.reset(new WebSocketImpl(this, std::move(web_socket),
-                                            std::move(send_stream),
-                                            std::move(web_socket_client)));
-        server_->server()->AcceptWebSocket(connection_id_, info);
-      });
-}
-
-void HttpConnectionImpl::OnReceivedWebSocketMessage(const std::string& data) {
-  if (IsClosing())
-    return;
-
-  web_socket_->OnReceivedWebSocketMessage(data);
-}
-
-void HttpConnectionImpl::SetSendBufferSize(
-    uint32_t size,
-    const SetSendBufferSizeCallback& callback) {
-  if (size > static_cast<uint32_t>(std::numeric_limits<int32_t>::max()))
-    size = std::numeric_limits<int32_t>::max();
-
-  server_->server()->SetSendBufferSize(connection_id_,
-                                       static_cast<int32_t>(size));
-  callback.Run(MakeNetworkError(net::OK));
-}
-
-void HttpConnectionImpl::SetReceiveBufferSize(
-    uint32_t size,
-    const SetReceiveBufferSizeCallback& callback) {
-  if (size > static_cast<uint32_t>(std::numeric_limits<int32_t>::max()))
-    size = std::numeric_limits<int32_t>::max();
-
-  server_->server()->SetReceiveBufferSize(connection_id_,
-                                          static_cast<int32_t>(size));
-  callback.Run(MakeNetworkError(net::OK));
-}
-
-void HttpConnectionImpl::OnFinishedReadingResponseBody(
-    HttpResponsePtr response,
-    SimpleDataPipeReader* reader,
-    scoped_ptr<std::string> body) {
-  if (reader) {
-    delete reader;
-    response_body_readers_.erase(reader);
-  }
-
-  net::HttpServerResponseInfo info(
-      static_cast<net::HttpStatusCode>(response->status_code));
-
-  std::string content_type;
-  for (size_t i = 0; i < response->headers.size(); ++i) {
-    const HttpHeader& header = *(response->headers[i]);
-
-    if (body) {
-      // net::HttpServerResponseInfo::SetBody() automatically sets
-      // Content-Length and Content-Types, so skip the two here.
-      //
-      // TODO(yzshen): Consider adding to net::HttpServerResponseInfo a simple
-      // setter for body which doesn't fiddle with headers.
-      base::StringPiece name_piece(header.name.data(), header.name.size());
-      if (base::EqualsCaseInsensitiveASCII(
-              name_piece, net::HttpRequestHeaders::kContentLength)) {
-        continue;
-      } else if (base::EqualsCaseInsensitiveASCII(
-                     name_piece, net::HttpRequestHeaders::kContentType)) {
-        content_type = header.value;
-        continue;
-      }
-    }
-    info.AddHeader(header.name, header.value);
-  }
-
-  if (body)
-    info.SetBody(*body, content_type);
-
-  server_->server()->SendResponse(connection_id_, info);
-
-  if (IsClosing())
-    NotifyOwnerCloseIfAllDone();
-}
-
-void HttpConnectionImpl::Close() {
-  DCHECK(!IsClosing());
-
-  binding_.Close();
-  delegate_.reset();
-
-  if (web_socket_)
-    web_socket_->Close();
-
-  NotifyOwnerCloseIfAllDone();
-}
-
-void HttpConnectionImpl::NotifyOwnerCloseIfAllDone() {
-  DCHECK(IsClosing());
-
-  // Don't close the connection until all pending sends are done.
-  bool should_wait = !response_body_readers_.empty() || web_socket_;
-  if (!should_wait)
-    server_->server()->Close(connection_id_);
-}
-
-void HttpConnectionImpl::OnWebSocketClosed() {
-  web_socket_.reset();
-
-  if (IsClosing()) {
-    // The close operation is initiated by this object.
-    NotifyOwnerCloseIfAllDone();
-  } else {
-    // The close operation is initiated by |web_socket_|; start closing this
-    // object.
-    Close();
-  }
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/http_connection_impl.h b/mojo/services/network/http_connection_impl.h
deleted file mode 100644
index a403bc2..0000000
--- a/mojo/services/network/http_connection_impl.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_HTTP_CONNECTION_IMPL_H_
-#define MOJO_SERVICES_NETWORK_HTTP_CONNECTION_IMPL_H_
-
-#include <stdint.h>
-
-#include <set>
-#include <string>
-
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "mojo/services/network/public/interfaces/http_connection.mojom.h"
-#include "mojo/services/network/public/interfaces/http_message.mojom.h"
-
-namespace net {
-class HttpServerRequestInfo;
-}
-
-namespace mojo {
-
-class HttpServerImpl;
-
-class HttpConnectionImpl : public HttpConnection {
- public:
-  // |server| must outlive this object.
-  HttpConnectionImpl(int connection_id,
-                     HttpServerImpl* server,
-                     HttpConnectionDelegatePtr delegate,
-                     HttpConnectionPtr* connection);
-
-  ~HttpConnectionImpl() override;
-
-  void OnReceivedHttpRequest(const net::HttpServerRequestInfo& info);
-  void OnReceivedWebSocketRequest(const net::HttpServerRequestInfo& info);
-  void OnReceivedWebSocketMessage(const std::string& data);
-
- private:
-  class SimpleDataPipeReader;
-  class WebSocketImpl;
-
-  // HttpConnection implementation.
-  void SetSendBufferSize(uint32_t size,
-                         const SetSendBufferSizeCallback& callback) override;
-  void SetReceiveBufferSize(
-      uint32_t size,
-      const SetReceiveBufferSizeCallback& callback) override;
-
-  void OnConnectionError();
-
-  void OnFinishedReadingResponseBody(HttpResponsePtr response_ptr,
-                                     SimpleDataPipeReader* reader,
-                                     scoped_ptr<std::string> body);
-
-  void Close();
-
-  // Checks whether Close() has been called.
-  bool IsClosing() const { return !binding_.is_bound(); }
-
-  // Checks whether all wrap-up work has been done during the closing process.
-  // If yes, notifies the owner, which may result in the destruction of this
-  // object.
-  void NotifyOwnerCloseIfAllDone();
-
-  void OnWebSocketClosed();
-
-  const int connection_id_;
-  HttpServerImpl* const server_;
-  HttpConnectionDelegatePtr delegate_;
-  Binding<HttpConnection> binding_;
-  // Owns its elements.
-  std::set<SimpleDataPipeReader*> response_body_readers_;
-
-  scoped_ptr<WebSocketImpl> web_socket_;
-
-  DISALLOW_COPY_AND_ASSIGN(HttpConnectionImpl);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_HTTP_CONNECTION_IMPL_H_
diff --git a/mojo/services/network/http_server_impl.cc b/mojo/services/network/http_server_impl.cc
deleted file mode 100644
index b7e080a6..0000000
--- a/mojo/services/network/http_server_impl.cc
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/http_server_impl.h"
-
-#include <utility>
-
-#include "base/logging.h"
-#include "mojo/services/network/http_connection_impl.h"
-#include "mojo/services/network/net_adapters.h"
-#include "mojo/services/network/net_address_type_converters.h"
-#include "net/base/ip_endpoint.h"
-#include "net/base/net_errors.h"
-#include "net/log/net_log.h"
-#include "net/socket/tcp_server_socket.h"
-
-namespace mojo {
-
-namespace {
-
-const int kBackLog = 10;
-
-}  // namespace
-
-// static
-void HttpServerImpl::Create(
-    NetAddressPtr local_address,
-    HttpServerDelegatePtr delegate,
-    scoped_ptr<mojo::MessageLoopRef> app_refcount,
-    const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
-  HttpServerImpl* http_server =
-      new HttpServerImpl(std::move(delegate), std::move(app_refcount));
-
-  int net_error = http_server->Start(std::move(local_address));
-  if (net_error != net::OK) {
-    callback.Run(MakeNetworkError(net_error), nullptr);
-    delete http_server;
-    return;
-  }
-  callback.Run(MakeNetworkError(net::OK), http_server->GetLocalAddress());
-}
-
-HttpServerImpl::HttpServerImpl(HttpServerDelegatePtr delegate,
-                               scoped_ptr<mojo::MessageLoopRef> app_refcount)
-    : delegate_(std::move(delegate)), app_refcount_(std::move(app_refcount)) {
-  DCHECK(delegate_);
-  delegate_.set_connection_error_handler([this]() { delete this; });
-}
-
-HttpServerImpl::~HttpServerImpl() {}
-
-int HttpServerImpl::Start(NetAddressPtr local_address) {
-  DCHECK(local_address);
-
-  scoped_ptr<net::ServerSocket> socket(
-      new net::TCPServerSocket(nullptr, net::NetLog::Source()));
-  int net_result = socket->Listen(local_address.To<net::IPEndPoint>(),
-                                  kBackLog);
-  if (net_result != net::OK)
-    return net_result;
-
-  server_.reset(new net::HttpServer(std::move(socket), this));
-
-  return net::OK;
-}
-
-NetAddressPtr HttpServerImpl::GetLocalAddress() const {
-  if (!server_)
-    return nullptr;
-
-  net::IPEndPoint address;
-  int net_result = server_->GetLocalAddress(&address);
-  if (net_result != net::OK)
-    return nullptr;
-
-  return NetAddress::From(address);
-}
-
-void HttpServerImpl::OnConnect(int connection_id) {
-  DCHECK(connections_.find(connection_id) == connections_.end());
-
-  HttpConnectionPtr connection;
-  HttpConnectionDelegatePtr connection_delegate;
-  InterfaceRequest<HttpConnectionDelegate> delegate_request =
-      GetProxy(&connection_delegate);
-  linked_ptr<HttpConnectionImpl> connection_impl(new HttpConnectionImpl(
-      connection_id, this, std::move(connection_delegate), &connection));
-
-  connections_[connection_id] = connection_impl;
-
-  delegate_->OnConnected(std::move(connection), std::move(delegate_request));
-}
-
-void HttpServerImpl::OnHttpRequest(int connection_id,
-                                   const net::HttpServerRequestInfo& info) {
-  DCHECK(connections_.find(connection_id) != connections_.end());
-  connections_[connection_id]->OnReceivedHttpRequest(info);
-}
-
-void HttpServerImpl::OnWebSocketRequest(
-    int connection_id,
-    const net::HttpServerRequestInfo& info) {
-  DCHECK(connections_.find(connection_id) != connections_.end());
-  connections_[connection_id]->OnReceivedWebSocketRequest(info);
-}
-
-void HttpServerImpl::OnWebSocketMessage(int connection_id,
-                                        const std::string& data) {
-  DCHECK(connections_.find(connection_id) != connections_.end());
-  connections_[connection_id]->OnReceivedWebSocketMessage(data);
-}
-
-void HttpServerImpl::OnClose(int connection_id) {
-  DCHECK(connections_.find(connection_id) != connections_.end());
-  connections_.erase(connection_id);
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/http_server_impl.h b/mojo/services/network/http_server_impl.h
deleted file mode 100644
index f79b7a8..0000000
--- a/mojo/services/network/http_server_impl.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_HTTP_SERVER_IMPL_H_
-#define MOJO_SERVICES_NETWORK_HTTP_SERVER_IMPL_H_
-
-#include <map>
-
-#include "base/macros.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_ptr.h"
-#include "mojo/services/network/public/interfaces/http_server.mojom.h"
-#include "mojo/services/network/public/interfaces/net_address.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "net/server/http_server.h"
-
-namespace net {
-class HttpServer;
-}
-
-namespace mojo {
-
-class HttpConnectionImpl;
-
-class HttpServerImpl : public net::HttpServer::Delegate {
- public:
-  static void Create(
-      NetAddressPtr local_address,
-      HttpServerDelegatePtr delegate,
-      scoped_ptr<mojo::MessageLoopRef> app_refcount,
-      const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback);
-
-  net::HttpServer* server() { return server_.get(); }
-
- private:
-  // The lifetime of the returned HttpServerImpl object is bound to that of
-  // |delegate|'s underlying pipe. The object will self-destruct when it is
-  // notified that |delegate|'s pipe is closed. Deleting the object directly
-  // before that is okay, too.
-  HttpServerImpl(HttpServerDelegatePtr delegate,
-                 scoped_ptr<mojo::MessageLoopRef> app_refcount);
-  ~HttpServerImpl() override;
-
-  int Start(NetAddressPtr local_address);
-  NetAddressPtr GetLocalAddress() const;
-
-  // net::HttpServer::Delegate implementation.
-  void OnConnect(int connection_id) override;
-  void OnHttpRequest(int connection_id,
-                     const net::HttpServerRequestInfo& info) override;
-  void OnWebSocketRequest(int connection_id,
-                          const net::HttpServerRequestInfo& info) override;
-  void OnWebSocketMessage(int connection_id, const std::string& data) override;
-  void OnClose(int connection_id) override;
-
-  HttpServerDelegatePtr delegate_;
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-  scoped_ptr<net::HttpServer> server_;
-
-  std::map<int, linked_ptr<HttpConnectionImpl>> connections_;
-
-  DISALLOW_COPY_AND_ASSIGN(HttpServerImpl);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_HTTP_SERVER_IMPL_H_
diff --git a/mojo/services/network/http_server_unittest.cc b/mojo/services/network/http_server_unittest.cc
deleted file mode 100644
index dc9769b7..0000000
--- a/mojo/services/network/http_server_unittest.cc
+++ /dev/null
@@ -1,701 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/run_loop.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "mojo/common/data_pipe_utils.h"
-#include "mojo/services/network/net_address_type_converters.h"
-#include "mojo/services/network/public/cpp/web_socket_read_queue.h"
-#include "mojo/services/network/public/cpp/web_socket_write_queue.h"
-#include "mojo/services/network/public/interfaces/http_connection.mojom.h"
-#include "mojo/services/network/public/interfaces/http_message.mojom.h"
-#include "mojo/services/network/public/interfaces/http_server.mojom.h"
-#include "mojo/services/network/public/interfaces/net_address.mojom.h"
-#include "mojo/services/network/public/interfaces/network_service.mojom.h"
-#include "mojo/services/network/public/interfaces/web_socket.mojom.h"
-#include "mojo/services/network/public/interfaces/web_socket_factory.mojom.h"
-#include "mojo/shell/public/cpp/shell_test.h"
-#include "net/base/io_buffer.h"
-#include "net/base/net_errors.h"
-#include "net/base/test_completion_callback.h"
-#include "net/http/http_response_headers.h"
-#include "net/http/http_util.h"
-#include "net/socket/tcp_client_socket.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace mojo {
-namespace {
-
-const int kMaxExpectedResponseLength = 2048;
-
-NetAddressPtr GetLocalHostWithAnyPort() {
-  NetAddressPtr addr(NetAddress::New());
-  addr->family = NetAddressFamily::IPV4;
-  addr->ipv4 = NetAddressIPv4::New();
-  addr->ipv4->port = 0;
-  addr->ipv4->addr.resize(4);
-  addr->ipv4->addr[0] = 127;
-  addr->ipv4->addr[1] = 0;
-  addr->ipv4->addr[2] = 0;
-  addr->ipv4->addr[3] = 1;
-
-  return addr;
-}
-
-using TestHeaders = std::vector<std::pair<std::string, std::string>>;
-
-struct TestRequest {
-  std::string method;
-  std::string url;
-  TestHeaders headers;
-  scoped_ptr<std::string> body;
-};
-
-struct TestResponse {
-  uint32_t status_code;
-  TestHeaders headers;
-  scoped_ptr<std::string> body;
-};
-
-std::string MakeRequestMessage(const TestRequest& data) {
-  std::string message = data.method + " " + data.url + " HTTP/1.1\r\n";
-  for (const auto& item : data.headers)
-    message += item.first + ": " + item.second + "\r\n";
-  message += "\r\n";
-  if (data.body)
-    message += *data.body;
-
-  return message;
-}
-
-HttpResponsePtr MakeResponseStruct(const TestResponse& data) {
-  HttpResponsePtr response(HttpResponse::New());
-  response->status_code = data.status_code;
-  response->headers.resize(data.headers.size());
-  size_t index = 0;
-  for (const auto& item : data.headers) {
-    HttpHeaderPtr header(HttpHeader::New());
-    header->name = item.first;
-    header->value = item.second;
-    response->headers[index++] = std::move(header);
-  }
-
-  if (data.body) {
-    uint32_t num_bytes = static_cast<uint32_t>(data.body->size());
-    MojoCreateDataPipeOptions options;
-    options.struct_size = sizeof(MojoCreateDataPipeOptions);
-    options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
-    options.element_num_bytes = 1;
-    options.capacity_num_bytes = num_bytes;
-    DataPipe data_pipe(options);
-    response->body = std::move(data_pipe.consumer_handle);
-    MojoResult result =
-        WriteDataRaw(data_pipe.producer_handle.get(), data.body->data(),
-                     &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE);
-    EXPECT_EQ(MOJO_RESULT_OK, result);
-  }
-
-  return response;
-}
-
-void CheckHeaders(const TestHeaders& expected,
-                  const Array<HttpHeaderPtr>& headers) {
-  // The server impl fiddles with Content-Length and Content-Type. So we don't
-  // do a strict check here.
-  std::map<std::string, std::string> header_map;
-  for (size_t i = 0; i < headers.size(); ++i) {
-    std::string lower_name =
-        base::ToLowerASCII(headers[i]->name.To<std::string>());
-    header_map[lower_name] = headers[i]->value;
-  }
-
-  for (const auto& item : expected) {
-    std::string lower_name = base::ToLowerASCII(item.first);
-    EXPECT_NE(header_map.end(), header_map.find(lower_name));
-    EXPECT_EQ(item.second, header_map[lower_name]);
-  }
-}
-
-void CheckRequest(const TestRequest& expected, HttpRequestPtr request) {
-  EXPECT_EQ(expected.method, request->method);
-  EXPECT_EQ(expected.url, request->url);
-  CheckHeaders(expected.headers, request->headers);
-  if (expected.body) {
-    EXPECT_TRUE(request->body.is_valid());
-    std::string body;
-    common::BlockingCopyToString(std::move(request->body), &body);
-    EXPECT_EQ(*expected.body, body);
-  } else {
-    EXPECT_FALSE(request->body.is_valid());
-  }
-}
-
-void CheckResponse(const TestResponse& expected, const std::string& response) {
-  int header_end =
-      net::HttpUtil::LocateEndOfHeaders(response.c_str(), response.size());
-  std::string assembled_headers =
-      net::HttpUtil::AssembleRawHeaders(response.c_str(), header_end);
-  scoped_refptr<net::HttpResponseHeaders> parsed_headers(
-      new net::HttpResponseHeaders(assembled_headers));
-  EXPECT_EQ(expected.status_code,
-            static_cast<uint32_t>(parsed_headers->response_code()));
-  for (const auto& item : expected.headers)
-    EXPECT_TRUE(parsed_headers->HasHeaderValue(item.first, item.second));
-
-  if (expected.body) {
-    EXPECT_NE(-1, header_end);
-    std::string body(response, static_cast<size_t>(header_end));
-    EXPECT_EQ(*expected.body, body);
-  } else {
-    EXPECT_EQ(response.size(), static_cast<size_t>(header_end));
-  }
-}
-
-class TestHttpClient {
- public:
-  TestHttpClient() : connect_result_(net::OK) {}
-
-  void Connect(const net::IPEndPoint& address) {
-    net::AddressList addresses(address);
-    net::NetLog::Source source;
-    socket_.reset(new net::TCPClientSocket(addresses, NULL, source));
-
-    base::RunLoop run_loop;
-    connect_result_ = socket_->Connect(base::Bind(&TestHttpClient::OnConnect,
-                                                  base::Unretained(this),
-                                                  run_loop.QuitClosure()));
-    if (connect_result_ == net::ERR_IO_PENDING)
-      run_loop.Run();
-
-    ASSERT_EQ(net::OK, connect_result_);
-  }
-
-  void Send(const std::string& data) {
-    write_buffer_ = new net::DrainableIOBuffer(new net::StringIOBuffer(data),
-                                               data.length());
-    Write();
-  }
-
-  // Note: This method determines the end of the response only by Content-Length
-  // and connection termination. Besides, it doesn't truncate at the end of the
-  // response, so |message| may return more data (e.g., part of the next
-  // response).
-  void ReadResponse(std::string* message) {
-    if (!Read(message, 1))
-      return;
-    while (!IsCompleteResponse(*message)) {
-      std::string chunk;
-      if (!Read(&chunk, 1))
-        return;
-      message->append(chunk);
-    }
-    return;
-  }
-
- private:
-  void OnConnect(const base::Closure& quit_loop, int result) {
-    connect_result_ = result;
-    quit_loop.Run();
-  }
-
-  void Write() {
-    int result = socket_->Write(
-        write_buffer_.get(), write_buffer_->BytesRemaining(),
-        base::Bind(&TestHttpClient::OnWrite, base::Unretained(this)));
-    if (result != net::ERR_IO_PENDING)
-      OnWrite(result);
-  }
-
-  void OnWrite(int result) {
-    ASSERT_GT(result, 0);
-    write_buffer_->DidConsume(result);
-    if (write_buffer_->BytesRemaining())
-      Write();
-  }
-
-  bool Read(std::string* message, int expected_bytes) {
-    int total_bytes_received = 0;
-    message->clear();
-    while (total_bytes_received < expected_bytes) {
-      net::TestCompletionCallback callback;
-      ReadInternal(callback.callback());
-      int bytes_received = callback.WaitForResult();
-      if (bytes_received <= 0)
-        return false;
-
-      total_bytes_received += bytes_received;
-      message->append(read_buffer_->data(), bytes_received);
-    }
-    return true;
-  }
-
-  void ReadInternal(const net::CompletionCallback& callback) {
-    read_buffer_ = new net::IOBufferWithSize(kMaxExpectedResponseLength);
-    int result =
-        socket_->Read(read_buffer_.get(), kMaxExpectedResponseLength, callback);
-    if (result != net::ERR_IO_PENDING)
-      callback.Run(result);
-  }
-
-  bool IsCompleteResponse(const std::string& response) {
-    // Check end of headers first.
-    int end_of_headers =
-        net::HttpUtil::LocateEndOfHeaders(response.data(), response.size());
-    if (end_of_headers < 0)
-      return false;
-
-    // Return true if response has data equal to or more than content length.
-    int64_t body_size = static_cast<int64_t>(response.size()) - end_of_headers;
-    DCHECK_LE(0, body_size);
-    scoped_refptr<net::HttpResponseHeaders> headers(
-        new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders(
-            response.data(), end_of_headers)));
-    return body_size >= headers->GetContentLength();
-  }
-
-  scoped_refptr<net::IOBufferWithSize> read_buffer_;
-  scoped_refptr<net::DrainableIOBuffer> write_buffer_;
-  scoped_ptr<net::TCPClientSocket> socket_;
-  int connect_result_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestHttpClient);
-};
-
-class WebSocketClientImpl : public WebSocketClient {
- public:
-  explicit WebSocketClientImpl()
-      : binding_(this, &client_ptr_),
-        wait_for_message_count_(0),
-        run_loop_(nullptr) {}
-  ~WebSocketClientImpl() override {}
-
-  // Establishes a connection from the client side.
-  void Connect(WebSocketPtr web_socket, const std::string& url) {
-    web_socket_ = std::move(web_socket);
-
-    DataPipe data_pipe;
-    send_stream_ = std::move(data_pipe.producer_handle);
-    write_send_stream_.reset(new WebSocketWriteQueue(send_stream_.get()));
-
-    web_socket_->Connect(url, Array<String>(), "http://example.com",
-                         std::move(data_pipe.consumer_handle),
-                         std::move(client_ptr_));
-  }
-
-  // Establishes a connection from the server side.
-  void AcceptConnectRequest(
-      const HttpConnectionDelegate::OnReceivedWebSocketRequestCallback&
-          callback) {
-    InterfaceRequest<WebSocket> web_socket_request = GetProxy(&web_socket_);
-
-    DataPipe data_pipe;
-    send_stream_ = std::move(data_pipe.producer_handle);
-    write_send_stream_.reset(new WebSocketWriteQueue(send_stream_.get()));
-
-    callback.Run(std::move(web_socket_request),
-                 std::move(data_pipe.consumer_handle), std::move(client_ptr_));
-  }
-
-  void WaitForConnectCompletion() {
-    DCHECK(!run_loop_);
-
-    if (receive_stream_.is_valid())
-      return;
-
-    base::RunLoop run_loop;
-    run_loop_ = &run_loop;
-    run_loop.Run();
-    run_loop_ = nullptr;
-  }
-
-  void Send(const std::string& message) {
-    DCHECK(!message.empty());
-
-    uint32_t size = static_cast<uint32_t>(message.size());
-    write_send_stream_->Write(
-        &message[0], size,
-        base::Bind(&WebSocketClientImpl::OnFinishedWritingSendStream,
-                   base::Unretained(this), size));
-  }
-
-  void WaitForMessage(size_t count) {
-    DCHECK(!run_loop_);
-
-    if (received_messages_.size() >= count)
-      return;
-    wait_for_message_count_ = count;
-    base::RunLoop run_loop;
-    run_loop_ = &run_loop;
-    run_loop.Run();
-    run_loop_ = nullptr;
-  }
-
-  std::vector<std::string>& received_messages() { return received_messages_; }
-
- private:
-  // WebSocketClient implementation.
-  void DidConnect(const String& selected_subprotocol,
-                  const String& extensions,
-                  ScopedDataPipeConsumerHandle receive_stream) override {
-    receive_stream_ = std::move(receive_stream);
-    read_receive_stream_.reset(new WebSocketReadQueue(receive_stream_.get()));
-
-    web_socket_->FlowControl(2048);
-    if (run_loop_)
-      run_loop_->Quit();
-  }
-
-  void DidReceiveData(bool fin,
-                      WebSocket::MessageType type,
-                      uint32_t num_bytes) override {
-    DCHECK(num_bytes > 0);
-
-    read_receive_stream_->Read(
-        num_bytes,
-        base::Bind(&WebSocketClientImpl::OnFinishedReadingReceiveStream,
-                   base::Unretained(this), num_bytes));
-  }
-
-  void DidReceiveFlowControl(int64_t quota) override {}
-
-  void DidFail(const String& message) override {}
-
-  void DidClose(bool was_clean, uint16_t code, const String& reason) override {}
-
-  void OnFinishedWritingSendStream(uint32_t num_bytes, const char* buffer) {
-    EXPECT_TRUE(buffer);
-
-    web_socket_->Send(true, WebSocket::MessageType::TEXT, num_bytes);
-  }
-
-  void OnFinishedReadingReceiveStream(uint32_t num_bytes, const char* data) {
-    EXPECT_TRUE(data);
-
-    received_messages_.push_back(std::string(data, num_bytes));
-    if (run_loop_ && received_messages_.size() >= wait_for_message_count_) {
-      wait_for_message_count_ = 0;
-      run_loop_->Quit();
-    }
-  }
-
-  WebSocketClientPtr client_ptr_;
-  Binding<WebSocketClient> binding_;
-  WebSocketPtr web_socket_;
-
-  ScopedDataPipeProducerHandle send_stream_;
-  scoped_ptr<WebSocketWriteQueue> write_send_stream_;
-
-  ScopedDataPipeConsumerHandle receive_stream_;
-  scoped_ptr<WebSocketReadQueue> read_receive_stream_;
-
-  std::vector<std::string> received_messages_;
-  size_t wait_for_message_count_;
-
-  // Pointing to a stack-allocated RunLoop instance.
-  base::RunLoop* run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebSocketClientImpl);
-};
-
-class HttpConnectionDelegateImpl : public HttpConnectionDelegate {
- public:
-  struct PendingRequest {
-    HttpRequestPtr request;
-    OnReceivedRequestCallback callback;
-  };
-
-  HttpConnectionDelegateImpl(HttpConnectionPtr connection,
-                             InterfaceRequest<HttpConnectionDelegate> request)
-      : connection_(std::move(connection)),
-        binding_(this, std::move(request)),
-        wait_for_request_count_(0),
-        run_loop_(nullptr) {}
-  ~HttpConnectionDelegateImpl() override {}
-
-  // HttpConnectionDelegate implementation:
-  void OnReceivedRequest(HttpRequestPtr request,
-                         const OnReceivedRequestCallback& callback) override {
-    linked_ptr<PendingRequest> pending_request(new PendingRequest);
-    pending_request->request = std::move(request);
-    pending_request->callback = callback;
-    pending_requests_.push_back(pending_request);
-    if (run_loop_ && pending_requests_.size() >= wait_for_request_count_) {
-      wait_for_request_count_ = 0;
-      run_loop_->Quit();
-    }
-  }
-
-  void OnReceivedWebSocketRequest(
-      HttpRequestPtr request,
-      const OnReceivedWebSocketRequestCallback& callback) override {
-    web_socket_.reset(new WebSocketClientImpl());
-
-    web_socket_->AcceptConnectRequest(callback);
-
-    if (run_loop_)
-      run_loop_->Quit();
-  }
-
-  void SendResponse(HttpResponsePtr response) {
-    ASSERT_FALSE(pending_requests_.empty());
-    linked_ptr<PendingRequest> request = pending_requests_[0];
-    pending_requests_.erase(pending_requests_.begin());
-    request->callback.Run(std::move(response));
-  }
-
-  void WaitForRequest(size_t count) {
-    DCHECK(!run_loop_);
-
-    if (pending_requests_.size() >= count)
-      return;
-
-    wait_for_request_count_ = count;
-    base::RunLoop run_loop;
-    run_loop_ = &run_loop;
-    run_loop.Run();
-    run_loop_ = nullptr;
-  }
-
-  void WaitForWebSocketRequest() {
-    DCHECK(!run_loop_);
-
-    if (web_socket_)
-      return;
-
-    base::RunLoop run_loop;
-    run_loop_ = &run_loop;
-    run_loop.Run();
-    run_loop_ = nullptr;
-  }
-
-  std::vector<linked_ptr<PendingRequest>>& pending_requests() {
-    return pending_requests_;
-  }
-
-  WebSocketClientImpl* web_socket() { return web_socket_.get(); }
-
- private:
-  HttpConnectionPtr connection_;
-  Binding<HttpConnectionDelegate> binding_;
-  std::vector<linked_ptr<PendingRequest>> pending_requests_;
-  size_t wait_for_request_count_;
-  scoped_ptr<WebSocketClientImpl> web_socket_;
-
-  // Pointing to a stack-allocated RunLoop instance.
-  base::RunLoop* run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(HttpConnectionDelegateImpl);
-};
-
-class HttpServerDelegateImpl : public HttpServerDelegate {
- public:
-  explicit HttpServerDelegateImpl(HttpServerDelegatePtr* delegate_ptr)
-      : binding_(this, delegate_ptr),
-        wait_for_connection_count_(0),
-        run_loop_(nullptr) {}
-  ~HttpServerDelegateImpl() override {}
-
-  // HttpServerDelegate implementation.
-  void OnConnected(HttpConnectionPtr connection,
-                   InterfaceRequest<HttpConnectionDelegate> delegate) override {
-    connections_.push_back(make_linked_ptr(new HttpConnectionDelegateImpl(
-        std::move(connection), std::move(delegate))));
-    if (run_loop_ && connections_.size() >= wait_for_connection_count_) {
-      wait_for_connection_count_ = 0;
-      run_loop_->Quit();
-    }
-  }
-
-  void WaitForConnection(size_t count) {
-    DCHECK(!run_loop_);
-
-    if (connections_.size() >= count)
-      return;
-
-    wait_for_connection_count_ = count;
-    base::RunLoop run_loop;
-    run_loop_ = &run_loop;
-    run_loop.Run();
-    run_loop_ = nullptr;
-  }
-
-  std::vector<linked_ptr<HttpConnectionDelegateImpl>>& connections() {
-    return connections_;
-  }
-
- private:
-  Binding<HttpServerDelegate> binding_;
-  std::vector<linked_ptr<HttpConnectionDelegateImpl>> connections_;
-  size_t wait_for_connection_count_;
-  // Pointing to a stack-allocated RunLoop instance.
-  base::RunLoop* run_loop_;
-
-  DISALLOW_COPY_AND_ASSIGN(HttpServerDelegateImpl);
-};
-
-class HttpServerTest : public test::ShellTest {
- public:
-  HttpServerTest()
-      : ShellTest("exe:network_service_unittests") {}
-  ~HttpServerTest() override {}
-
- protected:
-  void SetUp() override {
-    ShellTest::SetUp();
-
-    scoped_ptr<Connection> connection =
-        connector()->Connect("mojo:network_service");
-    connection->GetInterface(&network_service_);
-    connection->GetInterface(&web_socket_factory_);
-  }
-
-  scoped_ptr<base::MessageLoop> CreateMessageLoop() override {
-    return make_scoped_ptr(new base::MessageLoop(base::MessageLoop::TYPE_IO));
-  }
-
-  void CreateHttpServer(HttpServerDelegatePtr delegate,
-                        NetAddressPtr* out_bound_to) {
-    base::RunLoop loop;
-    network_service_->CreateHttpServer(
-        GetLocalHostWithAnyPort(), std::move(delegate),
-        [out_bound_to, &loop](NetworkErrorPtr result, NetAddressPtr bound_to) {
-          ASSERT_EQ(net::OK, result->code);
-          EXPECT_NE(0u, bound_to->ipv4->port);
-          *out_bound_to = std::move(bound_to);
-          loop.Quit();
-        });
-    loop.Run();
-  }
-
-  NetworkServicePtr network_service_;
-  WebSocketFactoryPtr web_socket_factory_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(HttpServerTest);
-};
-
-}  // namespace
-
-TEST_F(HttpServerTest, BasicHttpRequestResponse) {
-  NetAddressPtr bound_to;
-  HttpServerDelegatePtr server_delegate_ptr;
-  HttpServerDelegateImpl server_delegate_impl(&server_delegate_ptr);
-  CreateHttpServer(std::move(server_delegate_ptr), &bound_to);
-
-  TestHttpClient client;
-  client.Connect(bound_to.To<net::IPEndPoint>());
-
-  server_delegate_impl.WaitForConnection(1);
-  HttpConnectionDelegateImpl& connection =
-      *server_delegate_impl.connections()[0];
-
-  TestRequest request_data = {"HEAD", "/test", {{"Hello", "World"}}, nullptr};
-  client.Send(MakeRequestMessage(request_data));
-
-  connection.WaitForRequest(1);
-
-  CheckRequest(request_data,
-               std::move(connection.pending_requests()[0]->request));
-
-  TestResponse response_data = {200, {{"Content-Length", "4"}}, nullptr};
-  connection.SendResponse(MakeResponseStruct(response_data));
-  // This causes the underlying TCP connection to be closed. The client can
-  // determine the end of the response based on that.
-  server_delegate_impl.connections().clear();
-
-  std::string response_message;
-  client.ReadResponse(&response_message);
-
-  CheckResponse(response_data, response_message);
-}
-
-TEST_F(HttpServerTest, HttpRequestResponseWithBody) {
-  NetAddressPtr bound_to;
-  HttpServerDelegatePtr server_delegate_ptr;
-  HttpServerDelegateImpl server_delegate_impl(&server_delegate_ptr);
-  CreateHttpServer(std::move(server_delegate_ptr), &bound_to);
-
-  TestHttpClient client;
-  client.Connect(bound_to.To<net::IPEndPoint>());
-
-  server_delegate_impl.WaitForConnection(1);
-  HttpConnectionDelegateImpl& connection =
-      *server_delegate_impl.connections()[0];
-
-  TestRequest request_data = {
-      "Post",
-      "/test",
-      {{"Hello", "World"},
-       {"Content-Length", "23"},
-       {"Content-Type", "text/plain"}},
-      make_scoped_ptr(new std::string("This is a test request!"))};
-  client.Send(MakeRequestMessage(request_data));
-
-  connection.WaitForRequest(1);
-
-  CheckRequest(request_data,
-               std::move(connection.pending_requests()[0]->request));
-
-  TestResponse response_data = {
-      200,
-      {{"Content-Length", "26"}},
-      make_scoped_ptr(new std::string("This is a test response..."))};
-  connection.SendResponse(MakeResponseStruct(response_data));
-
-  std::string response_message;
-  client.ReadResponse(&response_message);
-
-  CheckResponse(response_data, response_message);
-}
-
-TEST_F(HttpServerTest, WebSocket) {
-  NetAddressPtr bound_to;
-  HttpServerDelegatePtr server_delegate_ptr;
-  HttpServerDelegateImpl server_delegate_impl(&server_delegate_ptr);
-  CreateHttpServer(std::move(server_delegate_ptr), &bound_to);
-
-  WebSocketPtr web_socket_ptr;
-  web_socket_factory_->CreateWebSocket(GetProxy(&web_socket_ptr));
-  WebSocketClientImpl socket_0;
-  socket_0.Connect(
-      std::move(web_socket_ptr),
-      base::StringPrintf("ws://127.0.0.1:%d/hello", bound_to->ipv4->port));
-
-  server_delegate_impl.WaitForConnection(1);
-  HttpConnectionDelegateImpl& connection =
-      *server_delegate_impl.connections()[0];
-
-  connection.WaitForWebSocketRequest();
-  WebSocketClientImpl& socket_1 = *connection.web_socket();
-
-  socket_1.WaitForConnectCompletion();
-  socket_0.WaitForConnectCompletion();
-
-  socket_0.Send("Hello");
-  socket_0.Send("world!");
-
-  socket_1.WaitForMessage(2);
-  EXPECT_EQ("Hello", socket_1.received_messages()[0]);
-  EXPECT_EQ("world!", socket_1.received_messages()[1]);
-
-  socket_1.Send("How do");
-  socket_1.Send("you do?");
-
-  socket_0.WaitForMessage(2);
-  EXPECT_EQ("How do", socket_0.received_messages()[0]);
-  EXPECT_EQ("you do?", socket_0.received_messages()[1]);
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/main.cc b/mojo/services/network/main.cc
deleted file mode 100644
index 3ae88bc..0000000
--- a/mojo/services/network/main.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/message_loop/message_loop.h"
-#include "mojo/public/c/system/main.h"
-#include "mojo/services/network/network_service_delegate.h"
-#include "mojo/shell/public/cpp/application_runner.h"
-
-MojoResult MojoMain(MojoHandle shell_handle) {
-  mojo::ApplicationRunner runner(new mojo::NetworkServiceDelegate);
-  runner.set_message_loop_type(base::MessageLoop::TYPE_IO);
-  return runner.Run(shell_handle);
-}
diff --git a/mojo/services/network/manifest.json b/mojo/services/network/manifest.json
deleted file mode 100644
index d4bf307..0000000
--- a/mojo/services/network/manifest.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "name": "mojo:network_service",
-  "display_name": "Network Service",
-  "capabilities": { "*": [ "*" ] }
-}
diff --git a/mojo/services/network/net_adapters.cc b/mojo/services/network/net_adapters.cc
deleted file mode 100644
index 0797525..0000000
--- a/mojo/services/network/net_adapters.cc
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/net_adapters.h"
-
-#include <stdint.h>
-
-#include <utility>
-
-#include "net/base/net_errors.h"
-
-namespace mojo {
-
-namespace {
-
-const uint32_t kMaxBufSize = 64 * 1024;
-
-}  // namespace
-
-NetToMojoPendingBuffer::NetToMojoPendingBuffer(
-    ScopedDataPipeProducerHandle handle,
-    void* buffer)
-    : handle_(std::move(handle)), buffer_(buffer) {}
-
-NetToMojoPendingBuffer::~NetToMojoPendingBuffer() {
-  if (handle_.is_valid())
-    EndWriteDataRaw(handle_.get(), 0);
-}
-
-// static
-MojoResult NetToMojoPendingBuffer::BeginWrite(
-    ScopedDataPipeProducerHandle* handle,
-    scoped_refptr<NetToMojoPendingBuffer>* pending,
-    uint32_t* num_bytes) {
-  void* buf;
-  *num_bytes = 0;
-
-  MojoResult result = BeginWriteDataRaw(handle->get(), &buf, num_bytes,
-                                        MOJO_WRITE_DATA_FLAG_NONE);
-  if (result == MOJO_RESULT_OK) {
-    if (*num_bytes > kMaxBufSize)
-      *num_bytes = kMaxBufSize;
-    *pending = new NetToMojoPendingBuffer(std::move(*handle), buf);
-  }
-  return result;
-}
-
-ScopedDataPipeProducerHandle NetToMojoPendingBuffer::Complete(
-    uint32_t num_bytes) {
-  EndWriteDataRaw(handle_.get(), num_bytes);
-  buffer_ = NULL;
-  return std::move(handle_);
-}
-
-// -----------------------------------------------------------------------------
-
-NetToMojoIOBuffer::NetToMojoIOBuffer(
-    NetToMojoPendingBuffer* pending_buffer)
-    : net::WrappedIOBuffer(pending_buffer->buffer()),
-      pending_buffer_(pending_buffer) {
-}
-
-NetToMojoIOBuffer::~NetToMojoIOBuffer() {
-}
-
-// -----------------------------------------------------------------------------
-
-MojoToNetPendingBuffer::MojoToNetPendingBuffer(
-    ScopedDataPipeConsumerHandle handle,
-    const void* buffer)
-    : handle_(std::move(handle)), buffer_(buffer) {}
-
-MojoToNetPendingBuffer::~MojoToNetPendingBuffer() {
-}
-
-// static
-MojoResult MojoToNetPendingBuffer::BeginRead(
-    ScopedDataPipeConsumerHandle* handle,
-    scoped_refptr<MojoToNetPendingBuffer>* pending,
-    uint32_t* num_bytes) {
-  const void* buffer = NULL;
-  *num_bytes = 0;
-  MojoResult result = BeginReadDataRaw(handle->get(), &buffer, num_bytes,
-                                       MOJO_READ_DATA_FLAG_NONE);
-  if (result == MOJO_RESULT_OK)
-    *pending = new MojoToNetPendingBuffer(std::move(*handle), buffer);
-  return result;
-}
-
-ScopedDataPipeConsumerHandle MojoToNetPendingBuffer::Complete(
-    uint32_t num_bytes) {
-  EndReadDataRaw(handle_.get(), num_bytes);
-  buffer_ = NULL;
-  return std::move(handle_);
-}
-
-// -----------------------------------------------------------------------------
-
-MojoToNetIOBuffer::MojoToNetIOBuffer(MojoToNetPendingBuffer* pending_buffer)
-    : net::WrappedIOBuffer(pending_buffer->buffer()),
-      pending_buffer_(pending_buffer) {
-}
-
-MojoToNetIOBuffer::~MojoToNetIOBuffer() {
-}
-
-// -----------------------------------------------------------------------------
-
-NetworkErrorPtr MakeNetworkError(int error_code) {
-  NetworkErrorPtr error = NetworkError::New();
-  error->code = error_code;
-  if (error_code <= 0)
-    error->description = net::ErrorToString(error_code);
-  return error;
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/net_adapters.h b/mojo/services/network/net_adapters.h
deleted file mode 100644
index e84c5019..0000000
--- a/mojo/services/network/net_adapters.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_NET_ADAPTERS_H_
-#define MOJO_SERVICES_NETWORK_NET_ADAPTERS_H_
-
-#include <stdint.h>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "mojo/services/network/public/interfaces/network_error.mojom.h"
-#include "net/base/io_buffer.h"
-
-namespace mojo {
-
-// These adapters are used to transfer data between a Mojo pipe and the net
-// library. There are four adapters, one for each end in each direction:
-//
-//   Mojo pipe              Data flow    Network library
-//   ----------------------------------------------------------
-//   MojoToNetPendingBuffer    --->      MojoToNetIOBuffer
-//   NetToMojoPendingBuffer    <---      NetToMojoIOBuffer
-//
-// While the operation is in progress, the Mojo-side objects keep ownership
-// of the Mojo pipe, which in turn is kept alive by the IOBuffer. This allows
-// the request to potentially outlive the object managing the translation.
-
-// Mojo side of a Net -> Mojo copy. The buffer is allocated by Mojo.
-class NetToMojoPendingBuffer
-    : public base::RefCountedThreadSafe<NetToMojoPendingBuffer> {
- public:
-  // Begins a two-phase write to the data pipe.
-  //
-  // On success, MOJO_RESULT_OK will be returned. The ownership of the given
-  // producer handle will be transferred to the new NetToMojoPendingBuffer that
-  // will be placed into *pending, and the size of the buffer will be in
-  // *num_bytes.
-  //
-  // On failure or MOJO_RESULT_SHOULD_WAIT, there will be no change to the
-  // handle, and *pending and *num_bytes will be unused.
-  static MojoResult BeginWrite(ScopedDataPipeProducerHandle* handle,
-                               scoped_refptr<NetToMojoPendingBuffer>* pending,
-                               uint32_t* num_bytes);
-
-  // Called to indicate the buffer is done being written to. Passes ownership
-  // of the pipe back to the caller.
-  ScopedDataPipeProducerHandle Complete(uint32_t num_bytes);
-
-  char* buffer() { return static_cast<char*>(buffer_); }
-
- private:
-  friend class base::RefCountedThreadSafe<NetToMojoPendingBuffer>;
-
-  // Takes ownership of the handle.
-  NetToMojoPendingBuffer(ScopedDataPipeProducerHandle handle, void* buffer);
-  ~NetToMojoPendingBuffer();
-
-  ScopedDataPipeProducerHandle handle_;
-  void* buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetToMojoPendingBuffer);
-};
-
-// Net side of a Net -> Mojo copy. The data will be read from the network and
-// copied into the buffer associated with the pending mojo write.
-class NetToMojoIOBuffer : public net::WrappedIOBuffer {
- public:
-  explicit NetToMojoIOBuffer(NetToMojoPendingBuffer* pending_buffer);
-
- private:
-  ~NetToMojoIOBuffer() override;
-
-  scoped_refptr<NetToMojoPendingBuffer> pending_buffer_;
-};
-
-// Mojo side of a Mojo -> Net copy.
-class MojoToNetPendingBuffer
-    : public base::RefCountedThreadSafe<MojoToNetPendingBuffer> {
- public:
-  // Starts reading from Mojo.
-  //
-  // On success, MOJO_RESULT_OK will be returned. The ownership of the given
-  // consumer handle will be transferred to the new MojoToNetPendingBuffer that
-  // will be placed into *pending, and the size of the buffer will be in
-  // *num_bytes.
-  //
-  // On failure or MOJO_RESULT_SHOULD_WAIT, there will be no change to the
-  // handle, and *pending and *num_bytes will be unused.
-  static MojoResult BeginRead(ScopedDataPipeConsumerHandle* handle,
-                              scoped_refptr<MojoToNetPendingBuffer>* pending,
-                              uint32_t* num_bytes);
-
-  // Indicates the buffer is done being read from. Passes ownership of the pipe
-  // back to the caller. The argument is the number of bytes actually read,
-  // since net may do partial writes, which will result in partial reads from
-  // the Mojo pipe's perspective.
-  ScopedDataPipeConsumerHandle Complete(uint32_t num_bytes);
-
-  const char* buffer() { return static_cast<const char*>(buffer_); }
-
- private:
-  friend class base::RefCountedThreadSafe<MojoToNetPendingBuffer>;
-
-  // Takes ownership of the handle.
-  explicit MojoToNetPendingBuffer(ScopedDataPipeConsumerHandle handle,
-                                  const void* buffer);
-  ~MojoToNetPendingBuffer();
-
-  ScopedDataPipeConsumerHandle handle_;
-  const void* buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(MojoToNetPendingBuffer);
-};
-
-// Net side of a Mojo -> Net copy. The data will already be in the
-// MojoToNetPendingBuffer's buffer.
-class MojoToNetIOBuffer : public net::WrappedIOBuffer {
- public:
-  explicit MojoToNetIOBuffer(MojoToNetPendingBuffer* pending_buffer);
-
- private:
-  ~MojoToNetIOBuffer() override;
-
-  scoped_refptr<MojoToNetPendingBuffer> pending_buffer_;
-};
-
-// Creates a new Mojo network error object from a net error code.
-NetworkErrorPtr MakeNetworkError(int error_code);
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_NET_ADAPTERS_H_
diff --git a/mojo/services/network/net_address_type_converters.cc b/mojo/services/network/net_address_type_converters.cc
deleted file mode 100644
index dcd7d73b1..0000000
--- a/mojo/services/network/net_address_type_converters.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdint.h>
-
-#include "mojo/services/network/net_address_type_converters.h"
-
-namespace mojo {
-
-// static
-net::IPEndPoint TypeConverter<net::IPEndPoint, NetAddressPtr>::Convert(
-    const NetAddressPtr& obj) {
-  if (!obj)
-    return net::IPEndPoint();
-
-  switch (obj->family) {
-    case NetAddressFamily::IPV4:
-      if (!obj->ipv4)
-        break;
-      return net::IPEndPoint(obj->ipv4->addr.storage(), obj->ipv4->port);
-
-    case NetAddressFamily::IPV6:
-      if (!obj->ipv6)
-        break;
-      return net::IPEndPoint(obj->ipv6->addr.storage(), obj->ipv6->port);
-
-    default:
-      break;
-  }
-
-  return net::IPEndPoint();
-}
-
-// static
-NetAddressPtr TypeConverter<NetAddressPtr, net::IPEndPoint>::Convert(
-    const net::IPEndPoint& obj) {
-  NetAddressPtr net_address(NetAddress::New());
-
-  switch (obj.GetFamily()) {
-    case net::ADDRESS_FAMILY_IPV4:
-      net_address->family = NetAddressFamily::IPV4;
-      net_address->ipv4 = NetAddressIPv4::New();
-      net_address->ipv4->port = static_cast<uint16_t>(obj.port());
-      net_address->ipv4->addr = Array<uint8_t>::From(obj.address().bytes());
-      break;
-    case net::ADDRESS_FAMILY_IPV6:
-      net_address->ipv6 = NetAddressIPv6::New();
-      net_address->family = NetAddressFamily::IPV6;
-      net_address->ipv6->port = static_cast<uint16_t>(obj.port());
-      net_address->ipv6->addr = Array<uint8_t>::From(obj.address().bytes());
-      break;
-    default:
-      break;
-  }
-
-  return net_address;
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/net_address_type_converters.h b/mojo/services/network/net_address_type_converters.h
deleted file mode 100644
index f9999087..0000000
--- a/mojo/services/network/net_address_type_converters.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_NET_ADDRESS_TYPE_CONVERTERS_H_
-#define MOJO_SERVICES_NETWORK_NET_ADDRESS_TYPE_CONVERTERS_H_
-
-#include "mojo/public/cpp/bindings/type_converter.h"
-#include "mojo/services/network/public/interfaces/net_address.mojom.h"
-#include "net/base/ip_endpoint.h"
-
-namespace mojo {
-
-template <>
-struct TypeConverter<net::IPEndPoint, NetAddressPtr> {
-  static net::IPEndPoint Convert(const NetAddressPtr& obj);
-};
-
-template <>
-struct TypeConverter<NetAddressPtr, net::IPEndPoint> {
-  static NetAddressPtr Convert(const net::IPEndPoint& obj);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_NET_ADDRESS_TYPE_CONVERTERS_H_
diff --git a/mojo/services/network/network_context.cc b/mojo/services/network/network_context.cc
deleted file mode 100644
index 2272238..0000000
--- a/mojo/services/network/network_context.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/network_context.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <algorithm>
-#include <utility>
-#include <vector>
-
-#include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/path_service.h"
-#include "base/strings/string_number_conversions.h"
-#include "mojo/common/user_agent.h"
-#include "mojo/services/network/url_loader_impl.h"
-#include "net/cookies/cookie_monster.h"
-#include "net/dns/host_resolver.h"
-#include "net/dns/mapped_host_resolver.h"
-#include "net/log/net_log_util.h"
-#include "net/log/write_to_file_net_log_observer.h"
-#include "net/proxy/proxy_service.h"
-#include "net/ssl/channel_id_service.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_builder.h"
-
-namespace mojo {
-
-namespace {
-// Applies the specified mapping rules when resolving hosts. Please see the
-// comment of net::MappedHostResolver::AddRulesFromString() for rule format.
-const char kHostResolverRules[] = "host-resolver-rules";
-
-// Ignores certificate-related errors.
-const char kIgnoreCertificateErrors[] = "ignore-certificate-errors";
-
-// Logs network information to the specified file.
-const char kLogNetLog[] = "log-net-log";
-
-// Allows for forcing socket connections to HTTP/HTTPS to use fixed ports.
-const char kTestingFixedHttpPort[] = "testing-fixed-http-port";
-const char kTestingFixedHttpsPort[] = "testing-fixed-https-port";
-
-uint16_t GetPortNumber(const base::CommandLine& command_line,
-                       const base::StringPiece& switch_name) {
-  std::string port_str = command_line.GetSwitchValueASCII(switch_name);
-  unsigned port;
-  if (!base::StringToUint(port_str, &port) || port > 65535) {
-    LOG(ERROR) << "Invalid value for switch " << switch_name << ": '"
-               << port_str << "' is not a valid port number.";
-    return 0;
-  }
-  return static_cast<uint16_t>(port);
-}
-
-}  // namespace
-
-class NetworkContext::MojoNetLog : public net::NetLog {
- public:
-  MojoNetLog() {
-    const base::CommandLine* command_line =
-        base::CommandLine::ForCurrentProcess();
-    if (!command_line->HasSwitch(kLogNetLog))
-      return;
-
-    base::FilePath log_path = command_line->GetSwitchValuePath(kLogNetLog);
-    base::ScopedFILE file;
-#if defined(OS_WIN)
-    file.reset(_wfopen(log_path.value().c_str(), L"w"));
-#elif defined(OS_POSIX)
-    file.reset(fopen(log_path.value().c_str(), "w"));
-#endif
-    if (!file) {
-      LOG(ERROR) << "Could not open file " << log_path.value()
-                 << " for net logging";
-    } else {
-      write_to_file_observer_.reset(new net::WriteToFileNetLogObserver());
-      write_to_file_observer_->set_capture_mode(
-          net::NetLogCaptureMode::IncludeCookiesAndCredentials());
-      write_to_file_observer_->StartObserving(this, std::move(file), nullptr,
-                                              nullptr);
-    }
-  }
-
-  ~MojoNetLog() override {
-    if (write_to_file_observer_)
-      write_to_file_observer_->StopObserving(nullptr);
-  }
-
- private:
-  scoped_ptr<net::WriteToFileNetLogObserver> write_to_file_observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(MojoNetLog);
-};
-
-NetworkContext::NetworkContext(
-    scoped_ptr<net::URLRequestContext> url_request_context)
-    : net_log_(new MojoNetLog),
-      url_request_context_(std::move(url_request_context)),
-      in_shutdown_(false) {
-  url_request_context_->set_net_log(net_log_.get());
-}
-
-NetworkContext::NetworkContext(
-    const base::FilePath& base_path,
-    NetworkServiceDelegate* delegate)
-    : NetworkContext(MakeURLRequestContext(base_path, delegate)) {
-}
-
-NetworkContext::~NetworkContext() {
-  in_shutdown_ = true;
-  // TODO(darin): Be careful about destruction order of member variables?
-
-  // Call each URLLoaderImpl and ask it to release its net::URLRequest, as the
-  // corresponding net::URLRequestContext is going away with this
-  // NetworkContext. The loaders can be deregistering themselves in Cleanup(),
-  // so iterate over a copy.
-  for (auto& url_loader : url_loaders_) {
-    url_loader->Cleanup();
-  }
-}
-
-void NetworkContext::RegisterURLLoader(URLLoaderImpl* url_loader) {
-  DCHECK(url_loaders_.count(url_loader) == 0);
-  url_loaders_.insert(url_loader);
-}
-
-void NetworkContext::DeregisterURLLoader(URLLoaderImpl* url_loader) {
-  if (!in_shutdown_) {
-    size_t removed_count = url_loaders_.erase(url_loader);
-    DCHECK(removed_count);
-  }
-}
-
-size_t NetworkContext::GetURLLoaderCountForTesting() {
-  return url_loaders_.size();
-}
-
-// static
-scoped_ptr<net::URLRequestContext> NetworkContext::MakeURLRequestContext(
-    const base::FilePath& base_path,
-    NetworkServiceDelegate* delegate) {
-  net::URLRequestContextBuilder builder;
-  net::URLRequestContextBuilder::HttpNetworkSessionParams params;
-  const base::CommandLine* command_line =
-      base::CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(kIgnoreCertificateErrors))
-    params.ignore_certificate_errors = true;
-  if (command_line->HasSwitch(kTestingFixedHttpPort)) {
-    params.testing_fixed_http_port =
-        GetPortNumber(*command_line, kTestingFixedHttpPort);
-  }
-  if (command_line->HasSwitch(kTestingFixedHttpsPort)) {
-    params.testing_fixed_https_port =
-        GetPortNumber(*command_line, kTestingFixedHttpsPort);
-  }
-  builder.set_http_network_session_params(params);
-
-  if (command_line->HasSwitch(kHostResolverRules)) {
-    scoped_ptr<net::HostResolver> host_resolver(
-        net::HostResolver::CreateDefaultResolver(nullptr));
-    scoped_ptr<net::MappedHostResolver> remapped_host_resolver(
-        new net::MappedHostResolver(std::move(host_resolver)));
-    remapped_host_resolver->SetRulesFromString(
-        command_line->GetSwitchValueASCII(kHostResolverRules));
-    builder.set_host_resolver(std::move(remapped_host_resolver));
-  }
-
-  builder.set_accept_language("en-us,en");
-  builder.set_user_agent(mojo::common::GetUserAgent());
-  builder.set_proxy_service(net::ProxyService::CreateDirect());
-  builder.set_transport_security_persister_path(base_path);
-
-  net::URLRequestContextBuilder::HttpCacheParams cache_params;
-#if defined(OS_ANDROID)
-  // On Android, we store the cache on disk becase we can run only a single
-  // instance of the shell at a time.
-  cache_params.type = net::URLRequestContextBuilder::HttpCacheParams::DISK;
-  cache_params.path = base_path.Append(FILE_PATH_LITERAL("Cache"));
-#else
-  // On desktop, we store the cache in memory so we can run many shells
-  // in parallel when running tests, otherwise the network services in each
-  // shell will corrupt the disk cache.
-  cache_params.type = net::URLRequestContextBuilder::HttpCacheParams::IN_MEMORY;
-#endif
-
-  builder.EnableHttpCache(cache_params);
-  builder.set_file_enabled(true);
-
-  return builder.Build();
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/network_context.h b/mojo/services/network/network_context.h
deleted file mode 100644
index 36da6d9..0000000
--- a/mojo/services/network/network_context.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_NETWORK_CONTEXT_H_
-#define MOJO_SERVICES_NETWORK_NETWORK_CONTEXT_H_
-
-#include <stddef.h>
-
-#include <set>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/sequenced_task_runner.h"
-
-namespace base {
-class FilePath;
-}
-
-namespace net {
-class URLRequestContext;
-}
-
-namespace mojo {
-class URLLoader;
-class URLLoaderImpl;
-class NetworkServiceDelegate;
-
-class NetworkContext {
- public:
-  explicit NetworkContext(
-      scoped_ptr<net::URLRequestContext> url_request_context);
-  NetworkContext(
-      const base::FilePath& base_path,
-      NetworkServiceDelegate* delegate);
-  ~NetworkContext();
-
-  net::URLRequestContext* url_request_context() {
-    return url_request_context_.get();
-  }
-
-  // These are called by individual url loaders as they are being created and
-  // destroyed.
-  void RegisterURLLoader(URLLoaderImpl* url_loader);
-  void DeregisterURLLoader(URLLoaderImpl* url_loader);
-
- private:
-  friend class UrlLoaderImplTest;
-  size_t GetURLLoaderCountForTesting();
-
-  static scoped_ptr<net::URLRequestContext> MakeURLRequestContext(
-      const base::FilePath& base_path,
-      NetworkServiceDelegate* delegate);
-
-  class MojoNetLog;
-  scoped_ptr<class MojoNetLog> net_log_;
-
-  scoped_ptr<net::URLRequestContext> url_request_context_;
-  // URLLoaderImpls register themselves with the NetworkContext so that they can
-  // be cleaned up when the NetworkContext goes away. This is needed as
-  // net::URLRequests held by URLLoaderImpls have to be gone when
-  // net::URLRequestContext (held by NetworkContext) is destroyed.
-  std::set<URLLoaderImpl*> url_loaders_;
-
-  // Set when entering the destructor, in order to avoid manipulations of the
-  // |url_loaders_| (as a url_loader might delete itself in Cleanup()).
-  bool in_shutdown_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkContext);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_NETWORK_CONTEXT_H_
diff --git a/mojo/services/network/network_service_delegate.cc b/mojo/services/network/network_service_delegate.cc
deleted file mode 100644
index b257331..0000000
--- a/mojo/services/network/network_service_delegate.cc
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/network_service_delegate.h"
-
-#include <utility>
-
-#include "base/at_exit.h"
-#include "base/base_paths.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "base/message_loop/message_loop.h"
-#include "base/path_service.h"
-#include "mojo/message_pump/message_pump_mojo.h"
-#include "mojo/services/network/cookie_store_impl.h"
-#include "mojo/services/network/network_service_delegate_observer.h"
-#include "mojo/services/network/network_service_impl.h"
-#include "mojo/services/network/url_loader_factory_impl.h"
-#include "mojo/services/network/web_socket_factory_impl.h"
-#include "mojo/shell/public/cpp/connection.h"
-#include "mojo/util/capture_util.h"
-
-namespace {
-
-const char kUserDataDir[] = "user-data-dir";
-
-}  // namespace
-
-namespace mojo {
-
-NetworkServiceDelegate::NetworkServiceDelegate() {
-  ref_factory_.set_quit_closure(
-      base::Bind(&NetworkServiceDelegate::Quit, base::Unretained(this)));
-}
-NetworkServiceDelegate::~NetworkServiceDelegate() {}
-
-void NetworkServiceDelegate::AddObserver(
-    NetworkServiceDelegateObserver* observer) {
-  observers_.AddObserver(observer);
-}
-
-void NetworkServiceDelegate::RemoveObserver(
-    NetworkServiceDelegateObserver* observer) {
-  observers_.RemoveObserver(observer);
-}
-
-void NetworkServiceDelegate::Initialize(Connector* connector,
-                                        const Identity& identity,
-                                        uint32_t id) {
-  // TODO(erg): Find everything else that writes to the filesystem and
-  // transition it to proxying mojo:filesystem. We shouldn't have any path
-  // calculation code here, but sadly need it until the transition is done. In
-  // the mean time, manually handle the user-data-dir switch (which gets set in
-  // tests) so that tests are writing to a temp dir.
-  base::FilePath base_path;
-  const base::CommandLine* command_line =
-      base::CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(kUserDataDir)) {
-    base_path = command_line->GetSwitchValuePath(kUserDataDir);
-  } else {
-    CHECK(PathService::Get(base::DIR_TEMP, &base_path));
-    base_path = base_path.Append(FILE_PATH_LITERAL("network_service"));
-  }
-
-  context_.reset(new NetworkContext(base_path, this));
-  tracing_.Initialize(connector, identity.name());
-}
-
-bool NetworkServiceDelegate::AcceptConnection(Connection* connection) {
-  DCHECK(context_);
-  connection->AddInterface<CookieStore>(this);
-  connection->AddInterface<NetworkService>(this);
-  connection->AddInterface<URLLoaderFactory>(this);
-  connection->AddInterface<WebSocketFactory>(this);
-  return true;
-}
-
-void NetworkServiceDelegate::Create(Connection* connection,
-                                    InterfaceRequest<NetworkService> request) {
-  new NetworkServiceImpl(ref_factory_.CreateRef(), std::move(request));
-}
-
-void NetworkServiceDelegate::Create(Connection* connection,
-                                    InterfaceRequest<CookieStore> request) {
-  // TODO(beng): need to find a way to get content origin.
-  new CookieStoreImpl(
-      context_.get(), GURL(),
-      ref_factory_.CreateRef(), std::move(request));
-}
-
-void NetworkServiceDelegate::Create(
-    Connection* connection,
-    InterfaceRequest<WebSocketFactory> request) {
-  new WebSocketFactoryImpl(context_.get(), ref_factory_.CreateRef(),
-                           std::move(request));
-}
-
-void NetworkServiceDelegate::Create(
-    Connection* connection,
-    InterfaceRequest<URLLoaderFactory> request) {
-  new URLLoaderFactoryImpl(context_.get(), ref_factory_.CreateRef(),
-                           std::move(request));
-}
-
-void NetworkServiceDelegate::Quit() {
-  // Destroy the NetworkContext now as it requires MessageLoop::current() upon
-  // destruction and it is the last moment we know for sure that it is
-  // running.
-  context_.reset();
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/network_service_delegate.h b/mojo/services/network/network_service_delegate.h
deleted file mode 100644
index 70989395..0000000
--- a/mojo/services/network/network_service_delegate.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_NETWORK_SERVICE_DELEGATE_H_
-#define MOJO_SERVICES_NETWORK_NETWORK_SERVICE_DELEGATE_H_
-
-#include "base/macros.h"
-#include "base/observer_list.h"
-#include "base/threading/thread.h"
-#include "mojo/services/network/network_context.h"
-#include "mojo/services/network/public/interfaces/cookie_store.mojom.h"
-#include "mojo/services/network/public/interfaces/network_service.mojom.h"
-#include "mojo/services/network/public/interfaces/url_loader_factory.mojom.h"
-#include "mojo/services/network/public/interfaces/web_socket_factory.mojom.h"
-#include "mojo/services/tracing/public/cpp/tracing_impl.h"
-#include "mojo/shell/public/cpp/interface_factory.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "mojo/shell/public/cpp/shell_client.h"
-
-namespace mojo {
-class NetworkServiceDelegateObserver;
-
-class NetworkServiceDelegate : public ShellClient,
-                               public InterfaceFactory<NetworkService>,
-                               public InterfaceFactory<CookieStore>,
-                               public InterfaceFactory<WebSocketFactory>,
-                               public InterfaceFactory<URLLoaderFactory> {
- public:
-  NetworkServiceDelegate();
-  ~NetworkServiceDelegate() override;
-
-  void AddObserver(NetworkServiceDelegateObserver* observer);
-  void RemoveObserver(NetworkServiceDelegateObserver* observer);
-
- private:
-  // mojo::ShellClient implementation.
-  void Initialize(Connector* connector, const Identity& identity,
-                  uint32_t id) override;
-  bool AcceptConnection(Connection* connection) override;
-
-  // InterfaceFactory<NetworkService> implementation.
-  void Create(Connection* connection,
-              InterfaceRequest<NetworkService> request) override;
-
-  // InterfaceFactory<CookieStore> implementation.
-  void Create(Connection* connection,
-              InterfaceRequest<CookieStore> request) override;
-
-  // InterfaceFactory<WebSocketFactory> implementation.
-  void Create(Connection* connection,
-              InterfaceRequest<WebSocketFactory> request) override;
-
-  // InterfaceFactory<URLLoaderFactory> implementation.
-  void Create(Connection* connection,
-              InterfaceRequest<URLLoaderFactory> request) override;
-
- private:
-  void Quit();
-
-  mojo::TracingImpl tracing_;
-
-  // Observers that want notifications that our worker thread is going away.
-  base::ObserverList<NetworkServiceDelegateObserver> observers_;
-
-  scoped_ptr<NetworkContext> context_;
-
-  mojo::MessageLoopRefFactory ref_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(NetworkServiceDelegate);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_NETWORK_SERVICE_DELEGATE_H_
diff --git a/mojo/services/network/network_service_delegate_observer.h b/mojo/services/network/network_service_delegate_observer.h
deleted file mode 100644
index d205b67..0000000
--- a/mojo/services/network/network_service_delegate_observer.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_NETWORK_SERVICE_DELEGATE_OBSERVER_H_
-#define MOJO_SERVICES_NETWORK_NETWORK_SERVICE_DELEGATE_OBSERVER_H_
-
-namespace mojo {
-
-// Observer of events on from the NetworkServiceDelegate.
-//
-// Observers should be registered on the main thread.
-class NetworkServiceDelegateObserver {
- public:
-  ~NetworkServiceDelegateObserver() {}
-
-  // Broadcast right before we attempt to shutdown the IO worker thread. This
-  // is
-  virtual void OnIOWorkerThreadShutdown() = 0;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_NETWORK_SERVICE_DELEGATE_OBSERVER_H_
diff --git a/mojo/services/network/network_service_impl.cc b/mojo/services/network/network_service_impl.cc
deleted file mode 100644
index 1557da8..0000000
--- a/mojo/services/network/network_service_impl.cc
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/network_service_impl.h"
-
-#include <utility>
-
-#include "mojo/services/network/http_server_impl.h"
-#include "mojo/services/network/net_adapters.h"
-#include "mojo/services/network/tcp_bound_socket_impl.h"
-#include "mojo/services/network/udp_socket_impl.h"
-#include "mojo/services/network/url_loader_impl.h"
-#include "net/base/mime_util.h"
-
-namespace mojo {
-
-NetworkServiceImpl::NetworkServiceImpl(
-    scoped_ptr<mojo::MessageLoopRef> app_refcount,
-    InterfaceRequest<NetworkService> request)
-    : app_refcount_(std::move(app_refcount)),
-      binding_(this, std::move(request)) {}
-
-NetworkServiceImpl::~NetworkServiceImpl() {
-}
-
-void NetworkServiceImpl::CreateTCPBoundSocket(
-    NetAddressPtr local_address,
-    InterfaceRequest<TCPBoundSocket> bound_socket,
-    const CreateTCPBoundSocketCallback& callback) {
-  scoped_ptr<TCPBoundSocketImpl> bound(
-      new TCPBoundSocketImpl(app_refcount_->Clone(), std::move(bound_socket)));
-  int net_error = bound->Bind(std::move(local_address));
-  if (net_error != net::OK) {
-    callback.Run(MakeNetworkError(net_error), NetAddressPtr());
-    return;
-  }
-  ignore_result(bound.release());  // Strongly owned by the message pipe.
-  NetAddressPtr resulting_local_address(bound->GetLocalAddress());
-  callback.Run(MakeNetworkError(net::OK), std::move(resulting_local_address));
-}
-
-void NetworkServiceImpl::CreateTCPConnectedSocket(
-    NetAddressPtr remote_address,
-    ScopedDataPipeConsumerHandle send_stream,
-    ScopedDataPipeProducerHandle receive_stream,
-    InterfaceRequest<TCPConnectedSocket> client_socket,
-    const CreateTCPConnectedSocketCallback& callback) {
-  // TODO(brettw) implement this. We need to know what type of socket to use
-  // so we can create the right one (i.e. to pass to TCPSocket::Open) before
-  // doing the connect.
-  callback.Run(MakeNetworkError(net::ERR_NOT_IMPLEMENTED), NetAddressPtr());
-}
-
-void NetworkServiceImpl::CreateUDPSocket(InterfaceRequest<UDPSocket> request) {
-  // The lifetime of this UDPSocketImpl is bound to that of the underlying pipe.
-  new UDPSocketImpl(std::move(request), app_refcount_->Clone());
-}
-
-void NetworkServiceImpl::CreateHttpServer(
-    NetAddressPtr local_address,
-    HttpServerDelegatePtr delegate,
-    const CreateHttpServerCallback& callback) {
-  HttpServerImpl::Create(std::move(local_address), std::move(delegate),
-                         app_refcount_->Clone(), callback);
-}
-
-void NetworkServiceImpl::GetMimeTypeFromFile(
-    const mojo::String& file_path,
-    const GetMimeTypeFromFileCallback& callback) {
-  std::string mime;
-  net::GetMimeTypeFromFile(
-      base::FilePath::FromUTF8Unsafe(file_path.To<std::string>()), &mime);
-  callback.Run(mime);
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/network_service_impl.h b/mojo/services/network/network_service_impl.h
deleted file mode 100644
index 014ca0f..0000000
--- a/mojo/services/network/network_service_impl.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_NETWORK_SERVICE_IMPL_H_
-#define MOJO_SERVICES_NETWORK_NETWORK_SERVICE_IMPL_H_
-
-#include "base/compiler_specific.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/network_service.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "url/gurl.h"
-
-namespace mojo {
-
-class NetworkServiceImpl : public NetworkService {
- public:
-  NetworkServiceImpl(scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                     InterfaceRequest<NetworkService> request);
-  ~NetworkServiceImpl() override;
-
-  // NetworkService methods:
-  void CreateTCPBoundSocket(
-      NetAddressPtr local_address,
-      InterfaceRequest<TCPBoundSocket> bound_socket,
-      const CreateTCPBoundSocketCallback& callback) override;
-  void CreateTCPConnectedSocket(
-      NetAddressPtr remote_address,
-      ScopedDataPipeConsumerHandle send_stream,
-      ScopedDataPipeProducerHandle receive_stream,
-      InterfaceRequest<TCPConnectedSocket> client_socket,
-      const CreateTCPConnectedSocketCallback& callback) override;
-  void CreateUDPSocket(InterfaceRequest<UDPSocket> socket) override;
-  void CreateHttpServer(NetAddressPtr local_address,
-                        HttpServerDelegatePtr delegate,
-                        const CreateHttpServerCallback& callback) override;
-  void GetMimeTypeFromFile(
-      const mojo::String& file_path,
-      const GetMimeTypeFromFileCallback& callback) override;
-
- private:
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-  StrongBinding<NetworkService> binding_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_NETWORK_SERVICE_IMPL_H_
diff --git a/mojo/services/network/public/DEPS b/mojo/services/network/public/DEPS
deleted file mode 100644
index 88036f82..0000000
--- a/mojo/services/network/public/DEPS
+++ /dev/null
@@ -1,10 +0,0 @@
-include_rules = [
-  "-build",
-  "-mojo",
-  "-net",
-  "-services",
-  "-testing",
-  "!mojo/message_pump",
-  "+mojo/public",
-  "+mojo/services/network/public",
-]
diff --git a/mojo/services/network/public/cpp/BUILD.gn b/mojo/services/network/public/cpp/BUILD.gn
deleted file mode 100644
index 8c2734e..0000000
--- a/mojo/services/network/public/cpp/BUILD.gn
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("cpp") {
-  public_configs = [ "../../../public/build/config:mojo_services" ]
-  sources = [
-    "udp_socket_wrapper.cc",
-    "udp_socket_wrapper.h",
-    "web_socket_read_queue.cc",
-    "web_socket_read_queue.h",
-    "web_socket_write_queue.cc",
-    "web_socket_write_queue.h",
-  ]
-
-  deps = [
-    "../interfaces",
-    "//base",
-    "//mojo/message_pump",
-    "//mojo/public/c/system",
-    "//mojo/public/cpp/system",
-    "//mojo/shell/public/cpp",
-  ]
-}
diff --git a/mojo/services/network/public/cpp/DEPS b/mojo/services/network/public/cpp/DEPS
deleted file mode 100644
index dfe3bd8..0000000
--- a/mojo/services/network/public/cpp/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
-  "+network/public",
-]
diff --git a/mojo/services/network/public/cpp/udp_socket_wrapper.cc b/mojo/services/network/public/cpp/udp_socket_wrapper.cc
deleted file mode 100644
index ed74627..0000000
--- a/mojo/services/network/public/cpp/udp_socket_wrapper.cc
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <assert.h>
-#include <stdint.h>
-#include <utility>
-
-#include "base/logging.h"
-#include "network/public/cpp/udp_socket_wrapper.h"
-
-namespace mojo {
-namespace {
-
-const uint32_t kDefaultReceiveQueueSlots = 32;
-
-}  // namespace
-
-UDPSocketWrapper::NegotiateCallbackHandler::NegotiateCallbackHandler(
-    UDPSocketWrapper* delegate)
-    : delegate_(delegate) {
-}
-
-UDPSocketWrapper::NegotiateCallbackHandler::~NegotiateCallbackHandler() {}
-
-void UDPSocketWrapper::NegotiateCallbackHandler::Run(
-    uint32_t actual_size) const {
-  delegate_->OnNegotiateMaxPendingSendRequestsCompleted(actual_size);
-}
-
-UDPSocketWrapper::SendCallbackHandler::SendCallbackHandler(
-    UDPSocketWrapper* delegate,
-    const ErrorCallback& forward_callback)
-    : delegate_(delegate),
-      forward_callback_(forward_callback) {
-}
-
-UDPSocketWrapper::SendCallbackHandler::~SendCallbackHandler() {}
-
-void UDPSocketWrapper::SendCallbackHandler::Run(NetworkErrorPtr result) const {
-  delegate_->OnSendToCompleted(std::move(result), forward_callback_);
-}
-
-UDPSocketWrapper::ReceiverBindingCallback::ReceiverBindingCallback(
-    UDPSocketWrapper* delegate,
-    const Callback<void(NetworkErrorPtr, NetAddressPtr)>& wrapper_callback)
-    : delegate_(delegate), wrapper_callback_(wrapper_callback) {
-}
-
-UDPSocketWrapper::ReceiverBindingCallback::~ReceiverBindingCallback() {
-}
-
-void UDPSocketWrapper::ReceiverBindingCallback::Run(
-    NetworkErrorPtr result,
-    NetAddressPtr addr,
-    InterfaceRequest<UDPSocketReceiver> request) const {
-  delegate_->StartReceivingData(std::move(request));
-  wrapper_callback_.Run(std::move(result), std::move(addr));
-}
-
-UDPSocketWrapper::ReceivedData::ReceivedData() {}
-UDPSocketWrapper::ReceivedData::~ReceivedData() {}
-
-UDPSocketWrapper::SendRequest::SendRequest() {}
-UDPSocketWrapper::SendRequest::~SendRequest() {}
-
-UDPSocketWrapper::UDPSocketWrapper(UDPSocketPtr socket)
-    : binding_(this),
-      socket_(std::move(socket)),
-      max_receive_queue_size_(kDefaultReceiveQueueSlots),
-      max_pending_sends_(1),
-      current_pending_sends_(0) {
-  Initialize(0);
-}
-
-UDPSocketWrapper::UDPSocketWrapper(UDPSocketPtr socket,
-                                   uint32_t receive_queue_slots,
-                                   uint32_t requested_max_pending_sends)
-    : binding_(this),
-      socket_(std::move(socket)),
-      max_receive_queue_size_(receive_queue_slots),
-      max_pending_sends_(1),
-      current_pending_sends_(0) {
-  Initialize(requested_max_pending_sends);
-}
-
-UDPSocketWrapper::~UDPSocketWrapper() {
-  while (!receive_queue_.empty()) {
-    delete receive_queue_.front();
-    receive_queue_.pop();
-  }
-  while (!send_requests_.empty()) {
-    delete send_requests_.front();
-    send_requests_.pop();
-  }
-}
-
-void UDPSocketWrapper::AllowAddressReuse(const ErrorCallback& callback) {
-  socket_->AllowAddressReuse(callback);
-}
-
-void UDPSocketWrapper::Bind(
-    NetAddressPtr addr,
-    const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
-  socket_->Bind(
-      std::move(addr),
-      BindOrConnectCallback(static_cast<BindOrConnectCallback::Runnable*>(
-          new ReceiverBindingCallback(this, callback))));
-}
-
-void UDPSocketWrapper::Connect(
-    NetAddressPtr remote_addr,
-    const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
-  socket_->Connect(
-      std::move(remote_addr),
-      BindOrConnectCallback(static_cast<BindOrConnectCallback::Runnable*>(
-          new ReceiverBindingCallback(this, callback))));
-}
-
-void UDPSocketWrapper::SetSendBufferSize(uint32_t size,
-                                         const ErrorCallback& callback) {
-  socket_->SetSendBufferSize(size, callback);
-}
-
-void UDPSocketWrapper::SetReceiveBufferSize(uint32_t size,
-                                            const ErrorCallback& callback) {
-  socket_->SetReceiveBufferSize(size, callback);
-}
-
-bool UDPSocketWrapper::ReceiveFrom(const ReceiveCallback& callback) {
-  if (receive_queue_.empty()) {
-    receive_requests_.push(callback);
-    return false;
-  }
-
-  ReceivedData* data = receive_queue_.front();
-  receive_queue_.pop();
-  socket_->ReceiveMore(1);
-  callback.Run(std::move(data->result), std::move(data->src_addr),
-               std::move(data->data));
-  delete data;
-  return true;
-}
-
-void UDPSocketWrapper::SendTo(NetAddressPtr dest_addr,
-                              Array<uint8_t> data,
-                              const ErrorCallback& callback) {
-  if (current_pending_sends_ >= max_pending_sends_) {
-    SendRequest* request = new SendRequest();
-    request->dest_addr = std::move(dest_addr);
-    request->data = std::move(data);
-    request->callback = callback;
-    send_requests_.push(request);
-    return;
-  }
-
-  DCHECK(send_requests_.empty());
-  current_pending_sends_++;
-  socket_->SendTo(std::move(dest_addr), std::move(data),
-                  ErrorCallback(static_cast<ErrorCallback::Runnable*>(
-                      new SendCallbackHandler(this, callback))));
-}
-
-void UDPSocketWrapper::OnReceived(NetworkErrorPtr result,
-                                  NetAddressPtr src_addr,
-                                  Array<uint8_t> data) {
-  if (!receive_requests_.empty()) {
-    // The cache should be empty if there are user requests waiting for data.
-    DCHECK(receive_queue_.empty());
-
-    socket_->ReceiveMore(1);
-
-    ReceiveCallback callback = receive_requests_.front();
-    receive_requests_.pop();
-
-    callback.Run(std::move(result), std::move(src_addr), std::move(data));
-    return;
-  }
-
-  DCHECK(receive_queue_.size() < max_receive_queue_size_);
-  ReceivedData* received_data = new ReceivedData();
-  received_data->result = std::move(result);
-  received_data->src_addr = std::move(src_addr);
-  received_data->data = std::move(data);
-  receive_queue_.push(received_data);
-}
-
-void UDPSocketWrapper::Initialize(uint32_t requested_max_pending_sends) {
-  socket_->NegotiateMaxPendingSendRequests(
-      requested_max_pending_sends,
-      Callback<void(uint32_t)>(
-          static_cast< Callback<void(uint32_t)>::Runnable*>(
-              new NegotiateCallbackHandler(this))));
-}
-
-void UDPSocketWrapper::OnNegotiateMaxPendingSendRequestsCompleted(
-    uint32_t actual_size) {
-  DCHECK(max_pending_sends_ == 1);
-
-  if (actual_size == 0) {
-    assert(false);
-    return;
-  }
-
-  max_pending_sends_ = actual_size;
-
-  while (ProcessNextSendRequest());
-}
-
-void UDPSocketWrapper::OnSendToCompleted(
-    NetworkErrorPtr result,
-    const ErrorCallback& forward_callback) {
-  current_pending_sends_--;
-  ProcessNextSendRequest();
-
-  forward_callback.Run(std::move(result));
-}
-
-bool UDPSocketWrapper::ProcessNextSendRequest() {
-  if (current_pending_sends_ >= max_pending_sends_ || send_requests_.empty())
-    return false;
-
-  SendRequest* request = send_requests_.front();
-  send_requests_.pop();
-
-  current_pending_sends_++;
-
-  socket_->SendTo(std::move(request->dest_addr), std::move(request->data),
-                  ErrorCallback(static_cast<ErrorCallback::Runnable*>(
-                      new SendCallbackHandler(this, request->callback))));
-
-  delete request;
-
-  return true;
-}
-
-void UDPSocketWrapper::StartReceivingData(
-    InterfaceRequest<UDPSocketReceiver> request) {
-  binding_.Bind(std::move(request));
-  socket_->ReceiveMore(max_receive_queue_size_);
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/public/cpp/udp_socket_wrapper.h b/mojo/services/network/public/cpp/udp_socket_wrapper.h
deleted file mode 100644
index cf3266e8..0000000
--- a/mojo/services/network/public/cpp/udp_socket_wrapper.h
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_
-#define MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_
-
-#include <stdint.h>
-
-#include <queue>
-
-#include "mojo/public/cpp/bindings/binding.h"
-#include "network/public/interfaces/udp_socket.mojom.h"
-
-namespace mojo {
-
-// This class is a wrapper around the UDPSocket interface. It provides local
-// cache for received datagrams as well as for (excessive) send requests:
-// - You call ReceiveFrom() to retrieve one datagram. If there is already cached
-//   data, the operation completes synchronously.
-// - You don't need to worry about the max-pending-send-requests restriction
-//   imposed by the service side. If you make many SendTo() calls in a short
-//   period of time, it caches excessive requests and sends them later.
-class UDPSocketWrapper : public UDPSocketReceiver {
- public:
-  using ReceiveCallback =
-      Callback<void(NetworkErrorPtr, NetAddressPtr, Array<uint8_t>)>;
-  using ErrorCallback = Callback<void(NetworkErrorPtr)>;
-  using BindOrConnectCallback =
-      Callback<void(NetworkErrorPtr,
-                    NetAddressPtr,
-                    InterfaceRequest<UDPSocketReceiver>)>;
-
-  explicit UDPSocketWrapper(UDPSocketPtr socket);
-
-  // |receive_queue_slots| determines the size (in datagrams) of the local
-  // receive queue, which caches incoming datagrams.
-  // |requested_max_pending_sends| is used to call
-  // NegotiateMaxPendingSendRequests() on |socket|.
-  // The two numbers should be greater than 0. If you would like to use default
-  // values, please use the other constructor.
-  UDPSocketWrapper(UDPSocketPtr socket,
-                   uint32_t receive_queue_slots,
-                   uint32_t requested_max_pending_sends);
-
-  ~UDPSocketWrapper() override;
-
-  void AllowAddressReuse(const ErrorCallback& callback);
-
-  void Bind(NetAddressPtr addr,
-            const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback);
-
-  void Connect(NetAddressPtr remote_addr,
-               const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback);
-
-  void SetSendBufferSize(uint32_t size, const ErrorCallback& callback);
-
-  void SetReceiveBufferSize(uint32_t size, const ErrorCallback& callback);
-
-  // If there are already incoming datagrams cached locally, this method runs
-  // |callback| before it returns, and the return value is set to true.
-  // Otherwise, the return value is set to false and the callback will be run
-  // asynchronously.
-  // If the socket is connected, the net address pointer passed into the
-  // callback is set to null.
-  bool ReceiveFrom(const ReceiveCallback& callback);
-
-  // This method is aware of the max pending send requests allowed by the
-  // service, and caches send requests locally if necessary.
-  // |dest_addr| is allowed to be null if the socket is connected.
-  void SendTo(NetAddressPtr dest_addr,
-              Array<uint8_t> data,
-              const ErrorCallback& callback);
-
- private:
-  class NegotiateCallbackHandler : public Callback<void(uint32_t)>::Runnable {
-   public:
-    explicit NegotiateCallbackHandler(UDPSocketWrapper* delegate);
-    ~NegotiateCallbackHandler() override;
-
-    // Callback<void(uint32_t)>::Runnable implementation:
-    void Run(uint32_t actual_size) const override;
-
-   private:
-    // Because this callback is passed to a method of |socket_|, and |socket_|
-    // is owned by |delegate_|, it should be safe to assume that |delegate_| is
-    // valid if/when Run() is called.
-    UDPSocketWrapper* delegate_;
-  };
-
-  class SendCallbackHandler : public ErrorCallback::Runnable {
-   public:
-    explicit SendCallbackHandler(UDPSocketWrapper* delegate,
-                                 const ErrorCallback& forward_callback);
-    ~SendCallbackHandler() override;
-
-    // ErrorCallback::Runnable implementation:
-    void Run(NetworkErrorPtr result) const override;
-
-   private:
-    // Because this callback is passed to a method of |socket_|, and |socket_|
-    // is owned by |delegate_|, it should be safe to assume that |delegate_| is
-    // valid if/when Run() is called.
-    UDPSocketWrapper* delegate_;
-    ErrorCallback forward_callback_;
-  };
-
-  class ReceiverBindingCallback : public BindOrConnectCallback::Runnable {
-   public:
-    ReceiverBindingCallback(
-        UDPSocketWrapper* delegate,
-        const Callback<void(NetworkErrorPtr, NetAddressPtr)>& wrapper_callback);
-    ~ReceiverBindingCallback() override;
-
-    // BindOrConnectCallback::Runnable implementation:
-    void Run(NetworkErrorPtr result,
-             NetAddressPtr addr,
-             InterfaceRequest<UDPSocketReceiver> request) const override;
-
-   private:
-    // Because this callback is passed to a method of |socket_|, and |socket_|
-    // is owned by |delegate_|, it should be safe to assume that |delegate_| is
-    // valid if/when Run() is called.
-    UDPSocketWrapper* delegate_;
-    const Callback<void(NetworkErrorPtr, NetAddressPtr)> wrapper_callback_;
-  };
-
-  struct ReceivedData {
-    ReceivedData();
-    ~ReceivedData();
-
-    NetworkErrorPtr result;
-    NetAddressPtr src_addr;
-    Array<uint8_t> data;
-  };
-
-  struct SendRequest {
-    SendRequest();
-    ~SendRequest();
-
-    NetAddressPtr dest_addr;
-    Array<uint8_t> data;
-    ErrorCallback callback;
-  };
-
-  // UDPSocketReceiver implementation:
-  void OnReceived(NetworkErrorPtr result,
-                  NetAddressPtr src_addr,
-                  Array<uint8_t> data) override;
-
-  void Initialize(uint32_t requested_max_pending_sends);
-  void OnNegotiateMaxPendingSendRequestsCompleted(uint32_t actual_size);
-
-  void OnSendToCompleted(NetworkErrorPtr result,
-                         const ErrorCallback& forward_callback);
-
-  // Returns true if a send request in |send_requests_| has been processed.
-  bool ProcessNextSendRequest();
-
-  // Binds to a UDPSocketReceiver request and notifies |socket_| that we're
-  // ready to start receiving data.
-  void StartReceivingData(InterfaceRequest<UDPSocketReceiver> request);
-
-  Binding<UDPSocketReceiver> binding_;
-
-  UDPSocketPtr socket_;
-
-  uint32_t max_receive_queue_size_;
-
-  // Owns all the objects that its elements point to.
-  std::queue<ReceivedData*> receive_queue_;
-
-  std::queue<ReceiveCallback> receive_requests_;
-
-  uint32_t max_pending_sends_;
-  uint32_t current_pending_sends_;
-
-  // Owns all the objects that its elements point to.
-  std::queue<SendRequest*> send_requests_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_
diff --git a/mojo/services/network/public/cpp/web_socket_read_queue.cc b/mojo/services/network/public/cpp/web_socket_read_queue.cc
deleted file mode 100644
index 96160c4..0000000
--- a/mojo/services/network/public/cpp/web_socket_read_queue.cc
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "network/public/cpp/web_socket_read_queue.h"
-
-#include <stdint.h>
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-
-namespace mojo {
-
-struct WebSocketReadQueue::Operation {
-  Operation(uint32_t num_bytes,
-            const base::Callback<void(const char*)>& callback)
-      : num_bytes_(num_bytes), callback_(callback), current_num_bytes_(0) {}
-
-  uint32_t num_bytes_;
-  base::Callback<void(const char*)> callback_;
-
-  // If the initial read doesn't return enough data, this array is used to
-  // accumulate data from multiple reads.
-  scoped_ptr<char[]> data_buffer_;
-  // The number of bytes accumulated so far.
-  uint32_t current_num_bytes_;
-};
-
-WebSocketReadQueue::WebSocketReadQueue(DataPipeConsumerHandle handle)
-    : handle_(handle), is_busy_(false), weak_factory_(this) {
-}
-
-WebSocketReadQueue::~WebSocketReadQueue() {
-}
-
-void WebSocketReadQueue::Read(
-    uint32_t num_bytes,
-    const base::Callback<void(const char*)>& callback) {
-  Operation* op = new Operation(num_bytes, callback);
-  queue_.push_back(op);
-
-  if (is_busy_)
-    return;
-
-  is_busy_ = true;
-  TryToRead();
-}
-
-void WebSocketReadQueue::TryToRead() {
-  DCHECK(is_busy_);
-  DCHECK(!queue_.empty());
-  do {
-    Operation* op = queue_[0];
-    const void* buffer = nullptr;
-    uint32_t buffer_size = 0;
-    MojoResult result = BeginReadDataRaw(handle_, &buffer, &buffer_size,
-                                         MOJO_READ_DATA_FLAG_NONE);
-    if (result == MOJO_RESULT_SHOULD_WAIT) {
-      Wait();
-      return;
-    }
-
-    // http://crbug.com/490193 This should run callback as well. May need to
-    // change the callback signature.
-    if (result != MOJO_RESULT_OK)
-      return;
-
-    uint32_t bytes_read = buffer_size < op->num_bytes_ - op->current_num_bytes_
-                              ? buffer_size
-                              : op->num_bytes_ - op->current_num_bytes_;
-
-    // If this is not the initial read, or this is the initial read but doesn't
-    // return enough data, copy the data into |op->data_buffer_|.
-    if (op->data_buffer_ ||
-        bytes_read < op->num_bytes_ - op->current_num_bytes_) {
-      if (!op->data_buffer_) {
-        DCHECK_EQ(0u, op->current_num_bytes_);
-        op->data_buffer_.reset(new char[op->num_bytes_]);
-      }
-
-      memcpy(op->data_buffer_.get() + op->current_num_bytes_, buffer,
-             bytes_read);
-    }
-    op->current_num_bytes_ += bytes_read;
-    DataPipeConsumerHandle handle = handle_;
-    base::WeakPtr<WebSocketReadQueue> self(weak_factory_.GetWeakPtr());
-
-    if (op->current_num_bytes_ >= op->num_bytes_) {
-      DCHECK_EQ(op->current_num_bytes_, op->num_bytes_);
-      const char* returned_buffer = op->data_buffer_
-                                        ? op->data_buffer_.get()
-                                        : static_cast<const char*>(buffer);
-
-      // Ensure |op| is deleted, whether or not |this| goes away.
-      scoped_ptr<Operation> op_deleter(op);
-      queue_.weak_erase(queue_.begin());
-
-      // This call may delete |this|. In that case, |self| will be invalidated.
-      // It may re-enter Read() too. Because |is_busy_| is true during the whole
-      // process, TryToRead() won't be re-entered.
-      op->callback_.Run(returned_buffer);
-    }
-
-    EndReadDataRaw(handle, bytes_read);
-
-    if (!self)
-      return;
-  } while (!queue_.empty());
-  is_busy_ = false;
-}
-
-void WebSocketReadQueue::Wait() {
-  DCHECK(is_busy_);
-  handle_watcher_.Start(
-      handle_,
-      MOJO_HANDLE_SIGNAL_READABLE,
-      MOJO_DEADLINE_INDEFINITE,
-      base::Bind(&WebSocketReadQueue::OnHandleReady, base::Unretained(this)));
-}
-
-void WebSocketReadQueue::OnHandleReady(MojoResult result) {
-  DCHECK(is_busy_);
-  TryToRead();
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/public/cpp/web_socket_read_queue.h b/mojo/services/network/public/cpp/web_socket_read_queue.h
deleted file mode 100644
index 01efe3b..0000000
--- a/mojo/services/network/public/cpp/web_socket_read_queue.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_PUBLIC_CPP_WEB_SOCKET_READ_QUEUE_H_
-#define MOJO_SERVICES_NETWORK_PUBLIC_CPP_WEB_SOCKET_READ_QUEUE_H_
-
-#include <stdint.h>
-
-#include "base/callback.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/weak_ptr.h"
-#include "mojo/message_pump/handle_watcher.h"
-#include "mojo/public/cpp/system/data_pipe.h"
-
-namespace mojo {
-
-// This class simplifies the handling of multiple Reads on a DataPipe. It reads
-// the data in the expected chunk size, calling the callback once a full chunk
-// is ready. Callbacks are owned by this class, and are guaranteed not to be
-// called after this class is destroyed.
-// See also: WebSocketWriteQueue
-class WebSocketReadQueue {
- public:
-  explicit WebSocketReadQueue(DataPipeConsumerHandle handle);
-  ~WebSocketReadQueue();
-
-  void Read(uint32_t num_bytes,
-            const base::Callback<void(const char*)>& callback);
-
- private:
-  struct Operation;
-
-  void TryToRead();
-  void Wait();
-  void OnHandleReady(MojoResult result);
-
-  DataPipeConsumerHandle handle_;
-  common::HandleWatcher handle_watcher_;
-  ScopedVector<Operation> queue_;
-  bool is_busy_;
-  base::WeakPtrFactory<WebSocketReadQueue> weak_factory_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_PUBLIC_CPP_WEB_SOCKET_READ_QUEUE_H_
diff --git a/mojo/services/network/public/cpp/web_socket_write_queue.cc b/mojo/services/network/public/cpp/web_socket_write_queue.cc
deleted file mode 100644
index e47260a..0000000
--- a/mojo/services/network/public/cpp/web_socket_write_queue.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "network/public/cpp/web_socket_write_queue.h"
-
-#include <stdint.h>
-
-#include "base/bind.h"
-#include "base/logging.h"
-
-namespace mojo {
-
-struct WebSocketWriteQueue::Operation {
-  uint32_t num_bytes_;
-  base::Callback<void(const char*)> callback_;
-
-  const char* data_;
-  // Only initialized if the initial Write fails. This saves a copy in
-  // the common case.
-  std::vector<char> data_copy_;
-};
-
-WebSocketWriteQueue::WebSocketWriteQueue(DataPipeProducerHandle handle)
-    : handle_(handle), is_busy_(false), weak_factory_(this) {
-}
-
-WebSocketWriteQueue::~WebSocketWriteQueue() {
-}
-
-void WebSocketWriteQueue::Write(const char* data,
-                                uint32_t num_bytes,
-                                base::Callback<void(const char*)> callback) {
-  Operation* op = new Operation;
-  op->num_bytes_ = num_bytes;
-  op->callback_ = callback;
-  op->data_ = data;
-  queue_.push_back(op);
-
-  if (!is_busy_) {
-    is_busy_ = true;
-    // This call may reset |is_busy_| to false.
-    TryToWrite();
-  }
-
-  if (is_busy_) {
-    // If we have to wait, make a local copy of the data so we know it will
-    // live until we need it.
-    op->data_copy_.resize(num_bytes);
-    memcpy(&op->data_copy_[0], data, num_bytes);
-    op->data_ = &op->data_copy_[0];
-  }
-}
-
-void WebSocketWriteQueue::TryToWrite() {
-  DCHECK(is_busy_);
-  DCHECK(!queue_.empty());
-  do {
-    Operation* op = queue_[0];
-    uint32_t bytes_written = op->num_bytes_;
-    MojoResult result = WriteDataRaw(
-        handle_, op->data_, &bytes_written, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE);
-    if (result == MOJO_RESULT_SHOULD_WAIT) {
-      Wait();
-      return;
-    }
-
-    // Ensure |op| is deleted, whether or not |this| goes away.
-    scoped_ptr<Operation> op_deleter(op);
-    queue_.weak_erase(queue_.begin());
-
-    // http://crbug.com/490193 This should run callback as well. May need to
-    // change the callback signature.
-    if (result != MOJO_RESULT_OK)
-      return;
-
-    base::WeakPtr<WebSocketWriteQueue> self(weak_factory_.GetWeakPtr());
-
-    // This call may delete |this|. In that case, |self| will be invalidated.
-    // It may re-enter Write() too. Because |is_busy_| is true during the whole
-    // process, TryToWrite() won't be re-entered.
-    op->callback_.Run(op->data_);
-
-    if (!self)
-      return;
-  } while (!queue_.empty());
-  is_busy_ = false;
-}
-
-void WebSocketWriteQueue::Wait() {
-  DCHECK(is_busy_);
-  handle_watcher_.Start(handle_,
-                        MOJO_HANDLE_SIGNAL_WRITABLE,
-                        MOJO_DEADLINE_INDEFINITE,
-                        base::Bind(&WebSocketWriteQueue::OnHandleReady,
-                                   base::Unretained(this)));
-}
-
-void WebSocketWriteQueue::OnHandleReady(MojoResult result) {
-  DCHECK(is_busy_);
-  TryToWrite();
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/public/cpp/web_socket_write_queue.h b/mojo/services/network/public/cpp/web_socket_write_queue.h
deleted file mode 100644
index fe513aa..0000000
--- a/mojo/services/network/public/cpp/web_socket_write_queue.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_PUBLIC_CPP_WEB_SOCKET_WRITE_QUEUE_H_
-#define MOJO_SERVICES_NETWORK_PUBLIC_CPP_WEB_SOCKET_WRITE_QUEUE_H_
-
-#include <stdint.h>
-
-#include "base/callback.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/weak_ptr.h"
-#include "mojo/message_pump/handle_watcher.h"
-#include "mojo/public/cpp/system/data_pipe.h"
-
-namespace mojo {
-
-// This class simplifies the handling of multiple Writes on a DataPipe. It
-// writes each chunk all at once (or waits until the pipe is ready before
-// writing), calling the callback when finished. Callbacks are owned by this
-// class, and are guaranteed not to be called after this class is destroyed.
-// See also: WebSocketReadQueue
-class WebSocketWriteQueue {
- public:
-  explicit WebSocketWriteQueue(DataPipeProducerHandle handle);
-  ~WebSocketWriteQueue();
-
-  void Write(const char* data,
-             uint32_t num_bytes,
-             base::Callback<void(const char*)> callback);
-
- private:
-  struct Operation;
-
-  void TryToWrite();
-  void Wait();
-  void OnHandleReady(MojoResult result);
-
-  DataPipeProducerHandle handle_;
-  common::HandleWatcher handle_watcher_;
-  ScopedVector<Operation> queue_;
-  bool is_busy_;
-  base::WeakPtrFactory<WebSocketWriteQueue> weak_factory_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_PUBLIC_CPP_WEB_SOCKET_WRITE_QUEUE_H_
diff --git a/mojo/services/network/public/interfaces/BUILD.gn b/mojo/services/network/public/interfaces/BUILD.gn
deleted file mode 100644
index 64ad3dc..0000000
--- a/mojo/services/network/public/interfaces/BUILD.gn
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//mojo/public/tools/bindings/mojom.gni")
-
-mojom("interfaces") {
-  sources = [
-    "cookie_store.mojom",
-    "http_connection.mojom",
-    "http_message.mojom",
-    "http_server.mojom",
-    "net_address.mojom",
-    "network_error.mojom",
-    "network_service.mojom",
-    "tcp_bound_socket.mojom",
-    "tcp_connected_socket.mojom",
-    "tcp_server_socket.mojom",
-    "udp_socket.mojom",
-    "url_loader.mojom",
-    "url_loader_factory.mojom",
-    "web_socket.mojom",
-    "web_socket_factory.mojom",
-  ]
-
-  import_dirs = [ get_path_info("../../../", "abspath") ]
-}
diff --git a/mojo/services/network/public/interfaces/cookie_store.mojom b/mojo/services/network/public/interfaces/cookie_store.mojom
deleted file mode 100644
index 92a4241..0000000
--- a/mojo/services/network/public/interfaces/cookie_store.mojom
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-interface CookieStore {
-  Get(string url) => (string cookies);
-  Set(string url, string cookie) => (bool success);
-};
diff --git a/mojo/services/network/public/interfaces/http_connection.mojom b/mojo/services/network/public/interfaces/http_connection.mojom
deleted file mode 100644
index 2cb79bd9..0000000
--- a/mojo/services/network/public/interfaces/http_connection.mojom
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/http_message.mojom";
-import "network/public/interfaces/network_error.mojom";
-import "network/public/interfaces/web_socket.mojom";
-
-interface HttpConnection {
-  // Sets the OS send buffer size (in bytes) for the underlying socket.
-  SetSendBufferSize(uint32 size) => (NetworkError result);
-
-  // Sets the OS receive buffer size (in bytes) for the underlying socket.
-  SetReceiveBufferSize(uint32 size) => (NetworkError result);
-};
-
-interface HttpConnectionDelegate {
-  // Called when an HTTP request is received.
-  OnReceivedRequest(HttpRequest request) => (HttpResponse response);
-
-  // Called when an WebSocket request is received.
-  //
-  // If the delegate decides to accept the request, it should respond with
-  // non-null arguments in the callback. |send_stream| is a data pipe which
-  // should remain open for the lifetime of the WebSocket. Data to send over the
-  // WebSocket should be written to the producer end of the |send_stream|.
-  // |web_socket| will be already connected. There is no need to call Connect()
-  // on it. But |client| will still receive a DidConnect() notification.
-  //
-  // NOTE: WebSocket server support is not fully implemented. For now the
-  // following are not supported:
-  // - negotiating subprotocol or extension;
-  // - fragmented or non-text messages;
-  // - failure or close notification;
-  // - flow control.
-  OnReceivedWebSocketRequest(HttpRequest request)
-      => (WebSocket&? web_socket,
-          handle<data_pipe_consumer>? send_stream,
-          WebSocketClient? client);
-};
diff --git a/mojo/services/network/public/interfaces/http_message.mojom b/mojo/services/network/public/interfaces/http_message.mojom
deleted file mode 100644
index b89ba843..0000000
--- a/mojo/services/network/public/interfaces/http_message.mojom
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-struct HttpHeader {
-  string name;
-  string value;
-};
-
-struct HttpRequest {
-  string method = "GET";
-  string url;
-  array<HttpHeader>? headers;
-  handle<data_pipe_consumer>? body;
-};
-
-struct HttpResponse {
-  uint32 status_code = 200;
-  array<HttpHeader>? headers;
-  handle<data_pipe_consumer>? body;
-};
diff --git a/mojo/services/network/public/interfaces/http_server.mojom b/mojo/services/network/public/interfaces/http_server.mojom
deleted file mode 100644
index dde9c45b..0000000
--- a/mojo/services/network/public/interfaces/http_server.mojom
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/http_connection.mojom";
-
-interface HttpServerDelegate {
-  // Called when a connection is established.
-  OnConnected(HttpConnection connection, HttpConnectionDelegate& delegate);
-};
diff --git a/mojo/services/network/public/interfaces/net_address.mojom b/mojo/services/network/public/interfaces/net_address.mojom
deleted file mode 100644
index e91973bd..0000000
--- a/mojo/services/network/public/interfaces/net_address.mojom
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-enum NetAddressFamily {
-  UNSPECIFIED,
-  IPV4,
-  IPV6
-};
-
-struct NetAddressIPv4 {
-  // The port number. This is in the local machine's endianness.
-  uint16 port;
-
-  // The address is expressed in network byte order, so the most significant
-  // byte ("127" in the address "127.0.0.1") will be at index 0.
-  array<uint8, 4> addr;
-};
-
-// All members are expressed in network byte order.
-struct NetAddressIPv6 {
-  // The port number. This is in the local machine's endianness.
-  uint16 port;
-
-  // The address is expressed in network byte order, so the most significant
-  // byte is at index 0.
-  array<uint8, 16> addr;
-};
-
-struct NetAddress {
-  NetAddressFamily family = UNSPECIFIED;
-
-  // At most one of the following fields is non-NULL depending on the value of
-  // |family|.
-  NetAddressIPv4? ipv4;
-  NetAddressIPv6? ipv6;
-};
diff --git a/mojo/services/network/public/interfaces/network_error.mojom b/mojo/services/network/public/interfaces/network_error.mojom
deleted file mode 100644
index 8c229485..0000000
--- a/mojo/services/network/public/interfaces/network_error.mojom
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-struct NetworkError {
-  int32 code;
-  string? description;
-};
diff --git a/mojo/services/network/public/interfaces/network_service.mojom b/mojo/services/network/public/interfaces/network_service.mojom
deleted file mode 100644
index e0c68249..0000000
--- a/mojo/services/network/public/interfaces/network_service.mojom
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/cookie_store.mojom";
-import "network/public/interfaces/http_server.mojom";
-import "network/public/interfaces/net_address.mojom";
-import "network/public/interfaces/network_error.mojom";
-import "network/public/interfaces/tcp_bound_socket.mojom";
-import "network/public/interfaces/tcp_connected_socket.mojom";
-import "network/public/interfaces/udp_socket.mojom";
-import "network/public/interfaces/web_socket.mojom";
-
-// TODO(beng): consider if this should be further reduced to functionality-
-//             specific interfaces.
-interface NetworkService {
-  // Creates a TCP socket bound to a given local address. This bound socket
-  // can be used for creating a client or server socket on that local address.
-  //
-  // If you want to create a client socket to connect to a server and are in
-  // the common case where you don't care about the local address it's bound
-  // to, use CreateTCPConnectedSocket.
-  //
-  // The local address can specify 0 for the port to specify that the OS should
-  // pick an available port for the given address, or it can pass 0 for the
-  // address and port for the OS to pick both the local address and port. In
-  // all success cases, the resulting local address will be passed to the
-  // callback as bound_to.
-  CreateTCPBoundSocket(NetAddress? local_address,
-                       TCPBoundSocket& bound_socket)
-      => (NetworkError result, NetAddress? bound_to);
-
-  // Creates a client socket connected to the given remote address. A local
-  // address and port will be allocated for the connection and passed to the
-  // callback on success.
-  //
-  // If you want control over the local address and port, instead use
-  // CreateTCPBoundSocket.
-  //
-  // IMPORTANT: This does not work yet! We need to add a new parameter to
-  // indicate the protocol type (IPv4 or IPv6) actually be able to create the
-  // right type of socket. We also need to figure out how the client is supposed
-  // to decide between IPv4 and IPv6 on a given system.
-  CreateTCPConnectedSocket(NetAddress remote_address,
-                           handle<data_pipe_consumer> send_stream,
-                           handle<data_pipe_producer> receive_stream,
-                           TCPConnectedSocket& client_socket)
-      => (NetworkError result,
-          NetAddress? local_address);
-
-  CreateUDPSocket(UDPSocket& socket);
-
-  // Starts an HTTP server running on the given local address. The delegate will
-  // be notified with incoming connections.
-  //
-  // The local address can specify 0 for the port to specify that the OS should
-  // pick an available port for the given address, or it can pass 0 for the
-  // address and port for the OS to pick both the local address and port. In
-  // all success cases, the resulting local address will be passed to the
-  // callback as bound_to.
-  CreateHttpServer(NetAddress local_address,
-                   HttpServerDelegate delegate)
-      => (NetworkError result,
-          NetAddress? bound_to);
-
-  // Get the mime type (if any) that is associated with the given file.
-  GetMimeTypeFromFile(string file_path) => (string mime_type);
-};
diff --git a/mojo/services/network/public/interfaces/tcp_bound_socket.mojom b/mojo/services/network/public/interfaces/tcp_bound_socket.mojom
deleted file mode 100644
index c8747d8..0000000
--- a/mojo/services/network/public/interfaces/tcp_bound_socket.mojom
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/net_address.mojom";
-import "network/public/interfaces/network_error.mojom";
-import "network/public/interfaces/tcp_connected_socket.mojom";
-import "network/public/interfaces/tcp_server_socket.mojom";
-
-// Represents a TCP socket that is bound to a local address and port, but
-// is not yet in a listening or connected state.
-//
-// A bound socket can be used to create a server socket listening on the
-// local address, or it can be used to create a client socket by connecting to
-// a remote host. Once StartListening or Connect is called on the bound socket,
-// ownership of the underlying socket will be transferred to the connected or
-// server socket, and the bound socket may be closed.
-interface TCPBoundSocket {
-  // Puts the socket into server mode, awaiting incoming connections.
-  //
-  // Once this function is called, neither StartListening nor Connect can be
-  // used on this socket again.
-  StartListening(TCPServerSocket& server) => (NetworkError result);
-
-  // Puts this socket into client mode by connecting to a remote host. If you
-  // do not care about the local address or port, you can call
-  // NetworkService.CreateTCPConnectedSocket to connect directly and skip the
-  // "bound" state.
-  //
-  // Once this function is called, neither StartListening nor Connect can be
-  // used on this socket again.
-  Connect(NetAddress remote_address,
-          handle<data_pipe_consumer> send_stream,
-          handle<data_pipe_producer> receive_stream,
-          TCPConnectedSocket& client_socket)
-      => (NetworkError result);
-};
diff --git a/mojo/services/network/public/interfaces/tcp_connected_socket.mojom b/mojo/services/network/public/interfaces/tcp_connected_socket.mojom
deleted file mode 100644
index 3f0c160..0000000
--- a/mojo/services/network/public/interfaces/tcp_connected_socket.mojom
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-// Represents a TCP socket connected to a remote system.
-//
-// Reading and writing over the connection are done via the data pipe supplied
-// by the caller when creating the socket.
-interface TCPConnectedSocket {
-  // TODO(brettw) here we put options and what not for controlling the
-  // connection.
-};
diff --git a/mojo/services/network/public/interfaces/tcp_server_socket.mojom b/mojo/services/network/public/interfaces/tcp_server_socket.mojom
deleted file mode 100644
index 9305e1b..0000000
--- a/mojo/services/network/public/interfaces/tcp_server_socket.mojom
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/net_address.mojom";
-import "network/public/interfaces/network_error.mojom";
-import "network/public/interfaces/tcp_connected_socket.mojom";
-
-// Represents a TCP server socket listening for incoming requests.
-interface TCPServerSocket {
-  // Waits for an incoming connection request and hooks up a TCPConnectedSocket
-  // for connecting with the remote host. Only one Accept call can be pending
-  // at a time.
-  //
-  // Once a connection has been established (indicated by a successful
-  // callback), the TCPConnectedSocket may outlive the TCPServerSocket that
-  // created it.
-  //
-  // On success, the address of the remote host will be provided.
-  Accept(handle<data_pipe_consumer> send_stream,
-         handle<data_pipe_producer> receive_stream,
-         TCPConnectedSocket& client_socket)
-      => (NetworkError result, NetAddress? remote_address);
-};
diff --git a/mojo/services/network/public/interfaces/udp_socket.mojom b/mojo/services/network/public/interfaces/udp_socket.mojom
deleted file mode 100644
index 5bb40785..0000000
--- a/mojo/services/network/public/interfaces/udp_socket.mojom
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/net_address.mojom";
-import "network/public/interfaces/network_error.mojom";
-
-// UDPSocket and UDPSocketReceiver represent a UDP socket and its client. The
-// typical flow of using the interfaces is:
-// - Acquire a UDPSocket interface pointer.
-// - (optional) Set options which are allowed prior to Bind()/Connect().
-// - Bind or connect the socket.
-// - (optional) Bind the UDPSocketReceiver request returned by Bind()/Connect()
-// - (optional) Set options which are allowed after Bind()/Connect().
-// - Send / request to receive datagrams. Received datagrams will be delivered
-//   to the bound receiver's OnReceived() call.
-interface UDPSocket {
-  // Allows the socket to share the local address to which it will be bound with
-  // other processes. Should be called before Bind().
-  // (This is equivalent to SO_REUSEADDR of the POSIX socket API.)
-  AllowAddressReuse() => (NetworkError result);
-
-  // Binds the socket to the given address. The socket must not be bound or
-  // connected.
-  // |bound_addr| is non-null on success. It might not be the same as |addr|.
-  // For example, if port 0 is used in |addr|, an available port is picked and
-  // returned in |bound_addr|. The caller may provide an implementation of
-  // |receiver| to receive datagrams read from the socket. |receiver| is null
-  // on failure.
-  Bind(NetAddress addr) => (NetworkError result, NetAddress? bound_addr,
-                            UDPSocketReceiver&? receiver);
-
-  // Connects the socket to the remote address. The socket must not be bound or
-  // connected.
-  // |local_addr| is non-null on success.
-  // The caller may provide an implementation of |receiver| to receive datagrams
-  // read from the socket. |receiver| is null on failure.
-  Connect(NetAddress remote_addr) => (NetworkError result,
-                                      NetAddress? local_addr,
-                                      UDPSocketReceiver&? receiver);
-
-  // Sets the OS send buffer size (in bytes) for the socket. The socket must be
-  // bound or connected.
-  SetSendBufferSize(uint32 size) => (NetworkError result);
-
-  // Sets the OS receive buffer size (in bytes) for the socket. The socket must
-  // be bound or connected.
-  SetReceiveBufferSize(uint32 size) => (NetworkError result);
-
-  // Negotiates the maximum number of pending SendTo() requests. If
-  // |requested_size| is set to 0, this method queries the current settings.
-  //
-  // The service stores SendTo() requests in a queue while they are waiting to
-  // be executed (i.e., while they are waiting to be placed in the OS send
-  // buffer and sent out). This method negotiates how many requests (not bytes)
-  // this queue is able to store. If the queue is full, the service fails new
-  // requests directly with error code ERR_INSUFFICIENT_RESOURCES and discards
-  // those datagrams. If the client wants to avoid such failures, it needs to
-  // keep track of how many SendTo() calls are pending and make sure the number
-  // doesn't exceed the result of this method.
-  NegotiateMaxPendingSendRequests(uint32 requested_size)
-      => (uint32 actual_size);
-
-  // Notifies that the receiver is ready to accept |number| of datagrams.
-  // Correspondingly, OnReceived() of the UDPSocketReceiver interface will be
-  // called |number| times (errors also count), unless the connection is closed
-  // before that.
-  //
-  // It is allowed to call this method again before the previous request is
-  // completely satisfied. For example:
-  //   service->ReceiveMore(3);
-  //   ...
-  //   // OnReceived() is called.
-  //   // OnReceived() is called.
-  //   ...
-  //   service->ReceiveMore(3);
-  //   // The client expects 4 more calls to OnReceived().
-  //
-  // Please note that how ReceiveMore() is used will affect performance
-  // significantly. For example:
-  //   // Approach 1:
-  //   service->ReceiveMore(3);
-  //   // OnReceived() is called.
-  //   // OnReceived() is called.
-  //   // OnReceived() is called.
-  //
-  //   // Approach 2:
-  //   service->ReceiveMore(1);
-  //   // OnReceived() is called.
-  //   service->ReceiveMore(1);
-  //   // OnReceived() is called.
-  //   service->ReceiveMore(1);
-  //   // OnReceived() is called.
-  //
-  // It is very likely that approach 1 will perform better than approach 2,
-  // because in approach 2 getting every datagram takes at least the time of a
-  // round trip to the service side.
-  ReceiveMore(uint32 datagram_number);
-
-  // Sends data to the specified destination. The socket must be bound or
-  // connected. |dest_addr| is allowed to be null if the socket is connected.
-  // On success, |result.code| is a non-negative number indicating how many
-  // bytes have been written. Otherwise, it is a network error code, including
-  // (but not limited to):
-  // - ERR_INSUFFICIENT_RESOURCES (-12): The service doesn't have sufficient
-  //   resource to complete the operation. One possible cause is that the client
-  //   tries to send too many datagrams in a short period of time.
-  // TODO(yzshen): Formalize Mojo networking error codes.
-  SendTo(NetAddress? dest_addr, array<uint8> data) => (NetworkError result);
-};
-
-interface UDPSocketReceiver {
-  // On success, |data| is non-null, |src_addr| is non-null if the socket is
-  // not connected, |result.code| is a non-negative number indicating how many
-  // bytes have been received. On failure, |result.code| is a network error
-  // code.
-  OnReceived(NetworkError result, NetAddress? src_addr, array<uint8>? data);
-};
diff --git a/mojo/services/network/public/interfaces/url_loader.mojom b/mojo/services/network/public/interfaces/url_loader.mojom
deleted file mode 100644
index f7e12c8..0000000
--- a/mojo/services/network/public/interfaces/url_loader.mojom
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/http_message.mojom";
-import "network/public/interfaces/network_error.mojom";
-
-struct URLRequest {
-  // The URL to load.
-  string url;
-
-  // The HTTP method if applicable.
-  string method = "GET";
-
-  // Additional HTTP request headers.
-  array<HttpHeader>? headers;
-
-  // The payload for the request body, represented as a concatenation of data
-  // streams. For HTTP requests, the method must be set to "POST" or "PUT".
-  array<handle<data_pipe_consumer>>? body;
-
-  // The buffer size of the data pipe returned in URLResponse's |body| member.
-  // A value of 0 indicates that the default buffer size should be used.  This
-  // value is just a suggestion. The URLLoader may choose to ignore this value.
-  uint32 response_body_buffer_size = 0;
-
-  // If set to true, then redirects will be automatically followed. Otherwise,
-  // when a redirect is encounterd, FollowRedirect must be called to proceed.
-  bool auto_follow_redirects = false;
-
-  // If set to true, then the HTTP request will bypass the local cache and will
-  // have a 'Cache-Control: nocache' header added in that causes any proxy
-  // servers to also not satisfy the request from their cache.  This has the
-  // effect of forcing a full end-to-end fetch.
-  bool bypass_cache = false;
-
-  // The time when this request originated. 0 indicates that it is not recorded.
-  int64 originating_time_ticks = 0;
-};
-
-struct URLResponse {
-  // If the response resulted in a network level error, this field will be set.
-  NetworkError? error;
-
-  // The response body stream. Read from this data pipe to receive the bytes of
-  // response body.
-  handle<data_pipe_consumer>? body;
-
-  // The final URL of the response, after redirects have been followed.
-  string? url;
-
-  // The site of the URL.
-  string? site;
-
-  // The HTTP status code. 0 if not applicable.
-  uint32 status_code;
-
-  // The HTTP status line.
-  string? status_line;
-
-  // The HTTP response headers.
-  array<HttpHeader>? headers;
-
-  // The MIME type of the response body.
-  string? mime_type;
-
-  // The character set of the response body.
-  string? charset;
-
-  // These fields are set to non-NULL if this response corresponds to a
-  // redirect.  Call the |FollowRedirect| method on the URLLoader instance to
-  // follow this redirect.
-  string? redirect_method;
-  string? redirect_url;
-  string? redirect_referrer;
-};
-
-struct URLLoaderStatus {
-  // If the loader has failed due to a network level error, this field will be
-  // set.
-  NetworkError? error;
-
-  // Set to true if the URLLoader is still working. Set to false once an error
-  // is encountered or the response body is completely copied to the response
-  // body stream.
-  bool is_loading;
-
-  // The length in bytes of the content as reported by the HTTP response header,
-  // and the number of bytes read by the URLLoader thus far.
-  int64 content_length;
-  int64 bytes_read;
-
-  // TODO(darin): Add further details about the stages of loading (e.g.,
-  // "resolving host") that happen prior to receiving bytes.
-};
-
-interface URLLoader {
-  // Loads the given |request|, asynchronously producing |response|. Consult
-  // |response| to determine if the request resulted in an error, was
-  // redirected, or has a response body to be consumed.
-  Start(URLRequest request) => (URLResponse response);
-
-  // If the request passed to |Start| had |auto_follow_redirects| set to false,
-  // then upon receiving an URLResponse with a non-NULL |redirect_url| field,
-  // |FollowRedirect| may be called to load the URL indicated by the redirect.
-  FollowRedirect() => (URLResponse response);
-
-  // Query status about the URLLoader.
-  QueryStatus() => (URLLoaderStatus status);
-};
diff --git a/mojo/services/network/public/interfaces/url_loader_factory.mojom b/mojo/services/network/public/interfaces/url_loader_factory.mojom
deleted file mode 100644
index f6339df..0000000
--- a/mojo/services/network/public/interfaces/url_loader_factory.mojom
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/url_loader.mojom";
-
-interface URLLoaderFactory {
-  CreateURLLoader(URLLoader& loader);
-};
diff --git a/mojo/services/network/public/interfaces/web_socket.mojom b/mojo/services/network/public/interfaces/web_socket.mojom
deleted file mode 100644
index 5d309973..0000000
--- a/mojo/services/network/public/interfaces/web_socket.mojom
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/network_error.mojom";
-
-interface WebSocket {
-  enum MessageType {
-    CONTINUATION,
-    TEXT,
-    BINARY
-  };
-  const uint16 kAbnormalCloseCode = 1006;  // stolen from websocket_bridge
-
-  // Initiates a WebSocket connection to the given url. |send_stream| is a data
-  // pipe which should remain open for the lifetime of the WebSocket. Data
-  // to send over the WebSocket should be written to the producer end of the
-  // |send_stream|.
-  Connect(string url,
-          array<string> protocols,
-          string origin,
-          handle<data_pipe_consumer> send_stream,
-          WebSocketClient client);
-
-  // Called after writing |num_bytes| worth of data to the WebSocket's
-  // |send_stream|.
-  Send(bool fin, MessageType type, uint32 num_bytes);
-
-  FlowControl(int64 quota);
-
-  Close(uint16 code, string reason);
-};
-
-interface WebSocketClient {
-  // Called in response to a WebSocket.Connect call to indicate success
-  // |receive_stream| is a data pipe which where incoming data from
-  // the server is written.
-  DidConnect(string selected_subprotocol,
-             string extensions,
-             handle<data_pipe_consumer> receive_stream);
-
-  // Called when there is |num_bytes| worth of incoming data available on the
-  // |receive_stream|.
-  DidReceiveData(bool fin, WebSocket.MessageType type, uint32 num_bytes);
-
-  DidReceiveFlowControl(int64 quota);
-
-  DidFail(string message);
-
-  DidClose(bool was_clean, uint16 code, string reason);
-
-  // Blink has 3 extra methods that we don't implement, because they are used
-  // for the inspector:
-  // didStartOpeningHandshake
-  // didFinishOpeningHandshake
-  // didStartClosingHandshake
-};
diff --git a/mojo/services/network/public/interfaces/web_socket_factory.mojom b/mojo/services/network/public/interfaces/web_socket_factory.mojom
deleted file mode 100644
index cbee09b..0000000
--- a/mojo/services/network/public/interfaces/web_socket_factory.mojom
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module mojo;
-
-import "network/public/interfaces/web_socket.mojom";
-
-interface WebSocketFactory {
-  CreateWebSocket(WebSocket& socket);
-};
diff --git a/mojo/services/network/tcp_bound_socket_impl.cc b/mojo/services/network/tcp_bound_socket_impl.cc
deleted file mode 100644
index 1d8669f..0000000
--- a/mojo/services/network/tcp_bound_socket_impl.cc
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/tcp_bound_socket_impl.h"
-
-#include <utility>
-
-#include "mojo/services/network/net_adapters.h"
-#include "mojo/services/network/net_address_type_converters.h"
-#include "mojo/services/network/tcp_connected_socket_impl.h"
-#include "mojo/services/network/tcp_server_socket_impl.h"
-#include "net/base/net_errors.h"
-
-namespace mojo {
-
-TCPBoundSocketImpl::TCPBoundSocketImpl(
-    scoped_ptr<mojo::MessageLoopRef> app_refcount,
-    InterfaceRequest<TCPBoundSocket> request)
-    : app_refcount_(std::move(app_refcount)),
-      binding_(this, std::move(request)) {}
-
-TCPBoundSocketImpl::~TCPBoundSocketImpl() {
-}
-
-int TCPBoundSocketImpl::Bind(NetAddressPtr local_address) {
-  net::IPEndPoint end_point = local_address.To<net::IPEndPoint>();
-
-  socket_.reset(new net::TCPSocket(NULL, net::NetLog::Source()));
-  int result = socket_->Open(end_point.GetFamily());
-  if (result != net::OK)
-    return result;
-
-  result = socket_->SetDefaultOptionsForServer();
-  if (result != net::OK)
-    return result;
-
-  result = socket_->Bind(end_point);
-  if (result != net::OK)
-    return result;
-
-  return net::OK;
-}
-
-NetAddressPtr TCPBoundSocketImpl::GetLocalAddress() const {
-  net::IPEndPoint resolved_local_address;
-  if (socket_->GetLocalAddress(&resolved_local_address) != net::OK)
-    return NetAddressPtr();
-  return NetAddress::From(resolved_local_address);
-}
-
-void TCPBoundSocketImpl::StartListening(
-    InterfaceRequest<TCPServerSocket> server,
-    const Callback<void(NetworkErrorPtr)>& callback) {
-  if (!socket_ || pending_connect_socket_.is_pending()) {
-    // A bound socket will only be returned to the caller after binding
-    // succeeds, so if the socket doesn't exist, that means ownership was
-    // already passed to a server socket or client socket.
-    callback.Run(MakeNetworkError(net::ERR_FAILED));
-    return;
-  }
-
-  // TODO(brettw) set the backlog properly.
-  int result = socket_->Listen(4);
-  if (result != net::OK) {
-    callback.Run(MakeNetworkError(result));
-    return;
-  }
-
-  // The server socket object takes ownership of the socket.
-  new TCPServerSocketImpl(std::move(socket_), app_refcount_->Clone(),
-                          std::move(server));
-  callback.Run(MakeNetworkError(net::OK));
-}
-
-void TCPBoundSocketImpl::Connect(
-    NetAddressPtr remote_address,
-    ScopedDataPipeConsumerHandle send_stream,
-    ScopedDataPipeProducerHandle receive_stream,
-    InterfaceRequest<TCPConnectedSocket> client_socket,
-    const Callback<void(NetworkErrorPtr)>& callback) {
-  if (!socket_ || pending_connect_socket_.is_pending()) {
-    // A bound socket will only be returned to the caller after binding
-    // succeeds, so if the socket doesn't exist, that means ownership was
-    // already passed to a server socket or client socket.
-    callback.Run(MakeNetworkError(net::ERR_FAILED));
-    return;
-  }
-
-  net::IPEndPoint end_point = remote_address.To<net::IPEndPoint>();
-
-  pending_connect_send_stream_ = std::move(send_stream);
-  pending_connect_receive_stream_ = std::move(receive_stream);
-  pending_connect_socket_ = std::move(client_socket);
-  pending_connect_callback_ = callback;
-  int result = socket_->Connect(
-      end_point,
-      base::Bind(&TCPBoundSocketImpl::OnConnected, base::Unretained(this)));
-  if (result == net::OK) {
-    OnConnected(result);
-  } else if (result != net::ERR_IO_PENDING) {
-    // Error occurred.
-    pending_connect_send_stream_.reset();
-    pending_connect_receive_stream_.reset();
-    pending_connect_socket_ = InterfaceRequest<TCPConnectedSocket>();
-    pending_connect_callback_ = Callback<void(NetworkErrorPtr)>();
-    callback.Run(MakeNetworkError(result));
-  }
-}
-
-void TCPBoundSocketImpl::OnConnected(int result) {
-  if (result == net::OK) {
-    new TCPConnectedSocketImpl(
-        std::move(socket_), std::move(pending_connect_send_stream_),
-        std::move(pending_connect_receive_stream_),
-        std::move(pending_connect_socket_), app_refcount_->Clone());
-  } else {
-    pending_connect_send_stream_.reset();
-    pending_connect_receive_stream_.reset();
-    pending_connect_socket_ = InterfaceRequest<TCPConnectedSocket>();
-  }
-  pending_connect_callback_.Run(MakeNetworkError(result));
-  pending_connect_callback_ = Callback<void(NetworkErrorPtr)>();
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/tcp_bound_socket_impl.h b/mojo/services/network/tcp_bound_socket_impl.h
deleted file mode 100644
index 8e4b2e8..0000000
--- a/mojo/services/network/tcp_bound_socket_impl.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_TCP_BOUND_SOCKET_H_
-#define MOJO_SERVICES_NETWORK_TCP_BOUND_SOCKET_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/tcp_bound_socket.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "net/socket/tcp_socket.h"
-
-namespace mojo {
-
-class TCPBoundSocketImpl : public TCPBoundSocket {
- public:
-  TCPBoundSocketImpl(scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                     InterfaceRequest<TCPBoundSocket> request);
-  ~TCPBoundSocketImpl() override;
-
-  // Does the actual binding. Returns a net error code. On net::OK, the bound
-  // socket will be ready to use and send back to the client. On failure, this
-  // object should be destroyed and no longer used.
-  int Bind(NetAddressPtr local_address);
-
-  // Returns the local address associated with this socket. This should only
-  // be called after Bind has succeeded.
-  NetAddressPtr GetLocalAddress() const;
-
-  // TCPBoundSocket.
-  void StartListening(InterfaceRequest<TCPServerSocket> server,
-                      const Callback<void(NetworkErrorPtr)>& callback) override;
-  void Connect(NetAddressPtr remote_address,
-               ScopedDataPipeConsumerHandle send_stream,
-               ScopedDataPipeProducerHandle receive_stream,
-               InterfaceRequest<TCPConnectedSocket> client_socket,
-               const Callback<void(NetworkErrorPtr)>& callback) override;
-
- private:
-  void OnConnected(int result);
-
-  scoped_ptr<net::TCPSocket> socket_;
-
-  // Valid when waiting for a connect callback.
-  ScopedDataPipeConsumerHandle pending_connect_send_stream_;
-  ScopedDataPipeProducerHandle pending_connect_receive_stream_;
-  InterfaceRequest<TCPConnectedSocket> pending_connect_socket_;
-  Callback<void(NetworkErrorPtr)> pending_connect_callback_;
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-  StrongBinding<TCPBoundSocket> binding_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_TCP_BOUND_SOCKET_H_
diff --git a/mojo/services/network/tcp_connected_socket_impl.cc b/mojo/services/network/tcp_connected_socket_impl.cc
deleted file mode 100644
index 8da9484..0000000
--- a/mojo/services/network/tcp_connected_socket_impl.cc
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/tcp_connected_socket_impl.h"
-
-#include <stdint.h>
-
-#include <utility>
-
-#include "base/message_loop/message_loop.h"
-#include "mojo/services/network/net_adapters.h"
-#include "net/base/net_errors.h"
-
-namespace mojo {
-
-TCPConnectedSocketImpl::TCPConnectedSocketImpl(
-    scoped_ptr<net::TCPSocket> socket,
-    ScopedDataPipeConsumerHandle send_stream,
-    ScopedDataPipeProducerHandle receive_stream,
-    InterfaceRequest<TCPConnectedSocket> request,
-    scoped_ptr<mojo::MessageLoopRef> app_refcount)
-    : socket_(std::move(socket)),
-      send_stream_(std::move(send_stream)),
-      receive_stream_(std::move(receive_stream)),
-      binding_(this, std::move(request)),
-      app_refcount_(std::move(app_refcount)),
-      weak_ptr_factory_(this) {
-  // Queue up async communication.
-  binding_.set_connection_error_handler([this]() { OnConnectionError(); });
-  ListenForReceivePeerClosed();
-  ListenForSendPeerClosed();
-  ReceiveMore();
-  SendMore();
-}
-
-TCPConnectedSocketImpl::~TCPConnectedSocketImpl() {
-}
-
-void TCPConnectedSocketImpl::OnConnectionError() {
-  binding_.Close();
-  DeleteIfNeeded();
-}
-
-void TCPConnectedSocketImpl::ReceiveMore() {
-  DCHECK(!pending_receive_.get());
-
-  uint32_t num_bytes;
-  MojoResult result = NetToMojoPendingBuffer::BeginWrite(
-      &receive_stream_, &pending_receive_, &num_bytes);
-  if (result == MOJO_RESULT_SHOULD_WAIT) {
-    // The pipe is full. We need to wait for it to have more space.
-    receive_handle_watcher_.Start(
-        receive_stream_.get(), MOJO_HANDLE_SIGNAL_WRITABLE,
-        MOJO_DEADLINE_INDEFINITE,
-        base::Bind(&TCPConnectedSocketImpl::OnReceiveStreamReady,
-                   weak_ptr_factory_.GetWeakPtr()));
-    return;
-  }
-
-  if (result == MOJO_RESULT_FAILED_PRECONDITION) {
-    // It's valid that the user of this class consumed the data they care about
-    // and closed their data pipe handles after writing data. This class should
-    // still write out all the data.
-    ShutdownReceive();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-    return;
-  }
-
-  if (result != MOJO_RESULT_OK) {
-    // The receive stream is in a bad state.
-    ShutdownReceive();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-    return;
-  }
-
-  // Mojo is ready for the receive.
-  CHECK_GT(static_cast<uint32_t>(std::numeric_limits<int>::max()), num_bytes);
-  scoped_refptr<net::IOBuffer> buf(
-      new NetToMojoIOBuffer(pending_receive_.get()));
-  int read_result =
-      socket_->Read(buf.get(), static_cast<int>(num_bytes),
-                    base::Bind(&TCPConnectedSocketImpl::DidReceive,
-                               weak_ptr_factory_.GetWeakPtr(), false));
-  if (read_result == net::ERR_IO_PENDING) {
-    // Pending I/O, wait for result in DidReceive().
-  } else if (read_result > 0) {
-    // Synchronous data ready.
-    DidReceive(true, read_result);
-  } else {
-    // read_result == 0 indicates EOF.
-    // read_result < 0 indicates error.
-    ShutdownReceive();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-  }
-}
-
-void TCPConnectedSocketImpl::OnReceiveStreamReady(MojoResult result) {
-  if (result != MOJO_RESULT_OK) {
-    ShutdownReceive();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-    return;
-  }
-  ListenForReceivePeerClosed();
-  ReceiveMore();
-}
-
-void TCPConnectedSocketImpl::DidReceive(bool completed_synchronously,
-                                        int result) {
-  if (!pending_receive_)
-    return;
-
-  if (result < 0) {
-    // Error.
-    ShutdownReceive();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-    return;
-  }
-
-  receive_stream_ = pending_receive_->Complete(result);
-  pending_receive_ = nullptr;
-
-  // Schedule more reading.
-  if (completed_synchronously) {
-    // Don't recursively call ReceiveMore if this is a sync read.
-    base::MessageLoop::current()->PostTask(
-        FROM_HERE, base::Bind(&TCPConnectedSocketImpl::ReceiveMore,
-                              weak_ptr_factory_.GetWeakPtr()));
-  } else {
-    ReceiveMore();
-  }
-}
-
-void TCPConnectedSocketImpl::ShutdownReceive() {
-  receive_handle_watcher_.Stop();
-  pending_receive_ = nullptr;
-  receive_stream_.reset();
-  DeleteIfNeeded();
-}
-
-void TCPConnectedSocketImpl::ListenForReceivePeerClosed() {
-  receive_handle_watcher_.Start(
-      receive_stream_.get(), MOJO_HANDLE_SIGNAL_PEER_CLOSED,
-      MOJO_DEADLINE_INDEFINITE,
-      base::Bind(&TCPConnectedSocketImpl::OnReceiveDataPipeClosed,
-                 weak_ptr_factory_.GetWeakPtr()));
-}
-
-void TCPConnectedSocketImpl::OnReceiveDataPipeClosed(MojoResult result) {
-  ShutdownReceive();
-}
-
-void TCPConnectedSocketImpl::SendMore() {
-  uint32_t num_bytes = 0;
-  MojoResult result = MojoToNetPendingBuffer::BeginRead(
-      &send_stream_, &pending_send_, &num_bytes);
-  if (result == MOJO_RESULT_SHOULD_WAIT) {
-    // Data not ready, wait for it.
-    send_handle_watcher_.Start(
-        send_stream_.get(), MOJO_HANDLE_SIGNAL_READABLE,
-        MOJO_DEADLINE_INDEFINITE,
-        base::Bind(&TCPConnectedSocketImpl::OnSendStreamReady,
-                   weak_ptr_factory_.GetWeakPtr()));
-    return;
-  } else if (result != MOJO_RESULT_OK) {
-    ShutdownSend();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-    return;
-  }
-
-  // Got a buffer from Mojo, give it to the socket. Note that the sockets may
-  // do partial writes.
-  scoped_refptr<net::IOBuffer> buf(new MojoToNetIOBuffer(pending_send_.get()));
-  int write_result =
-      socket_->Write(buf.get(), static_cast<int>(num_bytes),
-                     base::Bind(&TCPConnectedSocketImpl::DidSend,
-                                weak_ptr_factory_.GetWeakPtr(), false));
-  if (write_result == net::ERR_IO_PENDING) {
-    // Pending I/O, wait for result in DidSend().
-  } else if (write_result >= 0) {
-    // Synchronous data consumed.
-    DidSend(true, write_result);
-  } else {
-    // write_result < 0 indicates error.
-    ShutdownSend();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-  }
-}
-
-void TCPConnectedSocketImpl::OnSendStreamReady(MojoResult result) {
-  if (result != MOJO_RESULT_OK) {
-    ShutdownSend();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-    return;
-  }
-  ListenForSendPeerClosed();
-  SendMore();
-}
-
-void TCPConnectedSocketImpl::DidSend(bool completed_synchronously, int result) {
-  if (!pending_send_)
-    return;
-
-  if (result < 0) {
-    ShutdownSend();
-    // TODO(johnmccutchan): Notify socket direction is closed along with
-    // net_result and mojo_result.
-    return;
-  }
-
-  // Take back ownership of the stream and free the IOBuffer.
-  send_stream_ = pending_send_->Complete(result);
-  pending_send_ = nullptr;
-
-  // Schedule more writing.
-  if (completed_synchronously) {
-    // Don't recursively call SendMore if this is a sync read.
-    base::MessageLoop::current()->PostTask(
-        FROM_HERE, base::Bind(&TCPConnectedSocketImpl::SendMore,
-                              weak_ptr_factory_.GetWeakPtr()));
-  } else {
-    SendMore();
-  }
-}
-
-void TCPConnectedSocketImpl::ShutdownSend() {
-  send_handle_watcher_.Stop();
-  pending_send_ = nullptr;
-  send_stream_.reset();
-  DeleteIfNeeded();
-}
-
-void TCPConnectedSocketImpl::ListenForSendPeerClosed() {
-  send_handle_watcher_.Start(
-      send_stream_.get(), MOJO_HANDLE_SIGNAL_PEER_CLOSED,
-      MOJO_DEADLINE_INDEFINITE,
-      base::Bind(&TCPConnectedSocketImpl::OnSendDataPipeClosed,
-                 weak_ptr_factory_.GetWeakPtr()));
-}
-
-void TCPConnectedSocketImpl::OnSendDataPipeClosed(MojoResult result) {
-  ShutdownSend();
-}
-
-void TCPConnectedSocketImpl::DeleteIfNeeded() {
-  bool has_send = pending_send_ || send_stream_.is_valid();
-  bool has_receive = pending_receive_ || receive_stream_.is_valid();
-  if (!binding_.is_bound() && !has_send && !has_receive)
-    delete this;
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/tcp_connected_socket_impl.h b/mojo/services/network/tcp_connected_socket_impl.h
deleted file mode 100644
index 1131bf6d..0000000
--- a/mojo/services/network/tcp_connected_socket_impl.h
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_TCP_CONNECTED_SOCKET_H_
-#define MOJO_SERVICES_NETWORK_TCP_CONNECTED_SOCKET_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "mojo/message_pump/handle_watcher.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "mojo/services/network/public/interfaces/tcp_connected_socket.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "net/socket/tcp_socket.h"
-
-namespace mojo {
-
-class MojoToNetPendingBuffer;
-class NetToMojoPendingBuffer;
-
-class TCPConnectedSocketImpl : public TCPConnectedSocket {
- public:
-  TCPConnectedSocketImpl(scoped_ptr<net::TCPSocket> socket,
-                         ScopedDataPipeConsumerHandle send_stream,
-                         ScopedDataPipeProducerHandle receive_stream,
-                         InterfaceRequest<TCPConnectedSocket> request,
-                         scoped_ptr<mojo::MessageLoopRef> app_refcount);
-  ~TCPConnectedSocketImpl() override;
-
- private:
-  void OnConnectionError();
-
-  // "Receiving" in this context means reading from TCPSocket and writing to
-  // the Mojo receive_stream.
-  void ReceiveMore();
-  void OnReceiveStreamReady(MojoResult result);
-  void DidReceive(bool completed_synchronously, int result);
-  void ShutdownReceive();
-  void ListenForReceivePeerClosed();
-  void OnReceiveDataPipeClosed(MojoResult result);
-
-  // "Writing" is reading from the Mojo send_stream and writing to the
-  // TCPSocket.
-  void SendMore();
-  void OnSendStreamReady(MojoResult result);
-  void DidSend(bool completed_asynchronously, int result);
-  void ShutdownSend();
-  void ListenForSendPeerClosed();
-  void OnSendDataPipeClosed(MojoResult result);
-
-  void DeleteIfNeeded();
-
-  scoped_ptr<net::TCPSocket> socket_;
-
-  // The *stream handles will be null while there is an in-progress transation
-  // between net and mojo. During this time, the handle will be owned by the
-  // *PendingBuffer.
-
-  // For reading from the network and writing to Mojo pipe.
-  ScopedDataPipeConsumerHandle send_stream_;
-  scoped_refptr<NetToMojoPendingBuffer> pending_receive_;
-  common::HandleWatcher receive_handle_watcher_;
-
-  // For reading from the Mojo pipe and writing to the network.
-  ScopedDataPipeProducerHandle receive_stream_;
-  scoped_refptr<MojoToNetPendingBuffer> pending_send_;
-  common::HandleWatcher send_handle_watcher_;
-
-  // To bind to the message pipe.
-  Binding<TCPConnectedSocket> binding_;
-
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-
-  base::WeakPtrFactory<TCPConnectedSocketImpl> weak_ptr_factory_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_TCP_CONNECTED_SOCKET_H_
diff --git a/mojo/services/network/tcp_server_socket_impl.cc b/mojo/services/network/tcp_server_socket_impl.cc
deleted file mode 100644
index a01feff..0000000
--- a/mojo/services/network/tcp_server_socket_impl.cc
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/tcp_server_socket_impl.h"
-
-#include <utility>
-
-#include "mojo/services/network/net_adapters.h"
-#include "mojo/services/network/net_address_type_converters.h"
-#include "mojo/services/network/tcp_connected_socket_impl.h"
-#include "net/base/net_errors.h"
-
-namespace mojo {
-
-TCPServerSocketImpl::TCPServerSocketImpl(
-    scoped_ptr<net::TCPSocket> socket,
-    scoped_ptr<mojo::MessageLoopRef> app_refcount,
-    InterfaceRequest<TCPServerSocket> request)
-    : socket_(std::move(socket)),
-      app_refcount_(std::move(app_refcount)),
-      binding_(this, std::move(request)) {}
-
-TCPServerSocketImpl::~TCPServerSocketImpl() {
-}
-
-void TCPServerSocketImpl::Accept(
-    ScopedDataPipeConsumerHandle send_stream,
-    ScopedDataPipeProducerHandle receive_stream,
-    InterfaceRequest<TCPConnectedSocket> client_socket,
-    const AcceptCallback& callback) {
-  // One possible future enhancement would be to enqueue multiple Accept calls
-  // on this object. This would allow the client to accept some number of
-  // incoming connections rapidly without doing an IPC round-trip.
-  if (!pending_callback_.is_null()) {
-    // Already have a pending accept on this socket.
-    callback.Run(MakeNetworkError(net::ERR_UNEXPECTED), NetAddressPtr());
-    return;
-  }
-
-  int result = socket_->Accept(
-      &accepted_socket_, &accepted_address_,
-      base::Bind(&TCPServerSocketImpl::OnAcceptCompleted,
-                 base::Unretained(this)));
-  if (result == net::OK || result == net::ERR_IO_PENDING) {
-    pending_callback_ = callback;
-    pending_send_stream_ = std::move(send_stream);
-    pending_receive_stream_ = std::move(receive_stream);
-    pending_client_socket_ = std::move(client_socket);
-    if (result == net::OK)
-      OnAcceptCompleted(net::OK);
-  } else {
-    callback.Run(MakeNetworkError(result), NetAddressPtr());
-  }
-}
-
-void TCPServerSocketImpl::OnAcceptCompleted(int result) {
-  if (result != net::OK) {
-    pending_callback_.Run(MakeNetworkError(result), NetAddressPtr());
-    pending_send_stream_.reset();
-    pending_receive_stream_.reset();
-    pending_client_socket_ = InterfaceRequest<TCPConnectedSocket>();
-  } else {
-    new TCPConnectedSocketImpl(
-        std::move(accepted_socket_), std::move(pending_send_stream_),
-        std::move(pending_receive_stream_), std::move(pending_client_socket_),
-        app_refcount_->Clone());
-    pending_callback_.Run(MakeNetworkError(net::OK),
-                          NetAddress::From(accepted_address_));
-  }
-
-  pending_callback_ = AcceptCallback();
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/tcp_server_socket_impl.h b/mojo/services/network/tcp_server_socket_impl.h
deleted file mode 100644
index 2078cec..0000000
--- a/mojo/services/network/tcp_server_socket_impl.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_
-#define MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/tcp_server_socket.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "net/base/ip_endpoint.h"
-#include "net/socket/tcp_socket.h"
-
-namespace mojo {
-
-class TCPServerSocketImpl : public TCPServerSocket {
- public:
-  typedef Callback<void(NetworkErrorPtr, NetAddressPtr)> AcceptCallback;
-
-  // Passed ownership of a socket already in listening mode.
-  TCPServerSocketImpl(scoped_ptr<net::TCPSocket> socket,
-                      scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                      InterfaceRequest<TCPServerSocket> request);
-  ~TCPServerSocketImpl() override;
-
-  // TCPServerSocket.
-  void Accept(ScopedDataPipeConsumerHandle send_stream,
-              ScopedDataPipeProducerHandle receive_stream,
-              InterfaceRequest<TCPConnectedSocket> client_socket,
-              const AcceptCallback& callback) override;
-
- private:
-  void OnAcceptCompleted(int result);
-
-  scoped_ptr<net::TCPSocket> socket_;
-
-  // Non-null when accept is pending.
-  AcceptCallback pending_callback_;
-
-  // The parameters associated with the pending Accept call.
-  ScopedDataPipeConsumerHandle pending_send_stream_;
-  ScopedDataPipeProducerHandle pending_receive_stream_;
-  InterfaceRequest<TCPConnectedSocket> pending_client_socket_;
-
-  // These are written to by net::TCPSocket when Accept is completed.
-  scoped_ptr<net::TCPSocket> accepted_socket_;
-  net::IPEndPoint accepted_address_;
-
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-  StrongBinding<TCPServerSocket> binding_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_
diff --git a/mojo/services/network/test_manifest.json b/mojo/services/network/test_manifest.json
deleted file mode 100644
index 17a78cc0..0000000
--- a/mojo/services/network/test_manifest.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "name": "exe:network_service_unittests",
-  "display_name": "Network Service Unittests",
-  "capabilities": { "*": [ "*" ] }
-}
diff --git a/mojo/services/network/udp_socket_impl.cc b/mojo/services/network/udp_socket_impl.cc
deleted file mode 100644
index c99f66f..0000000
--- a/mojo/services/network/udp_socket_impl.cc
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/udp_socket_impl.h"
-
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-#include <algorithm>
-#include <limits>
-#include <utility>
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/stl_util.h"
-#include "mojo/services/network/net_adapters.h"
-#include "mojo/services/network/net_address_type_converters.h"
-#include "net/base/io_buffer.h"
-#include "net/base/net_errors.h"
-#include "net/base/rand_callback.h"
-#include "net/udp/datagram_socket.h"
-
-namespace mojo {
-
-namespace {
-
-const int kMaxReadSize = 128 * 1024;
-const size_t kMaxWriteSize = 128 * 1024;
-const size_t kMaxPendingSendRequestsUpperbound = 128;
-const size_t kDefaultMaxPendingSendRequests = 32;
-
-}  // namespace
-
-UDPSocketImpl::PendingSendRequest::PendingSendRequest() {}
-
-UDPSocketImpl::PendingSendRequest::~PendingSendRequest() {}
-
-UDPSocketImpl::UDPSocketImpl(InterfaceRequest<UDPSocket> request,
-                             scoped_ptr<mojo::MessageLoopRef> app_refcount)
-    : binding_(this, std::move(request)),
-      socket_(net::DatagramSocket::DEFAULT_BIND,
-              net::RandIntCallback(),
-              nullptr,
-              net::NetLog::Source()),
-      state_(NOT_BOUND_OR_CONNECTED),
-      allow_address_reuse_(false),
-      remaining_recv_slots_(0),
-      max_pending_send_requests_(kDefaultMaxPendingSendRequests),
-      app_refcount_(std::move(app_refcount)) {}
-
-UDPSocketImpl::~UDPSocketImpl() {
-  STLDeleteElements(&pending_send_requests_);
-}
-
-void UDPSocketImpl::AllowAddressReuse(
-    const Callback<void(NetworkErrorPtr)>& callback) {
-  if (IsBoundOrConnected()) {
-    callback.Run(MakeNetworkError(net::ERR_FAILED));
-    return;
-  }
-
-  allow_address_reuse_ = true;
-  callback.Run(MakeNetworkError(net::OK));
-}
-
-void UDPSocketImpl::Bind(
-    NetAddressPtr addr,
-    const Callback<void(NetworkErrorPtr,
-                        NetAddressPtr,
-                        InterfaceRequest<UDPSocketReceiver>)>& callback) {
-  int net_result = net::OK;
-  bool opened = false;
-
-  do {
-    if (IsBoundOrConnected()) {
-      net_result = net::ERR_FAILED;
-      break;
-    }
-
-    net::IPEndPoint ip_end_point = addr.To<net::IPEndPoint>();
-    if (ip_end_point.GetFamily() == net::ADDRESS_FAMILY_UNSPECIFIED) {
-      net_result = net::ERR_ADDRESS_INVALID;
-      break;
-    }
-
-    net_result = socket_.Open(ip_end_point.GetFamily());
-    if (net_result != net::OK)
-      break;
-    opened = true;
-
-    if (allow_address_reuse_) {
-      net_result = socket_.AllowAddressReuse();
-      if (net_result != net::OK)
-        break;
-    }
-
-    net_result = socket_.Bind(ip_end_point);
-    if (net_result != net::OK)
-      break;
-
-    net::IPEndPoint bound_ip_end_point;
-    net_result = socket_.GetLocalAddress(&bound_ip_end_point);
-    if (net_result != net::OK)
-      break;
-
-    state_ = BOUND;
-    callback.Run(MakeNetworkError(net_result),
-                 NetAddress::From(bound_ip_end_point), GetProxy(&receiver_));
-
-    if (remaining_recv_slots_ > 0) {
-      DCHECK(!recvfrom_buffer_.get());
-      DoRecvFrom();
-    }
-    return;
-  } while (false);
-
-  DCHECK(net_result != net::OK);
-  if (opened)
-    socket_.Close();
-  callback.Run(MakeNetworkError(net_result), nullptr, nullptr);
-}
-
-void UDPSocketImpl::Connect(
-    NetAddressPtr remote_addr,
-    const Callback<void(NetworkErrorPtr,
-                        NetAddressPtr,
-                        InterfaceRequest<UDPSocketReceiver>)>& callback) {
-  int net_result = net::OK;
-  bool opened = false;
-
-  do {
-    if (IsBoundOrConnected()) {
-      net_result = net::ERR_FAILED;
-      break;
-    }
-
-    net::IPEndPoint ip_end_point = remote_addr.To<net::IPEndPoint>();
-    if (ip_end_point.GetFamily() == net::ADDRESS_FAMILY_UNSPECIFIED) {
-      net_result = net::ERR_ADDRESS_INVALID;
-      break;
-    }
-
-    net_result = socket_.Open(ip_end_point.GetFamily());
-    if (net_result != net::OK)
-      break;
-    opened = true;
-
-    net_result = socket_.Connect(ip_end_point);
-    if (net_result != net::OK)
-      break;
-
-    net::IPEndPoint local_ip_end_point;
-    net_result = socket_.GetLocalAddress(&local_ip_end_point);
-    if (net_result != net::OK)
-      break;
-
-    state_ = CONNECTED;
-    callback.Run(MakeNetworkError(net_result),
-                 NetAddress::From(local_ip_end_point), GetProxy(&receiver_));
-
-    if (remaining_recv_slots_ > 0) {
-      DCHECK(!recvfrom_buffer_.get());
-      DoRecvFrom();
-    }
-    return;
-  } while (false);
-
-  DCHECK(net_result != net::OK);
-  if (opened)
-    socket_.Close();
-  callback.Run(MakeNetworkError(net_result), nullptr, nullptr);
-}
-
-void UDPSocketImpl::SetSendBufferSize(
-    uint32_t size,
-    const Callback<void(NetworkErrorPtr)>& callback) {
-  if (!IsBoundOrConnected()) {
-    callback.Run(MakeNetworkError(net::ERR_FAILED));
-    return;
-  }
-
-  if (size > static_cast<uint32_t>(std::numeric_limits<int32_t>::max()))
-    size = std::numeric_limits<int32_t>::max();
-
-  int net_result = socket_.SetSendBufferSize(static_cast<int32_t>(size));
-  callback.Run(MakeNetworkError(net_result));
-}
-
-void UDPSocketImpl::SetReceiveBufferSize(
-    uint32_t size,
-    const Callback<void(NetworkErrorPtr)>& callback) {
-  if (!IsBoundOrConnected()) {
-    callback.Run(MakeNetworkError(net::ERR_FAILED));
-    return;
-  }
-
-  if (size > static_cast<uint32_t>(std::numeric_limits<int32_t>::max()))
-    size = std::numeric_limits<int32_t>::max();
-
-  int net_result = socket_.SetReceiveBufferSize(static_cast<int32_t>(size));
-  callback.Run(MakeNetworkError(net_result));
-}
-
-void UDPSocketImpl::NegotiateMaxPendingSendRequests(
-    uint32_t requested_size,
-    const Callback<void(uint32_t)>& callback) {
-  if (requested_size != 0) {
-    max_pending_send_requests_ =
-      std::min(kMaxPendingSendRequestsUpperbound,
-               static_cast<size_t>(requested_size));
-  }
-  callback.Run(static_cast<uint32_t>(max_pending_send_requests_));
-
-  if (pending_send_requests_.size() > max_pending_send_requests_) {
-    std::deque<PendingSendRequest*> discarded_requests(
-        pending_send_requests_.begin() + max_pending_send_requests_,
-        pending_send_requests_.end());
-    pending_send_requests_.resize(max_pending_send_requests_);
-    for (auto& discarded_request : discarded_requests) {
-      discarded_request->callback.Run(
-          MakeNetworkError(net::ERR_INSUFFICIENT_RESOURCES));
-      delete discarded_request;
-    }
-  }
-}
-
-void UDPSocketImpl::ReceiveMore(uint32_t datagram_number) {
-  if (!receiver_)
-    return;
-  if (datagram_number == 0)
-    return;
-  if (std::numeric_limits<size_t>::max() - remaining_recv_slots_ <
-          datagram_number) {
-    return;
-  }
-
-  remaining_recv_slots_ += datagram_number;
-
-  if (IsBoundOrConnected() && !recvfrom_buffer_.get()) {
-    DCHECK_EQ(datagram_number, remaining_recv_slots_);
-    DoRecvFrom();
-  }
-}
-
-void UDPSocketImpl::SendTo(NetAddressPtr dest_addr,
-                           Array<uint8_t> data,
-                           const Callback<void(NetworkErrorPtr)>& callback) {
-  if (!IsBoundOrConnected()) {
-    callback.Run(MakeNetworkError(net::ERR_FAILED));
-    return;
-  }
-  if (state_ == BOUND && !dest_addr) {
-    callback.Run(MakeNetworkError(net::ERR_INVALID_ARGUMENT));
-    return;
-  }
-
-  if (sendto_buffer_.get()) {
-    if (pending_send_requests_.size() >= max_pending_send_requests_) {
-      callback.Run(MakeNetworkError(net::ERR_INSUFFICIENT_RESOURCES));
-      return;
-    }
-
-    PendingSendRequest* request = new PendingSendRequest;
-    request->addr = std::move(dest_addr);
-    request->data = std::move(data);
-    request->callback = callback;
-    pending_send_requests_.push_back(request);
-    return;
-  }
-
-  DCHECK_EQ(0u, pending_send_requests_.size());
-
-  DoSendTo(std::move(dest_addr), std::move(data), callback);
-}
-
-void UDPSocketImpl::DoRecvFrom() {
-  DCHECK(IsBoundOrConnected());
-  DCHECK(receiver_);
-  DCHECK(!recvfrom_buffer_.get());
-  DCHECK_GT(remaining_recv_slots_, 0u);
-
-  recvfrom_buffer_ = new net::IOBuffer(kMaxReadSize);
-
-  // It is safe to use base::Unretained(this) because |socket_| is owned by this
-  // object. If this object gets destroyed (and so does |socket_|), the callback
-  // won't be called.
-  int net_result = socket_.RecvFrom(
-      recvfrom_buffer_.get(),
-      kMaxReadSize,
-      state_ == BOUND ? &recvfrom_address_ : nullptr,
-      base::Bind(&UDPSocketImpl::OnRecvFromCompleted, base::Unretained(this)));
-  if (net_result != net::ERR_IO_PENDING)
-    OnRecvFromCompleted(net_result);
-}
-
-void UDPSocketImpl::DoSendTo(NetAddressPtr addr,
-                             Array<uint8_t> data,
-                             const Callback<void(NetworkErrorPtr)>& callback) {
-  DCHECK(IsBoundOrConnected());
-  DCHECK(!sendto_buffer_.get());
-
-  if (data.size() > kMaxWriteSize) {
-    callback.Run(MakeNetworkError(net::ERR_INVALID_ARGUMENT));
-    return;
-  }
-  sendto_buffer_ = new net::IOBufferWithSize(static_cast<int>(data.size()));
-  if (data.size() > 0)
-    memcpy(sendto_buffer_->data(), &data.storage()[0], data.size());
-
-  int net_result = net::OK;
-  if (addr) {
-    net::IPEndPoint ip_end_point = addr.To<net::IPEndPoint>();
-    if (ip_end_point.GetFamily() == net::ADDRESS_FAMILY_UNSPECIFIED) {
-      callback.Run(MakeNetworkError(net::ERR_ADDRESS_INVALID));
-      return;
-    }
-
-    // It is safe to use base::Unretained(this) because |socket_| is owned by
-    // this object. If this object gets destroyed (and so does |socket_|), the
-    // callback won't be called.
-    net_result = socket_.SendTo(sendto_buffer_.get(), sendto_buffer_->size(),
-                                ip_end_point,
-                                base::Bind(&UDPSocketImpl::OnSendToCompleted,
-                                           base::Unretained(this), callback));
-  } else {
-    DCHECK(state_ == CONNECTED);
-    net_result = socket_.Write(sendto_buffer_.get(), sendto_buffer_->size(),
-                               base::Bind(&UDPSocketImpl::OnSendToCompleted,
-                                          base::Unretained(this), callback));
-  }
-  if (net_result != net::ERR_IO_PENDING)
-    OnSendToCompleted(callback, net_result);
-}
-
-void UDPSocketImpl::OnRecvFromCompleted(int net_result) {
-  DCHECK(recvfrom_buffer_.get());
-
-  NetAddressPtr net_address;
-  Array<uint8_t> array;
-  if (net_result >= 0) {
-    if (state_ == BOUND)
-      net_address = NetAddress::From(recvfrom_address_);
-
-    std::vector<uint8_t> data(net_result);
-    if (net_result > 0)
-      memcpy(&data[0], recvfrom_buffer_->data(), net_result);
-
-    array.Swap(&data);
-  }
-  recvfrom_buffer_ = nullptr;
-
-  receiver_->OnReceived(MakeNetworkError(net_result), std::move(net_address),
-                        std::move(array));
-  DCHECK_GT(remaining_recv_slots_, 0u);
-  remaining_recv_slots_--;
-  if (remaining_recv_slots_ > 0)
-    DoRecvFrom();
-}
-
-void UDPSocketImpl::OnSendToCompleted(
-    const Callback<void(NetworkErrorPtr)>& callback,
-    int net_result) {
-  DCHECK(sendto_buffer_.get());
-
-  sendto_buffer_ = nullptr;
-
-  callback.Run(MakeNetworkError(net_result));
-
-  if (pending_send_requests_.empty())
-    return;
-
-  scoped_ptr<PendingSendRequest> request(pending_send_requests_.front());
-  pending_send_requests_.pop_front();
-
-  DoSendTo(std::move(request->addr), std::move(request->data),
-           request->callback);
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/udp_socket_impl.h b/mojo/services/network/udp_socket_impl.h
deleted file mode 100644
index 6ea5770c..0000000
--- a/mojo/services/network/udp_socket_impl.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_UDP_SOCKET_IMPL_H_
-#define MOJO_SERVICES_NETWORK_UDP_SOCKET_IMPL_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <deque>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/udp_socket.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "net/base/ip_endpoint.h"
-#include "net/udp/udp_socket.h"
-
-namespace net {
-class IOBuffer;
-class IOBufferWithSize;
-}
-
-namespace mojo {
-
-class UDPSocketImpl : public UDPSocket {
- public:
-  // The lifetime of a new UDPSocketImpl is bound to the connection associated
-  // with |request|.
-  UDPSocketImpl(InterfaceRequest<UDPSocket> request,
-                scoped_ptr<mojo::MessageLoopRef> app_refcount);
-  ~UDPSocketImpl() override;
-
-  // UDPSocket implementation.
-  void AllowAddressReuse(
-      const Callback<void(NetworkErrorPtr)>& callback) override;
-
-  void Bind(NetAddressPtr addr,
-            const Callback<void(NetworkErrorPtr,
-                                NetAddressPtr,
-                                InterfaceRequest<UDPSocketReceiver>)>& callback)
-      override;
-
-  void Connect(NetAddressPtr remote_addr,
-               const Callback<void(NetworkErrorPtr,
-                                   NetAddressPtr,
-                                   InterfaceRequest<UDPSocketReceiver>)>&
-                   callback) override;
-
-  void SetSendBufferSize(
-      uint32_t size,
-      const Callback<void(NetworkErrorPtr)>& callback) override;
-
-  void SetReceiveBufferSize(
-      uint32_t size,
-      const Callback<void(NetworkErrorPtr)>& callback) override;
-
-  void NegotiateMaxPendingSendRequests(
-      uint32_t requested_size,
-      const Callback<void(uint32_t)>& callback) override;
-
-  void ReceiveMore(uint32_t datagram_number) override;
-
-  void SendTo(NetAddressPtr dest_addr,
-              Array<uint8_t> data,
-              const Callback<void(NetworkErrorPtr)>& callback) override;
-
- private:
-  enum State {
-    NOT_BOUND_OR_CONNECTED,
-    BOUND,
-    CONNECTED
-  };
-
-  struct PendingSendRequest {
-    PendingSendRequest();
-    ~PendingSendRequest();
-
-    NetAddressPtr addr;
-    Array<uint8_t> data;
-    Callback<void(NetworkErrorPtr)> callback;
-  };
-
-  void DoRecvFrom();
-  void DoSendTo(NetAddressPtr addr,
-                Array<uint8_t> data,
-                const Callback<void(NetworkErrorPtr)>& callback);
-
-  void OnRecvFromCompleted(int net_result);
-  void OnSendToCompleted(const Callback<void(NetworkErrorPtr)>& callback,
-                         int net_result);
-
-  bool IsBoundOrConnected() const {
-    return state_ == BOUND || state_ == CONNECTED;
-  }
-
-  StrongBinding<UDPSocket> binding_;
-
-  net::UDPSocket socket_;
-
-  State state_;
-
-  bool allow_address_reuse_;
-
-  // Non-null when there is a pending RecvFrom operation on |socket_|.
-  scoped_refptr<net::IOBuffer> recvfrom_buffer_;
-  // Non-null when there is a pending SendTo operation on |socket_|.
-  scoped_refptr<net::IOBufferWithSize> sendto_buffer_;
-
-  // The address of the pending RecvFrom operation, if any.
-  net::IPEndPoint recvfrom_address_;
-
-  // The interface which gets data from fulfilled receive requests.
-  UDPSocketReceiverPtr receiver_;
-
-  // How many more packets the client side expects to receive.
-  size_t remaining_recv_slots_;
-
-  // The queue owns the PendingSendRequest instances.
-  std::deque<PendingSendRequest*> pending_send_requests_;
-  // The maximum size of the |pending_send_requests_| queue.
-  size_t max_pending_send_requests_;
-
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-
-  DISALLOW_COPY_AND_ASSIGN(UDPSocketImpl);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_UDP_SOCKET_IMPL_H_
diff --git a/mojo/services/network/udp_socket_unittest.cc b/mojo/services/network/udp_socket_unittest.cc
deleted file mode 100644
index 9aaf1f20..0000000
--- a/mojo/services/network/udp_socket_unittest.cc
+++ /dev/null
@@ -1,652 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <utility>
-
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/run_loop.h"
-#include "mojo/public/cpp/bindings/callback.h"
-#include "mojo/services/network/public/cpp/udp_socket_wrapper.h"
-#include "mojo/services/network/public/interfaces/network_service.mojom.h"
-#include "mojo/services/network/public/interfaces/udp_socket.mojom.h"
-#include "mojo/shell/public/cpp/shell_test.h"
-#include "net/base/net_errors.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace mojo {
-namespace service {
-namespace {
-
-NetAddressPtr GetLocalHostWithAnyPort() {
-  NetAddressPtr addr(NetAddress::New());
-  addr->family = NetAddressFamily::IPV4;
-  addr->ipv4 = NetAddressIPv4::New();
-  addr->ipv4->port = 0;
-  addr->ipv4->addr.resize(4);
-  addr->ipv4->addr[0] = 127;
-  addr->ipv4->addr[1] = 0;
-  addr->ipv4->addr[2] = 0;
-  addr->ipv4->addr[3] = 1;
-
-  return addr;
-}
-
-Array<uint8_t> CreateTestMessage(uint8_t initial, size_t size) {
-  Array<uint8_t> array(size);
-  for (size_t i = 0; i < size; ++i)
-    array[i] = static_cast<uint8_t>((i + initial) % 256);
-  return array;
-}
-
-template <typename CallbackType>
-class TestCallbackBase {
- public:
-  TestCallbackBase() : state_(nullptr), run_loop_(nullptr), ran_(false) {}
-
-  ~TestCallbackBase() {
-    state_->set_test_callback(nullptr);
-  }
-
-  CallbackType callback() const { return callback_; }
-
-  void WaitForResult() {
-    if (ran_)
-      return;
-
-    base::RunLoop run_loop;
-    run_loop_ = &run_loop;
-    run_loop.Run();
-    run_loop_ = nullptr;
-  }
-
- protected:
-  struct StateBase : public CallbackType::Runnable {
-    StateBase() : test_callback_(nullptr) {}
-    ~StateBase() override {}
-
-    void set_test_callback(TestCallbackBase* test_callback) {
-      test_callback_ = test_callback;
-    }
-
-   protected:
-    void NotifyRun() const {
-      if (test_callback_) {
-        test_callback_->ran_ = true;
-        if (test_callback_->run_loop_)
-          test_callback_->run_loop_->Quit();
-      }
-    }
-
-    TestCallbackBase* test_callback_;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(StateBase);
-  };
-
-  // Takes ownership of |state|, and guarantees that it lives at least as long
-  // as this object.
-  void Initialize(StateBase* state) {
-    state_ = state;
-    state_->set_test_callback(this);
-    callback_ = CallbackType(
-        static_cast<typename CallbackType::Runnable*>(state_));
-  }
-
- private:
-  // The lifespan is managed by |callback_| (and its copies).
-  StateBase* state_;
-  CallbackType callback_;
-  base::RunLoop* run_loop_;
-  bool ran_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestCallbackBase);
-};
-
-class TestCallback : public TestCallbackBase<Callback<void(NetworkErrorPtr)>> {
- public:
-  TestCallback() {
-    Initialize(new State());
-  }
-  ~TestCallback() {}
-
-  const NetworkErrorPtr& result() const { return result_; }
-
- private:
-  struct State: public StateBase {
-    ~State() override {}
-
-    void Run(NetworkErrorPtr result) const override {
-      if (test_callback_) {
-        TestCallback* callback = static_cast<TestCallback*>(test_callback_);
-        callback->result_ = std::move(result);
-      }
-      NotifyRun();
-    }
-  };
-
-  NetworkErrorPtr result_;
-};
-
-class TestCallbackWithAddressAndReceiver
-    : public TestCallbackBase<
-          Callback<void(NetworkErrorPtr,
-                        NetAddressPtr,
-                        InterfaceRequest<UDPSocketReceiver>)>> {
- public:
-  TestCallbackWithAddressAndReceiver() { Initialize(new State()); }
-  ~TestCallbackWithAddressAndReceiver() {}
-
-  const NetworkErrorPtr& result() const { return result_; }
-  const NetAddressPtr& net_address() const { return net_address_; }
-  InterfaceRequest<UDPSocketReceiver>& receiver() { return receiver_; }
-
- private:
-  struct State : public StateBase {
-    ~State() override {}
-
-    void Run(NetworkErrorPtr result,
-             NetAddressPtr net_address,
-             InterfaceRequest<UDPSocketReceiver> receiver) const override {
-      if (test_callback_) {
-        TestCallbackWithAddressAndReceiver* callback =
-            static_cast<TestCallbackWithAddressAndReceiver*>(test_callback_);
-        callback->result_ = std::move(result);
-        callback->net_address_ = std::move(net_address);
-        callback->receiver_ = std::move(receiver);
-      }
-      NotifyRun();
-    }
-  };
-
-  NetworkErrorPtr result_;
-  NetAddressPtr net_address_;
-  InterfaceRequest<UDPSocketReceiver> receiver_;
-};
-
-class TestCallbackWithAddress
-    : public TestCallbackBase<Callback<void(NetworkErrorPtr, NetAddressPtr)>> {
- public:
-  TestCallbackWithAddress() {
-    Initialize(new State());
-  }
-  ~TestCallbackWithAddress() {}
-
-  const NetworkErrorPtr& result() const { return result_; }
-  const NetAddressPtr& net_address() const { return net_address_; }
-
- private:
-  struct State : public StateBase {
-    ~State() override {}
-
-    void Run(NetworkErrorPtr result, NetAddressPtr net_address) const override {
-      if (test_callback_) {
-        TestCallbackWithAddress* callback =
-            static_cast<TestCallbackWithAddress*>(test_callback_);
-        callback->result_ = std::move(result);
-        callback->net_address_ = std::move(net_address);
-      }
-      NotifyRun();
-    }
-  };
-
-  NetworkErrorPtr result_;
-  NetAddressPtr net_address_;
-};
-
-class TestCallbackWithUint32
-    : public TestCallbackBase<Callback<void(uint32_t)>> {
- public:
-  TestCallbackWithUint32() : result_(0) {
-    Initialize(new State());
-  }
-  ~TestCallbackWithUint32() {}
-
-  uint32_t result() const { return result_; }
-
- private:
-  struct State : public StateBase {
-    ~State() override {}
-
-    void Run(uint32_t result) const override {
-      if (test_callback_) {
-        TestCallbackWithUint32* callback =
-            static_cast<TestCallbackWithUint32*>(test_callback_);
-        callback->result_ = result;
-      }
-      NotifyRun();
-    }
-  };
-
-  uint32_t result_;
-};
-
-class TestReceiveCallback
-    : public TestCallbackBase<
-        Callback<void(NetworkErrorPtr, NetAddressPtr, Array<uint8_t>)>> {
- public:
-  TestReceiveCallback() {
-    Initialize(new State());
-  }
-  ~TestReceiveCallback() {}
-
-  const NetworkErrorPtr& result() const { return result_; }
-  const NetAddressPtr& src_addr() const { return src_addr_; }
-  const Array<uint8_t>& data() const { return data_; }
-
- private:
-  struct State : public StateBase {
-    ~State() override {}
-
-    void Run(NetworkErrorPtr result,
-             NetAddressPtr src_addr,
-             Array<uint8_t> data) const override {
-      if (test_callback_) {
-        TestReceiveCallback* callback =
-            static_cast<TestReceiveCallback*>(test_callback_);
-        callback->result_ = std::move(result);
-        callback->src_addr_ = std::move(src_addr);
-        callback->data_ = std::move(data);
-      }
-      NotifyRun();
-    }
-  };
-
-  NetworkErrorPtr result_;
-  NetAddressPtr src_addr_;
-  Array<uint8_t> data_;
-};
-
-struct ReceiveResult {
-  NetworkErrorPtr result;
-  NetAddressPtr addr;
-  Array<uint8_t> data;
-};
-
-class UDPSocketReceiverImpl : public UDPSocketReceiver {
- public:
-  UDPSocketReceiverImpl() : run_loop_(nullptr), expected_receive_count_(0) {}
-
-  ~UDPSocketReceiverImpl() override {
-    while (!results_.empty()) {
-      delete results_.front();
-      results_.pop();
-    }
-  }
-
-  std::queue<ReceiveResult*>* results() {
-    return &results_;
-  }
-
-  void WaitForReceiveResults(size_t count) {
-    if (results_.size() == count)
-      return;
-
-    expected_receive_count_ = count;
-    base::RunLoop run_loop;
-    run_loop_ = &run_loop;
-    run_loop.Run();
-    run_loop_ = nullptr;
-  }
-
- private:
-  void OnReceived(NetworkErrorPtr result,
-                  NetAddressPtr src_addr,
-                  Array<uint8_t> data) override {
-    ReceiveResult* entry = new ReceiveResult();
-    entry->result = std::move(result);
-    entry->addr = std::move(src_addr);
-    entry->data = std::move(data);
-
-    results_.push(entry);
-
-    if (results_.size() == expected_receive_count_ && run_loop_) {
-      expected_receive_count_ = 0;
-      run_loop_->Quit();
-    }
-  }
-
-  base::RunLoop* run_loop_;
-  std::queue<ReceiveResult*> results_;
-  size_t expected_receive_count_;
-
-  DISALLOW_COPY_AND_ASSIGN(UDPSocketReceiverImpl);
-};
-
-class UDPSocketTest : public test::ShellTest {
- public:
-  UDPSocketTest() : ShellTest("exe:network_service_unittests"),
-                    receiver_binding_(&receiver_) {}
-  ~UDPSocketTest() override {}
-
-  void SetUp() override {
-    ShellTest::SetUp();
-    connector()->ConnectToInterface("mojo:network_service", &network_service_);
-    network_service_->CreateUDPSocket(GetProxy(&socket_));
-  }
-
- protected:
-  NetworkServicePtr network_service_;
-  UDPSocketPtr socket_;
-  UDPSocketReceiverImpl receiver_;
-  Binding<UDPSocketReceiver> receiver_binding_;
-
-  DISALLOW_COPY_AND_ASSIGN(UDPSocketTest);
-};
-
-}  // namespace
-
-TEST_F(UDPSocketTest, Settings) {
-  TestCallback callback1;
-  socket_->AllowAddressReuse(callback1.callback());
-  callback1.WaitForResult();
-  EXPECT_EQ(net::OK, callback1.result()->code);
-
-  // Should fail because the socket hasn't been bound.
-  TestCallback callback2;
-  socket_->SetSendBufferSize(1024, callback2.callback());
-  callback2.WaitForResult();
-  EXPECT_NE(net::OK, callback2.result()->code);
-
-  // Should fail because the socket hasn't been bound.
-  TestCallback callback3;
-  socket_->SetReceiveBufferSize(2048, callback3.callback());
-  callback3.WaitForResult();
-  EXPECT_NE(net::OK, callback3.result()->code);
-
-  TestCallbackWithAddressAndReceiver callback4;
-  socket_->Bind(GetLocalHostWithAnyPort(), callback4.callback());
-  callback4.WaitForResult();
-  EXPECT_EQ(net::OK, callback4.result()->code);
-  EXPECT_NE(0u, callback4.net_address()->ipv4->port);
-
-  // Should fail because the socket has been bound.
-  TestCallback callback5;
-  socket_->AllowAddressReuse(callback5.callback());
-  callback5.WaitForResult();
-  EXPECT_NE(net::OK, callback5.result()->code);
-
-  TestCallback callback6;
-  socket_->SetSendBufferSize(1024, callback6.callback());
-  callback6.WaitForResult();
-  EXPECT_EQ(net::OK, callback6.result()->code);
-
-  TestCallback callback7;
-  socket_->SetReceiveBufferSize(2048, callback7.callback());
-  callback7.WaitForResult();
-  EXPECT_EQ(net::OK, callback7.result()->code);
-
-  TestCallbackWithUint32 callback8;
-  socket_->NegotiateMaxPendingSendRequests(0, callback8.callback());
-  callback8.WaitForResult();
-  EXPECT_GT(callback8.result(), 0u);
-
-  TestCallbackWithUint32 callback9;
-  socket_->NegotiateMaxPendingSendRequests(16, callback9.callback());
-  callback9.WaitForResult();
-  EXPECT_GT(callback9.result(), 0u);
-}
-
-TEST_F(UDPSocketTest, TestReadWrite) {
-  TestCallbackWithAddressAndReceiver callback1;
-  socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback());
-  callback1.WaitForResult();
-  ASSERT_EQ(net::OK, callback1.result()->code);
-  ASSERT_NE(0u, callback1.net_address()->ipv4->port);
-
-  receiver_binding_.Bind(std::move(callback1.receiver()));
-
-  NetAddressPtr server_addr = callback1.net_address().Clone();
-
-  UDPSocketPtr client_socket;
-  network_service_->CreateUDPSocket(GetProxy(&client_socket));
-
-  TestCallbackWithAddressAndReceiver callback2;
-  client_socket->Bind(GetLocalHostWithAnyPort(), callback2.callback());
-  callback2.WaitForResult();
-  ASSERT_EQ(net::OK, callback2.result()->code);
-  ASSERT_NE(0u, callback2.net_address()->ipv4->port);
-
-  NetAddressPtr client_addr = callback2.net_address().Clone();
-
-  const size_t kDatagramCount = 6;
-  const size_t kDatagramSize = 255;
-  socket_->ReceiveMore(kDatagramCount);
-
-  for (size_t i = 0; i < kDatagramCount; ++i) {
-    TestCallback callback;
-    client_socket->SendTo(
-        server_addr.Clone(),
-        CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize),
-        callback.callback());
-    callback.WaitForResult();
-    EXPECT_EQ(255, callback.result()->code);
-  }
-
-  receiver_.WaitForReceiveResults(kDatagramCount);
-  for (size_t i = 0; i < kDatagramCount; ++i) {
-    scoped_ptr<ReceiveResult> result(receiver_.results()->front());
-    receiver_.results()->pop();
-
-    EXPECT_EQ(static_cast<int>(kDatagramSize), result->result->code);
-    EXPECT_TRUE(result->addr.Equals(client_addr));
-    EXPECT_TRUE(result->data.Equals(
-        CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize)));
-  }
-}
-
-TEST_F(UDPSocketTest, TestConnectedReadWrite) {
-  TestCallbackWithAddressAndReceiver callback1;
-  socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback());
-  callback1.WaitForResult();
-  ASSERT_EQ(net::OK, callback1.result()->code);
-  ASSERT_NE(0u, callback1.net_address()->ipv4->port);
-
-  receiver_binding_.Bind(std::move(callback1.receiver()));
-
-  NetAddressPtr server_addr = callback1.net_address().Clone();
-
-  UDPSocketPtr client_socket;
-  network_service_->CreateUDPSocket(GetProxy(&client_socket));
-
-  TestCallbackWithAddressAndReceiver callback2;
-  client_socket->Connect(server_addr.Clone(), callback2.callback());
-  callback2.WaitForResult();
-  ASSERT_EQ(net::OK, callback2.result()->code);
-  ASSERT_NE(0u, callback2.net_address()->ipv4->port);
-
-  UDPSocketReceiverImpl client_socket_receiver;
-  Binding<UDPSocketReceiver> client_receiver_binding(
-      &client_socket_receiver, std::move(callback2.receiver()));
-
-  NetAddressPtr client_addr = callback2.net_address().Clone();
-
-  const size_t kDatagramCount = 6;
-  const size_t kDatagramSize = 255;
-
-  // Test send using a connected socket.
-  socket_->ReceiveMore(kDatagramCount);
-
-  for (size_t i = 0; i < kDatagramCount; ++i) {
-    TestCallback callback;
-    client_socket->SendTo(
-        nullptr,
-        CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize),
-        callback.callback());
-    callback.WaitForResult();
-    EXPECT_EQ(255, callback.result()->code);
-  }
-
-  receiver_.WaitForReceiveResults(kDatagramCount);
-  for (size_t i = 0; i < kDatagramCount; ++i) {
-    scoped_ptr<ReceiveResult> result(receiver_.results()->front());
-    receiver_.results()->pop();
-
-    EXPECT_EQ(static_cast<int>(kDatagramSize), result->result->code);
-    EXPECT_TRUE(result->addr.Equals(client_addr));
-    EXPECT_TRUE(result->data.Equals(
-        CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize)));
-  }
-
-  // Test receive using a connected socket.
-  client_socket->ReceiveMore(kDatagramCount);
-
-  for (size_t i = 0; i < kDatagramCount; ++i) {
-    TestCallback callback;
-    socket_->SendTo(
-        client_addr.Clone(),
-        CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize),
-        callback.callback());
-    callback.WaitForResult();
-    EXPECT_EQ(255, callback.result()->code);
-  }
-
-  client_socket_receiver.WaitForReceiveResults(kDatagramCount);
-  for (size_t i = 0; i < kDatagramCount; ++i) {
-    scoped_ptr<ReceiveResult> result(client_socket_receiver.results()->front());
-    client_socket_receiver.results()->pop();
-
-    EXPECT_EQ(static_cast<int>(kDatagramSize), result->result->code);
-    EXPECT_FALSE(result->addr);
-    EXPECT_TRUE(result->data.Equals(
-        CreateTestMessage(static_cast<uint8_t>(i), kDatagramSize)));
-  }
-}
-
-TEST_F(UDPSocketTest, TestWrapperReadWrite) {
-  UDPSocketWrapper socket(std::move(socket_), 4, 4);
-
-  TestCallbackWithAddress callback1;
-  socket.Bind(GetLocalHostWithAnyPort(), callback1.callback());
-  callback1.WaitForResult();
-  ASSERT_EQ(net::OK, callback1.result()->code);
-  ASSERT_NE(0u, callback1.net_address()->ipv4->port);
-
-  NetAddressPtr server_addr = callback1.net_address().Clone();
-
-  UDPSocketPtr raw_client_socket;
-  network_service_->CreateUDPSocket(GetProxy(&raw_client_socket));
-  UDPSocketWrapper client_socket(std::move(raw_client_socket), 4, 4);
-
-  TestCallbackWithAddress callback2;
-  client_socket.Bind(GetLocalHostWithAnyPort(), callback2.callback());
-  callback2.WaitForResult();
-  ASSERT_EQ(net::OK, callback2.result()->code);
-  ASSERT_NE(0u, callback2.net_address()->ipv4->port);
-
-  NetAddressPtr client_addr = callback2.net_address().Clone();
-
-  const size_t kDatagramCount = 16;
-  const size_t kDatagramSize = 255;
-
-  for (size_t i = 1; i < kDatagramCount; ++i) {
-    scoped_ptr<TestCallback[]> send_callbacks(new TestCallback[i]);
-    scoped_ptr<TestReceiveCallback[]> receive_callbacks(
-        new TestReceiveCallback[i]);
-
-    for (size_t j = 0; j < i; ++j) {
-      client_socket.SendTo(
-          server_addr.Clone(),
-          CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize),
-          send_callbacks[j].callback());
-
-      socket.ReceiveFrom(receive_callbacks[j].callback());
-    }
-
-    receive_callbacks[i - 1].WaitForResult();
-
-    for (size_t j = 0; j < i; ++j) {
-      EXPECT_EQ(static_cast<int>(kDatagramSize),
-                receive_callbacks[j].result()->code);
-      EXPECT_TRUE(receive_callbacks[j].src_addr().Equals(client_addr));
-      EXPECT_TRUE(receive_callbacks[j].data().Equals(
-          CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize)));
-    }
-  }
-}
-
-TEST_F(UDPSocketTest, TestWrapperConnectedReadWrite) {
-  UDPSocketWrapper socket(std::move(socket_), 4, 4);
-
-  TestCallbackWithAddress callback1;
-  socket.Bind(GetLocalHostWithAnyPort(), callback1.callback());
-  callback1.WaitForResult();
-  ASSERT_EQ(net::OK, callback1.result()->code);
-  ASSERT_NE(0u, callback1.net_address()->ipv4->port);
-
-  NetAddressPtr server_addr = callback1.net_address().Clone();
-
-  UDPSocketPtr raw_client_socket;
-  network_service_->CreateUDPSocket(GetProxy(&raw_client_socket));
-  UDPSocketWrapper client_socket(std::move(raw_client_socket), 4, 4);
-
-  TestCallbackWithAddress callback2;
-  client_socket.Connect(std::move(server_addr), callback2.callback());
-  callback2.WaitForResult();
-  ASSERT_EQ(net::OK, callback2.result()->code);
-  ASSERT_NE(0u, callback2.net_address()->ipv4->port);
-
-  NetAddressPtr client_addr = callback2.net_address().Clone();
-
-  const size_t kDatagramCount = 16;
-  const size_t kDatagramSize = 255;
-
-  // Test send using a connected socket.
-  for (size_t i = 1; i < kDatagramCount; ++i) {
-    scoped_ptr<TestCallback[]> send_callbacks(new TestCallback[i]);
-    scoped_ptr<TestReceiveCallback[]> receive_callbacks(
-        new TestReceiveCallback[i]);
-
-    for (size_t j = 0; j < i; ++j) {
-      client_socket.SendTo(
-          nullptr,
-          CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize),
-          send_callbacks[j].callback());
-
-      socket.ReceiveFrom(receive_callbacks[j].callback());
-    }
-
-    receive_callbacks[i - 1].WaitForResult();
-
-    for (size_t j = 0; j < i; ++j) {
-      EXPECT_EQ(static_cast<int>(kDatagramSize),
-                receive_callbacks[j].result()->code);
-      EXPECT_TRUE(receive_callbacks[j].src_addr().Equals(client_addr));
-      EXPECT_TRUE(receive_callbacks[j].data().Equals(
-          CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize)));
-    }
-  }
-
-  // Test receive using a connected socket.
-  for (size_t i = 1; i < kDatagramCount; ++i) {
-    scoped_ptr<TestCallback[]> send_callbacks(new TestCallback[i]);
-    scoped_ptr<TestReceiveCallback[]> receive_callbacks(
-        new TestReceiveCallback[i]);
-
-    for (size_t j = 0; j < i; ++j) {
-      socket.SendTo(
-          client_addr.Clone(),
-          CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize),
-          send_callbacks[j].callback());
-
-      client_socket.ReceiveFrom(receive_callbacks[j].callback());
-    }
-
-    receive_callbacks[i - 1].WaitForResult();
-
-    for (size_t j = 0; j < i; ++j) {
-      EXPECT_EQ(static_cast<int>(kDatagramSize),
-                receive_callbacks[j].result()->code);
-      EXPECT_FALSE(receive_callbacks[j].src_addr());
-      EXPECT_TRUE(receive_callbacks[j].data().Equals(
-          CreateTestMessage(static_cast<uint8_t>(j), kDatagramSize)));
-    }
-  }
-}
-
-}  // namespace service
-}  // namespace mojo
diff --git a/mojo/services/network/url_loader_factory_impl.cc b/mojo/services/network/url_loader_factory_impl.cc
deleted file mode 100644
index 2e19d5b..0000000
--- a/mojo/services/network/url_loader_factory_impl.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/url_loader_factory_impl.h"
-
-#include <utility>
-
-#include "mojo/services/network/url_loader_impl.h"
-
-namespace mojo {
-
-URLLoaderFactoryImpl::URLLoaderFactoryImpl(
-    NetworkContext* context,
-    scoped_ptr<mojo::MessageLoopRef> app_refcount,
-    InterfaceRequest<URLLoaderFactory> request)
-    : context_(context),
-      app_refcount_(std::move(app_refcount)),
-      binding_(this, std::move(request)) {}
-
-URLLoaderFactoryImpl::~URLLoaderFactoryImpl() {
-}
-
-void URLLoaderFactoryImpl::CreateURLLoader(InterfaceRequest<URLLoader> loader) {
-  // TODO(darin): Plumb origin. Use for CORS.
-  // TODO(beng): Figure out how to get origin through to here.
-  // The loader will delete itself when the pipe is closed, unless a request is
-  // in progress. In which case, the loader will delete itself when the request
-  // is finished.
-  new URLLoaderImpl(context_, std::move(loader), app_refcount_->Clone());
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/url_loader_factory_impl.h b/mojo/services/network/url_loader_factory_impl.h
deleted file mode 100644
index 0b59208..0000000
--- a/mojo/services/network/url_loader_factory_impl.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_URL_LOADER_FACTORY_IMPL_H_
-#define MOJO_SERVICES_NETWORK_URL_LOADER_FACTORY_IMPL_H_
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/url_loader_factory.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-
-namespace mojo {
-class NetworkContext;
-
-class URLLoaderFactoryImpl : public URLLoaderFactory {
- public:
-  URLLoaderFactoryImpl(NetworkContext* context,
-                       scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                       InterfaceRequest<URLLoaderFactory> request);
-  ~URLLoaderFactoryImpl() override;
-
-  // URLLoaderFactory methods:
-  void CreateURLLoader(InterfaceRequest<URLLoader> loader) override;
-
- private:
-  NetworkContext* context_;
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-  StrongBinding<URLLoaderFactory> binding_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLLoaderFactoryImpl);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_URL_LOADER_FACTORY_IMPL_H_
diff --git a/mojo/services/network/url_loader_impl.cc b/mojo/services/network/url_loader_impl.cc
deleted file mode 100644
index b6db54e..0000000
--- a/mojo/services/network/url_loader_impl.cc
+++ /dev/null
@@ -1,426 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/url_loader_impl.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <utility>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "mojo/common/common_type_converters.h"
-#include "mojo/common/url_type_converters.h"
-#include "mojo/services/network/net_adapters.h"
-#include "mojo/services/network/network_context.h"
-#include "net/base/elements_upload_data_stream.h"
-#include "net/base/io_buffer.h"
-#include "net/base/load_flags.h"
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
-#include "net/base/upload_bytes_element_reader.h"
-#include "net/http/http_response_headers.h"
-#include "net/url_request/redirect_info.h"
-#include "net/url_request/url_request_context.h"
-
-namespace mojo {
-namespace {
-
-GURL GetSiteForURL(const GURL& url) {
-  // If the url has a host, then determine the site.
-  if (url.has_host()) {
-    // Only keep the scheme and registered domain as given by GetOrigin.  This
-    // may also include a port, which we need to drop.
-    GURL site = url.GetOrigin();
-
-    // Remove port, if any.
-    if (site.has_port()) {
-      GURL::Replacements rep;
-      rep.ClearPort();
-      site = site.ReplaceComponents(rep);
-    }
-
-    // If this URL has a registered domain, we only want to remember that part.
-    std::string domain = net::registry_controlled_domains::GetDomainAndRegistry(
-        url, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
-    if (!domain.empty()) {
-      GURL::Replacements rep;
-      rep.SetHostStr(domain);
-      site = site.ReplaceComponents(rep);
-    }
-    return site;
-  }
-
-  // If there is no host but there is a scheme, return the scheme.
-  // This is useful for cases like file URLs.
-  if (url.has_scheme())
-    return GURL(url.scheme() + ":");
-
-  // Otherwise the URL should be invalid; return an empty site.
-  DCHECK(!url.is_valid());
-  return GURL();
-}
-
-// Generates an URLResponsePtr from the response state of a net::URLRequest.
-URLResponsePtr MakeURLResponse(const net::URLRequest* url_request) {
-  URLResponsePtr response(URLResponse::New());
-  response->url = String::From(url_request->url());
-  response->site = GetSiteForURL(url_request->url()).spec();
-
-  const net::HttpResponseHeaders* headers = url_request->response_headers();
-  if (headers) {
-    response->status_code = headers->response_code();
-    response->status_line = headers->GetStatusLine();
-
-    response->headers = Array<HttpHeaderPtr>::New(0);
-    std::vector<String> header_lines;
-    size_t iter = 0;
-    std::string name, value;
-    while (headers->EnumerateHeaderLines(&iter, &name, &value)) {
-      HttpHeaderPtr header = HttpHeader::New();
-      header->name = name;
-      header->value = value;
-      response->headers.push_back(std::move(header));
-    }
-  }
-
-  std::string mime_type;
-  url_request->GetMimeType(&mime_type);
-  response->mime_type = mime_type;
-
-  std::string charset;
-  url_request->GetCharset(&charset);
-  response->charset = charset;
-
-  return response;
-}
-
-// Reads the request body upload data from a DataPipe.
-class UploadDataPipeElementReader : public net::UploadElementReader {
- public:
-  UploadDataPipeElementReader(ScopedDataPipeConsumerHandle pipe)
-      : pipe_(std::move(pipe)), num_bytes_(0) {}
-  ~UploadDataPipeElementReader() override {}
-
-  // UploadElementReader overrides:
-  int Init(const net::CompletionCallback& callback) override {
-    offset_ = 0;
-    ReadDataRaw(pipe_.get(), nullptr, &num_bytes_, MOJO_READ_DATA_FLAG_QUERY);
-    return net::OK;
-  }
-  uint64_t GetContentLength() const override { return num_bytes_; }
-  uint64_t BytesRemaining() const override { return num_bytes_ - offset_; }
-  bool IsInMemory() const override { return false; }
-  int Read(net::IOBuffer* buf,
-           int buf_length,
-           const net::CompletionCallback& callback) override {
-    uint32_t bytes_read =
-        std::min(static_cast<uint32_t>(BytesRemaining()),
-                 static_cast<uint32_t>(buf_length));
-    if (bytes_read > 0) {
-      ReadDataRaw(pipe_.get(), buf->data(), &bytes_read,
-                  MOJO_READ_DATA_FLAG_NONE);
-    }
-
-    offset_ += bytes_read;
-    return bytes_read;
-  }
-
- private:
-  ScopedDataPipeConsumerHandle pipe_;
-  uint32_t num_bytes_;
-  uint32_t offset_;
-
-  DISALLOW_COPY_AND_ASSIGN(UploadDataPipeElementReader);
-};
-
-}  // namespace
-
-URLLoaderImpl::URLLoaderImpl(NetworkContext* context,
-                             InterfaceRequest<URLLoader> request,
-                             scoped_ptr<mojo::MessageLoopRef> app_refcount)
-    : context_(context),
-      response_body_buffer_size_(0),
-      response_body_bytes_read_(0),
-      auto_follow_redirects_(true),
-      connected_(true),
-      binding_(this, std::move(request)),
-      app_refcount_(std::move(app_refcount)),
-      weak_ptr_factory_(this) {
-  binding_.set_connection_error_handler([this]() { OnConnectionError(); });
-  context_->RegisterURLLoader(this);
-}
-
-URLLoaderImpl::~URLLoaderImpl() {
-  context_->DeregisterURLLoader(this);
-}
-
-void URLLoaderImpl::Cleanup() {
-  // The associated network context is going away and we have to destroy
-  // net::URLRequest hold by this loader.
-  delete this;
-}
-
-void URLLoaderImpl::Start(URLRequestPtr request,
-                          const Callback<void(URLResponsePtr)>& callback) {
-  if (url_request_) {
-    SendError(net::ERR_UNEXPECTED, callback);
-    return;
-  }
-
-  if (!request) {
-    SendError(net::ERR_INVALID_ARGUMENT, callback);
-    return;
-  }
-
-  url_request_ = context_->url_request_context()->CreateRequest(
-      GURL(request->url.get()), net::DEFAULT_PRIORITY, this);
-  url_request_->set_method(request->method);
-  // TODO(jam): need to specify this policy.
-  url_request_->set_referrer_policy(
-      net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE);
-  if (request->headers) {
-    net::HttpRequestHeaders headers;
-    for (size_t i = 0; i < request->headers.size(); ++i) {
-      base::StringPiece header =
-          request->headers[i]->name.To<base::StringPiece>();
-      base::StringPiece value =
-          request->headers[i]->value.To<base::StringPiece>();
-      if (header == net::HttpRequestHeaders::kReferer) {
-        url_request_->SetReferrer(value.as_string());
-      } else {
-        headers.SetHeader(header, value);
-      }
-    }
-    url_request_->SetExtraRequestHeaders(headers);
-  }
-  if (request->body) {
-    std::vector<scoped_ptr<net::UploadElementReader>> element_readers;
-    for (size_t i = 0; i < request->body.size(); ++i) {
-      element_readers.push_back(make_scoped_ptr(
-          new UploadDataPipeElementReader(std::move(request->body[i]))));
-    }
-    url_request_->set_upload(make_scoped_ptr<net::UploadDataStream>(
-        new net::ElementsUploadDataStream(std::move(element_readers), 0)));
-  }
-  if (request->bypass_cache)
-    url_request_->SetLoadFlags(net::LOAD_BYPASS_CACHE);
-
-  callback_ = callback;
-  response_body_buffer_size_ = request->response_body_buffer_size;
-  auto_follow_redirects_ = request->auto_follow_redirects;
-
-  url_request_->Start();
-}
-
-void URLLoaderImpl::FollowRedirect(
-    const Callback<void(URLResponsePtr)>& callback) {
-  if (!url_request_) {
-    SendError(net::ERR_UNEXPECTED, callback);
-    return;
-  }
-
-  if (auto_follow_redirects_) {
-    DLOG(ERROR) << "Spurious call to FollowRedirect";
-    SendError(net::ERR_UNEXPECTED, callback);
-    return;
-  }
-
-  // TODO(darin): Verify that it makes sense to call FollowDeferredRedirect.
-  url_request_->FollowDeferredRedirect();
-  callback_ = callback;
-}
-
-void URLLoaderImpl::QueryStatus(
-    const Callback<void(URLLoaderStatusPtr)>& callback) {
-  URLLoaderStatusPtr status(URLLoaderStatus::New());
-  status->bytes_read = response_body_bytes_read_;
-  if (url_request_) {
-    status->is_loading = url_request_->is_pending();
-    if (!url_request_->status().is_success())
-      status->error = MakeNetworkError(url_request_->status().error());
-    if (url_request_->response_info().headers) {
-      status->content_length =
-          url_request_->response_info().headers->GetContentLength();
-    }
-  } else {
-    status->is_loading = false;
-  }
-  // TODO(darin): Populate more status fields.
-  callback.Run(std::move(status));
-}
-
-void URLLoaderImpl::OnConnectionError() {
-  connected_ = false;
-  DeleteIfNeeded();
-}
-
-void URLLoaderImpl::OnReceivedRedirect(net::URLRequest* url_request,
-                                       const net::RedirectInfo& redirect_info,
-                                       bool* defer_redirect) {
-  DCHECK(url_request == url_request_.get());
-  DCHECK(url_request->status().is_success());
-
-  if (auto_follow_redirects_)
-    return;
-
-  // Send the redirect response to the client, allowing them to inspect it and
-  // optionally follow the redirect.
-  *defer_redirect = true;
-
-  URLResponsePtr response = MakeURLResponse(url_request);
-  response->redirect_method = redirect_info.new_method;
-  response->redirect_url = String::From(redirect_info.new_url);
-  response->redirect_referrer = redirect_info.new_referrer;
-
-  SendResponse(std::move(response));
-
-  DeleteIfNeeded();
-}
-
-void URLLoaderImpl::OnResponseStarted(net::URLRequest* url_request) {
-  DCHECK(url_request == url_request_.get());
-
-  if (!url_request->status().is_success()) {
-    SendError(url_request->status().error(), callback_);
-    callback_ = Callback<void(URLResponsePtr)>();
-    DeleteIfNeeded();
-    return;
-  }
-
-  // TODO(darin): Add support for optional MIME sniffing.
-
-  DataPipe data_pipe;
-  // TODO(darin): Honor given buffer size.
-
-  URLResponsePtr response = MakeURLResponse(url_request);
-  response->body = std::move(data_pipe.consumer_handle);
-  response_body_stream_ = std::move(data_pipe.producer_handle);
-  ListenForPeerClosed();
-
-  SendResponse(std::move(response));
-
-  // Start reading...
-  ReadMore();
-}
-
-void URLLoaderImpl::OnReadCompleted(net::URLRequest* url_request,
-                                    int bytes_read) {
-  DCHECK(url_request == url_request_.get());
-
-  if (url_request->status().is_success()) {
-    DidRead(static_cast<uint32_t>(bytes_read), false);
-  } else {
-    handle_watcher_.Stop();
-    pending_write_ = nullptr;  // This closes the data pipe.
-    DeleteIfNeeded();
-    return;
-  }
-}
-
-void URLLoaderImpl::SendError(
-    int error_code,
-    const Callback<void(URLResponsePtr)>& callback) {
-  URLResponsePtr response(URLResponse::New());
-  if (url_request_)
-    response->url = String::From(url_request_->url());
-  response->error = MakeNetworkError(error_code);
-  callback.Run(std::move(response));
-}
-
-void URLLoaderImpl::SendResponse(URLResponsePtr response) {
-  Callback<void(URLResponsePtr)> callback;
-  std::swap(callback_, callback);
-  callback.Run(std::move(response));
-}
-
-void URLLoaderImpl::OnResponseBodyStreamReady(MojoResult result) {
-  // TODO(darin): Handle a bad |result| value.
-
-  // Continue watching the handle in case the peer is closed.
-  ListenForPeerClosed();
-  ReadMore();
-}
-
-void URLLoaderImpl::OnResponseBodyStreamClosed(MojoResult result) {
-  url_request_.reset();
-  response_body_stream_.reset();
-  pending_write_ = nullptr;
-  DeleteIfNeeded();
-}
-
-void URLLoaderImpl::ReadMore() {
-  DCHECK(!pending_write_.get());
-
-  uint32_t num_bytes;
-  MojoResult result = NetToMojoPendingBuffer::BeginWrite(
-      &response_body_stream_, &pending_write_, &num_bytes);
-
-  if (result == MOJO_RESULT_SHOULD_WAIT) {
-    // The pipe is full. We need to wait for it to have more space.
-    handle_watcher_.Start(response_body_stream_.get(),
-                          MOJO_HANDLE_SIGNAL_WRITABLE, MOJO_DEADLINE_INDEFINITE,
-                          base::Bind(&URLLoaderImpl::OnResponseBodyStreamReady,
-                                     base::Unretained(this)));
-    return;
-  } else if (result != MOJO_RESULT_OK) {
-    // The response body stream is in a bad state. Bail.
-    // TODO(darin): How should this be communicated to our client?
-    handle_watcher_.Stop();
-    response_body_stream_.reset();
-    DeleteIfNeeded();
-    return;
-  }
-  CHECK_GT(static_cast<uint32_t>(std::numeric_limits<int>::max()), num_bytes);
-
-  scoped_refptr<net::IOBuffer> buf(new NetToMojoIOBuffer(pending_write_.get()));
-
-  int bytes_read;
-  url_request_->Read(buf.get(), static_cast<int>(num_bytes), &bytes_read);
-  if (url_request_->status().is_io_pending()) {
-    // Wait for OnReadCompleted.
-  } else if (url_request_->status().is_success() && bytes_read > 0) {
-    DidRead(static_cast<uint32_t>(bytes_read), true);
-  } else {
-    handle_watcher_.Stop();
-    pending_write_->Complete(0);
-    pending_write_ = nullptr;  // This closes the data pipe.
-    DeleteIfNeeded();
-    return;
-  }
-}
-
-void URLLoaderImpl::DidRead(uint32_t num_bytes, bool completed_synchronously) {
-  DCHECK(url_request_->status().is_success());
-
-  response_body_bytes_read_ += num_bytes;
-  response_body_stream_ = pending_write_->Complete(num_bytes);
-  pending_write_ = nullptr;
-
-  if (completed_synchronously) {
-    base::MessageLoop::current()->PostTask(
-        FROM_HERE,
-        base::Bind(&URLLoaderImpl::ReadMore, weak_ptr_factory_.GetWeakPtr()));
-  } else {
-    ReadMore();
-  }
-}
-
-void URLLoaderImpl::DeleteIfNeeded() {
-  bool has_data_pipe = pending_write_.get() || response_body_stream_.is_valid();
-  if (!connected_ && !has_data_pipe)
-    delete this;
-}
-
-void URLLoaderImpl::ListenForPeerClosed() {
-  handle_watcher_.Start(response_body_stream_.get(),
-                        MOJO_HANDLE_SIGNAL_PEER_CLOSED,
-                        MOJO_DEADLINE_INDEFINITE,
-                        base::Bind(&URLLoaderImpl::OnResponseBodyStreamClosed,
-                                   base::Unretained(this)));
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/url_loader_impl.h b/mojo/services/network/url_loader_impl.h
deleted file mode 100644
index 833eb864..0000000
--- a/mojo/services/network/url_loader_impl.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_URL_LOADER_IMPL_H_
-#define MOJO_SERVICES_NETWORK_URL_LOADER_IMPL_H_
-
-#include <stdint.h>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "mojo/message_pump/handle_watcher.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "mojo/services/network/public/interfaces/url_loader.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "net/base/net_errors.h"
-#include "net/url_request/url_request.h"
-
-namespace mojo {
-
-class NetworkContext;
-class NetToMojoPendingBuffer;
-
-class URLLoaderImpl : public URLLoader,
-                      public net::URLRequest::Delegate {
- public:
-  URLLoaderImpl(NetworkContext* context,
-                InterfaceRequest<URLLoader> request,
-                scoped_ptr<mojo::MessageLoopRef> app_refcount);
-  ~URLLoaderImpl() override;
-
-  // Called when the associated NetworkContext is going away.
-  void Cleanup();
-
- private:
-  // URLLoader methods:
-  void Start(URLRequestPtr request,
-             const Callback<void(URLResponsePtr)>& callback) override;
-  void FollowRedirect(const Callback<void(URLResponsePtr)>& callback) override;
-  void QueryStatus(const Callback<void(URLLoaderStatusPtr)>& callback) override;
-
-  void OnConnectionError();
-
-  // net::URLRequest::Delegate methods:
-  void OnReceivedRedirect(net::URLRequest* url_request,
-                          const net::RedirectInfo& redirect_info,
-                          bool* defer_redirect) override;
-  void OnResponseStarted(net::URLRequest* url_request) override;
-  void OnReadCompleted(net::URLRequest* url_request, int bytes_read) override;
-
-  void SendError(
-      int error,
-      const Callback<void(URLResponsePtr)>& callback);
-  void SendResponse(URLResponsePtr response);
-  void OnResponseBodyStreamReady(MojoResult result);
-  void OnResponseBodyStreamClosed(MojoResult result);
-  void ReadMore();
-  void DidRead(uint32_t num_bytes, bool completed_synchronously);
-  void ListenForPeerClosed();
-  void DeleteIfNeeded();
-
-  NetworkContext* context_;
-  scoped_ptr<net::URLRequest> url_request_;
-  Callback<void(URLResponsePtr)> callback_;
-  ScopedDataPipeProducerHandle response_body_stream_;
-  scoped_refptr<NetToMojoPendingBuffer> pending_write_;
-  common::HandleWatcher handle_watcher_;
-  uint32_t response_body_buffer_size_;
-  uint32_t response_body_bytes_read_;
-  bool auto_follow_redirects_;
-  bool connected_;
-  Binding<URLLoader> binding_;
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-
-  base::WeakPtrFactory<URLLoaderImpl> weak_ptr_factory_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_URL_LOADER_IMPL_H_
diff --git a/mojo/services/network/url_loader_impl_unittest.cc b/mojo/services/network/url_loader_impl_unittest.cc
deleted file mode 100644
index bbabc3e..0000000
--- a/mojo/services/network/url_loader_impl_unittest.cc
+++ /dev/null
@@ -1,287 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/lazy_instance.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "mojo/message_pump/message_pump_mojo.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
-#include "mojo/services/network/network_context.h"
-#include "mojo/services/network/url_loader_impl.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-#include "mojo/shell/public/cpp/shell_test.h"
-#include "net/base/net_errors.h"
-#include "net/url_request/url_request_job.h"
-#include "net/url_request/url_request_job_factory_impl.h"
-#include "net/url_request/url_request_status.h"
-#include "net/url_request/url_request_test_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace mojo {
-
-class TestURLRequestJob;
-
-TestURLRequestJob* g_current_job = nullptr;
-
-template <class A>
-void PassA(A* destination, A value) {
-  *destination = std::move(value);
-}
-
-class TestURLRequestJob : public net::URLRequestJob {
- public:
-  enum Status { CREATED, STARTED, READING, COMPLETED };
-
-  TestURLRequestJob(net::URLRequest* request,
-                    net::NetworkDelegate* network_delegate)
-      : net::URLRequestJob(request, network_delegate),
-        status_(CREATED),
-        buf_size_(0) {
-    CHECK(!g_current_job);
-    g_current_job = this;
-  }
-
-  Status status() { return status_; }
-
-  int buf_size() { return buf_size_; }
-
-  void Start() override { status_ = STARTED; }
-
-  int ReadRawData(net::IOBuffer* buf, int buf_size) override {
-    status_ = READING;
-    buf_size_ = buf_size;
-    return net::ERR_IO_PENDING;
-  }
-
-  void NotifyHeadersComplete() { net::URLRequestJob::NotifyHeadersComplete(); }
-
-  void NotifyReadComplete(int bytes_read) {
-    if (bytes_read < 0) {
-      // Map errors to net::ERR_FAILED.
-      ReadRawDataComplete(net::ERR_FAILED);
-      // Set this after calling ReadRawDataComplete since that ends up calling
-      // ReadRawData.
-      status_ = COMPLETED;
-    } else if (bytes_read == 0) {
-      ReadRawDataComplete(bytes_read);
-      // Set this after calling ReadRawDataComplete since that ends up calling
-      // ReadRawData.
-      status_ = COMPLETED;
-    } else {
-      ReadRawDataComplete(bytes_read);
-      // Set this after calling ReadRawDataComplete since that ends up calling
-      // ReadRawData.
-      status_ = STARTED;
-    }
-  }
-
- private:
-  ~TestURLRequestJob() override {
-    CHECK(g_current_job == this);
-    g_current_job = nullptr;
-  }
-
-  Status status_;
-  int buf_size_;
-};
-
-class TestProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
- public:
-  explicit TestProtocolHandler(const base::Closure& quit_closure)
-      : quit_closure_(quit_closure) {}
-    net::URLRequestJob* MaybeCreateJob(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate) const override {
-    quit_closure_.Run();
-    return new TestURLRequestJob(request, network_delegate);
-  }
-
-  ~TestProtocolHandler() override {}
-
- private:
-  base::Closure quit_closure_;
-};
-
-class UrlLoaderImplTest : public test::ShellTest {
- public:
-  UrlLoaderImplTest() : ShellTest("exe:network_service_unittests") {}
-
- protected:
-  void SetUp() override {
-    ShellTest::SetUp();
-
-    wait_for_request_.reset(new base::RunLoop);
-
-    scoped_ptr<net::TestURLRequestContext> url_request_context(
-        new net::TestURLRequestContext(true));
-    ASSERT_TRUE(url_request_job_factory_.SetProtocolHandler(
-        "http", make_scoped_ptr(new TestProtocolHandler(
-            wait_for_request_->QuitClosure()))));
-    url_request_context->set_job_factory(&url_request_job_factory_);
-    url_request_context->Init();
-    network_context_.reset(new NetworkContext(std::move(url_request_context)));
-    MessagePipe pipe;
-    new URLLoaderImpl(network_context_.get(),
-                      GetProxy(&url_loader_proxy_),
-                      make_scoped_ptr<mojo::MessageLoopRef>(nullptr));
-    EXPECT_TRUE(IsUrlLoaderValid());
-  }
-
-  bool IsUrlLoaderValid() {
-    return network_context_->GetURLLoaderCountForTesting() > 0u;
-  }
-
-  net::TestJobInterceptor* job_interceptor_;
-  net::URLRequestJobFactoryImpl url_request_job_factory_;
-  scoped_ptr<NetworkContext> network_context_;
-  URLLoaderPtr url_loader_proxy_;
-  scoped_ptr<base::RunLoop> wait_for_request_;
-};
-
-TEST_F(UrlLoaderImplTest, ClosedBeforeAnyCall) {
-  url_loader_proxy_.reset();
-
-  while (IsUrlLoaderValid())
-    base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(UrlLoaderImplTest, ClosedWhileWaitingOnTheNetwork) {
-  URLRequestPtr request(URLRequest::New());
-  request->url = "http://example.com";
-
-  URLResponsePtr response;
-  url_loader_proxy_->Start(std::move(request),
-                           base::Bind(&PassA<URLResponsePtr>, &response));
-  wait_for_request_->Run();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_FALSE(response);
-  ASSERT_TRUE(g_current_job);
-
-  g_current_job->NotifyHeadersComplete();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_TRUE(response);
-  EXPECT_EQ(TestURLRequestJob::READING, g_current_job->status());
-
-  url_loader_proxy_.reset();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-
-  response.reset();
-
-  while (IsUrlLoaderValid())
-    base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(UrlLoaderImplTest, ClosedWhileWaitingOnThePipeToBeWriteable) {
-  URLRequestPtr request(URLRequest::New());
-  request->url = "http://example.com";
-
-  URLResponsePtr response;
-  url_loader_proxy_->Start(std::move(request),
-                           base::Bind(&PassA<URLResponsePtr>, &response));
-  wait_for_request_->Run();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_FALSE(response);
-  ASSERT_TRUE(g_current_job);
-
-  g_current_job->NotifyHeadersComplete();
-  while (g_current_job->status() != TestURLRequestJob::READING)
-    base::RunLoop().RunUntilIdle();
-
-  while (!response)
-    base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_EQ(TestURLRequestJob::READING, g_current_job->status());
-
-  while (g_current_job->status() != TestURLRequestJob::STARTED) {
-    g_current_job->NotifyReadComplete(g_current_job->buf_size());
-    base::RunLoop().RunUntilIdle();
-  }
-
-  EXPECT_EQ(TestURLRequestJob::STARTED, g_current_job->status());
-
-  url_loader_proxy_.reset();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-
-  response.reset();
-
-  while (IsUrlLoaderValid())
-    base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(UrlLoaderImplTest, RequestCompleted) {
-  URLRequestPtr request(URLRequest::New());
-  request->url = "http://example.com";
-
-  URLResponsePtr response;
-  url_loader_proxy_->Start(std::move(request),
-                           base::Bind(&PassA<URLResponsePtr>, &response));
-  wait_for_request_->Run();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_FALSE(response);
-  ASSERT_TRUE(g_current_job);
-
-  g_current_job->NotifyHeadersComplete();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_TRUE(response);
-  EXPECT_EQ(TestURLRequestJob::READING, g_current_job->status());
-
-  url_loader_proxy_.reset();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-
-  g_current_job->NotifyReadComplete(0);
-
-  while (IsUrlLoaderValid())
-    base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(UrlLoaderImplTest, RequestFailed) {
-  URLRequestPtr request(URLRequest::New());
-  request->url = "http://example.com";
-
-  URLResponsePtr response;
-  url_loader_proxy_->Start(std::move(request),
-                           base::Bind(&PassA<URLResponsePtr>, &response));
-  wait_for_request_->Run();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_FALSE(response);
-  ASSERT_TRUE(g_current_job);
-
-  g_current_job->NotifyHeadersComplete();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-  EXPECT_TRUE(response);
-  EXPECT_EQ(TestURLRequestJob::READING, g_current_job->status());
-
-  url_loader_proxy_.reset();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(IsUrlLoaderValid());
-
-  g_current_job->NotifyReadComplete(-1);
-
-  while (IsUrlLoaderValid())
-    base::RunLoop().RunUntilIdle();
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/web_socket_factory_impl.cc b/mojo/services/network/web_socket_factory_impl.cc
deleted file mode 100644
index 6adde55..0000000
--- a/mojo/services/network/web_socket_factory_impl.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/web_socket_factory_impl.h"
-
-#include <utility>
-
-#include "mojo/services/network/web_socket_impl.h"
-
-namespace mojo {
-
-WebSocketFactoryImpl::WebSocketFactoryImpl(
-    NetworkContext* context,
-    scoped_ptr<MessageLoopRef> app_refcount,
-    InterfaceRequest<WebSocketFactory> request)
-    : context_(context),
-      app_refcount_(std::move(app_refcount)),
-      binding_(this, std::move(request)) {}
-
-WebSocketFactoryImpl::~WebSocketFactoryImpl() {
-}
-
-void WebSocketFactoryImpl::CreateWebSocket(InterfaceRequest<WebSocket> socket) {
-  new WebSocketImpl(context_, app_refcount_->Clone(), std::move(socket));
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/web_socket_factory_impl.h b/mojo/services/network/web_socket_factory_impl.h
deleted file mode 100644
index ca254ca..0000000
--- a/mojo/services/network/web_socket_factory_impl.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_WEB_SOCKET_FACTORY_IMPL_H_
-#define MOJO_SERVICES_NETWORK_WEB_SOCKET_FACTORY_IMPL_H_
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/web_socket_factory.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-
-namespace mojo {
-class NetworkContext;
-
-class WebSocketFactoryImpl : public WebSocketFactory {
- public:
-  WebSocketFactoryImpl(NetworkContext* context,
-                       scoped_ptr<MessageLoopRef> app_refcount,
-                       InterfaceRequest<WebSocketFactory> request);
-  ~WebSocketFactoryImpl() override;
-
-  // WebSocketFactory methods:
-  void CreateWebSocket(InterfaceRequest<WebSocket> socket) override;
-
- private:
-  NetworkContext* context_;
-  scoped_ptr<MessageLoopRef> app_refcount_;
-  StrongBinding<WebSocketFactory> binding_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebSocketFactoryImpl);
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_WEB_SOCKET_FACTORY_IMPL_H_
diff --git a/mojo/services/network/web_socket_impl.cc b/mojo/services/network/web_socket_impl.cc
deleted file mode 100644
index 2d89149d..0000000
--- a/mojo/services/network/web_socket_impl.cc
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/services/network/web_socket_impl.h"
-
-#include <stdint.h>
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/message_loop/message_loop.h"
-#include "mojo/message_pump/handle_watcher.h"
-#include "mojo/services/network/network_context.h"
-#include "mojo/services/network/public/cpp/web_socket_read_queue.h"
-#include "mojo/services/network/public/cpp/web_socket_write_queue.h"
-#include "net/websockets/websocket_channel.h"
-#include "net/websockets/websocket_errors.h"
-#include "net/websockets/websocket_event_interface.h"
-#include "net/websockets/websocket_frame.h"  // for WebSocketFrameHeader::OpCode
-#include "net/websockets/websocket_handshake_request_info.h"
-#include "net/websockets/websocket_handshake_response_info.h"
-#include "url/origin.h"
-
-namespace mojo {
-
-template <>
-struct TypeConverter<net::WebSocketFrameHeader::OpCode,
-                     WebSocket::MessageType> {
-  static net::WebSocketFrameHeader::OpCode Convert(
-      WebSocket::MessageType type) {
-    DCHECK(type == WebSocket::MessageType::CONTINUATION ||
-           type == WebSocket::MessageType::TEXT ||
-           type == WebSocket::MessageType::BINARY);
-    typedef net::WebSocketFrameHeader::OpCode OpCode;
-    // These compile asserts verify that the same underlying values are used for
-    // both types, so we can simply cast between them.
-    static_assert(static_cast<OpCode>(WebSocket::MessageType::CONTINUATION) ==
-                      net::WebSocketFrameHeader::kOpCodeContinuation,
-                  "enum values must match for opcode continuation");
-    static_assert(static_cast<OpCode>(WebSocket::MessageType::TEXT) ==
-                      net::WebSocketFrameHeader::kOpCodeText,
-                  "enum values must match for opcode text");
-    static_assert(static_cast<OpCode>(WebSocket::MessageType::BINARY) ==
-                      net::WebSocketFrameHeader::kOpCodeBinary,
-                  "enum values must match for opcode binary");
-    return static_cast<OpCode>(type);
-  }
-};
-
-template <>
-struct TypeConverter<WebSocket::MessageType,
-                     net::WebSocketFrameHeader::OpCode> {
-  static WebSocket::MessageType Convert(
-      net::WebSocketFrameHeader::OpCode type) {
-    DCHECK(type == net::WebSocketFrameHeader::kOpCodeContinuation ||
-           type == net::WebSocketFrameHeader::kOpCodeText ||
-           type == net::WebSocketFrameHeader::kOpCodeBinary);
-    return static_cast<WebSocket::MessageType>(type);
-  }
-};
-
-namespace {
-
-typedef net::WebSocketEventInterface::ChannelState ChannelState;
-
-struct WebSocketEventHandler : public net::WebSocketEventInterface {
- public:
-  WebSocketEventHandler(WebSocketClientPtr client)
-      : client_(std::move(client)) {}
-  ~WebSocketEventHandler() override {}
-
- private:
-  // net::WebSocketEventInterface methods:
-  ChannelState OnAddChannelResponse(const std::string& selected_subprotocol,
-                                    const std::string& extensions) override;
-  ChannelState OnDataFrame(bool fin,
-                           WebSocketMessageType type,
-                           const std::vector<char>& data) override;
-  ChannelState OnClosingHandshake() override;
-  ChannelState OnFlowControl(int64_t quota) override;
-  ChannelState OnDropChannel(bool was_clean,
-                             uint16_t code,
-                             const std::string& reason) override;
-  ChannelState OnFailChannel(const std::string& message) override;
-  ChannelState OnStartOpeningHandshake(
-      scoped_ptr<net::WebSocketHandshakeRequestInfo> request) override;
-  ChannelState OnFinishOpeningHandshake(
-      scoped_ptr<net::WebSocketHandshakeResponseInfo> response) override;
-  ChannelState OnSSLCertificateError(
-      scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks,
-      const GURL& url,
-      const net::SSLInfo& ssl_info,
-      bool fatal) override;
-
-  // Called once we've written to |receive_stream_|.
-  void DidWriteToReceiveStream(bool fin,
-                               net::WebSocketFrameHeader::OpCode type,
-                               uint32_t num_bytes,
-                               const char* buffer);
-  WebSocketClientPtr client_;
-  ScopedDataPipeProducerHandle receive_stream_;
-  scoped_ptr<WebSocketWriteQueue> write_queue_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebSocketEventHandler);
-};
-
-ChannelState WebSocketEventHandler::OnAddChannelResponse(
-    const std::string& selected_protocol,
-    const std::string& extensions) {
-  DataPipe data_pipe;
-  receive_stream_ = std::move(data_pipe.producer_handle);
-  write_queue_.reset(new WebSocketWriteQueue(receive_stream_.get()));
-  client_->DidConnect(selected_protocol, extensions,
-                      std::move(data_pipe.consumer_handle));
-  return WebSocketEventInterface::CHANNEL_ALIVE;
-}
-
-ChannelState WebSocketEventHandler::OnDataFrame(
-    bool fin,
-    net::WebSocketFrameHeader::OpCode type,
-    const std::vector<char>& data) {
-  uint32_t size = static_cast<uint32_t>(data.size());
-  write_queue_->Write(
-      &data[0], size,
-      base::Bind(&WebSocketEventHandler::DidWriteToReceiveStream,
-                 base::Unretained(this),
-                 fin, type, size));
-  return WebSocketEventInterface::CHANNEL_ALIVE;
-}
-
-ChannelState WebSocketEventHandler::OnClosingHandshake() {
-  return WebSocketEventInterface::CHANNEL_ALIVE;
-}
-
-ChannelState WebSocketEventHandler::OnFlowControl(int64_t quota) {
-  client_->DidReceiveFlowControl(quota);
-  return WebSocketEventInterface::CHANNEL_ALIVE;
-}
-
-ChannelState WebSocketEventHandler::OnDropChannel(bool was_clean,
-                                                  uint16_t code,
-                                                  const std::string& reason) {
-  client_->DidClose(was_clean, code, reason);
-  return WebSocketEventInterface::CHANNEL_DELETED;
-}
-
-ChannelState WebSocketEventHandler::OnFailChannel(const std::string& message) {
-  client_->DidFail(message);
-  return WebSocketEventInterface::CHANNEL_DELETED;
-}
-
-ChannelState WebSocketEventHandler::OnStartOpeningHandshake(
-    scoped_ptr<net::WebSocketHandshakeRequestInfo> request) {
-  return WebSocketEventInterface::CHANNEL_ALIVE;
-}
-
-ChannelState WebSocketEventHandler::OnFinishOpeningHandshake(
-    scoped_ptr<net::WebSocketHandshakeResponseInfo> response) {
-  return WebSocketEventInterface::CHANNEL_ALIVE;
-}
-
-ChannelState WebSocketEventHandler::OnSSLCertificateError(
-    scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks,
-    const GURL& url,
-    const net::SSLInfo& ssl_info,
-    bool fatal) {
-  client_->DidFail("SSL Error");
-  return WebSocketEventInterface::CHANNEL_DELETED;
-}
-
-void WebSocketEventHandler::DidWriteToReceiveStream(
-    bool fin,
-    net::WebSocketFrameHeader::OpCode type,
-    uint32_t num_bytes,
-    const char* buffer) {
-  client_->DidReceiveData(
-      fin, ConvertTo<WebSocket::MessageType>(type), num_bytes);
-}
-
-}  // namespace mojo
-
-WebSocketImpl::WebSocketImpl(NetworkContext* context,
-                             scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                             InterfaceRequest<WebSocket> request)
-    : context_(context),
-      app_refcount_(std::move(app_refcount)),
-      binding_(this, std::move(request)) {}
-
-WebSocketImpl::~WebSocketImpl() {
-}
-
-void WebSocketImpl::Connect(const String& url,
-                            Array<String> protocols,
-                            const String& origin,
-                            ScopedDataPipeConsumerHandle send_stream,
-                            WebSocketClientPtr client) {
-  DCHECK(!channel_);
-  send_stream_ = std::move(send_stream);
-  read_queue_.reset(new WebSocketReadQueue(send_stream_.get()));
-  scoped_ptr<net::WebSocketEventInterface> event_interface(
-      new WebSocketEventHandler(std::move(client)));
-  channel_.reset(new net::WebSocketChannel(std::move(event_interface),
-                                           context_->url_request_context()));
-  channel_->SendAddChannelRequest(GURL(url.get()),
-                                  protocols.To<std::vector<std::string>>(),
-                                  url::Origin(GURL(origin.get())));
-}
-
-void WebSocketImpl::Send(bool fin,
-                         WebSocket::MessageType type,
-                         uint32_t num_bytes) {
-  DCHECK(channel_);
-  read_queue_->Read(num_bytes,
-                    base::Bind(&WebSocketImpl::DidReadFromSendStream,
-                               base::Unretained(this),
-                               fin, type, num_bytes));
-}
-
-void WebSocketImpl::FlowControl(int64_t quota) {
-  DCHECK(channel_);
-  channel_->SendFlowControl(quota);
-}
-
-void WebSocketImpl::Close(uint16_t code, const String& reason) {
-  DCHECK(channel_);
-  channel_->StartClosingHandshake(code, reason);
-}
-
-void WebSocketImpl::DidReadFromSendStream(bool fin,
-                                          WebSocket::MessageType type,
-                                          uint32_t num_bytes,
-                                          const char* data) {
-  std::vector<char> buffer(num_bytes);
-  memcpy(&buffer[0], data, num_bytes);
-  DCHECK(channel_);
-  channel_->SendFrame(
-      fin, ConvertTo<net::WebSocketFrameHeader::OpCode>(type), buffer);
-}
-
-}  // namespace mojo
diff --git a/mojo/services/network/web_socket_impl.h b/mojo/services/network/web_socket_impl.h
deleted file mode 100644
index 06fd3ca..0000000
--- a/mojo/services/network/web_socket_impl.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MOJO_SERVICES_NETWORK_WEB_SOCKET_IMPL_H_
-#define MOJO_SERVICES_NETWORK_WEB_SOCKET_IMPL_H_
-
-#include <stdint.h>
-
-#include "base/memory/scoped_ptr.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/services/network/public/interfaces/web_socket.mojom.h"
-#include "mojo/shell/public/cpp/message_loop_ref.h"
-
-namespace net {
-class WebSocketChannel;
-}  // namespace net
-
-namespace mojo {
-class NetworkContext;
-class WebSocketReadQueue;
-
-// Forms a bridge between the WebSocket mojo interface and the net::WebSocket
-// implementation.
-class WebSocketImpl : public WebSocket {
- public:
-  WebSocketImpl(NetworkContext* context,
-                scoped_ptr<mojo::MessageLoopRef> app_refcount,
-                InterfaceRequest<WebSocket> request);
-  ~WebSocketImpl() override;
-
- private:
-  // WebSocket methods:
-  void Connect(const String& url,
-               Array<String> protocols,
-               const String& origin,
-               ScopedDataPipeConsumerHandle send_stream,
-               WebSocketClientPtr client) override;
-  void Send(bool fin, WebSocket::MessageType type, uint32_t num_bytes) override;
-  void FlowControl(int64_t quota) override;
-  void Close(uint16_t code, const String& reason) override;
-
-  // Called with the data to send once it has been read from |send_stream_|.
-  void DidReadFromSendStream(bool fin,
-                             WebSocket::MessageType type,
-                             uint32_t num_bytes,
-                             const char* data);
-
-  // The channel we use to send events to the network.
-  scoped_ptr<net::WebSocketChannel> channel_;
-  ScopedDataPipeConsumerHandle send_stream_;
-  scoped_ptr<WebSocketReadQueue> read_queue_;
-  NetworkContext* context_;
-  scoped_ptr<mojo::MessageLoopRef> app_refcount_;
-  StrongBinding<WebSocket> binding_;
-};
-
-}  // namespace mojo
-
-#endif  // MOJO_SERVICES_NETWORK_WEB_SOCKET_IMPL_H_
diff --git a/mojo/shell/shell.cc b/mojo/shell/shell.cc
index ed3f6e4..2e39000 100644
--- a/mojo/shell/shell.cc
+++ b/mojo/shell/shell.cc
@@ -296,10 +296,10 @@
       const ConnectCallback& callback) {
     if (!client_process_connection->is_null()) {
       if (!HasClass(capability_spec_, kCapabilityClass_ClientProcess)) {
-        LOG(WARNING) << "Instance: " << identity_.name() << " attempting "
-                     << "to register an instance for a process it created for "
-                     << "target: " << target.name() << " without the "
-                     << "mojo:shell{client_process} capability class.";
+        LOG(ERROR) << "Instance: " << identity_.name() << " attempting "
+                   << "to register an instance for a process it created for "
+                   << "target: " << target.name() << " without the "
+                   << "mojo:shell{client_process} capability class.";
         callback.Run(mojom::ConnectResult::ACCESS_DENIED,
                      mojom::kInheritUserID, mojom::kInvalidInstanceID);
         return false;
@@ -307,17 +307,17 @@
 
       if (!(*client_process_connection)->shell_client.is_valid() ||
           !(*client_process_connection)->pid_receiver_request.is_valid()) {
-        LOG(WARNING) << "Must supply both shell_client AND "
-                     << "pid_receiver_request when sending "
-                     << "client_process_connection.";
+        LOG(ERROR) << "Must supply both shell_client AND "
+                   << "pid_receiver_request when sending "
+                   << "client_process_connection.";
         callback.Run(mojom::ConnectResult::INVALID_ARGUMENT,
                      mojom::kInheritUserID, mojom::kInvalidInstanceID);
         return false;
       }
       if (shell_->GetExistingInstance(target)) {
-        LOG(WARNING) << "Cannot client process matching existing identity:"
-                     << "Name: " << target.name() << " User: "
-                     << target.user_id() << " Instance: " << target.instance();
+        LOG(ERROR) << "Cannot client process matching existing identity:"
+                   << "Name: " << target.name() << " User: "
+                   << target.user_id() << " Instance: " << target.instance();
         callback.Run(mojom::ConnectResult::INVALID_ARGUMENT,
                      mojom::kInheritUserID, mojom::kInvalidInstanceID);
         return false;
diff --git a/mojo/shell/standalone/context.cc b/mojo/shell/standalone/context.cc
index c036694e..4a5512e976 100644
--- a/mojo/shell/standalone/context.cc
+++ b/mojo/shell/standalone/context.cc
@@ -166,7 +166,8 @@
   scoped_ptr<catalog::Store> store;
   if (init_params)
     store = std::move(init_params->catalog_store);
-  catalog_.reset(new catalog::Factory(blocking_pool_.get(), std::move(store)));
+  catalog_.reset(
+      new catalog::Factory(blocking_pool_.get(), std::move(store), nullptr));
   shell_.reset(new Shell(std::move(runner_factory),
                          catalog_->TakeShellClient()));
 
diff --git a/mojo/shell/tests/loader_unittest.cc b/mojo/shell/tests/loader_unittest.cc
index 773bc95..b9c9f27 100644
--- a/mojo/shell/tests/loader_unittest.cc
+++ b/mojo/shell/tests/loader_unittest.cc
@@ -402,7 +402,8 @@
 
   void SetUp() override {
     blocking_pool_ = new base::SequencedWorkerPool(3, "blocking_pool");
-    catalog_.reset(new catalog::Factory(blocking_pool_.get(), nullptr));
+    catalog_.reset(
+        new catalog::Factory(blocking_pool_.get(), nullptr, nullptr));
     shell_.reset(new Shell(nullptr, catalog_->TakeShellClient()));
     test_loader_ = new TestLoader(&context_);
     shell_->set_default_loader(scoped_ptr<Loader>(test_loader_));
@@ -478,7 +479,7 @@
 
 TEST_F(LoaderTest, Deletes) {
   {
-    catalog::Factory catalog(blocking_pool_.get(), nullptr);
+    catalog::Factory catalog(blocking_pool_.get(), nullptr, nullptr);
     Shell shell(nullptr, catalog.TakeShellClient());
     TestLoader* default_loader = new TestLoader(&context_);
     TestLoader* name_loader1 = new TestLoader(&context_);
diff --git a/net/base/network_quality_estimator.cc b/net/base/network_quality_estimator.cc
index 8ba2d03..9a6d8d6 100644
--- a/net/base/network_quality_estimator.cc
+++ b/net/base/network_quality_estimator.cc
@@ -15,11 +15,13 @@
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_base.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "net/base/load_flags.h"
 #include "net/base/load_timing_info.h"
 #include "net/base/network_interfaces.h"
+#include "net/base/socket_performance_watcher.h"
 #include "net/base/url_util.h"
 #include "net/url_request/url_request.h"
 #include "url/gurl.h"
@@ -118,6 +120,81 @@
 
 namespace net {
 
+// SocketWatcher implements SocketPerformanceWatcher, and notifies
+// NetworkQualityEstimator of various socket performance events. SocketWatcher
+// is not thread-safe.
+class NetworkQualityEstimator::SocketWatcher : public SocketPerformanceWatcher {
+ public:
+  SocketWatcher(
+      SocketPerformanceWatcherFactory::Protocol protocol,
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      const base::WeakPtr<NetworkQualityEstimator>& network_quality_estimator)
+      : protocol_(protocol),
+        task_runner_(std::move(task_runner)),
+        network_quality_estimator_(network_quality_estimator) {}
+
+  ~SocketWatcher() override {}
+
+  // SocketPerformanceWatcher implementation:
+  bool ShouldNotifyUpdatedRTT() const override {
+    DCHECK(thread_checker_.CalledOnValidThread());
+
+    return true;
+  }
+
+  void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) override {
+    DCHECK(thread_checker_.CalledOnValidThread());
+
+    task_runner_->PostTask(
+        FROM_HERE, base::Bind(&NetworkQualityEstimator::OnUpdatedRTTAvailable,
+                              network_quality_estimator_, protocol_, rtt));
+  }
+
+  void OnConnectionChanged() override {
+    DCHECK(thread_checker_.CalledOnValidThread());
+  }
+
+ private:
+  // Transport layer protocol used by the socket that |this| is watching.
+  const SocketPerformanceWatcherFactory::Protocol protocol_;
+
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+
+  base::WeakPtr<NetworkQualityEstimator> network_quality_estimator_;
+
+  base::ThreadChecker thread_checker_;
+
+  DISALLOW_COPY_AND_ASSIGN(SocketWatcher);
+};
+
+// SocketWatcherFactory implements SocketPerformanceWatcherFactory, and is
+// owned by NetworkQualityEstimator. SocketWatcherFactory is thread safe.
+class NetworkQualityEstimator::SocketWatcherFactory
+    : public SocketPerformanceWatcherFactory {
+ public:
+  SocketWatcherFactory(
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      const base::WeakPtr<NetworkQualityEstimator>& network_quality_estimator)
+      : task_runner_(std::move(task_runner)),
+        network_quality_estimator_(network_quality_estimator) {}
+
+  ~SocketWatcherFactory() override {}
+
+  // SocketPerformanceWatcherFactory implementation:
+  scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
+      const Protocol protocol) override {
+    return scoped_ptr<SocketPerformanceWatcher>(
+        new SocketWatcher(protocol, task_runner_, network_quality_estimator_));
+  }
+
+ private:
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+
+  base::WeakPtr<NetworkQualityEstimator> network_quality_estimator_;
+
+  DISALLOW_COPY_AND_ASSIGN(SocketWatcherFactory);
+};
+
 const int32_t NetworkQualityEstimator::kInvalidThroughput = 0;
 
 NetworkQualityEstimator::NetworkQualityEstimator(
@@ -142,7 +219,8 @@
       downstream_throughput_kbps_observations_(
           GetWeightMultiplierPerSecond(variation_params)),
       rtt_observations_(GetWeightMultiplierPerSecond(variation_params)),
-      external_estimate_provider_(std::move(external_estimates_provider)) {
+      external_estimate_provider_(std::move(external_estimates_provider)),
+      weak_ptr_factory_(this) {
   static_assert(kMinRequestDurationMicroseconds > 0,
                 "Minimum request duration must be > 0");
   static_assert(kDefaultHalfLifeSeconds > 0,
@@ -167,6 +245,9 @@
   }
   current_network_id_ = GetCurrentNetworkID();
   AddDefaultEstimates();
+
+  watcher_factory_.reset(new SocketWatcherFactory(
+      base::ThreadTaskRunnerHandle::Get(), weak_ptr_factory_.GetWeakPtr()));
 }
 
 // static
@@ -381,6 +462,13 @@
   throughput_observer_list_.RemoveObserver(throughput_observer);
 }
 
+SocketPerformanceWatcherFactory*
+NetworkQualityEstimator::GetSocketPerformanceWatcherFactory() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  return watcher_factory_.get();
+}
+
 void NetworkQualityEstimator::RecordRTTUMA(int32_t estimated_value_msec,
                                            int32_t actual_value_msec) const {
   DCHECK(thread_checker_.CalledOnValidThread());
@@ -909,25 +997,16 @@
             static_cast<size_t>(kMaximumNetworkQualityCacheSize));
 }
 
-scoped_ptr<SocketPerformanceWatcher>
-NetworkQualityEstimator::CreateSocketPerformanceWatcher(
-    const Protocol protocol) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  return scoped_ptr<SocketPerformanceWatcher>(
-      new SocketPerformanceWatcher(protocol, this));
-}
-
 void NetworkQualityEstimator::OnUpdatedRTTAvailable(
-    const Protocol protocol,
+    SocketPerformanceWatcherFactory::Protocol protocol,
     const base::TimeDelta& rtt) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
   switch (protocol) {
-    case PROTOCOL_TCP:
+    case SocketPerformanceWatcherFactory::PROTOCOL_TCP:
       NotifyObserversOfRTT(RttObservation(rtt, base::TimeTicks::Now(), TCP));
       return;
-    case PROTOCOL_QUIC:
+    case SocketPerformanceWatcherFactory::PROTOCOL_QUIC:
       NotifyObserversOfRTT(RttObservation(rtt, base::TimeTicks::Now(), QUIC));
       return;
     default:
diff --git a/net/base/network_quality_estimator.h b/net/base/network_quality_estimator.h
index 32e1a3e..5ff9bd7 100644
--- a/net/base/network_quality_estimator.h
+++ b/net/base/network_quality_estimator.h
@@ -17,15 +17,19 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "net/base/external_estimate_provider.h"
 #include "net/base/net_export.h"
 #include "net/base/network_change_notifier.h"
-#include "net/base/socket_performance_watcher.h"
 #include "net/base/socket_performance_watcher_factory.h"
 
+namespace base {
+class SingleThreadTaskRunner;
+}  // namespace base
+
 namespace net {
 
 class URLRequest;
@@ -40,8 +44,7 @@
 // observed traffic characteristics.
 class NET_EXPORT_PRIVATE NetworkQualityEstimator
     : public NetworkChangeNotifier::ConnectionTypeObserver,
-      public ExternalEstimateProvider::UpdatedEstimateDelegate,
-      public SocketPerformanceWatcherFactory {
+      public ExternalEstimateProvider::UpdatedEstimateDelegate {
  public:
   // On Android, a Java counterpart will be generated for this enum.
   // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net
@@ -168,12 +171,6 @@
       const base::TimeTicks& begin_timestamp,
       int32_t* kbps) const;
 
-  // SocketPerformanceWatcherFactory implementation:
-  scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
-      const Protocol protocol) override;
-  void OnUpdatedRTTAvailable(const Protocol protocol,
-                             const base::TimeDelta& rtt) override;
-
   // Adds |rtt_observer| to the list of round trip time observers. Must be
   // called on the IO thread.
   void AddRTTObserver(RTTObserver* rtt_observer);
@@ -190,6 +187,8 @@
   // is on the list of observers. Must be called on the IO thread.
   void RemoveThroughputObserver(ThroughputObserver* throughput_observer);
 
+  SocketPerformanceWatcherFactory* GetSocketPerformanceWatcherFactory();
+
  protected:
   // NetworkID is used to uniquely identify a network.
   // For the purpose of network quality estimation and caching, a network is
@@ -258,7 +257,9 @@
                            TestExternalEstimateProvider);
   FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest,
                            TestExternalEstimateProviderMergeEstimates);
-  FRIEND_TEST_ALL_PREFIXES(NetworkQualityEstimatorTest, TestObservers);
+
+  class SocketWatcher;
+  class SocketWatcherFactory;
 
   // NetworkQuality is used to cache the quality of a network connection.
   class NET_EXPORT_PRIVATE NetworkQuality {
@@ -498,6 +499,10 @@
   // should discard RTT if it is set to the value returned by |InvalidRTT()|.
   static const base::TimeDelta InvalidRTT();
 
+  // Notifies |this| of a new transport layer RTT.
+  void OnUpdatedRTTAvailable(SocketPerformanceWatcherFactory::Protocol protocol,
+                             const base::TimeDelta& rtt);
+
   // Queries the external estimate provider for the latest network quality
   // estimates, and adds those estimates to the current observation buffer.
   void QueryExternalEstimateProvider();
@@ -610,8 +615,12 @@
   base::ObserverList<RTTObserver> rtt_observer_list_;
   base::ObserverList<ThroughputObserver> throughput_observer_list_;
 
+  scoped_ptr<SocketPerformanceWatcherFactory> watcher_factory_;
+
   base::ThreadChecker thread_checker_;
 
+  base::WeakPtrFactory<NetworkQualityEstimator> weak_ptr_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(NetworkQualityEstimator);
 };
 
diff --git a/net/base/network_quality_estimator_unittest.cc b/net/base/network_quality_estimator_unittest.cc
index 0c5fabc..13d35b1b 100644
--- a/net/base/network_quality_estimator_unittest.cc
+++ b/net/base/network_quality_estimator_unittest.cc
@@ -5,8 +5,10 @@
 #include "net/base/network_quality_estimator.h"
 
 #include <stdint.h>
+
 #include <limits>
 #include <map>
+#include <string>
 #include <utility>
 #include <vector>
 
@@ -23,10 +25,13 @@
 #include "net/base/external_estimate_provider.h"
 #include "net/base/load_flags.h"
 #include "net/base/network_change_notifier.h"
+#include "net/base/socket_performance_watcher.h"
+#include "net/base/socket_performance_watcher_factory.h"
 #include "net/http/http_status_code.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
+#include "net/url_request/url_request.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -1071,11 +1076,11 @@
   base::RunLoop().Run();
 
   // Both RTT and downstream throughput should be updated.
-  EXPECT_NE(NetworkQualityEstimator::InvalidRTT(),
-            estimator.GetURLRequestRTTEstimateInternal(base::TimeTicks(), 100));
-  EXPECT_NE(NetworkQualityEstimator::kInvalidThroughput,
-            estimator.GetDownlinkThroughputKbpsEstimateInternal(
-                base::TimeTicks(), 100));
+  base::TimeDelta rtt;
+  EXPECT_TRUE(estimator.GetURLRequestRTTEstimate(&rtt));
+
+  int32_t throughput;
+  EXPECT_TRUE(estimator.GetDownlinkThroughputKbpsEstimate(&throughput));
 
   EXPECT_EQ(2U, rtt_observer.observations().size());
   EXPECT_EQ(2U, throughput_observer.observations().size());
@@ -1095,14 +1100,20 @@
   base::TimeDelta quic_rtt(base::TimeDelta::FromMilliseconds(2));
 
   scoped_ptr<SocketPerformanceWatcher> tcp_watcher =
-      estimator.CreateSocketPerformanceWatcher(
-          SocketPerformanceWatcherFactory::PROTOCOL_TCP);
+      estimator.GetSocketPerformanceWatcherFactory()
+          ->CreateSocketPerformanceWatcher(
+              SocketPerformanceWatcherFactory::PROTOCOL_TCP);
+
   scoped_ptr<SocketPerformanceWatcher> quic_watcher =
-      estimator.CreateSocketPerformanceWatcher(
-          SocketPerformanceWatcherFactory::PROTOCOL_QUIC);
+      estimator.GetSocketPerformanceWatcherFactory()
+          ->CreateSocketPerformanceWatcher(
+              SocketPerformanceWatcherFactory::PROTOCOL_QUIC);
+
   tcp_watcher->OnUpdatedRTTAvailable(tcp_rtt);
   quic_watcher->OnUpdatedRTTAvailable(quic_rtt);
 
+  base::RunLoop().RunUntilIdle();
+
   EXPECT_EQ(4U, rtt_observer.observations().size());
   EXPECT_EQ(2U, throughput_observer.observations().size());
 
diff --git a/net/base/socket_performance_watcher.cc b/net/base/socket_performance_watcher.cc
deleted file mode 100644
index aa0dab3..0000000
--- a/net/base/socket_performance_watcher.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/base/socket_performance_watcher.h"
-
-#include "base/logging.h"
-
-namespace net {
-
-SocketPerformanceWatcher::SocketPerformanceWatcher(
-    const SocketPerformanceWatcherFactory::Protocol protocol,
-    SocketPerformanceWatcherFactory* socket_performance_watcher_factory)
-    : protocol_(protocol),
-      socket_performance_watcher_factory_(socket_performance_watcher_factory) {
-  DCHECK(socket_performance_watcher_factory_);
-
-  switch (protocol) {
-    case SocketPerformanceWatcherFactory::PROTOCOL_TCP:
-    case SocketPerformanceWatcherFactory::PROTOCOL_QUIC:
-      return;
-    default:
-      NOTREACHED();
-  }
-}
-
-SocketPerformanceWatcher::~SocketPerformanceWatcher() {}
-
-void SocketPerformanceWatcher::OnUpdatedRTTAvailable(
-    const base::TimeDelta& rtt) const {
-  socket_performance_watcher_factory_->OnUpdatedRTTAvailable(protocol_, rtt);
-}
-
-}  // namespace net
diff --git a/net/base/socket_performance_watcher.h b/net/base/socket_performance_watcher.h
index e0e7632..74413679 100644
--- a/net/base/socket_performance_watcher.h
+++ b/net/base/socket_performance_watcher.h
@@ -5,9 +5,7 @@
 #ifndef NET_BASE_SOCKET_PERFORMANCE_WATCHER_H_
 #define NET_BASE_SOCKET_PERFORMANCE_WATCHER_H_
 
-#include "base/macros.h"
 #include "net/base/net_export.h"
-#include "net/base/socket_performance_watcher_factory.h"
 
 namespace base {
 class TimeDelta;
@@ -16,32 +14,28 @@
 namespace net {
 
 // SocketPerformanceWatcher is the base class for recording and aggregating
-// socket statistics.
+// per-socket statistics. SocketPerformanceWatcher must be used on a single
+// thread.
 class NET_EXPORT_PRIVATE SocketPerformanceWatcher {
  public:
-  // |socket_performance_watcher_factory| is the factory that constructed
-  // |this| watcher.
-  SocketPerformanceWatcher(
-      const SocketPerformanceWatcherFactory::Protocol protocol,
-      SocketPerformanceWatcherFactory* socket_performance_watcher_factory);
+  virtual ~SocketPerformanceWatcher() {}
 
-  virtual ~SocketPerformanceWatcher();
+  // Returns true if |this| SocketPerformanceWatcher is interested in receiving
+  // an updated RTT estimate (via OnUpdatedRTTAvailable).
+  virtual bool ShouldNotifyUpdatedRTT() const = 0;
 
-  // Called when updated transport layer RTT information is available. This
-  // must be the transport layer RTT from this device to the remote transport
-  // layer endpoint. This method is called immediately after the observation is
-  // made, hence no timestamp.
-  void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) const;
+  // Notifies |this| SocketPerformanceWatcher of updated transport layer RTT
+  // from this device to the remote transport layer endpoint. This method is
+  // called immediately after the observation is made, hence no timestamp.
+  // There is no guarantee that OnUpdatedRTTAvailable will be called every time
+  // an updated RTT is available as the socket may throttle the
+  // OnUpdatedRTTAvailable call for various reasons, including performance.
+  virtual void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) = 0;
 
- private:
-  // Transport layer protocol used by the socket that |this| is watching.
-  const SocketPerformanceWatcherFactory::Protocol protocol_;
-
-  // |socket_performance_watcher_factory_| is the factory that created
-  // |this| watcher.
-  SocketPerformanceWatcherFactory* socket_performance_watcher_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(SocketPerformanceWatcher);
+  // Notifies that |this| watcher will be reused to watch a socket that belongs
+  // to a different transport layer connection. Note: The new connection shares
+  // the same protocol as the previously watched socket.
+  virtual void OnConnectionChanged() = 0;
 };
 
 }  // namespace net
diff --git a/net/base/socket_performance_watcher_factory.h b/net/base/socket_performance_watcher_factory.h
index cbd607ab..df54e59 100644
--- a/net/base/socket_performance_watcher_factory.h
+++ b/net/base/socket_performance_watcher_factory.h
@@ -9,10 +9,6 @@
 #include "base/memory/scoped_ptr.h"
 #include "net/base/net_export.h"
 
-namespace base {
-class TimeDelta;
-}  // namespace base
-
 namespace net {
 
 class SocketPerformanceWatcher;
@@ -34,14 +30,6 @@
   virtual scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
       const Protocol protocol) = 0;
 
-  // Called when updated transport layer RTT information is available from one
-  // of the watchers created by |this|. |protocol| is the protocol that was used
-  // by the watcher. |rtt| must be the transport layer RTT from this device to
-  // the remote transport layer endpoint. These methods are called immediately
-  // after the observation is made, hence no timestamp.
-  virtual void OnUpdatedRTTAvailable(const Protocol protocol,
-                                     const base::TimeDelta& rtt) = 0;
-
  protected:
   SocketPerformanceWatcherFactory() {}
 
diff --git a/net/cert/sth_distributor.cc b/net/cert/sth_distributor.cc
new file mode 100644
index 0000000..aa7d5c4
--- /dev/null
+++ b/net/cert/sth_distributor.cc
@@ -0,0 +1,32 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/cert/sth_distributor.h"
+
+#include "net/cert/signed_tree_head.h"
+
+namespace net {
+
+namespace ct {
+
+STHDistributor::STHDistributor()
+    : observer_list_(base::ObserverList<STHObserver>::NOTIFY_EXISTING_ONLY) {}
+
+STHDistributor::~STHDistributor() {}
+
+void STHDistributor::NewSTHObserved(const SignedTreeHead& sth) {
+  FOR_EACH_OBSERVER(STHObserver, observer_list_, NewSTHObserved(sth));
+}
+
+void STHDistributor::RegisterObserver(STHObserver* observer) {
+  observer_list_.AddObserver(observer);
+}
+
+void STHDistributor::UnregisterObserver(STHObserver* observer) {
+  observer_list_.RemoveObserver(observer);
+}
+
+}  // namespace ct
+
+}  // namespace net
diff --git a/net/cert/sth_distributor.h b/net/cert/sth_distributor.h
new file mode 100644
index 0000000..3d9691c
--- /dev/null
+++ b/net/cert/sth_distributor.h
@@ -0,0 +1,42 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_CERT_STH_DISTRIBUTOR_H_
+#define NET_CERT_STH_DISTRIBUTOR_H_
+
+#include "base/observer_list.h"
+#include "net/base/net_export.h"
+#include "net/cert/sth_observer.h"
+#include "net/cert/sth_reporter.h"
+
+namespace net {
+
+namespace ct {
+
+// A proxy for delegating new STH notifications to all registered
+// observers.
+// For each |observer| registered with RegisterObserver, the
+// NewSTHObserved method will be called whenever the STHDistributor's
+// NewSTHObserved method is invoked.
+class NET_EXPORT STHDistributor : public STHObserver, public STHReporter {
+ public:
+  STHDistributor();
+  ~STHDistributor() override;
+
+  // STHObserver implementation.
+  void NewSTHObserved(const SignedTreeHead& sth) override;
+
+  // STHReporter implementation
+  void RegisterObserver(STHObserver* observer) override;
+  void UnregisterObserver(STHObserver* observer) override;
+
+ private:
+  base::ObserverList<STHObserver> observer_list_;
+};
+
+}  // namespace ct
+
+}  // namespace net
+
+#endif  // NET_CERT_STH_DISTRIBUTOR_H_
diff --git a/net/cert/sth_observer.h b/net/cert/sth_observer.h
new file mode 100644
index 0000000..ad65a6b
--- /dev/null
+++ b/net/cert/sth_observer.h
@@ -0,0 +1,31 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_CERT_STH_OBSERVER_H_
+#define NET_CERT_STH_OBSERVER_H_
+
+#include <set>
+
+#include "net/base/net_export.h"
+
+namespace net {
+
+namespace ct {
+
+struct SignedTreeHead;
+
+// Interface for receiving notifications of new STHs observed.
+class NET_EXPORT STHObserver {
+ public:
+  virtual ~STHObserver() {}
+
+  // Called with a new |sth| when one is observed.
+  virtual void NewSTHObserved(const SignedTreeHead& sth) = 0;
+};
+
+}  // namespace ct
+
+}  // namespace net
+
+#endif  // NET_CERT_STH_OBSERVER_H_
diff --git a/net/cert/sth_reporter.h b/net/cert/sth_reporter.h
new file mode 100644
index 0000000..a62ad65
--- /dev/null
+++ b/net/cert/sth_reporter.h
@@ -0,0 +1,31 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_CERT_STH_REPORTER_H_
+#define NET_CERT_STH_REPORTER_H_
+
+#include <set>
+
+#include "net/base/net_export.h"
+
+namespace net {
+
+namespace ct {
+
+class STHObserver;
+
+// Interface for registering/unregistering observers.
+class NET_EXPORT STHReporter {
+ public:
+  virtual ~STHReporter() {}
+
+  virtual void RegisterObserver(STHObserver* observer) = 0;
+  virtual void UnregisterObserver(STHObserver* observer) = 0;
+};
+
+}  // namespace ct
+
+}  // namespace net
+
+#endif  // NET_CERT_STH_REPORTER_H_
diff --git a/net/docs/README.txt b/net/docs/README.txt
new file mode 100644
index 0000000..cf6c202
--- /dev/null
+++ b/net/docs/README.txt
@@ -0,0 +1,20 @@
+To generate the output HTML from an input markdown file on Unix
+machines, execute the command:
+
+  PYTHONPATH=../../third_party python -m markdown -f <output>.html  <input>.md 
+
+On Windows machines, execute:
+
+  set PYTHONPATH=..\..\third_party
+  python -m markdown -f <output>.html <input>.md
+
+(This command line assumes that the net/docs directory is the current
+directory; if that's not the case, adjust the path to src/third_party
+to be accurate from whatever directory the command is executed from.)
+
+The diagrams included in the network stack documentation were
+generated with Graphviz, and both source (.dot) and output (.svg) are
+included in the repository.  If graphviz is installed, the output may
+be regenerated from the source via:
+
+  dot dot -Tsvg <name>.dot > <name>.svg
diff --git a/net/docs/life-of-a-url-request.md b/net/docs/life-of-a-url-request.md
index 63f55f69..4de3567f 100644
--- a/net/docs/life-of-a-url-request.md
+++ b/net/docs/life-of-a-url-request.md
@@ -293,6 +293,24 @@
 socket pool, either for reuse or so the socket pool knows it has another free
 socket slot.
 
+### Object Relationships and Ownership
+
+A sample of the object relationships involved in the above process is
+diagramed here: 
+
+![Object Relationship Diagram for URLRequest lifetime](url_request.svg)
+
+There are a couple of points in the above diagram that do not come
+clear visually:
+
+* The method that generates the filter chain that is hung off the
+  URLRequestJob is declared on URLRequestJob, but the only current
+  implementation of it is on URLRequestHttpJob, so the generation is
+  shown as happening from that class.
+* HttpTransactions of different types are layered; i.e. a
+  HttpCache::Transaction contains a pointer to an HttpTransaction, but
+  that pointed-to HttpTransaction generally is an
+  HttpNetworkTransaction. 
 
 # Additional Topics
 
@@ -418,6 +436,33 @@
 instance, SSL and HTTP connections won't be grouped together in the
 TcpClientSocketPool, which the SSLClientSocketPool sits on top of.
 
+### Socket Pool Class Relationships
+
+The relationships between the important classes in the socket pools is
+shown diagrammatically for the lowest layer socket pool
+(TransportSocketPool) below. 
+
+![Object Relationship Diagram for Socket Pools](pools.svg)
+
+The ClientSocketPoolBase is a template class templatized on the class
+containing the parameters for the appropriate type of socket (in this
+case TransportSocketParams).  It contains a pointer to the
+ClientSocketPoolBaseHelper, which contains all the type-independent
+machinery of the socket pool.  
+
+When socket pools are initialized, they in turn initialize their
+templatized ClientSocketPoolBase member with an object with which it
+should create connect jobs.  That object must derive from
+ClientSocketPoolBase::ConnectJobFactory templatized by the same type
+as the ClientSocketPoolBase.  (In the case of the diagram above, that
+object is a TransportConnectJobFactory, which derives from
+ClientSocketPoolBase::ConnectJobFactory&lt;TransportSocketParams&gt;.)
+Internally, that object is wrapped in a type-unsafe wrapper
+(ClientSocketPoolBase::ConnectJobFactoryAdaptor) so that it can be
+passed to the initialization of the ClientSocketPoolBaseHelper.  This
+allows the helper to create connect jobs while preserving a type-safe
+API to the initialization of the socket pool.
+
 ### SSL
 
 When an SSL connection is needed, the ClientSocketPoolManager assembles the
diff --git a/net/docs/pools.dot b/net/docs/pools.dot
new file mode 100644
index 0000000..271d98d
--- /dev/null
+++ b/net/docs/pools.dot
@@ -0,0 +1,101 @@
+digraph SocketPools {
+    subgraph cluster_legend {
+	label="Legend";
+
+	## The following legend is an attempt to match UML notation,
+	## except for template_class and Factory->object, which are
+	## invented for this diagram.
+	BaseClass;
+	SubClass [label="Derived Class"];
+	Whole;
+	Part;
+	A;
+	B;
+	Interface [label="Interface / ABC", style=dashed];
+	template_class [shape=diamond]; # Link will name parameter(s)
+
+	SubClass -> BaseClass [arrowhead="empty"];
+	SubClass -> Interface [arrowhead="empty", style=dashed];
+	Part -> Whole [arrowhead="diamond", label="ownership"];
+	Part -> Whole [arrowhead="odiamond", label="pointer"];
+	RefCountedPart -> Whole [arrowhead="diamond", color=red,
+		                 label="partial\nownership"];
+	A -> B [arrowhead="none", headlabel="?..?", taillabel="?..?",
+		label="association"];
+	// Often a "subgraph { rank=same; .. }" is used to wrap the
+	// below to make the generative relationship distinctive
+	// from the other class relationships.
+	Factory -> object [arrowhead=veevee];
+    };
+
+    ClientSocketPoolBase [shape=diamond];
+    ClientSocketPoolBaseHelper;
+
+    ClientSocketPoolBaseHelper_ConnectJobFactory
+        [style=dotted, label="ClientSocketPoolBaseHelper::\nConnectJobFactory"];
+    ClientSocketPoolBase_ConnectJobFactory
+        [style=dotted, shape=diamond,
+	 label="ClientSocketPoolBase::\nConnectJobFactory"];
+    ClientSocketPoolBase_ConnectJobFactoryAdaptor
+        [shape=diamond,
+	 label="ClientSocketPoolBase::\nConnectJobFactoryAdaptor"];
+
+    HigherLayeredPool [style=dotted];
+    LowerLayeredPool [style=dotted];
+    ClientSocketPool [style=dotted];
+
+    ConnectJob [style=dashed];
+    ConnectJob_Delegate [style=dotted, label="ConnectJob::Delegate"];
+
+    ClientSocketFactory [style=dotted];
+    DefaultClientSocketFactory;
+    TCPClientSocket;
+    StreamSocket [style=dotted]
+    Socket;
+
+    TransportSocketParams;
+    TransportConnectJobHelper;
+    TransportConnectJobFactory;
+    TransportConnectJob;
+
+    TransportClientSocketPool -> ClientSocketPool [arrowhead=empty];
+    ClientSocketPool -> LowerLayeredPool [arrowhead=empty];
+    ClientSocketPoolBaseHelper -> ConnectJob_Delegate [arrowhead=empty];
+    TransportConnectJobFactory -> ClientSocketPoolBase_ConnectJobFactory
+        [arrowhead=empty, label="TransportSocketParams"];
+    ClientSocketPoolBase_ConnectJobFactoryAdaptor ->
+        ClientSocketPoolBaseHelper_ConnectJobFactory
+ 	    [arrowhead=empty, arrowtail=none];
+    TransportConnectJob -> ConnectJob [arrowhead=empty];
+    DefaultClientSocketFactory -> ClientSocketFactory [arrowhead=empty];
+    StreamSocket -> Socket [arrowhead=empty]
+    TCPClientSocket -> StreamSocket [arrowhead=empty]
+
+    ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
+    ClientSocketPoolBase -> TransportClientSocketPool
+        [arrowhead=diamond, label="TransportSocketParams"];
+    ClientSocketPoolBase_ConnectJobFactory ->
+        ClientSocketPoolBase_ConnectJobFactoryAdaptor [arrowhead=diamond];
+    ClientSocketPoolBaseHelper_ConnectJobFactory -> 
+        ClientSocketPoolBaseHelper [arrowhead=diamond];
+    TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];
+    TransportSocketParams -> TransportConnectJobHelper
+        [arrowhead=diamond, color=red];
+
+    ConnectJob -> ConnectJob_Delegate
+        [dir=back, arrowhead=none, arrowtail=odiamond];
+    HigherLayeredPool -> ClientSocketPoolBaseHelper
+        [arrowhead=odiamond, taillabel="*"];
+    LowerLayeredPool -> ClientSocketPoolBaseHelper
+        [arrowhead=odiamond, taillabel="*"];
+    ClientSocketFactory -> ClientSocketPoolBaseHelper [arrowhead=odiamond];
+
+    subgraph {
+        rank=same;
+        ClientSocketPoolBaseHelper_ConnectJobFactory -> ConnectJob
+            [arrowhead=veevee];
+    }
+    ClientSocketPoolBase_ConnectJobFactory -> ConnectJob [arrowhead=veevee];
+    ClientSocketFactory -> TCPClientSocket [arrowhead=veevee]
+}
+
diff --git a/net/docs/pools.svg b/net/docs/pools.svg
new file mode 100644
index 0000000..fb4efb6
--- /dev/null
+++ b/net/docs/pools.svg
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.34.0 (20130907.0228)
+ -->
+<!-- Title: SocketPools Pages: 1 -->
+<svg width="1612pt" height="653pt"
+ viewBox="0.00 0.00 1612.00 653.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 649)">
+<title>SocketPools</title>
+<polygon fill="white" stroke="white" points="-4,4 -4,-649 1608,-649 1608,4 -4,4"/>
+<g id="clust1" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="8,-440 8,-637 743,-637 743,-440 8,-440"/>
+<text text-anchor="middle" x="375.5" y="-621.8" font-family="Times,serif" font-size="14.00">Legend</text>
+</g>
+<!-- BaseClass -->
+<g id="node1" class="node"><title>BaseClass</title>
+<ellipse fill="none" stroke="black" cx="687" cy="-466" rx="48.1437" ry="18"/>
+<text text-anchor="middle" x="687" y="-462.3" font-family="Times,serif" font-size="14.00">BaseClass</text>
+</g>
+<!-- SubClass -->
+<g id="node2" class="node"><title>SubClass</title>
+<ellipse fill="none" stroke="black" cx="673" cy="-588" rx="61.6163" ry="18"/>
+<text text-anchor="middle" x="673" y="-584.3" font-family="Times,serif" font-size="14.00">Derived Class</text>
+</g>
+<!-- SubClass&#45;&gt;BaseClass -->
+<g id="edge1" class="edge"><title>SubClass&#45;&gt;BaseClass</title>
+<path fill="none" stroke="black" d="M675.006,-569.807C677.303,-550.114 681.099,-517.583 683.805,-494.39"/>
+<polygon fill="none" stroke="black" points="687.315,-494.499 684.998,-484.161 680.363,-493.688 687.315,-494.499"/>
+</g>
+<!-- Interface -->
+<g id="node7" class="node"><title>Interface</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="552" cy="-466" rx="68.3417" ry="18"/>
+<text text-anchor="middle" x="552" y="-462.3" font-family="Times,serif" font-size="14.00">Interface / ABC</text>
+</g>
+<!-- SubClass&#45;&gt;Interface -->
+<g id="edge2" class="edge"><title>SubClass&#45;&gt;Interface</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M656.175,-570.315C635.316,-549.627 599.623,-514.23 575.922,-490.724"/>
+<polygon fill="none" stroke="black" points="578.247,-488.1 568.682,-483.544 573.317,-493.071 578.247,-488.1"/>
+</g>
+<!-- Whole -->
+<g id="node3" class="node"><title>Whole</title>
+<ellipse fill="none" stroke="black" cx="430" cy="-466" rx="35.1455" ry="18"/>
+<text text-anchor="middle" x="430" y="-462.3" font-family="Times,serif" font-size="14.00">Whole</text>
+</g>
+<!-- Part -->
+<g id="node4" class="node"><title>Part</title>
+<ellipse fill="none" stroke="black" cx="409" cy="-588" rx="27" ry="18"/>
+<text text-anchor="middle" x="409" y="-584.3" font-family="Times,serif" font-size="14.00">Part</text>
+</g>
+<!-- Part&#45;&gt;Whole -->
+<g id="edge3" class="edge"><title>Part&#45;&gt;Whole</title>
+<path fill="none" stroke="black" d="M411.964,-570.061C415.322,-550.874 420.853,-519.267 424.906,-496.107"/>
+<polygon fill="black" stroke="black" points="424.914,-496.061 422.008,-489.462 426.983,-484.241 429.889,-490.841 424.914,-496.061"/>
+<text text-anchor="middle" x="450.5" y="-533.3" font-family="Times,serif" font-size="14.00">ownership</text>
+</g>
+<!-- Part&#45;&gt;Whole -->
+<g id="edge4" class="edge"><title>Part&#45;&gt;Whole</title>
+<path fill="none" stroke="black" d="M390.377,-574.55C383.219,-568.652 375.847,-560.934 372,-552 366.727,-539.754 366.735,-534.25 372,-522 377.706,-508.725 388.366,-497.15 399.005,-488.088"/>
+<polygon fill="none" stroke="black" points="399.207,-487.929 401.44,-481.072 408.628,-480.496 406.395,-487.353 399.207,-487.929"/>
+<text text-anchor="middle" x="392" y="-533.3" font-family="Times,serif" font-size="14.00">pointer</text>
+</g>
+<!-- A -->
+<g id="node5" class="node"><title>A</title>
+<ellipse fill="none" stroke="black" cx="137" cy="-588" rx="27" ry="18"/>
+<text text-anchor="middle" x="137" y="-584.3" font-family="Times,serif" font-size="14.00">A</text>
+</g>
+<!-- B -->
+<g id="node6" class="node"><title>B</title>
+<ellipse fill="none" stroke="black" cx="137" cy="-466" rx="27" ry="18"/>
+<text text-anchor="middle" x="137" y="-462.3" font-family="Times,serif" font-size="14.00">B</text>
+</g>
+<!-- A&#45;&gt;B -->
+<g id="edge6" class="edge"><title>A&#45;&gt;B</title>
+<path fill="none" stroke="black" d="M137,-569.807C137,-548.599 137,-512.502 137,-489.213"/>
+<polyline fill="none" stroke="black" points="137,-484.161 137,-489.161 "/>
+<text text-anchor="middle" x="168.5" y="-533.3" font-family="Times,serif" font-size="14.00">association</text>
+<text text-anchor="middle" x="127" y="-487.961" font-family="Times,serif" font-size="14.00">?..?</text>
+<text text-anchor="middle" x="127" y="-558.607" font-family="Times,serif" font-size="14.00">?..?</text>
+</g>
+<!-- template_class -->
+<g id="node8" class="node"><title>template_class</title>
+<polygon fill="none" stroke="black" points="273,-606 182.505,-588 273,-570 363.495,-588 273,-606"/>
+<text text-anchor="middle" x="273" y="-584.3" font-family="Times,serif" font-size="14.00">template_class</text>
+</g>
+<!-- RefCountedPart -->
+<g id="node9" class="node"><title>RefCountedPart</title>
+<ellipse fill="none" stroke="black" cx="524" cy="-588" rx="69.3156" ry="18"/>
+<text text-anchor="middle" x="524" y="-584.3" font-family="Times,serif" font-size="14.00">RefCountedPart</text>
+</g>
+<!-- RefCountedPart&#45;&gt;Whole -->
+<g id="edge5" class="edge"><title>RefCountedPart&#45;&gt;Whole</title>
+<path fill="none" stroke="red" d="M514.948,-570.026C507.41,-556.495 496.003,-537.34 484,-522 475.376,-510.979 464.787,-499.783 455.277,-490.396"/>
+<polygon fill="red" stroke="red" points="455.225,-490.346 448.13,-489.058 446.589,-482.014 453.684,-483.301 455.225,-490.346"/>
+<text text-anchor="middle" x="534.5" y="-540.8" font-family="Times,serif" font-size="14.00">partial</text>
+<text text-anchor="middle" x="534.5" y="-525.8" font-family="Times,serif" font-size="14.00">ownership</text>
+</g>
+<!-- Factory -->
+<g id="node10" class="node"><title>Factory</title>
+<ellipse fill="none" stroke="black" cx="54" cy="-588" rx="38.0212" ry="18"/>
+<text text-anchor="middle" x="54" y="-584.3" font-family="Times,serif" font-size="14.00">Factory</text>
+</g>
+<!-- object -->
+<g id="node11" class="node"><title>object</title>
+<ellipse fill="none" stroke="black" cx="54" cy="-466" rx="33.2209" ry="18"/>
+<text text-anchor="middle" x="54" y="-462.3" font-family="Times,serif" font-size="14.00">object</text>
+</g>
+<!-- Factory&#45;&gt;object -->
+<g id="edge7" class="edge"><title>Factory&#45;&gt;object</title>
+<path fill="none" stroke="black" d="M54,-569.807C54,-552.787 54,-526.178 54,-504.296"/>
+<polygon fill="black" stroke="black" points="54,-484.161 58.5,-494.161 54,-489.161 54,-494.161 54,-494.161 54,-494.161 54,-489.161 49.5,-494.161 54,-484.161 54,-484.161"/>
+<polygon fill="black" stroke="black" points="54,-494.161 58.5001,-504.161 54.0001,-499.161 54.0001,-504.161 54.0001,-504.161 54.0001,-504.161 54.0001,-499.161 49.5001,-504.161 54,-494.161 54,-494.161"/>
+</g>
+<!-- ClientSocketPoolBase -->
+<g id="node12" class="node"><title>ClientSocketPoolBase</title>
+<polygon fill="none" stroke="black" points="888,-606 757.72,-588 888,-570 1018.28,-588 888,-606"/>
+<text text-anchor="middle" x="888" y="-584.3" font-family="Times,serif" font-size="14.00">ClientSocketPoolBase</text>
+</g>
+<!-- TransportClientSocketPool -->
+<g id="node31" class="node"><title>TransportClientSocketPool</title>
+<ellipse fill="none" stroke="black" cx="901" cy="-466" rx="109.261" ry="18"/>
+<text text-anchor="middle" x="901" y="-462.3" font-family="Times,serif" font-size="14.00">TransportClientSocketPool</text>
+</g>
+<!-- ClientSocketPoolBase&#45;&gt;TransportClientSocketPool -->
+<g id="edge18" class="edge"><title>ClientSocketPoolBase&#45;&gt;TransportClientSocketPool</title>
+<path fill="none" stroke="black" d="M889.835,-570.061C891.904,-550.962 895.306,-519.56 897.812,-496.429"/>
+<polygon fill="black" stroke="black" points="897.84,-496.171 894.509,-489.775 899.132,-484.241 902.463,-490.637 897.84,-496.171"/>
+<text text-anchor="middle" x="961" y="-533.3" font-family="Times,serif" font-size="14.00">TransportSocketParams</text>
+</g>
+<!-- ClientSocketPoolBaseHelper -->
+<g id="node13" class="node"><title>ClientSocketPoolBaseHelper</title>
+<ellipse fill="none" stroke="black" cx="930" cy="-166" rx="116.484" ry="18"/>
+<text text-anchor="middle" x="930" y="-162.3" font-family="Times,serif" font-size="14.00">ClientSocketPoolBaseHelper</text>
+</g>
+<!-- ClientSocketPoolBaseHelper&#45;&gt;ClientSocketPoolBase -->
+<g id="edge17" class="edge"><title>ClientSocketPoolBaseHelper&#45;&gt;ClientSocketPoolBase</title>
+<path fill="none" stroke="black" d="M841.61,-177.778C801.552,-188.118 763,-208.365 763,-248 763,-467 763,-467 763,-467 763,-514.437 810.427,-548.965 846.854,-568.488"/>
+<polygon fill="black" stroke="black" points="847.06,-568.593 854.224,-567.768 857.741,-574.063 850.577,-574.888 847.06,-568.593"/>
+</g>
+<!-- ConnectJob_Delegate -->
+<g id="node21" class="node"><title>ConnectJob_Delegate</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="1,5" cx="1302" cy="-92" rx="90.4879" ry="18"/>
+<text text-anchor="middle" x="1302" y="-88.3" font-family="Times,serif" font-size="14.00">ConnectJob::Delegate</text>
+</g>
+<!-- ClientSocketPoolBaseHelper&#45;&gt;ConnectJob_Delegate -->
+<g id="edge10" class="edge"><title>ClientSocketPoolBaseHelper&#45;&gt;ConnectJob_Delegate</title>
+<path fill="none" stroke="black" d="M999.534,-151.542C1065.14,-138.843 1163.1,-119.884 1229.62,-107.008"/>
+<polygon fill="none" stroke="black" points="1230.46,-110.412 1239.61,-105.075 1229.13,-103.539 1230.46,-110.412"/>
+</g>
+<!-- ClientSocketPoolBaseHelper_ConnectJobFactory -->
+<g id="node14" class="node"><title>ClientSocketPoolBaseHelper_ConnectJobFactory</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="1,5" cx="1104" cy="-249" rx="132.404" ry="26.7407"/>
+<text text-anchor="middle" x="1104" y="-252.8" font-family="Times,serif" font-size="14.00">ClientSocketPoolBaseHelper::</text>
+<text text-anchor="middle" x="1104" y="-237.8" font-family="Times,serif" font-size="14.00">ConnectJobFactory</text>
+</g>
+<!-- ClientSocketPoolBaseHelper_ConnectJobFactory&#45;&gt;ClientSocketPoolBaseHelper -->
+<g id="edge20" class="edge"><title>ClientSocketPoolBaseHelper_ConnectJobFactory&#45;&gt;ClientSocketPoolBaseHelper</title>
+<path fill="none" stroke="black" d="M1052.74,-224.135C1028.44,-212.826 999.648,-199.422 976.057,-188.44"/>
+<polygon fill="black" stroke="black" points="975.816,-188.328 968.688,-189.422 964.937,-183.264 972.064,-182.17 975.816,-188.328"/>
+</g>
+<!-- ConnectJob -->
+<g id="node20" class="node"><title>ConnectJob</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="1491" cy="-249" rx="53.4184" ry="18"/>
+<text text-anchor="middle" x="1491" y="-245.3" font-family="Times,serif" font-size="14.00">ConnectJob</text>
+</g>
+<!-- ClientSocketPoolBaseHelper_ConnectJobFactory&#45;&gt;ConnectJob -->
+<g id="edge27" class="edge"><title>ClientSocketPoolBaseHelper_ConnectJobFactory&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" d="M1164.57,-272.905C1228.79,-294.786 1332.66,-320.226 1419,-295 1431.5,-291.349 1443.89,-284.795 1454.78,-277.757"/>
+<polygon fill="black" stroke="black" points="1471.44,-265.884 1465.9,-275.352 1467.36,-268.786 1463.29,-271.687 1463.29,-271.687 1463.29,-271.687 1467.36,-268.786 1460.68,-268.023 1471.44,-265.884 1471.44,-265.884"/>
+<polygon fill="black" stroke="black" points="1463.29,-271.687 1457.76,-281.156 1459.22,-274.589 1455.15,-277.491 1455.15,-277.491 1455.15,-277.491 1459.22,-274.589 1452.54,-273.827 1463.29,-271.687 1463.29,-271.687"/>
+</g>
+<!-- ClientSocketPoolBase_ConnectJobFactory -->
+<g id="node15" class="node"><title>ClientSocketPoolBase_ConnectJobFactory</title>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="1194,-504 1045,-466 1194,-428 1343,-466 1194,-504"/>
+<text text-anchor="middle" x="1194" y="-469.8" font-family="Times,serif" font-size="14.00">ClientSocketPoolBase::</text>
+<text text-anchor="middle" x="1194" y="-454.8" font-family="Times,serif" font-size="14.00">ConnectJobFactory</text>
+</g>
+<!-- ClientSocketPoolBase_ConnectJobFactoryAdaptor -->
+<g id="node16" class="node"><title>ClientSocketPoolBase_ConnectJobFactoryAdaptor</title>
+<polygon fill="none" stroke="black" points="1146,-390 975,-352 1146,-314 1317,-352 1146,-390"/>
+<text text-anchor="middle" x="1146" y="-355.8" font-family="Times,serif" font-size="14.00">ClientSocketPoolBase::</text>
+<text text-anchor="middle" x="1146" y="-340.8" font-family="Times,serif" font-size="14.00">ConnectJobFactoryAdaptor</text>
+</g>
+<!-- ClientSocketPoolBase_ConnectJobFactory&#45;&gt;ClientSocketPoolBase_ConnectJobFactoryAdaptor -->
+<g id="edge19" class="edge"><title>ClientSocketPoolBase_ConnectJobFactory&#45;&gt;ClientSocketPoolBase_ConnectJobFactoryAdaptor</title>
+<path fill="none" stroke="black" d="M1179.6,-431.396C1175.13,-420.971 1170.13,-409.306 1165.38,-398.226"/>
+<polygon fill="black" stroke="black" points="1165.28,-397.997 1159.24,-394.058 1160.56,-386.967 1166.6,-390.906 1165.28,-397.997"/>
+</g>
+<!-- ClientSocketPoolBase_ConnectJobFactory&#45;&gt;ConnectJob -->
+<g id="edge28" class="edge"><title>ClientSocketPoolBase_ConnectJobFactory&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" d="M1245.4,-440.879C1270.92,-427.675 1301.46,-409.949 1326,-390 1360.94,-361.599 1358.95,-343.467 1393,-314 1409.54,-299.689 1429.49,-286.1 1447.06,-275.155"/>
+<polygon fill="black" stroke="black" points="1464.27,-264.787 1458.03,-273.802 1459.99,-267.368 1455.7,-269.948 1455.7,-269.948 1455.7,-269.948 1459.99,-267.368 1453.38,-266.093 1464.27,-264.787 1464.27,-264.787"/>
+<polygon fill="black" stroke="black" points="1455.7,-269.948 1449.46,-278.963 1451.42,-272.528 1447.14,-275.108 1447.14,-275.108 1447.14,-275.108 1451.42,-272.528 1444.82,-271.254 1455.7,-269.948 1455.7,-269.948"/>
+</g>
+<!-- ClientSocketPoolBase_ConnectJobFactoryAdaptor&#45;&gt;ClientSocketPoolBaseHelper_ConnectJobFactory -->
+<g id="edge12" class="edge"><title>ClientSocketPoolBase_ConnectJobFactoryAdaptor&#45;&gt;ClientSocketPoolBaseHelper_ConnectJobFactory</title>
+<path fill="none" stroke="black" d="M1131.9,-317.087C1127.67,-306.925 1123.03,-295.755 1118.76,-285.494"/>
+<polygon fill="none" stroke="black" points="1121.88,-283.886 1114.81,-275.997 1115.42,-286.574 1121.88,-283.886"/>
+</g>
+<!-- HigherLayeredPool -->
+<g id="node17" class="node"><title>HigherLayeredPool</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="1,5" cx="1337" cy="-249" rx="82.3139" ry="18"/>
+<text text-anchor="middle" x="1337" y="-245.3" font-family="Times,serif" font-size="14.00">HigherLayeredPool</text>
+</g>
+<!-- HigherLayeredPool&#45;&gt;ClientSocketPoolBaseHelper -->
+<g id="edge24" class="edge"><title>HigherLayeredPool&#45;&gt;ClientSocketPoolBaseHelper</title>
+<path fill="none" stroke="black" d="M1290.91,-233.974C1276.31,-229.8 1260.05,-225.431 1245,-222 1171.14,-205.162 1086.52,-190.648 1023.6,-180.764"/>
+<polygon fill="none" stroke="black" points="1023.57,-180.759 1017.02,-183.788 1011.71,-178.911 1018.26,-175.883 1023.57,-180.759"/>
+<text text-anchor="middle" x="1286.91" y="-222.774" font-family="Times,serif" font-size="14.00">*</text>
+</g>
+<!-- LowerLayeredPool -->
+<g id="node18" class="node"><title>LowerLayeredPool</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="1,5" cx="872" cy="-249" rx="81.3646" ry="18"/>
+<text text-anchor="middle" x="872" y="-245.3" font-family="Times,serif" font-size="14.00">LowerLayeredPool</text>
+</g>
+<!-- LowerLayeredPool&#45;&gt;ClientSocketPoolBaseHelper -->
+<g id="edge25" class="edge"><title>LowerLayeredPool&#45;&gt;ClientSocketPoolBaseHelper</title>
+<path fill="none" stroke="black" d="M884.3,-230.822C891.913,-220.19 901.855,-206.306 910.521,-194.204"/>
+<polygon fill="none" stroke="black" points="910.731,-193.91 910.972,-186.703 917.717,-184.153 917.477,-191.36 910.731,-193.91"/>
+<text text-anchor="middle" x="880.3" y="-219.622" font-family="Times,serif" font-size="14.00">*</text>
+</g>
+<!-- ClientSocketPool -->
+<g id="node19" class="node"><title>ClientSocketPool</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="1,5" cx="879" cy="-352" rx="74.6146" ry="18"/>
+<text text-anchor="middle" x="879" y="-348.3" font-family="Times,serif" font-size="14.00">ClientSocketPool</text>
+</g>
+<!-- ClientSocketPool&#45;&gt;LowerLayeredPool -->
+<g id="edge9" class="edge"><title>ClientSocketPool&#45;&gt;LowerLayeredPool</title>
+<path fill="none" stroke="black" d="M877.813,-333.867C876.742,-318.414 875.148,-295.416 873.9,-277.409"/>
+<polygon fill="none" stroke="black" points="877.376,-276.951 873.193,-267.217 870.393,-277.435 877.376,-276.951"/>
+</g>
+<!-- ConnectJob&#45;&gt;ConnectJob_Delegate -->
+<g id="edge23" class="edge"><title>ConnectJob&#45;&gt;ConnectJob_Delegate</title>
+<path fill="none" stroke="black" d="M1461.84,-224.089C1423.16,-192.362 1355.84,-137.158 1322.26,-109.618"/>
+<polygon fill="none" stroke="black" points="1462.21,-224.387 1469.38,-225.098 1471.49,-231.996 1464.31,-231.284 1462.21,-224.387"/>
+</g>
+<!-- ClientSocketFactory -->
+<g id="node22" class="node"><title>ClientSocketFactory</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="1,5" cx="636" cy="-249" rx="85.19" ry="18"/>
+<text text-anchor="middle" x="636" y="-245.3" font-family="Times,serif" font-size="14.00">ClientSocketFactory</text>
+</g>
+<!-- ClientSocketFactory&#45;&gt;ClientSocketPoolBaseHelper -->
+<g id="edge26" class="edge"><title>ClientSocketFactory&#45;&gt;ClientSocketPoolBaseHelper</title>
+<path fill="none" stroke="black" d="M669.499,-232.343C691.664,-222.491 721.59,-210.144 749,-202 777.322,-193.585 808.753,-186.688 837.369,-181.308"/>
+<polygon fill="none" stroke="black" points="837.64,-181.259 842.821,-176.243 849.444,-179.096 844.263,-184.112 837.64,-181.259"/>
+</g>
+<!-- TCPClientSocket -->
+<g id="node24" class="node"><title>TCPClientSocket</title>
+<ellipse fill="none" stroke="black" cx="636" cy="-166" rx="74.6146" ry="18"/>
+<text text-anchor="middle" x="636" y="-162.3" font-family="Times,serif" font-size="14.00">TCPClientSocket</text>
+</g>
+<!-- ClientSocketFactory&#45;&gt;TCPClientSocket -->
+<g id="edge29" class="edge"><title>ClientSocketFactory&#45;&gt;TCPClientSocket</title>
+<path fill="none" stroke="black" d="M636,-230.822C636,-223.09 636,-213.637 636,-204.401"/>
+<polygon fill="black" stroke="black" points="636,-184.153 640.5,-194.153 636,-189.153 636,-194.153 636,-194.153 636,-194.153 636,-189.153 631.5,-194.153 636,-184.153 636,-184.153"/>
+<polygon fill="black" stroke="black" points="636,-194.153 640.5,-204.153 636,-199.153 636,-204.153 636,-204.153 636,-204.153 636,-199.153 631.5,-204.153 636,-194.153 636,-194.153"/>
+</g>
+<!-- DefaultClientSocketFactory -->
+<g id="node23" class="node"><title>DefaultClientSocketFactory</title>
+<ellipse fill="none" stroke="black" cx="622" cy="-352" rx="113.135" ry="18"/>
+<text text-anchor="middle" x="622" y="-348.3" font-family="Times,serif" font-size="14.00">DefaultClientSocketFactory</text>
+</g>
+<!-- DefaultClientSocketFactory&#45;&gt;ClientSocketFactory -->
+<g id="edge14" class="edge"><title>DefaultClientSocketFactory&#45;&gt;ClientSocketFactory</title>
+<path fill="none" stroke="black" d="M624.375,-333.867C626.527,-318.341 629.735,-295.2 632.236,-277.156"/>
+<polygon fill="none" stroke="black" points="635.707,-277.603 633.613,-267.217 628.773,-276.642 635.707,-277.603"/>
+</g>
+<!-- StreamSocket -->
+<g id="node25" class="node"><title>StreamSocket</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="1,5" cx="636" cy="-92" rx="61.1419" ry="18"/>
+<text text-anchor="middle" x="636" y="-88.3" font-family="Times,serif" font-size="14.00">StreamSocket</text>
+</g>
+<!-- TCPClientSocket&#45;&gt;StreamSocket -->
+<g id="edge16" class="edge"><title>TCPClientSocket&#45;&gt;StreamSocket</title>
+<path fill="none" stroke="black" d="M636,-147.937C636,-139.807 636,-129.876 636,-120.705"/>
+<polygon fill="none" stroke="black" points="639.5,-120.441 636,-110.441 632.5,-120.441 639.5,-120.441"/>
+</g>
+<!-- Socket -->
+<g id="node26" class="node"><title>Socket</title>
+<ellipse fill="none" stroke="black" cx="636" cy="-18" rx="35.6194" ry="18"/>
+<text text-anchor="middle" x="636" y="-14.3" font-family="Times,serif" font-size="14.00">Socket</text>
+</g>
+<!-- StreamSocket&#45;&gt;Socket -->
+<g id="edge15" class="edge"><title>StreamSocket&#45;&gt;Socket</title>
+<path fill="none" stroke="black" d="M636,-73.937C636,-65.8072 636,-55.8761 636,-46.7047"/>
+<polygon fill="none" stroke="black" points="639.5,-46.4406 636,-36.4407 632.5,-46.4407 639.5,-46.4406"/>
+</g>
+<!-- TransportSocketParams -->
+<g id="node27" class="node"><title>TransportSocketParams</title>
+<ellipse fill="none" stroke="black" cx="1491" cy="-588" rx="97.237" ry="18"/>
+<text text-anchor="middle" x="1491" y="-584.3" font-family="Times,serif" font-size="14.00">TransportSocketParams</text>
+</g>
+<!-- TransportConnectJobHelper -->
+<g id="node28" class="node"><title>TransportConnectJobHelper</title>
+<ellipse fill="none" stroke="black" cx="1491" cy="-466" rx="113.61" ry="18"/>
+<text text-anchor="middle" x="1491" y="-462.3" font-family="Times,serif" font-size="14.00">TransportConnectJobHelper</text>
+</g>
+<!-- TransportSocketParams&#45;&gt;TransportConnectJobHelper -->
+<g id="edge22" class="edge"><title>TransportSocketParams&#45;&gt;TransportConnectJobHelper</title>
+<path fill="none" stroke="red" d="M1491,-569.807C1491,-550.648 1491,-519.34 1491,-496.299"/>
+<polygon fill="red" stroke="red" points="1491,-496.161 1487,-490.161 1491,-484.161 1495,-490.161 1491,-496.161"/>
+</g>
+<!-- TransportConnectJob -->
+<g id="node30" class="node"><title>TransportConnectJob</title>
+<ellipse fill="none" stroke="black" cx="1491" cy="-352" rx="89.0632" ry="18"/>
+<text text-anchor="middle" x="1491" y="-348.3" font-family="Times,serif" font-size="14.00">TransportConnectJob</text>
+</g>
+<!-- TransportConnectJobHelper&#45;&gt;TransportConnectJob -->
+<g id="edge21" class="edge"><title>TransportConnectJobHelper&#45;&gt;TransportConnectJob</title>
+<path fill="none" stroke="black" d="M1491,-447.99C1491,-430.557 1491,-403.116 1491,-382.202"/>
+<polygon fill="black" stroke="black" points="1491,-382.17 1487,-376.171 1491,-370.17 1495,-376.17 1491,-382.17"/>
+</g>
+<!-- TransportConnectJobFactory -->
+<g id="node29" class="node"><title>TransportConnectJobFactory</title>
+<ellipse fill="none" stroke="black" cx="1194" cy="-588" rx="116.484" ry="18"/>
+<text text-anchor="middle" x="1194" y="-584.3" font-family="Times,serif" font-size="14.00">TransportConnectJobFactory</text>
+</g>
+<!-- TransportConnectJobFactory&#45;&gt;ClientSocketPoolBase_ConnectJobFactory -->
+<g id="edge11" class="edge"><title>TransportConnectJobFactory&#45;&gt;ClientSocketPoolBase_ConnectJobFactory</title>
+<path fill="none" stroke="black" d="M1194,-569.807C1194,-555.293 1194,-533.805 1194,-514.222"/>
+<polygon fill="none" stroke="black" points="1197.5,-514.202 1194,-504.202 1190.5,-514.202 1197.5,-514.202"/>
+<text text-anchor="middle" x="1261" y="-533.3" font-family="Times,serif" font-size="14.00">TransportSocketParams</text>
+</g>
+<!-- TransportConnectJob&#45;&gt;ConnectJob -->
+<g id="edge13" class="edge"><title>TransportConnectJob&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" d="M1491,-333.867C1491,-318.414 1491,-295.416 1491,-277.409"/>
+<polygon fill="none" stroke="black" points="1494.5,-277.217 1491,-267.217 1487.5,-277.217 1494.5,-277.217"/>
+</g>
+<!-- TransportClientSocketPool&#45;&gt;ClientSocketPool -->
+<g id="edge8" class="edge"><title>TransportClientSocketPool&#45;&gt;ClientSocketPool</title>
+<path fill="none" stroke="black" d="M897.659,-447.99C894.121,-429.981 888.486,-401.293 884.333,-380.152"/>
+<polygon fill="none" stroke="black" points="887.735,-379.308 882.373,-370.17 880.866,-380.658 887.735,-379.308"/>
+</g>
+</g>
+</svg>
diff --git a/net/docs/url_request.dot b/net/docs/url_request.dot
new file mode 100644
index 0000000..2203934
--- /dev/null
+++ b/net/docs/url_request.dot
@@ -0,0 +1,186 @@
+digraph URLRequestRoot {
+    subgraph cluster_legend {
+	label="Legend";
+
+	## The following legend is an attempt to match UML notation,
+	## except for template_class and Factory->object, which are
+	## invented for this diagram.
+	BaseClass;
+	SubClass [label="Derived Class"];
+	Whole;
+	Part;
+	A;
+	B;
+	Interface [label="Interface / ABC", style=dashed];
+	template_class [shape=diamond]; # Link will name parameter(s)
+
+	SubClass -> BaseClass [arrowhead="empty"];
+	SubClass -> Interface [arrowhead="empty", style=dashed];
+	Part -> Whole [arrowhead="diamond", label="ownership"];
+	Part -> Whole [arrowhead="odiamond", label="pointer"];
+	A -> B [arrowhead="none", headlabel="?..?", taillabel="?..?",
+		label="association"];
+	// Often a "subgraph { rank=same; .. }" is used to wrap the
+	// below to make the generative relationship distinctive
+	// from the other class relationships.
+	Factory -> object [arrowhead=veevee];
+    };
+
+    ## URLRequest, URLRequestJob, and subclasses
+    URLRequestContext;
+    URLRequest;
+    URLRequestJob [style=dashed];
+    URLRequestJob_Others [label="...other job types..."];
+    URLRequestHttpJob;
+    Filter;
+
+    {URLRequestHttpJob, URLRequestJob_Others} -> URLRequestJob
+	[arrowhead="empty"];
+
+    URLRequestJob -> URLRequest [arrowhead="diamond"];
+    Filter -> URLRequestJob [arrowhead="diamond"];
+    Filter -> Filter [arrowhead="diamond", taillabel="0..1"];
+
+    subgraph {
+	rank=same;
+	URLRequestContext -> URLRequest [arrowhead=veevee];
+    }
+    subgraph {
+	rank=same;
+	URLRequestHttpJob -> Filter [arrowhead=veevee];
+    }
+
+
+    ## HttpTransaction, subclasses, and generative classes.
+    HttpTransactionFactory;
+    HttpCache;
+    HttpNetworkLayer;
+    HttpTransaction [style=dashed];
+    HttpCache_Transaction [label="HttpCache::Transaction"];
+    HttpNetworkTransaction;
+
+    { HttpNetworkTransaction, HttpCache_Transaction } -> HttpTransaction
+	[style=dashed, arrowhead="empty"];
+    { HttpNetworkLayer, HttpCache } -> HttpTransactionFactory
+	[arrowhead=empty, style=dashed];
+
+    HttpTransaction -> HttpCache_Transaction  [arrowhead=diamond];
+    HttpTransaction -> URLRequestHttpJob [arrowhead="diamond"]
+
+    subgraph {
+	rank=same;
+	HttpCache -> HttpCache_Transaction [arrowhead=veevee];
+    }
+    subgraph {
+	rank=same;
+	HttpTransactionFactory -> HttpTransaction [arrowhead=veevee];
+    }
+    subgraph {
+	rank=same;
+	HttpNetworkLayer -> HttpNetworkTransaction [arrowhead=veevee];
+    }
+
+    ## HttpStreamFactory and related.
+    HttpStreamFactoryImpl;
+    HttpStreamRequest [style=dashed];
+    HttpStream [style=dashed];
+    HttpStreamFactoryImpl_Request [label="HttpStreamFactoryImpl::Request"];
+    HttpStreamFactoryImpl_Job [label="HttpStreamFactoryImpl::Job"];
+    HttpStreamRequest_Delegate
+	[label="HttpStreamRequest::Delegate",style=dashed];
+    HttpBasicStream;
+    QuicHttpStream;
+    SpdyHttpStream;
+    HttpBasicState;
+
+    HttpNetworkTransaction -> HttpStreamRequest_Delegate
+	[style=dashed, arrowhead="empty"];
+    HttpStreamFactoryImpl_Request -> HttpStreamRequest
+	[style=dashed, arrowhead="empty"];
+    { HttpBasicStream, QuicHttpStream, SpdyHttpStream } -> HttpStream
+	[style=dashed, arrowhead="empty"];
+
+    HttpStreamRequest -> HttpNetworkTransaction [arrowhead="diamond"];
+    HttpStream -> HttpNetworkTransaction [arrowhead="diamond"];
+    HttpBasicState -> HttpBasicStream [arrowhead=diamond];
+    HttpStreamFactoryImpl_Job -> HttpStreamFactoryImpl_Request
+	[arrowhead="diamond",taillabel="1..*"];
+
+    HttpStreamRequest_Delegate -> HttpStreamFactoryImpl_Request
+        [arrowhead=odiamond];
+    HttpStreamFactoryImpl_Job -> HttpStreamFactoryImpl_Job
+        [arrowhead=odiamond, label="blocking_job_\nwaiting_job_"];
+
+    subgraph {
+	rank=same;
+	HttpStreamFactoryImpl -> HttpStreamRequest [arrowhead=veevee];
+    }
+    subgraph {
+	rank=same;
+	HttpStreamRequest -> HttpStream [arrowhead=veevee];
+    }
+
+    ## ClientSocketHandle and socket pools.
+    ClientSocketPool [style=dashed];
+    TransportClientSocketPool;
+    SSLClientSocketPool;
+    ClientSocketPool_Others [label="...others..."];
+    ClientSocketPoolBase [label="ClientSocketPoolBase", shape=diamond];
+    ClientSocketPoolBaseHelper;
+
+    ConnectJobFactory;
+    ConnectJob [style=dashed];
+    TransportConnectJob;
+    SSLConnectJob;
+    ConnectJob_Others [label="...other connect job types..."];
+    ConnectJob_Delegate [label="ConnectJob::Delegate",style=dashed];
+
+    StreamSocket [style=dashed];
+    TCPClientSocket;
+    StreamSocket_Others [label="...other socket types..."];
+
+    TransportConnectJobHelper;
+    SingleRequestHostResolver;
+
+    { SSLClientSocketPool, TransportClientSocketPool,
+      ClientSocketPool_Others} -> ClientSocketPool
+	[style=dashed, arrowhead=empty];
+    ClientSocketPoolBaseHelper -> ConnectJob_Delegate
+	[arrowhead=empty, style=dashed];
+    StreamSocket -> Socket [arrowhead=empty, style=dashed];
+    { TCPClientSocket, StreamSocket_Others } -> StreamSocket
+	[arrowhead=empty, style=dashed];
+    {SSLConnectJob, TransportConnectJob, ConnectJob_Others} -> ConnectJob
+	[style=dashed, arrowhead=empty];
+
+    ClientSocketHandle -> HttpStreamFactoryImpl_Job [arrowhead="diamond"];
+    ClientSocketHandle -> HttpBasicState [arrowhead="diamond"];
+    ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
+    ClientSocketPoolBase -> TransportClientSocketPool
+	[arrowhead=diamond, label=TransportSocketParams];
+    ClientSocketPoolBase -> SSLClientSocketPool
+	[arrowhead=diamond, label=SSLSocketParams];
+
+    StreamSocket -> ClientSocketHandle [arrowhead=diamond];
+    ConnectJobFactory -> ClientSocketPoolBase [arrowhead=diamond];
+    StreamSocket -> ConnectJob [arrowhead=diamond];
+    SingleRequestHostResolver -> TransportConnectJobHelper
+	[arrowhead=diamond];
+    TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];
+
+    ClientSocketPool -> ClientSocketHandle  [arrowhead=odiamond];
+    ConnectJob_Delegate -> ConnectJob  [arrowhead=odiamond];
+
+    subgraph {
+	rank=same;
+	ConnectJobFactory -> ConnectJob [arrowhead=veevee];
+    }
+    subgraph {
+	rank=same;
+	HttpStreamFactoryImpl_Job -> ClientSocketHandle [arrowhead=veevee];
+    }
+    subgraph {
+        rank=same;
+	TransportConnectJob -> StreamSocket [arrowhead=veevee];
+    }
+}
diff --git a/net/docs/url_request.svg b/net/docs/url_request.svg
new file mode 100644
index 0000000..6bd00e7
--- /dev/null
+++ b/net/docs/url_request.svg
@@ -0,0 +1,594 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.34.0 (20130907.0228)
+ -->
+<!-- Title: URLRequestRoot Pages: 1 -->
+<svg width="1788pt" height="925pt"
+ viewBox="0.00 0.00 1788.00 925.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 921)">
+<title>URLRequestRoot</title>
+<polygon fill="white" stroke="white" points="-4,4 -4,-921 1784,-921 1784,4 -4,4"/>
+<g id="clust1" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="107,-746 107,-909 685,-909 685,-746 107,-746"/>
+<text text-anchor="middle" x="396" y="-893.8" font-family="Times,serif" font-size="14.00">Legend</text>
+</g>
+<!-- BaseClass -->
+<g id="node1" class="node"><title>BaseClass</title>
+<ellipse fill="none" stroke="black" cx="473" cy="-772" rx="48.1437" ry="18"/>
+<text text-anchor="middle" x="473" y="-768.3" font-family="Times,serif" font-size="14.00">BaseClass</text>
+</g>
+<!-- SubClass -->
+<g id="node2" class="node"><title>SubClass</title>
+<ellipse fill="none" stroke="black" cx="615" cy="-860" rx="61.6163" ry="18"/>
+<text text-anchor="middle" x="615" y="-856.3" font-family="Times,serif" font-size="14.00">Derived Class</text>
+</g>
+<!-- SubClass&#45;&gt;BaseClass -->
+<g id="edge1" class="edge"><title>SubClass&#45;&gt;BaseClass</title>
+<path fill="none" stroke="black" d="M589.285,-843.426C565.835,-829.224 531.074,-808.172 505.666,-792.784"/>
+<polygon fill="none" stroke="black" points="507.47,-789.784 497.103,-787.598 503.844,-795.772 507.47,-789.784"/>
+</g>
+<!-- Interface -->
+<g id="node7" class="node"><title>Interface</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="608" cy="-772" rx="68.3417" ry="18"/>
+<text text-anchor="middle" x="608" y="-768.3" font-family="Times,serif" font-size="14.00">Interface / ABC</text>
+</g>
+<!-- SubClass&#45;&gt;Interface -->
+<g id="edge2" class="edge"><title>SubClass&#45;&gt;Interface</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M613.583,-841.597C612.619,-829.746 611.322,-813.817 610.221,-800.292"/>
+<polygon fill="none" stroke="black" points="613.69,-799.767 609.391,-790.084 606.713,-800.335 613.69,-799.767"/>
+</g>
+<!-- Whole -->
+<g id="node3" class="node"><title>Whole</title>
+<ellipse fill="none" stroke="black" cx="372" cy="-772" rx="35.1455" ry="18"/>
+<text text-anchor="middle" x="372" y="-768.3" font-family="Times,serif" font-size="14.00">Whole</text>
+</g>
+<!-- Part -->
+<g id="node4" class="node"><title>Part</title>
+<ellipse fill="none" stroke="black" cx="508" cy="-860" rx="27" ry="18"/>
+<text text-anchor="middle" x="508" y="-856.3" font-family="Times,serif" font-size="14.00">Part</text>
+</g>
+<!-- Part&#45;&gt;Whole -->
+<g id="edge3" class="edge"><title>Part&#45;&gt;Whole</title>
+<path fill="none" stroke="black" d="M486.958,-848.263C482.117,-846.019 476.938,-843.792 472,-842 442.209,-831.187 428.423,-842.925 403,-824 395.025,-818.063 388.673,-809.412 383.848,-800.915"/>
+<polygon fill="black" stroke="black" points="383.784,-800.788 377.509,-797.234 378.376,-790.076 384.651,-793.629 383.784,-800.788"/>
+<text text-anchor="middle" x="432.5" y="-812.3" font-family="Times,serif" font-size="14.00">ownership</text>
+</g>
+<!-- Part&#45;&gt;Whole -->
+<g id="edge4" class="edge"><title>Part&#45;&gt;Whole</title>
+<path fill="none" stroke="black" d="M497.05,-843.387C488.566,-832.255 475.937,-817.615 462,-808 461.698,-807.792 434.867,-797.366 410.582,-787.948"/>
+<polygon fill="none" stroke="black" points="410.539,-787.932 403.499,-789.492 399.351,-783.594 406.391,-782.033 410.539,-787.932"/>
+<text text-anchor="middle" x="500" y="-812.3" font-family="Times,serif" font-size="14.00">pointer</text>
+</g>
+<!-- A -->
+<g id="node5" class="node"><title>A</title>
+<ellipse fill="none" stroke="black" cx="436" cy="-860" rx="27" ry="18"/>
+<text text-anchor="middle" x="436" y="-856.3" font-family="Times,serif" font-size="14.00">A</text>
+</g>
+<!-- B -->
+<g id="node6" class="node"><title>B</title>
+<ellipse fill="none" stroke="black" cx="292" cy="-772" rx="27" ry="18"/>
+<text text-anchor="middle" x="292" y="-768.3" font-family="Times,serif" font-size="14.00">B</text>
+</g>
+<!-- A&#45;&gt;B -->
+<g id="edge5" class="edge"><title>A&#45;&gt;B</title>
+<path fill="none" stroke="black" d="M415.171,-848.532C409.973,-846.171 404.352,-843.826 399,-842 365.327,-830.513 349.531,-845.255 321,-824 311.083,-816.612 304.05,-804.762 299.396,-794.342"/>
+<polyline fill="none" stroke="black" points="297.423,-789.677 299.371,-794.282 "/>
+<text text-anchor="middle" x="352.5" y="-812.3" font-family="Times,serif" font-size="14.00">association</text>
+<text text-anchor="middle" x="287.423" y="-793.477" font-family="Times,serif" font-size="14.00">?..?</text>
+<text text-anchor="middle" x="405.171" y="-837.332" font-family="Times,serif" font-size="14.00">?..?</text>
+</g>
+<!-- template_class -->
+<g id="node8" class="node"><title>template_class</title>
+<polygon fill="none" stroke="black" points="300,-878 209.505,-860 300,-842 390.495,-860 300,-878"/>
+<text text-anchor="middle" x="300" y="-856.3" font-family="Times,serif" font-size="14.00">template_class</text>
+</g>
+<!-- Factory -->
+<g id="node9" class="node"><title>Factory</title>
+<ellipse fill="none" stroke="black" cx="153" cy="-860" rx="38.0212" ry="18"/>
+<text text-anchor="middle" x="153" y="-856.3" font-family="Times,serif" font-size="14.00">Factory</text>
+</g>
+<!-- object -->
+<g id="node10" class="node"><title>object</title>
+<ellipse fill="none" stroke="black" cx="153" cy="-772" rx="33.2209" ry="18"/>
+<text text-anchor="middle" x="153" y="-768.3" font-family="Times,serif" font-size="14.00">object</text>
+</g>
+<!-- Factory&#45;&gt;object -->
+<g id="edge6" class="edge"><title>Factory&#45;&gt;object</title>
+<path fill="none" stroke="black" d="M153,-841.597C153,-832.562 153,-821.157 153,-810.254"/>
+<polygon fill="black" stroke="black" points="153,-790.084 157.5,-800.084 153,-795.084 153,-800.084 153,-800.084 153,-800.084 153,-795.084 148.5,-800.084 153,-790.084 153,-790.084"/>
+<polygon fill="black" stroke="black" points="153,-800.084 157.5,-810.084 153,-805.084 153,-810.084 153,-810.084 153,-810.084 153,-805.084 148.5,-810.084 153,-800.084 153,-800.084"/>
+</g>
+<!-- URLRequestContext -->
+<g id="node11" class="node"><title>URLRequestContext</title>
+<ellipse fill="none" stroke="black" cx="198" cy="-18" rx="87.1385" ry="18"/>
+<text text-anchor="middle" x="198" y="-14.3" font-family="Times,serif" font-size="14.00">URLRequestContext</text>
+</g>
+<!-- URLRequest -->
+<g id="node12" class="node"><title>URLRequest</title>
+<ellipse fill="none" stroke="black" cx="379" cy="-18" rx="58.2422" ry="18"/>
+<text text-anchor="middle" x="379" y="-14.3" font-family="Times,serif" font-size="14.00">URLRequest</text>
+</g>
+<!-- URLRequestContext&#45;&gt;URLRequest -->
+<g id="edge12" class="edge"><title>URLRequestContext&#45;&gt;URLRequest</title>
+<path fill="none" stroke="black" d="M285.318,-18C290.35,-18 295.382,-18 300.414,-18"/>
+<polygon fill="black" stroke="black" points="320.449,-18 310.449,-22.5 315.449,-18 310.449,-18 310.449,-18 310.449,-18 315.449,-18 310.449,-13.5 320.449,-18 320.449,-18"/>
+<polygon fill="black" stroke="black" points="310.449,-18 300.449,-22.5001 305.449,-18.0001 300.449,-18.0001 300.449,-18.0001 300.449,-18.0001 305.449,-18.0001 300.449,-13.5001 310.449,-18 310.449,-18"/>
+</g>
+<!-- URLRequestJob -->
+<g id="node13" class="node"><title>URLRequestJob</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="379" cy="-92" rx="70.2668" ry="18"/>
+<text text-anchor="middle" x="379" y="-88.3" font-family="Times,serif" font-size="14.00">URLRequestJob</text>
+</g>
+<!-- URLRequestJob&#45;&gt;URLRequest -->
+<g id="edge9" class="edge"><title>URLRequestJob&#45;&gt;URLRequest</title>
+<path fill="none" stroke="black" d="M379,-73.937C379,-66.3374 379,-57.1638 379,-48.5081"/>
+<polygon fill="black" stroke="black" points="379,-48.4407 375,-42.4407 379,-36.4407 383,-42.4406 379,-48.4407"/>
+</g>
+<!-- URLRequestJob_Others -->
+<g id="node14" class="node"><title>URLRequestJob_Others</title>
+<ellipse fill="none" stroke="black" cx="79" cy="-166" rx="78.4642" ry="18"/>
+<text text-anchor="middle" x="79" y="-162.3" font-family="Times,serif" font-size="14.00">...other job types...</text>
+</g>
+<!-- URLRequestJob_Others&#45;&gt;URLRequestJob -->
+<g id="edge7" class="edge"><title>URLRequestJob_Others&#45;&gt;URLRequestJob</title>
+<path fill="none" stroke="black" d="M131.256,-152.459C183.725,-139.866 264.455,-120.491 319.39,-107.306"/>
+<polygon fill="none" stroke="black" points="320.428,-110.657 329.335,-104.92 318.794,-103.85 320.428,-110.657"/>
+</g>
+<!-- URLRequestHttpJob -->
+<g id="node15" class="node"><title>URLRequestHttpJob</title>
+<ellipse fill="none" stroke="black" cx="379" cy="-166" rx="87.1385" ry="18"/>
+<text text-anchor="middle" x="379" y="-162.3" font-family="Times,serif" font-size="14.00">URLRequestHttpJob</text>
+</g>
+<!-- URLRequestHttpJob&#45;&gt;URLRequestJob -->
+<g id="edge8" class="edge"><title>URLRequestHttpJob&#45;&gt;URLRequestJob</title>
+<path fill="none" stroke="black" d="M379,-147.937C379,-139.807 379,-129.876 379,-120.705"/>
+<polygon fill="none" stroke="black" points="382.5,-120.441 379,-110.441 375.5,-120.441 382.5,-120.441"/>
+</g>
+<!-- Filter -->
+<g id="node16" class="node"><title>Filter</title>
+<ellipse fill="none" stroke="black" cx="532" cy="-166" rx="30.3206" ry="18"/>
+<text text-anchor="middle" x="532" y="-162.3" font-family="Times,serif" font-size="14.00">Filter</text>
+</g>
+<!-- URLRequestHttpJob&#45;&gt;Filter -->
+<g id="edge13" class="edge"><title>URLRequestHttpJob&#45;&gt;Filter</title>
+<path fill="none" stroke="black" d="M466.258,-166C471.334,-166 476.41,-166 481.486,-166"/>
+<polygon fill="black" stroke="black" points="501.697,-166 491.697,-170.5 496.697,-166 491.697,-166 491.697,-166 491.697,-166 496.697,-166 491.697,-161.5 501.697,-166 501.697,-166"/>
+<polygon fill="black" stroke="black" points="491.697,-166 481.697,-170.5 486.697,-166 481.697,-166 481.697,-166 481.697,-166 486.697,-166 481.697,-161.5 491.697,-166 491.697,-166"/>
+</g>
+<!-- Filter&#45;&gt;URLRequestJob -->
+<g id="edge10" class="edge"><title>Filter&#45;&gt;URLRequestJob</title>
+<path fill="none" stroke="black" d="M509.094,-154.221C486.235,-143.463 450.544,-126.668 422.324,-113.388"/>
+<polygon fill="black" stroke="black" points="421.996,-113.233 414.864,-114.298 411.138,-108.124 418.27,-107.059 421.996,-113.233"/>
+</g>
+<!-- Filter&#45;&gt;Filter -->
+<g id="edge11" class="edge"><title>Filter&#45;&gt;Filter</title>
+<path fill="none" stroke="black" d="M560.103,-172.724C570.969,-173.022 580,-170.781 580,-166 580,-163.236 576.981,-161.321 572.335,-160.254"/>
+<polygon fill="black" stroke="black" points="572.065,-160.233 565.765,-163.742 560.103,-159.276 566.403,-155.767 572.065,-160.233"/>
+<text text-anchor="middle" x="571.103" y="-176.524" font-family="Times,serif" font-size="14.00">0..1</text>
+</g>
+<!-- HttpTransactionFactory -->
+<g id="node17" class="node"><title>HttpTransactionFactory</title>
+<ellipse fill="none" stroke="black" cx="419" cy="-240" rx="97.237" ry="18"/>
+<text text-anchor="middle" x="419" y="-236.3" font-family="Times,serif" font-size="14.00">HttpTransactionFactory</text>
+</g>
+<!-- HttpTransaction -->
+<g id="node20" class="node"><title>HttpTransaction</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="734" cy="-240" rx="69.3156" ry="18"/>
+<text text-anchor="middle" x="734" y="-236.3" font-family="Times,serif" font-size="14.00">HttpTransaction</text>
+</g>
+<!-- HttpTransactionFactory&#45;&gt;HttpTransaction -->
+<g id="edge21" class="edge"><title>HttpTransactionFactory&#45;&gt;HttpTransaction</title>
+<path fill="none" stroke="black" d="M516.515,-240C559.052,-240 601.589,-240 644.127,-240"/>
+<polygon fill="black" stroke="black" points="664.337,-240 654.337,-244.5 659.337,-240 654.337,-240 654.337,-240 654.337,-240 659.337,-240 654.337,-235.5 664.337,-240 664.337,-240"/>
+<polygon fill="black" stroke="black" points="654.337,-240 644.337,-244.5 649.337,-240 644.337,-240 644.337,-240 644.337,-240 649.337,-240 644.337,-235.5 654.337,-240 654.337,-240"/>
+</g>
+<!-- HttpCache -->
+<g id="node18" class="node"><title>HttpCache</title>
+<ellipse fill="none" stroke="black" cx="225" cy="-166" rx="49.0941" ry="18"/>
+<text text-anchor="middle" x="225" y="-162.3" font-family="Times,serif" font-size="14.00">HttpCache</text>
+</g>
+<!-- HttpCache&#45;&gt;HttpTransactionFactory -->
+<g id="edge16" class="edge"><title>HttpCache&#45;&gt;HttpTransactionFactory</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M258.184,-179.316C288.306,-190.495 333.185,-207.151 367.886,-220.03"/>
+<polygon fill="none" stroke="black" points="366.789,-223.356 377.382,-223.554 369.225,-216.793 366.789,-223.356"/>
+</g>
+<!-- HttpCache_Transaction -->
+<g id="node21" class="node"><title>HttpCache_Transaction</title>
+<ellipse fill="none" stroke="black" cx="734" cy="-166" rx="97.237" ry="18"/>
+<text text-anchor="middle" x="734" y="-162.3" font-family="Times,serif" font-size="14.00">HttpCache::Transaction</text>
+</g>
+<!-- HttpCache&#45;&gt;HttpCache_Transaction -->
+<g id="edge20" class="edge"><title>HttpCache&#45;&gt;HttpCache_Transaction</title>
+<path fill="none" stroke="black" d="M247.344,-182.086C259.827,-190.078 276.045,-198.887 292,-203 361.291,-220.861 543.243,-213.661 614,-203 633.473,-200.066 654.144,-194.596 672.743,-188.745"/>
+<polygon fill="black" stroke="black" points="691.957,-182.348 683.891,-189.777 687.213,-183.928 682.469,-185.507 682.469,-185.507 682.469,-185.507 687.213,-183.928 681.048,-181.238 691.957,-182.348 691.957,-182.348"/>
+<polygon fill="black" stroke="black" points="682.469,-185.507 674.403,-192.935 677.725,-187.086 672.981,-188.666 672.981,-188.666 672.981,-188.666 677.725,-187.086 671.56,-184.396 682.469,-185.507 682.469,-185.507"/>
+</g>
+<!-- HttpNetworkLayer -->
+<g id="node19" class="node"><title>HttpNetworkLayer</title>
+<ellipse fill="none" stroke="black" cx="419" cy="-314" rx="79.4147" ry="18"/>
+<text text-anchor="middle" x="419" y="-310.3" font-family="Times,serif" font-size="14.00">HttpNetworkLayer</text>
+</g>
+<!-- HttpNetworkLayer&#45;&gt;HttpTransactionFactory -->
+<g id="edge17" class="edge"><title>HttpNetworkLayer&#45;&gt;HttpTransactionFactory</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M419,-295.937C419,-287.807 419,-277.876 419,-268.705"/>
+<polygon fill="none" stroke="black" points="422.5,-268.441 419,-258.441 415.5,-268.441 422.5,-268.441"/>
+</g>
+<!-- HttpNetworkTransaction -->
+<g id="node22" class="node"><title>HttpNetworkTransaction</title>
+<ellipse fill="none" stroke="black" cx="828" cy="-314" rx="101.087" ry="18"/>
+<text text-anchor="middle" x="828" y="-310.3" font-family="Times,serif" font-size="14.00">HttpNetworkTransaction</text>
+</g>
+<!-- HttpNetworkLayer&#45;&gt;HttpNetworkTransaction -->
+<g id="edge22" class="edge"><title>HttpNetworkLayer&#45;&gt;HttpNetworkTransaction</title>
+<path fill="none" stroke="black" d="M498.483,-314C567.85,-314 637.216,-314 706.583,-314"/>
+<polygon fill="black" stroke="black" points="726.635,-314 716.635,-318.5 721.635,-314 716.635,-314 716.635,-314 716.635,-314 721.635,-314 716.635,-309.5 726.635,-314 726.635,-314"/>
+<polygon fill="black" stroke="black" points="716.635,-314 706.635,-318.5 711.635,-314 706.635,-314 706.635,-314 706.635,-314 711.635,-314 706.635,-309.5 716.635,-314 716.635,-314"/>
+</g>
+<!-- HttpTransaction&#45;&gt;URLRequestHttpJob -->
+<g id="edge19" class="edge"><title>HttpTransaction&#45;&gt;URLRequestHttpJob</title>
+<path fill="none" stroke="black" d="M681.236,-228.299C620.105,-215.9 519.061,-195.407 450.808,-181.564"/>
+<polygon fill="black" stroke="black" points="450.645,-181.531 443.97,-184.259 438.885,-179.146 445.56,-176.418 450.645,-181.531"/>
+</g>
+<!-- HttpTransaction&#45;&gt;HttpCache_Transaction -->
+<g id="edge18" class="edge"><title>HttpTransaction&#45;&gt;HttpCache_Transaction</title>
+<path fill="none" stroke="black" d="M728.16,-221.937C727.354,-214.337 727.083,-205.164 727.349,-196.508"/>
+<polygon fill="black" stroke="black" points="727.354,-196.416 723.746,-190.173 728.121,-184.441 731.729,-190.684 727.354,-196.416"/>
+</g>
+<!-- HttpCache_Transaction&#45;&gt;HttpTransaction -->
+<g id="edge14" class="edge"><title>HttpCache_Transaction&#45;&gt;HttpTransaction</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M739.879,-184.441C740.723,-192.625 740.954,-202.572 740.571,-211.719"/>
+<polygon fill="none" stroke="black" points="737.062,-211.713 739.84,-221.937 744.045,-212.212 737.062,-211.713"/>
+</g>
+<!-- HttpNetworkTransaction&#45;&gt;HttpTransaction -->
+<g id="edge15" class="edge"><title>HttpNetworkTransaction&#45;&gt;HttpTransaction</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M806.198,-296.301C793.533,-286.599 777.401,-274.243 763.6,-263.672"/>
+<polygon fill="none" stroke="black" points="765.427,-260.663 755.359,-257.36 761.17,-266.22 765.427,-260.663"/>
+</g>
+<!-- HttpStreamRequest_Delegate -->
+<g id="node28" class="node"><title>HttpStreamRequest_Delegate</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="951" cy="-240" rx="119.384" ry="18"/>
+<text text-anchor="middle" x="951" y="-236.3" font-family="Times,serif" font-size="14.00">HttpStreamRequest::Delegate</text>
+</g>
+<!-- HttpNetworkTransaction&#45;&gt;HttpStreamRequest_Delegate -->
+<g id="edge23" class="edge"><title>HttpNetworkTransaction&#45;&gt;HttpStreamRequest_Delegate</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M855.911,-296.662C873.088,-286.607 895.308,-273.6 913.948,-262.689"/>
+<polygon fill="none" stroke="black" points="915.912,-265.595 922.774,-257.522 912.376,-259.554 915.912,-265.595"/>
+</g>
+<!-- HttpStreamFactoryImpl -->
+<g id="node23" class="node"><title>HttpStreamFactoryImpl</title>
+<ellipse fill="none" stroke="black" cx="591" cy="-92" rx="97.237" ry="18"/>
+<text text-anchor="middle" x="591" y="-88.3" font-family="Times,serif" font-size="14.00">HttpStreamFactoryImpl</text>
+</g>
+<!-- HttpStreamRequest -->
+<g id="node24" class="node"><title>HttpStreamRequest</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="831" cy="-92" rx="81.3398" ry="18"/>
+<text text-anchor="middle" x="831" y="-88.3" font-family="Times,serif" font-size="14.00">HttpStreamRequest</text>
+</g>
+<!-- HttpStreamFactoryImpl&#45;&gt;HttpStreamRequest -->
+<g id="edge34" class="edge"><title>HttpStreamFactoryImpl&#45;&gt;HttpStreamRequest</title>
+<path fill="none" stroke="black" d="M688.5,-92C701.992,-92 715.484,-92 728.976,-92"/>
+<polygon fill="black" stroke="black" points="749.452,-92 739.452,-96.5 744.452,-92 739.452,-92 739.452,-92 739.452,-92 744.452,-92 739.452,-87.5 749.452,-92 749.452,-92"/>
+<polygon fill="black" stroke="black" points="739.452,-92 729.452,-96.5001 734.452,-92.0001 729.452,-92.0001 729.452,-92.0001 729.452,-92.0001 734.452,-92.0001 729.452,-87.5001 739.452,-92 739.452,-92"/>
+</g>
+<!-- HttpStreamRequest&#45;&gt;HttpNetworkTransaction -->
+<g id="edge28" class="edge"><title>HttpStreamRequest&#45;&gt;HttpNetworkTransaction</title>
+<path fill="none" stroke="black" d="M763.969,-102.293C711.475,-111.106 644.641,-126.251 628,-148 597.411,-187.98 618.664,-223.16 655,-258 676.893,-278.992 706.776,-291.973 735.546,-300.001"/>
+<polygon fill="black" stroke="black" points="735.731,-300.048 742.539,-297.673 747.351,-303.045 740.542,-305.42 735.731,-300.048"/>
+</g>
+<!-- HttpStream -->
+<g id="node25" class="node"><title>HttpStream</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="1319" cy="-92" rx="52.4675" ry="18"/>
+<text text-anchor="middle" x="1319" y="-88.3" font-family="Times,serif" font-size="14.00">HttpStream</text>
+</g>
+<!-- HttpStreamRequest&#45;&gt;HttpStream -->
+<g id="edge35" class="edge"><title>HttpStreamRequest&#45;&gt;HttpStream</title>
+<path fill="none" stroke="black" d="M912.492,-92C1023.84,-92 1135.19,-92 1246.54,-92"/>
+<polygon fill="black" stroke="black" points="1266.6,-92 1256.6,-96.5 1261.6,-92 1256.6,-92 1256.6,-92 1256.6,-92 1261.6,-92 1256.6,-87.5 1266.6,-92 1266.6,-92"/>
+<polygon fill="black" stroke="black" points="1256.6,-92 1246.6,-96.5001 1251.6,-92.0001 1246.6,-92.0001 1246.6,-92.0001 1246.6,-92.0001 1251.6,-92.0001 1246.6,-87.5001 1256.6,-92 1256.6,-92"/>
+</g>
+<!-- HttpStream&#45;&gt;HttpNetworkTransaction -->
+<g id="edge29" class="edge"><title>HttpStream&#45;&gt;HttpNetworkTransaction</title>
+<path fill="none" stroke="black" d="M1273.43,-101.133C1239.63,-108.879 1193.76,-123.152 1160,-148 1111.11,-183.992 1129.92,-224.936 1079,-258 1036.66,-285.489 982.719,-299.423 935.696,-306.414"/>
+<polygon fill="black" stroke="black" points="935.473,-306.444 930.076,-311.228 923.585,-308.086 928.982,-303.303 935.473,-306.444"/>
+</g>
+<!-- HttpStreamFactoryImpl_Request -->
+<g id="node26" class="node"><title>HttpStreamFactoryImpl_Request</title>
+<ellipse fill="none" stroke="black" cx="981" cy="-166" rx="131.408" ry="18"/>
+<text text-anchor="middle" x="981" y="-162.3" font-family="Times,serif" font-size="14.00">HttpStreamFactoryImpl::Request</text>
+</g>
+<!-- HttpStreamFactoryImpl_Request&#45;&gt;HttpStreamRequest -->
+<g id="edge24" class="edge"><title>HttpStreamFactoryImpl_Request&#45;&gt;HttpStreamRequest</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M946.587,-148.482C924.617,-137.936 895.998,-124.199 872.734,-113.032"/>
+<polygon fill="none" stroke="black" points="873.984,-109.75 863.455,-108.578 870.955,-116.061 873.984,-109.75"/>
+</g>
+<!-- HttpStreamFactoryImpl_Job -->
+<g id="node27" class="node"><title>HttpStreamFactoryImpl_Job</title>
+<ellipse fill="none" stroke="black" cx="1566" cy="-314" rx="115.06" ry="18"/>
+<text text-anchor="middle" x="1566" y="-310.3" font-family="Times,serif" font-size="14.00">HttpStreamFactoryImpl::Job</text>
+</g>
+<!-- HttpStreamFactoryImpl_Job&#45;&gt;HttpStreamFactoryImpl_Request -->
+<g id="edge31" class="edge"><title>HttpStreamFactoryImpl_Job&#45;&gt;HttpStreamFactoryImpl_Request</title>
+<path fill="none" stroke="black" d="M1553.63,-295.789C1537.2,-274.422 1506.02,-238.754 1470,-222 1453.28,-214.222 1236.53,-191.904 1097.28,-178.206"/>
+<polygon fill="black" stroke="black" points="1097.25,-178.203 1090.89,-181.598 1085.31,-177.031 1091.67,-173.636 1097.25,-178.203"/>
+<text text-anchor="middle" x="1542.63" y="-284.589" font-family="Times,serif" font-size="14.00">1..*</text>
+</g>
+<!-- HttpStreamFactoryImpl_Job&#45;&gt;HttpStreamFactoryImpl_Job -->
+<g id="edge33" class="edge"><title>HttpStreamFactoryImpl_Job&#45;&gt;HttpStreamFactoryImpl_Job</title>
+<path fill="none" stroke="black" d="M1674.54,-319.988C1689.22,-318.984 1699,-316.988 1699,-314 1699,-311.946 1694.38,-310.36 1686.72,-309.244"/>
+<polygon fill="none" stroke="black" points="1686.48,-309.22 1680.11,-312.595 1674.54,-308.012 1680.92,-304.636 1686.48,-309.22"/>
+<text text-anchor="middle" x="1739.5" y="-317.8" font-family="Times,serif" font-size="14.00">blocking_job_</text>
+<text text-anchor="middle" x="1739.5" y="-302.8" font-family="Times,serif" font-size="14.00">waiting_job_</text>
+</g>
+<!-- ClientSocketHandle -->
+<g id="node51" class="node"><title>ClientSocketHandle</title>
+<ellipse fill="none" stroke="black" cx="1332" cy="-314" rx="83.2649" ry="18"/>
+<text text-anchor="middle" x="1332" y="-310.3" font-family="Times,serif" font-size="14.00">ClientSocketHandle</text>
+</g>
+<!-- HttpStreamFactoryImpl_Job&#45;&gt;ClientSocketHandle -->
+<g id="edge59" class="edge"><title>HttpStreamFactoryImpl_Job&#45;&gt;ClientSocketHandle</title>
+<path fill="none" stroke="black" d="M1482.46,-326.396C1461.09,-327.807 1439.71,-327.866 1418.33,-326.572"/>
+<polygon fill="black" stroke="black" points="1398.27,-324.962 1408.6,-321.277 1403.25,-325.362 1408.24,-325.762 1408.24,-325.762 1408.24,-325.762 1403.25,-325.362 1407.88,-330.248 1398.27,-324.962 1398.27,-324.962"/>
+<polygon fill="black" stroke="black" points="1408.24,-325.762 1418.57,-322.077 1413.22,-326.162 1418.21,-326.562 1418.21,-326.562 1418.21,-326.562 1413.22,-326.162 1417.85,-331.048 1408.24,-325.762 1408.24,-325.762"/>
+</g>
+<!-- HttpStreamRequest_Delegate&#45;&gt;HttpStreamFactoryImpl_Request -->
+<g id="edge32" class="edge"><title>HttpStreamRequest_Delegate&#45;&gt;HttpStreamFactoryImpl_Request</title>
+<path fill="none" stroke="black" d="M958.11,-221.937C961.387,-214.072 965.366,-204.522 969.082,-195.604"/>
+<polygon fill="none" stroke="black" points="969.118,-195.518 967.733,-188.441 973.733,-184.441 975.118,-191.518 969.118,-195.518"/>
+</g>
+<!-- HttpBasicStream -->
+<g id="node29" class="node"><title>HttpBasicStream</title>
+<ellipse fill="none" stroke="black" cx="1561" cy="-166" rx="72.192" ry="18"/>
+<text text-anchor="middle" x="1561" y="-162.3" font-family="Times,serif" font-size="14.00">HttpBasicStream</text>
+</g>
+<!-- HttpBasicStream&#45;&gt;HttpStream -->
+<g id="edge25" class="edge"><title>HttpBasicStream&#45;&gt;HttpStream</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1516.33,-151.71C1474.01,-139.12 1410.64,-120.265 1367.2,-107.34"/>
+<polygon fill="none" stroke="black" points="1368.01,-103.93 1357.43,-104.433 1366.01,-110.64 1368.01,-103.93"/>
+</g>
+<!-- QuicHttpStream -->
+<g id="node30" class="node"><title>QuicHttpStream</title>
+<ellipse fill="none" stroke="black" cx="1239" cy="-166" rx="70.2909" ry="18"/>
+<text text-anchor="middle" x="1239" y="-162.3" font-family="Times,serif" font-size="14.00">QuicHttpStream</text>
+</g>
+<!-- QuicHttpStream&#45;&gt;HttpStream -->
+<g id="edge26" class="edge"><title>QuicHttpStream&#45;&gt;HttpStream</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1257.55,-148.301C1268.21,-138.715 1281.74,-126.537 1293.39,-116.05"/>
+<polygon fill="none" stroke="black" points="1296,-118.405 1301.1,-109.113 1291.32,-113.202 1296,-118.405"/>
+</g>
+<!-- SpdyHttpStream -->
+<g id="node31" class="node"><title>SpdyHttpStream</title>
+<ellipse fill="none" stroke="black" cx="1399" cy="-166" rx="71.2405" ry="18"/>
+<text text-anchor="middle" x="1399" y="-162.3" font-family="Times,serif" font-size="14.00">SpdyHttpStream</text>
+</g>
+<!-- SpdyHttpStream&#45;&gt;HttpStream -->
+<g id="edge27" class="edge"><title>SpdyHttpStream&#45;&gt;HttpStream</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1380.45,-148.301C1369.79,-138.715 1356.26,-126.537 1344.61,-116.05"/>
+<polygon fill="none" stroke="black" points="1346.68,-113.202 1336.9,-109.113 1342,-118.405 1346.68,-113.202"/>
+</g>
+<!-- HttpBasicState -->
+<g id="node32" class="node"><title>HttpBasicState</title>
+<ellipse fill="none" stroke="black" cx="1397" cy="-240" rx="64.4914" ry="18"/>
+<text text-anchor="middle" x="1397" y="-236.3" font-family="Times,serif" font-size="14.00">HttpBasicState</text>
+</g>
+<!-- HttpBasicState&#45;&gt;HttpBasicStream -->
+<g id="edge30" class="edge"><title>HttpBasicState&#45;&gt;HttpBasicStream</title>
+<path fill="none" stroke="black" d="M1430.19,-224.43C1454.84,-213.607 1488.74,-198.723 1515.86,-186.819"/>
+<polygon fill="black" stroke="black" points="1516.03,-186.744 1519.91,-180.669 1527.02,-181.92 1523.13,-187.994 1516.03,-186.744"/>
+</g>
+<!-- ClientSocketPool -->
+<g id="node33" class="node"><title>ClientSocketPool</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="1015" cy="-388" rx="74.6146" ry="18"/>
+<text text-anchor="middle" x="1015" y="-384.3" font-family="Times,serif" font-size="14.00">ClientSocketPool</text>
+</g>
+<!-- ClientSocketPool&#45;&gt;ClientSocketHandle -->
+<g id="edge56" class="edge"><title>ClientSocketPool&#45;&gt;ClientSocketHandle</title>
+<path fill="none" stroke="black" d="M1067.35,-375.111C1121.39,-362.836 1205.91,-343.639 1264.85,-330.253"/>
+<polygon fill="none" stroke="black" points="1264.94,-330.231 1269.91,-325.001 1276.64,-327.573 1271.68,-332.803 1264.94,-330.231"/>
+</g>
+<!-- TransportClientSocketPool -->
+<g id="node34" class="node"><title>TransportClientSocketPool</title>
+<ellipse fill="none" stroke="black" cx="906" cy="-462" rx="109.261" ry="18"/>
+<text text-anchor="middle" x="906" y="-458.3" font-family="Times,serif" font-size="14.00">TransportClientSocketPool</text>
+</g>
+<!-- TransportClientSocketPool&#45;&gt;ClientSocketPool -->
+<g id="edge36" class="edge"><title>TransportClientSocketPool&#45;&gt;ClientSocketPool</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M931.281,-444.301C946.351,-434.346 965.653,-421.596 981.924,-410.848"/>
+<polygon fill="none" stroke="black" points="984.191,-413.545 990.606,-405.113 980.333,-407.705 984.191,-413.545"/>
+</g>
+<!-- SSLClientSocketPool -->
+<g id="node35" class="node"><title>SSLClientSocketPool</title>
+<ellipse fill="none" stroke="black" cx="1124" cy="-462" rx="90.0136" ry="18"/>
+<text text-anchor="middle" x="1124" y="-458.3" font-family="Times,serif" font-size="14.00">SSLClientSocketPool</text>
+</g>
+<!-- SSLClientSocketPool&#45;&gt;ClientSocketPool -->
+<g id="edge37" class="edge"><title>SSLClientSocketPool&#45;&gt;ClientSocketPool</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1099.27,-444.662C1084.11,-434.65 1064.52,-421.711 1048.05,-410.828"/>
+<polygon fill="none" stroke="black" points="1049.53,-407.617 1039.26,-405.025 1045.68,-413.457 1049.53,-407.617"/>
+</g>
+<!-- ClientSocketPool_Others -->
+<g id="node36" class="node"><title>ClientSocketPool_Others</title>
+<ellipse fill="none" stroke="black" cx="731" cy="-462" rx="46.1964" ry="18"/>
+<text text-anchor="middle" x="731" y="-458.3" font-family="Times,serif" font-size="14.00">...others...</text>
+</g>
+<!-- ClientSocketPool_Others&#45;&gt;ClientSocketPool -->
+<g id="edge38" class="edge"><title>ClientSocketPool_Others&#45;&gt;ClientSocketPool</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M765.861,-450.076C772.841,-447.985 780.137,-445.868 787,-444 842.638,-428.858 906.487,-413.639 952.44,-403.061"/>
+<polygon fill="none" stroke="black" points="953.291,-406.456 962.255,-400.809 951.726,-399.634 953.291,-406.456"/>
+</g>
+<!-- ClientSocketPoolBase -->
+<g id="node37" class="node"><title>ClientSocketPoolBase</title>
+<polygon fill="none" stroke="black" points="906,-568 775.72,-550 906,-532 1036.28,-550 906,-568"/>
+<text text-anchor="middle" x="906" y="-546.3" font-family="Times,serif" font-size="14.00">ClientSocketPoolBase</text>
+</g>
+<!-- ClientSocketPoolBase&#45;&gt;TransportClientSocketPool -->
+<g id="edge49" class="edge"><title>ClientSocketPoolBase&#45;&gt;TransportClientSocketPool</title>
+<path fill="none" stroke="black" d="M906,-531.597C906,-520.333 906,-505.384 906,-492.317"/>
+<polygon fill="black" stroke="black" points="906,-492.084 902,-486.084 906,-480.084 910,-486.084 906,-492.084"/>
+<text text-anchor="middle" x="973" y="-502.3" font-family="Times,serif" font-size="14.00">TransportSocketParams</text>
+</g>
+<!-- ClientSocketPoolBase&#45;&gt;SSLClientSocketPool -->
+<g id="edge50" class="edge"><title>ClientSocketPoolBase&#45;&gt;SSLClientSocketPool</title>
+<path fill="none" stroke="black" d="M960.062,-539.469C986.082,-533.841 1017.34,-525.522 1044,-514 1060.75,-506.762 1077.98,-496.239 1092.14,-486.63"/>
+<polygon fill="black" stroke="black" points="1092.47,-486.398 1095.1,-479.684 1102.31,-479.529 1099.68,-486.243 1092.47,-486.398"/>
+<text text-anchor="middle" x="1125" y="-502.3" font-family="Times,serif" font-size="14.00">SSLSocketParams</text>
+</g>
+<!-- ClientSocketPoolBaseHelper -->
+<g id="node38" class="node"><title>ClientSocketPoolBaseHelper</title>
+<ellipse fill="none" stroke="black" cx="812" cy="-772" rx="116.484" ry="18"/>
+<text text-anchor="middle" x="812" y="-768.3" font-family="Times,serif" font-size="14.00">ClientSocketPoolBaseHelper</text>
+</g>
+<!-- ClientSocketPoolBaseHelper&#45;&gt;ClientSocketPoolBase -->
+<g id="edge48" class="edge"><title>ClientSocketPoolBaseHelper&#45;&gt;ClientSocketPoolBase</title>
+<path fill="none" stroke="black" d="M739.499,-757.76C716.22,-749.708 692.888,-736.772 679,-716 670.107,-702.699 670.953,-693.829 679,-680 715.426,-617.402 794.808,-582.693 849.336,-565.443"/>
+<polygon fill="black" stroke="black" points="849.43,-565.415 854.007,-559.843 860.911,-561.924 856.334,-567.497 849.43,-565.415"/>
+</g>
+<!-- ConnectJob_Delegate -->
+<g id="node44" class="node"><title>ConnectJob_Delegate</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="1015" cy="-698" rx="90.4879" ry="18"/>
+<text text-anchor="middle" x="1015" y="-694.3" font-family="Times,serif" font-size="14.00">ConnectJob::Delegate</text>
+</g>
+<!-- ClientSocketPoolBaseHelper&#45;&gt;ConnectJob_Delegate -->
+<g id="edge39" class="edge"><title>ClientSocketPoolBaseHelper&#45;&gt;ConnectJob_Delegate</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M856.298,-755.288C887.834,-744.103 930.307,-729.039 963.379,-717.309"/>
+<polygon fill="none" stroke="black" points="964.623,-720.581 972.878,-713.94 962.283,-713.984 964.623,-720.581"/>
+</g>
+<!-- ConnectJobFactory -->
+<g id="node39" class="node"><title>ConnectJobFactory</title>
+<ellipse fill="none" stroke="black" cx="906" cy="-624" rx="81.3646" ry="18"/>
+<text text-anchor="middle" x="906" y="-620.3" font-family="Times,serif" font-size="14.00">ConnectJobFactory</text>
+</g>
+<!-- ConnectJobFactory&#45;&gt;ClientSocketPoolBase -->
+<g id="edge52" class="edge"><title>ConnectJobFactory&#45;&gt;ClientSocketPoolBase</title>
+<path fill="none" stroke="black" d="M906,-605.937C906,-598.337 906,-589.164 906,-580.508"/>
+<polygon fill="black" stroke="black" points="906,-580.441 902,-574.441 906,-568.441 910,-574.441 906,-580.441"/>
+</g>
+<!-- ConnectJob -->
+<g id="node40" class="node"><title>ConnectJob</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="1213" cy="-624" rx="53.4184" ry="18"/>
+<text text-anchor="middle" x="1213" y="-620.3" font-family="Times,serif" font-size="14.00">ConnectJob</text>
+</g>
+<!-- ConnectJobFactory&#45;&gt;ConnectJob -->
+<g id="edge58" class="edge"><title>ConnectJobFactory&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" d="M987.247,-624C1037.85,-624 1088.45,-624 1139.06,-624"/>
+<polygon fill="black" stroke="black" points="1159.21,-624 1149.21,-628.5 1154.21,-624 1149.21,-624 1149.21,-624 1149.21,-624 1154.21,-624 1149.21,-619.5 1159.21,-624 1159.21,-624"/>
+<polygon fill="black" stroke="black" points="1149.21,-624 1139.21,-628.5 1144.21,-624 1139.21,-624 1139.21,-624 1139.21,-624 1144.21,-624 1139.21,-619.5 1149.21,-624 1149.21,-624"/>
+</g>
+<!-- TransportConnectJob -->
+<g id="node41" class="node"><title>TransportConnectJob</title>
+<ellipse fill="none" stroke="black" cx="1213" cy="-698" rx="89.0632" ry="18"/>
+<text text-anchor="middle" x="1213" y="-694.3" font-family="Times,serif" font-size="14.00">TransportConnectJob</text>
+</g>
+<!-- TransportConnectJob&#45;&gt;ConnectJob -->
+<g id="edge43" class="edge"><title>TransportConnectJob&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1213,-679.937C1213,-671.807 1213,-661.876 1213,-652.705"/>
+<polygon fill="none" stroke="black" points="1216.5,-652.441 1213,-642.441 1209.5,-652.441 1216.5,-652.441"/>
+</g>
+<!-- StreamSocket -->
+<g id="node45" class="node"><title>StreamSocket</title>
+<ellipse fill="none" stroke="black" stroke-dasharray="5,2" cx="1539" cy="-698" rx="61.1419" ry="18"/>
+<text text-anchor="middle" x="1539" y="-694.3" font-family="Times,serif" font-size="14.00">StreamSocket</text>
+</g>
+<!-- TransportConnectJob&#45;&gt;StreamSocket -->
+<g id="edge60" class="edge"><title>TransportConnectJob&#45;&gt;StreamSocket</title>
+<path fill="none" stroke="black" d="M1254.5,-713.973C1274.06,-720.671 1297.89,-727.669 1320,-731 1381.09,-740.206 1398.4,-743.008 1459,-731 1469.42,-728.936 1480.18,-725.495 1490.31,-721.596"/>
+<polygon fill="black" stroke="black" points="1508.73,-713.774 1501.28,-721.824 1504.13,-715.728 1499.53,-717.682 1499.53,-717.682 1499.53,-717.682 1504.13,-715.728 1497.77,-713.54 1508.73,-713.774 1508.73,-713.774"/>
+<polygon fill="black" stroke="black" points="1499.53,-717.682 1492.08,-725.733 1494.92,-719.636 1490.32,-721.59 1490.32,-721.59 1490.32,-721.59 1494.92,-719.636 1488.56,-717.448 1499.53,-717.682 1499.53,-717.682"/>
+</g>
+<!-- SSLConnectJob -->
+<g id="node42" class="node"><title>SSLConnectJob</title>
+<ellipse fill="none" stroke="black" cx="1390" cy="-698" rx="69.3156" ry="18"/>
+<text text-anchor="middle" x="1390" y="-694.3" font-family="Times,serif" font-size="14.00">SSLConnectJob</text>
+</g>
+<!-- SSLConnectJob&#45;&gt;ConnectJob -->
+<g id="edge44" class="edge"><title>SSLConnectJob&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1354.18,-682.43C1325.56,-670.787 1285.38,-654.443 1255.2,-642.166"/>
+<polygon fill="none" stroke="black" points="1256.36,-638.86 1245.78,-638.334 1253.72,-645.345 1256.36,-638.86"/>
+</g>
+<!-- ConnectJob_Others -->
+<g id="node43" class="node"><title>ConnectJob_Others</title>
+<ellipse fill="none" stroke="black" cx="797" cy="-698" rx="109.286" ry="18"/>
+<text text-anchor="middle" x="797" y="-694.3" font-family="Times,serif" font-size="14.00">...other connect job types...</text>
+</g>
+<!-- ConnectJob_Others&#45;&gt;ConnectJob -->
+<g id="edge45" class="edge"><title>ConnectJob_Others&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M869.462,-684.459C951.057,-670.336 1081.94,-647.684 1156.38,-634.799"/>
+<polygon fill="none" stroke="black" points="1157.25,-638.202 1166.5,-633.048 1156.05,-631.304 1157.25,-638.202"/>
+</g>
+<!-- ConnectJob_Delegate&#45;&gt;ConnectJob -->
+<g id="edge57" class="edge"><title>ConnectJob_Delegate&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" d="M1056.51,-681.906C1088.76,-670.176 1133.48,-653.915 1166.86,-641.778"/>
+<polygon fill="none" stroke="black" points="1166.88,-641.772 1171.15,-635.962 1178.16,-637.671 1173.88,-643.481 1166.88,-641.772"/>
+</g>
+<!-- StreamSocket&#45;&gt;ConnectJob -->
+<g id="edge53" class="edge"><title>StreamSocket&#45;&gt;ConnectJob</title>
+<path fill="none" stroke="black" d="M1493.58,-685.965C1485.09,-683.946 1476.28,-681.884 1468,-680 1399.73,-664.466 1320.91,-647.634 1269.19,-636.739"/>
+<polygon fill="black" stroke="black" points="1269.03,-636.706 1262.34,-639.386 1257.29,-634.236 1263.99,-631.557 1269.03,-636.706"/>
+</g>
+<!-- Socket -->
+<g id="node50" class="node"><title>Socket</title>
+<ellipse fill="none" stroke="black" cx="1539" cy="-624" rx="35.6194" ry="18"/>
+<text text-anchor="middle" x="1539" y="-620.3" font-family="Times,serif" font-size="14.00">Socket</text>
+</g>
+<!-- StreamSocket&#45;&gt;Socket -->
+<g id="edge40" class="edge"><title>StreamSocket&#45;&gt;Socket</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1539,-679.937C1539,-671.807 1539,-661.876 1539,-652.705"/>
+<polygon fill="none" stroke="black" points="1542.5,-652.441 1539,-642.441 1535.5,-652.441 1542.5,-652.441"/>
+</g>
+<!-- StreamSocket&#45;&gt;ClientSocketHandle -->
+<g id="edge51" class="edge"><title>StreamSocket&#45;&gt;ClientSocketHandle</title>
+<path fill="none" stroke="black" d="M1508.89,-682.178C1488.78,-669.938 1466,-650.455 1466,-625 1466,-625 1466,-625 1466,-387 1466,-356.557 1438.83,-338.931 1408.96,-328.753"/>
+<polygon fill="black" stroke="black" points="1408.9,-328.735 1401.99,-330.793 1397.43,-325.205 1404.34,-323.147 1408.9,-328.735"/>
+</g>
+<!-- TCPClientSocket -->
+<g id="node46" class="node"><title>TCPClientSocket</title>
+<ellipse fill="none" stroke="black" cx="1670" cy="-772" rx="74.6146" ry="18"/>
+<text text-anchor="middle" x="1670" y="-768.3" font-family="Times,serif" font-size="14.00">TCPClientSocket</text>
+</g>
+<!-- TCPClientSocket&#45;&gt;StreamSocket -->
+<g id="edge41" class="edge"><title>TCPClientSocket&#45;&gt;StreamSocket</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1641.25,-755.199C1621.96,-744.598 1596.39,-730.541 1575.64,-719.138"/>
+<polygon fill="none" stroke="black" points="1577.23,-716.019 1566.78,-714.27 1573.86,-722.154 1577.23,-716.019"/>
+</g>
+<!-- StreamSocket_Others -->
+<g id="node47" class="node"><title>StreamSocket_Others</title>
+<ellipse fill="none" stroke="black" cx="1487" cy="-772" rx="90.0136" ry="18"/>
+<text text-anchor="middle" x="1487" y="-768.3" font-family="Times,serif" font-size="14.00">...other socket types...</text>
+</g>
+<!-- StreamSocket_Others&#45;&gt;StreamSocket -->
+<g id="edge42" class="edge"><title>StreamSocket_Others&#45;&gt;StreamSocket</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1499.32,-753.937C1505.73,-745.06 1513.7,-734.035 1520.8,-724.197"/>
+<polygon fill="none" stroke="black" points="1523.75,-726.097 1526.77,-715.941 1518.07,-721.998 1523.75,-726.097"/>
+</g>
+<!-- TransportConnectJobHelper -->
+<g id="node48" class="node"><title>TransportConnectJobHelper</title>
+<ellipse fill="none" stroke="black" cx="1213" cy="-772" rx="113.61" ry="18"/>
+<text text-anchor="middle" x="1213" y="-768.3" font-family="Times,serif" font-size="14.00">TransportConnectJobHelper</text>
+</g>
+<!-- TransportConnectJobHelper&#45;&gt;TransportConnectJob -->
+<g id="edge55" class="edge"><title>TransportConnectJobHelper&#45;&gt;TransportConnectJob</title>
+<path fill="none" stroke="black" d="M1213,-753.937C1213,-746.337 1213,-737.164 1213,-728.508"/>
+<polygon fill="black" stroke="black" points="1213,-728.441 1209,-722.441 1213,-716.441 1217,-722.441 1213,-728.441"/>
+</g>
+<!-- SingleRequestHostResolver -->
+<g id="node49" class="node"><title>SingleRequestHostResolver</title>
+<ellipse fill="none" stroke="black" cx="1213" cy="-860" rx="113.135" ry="18"/>
+<text text-anchor="middle" x="1213" y="-856.3" font-family="Times,serif" font-size="14.00">SingleRequestHostResolver</text>
+</g>
+<!-- SingleRequestHostResolver&#45;&gt;TransportConnectJobHelper -->
+<g id="edge54" class="edge"><title>SingleRequestHostResolver&#45;&gt;TransportConnectJobHelper</title>
+<path fill="none" stroke="black" d="M1213,-841.597C1213,-830.333 1213,-815.384 1213,-802.317"/>
+<polygon fill="black" stroke="black" points="1213,-802.084 1209,-796.084 1213,-790.084 1217,-796.084 1213,-802.084"/>
+</g>
+<!-- ClientSocketHandle&#45;&gt;HttpStreamFactoryImpl_Job -->
+<g id="edge46" class="edge"><title>ClientSocketHandle&#45;&gt;HttpStreamFactoryImpl_Job</title>
+<path fill="none" stroke="black" d="M1398.27,-303.038C1422.28,-300.636 1446.29,-299.939 1470.29,-300.947"/>
+<polygon fill="black" stroke="black" points="1470.48,-300.957 1476.69,-297.287 1482.46,-301.604 1476.26,-305.275 1470.48,-300.957"/>
+</g>
+<!-- ClientSocketHandle&#45;&gt;HttpBasicState -->
+<g id="edge47" class="edge"><title>ClientSocketHandle&#45;&gt;HttpBasicState</title>
+<path fill="none" stroke="black" d="M1347.4,-295.937C1355.18,-287.329 1364.77,-276.702 1373.44,-267.095"/>
+<polygon fill="black" stroke="black" points="1373.67,-266.848 1374.72,-259.714 1381.71,-257.941 1380.65,-265.075 1373.67,-266.848"/>
+</g>
+</g>
+</svg>
diff --git a/net/http/http_stream_factory_impl.cc b/net/http/http_stream_factory_impl.cc
index a8d9515..d160c31 100644
--- a/net/http/http_stream_factory_impl.cc
+++ b/net/http/http_stream_factory_impl.cc
@@ -244,6 +244,9 @@
     if (!session_->params().enable_quic)
       continue;
 
+    if (!IsQuicWhitelistedForHost(origin.host()))
+      continue;
+
     if (stream_type == HttpStreamRequest::BIDIRECTIONAL_STREAM &&
         session_->params().quic_disable_bidirectional_streams) {
       continue;
@@ -264,9 +267,6 @@
             server_id, request_info.privacy_mode, origin_host))
       return alternative_service;
 
-    if (!IsQuicWhitelistedForHost(destination.host()))
-      continue;
-
     // Cache this entry if we don't have a non-broken Alt-Svc yet.
     if (first_alternative_service.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL)
       first_alternative_service = alternative_service;
diff --git a/net/http/http_stream_factory_impl.h b/net/http/http_stream_factory_impl.h
index 756d3b8..97a9a6c9 100644
--- a/net/http/http_stream_factory_impl.h
+++ b/net/http/http_stream_factory_impl.h
@@ -121,8 +121,7 @@
   // Called when the Preconnect completes. Used for testing.
   virtual void OnPreconnectsCompleteInternal() {}
 
-  // Returns true if QUIC is whitelisted for |host|, which should be
-  // the result of calling ApplyHostMappingRules().
+  // Returns true if QUIC is whitelisted for |host|.
   bool IsQuicWhitelistedForHost(const std::string& host);
 
   HttpNetworkSession* const session_;
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h
index 1a5c1e24..3c42d8d 100644
--- a/net/http/transport_security_state_static.h
+++ b/net/http/transport_security_state_static.h
@@ -740,6364 +740,8386 @@
 // uint8_t value has the MSB set then it represents a literal leaf value.
 // Otherwise it's a pointer to the n'th element of the array.
 static const uint8_t kHSTSHuffmanTree[] = {
-    0xe7, 0xf5, 0xf9, 0xf7, 0x01, 0xe4, 0x00, 0x02, 0xf2, 0xe9, 0x03, 0x04,
-    0xb0, 0xb2, 0xa0, 0xb7, 0x07, 0xb5, 0xb8, 0x08, 0x09, 0xf1, 0x06, 0x0a,
-    0x0b, 0xae, 0xe6, 0x0c, 0x0d, 0xed, 0x0e, 0xef, 0x80, 0x0f, 0x05, 0x10,
-    0xb9, 0xb6, 0x12, 0xb3, 0xb1, 0xb4, 0x13, 0x14, 0x15, 0xf8, 0xad, 0x16,
-    0xeb, 0x17, 0xe3, 0x18, 0xe1, 0x19, 0x1a, 0xff, 0xfa, 0xea, 0x1c, 0xf6,
-    0xe2, 0x1d, 0xec, 0x1e, 0xe5, 0x1f, 0xf3, 0xf4, 0xe8, 0xf0, 0xee, 0x22,
-    0x21, 0x23, 0x20, 0x24, 0x1b, 0x25, 0x11, 0x26,
+    0xf0, 0xf5, 0xb4, 0xb2, 0xb7, 0xb9, 0xb6, 0x02, 0x03, 0xf1, 0x01, 0x04,
+    0x05, 0xae, 0xf9, 0x06, 0x07, 0xe4, 0x00, 0x08, 0xf7, 0xe6, 0x0a, 0xed,
+    0xf2, 0x0b, 0x09, 0x0c, 0xe9, 0xef, 0x80, 0x0e, 0x0d, 0x0f, 0xeb, 0xe2,
+    0xe3, 0x11, 0xe1, 0x12, 0x13, 0xff, 0xb5, 0xb8, 0xb3, 0x15, 0xb1, 0xb0,
+    0x16, 0x17, 0x18, 0xf8, 0xad, 0x19, 0xea, 0xfa, 0x1b, 0xf6, 0x1a, 0x1c,
+    0xec, 0x1d, 0xe5, 0x1e, 0xe8, 0xe7, 0xf3, 0x20, 0xee, 0xf4, 0x21, 0x22,
+    0x1f, 0x23, 0x14, 0x24, 0x10, 0x25,
 };
 
 static const uint8_t kPreloadedHSTSData[] = {
-    0xff, 0xff, 0xff, 0xcd, 0x79, 0x33, 0xd4, 0x77, 0xd9, 0xe3, 0xef, 0x9e,
-    0x4c, 0xf3, 0xcf, 0xf7, 0xfd, 0x28, 0x6f, 0x16, 0x5f, 0xb4, 0x07, 0x70,
-    0x2a, 0x22, 0x55, 0xef, 0x1e, 0x96, 0x5f, 0xf1, 0x8f, 0x0a, 0x47, 0xe0,
-    0xac, 0xb3, 0x3c, 0x44, 0x3c, 0xc6, 0x9d, 0x1c, 0xb9, 0x90, 0xc2, 0xcb,
-    0xbf, 0x0a, 0xcb, 0xd2, 0x2d, 0xd5, 0x97, 0x7d, 0xd5, 0x97, 0xff, 0xd1,
-    0xe8, 0x91, 0x3b, 0x1f, 0x4a, 0x33, 0xab, 0x2f, 0xfb, 0x1b, 0xf7, 0x4f,
-    0xd9, 0xb8, 0xb2, 0xdc, 0x59, 0x43, 0x3c, 0xd7, 0x3c, 0xa9, 0x23, 0x54,
-    0x63, 0x07, 0x09, 0xcb, 0xfd, 0x82, 0x94, 0x77, 0xc6, 0xb2, 0xf4, 0x7e,
-    0xd5, 0x97, 0xff, 0xd0, 0x16, 0x5f, 0x01, 0xe3, 0xf4, 0x66, 0xa4, 0xb2,
-    0xff, 0x9e, 0x45, 0x9b, 0xcb, 0x38, 0xb2, 0xff, 0xe0, 0xb7, 0xc5, 0x9f,
-    0x74, 0x9f, 0xcb, 0x2f, 0xff, 0xd2, 0x27, 0xeb, 0xb7, 0x90, 0x38, 0xf4,
-    0x49, 0x65, 0x71, 0x12, 0xe2, 0x22, 0x5d, 0x9c, 0x59, 0x79, 0xdc, 0x0a,
-    0x88, 0xb5, 0x52, 0x3e, 0x2c, 0x24, 0x00, 0xb5, 0xf7, 0x49, 0xd8, 0x59,
-    0x7e, 0x8d, 0x67, 0xdd, 0x59, 0x63, 0xf1, 0xe5, 0x7e, 0x45, 0x7e, 0x36,
-    0x3b, 0xa8, 0x59, 0x76, 0xb8, 0xb2, 0xff, 0x8f, 0xae, 0xd7, 0x93, 0xe9,
-    0x65, 0x0d, 0x52, 0x3e, 0xa3, 0x31, 0xf3, 0xc1, 0x14, 0x70, 0xa3, 0x78,
-    0xbd, 0xdd, 0xea, 0xcb, 0xff, 0xe7, 0xf6, 0x16, 0xb5, 0x9f, 0x4b, 0xa6,
-    0xd5, 0x95, 0x23, 0xe6, 0x08, 0xbd, 0xc0, 0x85, 0x97, 0xe6, 0xb4, 0xc5,
-    0xe2, 0xcb, 0xfe, 0x71, 0x0b, 0x26, 0xd4, 0x0a, 0xb2, 0x8c, 0xf8, 0xc2,
-    0x53, 0x71, 0x0a, 0xb2, 0xb1, 0x16, 0x3e, 0x79, 0x14, 0x86, 0xff, 0xf4,
-    0xa3, 0x0b, 0xa1, 0x71, 0xf2, 0x18, 0x59, 0x73, 0xef, 0x59, 0x7d, 0x00,
-    0x68, 0x56, 0x58, 0x66, 0x6e, 0x88, 0x62, 0xfd, 0xf0, 0xf4, 0xf2, 0x59,
-    0x7f, 0x83, 0xf9, 0x66, 0xc2, 0x49, 0x65, 0x41, 0xef, 0xf8, 0xa6, 0xf1,
-    0x0e, 0x16, 0x5c, 0x31, 0xac, 0xbf, 0xb5, 0x0d, 0xc2, 0x6a, 0xcb, 0xfc,
-    0x47, 0xc3, 0x2f, 0xa4, 0xb2, 0xb4, 0x7b, 0xc2, 0x96, 0x5c, 0x7b, 0x2c,
-    0xbf, 0xee, 0x87, 0x4f, 0xc7, 0xcf, 0x2c, 0xba, 0x37, 0x56, 0x50, 0xcf,
-    0xa0, 0xc5, 0xda, 0x71, 0x58, 0x99, 0x71, 0xba, 0xbc, 0x22, 0xef, 0xfe,
-    0x06, 0xa1, 0x88, 0x2e, 0xb2, 0x8c, 0xa4, 0xf4, 0xb2, 0xff, 0xbd, 0x1a,
-    0xcf, 0x1f, 0xc4, 0xb2, 0xfe, 0xf1, 0x05, 0xd8, 0x02, 0xcb, 0xfa, 0x35,
-    0x83, 0x79, 0x2c, 0xa1, 0xa2, 0x48, 0xce, 0x04, 0x2e, 0xb8, 0xb8, 0xb2,
-    0xa1, 0x32, 0xcc, 0x87, 0x31, 0x18, 0x5f, 0xf0, 0x04, 0xe9, 0xc8, 0x5c,
-    0xf2, 0xcb, 0xff, 0xdd, 0xe6, 0x4c, 0x50, 0xdd, 0x6a, 0x3e, 0x59, 0x7f,
-    0xc1, 0x65, 0x8f, 0x3b, 0xcc, 0xf2, 0xcb, 0x76, 0x11, 0x10, 0xe9, 0x77,
-    0xfc, 0x0c, 0x2c, 0xdb, 0x60, 0x92, 0xcb, 0x6e, 0xac, 0xbe, 0xd7, 0x30,
-    0x55, 0x97, 0xe2, 0x28, 0xf8, 0x48, 0x36, 0xf8, 0x29, 0x7f, 0x80, 0x7c,
-    0xd6, 0xa2, 0x4b, 0x2f, 0xff, 0xd9, 0xff, 0x0f, 0xe1, 0x70, 0x10, 0x41,
-    0x79, 0x2c, 0xbf, 0xe2, 0xef, 0x3b, 0x98, 0x2f, 0x16, 0x5c, 0xfe, 0x59,
-    0x68, 0xc3, 0xcf, 0xf8, 0xe6, 0xfd, 0x9e, 0x64, 0x4f, 0x19, 0xe0, 0xb2,
-    0xa1, 0x56, 0x6e, 0x43, 0x0c, 0x04, 0xe6, 0xe1, 0xe3, 0xc2, 0x33, 0xec,
-    0x29, 0x45, 0x27, 0xbc, 0xc6, 0x6e, 0x2c, 0xbb, 0x73, 0x71, 0x65, 0xd9,
-    0xf2, 0x4b, 0x42, 0x4b, 0x7f, 0xa3, 0x4f, 0xf8, 0xbd, 0xfe, 0xee, 0x6b,
-    0xf6, 0x9f, 0x12, 0x33, 0x35, 0x37, 0xf4, 0xbc, 0x7b, 0xf2, 0x65, 0x95,
-    0x07, 0xec, 0xe8, 0xd7, 0xf7, 0x8c, 0x10, 0xd3, 0x59, 0x7f, 0xa3, 0xfd,
-    0x9e, 0x51, 0xba, 0xb2, 0xa0, 0xf8, 0xc8, 0xb2, 0xff, 0xfc, 0x59, 0xfb,
-    0x97, 0xe2, 0x37, 0xa1, 0x7d, 0xa1, 0x65, 0x11, 0xfb, 0xf4, 0x82, 0xcc,
-    0xd9, 0x0c, 0xf7, 0x69, 0xe8, 0x72, 0x78, 0x0c, 0x44, 0x3d, 0x36, 0x34,
-    0x91, 0x90, 0xc7, 0x72, 0x54, 0xd3, 0x10, 0xc6, 0x04, 0x34, 0xfe, 0x30,
-    0x38, 0x41, 0xcd, 0x08, 0x4d, 0x10, 0xfa, 0x34, 0x92, 0x8d, 0x7f, 0x92,
-    0xc0, 0x02, 0xf4, 0x29, 0x04, 0xfc, 0x38, 0xc4, 0x87, 0xd5, 0xff, 0xff,
-    0xce, 0xd6, 0x67, 0xad, 0x07, 0x5a, 0x82, 0xc6, 0x0f, 0xde, 0xc1, 0x16,
-    0x5f, 0x68, 0x3d, 0xc5, 0x97, 0xff, 0x99, 0x46, 0x05, 0xdd, 0xd8, 0x73,
-    0xdc, 0xe9, 0xde, 0x9f, 0x59, 0x7f, 0xb3, 0xfe, 0x60, 0x1c, 0x6b, 0x2f,
-    0xc4, 0xe2, 0xf3, 0x8b, 0x2b, 0x0f, 0x6f, 0x46, 0x77, 0xc0, 0x77, 0x02,
-    0xa2, 0xa2, 0x5e, 0x62, 0x38, 0xb2, 0xf8, 0xa4, 0x6d, 0x59, 0x7e, 0x96,
-    0x11, 0x8d, 0x65, 0x61, 0xf2, 0x38, 0xef, 0x48, 0x6b, 0x48, 0xbf, 0x6c,
-    0x24, 0xaf, 0xbd, 0x9a, 0xc5, 0x97, 0x8e, 0x6d, 0xc5, 0x95, 0x07, 0x83,
-    0xe2, 0x1b, 0xf0, 0x1f, 0xd1, 0xe5, 0x97, 0xff, 0xf0, 0x49, 0xd8, 0x9d,
-    0xd6, 0x20, 0xa5, 0x9e, 0x36, 0xac, 0xb8, 0x22, 0x2c, 0xbe, 0x18, 0xe1,
-    0xab, 0x2f, 0xff, 0xa5, 0xb3, 0x29, 0x13, 0xce, 0xc0, 0xd4, 0xe9, 0xde,
-    0x9f, 0x59, 0x50, 0x89, 0xf3, 0x18, 0xfc, 0x8a, 0xfd, 0x83, 0x8c, 0x25,
-    0x97, 0xff, 0xf0, 0x49, 0xd8, 0x9d, 0xd6, 0x20, 0xa5, 0x9e, 0x36, 0xac,
-    0xbe, 0xd6, 0xb2, 0x7d, 0x65, 0x35, 0x10, 0x4e, 0xbb, 0x7f, 0xfe, 0x79,
-    0x14, 0x73, 0x3e, 0x01, 0x3e, 0x7c, 0x05, 0x97, 0xe8, 0x17, 0x3c, 0xeb,
-    0x2c, 0xce, 0x17, 0x38, 0x64, 0x44, 0x38, 0x5f, 0xe4, 0x38, 0x00, 0xd2,
-    0x64, 0x2d, 0x27, 0xf4, 0x3f, 0x08, 0xbf, 0x90, 0xa7, 0xde, 0x44, 0x22,
-    0xa5, 0xff, 0x63, 0x59, 0xcf, 0xe1, 0x1f, 0x56, 0x5f, 0xfa, 0x19, 0xf8,
-    0xde, 0x5d, 0x3d, 0x96, 0x50, 0xcf, 0xf3, 0x87, 0x97, 0xb0, 0x5c, 0x59,
-    0x78, 0x31, 0xb2, 0xcb, 0xf9, 0xe5, 0xf7, 0x23, 0x65, 0x97, 0xfc, 0xff,
-    0x16, 0x6f, 0xd1, 0xf1, 0x65, 0xf8, 0xe2, 0x4f, 0x25, 0x94, 0x34, 0x47,
-    0xb4, 0xbf, 0xc7, 0x57, 0xf6, 0x6c, 0x38, 0xc1, 0xac, 0xbe, 0x1f, 0x8e,
-    0x65, 0x95, 0x87, 0xa0, 0xe5, 0xb7, 0xe2, 0x7d, 0xcc, 0xd9, 0x65, 0xe1,
-    0x5f, 0xcb, 0x2e, 0x81, 0xac, 0xa8, 0x36, 0x7e, 0x1d, 0xbf, 0xe7, 0x2e,
-    0xf3, 0x59, 0x0d, 0x59, 0x7e, 0x32, 0x20, 0xee, 0xac, 0xbf, 0xee, 0x60,
-    0xf3, 0x52, 0x8d, 0x2c, 0xa8, 0x3e, 0x1d, 0x14, 0xdb, 0x65, 0x95, 0x06,
-    0xcf, 0x08, 0x6f, 0x81, 0x1a, 0x61, 0x65, 0xf8, 0xa3, 0xff, 0xe1, 0x65,
-    0xce, 0x15, 0x96, 0x25, 0x97, 0xed, 0xb4, 0xef, 0xd5, 0x94, 0x66, 0xe1,
-    0xc4, 0x2f, 0xbc, 0x7e, 0x66, 0xc9, 0x57, 0x0e, 0x31, 0xcc, 0x85, 0x63,
-    0x10, 0x80, 0x01, 0x04, 0xcb, 0xad, 0x20, 0xf4, 0x32, 0xf8, 0x3f, 0xd2,
-    0x31, 0x4a, 0x27, 0xd3, 0xaf, 0xda, 0x03, 0xb8, 0x15, 0x15, 0xea, 0xfc,
-    0x7b, 0x80, 0x0e, 0xcb, 0x2e, 0x89, 0x2c, 0xba, 0x3f, 0x59, 0x7f, 0x6c,
-    0x24, 0xfb, 0x97, 0xeb, 0x2f, 0xfc, 0xe5, 0xfe, 0x76, 0x08, 0xff, 0x59,
-    0x50, 0x7e, 0x13, 0xe6, 0x76, 0x67, 0x89, 0x90, 0xe8, 0xd1, 0xcb, 0x3f,
-    0x16, 0x12, 0x10, 0xf7, 0xff, 0x33, 0x79, 0x33, 0xcd, 0x01, 0xdc, 0x0a,
-    0x89, 0x19, 0x7f, 0xf9, 0x9b, 0x5e, 0x4c, 0xf3, 0x40, 0x77, 0x02, 0xa2,
-    0x78, 0x5f, 0xfe, 0x66, 0xd7, 0x93, 0x3c, 0xd0, 0x1d, 0xc0, 0xa8, 0x9f,
-    0xd7, 0xff, 0x99, 0xb5, 0xe4, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x28, 0x65,
-    0xff, 0x9e, 0x4c, 0xf3, 0x40, 0x77, 0x02, 0xa2, 0x88, 0x5f, 0xce, 0x06,
-    0x7f, 0x9e, 0xcb, 0x29, 0xa7, 0xfb, 0xbd, 0x32, 0xff, 0xd2, 0x66, 0x1e,
-    0x4e, 0x8e, 0x44, 0x96, 0x53, 0x33, 0xe7, 0x82, 0x4b, 0xff, 0x4c, 0x7e,
-    0xfb, 0x3a, 0x3c, 0x6a, 0xcb, 0xff, 0xce, 0xcc, 0x6e, 0x4e, 0x09, 0xc2,
-    0x3b, 0x56, 0x5f, 0xc7, 0xd3, 0xd3, 0xfe, 0xb2, 0xfb, 0x3b, 0x9f, 0xac,
-    0xbf, 0x10, 0x5e, 0x5c, 0x59, 0x78, 0x9d, 0x9c, 0x8f, 0xd8, 0x8b, 0x7a,
-    0x45, 0x7e, 0xd0, 0x1d, 0xc0, 0xa8, 0xa4, 0x57, 0xff, 0x7b, 0x7b, 0xeb,
-    0x8f, 0xee, 0x46, 0xcb, 0x2f, 0xfe, 0x7f, 0xb9, 0xe1, 0x63, 0xf9, 0xc2,
-    0x35, 0x65, 0xff, 0x44, 0xa3, 0x5b, 0x46, 0xb6, 0x59, 0x7f, 0x9f, 0xad,
-    0x3e, 0xf8, 0xd6, 0x5e, 0x79, 0x33, 0xc4, 0xcc, 0x9c, 0xd3, 0xf4, 0x72,
-    0x4b, 0x10, 0xea, 0xff, 0xfe, 0xde, 0xcc, 0x40, 0x67, 0x60, 0xbb, 0xc7,
-    0x20, 0xe2, 0xcb, 0xff, 0xd2, 0x67, 0xa7, 0xfd, 0xfa, 0x7a, 0xc6, 0xac,
-    0xbf, 0xe3, 0x04, 0x37, 0x9d, 0x89, 0x2c, 0xbb, 0xd8, 0xb2, 0xe8, 0x15,
-    0x65, 0xfc, 0x1d, 0x7f, 0x38, 0x73, 0x2c, 0xbb, 0xf6, 0x72, 0x44, 0xc0,
-    0xce, 0x3c, 0x2d, 0xc1, 0x7b, 0xfa, 0x59, 0xef, 0x3c, 0x96, 0x5f, 0xff,
-    0xd8, 0x3f, 0x40, 0x8c, 0xfa, 0x4f, 0xff, 0x39, 0x1f, 0xa4, 0xb3, 0x38,
-    0x5c, 0xec, 0x1a, 0x00, 0x21, 0x86, 0xd8, 0xdc, 0xbc, 0xba, 0xeb, 0xdf,
-    0xc3, 0x93, 0xa9, 0x93, 0xe5, 0xb7, 0xff, 0xde, 0x8f, 0x1b, 0x1c, 0xe6,
-    0x17, 0xf3, 0xf8, 0xb2, 0xf8, 0x0e, 0xe0, 0x54, 0x4a, 0x0b, 0xff, 0x47,
-    0xed, 0x79, 0x7a, 0x1f, 0x4b, 0x2a, 0x48, 0xbf, 0xd2, 0x99, 0x17, 0x5f,
-    0xf7, 0x30, 0x78, 0x38, 0x2e, 0xac, 0xbf, 0xfc, 0x4f, 0xde, 0x08, 0x41,
-    0x91, 0x63, 0x56, 0x5f, 0xf4, 0x4b, 0x81, 0xfd, 0xaf, 0x25, 0x97, 0x87,
-    0xa8, 0x59, 0x79, 0xc7, 0x8b, 0x2b, 0x0d, 0xbf, 0x07, 0x2f, 0xff, 0x3e,
-    0xc7, 0xad, 0x1f, 0xd2, 0xeb, 0xfc, 0xb2, 0xf7, 0xba, 0xd5, 0x97, 0xcc,
-    0xde, 0x4c, 0xf1, 0x3a, 0x99, 0x8b, 0xda, 0x6f, 0xe4, 0x9e, 0x38, 0xcf,
-    0x90, 0x6e, 0x26, 0x56, 0xce, 0xa2, 0x46, 0x54, 0xfa, 0xe1, 0xc6, 0xee,
-    0x09, 0xd5, 0x53, 0x8c, 0xff, 0x76, 0x5d, 0x4e, 0xa3, 0xf9, 0x6a, 0xc7,
-    0x95, 0x3f, 0x5a, 0x65, 0xad, 0x72, 0x33, 0xe0, 0xce, 0x87, 0xee, 0x4b,
-    0x03, 0xbf, 0xfc, 0xcd, 0xaf, 0x26, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x39,
-    0xaf, 0xff, 0x33, 0x6b, 0xc9, 0x9e, 0x68, 0x0e, 0xe0, 0x54, 0x51, 0x2b,
-    0xfe, 0x0b, 0xea, 0x53, 0xc7, 0x7f, 0xe6, 0xb2, 0xf1, 0xfd, 0xc5, 0x97,
-    0x8a, 0x1a, 0xb2, 0xff, 0x89, 0xfe, 0xeb, 0xf6, 0x4e, 0xb2, 0xfe, 0xf6,
-    0x67, 0x7d, 0x8b, 0x2b, 0x64, 0x4e, 0x18, 0xef, 0xe3, 0x7d, 0x38, 0xbf,
-    0x87, 0xa8, 0xde, 0x7b, 0xd6, 0x5f, 0xc7, 0xc9, 0xa4, 0x7f, 0xac, 0xbf,
-    0xb0, 0x62, 0x0d, 0xda, 0xb2, 0xff, 0x46, 0xc2, 0x4f, 0xb9, 0x7e, 0xb2,
-    0xe9, 0x33, 0x1a, 0x7c, 0x59, 0x0d, 0xe3, 0x3e, 0xf1, 0x8e, 0xf2, 0xf1,
-    0x0b, 0xaf, 0xee, 0x14, 0xe6, 0x40, 0xcd, 0x65, 0xff, 0x8b, 0x3f, 0x8f,
-    0xf5, 0xa8, 0x15, 0x65, 0x99, 0xc1, 0xf9, 0xf0, 0xce, 0xb4, 0x98, 0x47,
-    0xf0, 0xdf, 0xad, 0x2b, 0xc8, 0xe2, 0xd0, 0x65, 0xa2, 0x5f, 0xb4, 0x07,
-    0x70, 0x2a, 0x21, 0xc5, 0xfc, 0x10, 0x68, 0xe0, 0x96, 0x5f, 0x8c, 0xbb,
-    0x0d, 0x59, 0x66, 0x78, 0x88, 0x6f, 0x1a, 0x4f, 0x96, 0x5f, 0xf8, 0xc7,
-    0x8d, 0x2c, 0xfb, 0xae, 0xb2, 0xff, 0x6b, 0x01, 0xe8, 0xfa, 0x4b, 0x2c,
-    0x2a, 0xca, 0x83, 0xc6, 0xc3, 0x4a, 0x59, 0x7f, 0xf1, 0x3b, 0x00, 0xf1,
-    0xeb, 0x50, 0x2a, 0xcb, 0x88, 0x96, 0x5f, 0x01, 0xdc, 0x0a, 0x88, 0xbd,
-    0x7f, 0xb3, 0xef, 0xf8, 0xe7, 0xb2, 0xcb, 0xf1, 0x3f, 0xef, 0xc5, 0x97,
-    0xec, 0x9a, 0x4f, 0xc5, 0x95, 0x32, 0x31, 0xf4, 0x2a, 0x45, 0xdd, 0x35,
-    0x10, 0x9e, 0xf9, 0xbe, 0x3d, 0x2c, 0xbe, 0xdc, 0x32, 0x99, 0x65, 0xfd,
-    0x83, 0xf6, 0x7e, 0xeb, 0x2f, 0xa0, 0x2c, 0xbe, 0x2c, 0xac, 0x3f, 0x8e,
-    0x12, 0x8a, 0x5b, 0x70, 0x9c, 0x59, 0x69, 0x2c, 0xa8, 0x35, 0x2e, 0x31,
-    0x71, 0x6c, 0xb2, 0xff, 0xba, 0x50, 0xd1, 0x07, 0xe8, 0x59, 0x7e, 0x79,
-    0x36, 0x24, 0xb2, 0xa0, 0xfd, 0xcc, 0x5f, 0xc7, 0x37, 0xd3, 0x49, 0xe4,
-    0xb2, 0xee, 0x7c, 0xb2, 0xfb, 0xb2, 0x86, 0x12, 0x5f, 0x60, 0xfb, 0xc5,
-    0x95, 0x88, 0x80, 0x69, 0x1b, 0x8c, 0x11, 0x1d, 0xfe, 0x2c, 0xfa, 0x5c,
-    0x36, 0x16, 0x5f, 0xbd, 0x80, 0x79, 0x2c, 0xbf, 0x3f, 0xc1, 0x7e, 0xac,
-    0xba, 0x7c, 0x96, 0x5f, 0x9f, 0x6e, 0xe7, 0x96, 0x59, 0x9c, 0x2e, 0x9c,
-    0x6d, 0x08, 0x39, 0x10, 0x0c, 0x2f, 0x23, 0x0c, 0x34, 0xb9, 0xa1, 0x34,
-    0xd5, 0x8f, 0x42, 0x58, 0xa1, 0x5b, 0xc3, 0xae, 0x9a, 0x04, 0x9f, 0x79,
-    0x44, 0xf8, 0xcd, 0xff, 0x38, 0x19, 0xcb, 0x35, 0x92, 0x59, 0x7f, 0xff,
-    0xfc, 0x4e, 0xcf, 0x02, 0xcb, 0x36, 0x0f, 0xbe, 0xc3, 0x97, 0x27, 0x63,
-    0x11, 0x25, 0x97, 0xec, 0xe3, 0x47, 0x0b, 0x2f, 0xfc, 0xf2, 0x67, 0x9a,
-    0x03, 0xb8, 0x15, 0x13, 0x22, 0xcc, 0xf6, 0x4c, 0xc4, 0x07, 0x5a, 0x84,
-    0x23, 0x49, 0xef, 0x77, 0x1a, 0xb2, 0xef, 0x35, 0x65, 0xfb, 0x40, 0x77,
-    0x02, 0xa2, 0xde, 0x59, 0x9c, 0x1f, 0x38, 0xc7, 0x30, 0x5e, 0xe7, 0xdc,
-    0x59, 0x7f, 0xbf, 0x81, 0x85, 0xf5, 0x25, 0x97, 0xfe, 0x79, 0x33, 0xcd,
-    0x01, 0xdc, 0x0a, 0x8a, 0x4d, 0x66, 0x78, 0x89, 0x93, 0x19, 0x69, 0xa5,
-    0xcc, 0x89, 0xe5, 0x65, 0xff, 0xb8, 0x17, 0xfb, 0x5a, 0x0c, 0xdc, 0x59,
-    0x73, 0x7e, 0x59, 0x7f, 0x67, 0x4a, 0x21, 0xab, 0x2f, 0xef, 0xbf, 0x13,
-    0x4f, 0xfa, 0xcb, 0xbc, 0xcd, 0x92, 0x8d, 0x7c, 0x20, 0x6a, 0x17, 0x86,
-    0x1c, 0xae, 0xa1, 0x94, 0xff, 0x29, 0xd7, 0x2c, 0x94, 0x4b, 0xc8, 0x59,
-    0xef, 0x86, 0x70, 0x91, 0x86, 0xdf, 0xe6, 0x79, 0xa0, 0x3b, 0x81, 0x51,
-    0x0e, 0xaf, 0xda, 0x03, 0xb8, 0x15, 0x12, 0xc2, 0xfb, 0x3f, 0x69, 0xac,
-    0xbf, 0x33, 0x6b, 0xc9, 0x9e, 0x1e, 0xb4, 0xf9, 0xa5, 0xfe, 0x67, 0x9a,
-    0x03, 0xb8, 0x15, 0x11, 0x82, 0xf0, 0xb0, 0xd5, 0x97, 0xa4, 0x63, 0x59,
-    0x7e, 0x96, 0x71, 0xf8, 0xb2, 0xcc, 0xf0, 0xf8, 0x26, 0x1d, 0x08, 0xe5,
-    0xff, 0xf9, 0xff, 0x9f, 0xc6, 0x64, 0xfd, 0x96, 0x77, 0x06, 0xb2, 0xff,
-    0xfc, 0x6d, 0x3d, 0x33, 0xec, 0xfe, 0x7b, 0xb1, 0xf0, 0xab, 0x28, 0x91,
-    0xd9, 0xc3, 0x7e, 0xac, 0xdf, 0x33, 0x96, 0x71, 0x65, 0xff, 0xff, 0x4b,
-    0x8c, 0xc1, 0xe7, 0x98, 0x1e, 0xcd, 0x4f, 0x5e, 0x99, 0xbc, 0x59, 0x7e,
-    0xce, 0xff, 0x00, 0x59, 0x7f, 0xfa, 0x3a, 0x7f, 0xc4, 0x87, 0xe8, 0x20,
-    0x2c, 0xbe, 0x32, 0xfc, 0xd6, 0x5f, 0x01, 0xdc, 0x0a, 0x88, 0xf5, 0x52,
-    0x3c, 0xfd, 0x10, 0xdf, 0x71, 0xfe, 0xde, 0xb2, 0xe9, 0x33, 0xc3, 0xc7,
-    0xe9, 0x15, 0xff, 0xfc, 0xec, 0xc8, 0x39, 0xec, 0x2f, 0xf0, 0xbb, 0xec,
-    0x59, 0x66, 0x7f, 0x2a, 0x02, 0x99, 0xcb, 0x45, 0x0f, 0x0d, 0xf2, 0x2f,
-    0xbf, 0x68, 0x0e, 0xe0, 0x54, 0x58, 0x6b, 0xfd, 0x22, 0x8c, 0xe6, 0x12,
-    0xcb, 0x8e, 0x4b, 0x2c, 0xcf, 0x0f, 0xeb, 0xe3, 0x4f, 0xcc, 0x2f, 0x99,
-    0xfe, 0x58, 0xb2, 0xff, 0x10, 0x76, 0x32, 0x0b, 0x56, 0x5e, 0x82, 0xd9,
-    0x65, 0xf8, 0xa3, 0xf9, 0x35, 0x65, 0x19, 0xfb, 0xf8, 0xcf, 0xa3, 0x97,
-    0xff, 0xfd, 0x11, 0xc6, 0x7d, 0x19, 0xb7, 0xe9, 0x73, 0xe9, 0x66, 0xb6,
-    0x59, 0x4c, 0xd1, 0x34, 0x45, 0xd6, 0x8d, 0x93, 0x59, 0xd4, 0x66, 0xb7,
-    0xf9, 0x9e, 0x68, 0x0e, 0xe0, 0x54, 0x5c, 0xeb, 0xff, 0xff, 0xff, 0xa1,
-    0x95, 0xcb, 0x60, 0x7a, 0x74, 0xef, 0x4f, 0xb3, 0xd8, 0x2c, 0x4f, 0x08,
-    0x64, 0xfd, 0xb6, 0xc0, 0x6c, 0xe9, 0xde, 0x9f, 0x59, 0x50, 0xc8, 0x5e,
-    0xda, 0x12, 0xf2, 0x45, 0xc8, 0xe3, 0x40, 0x5e, 0x72, 0x89, 0x9b, 0x0d,
-    0x3f, 0x47, 0x23, 0xd3, 0x0d, 0xc4, 0x1b, 0xf6, 0x80, 0xee, 0x05, 0x44,
-    0x3c, 0xbf, 0xfd, 0xe3, 0x86, 0xb8, 0xc4, 0xdc, 0x82, 0x92, 0xcb, 0x33,
-    0xc4, 0x40, 0x70, 0xd2, 0xff, 0xed, 0xfa, 0x3e, 0x40, 0xdc, 0x8d, 0xab,
-    0x2f, 0xff, 0xff, 0xbd, 0x9a, 0xd4, 0x7d, 0x21, 0x3a, 0x64, 0x19, 0x67,
-    0x0b, 0x36, 0x12, 0x4b, 0x2f, 0x80, 0xee, 0x05, 0x44, 0x4c, 0xbf, 0xff,
-    0xda, 0x2c, 0xdb, 0x07, 0x82, 0x87, 0x58, 0x0f, 0x46, 0xf5, 0x97, 0xc1,
-    0x6e, 0x0d, 0x65, 0x42, 0x21, 0x77, 0x18, 0xef, 0xdd, 0xe6, 0xd8, 0x2a,
-    0xca, 0xc3, 0xcf, 0x72, 0x5b, 0x05, 0x65, 0xfe, 0xe8, 0x5f, 0xef, 0x46,
-    0xf5, 0x94, 0x04, 0xfa, 0x75, 0x08, 0x02, 0x8c, 0x0b, 0x84, 0x1d, 0x11,
-    0xbf, 0xe7, 0x72, 0xff, 0x47, 0x0c, 0x2c, 0xb8, 0x3b, 0x2c, 0xb8, 0xd9,
-    0x6b, 0x28, 0x8d, 0x90, 0xa3, 0x17, 0xf8, 0xb0, 0x5d, 0x67, 0xb8, 0xb2,
-    0xfd, 0xff, 0x27, 0x60, 0xd6, 0x5f, 0xe3, 0x17, 0x0b, 0x3e, 0xea, 0xca,
-    0x33, 0xde, 0xd1, 0x5d, 0xff, 0x47, 0xa3, 0x7b, 0x60, 0xb6, 0x59, 0x7f,
-    0xf0, 0x7b, 0xc2, 0x08, 0x7b, 0x28, 0x61, 0x65, 0xee, 0x39, 0x2c, 0xbf,
-    0xff, 0x46, 0xbf, 0xf4, 0x6f, 0x9a, 0x21, 0xbc, 0xc1, 0xac, 0xbf, 0xef,
-    0x7a, 0x37, 0xcb, 0x35, 0x0b, 0x2b, 0xc8, 0x92, 0x75, 0x8a, 0x99, 0x34,
-    0xf2, 0x3a, 0xe2, 0x37, 0x61, 0x5b, 0x7f, 0xc7, 0xd3, 0xee, 0x7f, 0x1a,
-    0x59, 0x7d, 0xb7, 0x83, 0xb2, 0xca, 0xc4, 0x50, 0x3a, 0x18, 0x4e, 0x2f,
-    0xcf, 0xb3, 0x63, 0x4b, 0x2f, 0xfc, 0xff, 0x72, 0x6d, 0xd3, 0x2e, 0xf1,
-    0x65, 0xc3, 0xf2, 0xcb, 0xff, 0xdd, 0x96, 0x6b, 0x4f, 0x2c, 0x6c, 0x01,
-    0x65, 0x61, 0xf0, 0x38, 0xbd, 0xff, 0x74, 0x3e, 0x81, 0xf8, 0xff, 0x59,
-    0x7f, 0xd1, 0x2c, 0x32, 0xc8, 0x61, 0x65, 0xff, 0xfb, 0xd1, 0xaf, 0xf9,
-    0x83, 0xe8, 0x5c, 0x19, 0xa5, 0x95, 0xba, 0x8c, 0x69, 0x8e, 0xba, 0x6d,
-    0x77, 0x5a, 0xb2, 0xff, 0xc2, 0x6d, 0xc8, 0x3f, 0xbb, 0x0d, 0x59, 0x7f,
-    0xf7, 0x1d, 0xc1, 0x80, 0x82, 0x80, 0x2c, 0xb6, 0x79, 0x10, 0x5c, 0x41,
-    0xbd, 0x1a, 0xe2, 0xcb, 0xff, 0xd9, 0xbc, 0xb3, 0x80, 0xf1, 0xee, 0x1f,
-    0x16, 0x5f, 0xf4, 0x48, 0x4c, 0xd7, 0x30, 0x55, 0x97, 0xfa, 0x50, 0xc1,
-    0xf9, 0xf6, 0x59, 0x5b, 0x1f, 0x71, 0x9d, 0x5e, 0x20, 0x8d, 0x65, 0x62,
-    0xa0, 0xaf, 0x8d, 0x3d, 0x09, 0x9f, 0xca, 0x08, 0x70, 0x30, 0xbb, 0x10,
-    0x8a, 0xff, 0x87, 0x9b, 0xf4, 0xfb, 0xfc, 0x6b, 0x2f, 0xc2, 0x86, 0x35,
-    0xb2, 0xca, 0x9c, 0x7c, 0xc2, 0x9e, 0x5f, 0xfc, 0x6f, 0xfe, 0xa0, 0xbb,
-    0xec, 0x92, 0xca, 0x33, 0xe8, 0xf1, 0x2d, 0xc6, 0xd5, 0x97, 0xd2, 0xf0,
-    0x9c, 0x59, 0x73, 0x88, 0xa8, 0x85, 0xd5, 0xf1, 0xe4, 0x04, 0x92, 0xa6,
-    0x44, 0x0f, 0x57, 0xaf, 0xde, 0xcd, 0x82, 0x4b, 0x2f, 0x9f, 0x51, 0xbd,
-    0x65, 0x0c, 0xf2, 0xff, 0x28, 0xbf, 0x4d, 0x2c, 0x72, 0x59, 0x7c, 0x44,
-    0x16, 0x16, 0x59, 0x9c, 0x33, 0x14, 0xf2, 0x51, 0x6b, 0x0a, 0xa6, 0xd5,
-    0x31, 0x0e, 0xa1, 0x23, 0xe9, 0x42, 0x0e, 0x5d, 0xf9, 0x41, 0x42, 0x8f,
-    0x92, 0xbc, 0x3b, 0x19, 0xf8, 0x61, 0x45, 0xbd, 0xbe, 0x7c, 0x8c, 0x42,
-    0x7b, 0xff, 0x68, 0x3b, 0x67, 0xa6, 0x28, 0x1a, 0xcb, 0xe2, 0x8c, 0x61,
-    0x65, 0xfe, 0xef, 0xb3, 0x3b, 0xec, 0x59, 0x7f, 0xb5, 0x05, 0x83, 0x1c,
-    0x2c, 0xbe, 0x18, 0x90, 0x4b, 0x2f, 0xff, 0xe3, 0xe8, 0x74, 0xfc, 0xc2,
-    0xf6, 0x61, 0x4b, 0x8b, 0x2a, 0x0f, 0xe9, 0xc8, 0xaf, 0xc1, 0xd7, 0xf3,
-    0xa1, 0x65, 0xde, 0x75, 0x97, 0x1b, 0x0b, 0x2c, 0x15, 0x95, 0x86, 0xfa,
-    0x61, 0x6e, 0x0b, 0xdd, 0xde, 0xac, 0xbd, 0xff, 0x19, 0xc2, 0xa0, 0xc1,
-    0xa0, 0x61, 0x0e, 0x8c, 0xbd, 0x0a, 0xbe, 0x10, 0x75, 0xa4, 0x42, 0xeb,
-    0xf0, 0xd9, 0xe1, 0xee, 0xac, 0xbf, 0xfc, 0x72, 0xe3, 0x3c, 0xfa, 0x4f,
-    0xb0, 0x80, 0x59, 0x50, 0x7f, 0x78, 0x59, 0x50, 0x99, 0x3f, 0xa3, 0x07,
-    0xbf, 0xe6, 0x43, 0x27, 0x59, 0xd3, 0xf0, 0x56, 0x5f, 0x70, 0xf6, 0x64,
-    0xac, 0xbf, 0x04, 0x88, 0xe4, 0xb2, 0x99, 0x08, 0x8e, 0x9e, 0x90, 0x78,
-    0x4f, 0x7f, 0xe6, 0x43, 0x24, 0xf6, 0x89, 0xc0, 0xe6, 0x2c, 0xb9, 0x94,
-    0x25, 0x97, 0xbd, 0x9a, 0x59, 0x4c, 0x84, 0x40, 0x4f, 0x49, 0x3e, 0x1b,
-    0xbf, 0x67, 0x4f, 0x58, 0xb2, 0xff, 0xb3, 0xa2, 0x6c, 0xfa, 0x39, 0x96,
-    0x5f, 0xd2, 0x65, 0x36, 0x64, 0xcf, 0x09, 0xe2, 0xb2, 0xf1, 0x67, 0x96,
-    0x5f, 0xc6, 0xdc, 0x8d, 0x30, 0xb2, 0x86, 0x79, 0x00, 0x1b, 0xbc, 0xca,
-    0xac, 0xae, 0x79, 0x59, 0x7f, 0xb3, 0x9c, 0xc3, 0x20, 0x2c, 0xa9, 0xe9,
-    0x37, 0x06, 0x49, 0x34, 0xf2, 0x77, 0x3d, 0xc2, 0x36, 0x78, 0x11, 0x11,
-    0x7d, 0xfc, 0xc8, 0x13, 0xde, 0xcd, 0x96, 0x5d, 0x3f, 0xf2, 0xcb, 0x79,
-    0x65, 0x32, 0x0f, 0x81, 0x95, 0x9a, 0x04, 0x6e, 0xf8, 0x78, 0x53, 0x2c,
-    0xb8, 0xfa, 0xb2, 0xdd, 0x33, 0x71, 0xe2, 0x2b, 0xfd, 0xf7, 0x7e, 0x90,
-    0x49, 0x85, 0x97, 0xfe, 0x89, 0x8b, 0x37, 0xbb, 0x5a, 0x6b, 0x29, 0xcf,
-    0xd8, 0x26, 0xf7, 0xff, 0xff, 0x78, 0x23, 0x3c, 0xd4, 0xc5, 0x9b, 0xfd,
-    0x83, 0x8e, 0x72, 0x18, 0x59, 0x7f, 0xf8, 0xe6, 0x96, 0x7d, 0x29, 0xcd,
-    0x77, 0x25, 0x97, 0x3e, 0xe2, 0xcb, 0xff, 0xfd, 0xcc, 0xec, 0xef, 0x60,
-    0x20, 0x52, 0xc1, 0xf8, 0xe6, 0x59, 0x66, 0x4e, 0x27, 0xf2, 0xc4, 0x27,
-    0x00, 0x43, 0xe7, 0x47, 0x4c, 0xe8, 0xcd, 0xd3, 0xec, 0x2c, 0xbf, 0xff,
-    0x0e, 0x76, 0x70, 0xb6, 0xd9, 0xf7, 0x67, 0x4e, 0xf4, 0xfa, 0xcb, 0xe7,
-    0x94, 0x7e, 0xb2, 0xfd, 0xe7, 0xeb, 0xc9, 0x65, 0xfc, 0x7a, 0x2c, 0xcd,
-    0x2c, 0xbc, 0x0d, 0xbc, 0xb2, 0xfd, 0x1c, 0x65, 0x56, 0x43, 0x21, 0x65,
-    0xcd, 0x6a, 0xca, 0xe1, 0xe7, 0x04, 0xde, 0xfd, 0x1c, 0x0f, 0x8d, 0x65,
-    0x4e, 0x45, 0xac, 0x9b, 0x38, 0x45, 0x7f, 0x44, 0x9f, 0x4e, 0x05, 0x97,
-    0xf8, 0xb3, 0xe9, 0x13, 0xec, 0xb2, 0xb4, 0x7b, 0xfc, 0x2c, 0xbf, 0x70,
-    0x2e, 0x5f, 0xac, 0xb3, 0x67, 0x1e, 0x57, 0x48, 0xaf, 0x70, 0xff, 0x59,
-    0x58, 0x78, 0xe6, 0x55, 0x78, 0x51, 0x45, 0x49, 0x7e, 0x72, 0xef, 0xb1,
-    0x23, 0x33, 0x41, 0x7f, 0xff, 0xf4, 0x6d, 0x3b, 0x81, 0x8f, 0xbb, 0xec,
-    0x6e, 0x74, 0xa3, 0xff, 0xe1, 0x65, 0xd3, 0xf8, 0xb2, 0xfb, 0xb3, 0x67,
-    0x56, 0x58, 0x6b, 0x28, 0x68, 0xc3, 0xc7, 0x67, 0x19, 0x09, 0x1d, 0x0d,
-    0x37, 0x6f, 0xd0, 0x0a, 0x1f, 0x77, 0xef, 0x14, 0xf1, 0x9f, 0xdc, 0x59,
-    0x73, 0xba, 0xcb, 0x78, 0xcf, 0x25, 0xcd, 0x2f, 0xff, 0xef, 0xf5, 0x13,
-    0xb5, 0x1d, 0xfa, 0x50, 0xc6, 0x9c, 0x55, 0x97, 0xc2, 0x71, 0xff, 0x59,
-    0x78, 0xe6, 0xf2, 0xcb, 0xff, 0x1c, 0xd3, 0xbd, 0x07, 0xa0, 0xee, 0xac,
-    0xa8, 0x47, 0x36, 0x98, 0x7c, 0x49, 0xf8, 0xed, 0xfd, 0xa3, 0xdc, 0xd7,
-    0x38, 0xb2, 0xfe, 0x20, 0xf4, 0xf6, 0x85, 0x97, 0xfa, 0x0a, 0x39, 0x06,
-    0xd5, 0x97, 0x9f, 0xbc, 0x59, 0x63, 0x60, 0xf3, 0x34, 0x61, 0x7e, 0xde,
-    0x19, 0x67, 0x16, 0x5f, 0x7e, 0x64, 0x15, 0x95, 0x87, 0x98, 0x12, 0xab,
-    0xec, 0x1e, 0x6c, 0xb2, 0xfb, 0x76, 0x74, 0x4f, 0x4b, 0x2f, 0xf1, 0x44,
-    0xfe, 0x11, 0xb0, 0xb2, 0xff, 0x75, 0xfe, 0xe3, 0xfc, 0x2a, 0xcb, 0xb5,
-    0x0b, 0x2a, 0x7a, 0x5f, 0xfa, 0x1b, 0x26, 0x11, 0x00, 0x9f, 0xe8, 0x70,
-    0x1c, 0xa9, 0x8d, 0xd7, 0xf9, 0xa3, 0x0c, 0xd1, 0xeb, 0x4c, 0x7c, 0xf2,
-    0x4e, 0x9d, 0x21, 0xde, 0x45, 0x3e, 0x58, 0x21, 0xa6, 0xe1, 0xb5, 0xe2,
-    0xce, 0xac, 0xbf, 0xfd, 0xf4, 0xb9, 0xc8, 0x3f, 0xbb, 0xd8, 0x6a, 0xca,
-    0x23, 0xe7, 0x14, 0x6e, 0xff, 0xdb, 0x61, 0x40, 0xbd, 0x61, 0xf8, 0xb2,
-    0xff, 0x66, 0xf7, 0x30, 0x61, 0x2c, 0xb8, 0xbb, 0x87, 0xe4, 0x48, 0x17,
-    0xd1, 0x83, 0x35, 0x94, 0x67, 0x96, 0x29, 0x5d, 0xe0, 0xf7, 0x8b, 0x2f,
-    0xfb, 0x75, 0xfb, 0x34, 0x8f, 0x53, 0x2c, 0xbf, 0xe8, 0x90, 0xaf, 0xae,
-    0xc6, 0x2c, 0xbf, 0xff, 0xff, 0xee, 0x4e, 0xf6, 0x6d, 0x02, 0xfd, 0x2e,
-    0x4e, 0x08, 0x35, 0xa8, 0x9d, 0x33, 0x1f, 0x4e, 0x9d, 0xe9, 0xf5, 0x97,
-    0xf7, 0xd3, 0xa6, 0xcc, 0x02, 0xca, 0x85, 0x4e, 0x19, 0x0d, 0xf0, 0x11,
-    0x38, 0xe9, 0x1f, 0x74, 0xe0, 0x30, 0xab, 0xbf, 0x7a, 0x3f, 0x8d, 0xd5,
-    0x96, 0x15, 0x65, 0xfd, 0x29, 0x36, 0x68, 0xdc, 0x59, 0x6f, 0xd6, 0x51,
-    0xa2, 0x07, 0xf2, 0xb2, 0x12, 0x09, 0x95, 0xd3, 0xf0, 0xb2, 0xe8, 0x6a,
-    0xcb, 0xa3, 0xe5, 0x94, 0x33, 0x5b, 0x30, 0xb5, 0x11, 0xf4, 0x75, 0x1a,
-    0xe9, 0xf6, 0x42, 0xcb, 0xff, 0xdf, 0xc1, 0x02, 0x76, 0x10, 0x65, 0x9c,
-    0x59, 0x7f, 0x9f, 0xef, 0xf4, 0x7f, 0x7e, 0xb2, 0xff, 0xc1, 0x6c, 0x67,
-    0x0b, 0x37, 0xba, 0xcb, 0xfd, 0xfb, 0x96, 0x6c, 0x24, 0x96, 0x57, 0xc8,
-    0xf5, 0xf2, 0x5f, 0x0d, 0xfa, 0x7d, 0x7a, 0x74, 0x80, 0xb2, 0xa1, 0x51,
-    0xae, 0x42, 0x91, 0x82, 0x13, 0x8c, 0x4d, 0xa7, 0xd7, 0xff, 0xf6, 0xa7,
-    0x16, 0x6f, 0xcd, 0x4a, 0x74, 0x0d, 0xe6, 0xe2, 0xcb, 0xff, 0xb0, 0x5d,
-    0xc6, 0x84, 0xdb, 0x85, 0xfa, 0xcb, 0xff, 0xff, 0x7d, 0x0c, 0x16, 0x0f,
-    0xc7, 0x34, 0xee, 0x67, 0xd2, 0xd6, 0x0a, 0xb2, 0x8d, 0x17, 0x44, 0x91,
-    0x58, 0x99, 0xe1, 0x46, 0x37, 0x7d, 0xd0, 0xc6, 0xcb, 0x2f, 0xe9, 0x3e,
-    0xb8, 0x63, 0x59, 0x7f, 0x67, 0xb1, 0xb0, 0x05, 0x95, 0x07, 0xb3, 0x22,
-    0xdb, 0xf1, 0xe8, 0xf7, 0xe2, 0xca, 0x34, 0x62, 0xf5, 0xf3, 0x70, 0x86,
-    0xfa, 0x7f, 0x35, 0x0b, 0x2f, 0xff, 0xef, 0xa5, 0xc6, 0xe1, 0x4e, 0xdc,
-    0x3f, 0x6c, 0x79, 0xa5, 0x96, 0xdd, 0x59, 0x58, 0x7e, 0xa0, 0x61, 0xbf,
-    0xff, 0xc5, 0x80, 0xf1, 0x96, 0x07, 0xee, 0xce, 0x71, 0x71, 0x85, 0x97,
-    0xfe, 0xc0, 0x3e, 0xde, 0xc0, 0x61, 0x2c, 0xb0, 0xb3, 0x91, 0x41, 0xe6,
-    0x3b, 0xfc, 0xc0, 0xc3, 0x1e, 0x28, 0x59, 0x7f, 0x4b, 0x8c, 0x06, 0x3e,
-    0x59, 0x7d, 0x83, 0x79, 0x2c, 0xaf, 0x8f, 0x44, 0x53, 0x0b, 0xed, 0x44,
-    0x6c, 0xb2, 0xfa, 0x68, 0xeb, 0xac, 0xb9, 0xc5, 0xe1, 0xe2, 0x04, 0x8a,
-    0xf6, 0xfe, 0x88, 0xb2, 0xa1, 0x36, 0x6c, 0x2c, 0x38, 0x42, 0x13, 0x40,
-    0xa5, 0xd7, 0xff, 0xe2, 0xc1, 0xf8, 0x22, 0xf0, 0xfb, 0xe3, 0x7f, 0xd6,
-    0x5f, 0xe2, 0xcd, 0xf3, 0xa4, 0xd9, 0x2c, 0xad, 0x22, 0x37, 0x8a, 0xd7,
-    0x73, 0x7a, 0xca, 0x83, 0x78, 0x12, 0x3b, 0xef, 0xfa, 0x7b, 0x2c, 0xbf,
-    0xdd, 0xf1, 0x97, 0xe2, 0x35, 0x65, 0xff, 0xfd, 0xe3, 0xc2, 0xc3, 0x1e,
-    0x47, 0xee, 0x07, 0xd2, 0xcb, 0xfd, 0xb4, 0x34, 0xa3, 0xef, 0xd6, 0x54,
-    0x91, 0x83, 0xf1, 0xab, 0xab, 0xdf, 0xbd, 0x39, 0xf3, 0x8b, 0x2a, 0x0f,
-    0x67, 0x0c, 0x2c, 0x15, 0x97, 0xf7, 0x4a, 0x25, 0x9d, 0x59, 0x78, 0x57,
-    0xe2, 0xcb, 0xcf, 0xa9, 0x4e, 0x3c, 0x9f, 0x16, 0x54, 0x2f, 0x81, 0x64,
-    0x3b, 0x7e, 0x32, 0x38, 0x4c, 0xea, 0x51, 0x3f, 0xa3, 0x16, 0x72, 0x02,
-    0x8c, 0xfb, 0x84, 0x01, 0x5a, 0xb6, 0xea, 0xcb, 0x75, 0x65, 0xd1, 0xfa,
-    0xcb, 0xff, 0xc6, 0x16, 0x5c, 0x4e, 0xe0, 0x7f, 0x6e, 0x75, 0x65, 0x7c,
-    0x7d, 0x1a, 0x17, 0xbf, 0xf4, 0x03, 0x90, 0x7f, 0x76, 0x1a, 0xb2, 0x96,
-    0x5e, 0xd0, 0x77, 0x56, 0x54, 0x8d, 0x5f, 0x42, 0xe8, 0x91, 0x14, 0x16,
-    0x9b, 0xef, 0xf9, 0xb7, 0x56, 0x5f, 0xf9, 0xd8, 0x9d, 0xd7, 0x72, 0x9d,
-    0xb2, 0xca, 0x83, 0xe8, 0x22, 0x5b, 0xcf, 0xde, 0x2c, 0xb8, 0x3b, 0x2c,
-    0xa9, 0x1b, 0x4d, 0x0e, 0x5f, 0xb2, 0x5e, 0x79, 0x2c, 0xb8, 0xbb, 0x31,
-    0xe4, 0x78, 0x86, 0xff, 0x39, 0x09, 0xef, 0x40, 0xd6, 0x5f, 0xc1, 0x04,
-    0xe1, 0xfc, 0x2a, 0xcb, 0xfc, 0x2f, 0xb0, 0xbe, 0x86, 0x16, 0x5f, 0xe0,
-    0x7b, 0x3b, 0xac, 0x15, 0x65, 0x41, 0xf4, 0x99, 0xad, 0xda, 0x92, 0xcb,
-    0xfc, 0xc3, 0xf3, 0x3a, 0x26, 0xcb, 0x2f, 0xa7, 0x00, 0x58, 0x59, 0x52,
-    0x3d, 0xb6, 0x9b, 0x54, 0x27, 0x63, 0xf1, 0x71, 0x99, 0xea, 0x13, 0x8d,
-    0x20, 0x77, 0x2b, 0xfb, 0x83, 0x27, 0x7f, 0x2c, 0xbf, 0xda, 0x81, 0xc7,
-    0xa2, 0x4b, 0x2f, 0xff, 0xfc, 0x7f, 0x75, 0xfc, 0x58, 0x3f, 0x1c, 0xdc,
-    0x06, 0x19, 0x4c, 0xb2, 0xff, 0xfa, 0x3b, 0x38, 0x83, 0xb9, 0x3b, 0x3b,
-    0x3f, 0x9d, 0x59, 0x46, 0x8f, 0x7d, 0x19, 0x05, 0xb2, 0xe7, 0xea, 0xcb,
-    0xff, 0xbd, 0x0c, 0x4e, 0xe9, 0x3f, 0x63, 0xab, 0x2f, 0xf4, 0xef, 0xa4,
-    0x7e, 0x0b, 0x56, 0x57, 0x91, 0x27, 0xf8, 0xb1, 0x23, 0x5f, 0x85, 0x7f,
-    0x4c, 0xc8, 0x59, 0x7f, 0xd8, 0x39, 0xdd, 0x60, 0xc5, 0xe2, 0xcb, 0x66,
-    0x8f, 0xaf, 0x79, 0x75, 0xfc, 0xfe, 0x62, 0x34, 0xeb, 0x2f, 0xfd, 0xa9,
-    0xa7, 0x72, 0x0f, 0x67, 0xea, 0xca, 0x84, 0xcc, 0xc7, 0x09, 0xb2, 0x29,
-    0x09, 0x6d, 0xcf, 0xfa, 0xcb, 0xff, 0xe9, 0xc5, 0x1c, 0x8d, 0x8b, 0x07,
-    0xe3, 0x99, 0x65, 0xff, 0xff, 0xdc, 0xd1, 0x44, 0xd3, 0x84, 0xe9, 0xcb,
-    0x3e, 0xee, 0x6f, 0x2c, 0xe2, 0xca, 0xd2, 0x32, 0x09, 0x46, 0xba, 0x98,
-    0x08, 0x61, 0xbf, 0x4b, 0x2f, 0x76, 0x73, 0x0b, 0x2e, 0x9a, 0x4b, 0x2a,
-    0x0f, 0x0f, 0xe0, 0xbd, 0x10, 0x5f, 0xfc, 0x5d, 0xe6, 0xf3, 0xec, 0x61,
-    0x4c, 0xb2, 0xfd, 0xa3, 0xe4, 0x7c, 0xb2, 0xb0, 0xfb, 0x5d, 0x16, 0xfe,
-    0x64, 0xcd, 0x23, 0xef, 0x16, 0x5e, 0xe0, 0x9c, 0x59, 0x5b, 0x1e, 0x8b,
-    0x4c, 0xee, 0x8f, 0xd6, 0x5f, 0x8b, 0xbe, 0xcd, 0xc5, 0x97, 0xe9, 0xb8,
-    0xfa, 0x61, 0x65, 0xe7, 0x17, 0x50, 0x7a, 0x98, 0x55, 0x7f, 0xc4, 0xc4,
-    0x4c, 0x65, 0x0d, 0x59, 0x7f, 0x30, 0xf2, 0x28, 0x6a, 0xca, 0x83, 0xe5,
-    0x33, 0x8a, 0x92, 0x76, 0xc6, 0xe3, 0x31, 0x1e, 0x9a, 0xfd, 0x09, 0x7b,
-    0xe3, 0x03, 0xe9, 0x65, 0xe6, 0xb8, 0xab, 0x2d, 0xc9, 0x1b, 0xe7, 0x21,
-    0xbf, 0xc6, 0x3c, 0x29, 0x7b, 0x16, 0x5f, 0xf7, 0x8f, 0x53, 0x79, 0xf3,
-    0x4b, 0x2f, 0xff, 0xff, 0xef, 0xf8, 0x58, 0xff, 0x4e, 0x1f, 0x83, 0x38,
-    0xb3, 0xe9, 0x60, 0x76, 0x2c, 0x7f, 0x96, 0x50, 0x11, 0x90, 0x67, 0x37,
-    0x38, 0x15, 0x14, 0xc2, 0xcc, 0x2c, 0xa7, 0x36, 0xa1, 0x23, 0xa8, 0x4e,
-    0x5b, 0x62, 0x6c, 0x87, 0xc8, 0x15, 0xef, 0xfd, 0x85, 0xf4, 0xb9, 0xd8,
-    0xd4, 0xcb, 0x2f, 0xfc, 0xff, 0x61, 0xe8, 0xdb, 0x0c, 0x2c, 0xbd, 0x87,
-    0xfa, 0xcb, 0x62, 0xcb, 0x67, 0xe6, 0xb3, 0x78, 0xe5, 0x2c, 0xb7, 0xc4,
-    0x6d, 0x38, 0x53, 0x46, 0x98, 0x2e, 0x90, 0x1e, 0x13, 0xd7, 0xb0, 0x3a,
-    0x59, 0x69, 0x96, 0x5f, 0x07, 0x3e, 0x25, 0x95, 0xb1, 0xb4, 0x68, 0x95,
-    0x85, 0x59, 0x71, 0x8d, 0x65, 0x6e, 0x9a, 0x8e, 0x09, 0x5c, 0x39, 0x96,
-    0x5f, 0xf6, 0xb0, 0x7e, 0x81, 0x5a, 0x15, 0x97, 0x31, 0xb2, 0xca, 0x84,
-    0x6c, 0xe2, 0x53, 0x49, 0x3c, 0x30, 0x29, 0xd5, 0xfb, 0x1a, 0xd7, 0x6a,
-    0xcb, 0x9b, 0xfa, 0xcb, 0xbc, 0xf3, 0x91, 0x11, 0xa4, 0x9f, 0xc9, 0xef,
-    0xed, 0x47, 0x49, 0xff, 0x59, 0x5a, 0x3e, 0xbd, 0xc3, 0xeb, 0xfd, 0x3b,
-    0xe9, 0x14, 0x67, 0x16, 0x57, 0xca, 0x9d, 0x8e, 0x50, 0xe3, 0x92, 0xdf,
-    0xff, 0xbf, 0x3e, 0x4e, 0xf3, 0xf3, 0xb1, 0x37, 0x3d, 0x8b, 0x29, 0x65,
-    0xfc, 0x13, 0x19, 0x91, 0xac, 0xb3, 0x06, 0x6d, 0x9a, 0x17, 0x7e, 0x7e,
-    0x79, 0xe4, 0xb2, 0xf9, 0xe4, 0x6d, 0x59, 0x7e, 0x03, 0xeb, 0x00, 0xb2,
-    0xfe, 0x2e, 0xcb, 0x3f, 0xe2, 0xcb, 0xcc, 0x3f, 0x27, 0x1e, 0xab, 0x93,
-    0xd7, 0x91, 0x57, 0xd7, 0x6a, 0xd2, 0x63, 0x9e, 0x27, 0x16, 0x1a, 0x57,
-    0xf1, 0xf9, 0xcf, 0x68, 0x59, 0x7a, 0x51, 0xf2, 0xcb, 0xff, 0xf1, 0x67,
-    0xdd, 0x9d, 0xe7, 0xdf, 0x38, 0x7e, 0x0e, 0xcb, 0x2f, 0xde, 0x8d, 0xb0,
-    0x55, 0x96, 0x6c, 0x22, 0x1c, 0x6b, 0xd7, 0xdd, 0x96, 0x75, 0x65, 0x42,
-    0x6a, 0x38, 0x6f, 0xf1, 0x63, 0xc2, 0x90, 0x25, 0x17, 0xef, 0x1f, 0x23,
-    0xe5, 0x97, 0xef, 0x80, 0x51, 0xbd, 0x65, 0xfc, 0xfa, 0x9a, 0x47, 0xe5,
-    0x97, 0xf8, 0x3b, 0x78, 0xf7, 0xe4, 0xcb, 0x2f, 0xfc, 0xff, 0x70, 0x4f,
-    0x7a, 0x08, 0x0b, 0x2a, 0x11, 0xef, 0x85, 0x0e, 0x55, 0xc2, 0xe0, 0x9b,
-    0xdd, 0xce, 0x2c, 0xb6, 0x2c, 0xbf, 0xf4, 0xc6, 0xc1, 0xf4, 0xb3, 0x72,
-    0x76, 0x8d, 0x3e, 0xf1, 0x7b, 0xff, 0xfc, 0x58, 0x0e, 0xf6, 0x3b, 0xc9,
-    0x8b, 0x05, 0x9d, 0x13, 0xd2, 0xcb, 0xff, 0x02, 0x1b, 0xec, 0xe6, 0x19,
-    0x2c, 0xa8, 0x45, 0x27, 0x9a, 0x2f, 0xda, 0x8d, 0xf1, 0xa5, 0x97, 0xfe,
-    0x3d, 0x4e, 0xce, 0x70, 0xf0, 0x55, 0x97, 0xf3, 0x94, 0xe1, 0xc1, 0x2c,
-    0xa8, 0x4e, 0xe3, 0x23, 0x00, 0x32, 0x2e, 0x14, 0x85, 0x02, 0xff, 0xa0,
-    0x50, 0x1e, 0xd9, 0xf7, 0x56, 0x5e, 0x8d, 0x49, 0x65, 0xff, 0xfe, 0xd0,
-    0x7e, 0x97, 0x27, 0x41, 0x0f, 0xd1, 0x3f, 0x9a, 0x85, 0x95, 0x3c, 0xb7,
-    0x28, 0x6c, 0xaa, 0x29, 0x0f, 0x3b, 0x42, 0xb6, 0x50, 0x8a, 0x1c, 0xa4,
-    0xdc, 0x5b, 0x62, 0x32, 0x30, 0x47, 0xeb, 0xf4, 0x68, 0x46, 0xd9, 0x34,
-    0xa5, 0x2d, 0x4a, 0x24, 0x6c, 0x68, 0xfe, 0x95, 0x55, 0xf9, 0xc1, 0x4a,
-    0xfc, 0xe4, 0x68, 0xbd, 0x94, 0x4d, 0xbd, 0x38, 0x53, 0xbd, 0xc1, 0xcb,
-    0xfe, 0xd3, 0x8b, 0x39, 0xc6, 0xfb, 0x2c, 0xbf, 0x9c, 0x59, 0x88, 0xc6,
-    0xb2, 0xf1, 0xec, 0xd5, 0x97, 0xfb, 0xef, 0x67, 0xed, 0x80, 0x2c, 0xbf,
-    0xff, 0xb3, 0x67, 0x2e, 0xf2, 0x01, 0x39, 0xad, 0x32, 0x02, 0xcb, 0xfa,
-    0x5c, 0x9a, 0x51, 0x32, 0xca, 0x1a, 0x23, 0x3e, 0x5c, 0xbf, 0x87, 0xc7,
-    0x8f, 0xa4, 0xb2, 0xa0, 0xf4, 0x9c, 0x92, 0xff, 0x4d, 0xe3, 0x86, 0xb8,
-    0xd6, 0x5f, 0xe9, 0xda, 0xc3, 0xf4, 0x0d, 0x65, 0x41, 0xf3, 0x91, 0x9d,
-    0x30, 0xa9, 0x07, 0x47, 0x9e, 0x2e, 0x71, 0xd2, 0x8c, 0x4c, 0x30, 0x87,
-    0xbe, 0xc2, 0x63, 0x75, 0x65, 0xff, 0xff, 0xfb, 0xc7, 0xdf, 0x66, 0xa3,
-    0x7c, 0xe6, 0x87, 0x72, 0x76, 0x7d, 0x2c, 0x09, 0x7f, 0xc5, 0x96, 0xe9,
-    0xa2, 0xcf, 0x84, 0xb7, 0xa6, 0x36, 0xac, 0xbf, 0xf3, 0x5a, 0x73, 0x79,
-    0xca, 0x21, 0x65, 0xfe, 0x79, 0x4d, 0xe3, 0xfb, 0xab, 0x2f, 0xfa, 0x41,
-    0x2e, 0xc6, 0xf7, 0xf2, 0xcb, 0xff, 0x40, 0x27, 0x13, 0xf1, 0xb0, 0x4b,
-    0x2f, 0xe0, 0xf6, 0x77, 0xff, 0x7e, 0xb2, 0xff, 0xf7, 0x8c, 0x1e, 0xc9,
-    0xdc, 0x0f, 0xa3, 0x75, 0x65, 0xfc, 0x51, 0xf4, 0x8c, 0x96, 0x52, 0xcb,
-    0xfd, 0x9e, 0x2c, 0xef, 0x8d, 0x65, 0x0c, 0xfa, 0x08, 0xb3, 0xa1, 0x77,
-    0xfd, 0xd8, 0x97, 0x26, 0x94, 0x6c, 0xb2, 0xd9, 0x89, 0x90, 0x7d, 0x0b,
-    0x7e, 0x97, 0x5f, 0xff, 0x77, 0xd9, 0xfc, 0xe6, 0xc6, 0x74, 0x78, 0x4b,
-    0x2c, 0x2a, 0xcb, 0xf9, 0xc7, 0xad, 0x07, 0x65, 0x97, 0xe8, 0xc2, 0xec,
-    0xfa, 0xcb, 0x4f, 0x2b, 0x29, 0x84, 0x40, 0x00, 0x49, 0xa5, 0xfc, 0x29,
-    0xbe, 0xe9, 0xeb, 0x16, 0x5b, 0xe9, 0xc7, 0xbf, 0x87, 0xd6, 0xe6, 0x26,
-    0xb4, 0xf1, 0x98, 0x50, 0xd5, 0xe2, 0x4c, 0x6a, 0xd3, 0xaf, 0x1f, 0x14,
-    0x6a, 0x9d, 0x8e, 0x56, 0xff, 0xff, 0xe9, 0x1f, 0x0b, 0x37, 0xfb, 0x26,
-    0xf4, 0x14, 0xd3, 0x9c, 0x07, 0xbd, 0x65, 0xff, 0xe3, 0xc1, 0x4b, 0x39,
-    0x9e, 0xf1, 0xf1, 0x65, 0xb3, 0xe4, 0x5f, 0xf5, 0xde, 0xff, 0xfe, 0x3c,
-    0x14, 0xb3, 0x6c, 0x0f, 0x49, 0xd8, 0x7e, 0x2c, 0xbf, 0xf6, 0x6b, 0xd1,
-    0x39, 0xfa, 0x18, 0x59, 0x7f, 0xff, 0xfa, 0x05, 0x2c, 0xdf, 0xec, 0xd6,
-    0xb3, 0xbc, 0xdc, 0xec, 0x73, 0xc7, 0x8b, 0x28, 0xd1, 0x75, 0xa3, 0xfb,
-    0xff, 0xfe, 0xc2, 0x62, 0x76, 0xa3, 0x79, 0xf7, 0x98, 0xc1, 0xe9, 0xfe,
-    0x59, 0x44, 0x9e, 0x57, 0x0a, 0x7b, 0x18, 0xa0, 0x84, 0x54, 0x6a, 0xcc,
-    0x83, 0x2b, 0xba, 0xff, 0xf1, 0x8e, 0x73, 0x4e, 0x74, 0x0d, 0xe6, 0xe2,
-    0xcb, 0xf7, 0x8f, 0xb8, 0xd5, 0x96, 0x92, 0xca, 0x64, 0x9b, 0x89, 0x13,
-    0xdb, 0x50, 0x8a, 0xbd, 0xa1, 0x0d, 0x7e, 0x94, 0x7d, 0x2e, 0x2c, 0xbf,
-    0xff, 0xff, 0xf6, 0x13, 0x13, 0x8f, 0xc1, 0x67, 0x31, 0xf6, 0x1a, 0x4e,
-    0xc7, 0x8d, 0x9e, 0x7b, 0xef, 0xe0, 0x69, 0x2f, 0xff, 0xfe, 0x01, 0x8a,
-    0x30, 0xea, 0x70, 0x63, 0x6e, 0x03, 0xc1, 0xf7, 0xce, 0x2a, 0xcb, 0x83,
-    0xb7, 0xc9, 0xa2, 0x99, 0x4f, 0x21, 0x45, 0x7f, 0x30, 0x59, 0xdf, 0x1a,
-    0xcb, 0x87, 0x8b, 0x2a, 0x19, 0x48, 0xf8, 0x50, 0x63, 0xbe, 0x9f, 0x33,
-    0x78, 0x6b, 0x14, 0x6e, 0x61, 0x43, 0x9f, 0x2d, 0xb6, 0xe2, 0xcb, 0x35,
-    0x65, 0xfe, 0x79, 0x63, 0x5c, 0xbf, 0x59, 0x7d, 0x9e, 0x89, 0x96, 0x5e,
-    0x68, 0x27, 0x4f, 0x27, 0xcb, 0xe1, 0x17, 0x32, 0xbf, 0xff, 0xfd, 0xa0,
-    0x16, 0x6f, 0x9d, 0xc3, 0xc2, 0xfe, 0x71, 0x66, 0xf2, 0xce, 0x6f, 0x59,
-    0x7f, 0xfb, 0xc1, 0xc2, 0x62, 0x77, 0x7e, 0x96, 0x12, 0xcb, 0xfd, 0x8e,
-    0xd9, 0xd3, 0xf0, 0xd5, 0x97, 0xff, 0xa5, 0x1c, 0xf0, 0x75, 0x9d, 0xe9,
-    0xb5, 0x65, 0x0d, 0x19, 0xc0, 0x4d, 0xf8, 0xde, 0xff, 0xfc, 0x18, 0x9c,
-    0x58, 0x3f, 0x1b, 0x03, 0x86, 0x3f, 0x59, 0x58, 0x9e, 0xbe, 0xa3, 0x4d,
-    0x23, 0x1b, 0xff, 0xdd, 0xf6, 0x6e, 0x76, 0x6c, 0xdd, 0x72, 0xfd, 0x65,
-    0xfe, 0x86, 0xb9, 0x7d, 0x28, 0x59, 0x63, 0x24, 0x41, 0xf5, 0x46, 0xf8,
-    0x59, 0xdc, 0x99, 0x65, 0xba, 0xb2, 0xa0, 0xdc, 0x39, 0x3d, 0xff, 0x8b,
-    0x62, 0xcd, 0xfc, 0x0c, 0x7c, 0xb2, 0xff, 0xbd, 0x1f, 0x4e, 0x9e, 0x3b,
-    0xff, 0x35, 0x97, 0xee, 0xfd, 0x23, 0x9f, 0x59, 0x43, 0x3f, 0x1e, 0x22,
-    0xd4, 0x23, 0x53, 0x68, 0x59, 0x51, 0xaa, 0x32, 0xe4, 0x2e, 0x3a, 0xbe,
-    0x18, 0x79, 0xdf, 0xb7, 0xee, 0x77, 0x3c, 0xb2, 0xff, 0xd9, 0xc0, 0xc3,
-    0x1c, 0x8d, 0x4c, 0xb2, 0x8c, 0xfb, 0x45, 0x2d, 0xbe, 0xd4, 0x9c, 0x6b,
-    0x2e, 0x70, 0x2c, 0xbf, 0x6b, 0x27, 0xcf, 0xf5, 0x97, 0xf8, 0x1e, 0x3f,
-    0x10, 0x76, 0x59, 0x7e, 0x8f, 0xbf, 0xd4, 0x2c, 0xa9, 0x1e, 0xef, 0x4d,
-    0x2b, 0x64, 0x55, 0x14, 0x22, 0x2f, 0x77, 0x19, 0x6b, 0x29, 0x92, 0x98,
-    0x44, 0x43, 0x03, 0x0a, 0x2f, 0xf4, 0x67, 0x7f, 0x10, 0xa4, 0xb2, 0xec,
-    0xf2, 0xca, 0x23, 0xca, 0x9f, 0x34, 0xb9, 0x88, 0x59, 0x76, 0x0d, 0x65,
-    0x4f, 0x4b, 0xf3, 0xbb, 0x3c, 0xca, 0x71, 0x43, 0x21, 0x6a, 0xe4, 0x5c,
-    0x8c, 0xab, 0xb0, 0x82, 0x09, 0x26, 0xf1, 0x7b, 0xf1, 0xf7, 0x99, 0xfa,
-    0xcb, 0xf7, 0xb3, 0x79, 0xef, 0x59, 0x7f, 0xff, 0xe2, 0x7e, 0xfa, 0x26,
-    0x9c, 0x59, 0xe3, 0xef, 0x02, 0x00, 0xc2, 0xcb, 0xb3, 0xf5, 0x97, 0xff,
-    0x17, 0xe5, 0x87, 0x37, 0xa0, 0x98, 0x59, 0x46, 0x7b, 0x6e, 0x2f, 0x7f,
-    0x4b, 0x9d, 0x38, 0xf9, 0x65, 0xfa, 0x0b, 0xcf, 0x25, 0x97, 0xa0, 0x70,
-    0xb2, 0x86, 0x78, 0x2d, 0x26, 0xa5, 0x97, 0xa0, 0x70, 0xb2, 0xfd, 0x9d,
-    0xe3, 0xcd, 0x38, 0xf2, 0x20, 0x89, 0xa1, 0x77, 0xd3, 0xcb, 0x2a, 0xcf,
-    0x73, 0xca, 0xcb, 0xe3, 0x72, 0x1a, 0xcb, 0x0b, 0x38, 0xf6, 0x46, 0x73,
-    0x7f, 0x7f, 0x8f, 0xf4, 0xb8, 0xb2, 0xa4, 0x98, 0x01, 0xc2, 0x9b, 0x85,
-    0x77, 0xc1, 0xf4, 0x35, 0x65, 0xff, 0xf0, 0x75, 0xa8, 0x2c, 0x60, 0xfd,
-    0xec, 0x11, 0x65, 0x61, 0xf9, 0x68, 0x8a, 0xfb, 0xd0, 0x12, 0x59, 0x7c,
-    0x17, 0xfb, 0xab, 0x2f, 0xff, 0xfe, 0x63, 0x35, 0xa3, 0x6c, 0xe9, 0xa4,
-    0x16, 0xfd, 0x2e, 0x72, 0x34, 0x05, 0x97, 0x79, 0xd6, 0x59, 0xcd, 0x11,
-    0xfb, 0xde, 0x6f, 0x68, 0xfe, 0x59, 0x52, 0x5c, 0xd3, 0x19, 0x46, 0x15,
-    0xb1, 0x0c, 0x8f, 0x88, 0x26, 0x8e, 0xdf, 0x50, 0xa7, 0x69, 0x0f, 0x88,
-    0x4a, 0x16, 0x5d, 0x29, 0xb6, 0xe2, 0xca, 0x59, 0x7f, 0x63, 0x47, 0xec,
-    0xe2, 0xcb, 0xfb, 0x80, 0x03, 0x93, 0x0b, 0x29, 0x94, 0x3e, 0x6d, 0x82,
-    0xfa, 0x5b, 0x7f, 0x8a, 0x76, 0xff, 0xa5, 0xc9, 0x96, 0x5f, 0xff, 0xe1,
-    0xfb, 0x3b, 0xd7, 0x20, 0x61, 0xe8, 0xdb, 0x0c, 0x2c, 0xbb, 0x6f, 0x96,
-    0x5f, 0xbc, 0xfb, 0xb1, 0xfa, 0xca, 0x1a, 0x37, 0x4c, 0xe9, 0xd7, 0xf7,
-    0x06, 0x6f, 0xd3, 0x84, 0xda, 0x36, 0x59, 0x7e, 0x2c, 0xf3, 0xf5, 0x65,
-    0x48, 0xf4, 0xe6, 0x2d, 0xbf, 0x98, 0x3f, 0xb8, 0x1e, 0x2c, 0xad, 0x1e,
-    0x99, 0x11, 0xd4, 0x2a, 0x17, 0xc8, 0xc4, 0x8e, 0x1c, 0x97, 0xfc, 0x12,
-    0x9d, 0x31, 0xec, 0x19, 0x96, 0x5f, 0xd8, 0x39, 0xa5, 0x1b, 0xab, 0x2b,
-    0x63, 0xef, 0xd1, 0xf5, 0xf6, 0x87, 0x84, 0xb2, 0xfb, 0xfe, 0x6e, 0x81,
-    0x65, 0x19, 0xe4, 0x04, 0x86, 0xfd, 0xfe, 0x74, 0x4d, 0x96, 0x5f, 0xfc,
-    0x2f, 0x79, 0xe0, 0xcd, 0x38, 0x5d, 0xdf, 0x96, 0x5b, 0xab, 0x2d, 0xc5,
-    0x97, 0xe1, 0x7b, 0x9e, 0x9c, 0xc1, 0xa2, 0xf8, 0x46, 0xa1, 0x1c, 0x18,
-    0x56, 0xee, 0x55, 0x3d, 0xae, 0x69, 0xca, 0x54, 0x89, 0xc2, 0xa7, 0xcd,
-    0x65, 0x18, 0x0d, 0xff, 0xd2, 0x7e, 0x66, 0xcf, 0xdd, 0xb0, 0x55, 0x97,
-    0xf7, 0xb0, 0x12, 0x86, 0xac, 0xbf, 0xde, 0xc9, 0x39, 0x67, 0xcb, 0x2b,
-    0x0f, 0x7f, 0xa5, 0xb7, 0xff, 0xfe, 0x94, 0x6d, 0xf4, 0xb8, 0x6c, 0x4e,
-    0xe6, 0x00, 0xda, 0x1d, 0x6c, 0xb2, 0xff, 0xff, 0x3f, 0xfc, 0xdb, 0x0c,
-    0xba, 0x59, 0xbe, 0x77, 0x05, 0x25, 0x95, 0xf2, 0x36, 0x09, 0xce, 0xfe,
-    0xf6, 0x17, 0xd0, 0xc2, 0xcb, 0xf9, 0xcb, 0xa1, 0xd6, 0xcb, 0x28, 0xd5,
-    0x0e, 0x94, 0x29, 0x7b, 0x0f, 0x91, 0x48, 0xc4, 0x2e, 0xb8, 0x7b, 0x8b,
-    0x2f, 0x61, 0xcc, 0xb2, 0xff, 0xc7, 0x93, 0x4e, 0xe4, 0x79, 0xf7, 0x56,
-    0x5f, 0xf6, 0x3f, 0xde, 0xce, 0xfe, 0xeb, 0x2f, 0xff, 0xa5, 0xc0, 0xe1,
-    0x4e, 0x2c, 0xf7, 0x9c, 0x6b, 0x2f, 0xfb, 0xec, 0x8f, 0xa6, 0x28, 0x6a,
-    0xcb, 0xfb, 0xee, 0x7b, 0x1f, 0x4b, 0x2f, 0xff, 0xfc, 0x6d, 0xd1, 0xe7,
-    0xc4, 0x1e, 0xc7, 0xa7, 0x6f, 0x3e, 0xcd, 0x0b, 0x29, 0xd1, 0x3d, 0xd2,
-    0xea, 0xd9, 0x3e, 0x21, 0x8e, 0x30, 0x87, 0xf1, 0xcf, 0x94, 0x3b, 0x0d,
-    0x8b, 0xff, 0xec, 0x7d, 0xbd, 0x07, 0xde, 0x46, 0xd9, 0xc5, 0x97, 0xfd,
-    0x9a, 0xda, 0x0f, 0x58, 0x4b, 0x2c, 0xd5, 0x93, 0x8d, 0xbd, 0xe2, 0xc1,
-    0xac, 0xa8, 0x37, 0xdf, 0x11, 0xdf, 0x8a, 0x30, 0x5d, 0x96, 0x5e, 0x9f,
-    0x0f, 0x56, 0x54, 0xf6, 0x79, 0x12, 0x28, 0xbf, 0xbe, 0xe6, 0x61, 0x30,
-    0xb2, 0xf9, 0xa2, 0x47, 0xeb, 0x2f, 0xff, 0x6c, 0x3d, 0x38, 0x0b, 0x37,
-    0xe8, 0xf8, 0xb2, 0xa1, 0x18, 0xb8, 0x4e, 0x65, 0xc1, 0x24, 0xbb, 0xbc,
-    0x59, 0x7f, 0x77, 0xcf, 0x30, 0x8d, 0x59, 0x73, 0xf9, 0x65, 0xd9, 0xc5,
-    0x97, 0x3e, 0x96, 0x5b, 0xf9, 0x1a, 0xcd, 0x0b, 0x5f, 0x3c, 0x84, 0x1a,
-    0xcb, 0x76, 0x0f, 0x2f, 0xc5, 0x14, 0xe8, 0xe4, 0xfc, 0xc0, 0xa1, 0x1b,
-    0x74, 0x0d, 0x65, 0xdc, 0x35, 0x97, 0x7d, 0xfa, 0xca, 0xf1, 0xe2, 0xb2,
-    0xc5, 0x82, 0x2d, 0x7f, 0x72, 0x3e, 0xff, 0x50, 0xb2, 0xe1, 0x9a, 0xca,
-    0x85, 0xec, 0xad, 0x95, 0xb2, 0x3f, 0xc0, 0x30, 0x1c, 0x31, 0x35, 0x19,
-    0x77, 0x8e, 0x9e, 0x1f, 0x64, 0xf3, 0xc3, 0x3d, 0xe5, 0xf7, 0xb7, 0xfb,
-    0x16, 0x5f, 0x1b, 0x63, 0xcb, 0x2f, 0xcf, 0xe9, 0xc3, 0x85, 0x94, 0x67,
-    0xd1, 0xe1, 0xee, 0x90, 0xdf, 0xdd, 0x28, 0x96, 0x75, 0x65, 0xf6, 0x13,
-    0xc9, 0x65, 0xf7, 0x78, 0x27, 0x27, 0x1e, 0x64, 0xf6, 0x59, 0x7f, 0xba,
-    0x7b, 0x67, 0x83, 0xd5, 0x97, 0xdd, 0xe4, 0x30, 0xb2, 0xd3, 0x2c, 0xbf,
-    0xb0, 0x39, 0xe0, 0x6c, 0xb2, 0xdf, 0x41, 0xe0, 0x70, 0x4a, 0xf7, 0xa0,
-    0x6b, 0x2a, 0x11, 0x4f, 0x8c, 0x73, 0x14, 0x5f, 0xd9, 0xaf, 0xcc, 0xba,
-    0xb2, 0xef, 0xbe, 0x59, 0x66, 0xce, 0x3c, 0x66, 0x96, 0xdf, 0xba, 0x7b,
-    0x13, 0xac, 0xbf, 0xfb, 0xbc, 0x9d, 0xb9, 0xdc, 0xf7, 0x4d, 0xab, 0x2a,
-    0x47, 0xe2, 0x44, 0xf7, 0xf7, 0x9e, 0x4d, 0xd1, 0xac, 0xbf, 0xf9, 0x86,
-    0x1f, 0xbc, 0xe9, 0x47, 0xd2, 0x59, 0x7f, 0x74, 0xa2, 0x59, 0xd5, 0x95,
-    0x07, 0xe7, 0x24, 0x7b, 0x8f, 0x8b, 0x2c, 0xd5, 0x97, 0xb5, 0x9f, 0x2c,
-    0xbd, 0x87, 0xb2, 0xcb, 0xe8, 0x6b, 0x4d, 0x65, 0xb3, 0x63, 0x7b, 0xd1,
-    0xca, 0x1a, 0x2a, 0x3c, 0x2d, 0xf8, 0x89, 0x2d, 0x5f, 0x6c, 0x1d, 0x01,
-    0x65, 0xff, 0x31, 0x05, 0x2c, 0xf1, 0xb5, 0x65, 0xce, 0xc6, 0xc7, 0xb9,
-    0xd2, 0x4b, 0xf1, 0xf3, 0x90, 0xd5, 0x94, 0x68, 0xef, 0x28, 0x4c, 0xef,
-    0x2f, 0xa8, 0x5d, 0x55, 0xc7, 0xa6, 0x10, 0x8e, 0x1b, 0x6d, 0x75, 0x78,
-    0x4d, 0xfe, 0x42, 0x50, 0xa0, 0x0c, 0x77, 0x17, 0xe1, 0x99, 0x38, 0xd6,
-    0x5e, 0xe0, 0xfe, 0x59, 0x77, 0xe0, 0x59, 0x7f, 0xfb, 0x26, 0xf4, 0x13,
-    0x05, 0x9d, 0xf0, 0x56, 0x53, 0x07, 0xc5, 0xe1, 0x8b, 0xe0, 0x05, 0xe4,
-    0xb2, 0xa7, 0x23, 0x16, 0x50, 0x80, 0xf8, 0x8e, 0x8d, 0x32, 0x3d, 0x43,
-    0xae, 0xfe, 0xd7, 0xb3, 0x41, 0xc5, 0x97, 0xff, 0xf6, 0x7d, 0x2e, 0x77,
-    0xd0, 0xd8, 0x31, 0xce, 0x89, 0xe9, 0x65, 0x62, 0x23, 0xcc, 0xb6, 0xff,
-    0x39, 0x4e, 0x07, 0x3f, 0x1a, 0xcb, 0xff, 0x07, 0x93, 0x9a, 0x27, 0x9f,
-    0xd0, 0xb2, 0xfd, 0x9d, 0x0e, 0x7c, 0xb2, 0xf3, 0x19, 0xf2, 0xcb, 0xa2,
-    0x69, 0xc7, 0x8d, 0xd2, 0x8a, 0x24, 0x5c, 0x06, 0x11, 0x17, 0xff, 0xff,
-    0xe0, 0x94, 0xe1, 0x5f, 0xe9, 0x69, 0xff, 0x9d, 0xc0, 0xc7, 0xde, 0xc3,
-    0x2c, 0x61, 0x65, 0xff, 0xff, 0xfe, 0x06, 0x00, 0xb3, 0xbe, 0x0f, 0x9f,
-    0xe9, 0x73, 0xba, 0xc1, 0x70, 0xc7, 0xde, 0x1a, 0xcb, 0xff, 0xfd, 0xd0,
-    0xe1, 0x4e, 0x3c, 0xe9, 0x47, 0xf3, 0xb0, 0xc6, 0xb2, 0xff, 0x9b, 0x8d,
-    0x9c, 0xdd, 0xdd, 0xf2, 0x59, 0x5a, 0x45, 0x1b, 0x58, 0xaf, 0xff, 0xb5,
-    0xac, 0xef, 0x3c, 0x79, 0x3b, 0xdf, 0xc2, 0xca, 0x84, 0xe9, 0xce, 0x33,
-    0x20, 0x91, 0xdf, 0xff, 0xd1, 0xec, 0x1b, 0x01, 0x8f, 0x67, 0x61, 0xaf,
-    0xd5, 0x95, 0x8a, 0xb0, 0x3d, 0x28, 0xc4, 0x26, 0xb7, 0xff, 0xff, 0xc7,
-    0x37, 0xb3, 0x9a, 0xc0, 0x4e, 0xf1, 0xe1, 0x66, 0xf2, 0xc1, 0x84, 0x96,
-    0x5f, 0xb0, 0x80, 0x23, 0x56, 0x5f, 0xfd, 0xec, 0x82, 0x98, 0xb3, 0xbc,
-    0x75, 0x96, 0x91, 0x23, 0xa3, 0xaf, 0xdb, 0x85, 0x17, 0xff, 0xd8, 0xd9,
-    0xdb, 0x9d, 0x8e, 0x4d, 0x27, 0xd6, 0xcb, 0x2f, 0xfe, 0x3d, 0x9d, 0xad,
-    0x39, 0xc3, 0x3d, 0xeb, 0x28, 0x68, 0x9f, 0xd2, 0xbd, 0xe9, 0x8f, 0x75,
-    0x65, 0xff, 0xfd, 0xd3, 0xdb, 0x07, 0x39, 0xaf, 0x2d, 0x1e, 0xce, 0xd5,
-    0x97, 0xfb, 0x67, 0x69, 0x46, 0xa6, 0x59, 0x7f, 0xdf, 0x63, 0x1f, 0xb7,
-    0x27, 0x6b, 0x11, 0x24, 0x6b, 0xd7, 0xdf, 0xbb, 0xcc, 0xb2, 0xd0, 0xb2,
-    0xf6, 0x16, 0xd3, 0x8d, 0x98, 0x08, 0xef, 0xff, 0xb0, 0x3a, 0x9d, 0x37,
-    0x82, 0xc1, 0xe1, 0x30, 0xb2, 0xff, 0xf9, 0xfb, 0x1a, 0x0b, 0x4f, 0x93,
-    0xb9, 0x2e, 0x2c, 0xbf, 0xed, 0x6d, 0x1b, 0x6c, 0x1d, 0x6c, 0xb2, 0xff,
-    0xd3, 0xa6, 0xf0, 0x58, 0x3c, 0x26, 0x16, 0x5f, 0xe2, 0x9d, 0xc0, 0xcf,
-    0x87, 0x4b, 0x2b, 0x0f, 0xf0, 0x28, 0x75, 0x08, 0xdb, 0xe4, 0x2e, 0xaf,
-    0xc3, 0xcf, 0x9c, 0x96, 0x5f, 0xfe, 0xda, 0x77, 0x3c, 0x19, 0xdd, 0xe7,
-    0x23, 0x4b, 0x2f, 0xfd, 0x28, 0xe8, 0x41, 0x3b, 0x9d, 0x35, 0x97, 0xff,
-    0xde, 0x8d, 0xa7, 0x16, 0x6f, 0x7f, 0x7a, 0x3e, 0x59, 0x7f, 0xff, 0xdf,
-    0x70, 0xf0, 0x59, 0xde, 0xce, 0xf3, 0x36, 0x9d, 0x86, 0x35, 0x94, 0x34,
-    0x60, 0x62, 0xa5, 0xff, 0xd9, 0xd3, 0xfa, 0x45, 0x13, 0xb7, 0x00, 0xb2,
-    0xff, 0x8b, 0x35, 0x80, 0xc3, 0x1a, 0xcb, 0xfb, 0x6e, 0xcc, 0x50, 0xd5,
-    0x97, 0xe7, 0x89, 0xa2, 0x65, 0x97, 0xec, 0x1f, 0x82, 0x2a, 0xcb, 0xa2,
-    0x69, 0xc7, 0xa2, 0x45, 0x17, 0xff, 0xf6, 0x6d, 0x86, 0x32, 0x0f, 0xa7,
-    0x40, 0xde, 0x6e, 0x2c, 0xbf, 0xec, 0x17, 0x3c, 0x7a, 0xf3, 0xac, 0xa8,
-    0x56, 0xbd, 0x84, 0xff, 0x28, 0x9c, 0x60, 0x33, 0x11, 0x79, 0x25, 0xcd,
-    0x8a, 0x10, 0x1c, 0x2f, 0xea, 0xed, 0x6c, 0xcd, 0x18, 0x19, 0x0b, 0x10,
-    0xee, 0x04, 0xae, 0x7f, 0xa3, 0x20, 0x38, 0x6b, 0xcc, 0x47, 0xa8, 0x59,
-    0x36, 0x10, 0xfe, 0x34, 0x25, 0x4e, 0x46, 0x5b, 0xd9, 0x70, 0xb7, 0xfb,
-    0xa5, 0x9d, 0xf6, 0x6c, 0xb2, 0xff, 0x85, 0x9d, 0xac, 0xfa, 0x46, 0xd5,
-    0x97, 0xfe, 0x7d, 0x7b, 0x3b, 0x04, 0x7f, 0xac, 0xbf, 0xfe, 0x2c, 0xda,
-    0x77, 0xe1, 0xee, 0x63, 0x7f, 0x15, 0x65, 0xf4, 0xba, 0x7b, 0x2c, 0xbf,
-    0xc0, 0x3e, 0x60, 0xe7, 0x0d, 0x65, 0xfd, 0xf4, 0xb9, 0x3b, 0xa6, 0xb2,
-    0xd9, 0xe3, 0xe6, 0x14, 0xd6, 0xff, 0xd2, 0x8c, 0xff, 0xd9, 0x84, 0x05,
-    0x97, 0xff, 0xbc, 0x64, 0x39, 0xc2, 0x00, 0xb3, 0xd8, 0xb2, 0xff, 0x9f,
-    0xbc, 0x9a, 0x41, 0x2e, 0xac, 0xac, 0x46, 0x14, 0xc7, 0xbf, 0xa5, 0xdf,
-    0xf7, 0x8d, 0xb1, 0x85, 0xde, 0x2c, 0xbf, 0xff, 0xc1, 0xee, 0x83, 0x34,
-    0xee, 0xcd, 0xe0, 0xff, 0xd3, 0xcd, 0xc5, 0x97, 0xd0, 0x08, 0x6c, 0xe4,
-    0x69, 0x80, 0xc4, 0x8d, 0xea, 0x15, 0xc7, 0xe1, 0x98, 0x0f, 0x74, 0x7a,
-    0xea, 0xa5, 0x08, 0x9d, 0xc8, 0xef, 0x6f, 0xff, 0xed, 0x63, 0xb6, 0x73,
-    0x0f, 0xf7, 0xb3, 0xde, 0x8e, 0xac, 0xbe, 0xcd, 0x4d, 0x25, 0x97, 0xff,
-    0x1f, 0xd2, 0xe4, 0xe1, 0x9e, 0xf8, 0x1a, 0xcb, 0xdf, 0x46, 0xea, 0xca,
-    0x60, 0xfa, 0x5d, 0x26, 0xfb, 0x3c, 0xfb, 0xd6, 0x5f, 0xd2, 0xcf, 0x66,
-    0xfe, 0x2c, 0xb6, 0x0c, 0xf4, 0xa6, 0x23, 0xbf, 0xff, 0x0f, 0xc1, 0xe4,
-    0xef, 0x1f, 0x7d, 0x9a, 0x8d, 0xeb, 0x2f, 0xec, 0xf8, 0xb3, 0x3f, 0x59,
-    0x58, 0x88, 0x72, 0x5a, 0xbf, 0x8a, 0x3e, 0xf6, 0x6c, 0xb2, 0xe8, 0x6e,
-    0x27, 0xfc, 0xc4, 0x23, 0x34, 0xe8, 0x50, 0xaf, 0xe9, 0x0d, 0xff, 0xda,
-    0x81, 0x77, 0x0a, 0x05, 0xfa, 0x5c, 0x59, 0x68, 0x59, 0x7c, 0x7a, 0x7f,
-    0x96, 0x5b, 0xa6, 0x6c, 0xb8, 0x21, 0x43, 0x45, 0x11, 0xbe, 0x5f, 0xf3,
-    0x90, 0x3c, 0x6d, 0x28, 0x59, 0x7f, 0xf0, 0xc9, 0xe6, 0x9a, 0x3b, 0xfe,
-    0x71, 0x65, 0xff, 0xf1, 0x46, 0xde, 0x83, 0xef, 0x0c, 0xbe, 0x92, 0xcb,
-    0x9a, 0x22, 0xcb, 0xa2, 0x65, 0x95, 0x06, 0xbc, 0xc6, 0x2f, 0xfe, 0x3d,
-    0xe6, 0x39, 0xd1, 0x30, 0xdc, 0x55, 0x97, 0xff, 0xff, 0x88, 0xd8, 0xf3,
-    0xcd, 0x38, 0x83, 0xb9, 0x3b, 0x3e, 0x96, 0x04, 0xbf, 0xe2, 0xcb, 0xf7,
-    0x8e, 0x0b, 0x65, 0x94, 0xd4, 0x54, 0x6f, 0x84, 0x0d, 0xf3, 0x4c, 0xc5,
-    0x59, 0x50, 0x79, 0x8e, 0x55, 0x44, 0x9b, 0xe7, 0x07, 0xfb, 0x19, 0xed,
-    0xfe, 0xd4, 0x6d, 0xe3, 0xc1, 0xac, 0xbe, 0x89, 0xb8, 0x6b, 0x2a, 0x4a,
-    0xc8, 0xc6, 0x45, 0x86, 0xc0, 0x46, 0x38, 0xfe, 0xb4, 0x6c, 0x46, 0x77,
-    0xff, 0xfd, 0x93, 0x4a, 0x34, 0xc3, 0x48, 0xfe, 0x97, 0x07, 0xa3, 0xd9,
-    0x65, 0xe8, 0x9b, 0x8b, 0x2e, 0x08, 0xd6, 0x5f, 0xdc, 0x22, 0xcf, 0xf8,
-    0xb2, 0xa6, 0x3c, 0x4e, 0x8b, 0xd4, 0x37, 0x51, 0x79, 0x4d, 0xcf, 0x39,
-    0xc7, 0x5d, 0x38, 0x7a, 0x52, 0xe3, 0xce, 0x12, 0x13, 0x4f, 0x5a, 0x82,
-    0xc3, 0x7f, 0x44, 0x8c, 0x78, 0x4b, 0x2f, 0x8b, 0xa7, 0xbd, 0x65, 0xf4,
-    0x82, 0xfd, 0x59, 0x78, 0x11, 0xba, 0xb2, 0xa0, 0xf9, 0x30, 0x8c, 0xc8,
-    0xaf, 0xbb, 0xc7, 0xfd, 0x65, 0xff, 0xde, 0x39, 0xc7, 0xa0, 0xec, 0xfa,
-    0x02, 0xcb, 0xe3, 0xf3, 0xec, 0xb2, 0xff, 0x1f, 0x0c, 0x2c, 0xb1, 0xc2,
-    0xcb, 0xd1, 0xd8, 0x59, 0x5d, 0x3d, 0x1d, 0xe6, 0xd7, 0xef, 0x34, 0xc8,
-    0x0b, 0x2f, 0xb3, 0xa7, 0xc5, 0x95, 0x87, 0x91, 0xc2, 0x7b, 0xdc, 0x71,
-    0x16, 0x5f, 0xfb, 0xbe, 0x3c, 0xc1, 0x96, 0x0a, 0xb2, 0xb0, 0xf6, 0x8c,
-    0x76, 0xff, 0xdc, 0x89, 0xb3, 0xc7, 0xaf, 0x3a, 0xcb, 0xb3, 0xcb, 0x28,
-    0xcf, 0x51, 0xa7, 0xd7, 0xb4, 0x6c, 0x2c, 0xbf, 0xfe, 0x0e, 0x1f, 0xb0,
-    0x1e, 0x39, 0xc2, 0xb4, 0x0b, 0x2f, 0x77, 0x05, 0x59, 0x7b, 0x03, 0xb1,
-    0x1f, 0x7f, 0x54, 0xaf, 0xc1, 0x65, 0x93, 0xf5, 0x65, 0xfb, 0x67, 0x2e,
-    0xf1, 0x65, 0xfd, 0xe7, 0xda, 0x74, 0xba, 0xb2, 0xfc, 0x5f, 0xc1, 0xef,
-    0x59, 0x7e, 0x98, 0x4e, 0x46, 0x2c, 0xa3, 0x3d, 0x27, 0x29, 0xbf, 0x3e,
-    0x8b, 0xe3, 0x59, 0x7a, 0x68, 0xea, 0xca, 0x84, 0xce, 0xb0, 0xac, 0xca,
-    0x3d, 0x08, 0x3e, 0x90, 0x04, 0x9e, 0xf7, 0x9c, 0x96, 0x56, 0xcb, 0xb0,
-    0x43, 0x84, 0x7e, 0x16, 0x30, 0x46, 0x04, 0x73, 0x73, 0x99, 0xb1, 0xaf,
-    0x7e, 0x74, 0x72, 0x12, 0x84, 0x67, 0x63, 0x6d, 0x15, 0x6a, 0xf8, 0xbb,
-    0x0d, 0x59, 0x74, 0xb6, 0x59, 0x7e, 0xcf, 0x87, 0xf3, 0x0b, 0x2f, 0xfe,
-    0xef, 0xa0, 0xa0, 0x1a, 0x8c, 0x25, 0x97, 0xf6, 0x6d, 0x0c, 0x3f, 0x16,
-    0x5f, 0xff, 0x9f, 0xe1, 0xe8, 0x9c, 0x52, 0xcf, 0xff, 0xcf, 0xd6, 0x5d,
-    0xf7, 0x27, 0x23, 0x1c, 0x68, 0x3d, 0x2e, 0xbf, 0xde, 0x83, 0x27, 0xd3,
-    0x0b, 0x2f, 0xe8, 0x32, 0x7d, 0x30, 0xb2, 0xfe, 0x7f, 0xf5, 0xa3, 0xd4,
-    0xe3, 0xde, 0xf1, 0x95, 0xe2, 0xc6, 0xac, 0xb7, 0xcb, 0x2e, 0x79, 0x48,
-    0xd6, 0xf0, 0x6e, 0xff, 0xff, 0xf4, 0xe6, 0xc6, 0x76, 0x76, 0x48, 0xf7,
-    0x96, 0x72, 0x74, 0x0d, 0xe6, 0xe2, 0xcb, 0xf8, 0x81, 0x38, 0x5e, 0x7e,
-    0xb2, 0xa4, 0x8b, 0x07, 0x7e, 0xa3, 0x56, 0x75, 0x31, 0x0e, 0x86, 0x1e,
-    0x1e, 0x5f, 0xc2, 0x74, 0x9d, 0x03, 0x0d, 0xcb, 0xdc, 0xe9, 0xac, 0xbd,
-    0x37, 0xff, 0x2c, 0xbd, 0x0c, 0x4e, 0x01, 0xbc, 0xfc, 0x72, 0xfb, 0xff,
-    0xc3, 0xba, 0xb2, 0xdf, 0xac, 0xbf, 0xa3, 0x5b, 0x46, 0xb6, 0x59, 0x7a,
-    0x5c, 0xc5, 0x97, 0xe6, 0x49, 0x46, 0x7e, 0xb2, 0xb4, 0x78, 0xff, 0x8e,
-    0x5f, 0xf8, 0xf0, 0x5e, 0x06, 0x62, 0x86, 0xac, 0xbc, 0x17, 0xe2, 0xca,
-    0x92, 0x3d, 0x31, 0xd9, 0xa4, 0x62, 0x1f, 0xdf, 0xe1, 0x5b, 0x07, 0xa0,
-    0xee, 0xac, 0xb8, 0x82, 0xb2, 0x96, 0x5d, 0x1a, 0x9c, 0x68, 0x78, 0x2d,
-    0x58, 0x88, 0x60, 0xac, 0x5f, 0xff, 0xc7, 0xa9, 0xd8, 0x78, 0x4c, 0x78,
-    0xf1, 0xb8, 0x05, 0x97, 0xfd, 0x9f, 0x4b, 0x9f, 0x48, 0x3a, 0x59, 0x7f,
-    0xff, 0xe6, 0xf0, 0x1e, 0x80, 0x7d, 0x22, 0x08, 0xe7, 0x1b, 0x0e, 0x5f,
-    0xac, 0xbf, 0xff, 0xdb, 0x6a, 0x1b, 0xc0, 0xc4, 0xe8, 0xd4, 0x0f, 0xd0,
-    0xd5, 0x95, 0x88, 0xd4, 0x37, 0x1a, 0xc4, 0xe2, 0xcd, 0x6b, 0x51, 0x88,
-    0x5f, 0xbf, 0xe1, 0xfc, 0x2a, 0xcb, 0xf7, 0xd0, 0xdd, 0xa1, 0x65, 0xf7,
-    0xd2, 0x3f, 0x2c, 0xbd, 0xac, 0xfb, 0xc7, 0x99, 0xd2, 0x9b, 0xfb, 0xe7,
-    0x91, 0x43, 0x56, 0x5f, 0xf8, 0x25, 0x37, 0x4b, 0x36, 0x72, 0x59, 0x7f,
-    0xff, 0xfb, 0x5a, 0x3d, 0xa7, 0x7b, 0x3a, 0x51, 0x37, 0xb3, 0x68, 0xfb,
-    0xa1, 0x02, 0xcb, 0xff, 0xff, 0xa1, 0x8f, 0x44, 0xe2, 0xc0, 0xb1, 0x3b,
-    0xe9, 0x70, 0xc8, 0x48, 0xd9, 0x65, 0xfb, 0xee, 0x1e, 0x12, 0xca, 0xc4,
-    0x50, 0x05, 0xe6, 0xa1, 0x3a, 0xac, 0x2d, 0x33, 0xef, 0x46, 0x3b, 0x7f,
-    0xee, 0xb5, 0xaf, 0x34, 0xe2, 0xc1, 0x56, 0x5f, 0xfd, 0xa2, 0xfb, 0x38,
-    0x19, 0x8a, 0x1a, 0xb2, 0xff, 0x8d, 0x8f, 0x41, 0xed, 0x0c, 0x2c, 0xa3,
-    0x3f, 0xfe, 0x22, 0xd4, 0xe4, 0x71, 0x4a, 0x18, 0x37, 0xfc, 0x41, 0x98,
-    0xb3, 0xcf, 0xd5, 0x97, 0xff, 0x48, 0x3f, 0xf0, 0xb3, 0x9c, 0x81, 0x56,
-    0x5f, 0xef, 0x40, 0xa3, 0xf3, 0xb5, 0x65, 0xff, 0x37, 0x39, 0x3a, 0x62,
-    0x86, 0xac, 0xbf, 0xff, 0x73, 0x67, 0x9c, 0x3f, 0x46, 0xb5, 0x9b, 0xe3,
-    0xe5, 0x94, 0x34, 0x65, 0x34, 0xd3, 0xa7, 0x77, 0xff, 0xe8, 0xcd, 0xa7,
-    0x0f, 0x47, 0xb7, 0x4f, 0x0b, 0x65, 0x97, 0xdb, 0xf0, 0x20, 0x59, 0x7f,
-    0xff, 0xcf, 0xaf, 0x67, 0x4f, 0x0b, 0x6e, 0x46, 0x10, 0xfd, 0x0b, 0x2f,
-    0xbb, 0x3b, 0x6d, 0x2c, 0xac, 0x45, 0x6f, 0xc4, 0x8e, 0xc7, 0x7f, 0xff,
-    0xef, 0xb3, 0x60, 0xee, 0x4e, 0xfa, 0x5d, 0x81, 0x67, 0x66, 0xbf, 0xfe,
-    0x16, 0x5f, 0xf6, 0x4d, 0x3e, 0x1e, 0xe7, 0xdd, 0x59, 0x7b, 0x34, 0x35,
-    0x97, 0x44, 0x96, 0x56, 0x1f, 0x83, 0x4f, 0xbf, 0x1c, 0xbf, 0xfb, 0x67,
-    0x2c, 0xf6, 0x77, 0x58, 0x2a, 0xcb, 0xff, 0xff, 0xf6, 0x05, 0x82, 0x0f,
-    0x66, 0xce, 0x9f, 0xd2, 0x28, 0x2c, 0xf1, 0xe6, 0xa6, 0x59, 0x58, 0x8c,
-    0x7f, 0x91, 0x2f, 0xfb, 0x05, 0xf4, 0x31, 0x9d, 0xe2, 0xcb, 0xff, 0x9c,
-    0xb6, 0x68, 0x4c, 0x66, 0x46, 0xb2, 0x8c, 0xff, 0x05, 0x3a, 0xbf, 0xa6,
-    0xfa, 0x41, 0x8e, 0xac, 0xbf, 0xe0, 0xfd, 0xec, 0xee, 0xb0, 0x55, 0x97,
-    0xff, 0xf4, 0xa3, 0x5f, 0x4b, 0x93, 0xbd, 0x06, 0x4f, 0xa6, 0x16, 0x5f,
-    0xa5, 0xd2, 0xc9, 0x2c, 0xbf, 0xf7, 0xc3, 0xf0, 0x5f, 0x85, 0x83, 0x59,
-    0x58, 0x7c, 0xc1, 0x27, 0xbf, 0xef, 0x3b, 0x4b, 0x3c, 0xfd, 0x59, 0x77,
-    0xe2, 0xac, 0xbe, 0x9f, 0xcd, 0x42, 0xcb, 0x66, 0x8d, 0xee, 0xf1, 0x9a,
-    0x84, 0xfb, 0x30, 0xc3, 0xe3, 0xbf, 0x43, 0x13, 0x84, 0x3d, 0x74, 0xbf,
-    0xfb, 0x3b, 0xc9, 0xda, 0xc3, 0xf4, 0x0d, 0x65, 0xff, 0x7b, 0xd1, 0xf4,
-    0xe1, 0x5a, 0x05, 0x97, 0xf6, 0x77, 0x5a, 0xc9, 0x2c, 0xa5, 0x97, 0xec,
-    0xf1, 0x60, 0x16, 0x57, 0xe6, 0xc4, 0x82, 0xea, 0x63, 0xff, 0xea, 0xf5,
-    0xec, 0xfb, 0xab, 0x2f, 0xf6, 0x0c, 0xf7, 0xf4, 0xf4, 0xb2, 0xec, 0xe4,
-    0xe3, 0xf4, 0xdd, 0x23, 0x71, 0xda, 0x74, 0xdb, 0xca, 0x33, 0x1b, 0xfe,
-    0xc6, 0xfa, 0x0f, 0x41, 0xdd, 0x59, 0x7f, 0x74, 0xf6, 0x27, 0x6a, 0xca,
-    0xd9, 0x9e, 0xba, 0x38, 0xeb, 0x70, 0xd5, 0x87, 0x70, 0x47, 0xbd, 0xf4,
-    0x64, 0x66, 0x55, 0x31, 0xc6, 0xa3, 0x10, 0x69, 0x87, 0xa3, 0x05, 0x72,
-    0xff, 0xe1, 0xd4, 0x50, 0xf6, 0xe4, 0x27, 0xfb, 0x28, 0x38, 0x2b, 0x9b,
-    0xe3, 0xb4, 0x10, 0xa3, 0x70, 0xee, 0xff, 0xa1, 0xa5, 0x83, 0xd1, 0xec,
-    0xb2, 0xff, 0xff, 0x0b, 0xe0, 0xc7, 0xd3, 0xb5, 0xa8, 0xd8, 0x9d, 0xf4,
-    0xc2, 0xcb, 0xfc, 0x58, 0x1c, 0x62, 0x5f, 0xac, 0xa7, 0x44, 0xd0, 0xac,
-    0xd5, 0x24, 0x7a, 0xe4, 0x34, 0xaf, 0x31, 0x1a, 0x59, 0x7f, 0xfd, 0x13,
-    0xbc, 0xfb, 0xe7, 0x63, 0x5b, 0x1a, 0x61, 0x65, 0xfb, 0xf6, 0xe6, 0x75,
-    0x65, 0xff, 0x64, 0xed, 0x67, 0x8b, 0x26, 0x59, 0x58, 0x7c, 0x44, 0x51,
-    0x7f, 0xff, 0xbc, 0xff, 0xf2, 0x71, 0x66, 0xf2, 0xce, 0x63, 0x60, 0x0b,
-    0x2f, 0xe0, 0xf6, 0x70, 0x3a, 0xd5, 0x95, 0x32, 0x71, 0x3e, 0x1d, 0x28,
-    0x5c, 0x70, 0x83, 0xac, 0x77, 0xf0, 0x5a, 0xc4, 0x10, 0x16, 0x53, 0x21,
-    0xb5, 0xc3, 0x65, 0x0a, 0x22, 0x30, 0x6c, 0xac, 0x08, 0x3e, 0x94, 0x8e,
-    0xf1, 0xd8, 0x12, 0x85, 0xfb, 0xc2, 0x17, 0xdf, 0xac, 0xbf, 0xfb, 0x67,
-    0xee, 0xb3, 0x67, 0x2e, 0xf1, 0x65, 0x61, 0xf8, 0x19, 0x5d, 0xff, 0xff,
-    0x6b, 0x25, 0xec, 0x39, 0x73, 0x08, 0x3d, 0x2c, 0xfe, 0x16, 0x5f, 0xd1,
-    0x84, 0x01, 0x1a, 0xb2, 0xff, 0x74, 0x31, 0x9b, 0x08, 0xd5, 0x97, 0xfe,
-    0xf4, 0x10, 0x66, 0xce, 0x72, 0x16, 0x5b, 0x77, 0xa8, 0xa0, 0x10, 0xb7,
-    0x70, 0xd6, 0xa1, 0x34, 0x17, 0x8c, 0x12, 0xfe, 0xf6, 0x17, 0x7f, 0x0a,
-    0xcb, 0xfe, 0x18, 0xe3, 0xf9, 0xd9, 0xf7, 0x56, 0x5f, 0xcf, 0xba, 0x32,
-    0xcf, 0x2c, 0xb9, 0xbc, 0x59, 0x79, 0xf8, 0x6b, 0x2a, 0x0d, 0x97, 0xe2,
-    0xf7, 0xfc, 0x26, 0xd8, 0x4e, 0xd7, 0xf2, 0xcb, 0xe3, 0xd1, 0x3a, 0xca,
-    0x34, 0xc6, 0x26, 0x3d, 0x26, 0x1e, 0x90, 0xef, 0x39, 0xbf, 0xdc, 0xe4,
-    0x1e, 0xcf, 0xd5, 0x97, 0xfd, 0xc7, 0x17, 0x70, 0xf0, 0x86, 0xb2, 0xfe,
-    0xce, 0xe3, 0x94, 0xcb, 0x2f, 0xb3, 0x91, 0xa5, 0x96, 0x63, 0xc7, 0x9a,
-    0x45, 0x96, 0x94, 0x23, 0x8f, 0x0c, 0xc3, 0x08, 0x8b, 0x49, 0x65, 0xff,
-    0x8b, 0xfd, 0xc3, 0xcf, 0xbc, 0x78, 0xb2, 0xfa, 0x1a, 0xe3, 0x59, 0x50,
-    0x7e, 0x78, 0x22, 0x48, 0x37, 0xfb, 0x26, 0xf6, 0x76, 0x06, 0xb2, 0xfc,
-    0x70, 0xde, 0x35, 0x65, 0xfc, 0x5d, 0x76, 0x9f, 0x56, 0x5e, 0x19, 0x8d,
-    0x65, 0xef, 0xdf, 0x75, 0x65, 0xfb, 0x85, 0x13, 0x75, 0x65, 0x0c, 0xf9,
-    0x38, 0x39, 0xd2, 0x0b, 0xb8, 0xca, 0xab, 0x2d, 0x25, 0x95, 0x08, 0xee,
-    0xc8, 0x48, 0x39, 0x7f, 0x47, 0xaf, 0x10, 0x21, 0x65, 0xff, 0xff, 0xf7,
-    0xb3, 0xbc, 0x79, 0xa7, 0x16, 0x7d, 0x2c, 0x0e, 0xc5, 0x83, 0xf1, 0xcc,
-    0xb2, 0xff, 0xf8, 0xf9, 0x12, 0xee, 0x78, 0xb3, 0xbe, 0x35, 0x97, 0x05,
-    0x85, 0x94, 0x69, 0x80, 0xe8, 0x6f, 0xd0, 0x81, 0xea, 0x6d, 0xff, 0xec,
-    0x7f, 0xe6, 0xf1, 0xfe, 0x4f, 0xf4, 0x96, 0x5e, 0xf3, 0x1d, 0x59, 0x7e,
-    0xef, 0x7b, 0x82, 0xac, 0xa8, 0x3c, 0x73, 0x1e, 0xa6, 0xa2, 0xcf, 0xf8,
-    0x49, 0xde, 0x6c, 0x01, 0x65, 0xda, 0xc5, 0x97, 0xb0, 0xc6, 0xb2, 0xdc,
-    0x59, 0x71, 0x60, 0x0d, 0x67, 0xc3, 0x77, 0x8e, 0x26, 0x59, 0x7f, 0xf6,
-    0x7f, 0x3b, 0xc7, 0xde, 0x11, 0xcc, 0xb2, 0xb6, 0x44, 0x7f, 0x0b, 0x3a,
-    0x39, 0x53, 0xca, 0x63, 0xd0, 0x39, 0x90, 0xd1, 0xbf, 0xf8, 0xbf, 0x9f,
-    0xcf, 0x1c, 0x35, 0xc6, 0xb2, 0xff, 0x8b, 0xfd, 0x64, 0x8a, 0x1a, 0xb2,
-    0xff, 0xff, 0xfd, 0x2e, 0x70, 0x31, 0xd3, 0x1e, 0x14, 0xd3, 0x8b, 0x35,
-    0x05, 0xdf, 0x66, 0xe2, 0xcb, 0xff, 0xbe, 0x97, 0x31, 0xbf, 0x47, 0xbd,
-    0x0b, 0x2b, 0x13, 0x04, 0xf8, 0xe3, 0x50, 0x86, 0xb7, 0x16, 0x56, 0x27,
-    0x22, 0x18, 0xd2, 0x84, 0x36, 0xb6, 0xcb, 0x2f, 0xdb, 0x47, 0x73, 0xf5,
-    0x97, 0xed, 0x67, 0xd2, 0xe2, 0xcb, 0xc0, 0xf6, 0x2c, 0xb6, 0x6c, 0x78,
-    0xba, 0x29, 0xbf, 0xef, 0xa3, 0x5b, 0x4e, 0xc3, 0x1a, 0xcb, 0xa6, 0x35,
-    0x95, 0x88, 0xfb, 0x31, 0x22, 0x6e, 0x09, 0x46, 0xf3, 0xcb, 0xfb, 0x3e,
-    0x94, 0x7f, 0x0b, 0x2f, 0xc5, 0x9e, 0x7e, 0xac, 0xaf, 0x8f, 0x51, 0xa5,
-    0xd7, 0xda, 0xc9, 0xa1, 0x65, 0xf1, 0xef, 0xcd, 0x2c, 0xa8, 0x3e, 0x83,
-    0x23, 0xf1, 0x15, 0xf4, 0xe0, 0x6c, 0x2a, 0xcb, 0xf6, 0xd3, 0x83, 0x13,
-    0x2c, 0xbf, 0xff, 0xe2, 0x8f, 0xfe, 0x97, 0x03, 0x1d, 0x2c, 0x19, 0xe6,
-    0xa6, 0x59, 0x4e, 0x89, 0x3e, 0x96, 0x54, 0x33, 0xa9, 0x36, 0x8d, 0x84,
-    0x65, 0x19, 0x1a, 0x37, 0xd1, 0x97, 0x9c, 0x2b, 0x26, 0x2c, 0xd1, 0x9f,
-    0xa3, 0x15, 0x78, 0xd0, 0x3f, 0x87, 0xa9, 0x46, 0x8f, 0xc8, 0xf2, 0xbb,
-    0x19, 0x90, 0x63, 0x05, 0xde, 0x5a, 0x24, 0x2e, 0xaf, 0xd2, 0x3d, 0x67,
-    0xcb, 0x2f, 0x73, 0xd8, 0xb2, 0xfd, 0x9c, 0xdb, 0x05, 0x59, 0x7f, 0xf7,
-    0x82, 0x3f, 0x07, 0xbc, 0xf0, 0x66, 0x59, 0x5f, 0x22, 0xd6, 0x62, 0x8f,
-    0x0e, 0x11, 0x4d, 0xff, 0xfe, 0xef, 0x3d, 0x9f, 0x63, 0xfd, 0x38, 0x71,
-    0xb4, 0xe6, 0x18, 0x59, 0x7f, 0xfe, 0x6f, 0xd2, 0xe6, 0xbe, 0x8e, 0xf2,
-    0x3c, 0x7d, 0x59, 0x7f, 0xd8, 0xc1, 0x67, 0x7c, 0x62, 0xac, 0xbf, 0xfd,
-    0x1f, 0x78, 0xf0, 0x86, 0x7b, 0xe0, 0x6b, 0x2a, 0x13, 0x45, 0x36, 0xad,
-    0x2c, 0x11, 0xcd, 0xdb, 0xa3, 0x59, 0x7f, 0xfd, 0xb6, 0x00, 0x7e, 0x3c,
-    0x62, 0x73, 0x01, 0x85, 0x97, 0xf6, 0x6b, 0x59, 0xde, 0x2c, 0xbf, 0x89,
-    0xd8, 0x6b, 0xc9, 0x65, 0xe9, 0x1f, 0x7c, 0x7b, 0x5d, 0x2d, 0xbf, 0xc2,
-    0x74, 0xf7, 0xc1, 0x01, 0x65, 0xfa, 0x1a, 0x7e, 0x85, 0x97, 0xfb, 0x3b,
-    0xe3, 0xee, 0x01, 0x65, 0xf4, 0x61, 0x01, 0x65, 0x4e, 0x45, 0x6e, 0x8d,
-    0x48, 0x9b, 0xa6, 0x55, 0x3d, 0xa7, 0xcc, 0x63, 0x53, 0x42, 0xbb, 0xd0,
-    0xe0, 0xbf, 0xf4, 0xb9, 0xd7, 0xdb, 0x70, 0xb3, 0xe5, 0x97, 0xf7, 0xa2,
-    0x41, 0x71, 0x16, 0x5f, 0x87, 0xec, 0x2e, 0xac, 0xa9, 0x1e, 0xac, 0xc5,
-    0xd5, 0xf2, 0x2e, 0xca, 0x13, 0x17, 0xe3, 0xf8, 0x7f, 0x30, 0xb2, 0xa0,
-    0xf4, 0xf4, 0x51, 0x7f, 0xe7, 0xde, 0x59, 0xdc, 0xfc, 0x86, 0xb2, 0xdf,
-    0xac, 0xa3, 0x3d, 0x19, 0x8f, 0xef, 0xfb, 0xdb, 0x1e, 0x17, 0xd2, 0xe2,
-    0xcb, 0xfe, 0xfb, 0xd8, 0x02, 0xc0, 0xee, 0xac, 0xbf, 0xfe, 0x17, 0x01,
-    0xcc, 0xec, 0xd8, 0xc1, 0x67, 0xeb, 0x2d, 0x28, 0x46, 0x46, 0x1d, 0x19,
-    0xe5, 0xfc, 0x7f, 0x7f, 0xa7, 0x1a, 0xcb, 0xd9, 0xaf, 0xd6, 0x5f, 0xb8,
-    0x78, 0x5f, 0xac, 0xb6, 0x19, 0xe2, 0x70, 0x76, 0xfc, 0x7f, 0xff, 0x9a,
-    0x59, 0x5e, 0x46, 0x11, 0x39, 0xf0, 0x9a, 0xd3, 0xd2, 0xcb, 0xf3, 0xe1,
-    0x1b, 0x0b, 0x2f, 0x77, 0x3c, 0xb2, 0x88, 0xf0, 0xb7, 0x09, 0xae, 0x36,
-    0xac, 0xbf, 0xff, 0xf7, 0xd2, 0x7f, 0xa7, 0x10, 0x77, 0x27, 0x67, 0xd2,
-    0xc0, 0x97, 0xfc, 0x59, 0x4d, 0x44, 0x6e, 0xe0, 0xb5, 0xf6, 0xef, 0xb3,
-    0x75, 0x65, 0xe9, 0xf3, 0x65, 0xac, 0xa9, 0xc9, 0xd4, 0xcf, 0x65, 0xfb,
-    0x2c, 0x64, 0x2c, 0x5c, 0x9a, 0x7c, 0xa2, 0xff, 0xff, 0xfb, 0xee, 0x06,
-    0x3e, 0x9d, 0xec, 0x1c, 0xe2, 0xc0, 0xb1, 0x3b, 0x9f, 0xfe, 0x7d, 0x59,
-    0x7f, 0xff, 0xec, 0x1b, 0x5b, 0x1d, 0xe6, 0x77, 0x9a, 0x3c, 0x01, 0x60,
-    0xd6, 0x5f, 0xfe, 0xe8, 0x63, 0x36, 0x9d, 0xc3, 0x23, 0xd2, 0xcb, 0x0a,
-    0x48, 0xb5, 0x11, 0xaa, 0xa1, 0x36, 0x8c, 0x8c, 0xfa, 0xfd, 0x05, 0xf3,
-    0xec, 0xb2, 0xfe, 0x98, 0xc7, 0x8d, 0x35, 0x97, 0xff, 0xff, 0xfc, 0x08,
-    0xf4, 0x37, 0xb9, 0xce, 0x46, 0xb5, 0x05, 0x9b, 0x60, 0x78, 0x19, 0x8a,
-    0x1a, 0xb2, 0xa1, 0x18, 0x18, 0x5b, 0x78, 0x3a, 0x61, 0x65, 0x34, 0xdf,
-    0xcf, 0x90, 0xdf, 0x9f, 0xf1, 0x1f, 0x65, 0x95, 0x87, 0x9c, 0x64, 0x97,
-    0x8f, 0xf8, 0x59, 0x7f, 0xa7, 0x16, 0x68, 0xe1, 0xab, 0x2f, 0xfd, 0xa7,
-    0xee, 0xb0, 0xfd, 0x03, 0x59, 0x7f, 0x0c, 0xb3, 0xcf, 0xd5, 0x97, 0xee,
-    0xfd, 0x23, 0xd2, 0xca, 0xc3, 0xd5, 0xe1, 0x65, 0x6c, 0x98, 0x10, 0xc7,
-    0x34, 0x67, 0xfc, 0x24, 0xaf, 0x69, 0xc4, 0x59, 0x7e, 0x8e, 0xb4, 0xfa,
-    0xb2, 0xdb, 0x39, 0xe2, 0x04, 0x76, 0xff, 0xd0, 0xc6, 0xe0, 0x70, 0xa6,
-    0x11, 0xab, 0x2f, 0xff, 0xff, 0xf3, 0x05, 0x93, 0x8f, 0x09, 0xfb, 0xe8,
-    0x9a, 0x71, 0x67, 0x8f, 0xbc, 0x08, 0x03, 0x0b, 0x2b, 0x11, 0xf9, 0xf1,
-    0x40, 0x51, 0x2f, 0xfd, 0x99, 0xff, 0x27, 0x6b, 0x83, 0xe2, 0xcb, 0xfd,
-    0xac, 0x07, 0x8f, 0x53, 0x2c, 0xb7, 0x46, 0x7e, 0xd8, 0x85, 0x7f, 0xb0,
-    0x07, 0xdd, 0x05, 0xab, 0x2f, 0xbe, 0x2c, 0x9f, 0x59, 0x58, 0x7f, 0xe6,
-    0x4e, 0xe6, 0x77, 0xec, 0x6c, 0x88, 0xd6, 0x5e, 0x32, 0xea, 0xcb, 0xfa,
-    0x5c, 0x76, 0x87, 0x8b, 0x2b, 0x63, 0xc9, 0x71, 0xbb, 0xef, 0x79, 0xe4,
-    0xb2, 0xdc, 0x59, 0x58, 0x6c, 0xcc, 0x8a, 0xfe, 0xe9, 0xeb, 0x6c, 0x02,
-    0xca, 0x86, 0xc5, 0xb4, 0x71, 0xc1, 0xe4, 0xa2, 0x16, 0x23, 0x5b, 0x03,
-    0x97, 0xd0, 0xea, 0x39, 0x53, 0xda, 0x8f, 0x39, 0xa5, 0x1e, 0x8d, 0xd5,
-    0xe3, 0x22, 0x28, 0xe1, 0x79, 0x19, 0x2f, 0x4b, 0x02, 0xdf, 0x3e, 0xab,
-    0xb8, 0x3f, 0x79, 0xc1, 0x8b, 0x29, 0x65, 0xf6, 0xe7, 0x8f, 0x4b, 0x2f,
-    0xfa, 0x77, 0x4b, 0x05, 0xc3, 0xe2, 0xca, 0x64, 0x1f, 0x50, 0x02, 0xe6,
-    0x25, 0xbd, 0xe8, 0xfd, 0x65, 0xfc, 0x67, 0x02, 0xc4, 0xcb, 0x2f, 0xff,
-    0xf0, 0x84, 0xec, 0x31, 0xfb, 0xcd, 0xb8, 0x50, 0x2f, 0xd2, 0xe2, 0xca,
-    0x9e, 0xd3, 0x6d, 0x88, 0x42, 0xe1, 0xa4, 0xc3, 0xae, 0x5b, 0x4b, 0x2f,
-    0xec, 0x6c, 0x79, 0xfc, 0xb2, 0xe9, 0xd3, 0x2c, 0xbd, 0xe3, 0x61, 0x65,
-    0x4e, 0x3e, 0x31, 0x96, 0x30, 0x35, 0x7f, 0xfd, 0xf4, 0x8a, 0x27, 0x34,
-    0xa1, 0x8e, 0x9e, 0xcb, 0x2a, 0x11, 0xe7, 0x8d, 0xc6, 0x65, 0x7e, 0xd4,
-    0xe2, 0xde, 0x2a, 0xcb, 0xef, 0x3f, 0xf0, 0xb2, 0xf7, 0xb3, 0x4b, 0x2a,
-    0x0f, 0xad, 0xcb, 0x77, 0x08, 0xaf, 0xed, 0xa6, 0x94, 0xf7, 0xad, 0x96,
-    0x5f, 0x08, 0x59, 0xbd, 0x65, 0xf1, 0x8f, 0x06, 0xb2, 0xbe, 0x3c, 0x56,
-    0x92, 0x5a, 0x65, 0x97, 0x43, 0x56, 0x5b, 0xab, 0x2b, 0x46, 0x9d, 0xc5,
-    0xa8, 0x67, 0xb3, 0xe3, 0x9b, 0xe8, 0x1b, 0xc9, 0x65, 0xee, 0xe7, 0x16,
-    0x5f, 0xfb, 0x1f, 0xef, 0xe6, 0x94, 0x6b, 0x65, 0x97, 0xb5, 0x13, 0x2c,
-    0xbd, 0xc7, 0xf9, 0x65, 0x6c, 0x8b, 0x96, 0x08, 0x7c, 0x38, 0xe8, 0x5d,
-    0x1d, 0xba, 0x67, 0x59, 0x74, 0xb6, 0x59, 0x7d, 0x3b, 0xb1, 0x25, 0x97,
-    0xff, 0xd9, 0x05, 0xfc, 0x1f, 0x7d, 0x8d, 0xc1, 0xac, 0xba, 0x18, 0x59,
-    0x5b, 0x22, 0x22, 0x44, 0x9d, 0x4d, 0xbf, 0x9c, 0x58, 0xee, 0x6c, 0xb2,
-    0xfe, 0x3d, 0x7d, 0x22, 0x85, 0x97, 0xe8, 0xec, 0x8f, 0xab, 0x2f, 0xef,
-    0x47, 0xd2, 0xce, 0xac, 0xa9, 0x1e, 0xa8, 0xc9, 0xeb, 0xc8, 0xa4, 0xec,
-    0x20, 0xaf, 0xfd, 0x3f, 0x05, 0xdd, 0x1e, 0xfc, 0x1a, 0xcb, 0xb3, 0xab,
-    0x2d, 0x32, 0xca, 0xf1, 0xa8, 0x21, 0x6a, 0x64, 0x2e, 0x45, 0x43, 0xe6,
-    0x3e, 0x1c, 0x36, 0xda, 0x97, 0xe1, 0x77, 0x85, 0x01, 0x18, 0x86, 0x1a,
-    0x53, 0xe5, 0x02, 0x35, 0x5f, 0xe1, 0x72, 0x44, 0x17, 0xe2, 0xcb, 0xf7,
-    0xc2, 0xb9, 0x7e, 0xb2, 0xe2, 0x61, 0x65, 0xb8, 0x67, 0x82, 0x12, 0xab,
-    0x9f, 0xcb, 0x2f, 0xce, 0x38, 0xc2, 0x59, 0x66, 0x16, 0x56, 0xc7, 0x9b,
-    0xe1, 0x62, 0x25, 0xbf, 0xff, 0x34, 0xb0, 0x1f, 0x74, 0x9f, 0xcd, 0x8c,
-    0xea, 0xcb, 0xff, 0xec, 0xd9, 0xc8, 0x13, 0xb9, 0x0d, 0x7f, 0xba, 0xb2,
-    0xa1, 0x14, 0xda, 0x54, 0xbf, 0xdb, 0xbe, 0xcd, 0xb5, 0xa8, 0x59, 0x4b,
-    0x2f, 0xfe, 0x79, 0x61, 0x0c, 0xa2, 0x43, 0xe2, 0xcb, 0x66, 0x1e, 0x6e,
-    0xf0, 0xbb, 0xff, 0xff, 0x82, 0xd6, 0xbc, 0xa7, 0x6e, 0x16, 0x36, 0x01,
-    0x38, 0x4d, 0xb6, 0x7f, 0x96, 0x5f, 0x83, 0x21, 0x35, 0xc5, 0x96, 0x3f,
-    0x22, 0x9c, 0x9f, 0x6f, 0xff, 0xd1, 0xa8, 0x06, 0x36, 0x01, 0x23, 0xe0,
-    0x5a, 0xb2, 0xa1, 0x5d, 0x6c, 0xce, 0x9a, 0x74, 0xf4, 0x35, 0x5c, 0x88,
-    0xa1, 0x09, 0xd8, 0x67, 0xcf, 0x93, 0xdf, 0xda, 0xc8, 0x62, 0x09, 0x65,
-    0xe2, 0x76, 0xac, 0xbb, 0xf8, 0x59, 0x7f, 0xf7, 0x9b, 0x9f, 0x4b, 0x8f,
-    0x1f, 0x49, 0x65, 0xc2, 0x6c, 0xb2, 0x8c, 0xf7, 0xc9, 0x1a, 0xa4, 0x8d,
-    0xd3, 0x2c, 0x21, 0xbe, 0xbb, 0x53, 0x22, 0x1b, 0x17, 0x73, 0xd4, 0x2e,
-    0x59, 0x31, 0xd4, 0xcf, 0x30, 0xd5, 0x9e, 0xe5, 0x35, 0x32, 0xb6, 0x68,
-    0xa4, 0x0a, 0xed, 0x2f, 0x8a, 0x52, 0xc8, 0x87, 0x48, 0x93, 0xca, 0xe7,
-    0xa9, 0x89, 0x7a, 0x40, 0xa5, 0xae, 0xfd, 0x48, 0x23, 0x39, 0xd7, 0x29,
-    0xa7, 0x61, 0x35, 0x49, 0x49, 0x6c, 0xf3, 0x67, 0xab, 0xc4, 0x17, 0x9e,
-    0x20, 0xfe, 0x5f, 0xfb, 0x2e, 0x16, 0x05, 0x5a, 0xfc, 0xf2, 0x9f, 0x41,
-    0xda, 0xcd, 0x4c, 0x32, 0xa6, 0x37, 0xc6, 0x8c, 0x2c, 0x26, 0x27, 0xe7,
-    0x2e, 0x84, 0x9c, 0x5a, 0xdc, 0x8d, 0x82, 0xff, 0xfe, 0x08, 0x19, 0xfd,
-    0xdd, 0x46, 0x7d, 0x3d, 0x8d, 0xdd, 0x85, 0x94, 0xcd, 0x58, 0x91, 0xca,
-    0xad, 0xbf, 0x9c, 0xfb, 0xc3, 0x25, 0x97, 0x8f, 0x58, 0xb2, 0xb7, 0x4f,
-    0x1b, 0x85, 0x77, 0xed, 0x01, 0xdc, 0x0a, 0x8a, 0x75, 0x76, 0x7c, 0xb2,
-    0xff, 0xf0, 0x42, 0x46, 0x51, 0xe3, 0x6e, 0x71, 0x65, 0xda, 0x6a, 0xcb,
-    0x33, 0x84, 0x67, 0x61, 0x2f, 0xc6, 0x8d, 0x17, 0xfd, 0x1e, 0xff, 0xfd,
-    0x26, 0x79, 0x2f, 0x61, 0xcb, 0x91, 0xd8, 0x1a, 0xcb, 0xff, 0x69, 0x9c,
-    0xfb, 0xed, 0xde, 0x3f, 0xeb, 0x2a, 0x11, 0x38, 0x6a, 0xd7, 0xed, 0x01,
-    0xdc, 0x0a, 0x8a, 0x8d, 0x7f, 0xe7, 0x93, 0x3c, 0xd0, 0x1d, 0xc0, 0xa8,
-    0x9a, 0x17, 0xff, 0x8b, 0x26, 0x93, 0xea, 0x45, 0x9b, 0xdd, 0x65, 0xf1,
-    0x46, 0x7c, 0xb2, 0xb1, 0x1d, 0x6d, 0x34, 0xe2, 0x67, 0x52, 0xaf, 0xf0,
-    0x8f, 0xbd, 0x9f, 0x4f, 0x65, 0x94, 0xcc, 0xfd, 0x60, 0xf2, 0xfd, 0xb0,
-    0x9b, 0x46, 0xcb, 0x2f, 0x80, 0xee, 0x05, 0x45, 0x5e, 0xac, 0x3d, 0xad,
-    0x16, 0x5f, 0xd9, 0xbe, 0x0b, 0xc1, 0x59, 0x7f, 0x18, 0xc7, 0x1a, 0x85,
-    0x97, 0xf4, 0x70, 0x9e, 0x38, 0xb2, 0xff, 0xfd, 0xf9, 0x05, 0xa2, 0x0c,
-    0x71, 0xfb, 0x63, 0x3a, 0xb2, 0xfe, 0x7e, 0xf3, 0x3e, 0xea, 0xca, 0xf9,
-    0x10, 0xc4, 0xb1, 0x66, 0x78, 0x9a, 0x7e, 0x88, 0x7c, 0x5d, 0xd2, 0xc1,
-    0x21, 0x63, 0x7e, 0xd0, 0x1d, 0xc0, 0xa8, 0xad, 0x97, 0xfd, 0x26, 0x79,
-    0xa0, 0x3b, 0x81, 0x51, 0x20, 0xaf, 0xb1, 0xb1, 0xba, 0xb2, 0xcc, 0xf1,
-    0x13, 0xee, 0x69, 0xc4, 0x7b, 0xe6, 0x99, 0x42, 0xcb, 0xf6, 0x80, 0xee,
-    0x05, 0x44, 0x86, 0xbf, 0xb4, 0x1d, 0xf0, 0x2b, 0x56, 0x5f, 0xc5, 0x9c,
-    0xec, 0xa1, 0x65, 0xf3, 0x37, 0x93, 0x38, 0x45, 0x8e, 0x10, 0x19, 0xa6,
-    0xf3, 0x1b, 0xff, 0x71, 0x9e, 0x74, 0xc7, 0x85, 0x32, 0xcb, 0xce, 0xe0,
-    0x5c, 0x60, 0x6a, 0x83, 0xe8, 0x02, 0x05, 0xde, 0xdd, 0x59, 0x74, 0xf3,
-    0xb2, 0xcb, 0xfe, 0xf4, 0x77, 0x93, 0xd7, 0x27, 0x92, 0x59, 0x4c, 0x83,
-    0xe0, 0x90, 0xed, 0xf7, 0x7b, 0x9b, 0x8b, 0x2c, 0x4b, 0x2c, 0x6b, 0x2a,
-    0x7a, 0x34, 0x13, 0xc0, 0x42, 0xff, 0xf4, 0xf0, 0x9e, 0x13, 0xd7, 0xa1,
-    0xa4, 0xfe, 0x3d, 0x2c, 0xb7, 0xcb, 0x2f, 0x77, 0x3f, 0x59, 0x71, 0x92,
-    0xcb, 0xa2, 0x65, 0x97, 0xf3, 0x70, 0x04, 0xfb, 0xab, 0x2c, 0x22, 0xca,
-    0xc3, 0xc1, 0x09, 0x7d, 0xf8, 0x71, 0xd7, 0x1a, 0xcb, 0x8f, 0x7a, 0xca,
-    0x83, 0x7f, 0xd2, 0x7b, 0xde, 0xce, 0x2c, 0xb3, 0xac, 0xa1, 0x9a, 0xce,
-    0x8e, 0x50, 0xd3, 0x69, 0xdd, 0x12, 0x98, 0x77, 0xc2, 0xbc, 0x58, 0xeb,
-    0x00, 0x89, 0x97, 0xdd, 0xe1, 0xef, 0x59, 0x7e, 0x1c, 0x16, 0xdb, 0xab,
-    0x2f, 0xf4, 0x30, 0x27, 0xff, 0xc7, 0xcb, 0x2a, 0x0f, 0x8f, 0x62, 0xbb,
-    0xf3, 0xf8, 0xdb, 0x8b, 0x2c, 0x64, 0x79, 0x1b, 0xc8, 0xaf, 0xb0, 0xbf,
-    0xe2, 0xcb, 0xc0, 0x2d, 0xd5, 0x97, 0xfe, 0x71, 0x7c, 0x6f, 0x2e, 0x9e,
-    0xcb, 0x29, 0xcf, 0x78, 0x87, 0xef, 0xff, 0x67, 0xdf, 0xe7, 0xdc, 0x13,
-    0x46, 0xdc, 0x59, 0x7d, 0xb7, 0x3e, 0x35, 0x97, 0xff, 0xa3, 0xe9, 0x1b,
-    0x45, 0xc2, 0x1f, 0xa1, 0x65, 0x62, 0x6b, 0x7a, 0x84, 0x01, 0x10, 0x71,
-    0x34, 0x24, 0x97, 0xe7, 0x18, 0x90, 0x4b, 0x2f, 0xf1, 0x87, 0x77, 0xd1,
-    0x9b, 0x2c, 0xbf, 0xf6, 0xba, 0x21, 0x38, 0x30, 0x80, 0xb2, 0xfa, 0x1a,
-    0x73, 0xeb, 0x2f, 0xfc, 0x2b, 0xcb, 0x58, 0x7e, 0x81, 0xac, 0xbe, 0x03,
-    0xb8, 0x15, 0x16, 0x22, 0xfd, 0xad, 0x39, 0x75, 0x65, 0xf3, 0x8f, 0xc1,
-    0x59, 0x61, 0x56, 0x5d, 0xc3, 0x59, 0x63, 0x33, 0x51, 0xf8, 0x95, 0xfd,
-    0x11, 0xf3, 0x5c, 0x6b, 0x2f, 0x04, 0xa4, 0xb2, 0xff, 0x02, 0x33, 0x5f,
-    0xff, 0xd5, 0x95, 0xb2, 0xa4, 0x09, 0x13, 0xe1, 0xb0, 0x0f, 0x8c, 0x93,
-    0x47, 0xcd, 0x2e, 0xf1, 0x39, 0x25, 0x70, 0x9b, 0xa5, 0xa1, 0x1c, 0xbe,
-    0xd4, 0x13, 0x0b, 0x2f, 0x4a, 0x37, 0x56, 0x56, 0x1e, 0x0c, 0xc4, 0x56,
-    0x35, 0x96, 0x35, 0x96, 0x93, 0x06, 0x83, 0xf1, 0x0b, 0xf0, 0x93, 0xf9,
-    0xa8, 0x59, 0x7e, 0xef, 0x60, 0xb6, 0x59, 0x74, 0x12, 0xcb, 0xfa, 0x38,
-    0x26, 0xd1, 0xb2, 0xca, 0xe1, 0xe2, 0x88, 0x2b, 0x50, 0x8b, 0xbc, 0x2b,
-    0x36, 0xdb, 0xfe, 0x0e, 0xc5, 0x83, 0xf0, 0x58, 0x59, 0x4c, 0x26, 0x99,
-    0xe8, 0x72, 0x11, 0x6d, 0xf7, 0xb8, 0x18, 0x59, 0x7f, 0xfb, 0x3e, 0xfb,
-    0xf7, 0xef, 0x0c, 0xbe, 0x92, 0xcb, 0xff, 0xa3, 0x39, 0x84, 0x33, 0xfe,
-    0x09, 0x65, 0xe2, 0x8d, 0x96, 0x51, 0xa2, 0xa8, 0x93, 0x42, 0x83, 0x7d,
-    0x1a, 0x86, 0xac, 0xa8, 0x4c, 0x6e, 0x50, 0xcc, 0xe1, 0x75, 0xf0, 0xc4,
-    0x9e, 0xa4, 0xb2, 0xfd, 0xf8, 0x3c, 0x6c, 0xb5, 0x97, 0xbd, 0x9f, 0xac,
-    0xbf, 0xbe, 0xe7, 0xa0, 0xfa, 0xb2, 0xe7, 0xea, 0xca, 0x33, 0xc4, 0x69,
-    0x75, 0xef, 0x47, 0xeb, 0x2e, 0x0c, 0xfa, 0xcb, 0xff, 0xee, 0xe7, 0xd2,
-    0x20, 0xf5, 0xcc, 0xa0, 0x6b, 0x2f, 0xe6, 0x96, 0x46, 0xec, 0xcb, 0x2d,
-    0xfa, 0xca, 0x83, 0xc2, 0x33, 0x0b, 0xcf, 0x1f, 0x2c, 0xa9, 0xe5, 0x3d,
-    0xbc, 0x29, 0x01, 0x6e, 0x98, 0x7c, 0x42, 0x43, 0xbd, 0x1a, 0x9f, 0x84,
-    0x86, 0xe1, 0x05, 0xff, 0xf9, 0xf5, 0x26, 0x94, 0x6a, 0x07, 0x93, 0x47,
-    0x96, 0x5f, 0x6f, 0x0b, 0xf1, 0x65, 0x8d, 0x65, 0xf8, 0xf4, 0x62, 0xb2,
-    0xd6, 0x54, 0x91, 0x68, 0x6a, 0x93, 0x12, 0x78, 0x42, 0xff, 0xc7, 0xef,
-    0xa5, 0x9d, 0xcf, 0xba, 0xb2, 0xff, 0x7b, 0x1b, 0x8f, 0xad, 0x96, 0x54,
-    0x8f, 0xcc, 0x68, 0x17, 0xee, 0xf5, 0xe5, 0xc5, 0x97, 0xfe, 0x0e, 0x7c,
-    0x3d, 0xfe, 0xc7, 0x99, 0x65, 0x7c, 0x7d, 0x5b, 0xca, 0x2d, 0x25, 0x97,
-    0xbe, 0xe3, 0xac, 0xbe, 0xcc, 0x17, 0x8b, 0x2a, 0x0f, 0x43, 0x04, 0x7a,
-    0x3b, 0x6d, 0xeb, 0x2e, 0x09, 0x2c, 0xb3, 0x2d, 0x65, 0xb7, 0xac, 0xa8,
-    0x4d, 0xff, 0x21, 0x19, 0xa7, 0x5f, 0xcb, 0x78, 0x27, 0xd1, 0x6d, 0xe2,
-    0xb7, 0xf0, 0x23, 0xbe, 0xcf, 0xd6, 0x5f, 0xc2, 0x66, 0xb3, 0x26, 0x59,
-    0x44, 0x7b, 0x9c, 0x2e, 0xbf, 0x7d, 0xc8, 0xd7, 0x16, 0x5f, 0xf3, 0xf7,
-    0x83, 0x0b, 0xea, 0x4b, 0x2f, 0xf6, 0xdf, 0x4b, 0x84, 0x73, 0x2c, 0xbe,
-    0xe9, 0x07, 0x65, 0x95, 0x07, 0xb2, 0x46, 0xd5, 0x08, 0xfc, 0xc2, 0x12,
-    0x29, 0x0c, 0x24, 0xaf, 0xed, 0x4b, 0xfc, 0xc9, 0x96, 0x5c, 0x11, 0x16,
-    0x5f, 0x3c, 0x1c, 0xfa, 0xcb, 0xda, 0x13, 0x8b, 0x2b, 0x11, 0x10, 0xc1,
-    0x7e, 0x86, 0x37, 0x91, 0xdf, 0x48, 0x4f, 0x42, 0xcb, 0xda, 0x89, 0x2c,
-    0xa7, 0x37, 0xfb, 0xc8, 0xef, 0xcd, 0xc3, 0xd4, 0xcb, 0x2d, 0xba, 0xb2,
-    0xa0, 0xde, 0x39, 0x45, 0xf0, 0x91, 0xb9, 0xc5, 0x97, 0xfe, 0x22, 0x76,
-    0xf3, 0x1b, 0x1b, 0xab, 0x2f, 0xfc, 0x7b, 0x39, 0x79, 0xf9, 0x1b, 0xab,
-    0x2f, 0x7a, 0x3c, 0xb2, 0x96, 0x5b, 0x06, 0x69, 0xda, 0x39, 0x7d, 0xa3,
-    0x17, 0x75, 0x65, 0x1a, 0x3c, 0xbc, 0x7e, 0x4c, 0xfc, 0x26, 0xbf, 0xfd,
-    0xa3, 0x6c, 0x7d, 0xe8, 0x19, 0x3e, 0xea, 0xca, 0x1a, 0x73, 0xfc, 0x8c,
-    0x63, 0xa7, 0x77, 0xef, 0x81, 0xe8, 0xd2, 0xcb, 0xfd, 0xf8, 0x5c, 0x4f,
-    0x44, 0x96, 0x54, 0x2b, 0x2f, 0x37, 0xef, 0x2f, 0x3c, 0x77, 0xc1, 0x37,
-    0x14, 0xa6, 0xfe, 0xf8, 0x1e, 0x8f, 0xb7, 0x16, 0x5f, 0xc6, 0x4e, 0xd8,
-    0xf2, 0xcb, 0xff, 0xd0, 0xd8, 0x90, 0xca, 0x3c, 0xf9, 0xa5, 0x97, 0x1f,
-    0x96, 0x52, 0xca, 0x91, 0xf4, 0x75, 0x1e, 0x7c, 0x5a, 0xfc, 0x51, 0xe8,
-    0xdd, 0x59, 0x7b, 0xb9, 0xfa, 0xcb, 0xf9, 0xa7, 0xce, 0x18, 0xd6, 0x5e,
-    0x7d, 0x30, 0xb2, 0x82, 0x79, 0x42, 0x96, 0xdf, 0xe0, 0x16, 0x6f, 0x2c,
-    0xe2, 0xcb, 0xfd, 0xbb, 0x38, 0x48, 0x27, 0x61, 0x65, 0xfe, 0x93, 0xe1,
-    0x67, 0x78, 0xb2, 0xfe, 0x1e, 0x61, 0x7d, 0xd5, 0x95, 0x88, 0x97, 0xf8,
-    0xe7, 0xf3, 0x1b, 0xff, 0x67, 0xd2, 0xf4, 0x71, 0x8f, 0x42, 0xca, 0x85,
-    0x5c, 0xd2, 0x33, 0xfa, 0x12, 0x66, 0x65, 0x31, 0x4e, 0x99, 0xfc, 0x46,
-    0x50, 0xca, 0xdc, 0x31, 0xbe, 0xeb, 0xbe, 0xcb, 0x2d, 0x3e, 0xb2, 0xe9,
-    0x71, 0x65, 0x9e, 0x46, 0xaf, 0xe1, 0x4b, 0xee, 0x99, 0x0a, 0x92, 0xc1,
-    0x59, 0x68, 0xc3, 0x67, 0xe2, 0x2b, 0xb3, 0x4b, 0x2f, 0xf1, 0x77, 0x9f,
-    0x71, 0xf7, 0x56, 0x5f, 0xd8, 0x3d, 0xdc, 0xfb, 0x75, 0x65, 0x39, 0xf5,
-    0x91, 0xbd, 0x6e, 0xa6, 0xda, 0xe9, 0xbf, 0xad, 0x11, 0x28, 0x61, 0x03,
-    0x78, 0x4f, 0x05, 0x65, 0xff, 0x9a, 0x19, 0xbe, 0xe4, 0x4c, 0x7b, 0xd6,
-    0x5e, 0x68, 0x7c, 0xb2, 0xff, 0x7a, 0x1a, 0x51, 0xf4, 0x96, 0x5e, 0xd6,
-    0xb1, 0x65, 0xef, 0xa5, 0xc5, 0x97, 0x78, 0xf8, 0x6e, 0x85, 0x1c, 0xbe,
-    0xd6, 0x3e, 0xe2, 0xcb, 0xd0, 0x2c, 0x96, 0x5f, 0xf6, 0x77, 0x9a, 0xce,
-    0x47, 0xcb, 0x2f, 0x63, 0x81, 0x65, 0x00, 0xfc, 0x4c, 0x74, 0x8e, 0x6f,
-    0xfd, 0x02, 0x89, 0xb7, 0x31, 0xb1, 0xba, 0xb2, 0xe7, 0x15, 0x65, 0x6c,
-    0x9e, 0xa0, 0xc7, 0x40, 0xdb, 0xa2, 0xdf, 0x42, 0x57, 0xa5, 0xbb, 0xd1,
-    0x2e, 0xe7, 0xcb, 0x2e, 0xce, 0x2c, 0xbb, 0x73, 0x4b, 0x2a, 0x15, 0x66,
-    0xe4, 0xa1, 0x83, 0x6d, 0x10, 0x63, 0x70, 0x5a, 0xfe, 0x3c, 0xf7, 0xd2,
-    0xe2, 0xcb, 0xff, 0x04, 0x04, 0xfc, 0xe0, 0x60, 0x0b, 0x2f, 0xfe, 0xf3,
-    0x9f, 0x65, 0x8c, 0x16, 0x7e, 0xb2, 0xf7, 0xb0, 0x55, 0x97, 0xf9, 0xa7,
-    0xcf, 0x1c, 0x1a, 0xcb, 0xf1, 0x4d, 0x1e, 0x85, 0x94, 0xb2, 0xec, 0x1a,
-    0xcb, 0xbf, 0x7f, 0x8d, 0x0e, 0xf0, 0xbb, 0xf6, 0x7b, 0xe7, 0xdd, 0x59,
-    0x7d, 0xff, 0x20, 0x96, 0x5f, 0xed, 0x79, 0xcf, 0x87, 0xbd, 0x65, 0xcc,
-    0x1a, 0xca, 0x83, 0xed, 0xc2, 0x27, 0x34, 0xbf, 0xfb, 0xd8, 0x44, 0xfd,
-    0x9d, 0x28, 0x6a, 0xcb, 0xf3, 0xf4, 0x2e, 0x22, 0xca, 0x1a, 0xaa, 0x6c,
-    0x2e, 0x33, 0xed, 0xd4, 0x46, 0x8e, 0xb9, 0x8f, 0xe9, 0x04, 0x61, 0xc8,
-    0x4c, 0x74, 0xb0, 0x28, 0x97, 0xf0, 0xb1, 0xad, 0x3c, 0xcb, 0x2f, 0xf8,
-    0x70, 0x01, 0x3f, 0xfe, 0x3e, 0x59, 0x7f, 0xcf, 0xac, 0x69, 0xcf, 0xc3,
-    0x56, 0x50, 0x0f, 0xdc, 0x27, 0xb7, 0xef, 0x86, 0x33, 0xe2, 0xcb, 0xda,
-    0xce, 0x2c, 0xa8, 0x3c, 0x5c, 0x29, 0xbe, 0xec, 0x7d, 0x25, 0x97, 0xf1,
-    0xff, 0x3e, 0x47, 0xfa, 0xcb, 0xb3, 0xf5, 0x95, 0xb1, 0xf5, 0xe8, 0x8c,
-    0x8c, 0x6f, 0xfe, 0xf3, 0x9f, 0x73, 0x5f, 0xb5, 0xe4, 0xb2, 0xf0, 0xfc,
-    0x6b, 0x28, 0xcf, 0x80, 0x28, 0x97, 0xc4, 0x51, 0xb2, 0xcb, 0xdd, 0xc1,
-    0x16, 0x54, 0x2a, 0x86, 0xc8, 0x53, 0x79, 0x9d, 0xe1, 0x17, 0xc8, 0x47,
-    0x84, 0x87, 0x70, 0x86, 0xfe, 0x28, 0x94, 0x6f, 0x85, 0x97, 0x47, 0xeb,
-    0x2f, 0x82, 0x7b, 0x8d, 0x59, 0x7f, 0x6f, 0xd3, 0xc1, 0xcf, 0xac, 0xb8,
-    0xf6, 0x59, 0x6c, 0x59, 0x46, 0x8c, 0x19, 0x8b, 0x74, 0x2e, 0xd2, 0x57,
-    0x31, 0x21, 0x7b, 0xf6, 0x7b, 0x79, 0xe9, 0x65, 0xec, 0xd4, 0x2c, 0xbe,
-    0x98, 0x58, 0x61, 0x65, 0xf6, 0xdd, 0xc0, 0x2c, 0xbf, 0xce, 0xc0, 0x9e,
-    0xf4, 0x49, 0x65, 0x42, 0x26, 0x30, 0x6d, 0xc9, 0x67, 0xc8, 0xef, 0xfd,
-    0xec, 0x18, 0xcf, 0xec, 0xfb, 0xab, 0x2f, 0xe9, 0xc3, 0x11, 0xf5, 0xa5,
-    0x95, 0xb1, 0xf8, 0x8d, 0x02, 0xff, 0x0f, 0x3b, 0xe8, 0x20, 0x2c, 0xbe,
-    0x78, 0x39, 0xf5, 0x97, 0xfc, 0x39, 0xd9, 0xc8, 0xcd, 0x7e, 0xb2, 0xf7,
-    0x84, 0xe2, 0xca, 0xc3, 0xd9, 0x73, 0xbb, 0xfc, 0x63, 0xe9, 0x3f, 0xdc,
-    0x59, 0x7f, 0xbb, 0xc3, 0xfb, 0x3e, 0xea, 0xcb, 0xb6, 0x85, 0x95, 0x07,
-    0xfe, 0xe6, 0x61, 0x35, 0xbe, 0xce, 0x1f, 0xeb, 0x2a, 0x13, 0xbf, 0xd8,
-    0x8c, 0x66, 0x5e, 0x7c, 0x28, 0x4f, 0xcf, 0x96, 0xd4, 0xf4, 0xea, 0xb3,
-    0x27, 0x97, 0xa9, 0xec, 0x99, 0x95, 0xa2, 0xb2, 0xa9, 0x64, 0x47, 0x87,
-    0xb3, 0x54, 0xa1, 0x9e, 0x38, 0xe0, 0xf2, 0x54, 0x73, 0x10, 0xe6, 0x04,
-    0x71, 0xdf, 0x46, 0xa2, 0x72, 0x84, 0x26, 0x8d, 0x07, 0x52, 0x8b, 0xdb,
-    0x1e, 0x1f, 0xa5, 0xfb, 0x3c, 0xb4, 0x3f, 0xe3, 0xf9, 0x65, 0xa9, 0x14,
-    0xae, 0xbe, 0x4a, 0xfa, 0xec, 0xb2, 0x50, 0xc6, 0x6d, 0xbd, 0x56, 0x7e,
-    0x18, 0x22, 0x4a, 0x6d, 0xb8, 0x10, 0xb2, 0xf9, 0xc1, 0x1a, 0x59, 0x42,
-    0x9b, 0x7d, 0xc1, 0x6b, 0x85, 0xc5, 0x97, 0xfe, 0x38, 0xef, 0x9d, 0x8c,
-    0x2f, 0xd6, 0x5f, 0xfe, 0x7d, 0x4e, 0x7e, 0xce, 0xef, 0xc0, 0x32, 0x59,
-    0x46, 0x8a, 0x3f, 0x0b, 0xef, 0x3e, 0xbe, 0xee, 0xb2, 0x4b, 0x2f, 0xec,
-    0xec, 0x1b, 0x78, 0xb2, 0xff, 0x0e, 0x25, 0x9a, 0xce, 0x2c, 0xbf, 0xfe,
-    0xcd, 0x68, 0x32, 0xd6, 0x47, 0xd2, 0x36, 0xac, 0xbd, 0xc1, 0x38, 0xb2,
-    0xff, 0xe9, 0x74, 0x3b, 0x33, 0xf3, 0xb4, 0xf8, 0xb2, 0xff, 0xde, 0x0f,
-    0xdc, 0x86, 0xbf, 0xdd, 0x59, 0x6c, 0xf9, 0x11, 0x3d, 0x48, 0xbf, 0xf7,
-    0x61, 0xbc, 0x83, 0xd9, 0xfa, 0xb2, 0xfe, 0x7d, 0xd7, 0xcf, 0xba, 0xb2,
-    0xbe, 0x3e, 0xef, 0x1f, 0x5f, 0xe7, 0xc1, 0x9f, 0xc4, 0xeb, 0x2b, 0x0f,
-    0x50, 0x24, 0x77, 0xd1, 0xd9, 0x3a, 0xcb, 0xed, 0x6e, 0x41, 0x2c, 0xb1,
-    0x2c, 0xa8, 0x36, 0x82, 0x92, 0x5e, 0xe9, 0x42, 0xcb, 0xbc, 0xce, 0x17,
-    0x03, 0x72, 0x19, 0x06, 0x63, 0x31, 0x13, 0x4b, 0x3c, 0x64, 0xea, 0x05,
-    0x0a, 0x7e, 0x43, 0xaf, 0x79, 0x08, 0xaa, 0xa2, 0x10, 0xd3, 0x35, 0xf2,
-    0x88, 0x9e, 0x63, 0xbf, 0xb3, 0x40, 0x77, 0x02, 0xa2, 0xcd, 0x5f, 0xef,
-    0xe3, 0x86, 0xff, 0x0a, 0xb2, 0xfc, 0x19, 0xbc, 0x63, 0x59, 0x7f, 0xec,
-    0x1e, 0x63, 0x03, 0x23, 0xd9, 0x65, 0xf6, 0xbc, 0xec, 0xcd, 0x13, 0x8d,
-    0x35, 0x22, 0x9b, 0xfd, 0xdf, 0x61, 0xec, 0xd8, 0x59, 0x7f, 0xe8, 0xd7,
-    0xfd, 0xe7, 0xb0, 0xc6, 0xb2, 0xdb, 0x2c, 0xbd, 0x28, 0xf9, 0x65, 0xb2,
-    0x0d, 0x7c, 0xc2, 0x57, 0xc6, 0x4f, 0xb2, 0xca, 0xc4, 0x74, 0x78, 0xcc,
-    0x9b, 0xb8, 0x4d, 0x6f, 0x2c, 0xbf, 0x7a, 0x39, 0xe3, 0x59, 0x7f, 0xe3,
-    0xec, 0x34, 0x9d, 0x8f, 0x1a, 0xcb, 0xa3, 0xcb, 0x2f, 0xe2, 0xcd, 0xfe,
-    0x79, 0x2c, 0xb3, 0x3d, 0x91, 0x73, 0x82, 0x33, 0x13, 0xf8, 0xf7, 0xa2,
-    0xd4, 0xcd, 0x34, 0x7d, 0xc8, 0x7a, 0x5f, 0xff, 0x05, 0xf6, 0xd6, 0x35,
-    0x9f, 0xa3, 0x62, 0x0a, 0xca, 0x66, 0xaf, 0x30, 0xe1, 0xaa, 0xf2, 0x9d,
-    0x88, 0xba, 0xf8, 0xda, 0x26, 0x96, 0x5e, 0xf1, 0x8a, 0xb2, 0xfb, 0x85,
-    0x02, 0xac, 0xbe, 0x80, 0x67, 0x96, 0x5f, 0xc5, 0x0d, 0xe1, 0xec, 0xb2,
-    0xf1, 0x68, 0x2b, 0x2a, 0x47, 0x92, 0x65, 0xb7, 0xe0, 0x9c, 0xf1, 0x64,
-    0xcf, 0x4b, 0x2f, 0x07, 0xee, 0x2c, 0xbf, 0x09, 0xd2, 0x8f, 0xd6, 0x56,
-    0x8f, 0x1f, 0x78, 0xf5, 0xfb, 0x60, 0xc8, 0x30, 0xb2, 0xa0, 0xf3, 0x4c,
-    0x92, 0xf8, 0x42, 0xce, 0x2c, 0xbe, 0xf1, 0xfd, 0xc5, 0x97, 0x47, 0xcb,
-    0x2e, 0x39, 0xf5, 0x95, 0xba, 0x7a, 0x73, 0x11, 0x88, 0x2f, 0x76, 0x98,
-    0x59, 0x73, 0x59, 0xc2, 0xa9, 0x91, 0x91, 0xfc, 0x3a, 0x64, 0x53, 0x35,
-    0x34, 0x87, 0xd0, 0xcb, 0x72, 0x00, 0xba, 0x88, 0x69, 0x76, 0x1a, 0xcb,
-    0xb0, 0x6b, 0x2f, 0xda, 0x03, 0xb8, 0x15, 0x14, 0x02, 0xfe, 0x7d, 0x1f,
-    0x79, 0x8b, 0x2f, 0x3c, 0x99, 0xe1, 0xf0, 0x70, 0xd2, 0xff, 0x1b, 0x63,
-    0x77, 0xd9, 0xb2, 0xcb, 0x33, 0x92, 0x3d, 0x70, 0x55, 0xae, 0xde, 0x34,
-    0xba, 0x4d, 0x59, 0x7f, 0x1f, 0x26, 0x28, 0x1a, 0xcb, 0xda, 0xfa, 0x4b,
-    0x28, 0x67, 0x96, 0xe5, 0xb7, 0xe8, 0xfb, 0xaf, 0xa5, 0x97, 0xee, 0xf2,
-    0x47, 0xfa, 0xcb, 0xf8, 0xfd, 0x05, 0x1d, 0x59, 0x78, 0x6e, 0x6b, 0x2a,
-    0x49, 0x8d, 0x63, 0x11, 0x90, 0xb9, 0x47, 0x0a, 0x42, 0x57, 0x7e, 0x67,
-    0x93, 0x44, 0x96, 0x5f, 0xf4, 0x77, 0xd8, 0xdc, 0xd6, 0x2c, 0xbe, 0x9b,
-    0x30, 0x0b, 0x2f, 0xdd, 0x61, 0xf8, 0xcf, 0x47, 0xb2, 0x21, 0xbd, 0x49,
-    0x18, 0xc2, 0xc2, 0x0e, 0x99, 0xa6, 0x89, 0x11, 0x8d, 0xdd, 0xce, 0xac,
-    0xb4, 0x2c, 0xb7, 0x96, 0x53, 0x4d, 0x08, 0x44, 0x2f, 0x99, 0x3b, 0xfe,
-    0xe2, 0xcb, 0xff, 0xba, 0x61, 0xe0, 0x8d, 0xd6, 0x8d, 0x85, 0x97, 0xff,
-    0xed, 0xf1, 0xe3, 0x1f, 0xa2, 0x5c, 0x7f, 0x1f, 0x16, 0x5f, 0xdc, 0x86,
-    0x94, 0x4c, 0xb2, 0xde, 0x59, 0x78, 0x42, 0x99, 0x65, 0xbb, 0x86, 0xbf,
-    0xf1, 0x1b, 0xb3, 0x65, 0x95, 0x86, 0xf8, 0x89, 0xef, 0x8d, 0xb1, 0x32,
-    0xca, 0x92, 0x6f, 0x06, 0x8f, 0xfa, 0xb1, 0x42, 0x6a, 0x7c, 0x7e, 0xdc,
-    0x59, 0x7c, 0x33, 0x2f, 0xd6, 0x54, 0xe3, 0x66, 0xe2, 0x37, 0xff, 0x67,
-    0xfc, 0x27, 0x63, 0x37, 0x9e, 0x96, 0x5e, 0x08, 0xf1, 0x65, 0xfd, 0xae,
-    0x94, 0x37, 0x8b, 0x2f, 0xff, 0xda, 0x1b, 0x93, 0x1e, 0xcd, 0xdd, 0x1b,
-    0x61, 0x85, 0x95, 0x88, 0x86, 0x09, 0x6d, 0xa7, 0xd6, 0x56, 0x26, 0x3c,
-    0x68, 0xde, 0x85, 0x17, 0xe4, 0x57, 0xc0, 0x77, 0x02, 0xa2, 0xdf, 0x5e,
-    0x9f, 0x7e, 0xac, 0xbf, 0xc6, 0x50, 0xdf, 0xdf, 0xab, 0x2f, 0x4d, 0x9f,
-    0xac, 0xbf, 0x84, 0xeb, 0x81, 0xf4, 0xb2, 0xb4, 0x8c, 0xb6, 0x97, 0x78,
-    0x7d, 0xcc, 0xbf, 0x1e, 0xbf, 0xe3, 0xf4, 0x7d, 0x1b, 0xb9, 0xf2, 0xcb,
-    0xff, 0xfe, 0x79, 0x86, 0x7a, 0xf6, 0x0c, 0xa0, 0x0f, 0xb1, 0x43, 0x56,
-    0x5f, 0xf6, 0x83, 0xcf, 0x3c, 0xbf, 0x35, 0x96, 0x3f, 0xd1, 0x3f, 0xd6,
-    0x5b, 0xfd, 0x9b, 0x67, 0x78, 0xfd, 0x59, 0x5e, 0x3d, 0xc2, 0x29, 0xb0,
-    0xab, 0x2f, 0xf9, 0xc8, 0x1c, 0x8f, 0x3e, 0xea, 0xca, 0x60, 0xf3, 0x3a,
-    0x25, 0x7d, 0x84, 0x73, 0x2c, 0xbe, 0x3c, 0xd6, 0xf5, 0x97, 0xdf, 0x4b,
-    0x68, 0x59, 0x7a, 0x05, 0x9f, 0x59, 0x58, 0x78, 0x9a, 0x24, 0xbd, 0xe8,
-    0xd2, 0xcb, 0xf7, 0x8f, 0x5e, 0x75, 0x97, 0xff, 0xbd, 0x1b, 0x77, 0x3c,
-    0x59, 0xdf, 0x1a, 0xcb, 0xcd, 0xc1, 0xac, 0xb3, 0x56, 0x5f, 0xe8, 0xd8,
-    0x78, 0x2f, 0x19, 0xc2, 0x2e, 0x70, 0x72, 0x62, 0x77, 0x49, 0x10, 0x72,
-    0xa4, 0x9a, 0x7f, 0xa1, 0xb5, 0x7c, 0x36, 0xe7, 0xcb, 0x2f, 0xa5, 0xc1,
-    0x38, 0xb2, 0xa0, 0xf1, 0xfa, 0x47, 0x7d, 0x9d, 0xe6, 0x2c, 0xbf, 0x9f,
-    0xe1, 0x99, 0x6c, 0xb2, 0xa0, 0xf3, 0xf4, 0x43, 0x7b, 0x9e, 0x1a, 0xcb,
-    0xf0, 0x9d, 0x28, 0xfd, 0x65, 0x34, 0xf1, 0xb7, 0x8e, 0xdf, 0xfd, 0xde,
-    0x1f, 0x20, 0xb3, 0xbe, 0x35, 0x97, 0xfe, 0x7d, 0xcd, 0x1b, 0x19, 0xe3,
-    0x92, 0xcb, 0xfe, 0xfc, 0xfa, 0x4f, 0xd8, 0x1a, 0xcb, 0xc5, 0x9e, 0x59,
-    0x4d, 0x46, 0xb7, 0x90, 0xb8, 0x83, 0xbc, 0xe2, 0xfc, 0x38, 0xdd, 0x0b,
-    0x56, 0x5f, 0xf3, 0xf2, 0x30, 0x87, 0xe8, 0x59, 0x7f, 0xbd, 0x03, 0x3d,
-    0xf0, 0x35, 0x97, 0xfd, 0xac, 0xfb, 0xc4, 0xfb, 0xbb, 0x2c, 0xb6, 0x0c,
-    0xfc, 0x5a, 0x69, 0x77, 0x39, 0xa4, 0x67, 0x14, 0x29, 0xea, 0x15, 0x32,
-    0xe4, 0x3e, 0x8c, 0xfd, 0xe1, 0xf3, 0x70, 0x58, 0x59, 0x7c, 0xd9, 0xa0,
-    0x45, 0x94, 0xd3, 0x78, 0xe3, 0x17, 0x8c, 0xba, 0xb2, 0xe0, 0xfc, 0xb2,
-    0xff, 0x9e, 0x5d, 0xe6, 0x0b, 0xe3, 0x59, 0x7b, 0xe7, 0xf2, 0xca, 0x74,
-    0x44, 0xfe, 0x36, 0x43, 0x01, 0x39, 0xbf, 0xd1, 0xcc, 0xfb, 0xa7, 0xa5,
-    0x97, 0xdc, 0xec, 0x35, 0x65, 0x68, 0xf5, 0x7f, 0x33, 0xbd, 0xa8, 0xea,
-    0xcb, 0xfa, 0x67, 0x1f, 0x8d, 0xab, 0x2f, 0xee, 0x9e, 0x0e, 0x1a, 0xb2,
-    0xba, 0x7b, 0x42, 0x97, 0x5f, 0x3e, 0xc1, 0x25, 0x97, 0x70, 0x96, 0x5f,
-    0xdf, 0x72, 0x01, 0x8d, 0x59, 0x7c, 0xd0, 0x61, 0x2c, 0xa8, 0x4d, 0x0f,
-    0x44, 0x6e, 0xec, 0x44, 0x7c, 0x22, 0x08, 0xb0, 0x85, 0xd7, 0xe9, 0xa0,
-    0x8a, 0x16, 0x5c, 0x0d, 0x2c, 0xb9, 0xc9, 0x65, 0x19, 0xe9, 0x74, 0x98,
-    0x22, 0xf7, 0xe7, 0xda, 0x3c, 0xeb, 0x2f, 0x14, 0x30, 0xb2, 0xfb, 0x37,
-    0x5f, 0xcb, 0x2f, 0x13, 0xf4, 0x07, 0x81, 0xc1, 0xcb, 0x86, 0xd5, 0x97,
-    0xec, 0x9a, 0x51, 0xf2, 0xca, 0x60, 0xf0, 0x08, 0x5e, 0x80, 0x89, 0x4f,
-    0x39, 0x5f, 0xb0, 0xbb, 0x1c, 0x59, 0x69, 0x2c, 0xbf, 0xdf, 0xfe, 0x1e,
-    0x6e, 0xe7, 0xcb, 0x2b, 0x0f, 0x2d, 0xc4, 0x6f, 0xfc, 0xff, 0x7d, 0xc3,
-    0x1e, 0x0b, 0xc5, 0x95, 0x09, 0xf8, 0x64, 0x3e, 0xfc, 0x46, 0x4e, 0x3c,
-    0x20, 0xbf, 0xfe, 0x7f, 0xb5, 0x99, 0xf0, 0xbe, 0x0c, 0x7d, 0xc5, 0x97,
-    0xfb, 0xa7, 0xc7, 0x03, 0xec, 0xb2, 0xfc, 0xe4, 0x3f, 0x42, 0xcb, 0xef,
-    0xcc, 0x98, 0x59, 0x4e, 0x79, 0x3f, 0x93, 0x53, 0x25, 0xb3, 0x70, 0x9e,
-    0x4e, 0x19, 0x59, 0x0c, 0x47, 0x45, 0x28, 0x42, 0x8e, 0x34, 0x0c, 0x8c,
-    0x35, 0x84, 0xa0, 0x46, 0x6f, 0xf3, 0x69, 0x91, 0xee, 0x90, 0xcd, 0x1d,
-    0xb6, 0x9c, 0x1a, 0xe1, 0xe9, 0x59, 0x8f, 0x08, 0x1f, 0xe1, 0x52, 0x51,
-    0xea, 0x72, 0x16, 0xbd, 0x94, 0x3c, 0x14, 0xd1, 0x14, 0xf7, 0x1f, 0x2f,
-    0xe7, 0xf9, 0x9b, 0x5f, 0xab, 0x29, 0x9a, 0x7a, 0x25, 0x1d, 0x0d, 0xfc,
-    0x36, 0x7c, 0xef, 0x3e, 0x59, 0x78, 0x0e, 0x05, 0x97, 0xff, 0x08, 0x09,
-    0xd1, 0xad, 0x19, 0x38, 0x16, 0x56, 0x1f, 0x13, 0x47, 0x2e, 0x64, 0x4f,
-    0x2b, 0x2f, 0x35, 0xfe, 0x59, 0x7b, 0xf7, 0xf2, 0xcb, 0xb7, 0x9a, 0xcb,
-    0xed, 0x6b, 0x04, 0x59, 0x7f, 0xd1, 0x21, 0x5f, 0x5a, 0xc1, 0x16, 0x5e,
-    0xc1, 0x59, 0xcf, 0x48, 0xcf, 0x82, 0x0c, 0x1d, 0x98, 0x75, 0xc6, 0x08,
-    0x8e, 0xdc, 0x66, 0x9a, 0xee, 0xd0, 0xf0, 0xa8, 0x54, 0x46, 0x71, 0xf8,
-    0xdf, 0xff, 0xf3, 0x2c, 0xfa, 0x17, 0xd9, 0x9e, 0x4b, 0xd1, 0xac, 0xc2,
-    0x61, 0x65, 0xff, 0xff, 0xc0, 0x7d, 0x3f, 0xa5, 0x9d, 0xc1, 0xf1, 0xdb,
-    0x9a, 0xda, 0x3e, 0x59, 0x7f, 0x60, 0xdd, 0xb8, 0x4b, 0x28, 0xd1, 0x3b,
-    0xa7, 0x2b, 0xf6, 0x80, 0xee, 0x05, 0x45, 0x28, 0xbf, 0xfe, 0x7e, 0x96,
-    0x6d, 0xa8, 0xf1, 0xfb, 0x34, 0xb2, 0xee, 0x0a, 0xb2, 0xff, 0xde, 0x8f,
-    0xda, 0xf2, 0xe7, 0x05, 0x59, 0x79, 0xe4, 0xce, 0x11, 0xfb, 0x84, 0x5f,
-    0x9a, 0x71, 0x38, 0x41, 0x8b, 0xfe, 0x93, 0x3c, 0xd0, 0x1d, 0xc0, 0xa8,
-    0x93, 0x94, 0xd4, 0x52, 0x3a, 0xed, 0xfe, 0xd3, 0x3c, 0xf4, 0x4c, 0xeb,
-    0x29, 0x99, 0xeb, 0xb9, 0x15, 0x44, 0x69, 0xb2, 0x3b, 0x53, 0x1f, 0x65,
-    0x38, 0x8c, 0x3c, 0x6e, 0x42, 0x64, 0x68, 0x2c, 0x43, 0xb8, 0x11, 0xc0,
-    0x9c, 0x79, 0x9b, 0xb0, 0xf7, 0x9a, 0x1c, 0xfa, 0x85, 0xfb, 0x6d, 0x90,
-    0xaf, 0xa5, 0xfd, 0xbc, 0xae, 0x3f, 0xe3, 0x95, 0x29, 0x54, 0x5c, 0xad,
-    0x5b, 0x3b, 0x29, 0x38, 0x25, 0x3b, 0xe5, 0x80, 0xdf, 0xb4, 0x07, 0x70,
-    0x2a, 0x21, 0xf5, 0xff, 0x9e, 0x4c, 0xf3, 0x40, 0x77, 0x02, 0xa2, 0x53,
-    0x59, 0x9e, 0x22, 0x01, 0xa6, 0x97, 0xf9, 0x9e, 0x68, 0x0e, 0xe0, 0x54,
-    0x44, 0xeb, 0xf1, 0xf7, 0x81, 0x6a, 0xcb, 0xf0, 0x5a, 0x4e, 0xc2, 0xcb,
-    0xde, 0x89, 0x96, 0x54, 0xc7, 0xdb, 0xa2, 0x8f, 0x14, 0x5f, 0xe0, 0xfc,
-    0x20, 0xc3, 0xde, 0x2c, 0xbf, 0xfc, 0xca, 0x30, 0x2e, 0xee, 0xc3, 0x9e,
-    0xe7, 0x4e, 0xf4, 0xfa, 0xcb, 0xf6, 0x80, 0xee, 0x05, 0x44, 0x62, 0xbf,
-    0x70, 0xf7, 0xc3, 0x56, 0x5e, 0xfa, 0x5b, 0x2c, 0xb7, 0xa0, 0xf2, 0x30,
-    0xa6, 0xfe, 0x94, 0x7f, 0xe3, 0x15, 0x65, 0xff, 0xfc, 0x12, 0x76, 0x27,
-    0x75, 0x88, 0x29, 0x67, 0x8d, 0xab, 0x2f, 0xa1, 0xa0, 0xfd, 0x65, 0xff,
-    0xf4, 0xb6, 0x65, 0x22, 0x79, 0xd8, 0x1a, 0x9d, 0x3b, 0xd3, 0xeb, 0x2b,
-    0xc8, 0x88, 0xfc, 0x8e, 0xfe, 0xce, 0xc6, 0x7d, 0xd5, 0x97, 0xfe, 0xeb,
-    0x10, 0x52, 0xcf, 0x1b, 0x56, 0x5f, 0xf3, 0x10, 0x52, 0xcf, 0x1b, 0x56,
-    0x5f, 0x04, 0x9d, 0x89, 0xc7, 0xed, 0xd3, 0xeb, 0xf6, 0xbf, 0x3f, 0x42,
-    0xca, 0x69, 0xf1, 0x84, 0xee, 0xf8, 0xfe, 0x94, 0xf2, 0xb2, 0xfd, 0x3a,
-    0x62, 0x81, 0xac, 0xb3, 0x38, 0x5c, 0x1f, 0xd8, 0xc2, 0x46, 0xf8, 0xc8,
-    0x07, 0xc9, 0x89, 0x9a, 0x5f, 0xe8, 0x72, 0x91, 0x27, 0x23, 0x06, 0xe9,
-    0x14, 0xf9, 0x45, 0xff, 0xe6, 0x6d, 0x79, 0x33, 0xcd, 0x01, 0xdc, 0x0a,
-    0x89, 0xe5, 0x7d, 0x1b, 0xe3, 0xcb, 0x2f, 0xa0, 0xa5, 0xc5, 0x97, 0x67,
-    0x16, 0x5e, 0xec, 0x35, 0x65, 0xfb, 0xc6, 0x59, 0xbd, 0x65, 0x69, 0x13,
-    0xdf, 0x91, 0xb2, 0xc8, 0x7a, 0x2c, 0x20, 0xe5, 0xfb, 0x81, 0x1e, 0x35,
-    0x65, 0xd2, 0x11, 0x65, 0xf0, 0x5f, 0x52, 0x59, 0x79, 0xa1, 0xdd, 0x59,
-    0x7e, 0x71, 0xfa, 0x38, 0xb2, 0xff, 0x67, 0xbd, 0x1f, 0x3e, 0xea, 0xcb,
-    0x33, 0x84, 0x6f, 0xc8, 0xa0, 0x63, 0x1f, 0x91, 0x11, 0x07, 0x09, 0xe9,
-    0x9a, 0x71, 0xa2, 0xc6, 0x5f, 0x50, 0xc8, 0x66, 0xd8, 0xaa, 0x53, 0x99,
-    0xbe, 0x85, 0xef, 0x65, 0x42, 0xdf, 0xb4, 0x07, 0x70, 0x2a, 0x22, 0x05,
-    0xff, 0x9e, 0x4c, 0xf3, 0x40, 0x77, 0x02, 0xa2, 0x54, 0x5f, 0xda, 0x0f,
-    0xa0, 0x80, 0xb2, 0xfe, 0x01, 0xe6, 0xe7, 0xa1, 0x65, 0x41, 0xee, 0x61,
-    0x6d, 0x99, 0xe2, 0x3f, 0x1a, 0x68, 0x50, 0xa8, 0xbf, 0x68, 0x0e, 0xe0,
-    0x54, 0x45, 0x0b, 0xf7, 0x8d, 0xa1, 0x1a, 0xcb, 0xff, 0x05, 0xf4, 0xf2,
-    0xe9, 0xf0, 0x2b, 0x2f, 0xfa, 0x3e, 0x2c, 0xef, 0x21, 0xab, 0x28, 0x8f,
-    0xd8, 0x27, 0xd7, 0xa3, 0xfc, 0x59, 0x66, 0x78, 0x98, 0x7b, 0x9a, 0x72,
-    0x13, 0xc2, 0x10, 0xdf, 0xe6, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x19, 0x2f,
-    0xda, 0x03, 0xb8, 0x15, 0x13, 0x2a, 0xfd, 0x2c, 0xeb, 0x81, 0x65, 0xf9,
-    0x9b, 0x5e, 0x4c, 0xf0, 0xf6, 0xfe, 0x34, 0xbf, 0x68, 0x0e, 0xe0, 0x54,
-    0x54, 0x8b, 0x12, 0xcb, 0xa4, 0xd5, 0x96, 0x11, 0x65, 0x99, 0xe1, 0xf6,
-    0xee, 0x9a, 0x68, 0x40, 0x22, 0xf7, 0xf9, 0x9e, 0x68, 0x0e, 0xe0, 0x54,
-    0x57, 0x4b, 0xfc, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x2c, 0x55, 0xff, 0x47,
-    0x39, 0x0d, 0xee, 0x01, 0x65, 0xf0, 0x1d, 0xc0, 0xa8, 0x9e, 0x97, 0xe6,
-    0xbc, 0x99, 0xe0, 0x0f, 0x9b, 0x47, 0x17, 0x85, 0x70, 0x2c, 0xbf, 0xbd,
-    0x07, 0xa3, 0x65, 0xac, 0xbf, 0x41, 0xcf, 0x9e, 0xe2, 0xcb, 0x85, 0x67,
-    0x87, 0xf2, 0x01, 0xd7, 0x30, 0xbf, 0xff, 0xfc, 0x3c, 0x15, 0x99, 0x63,
-    0x0c, 0x3f, 0x78, 0x65, 0x34, 0x03, 0x59, 0xf2, 0xcb, 0xff, 0xfb, 0x33,
-    0xc6, 0x0f, 0x63, 0x32, 0xce, 0xf8, 0xc5, 0x59, 0x7f, 0xfe, 0x98, 0xa1,
-    0xac, 0xf3, 0x86, 0x28, 0xdd, 0xd8, 0x59, 0x77, 0x3a, 0xb2, 0xec, 0xe2,
-    0xcb, 0xff, 0x66, 0xbe, 0x86, 0xf9, 0xf3, 0x4b, 0x2e, 0xe7, 0xeb, 0x2f,
-    0xc4, 0xed, 0x28, 0x59, 0x7f, 0x07, 0x9e, 0x79, 0x33, 0x9e, 0x51, 0x50,
-    0xe2, 0xe4, 0x2c, 0x29, 0xf0, 0x83, 0x17, 0xb6, 0x8d, 0xd5, 0x97, 0x6b,
-    0xab, 0x2f, 0xd9, 0xde, 0x1b, 0x56, 0x5f, 0xfe, 0x8f, 0xbb, 0x93, 0x1e,
-    0xbb, 0xc0, 0xee, 0xac, 0xbc, 0xff, 0x33, 0x84, 0x56, 0xb9, 0x01, 0x0b,
-    0xf4, 0x9e, 0xb1, 0x53, 0x7e, 0xa3, 0x00, 0xe4, 0x64, 0x34, 0x35, 0x70,
-    0x64, 0xf9, 0xd9, 0x59, 0x54, 0xcd, 0x72, 0xc2, 0x21, 0x72, 0x72, 0xef,
-    0xef, 0xff, 0x0d, 0x9f, 0x7a, 0x1d, 0x84, 0x9b, 0x81, 0xf9, 0x65, 0xf1,
-    0xc0, 0x59, 0x6b, 0x2e, 0xec, 0x2c, 0xa9, 0xe8, 0xdd, 0xfc, 0x4b, 0x7e,
-    0x3f, 0x13, 0xcc, 0xb2, 0xfd, 0x2c, 0x1c, 0xec, 0x59, 0x7e, 0x73, 0xdb,
-    0x50, 0xb2, 0xfd, 0xd2, 0x0b, 0xcf, 0x6b, 0x29, 0x92, 0x8a, 0x38, 0x27,
-    0xf1, 0x48, 0x84, 0xf7, 0x37, 0xf5, 0x97, 0xec, 0xe9, 0x87, 0x8b, 0x2e,
-    0x9e, 0x99, 0x55, 0x65, 0x4f, 0x47, 0xc4, 0xca, 0xa3, 0x0c, 0xa1, 0x3d,
-    0xfa, 0x78, 0x4f, 0x5c, 0xd7, 0x56, 0x5f, 0xe1, 0x0b, 0x35, 0xa8, 0x02,
-    0xca, 0x9e, 0x8f, 0x9e, 0x7b, 0x34, 0xbe, 0xd3, 0x7b, 0xf2, 0xcb, 0xc0,
-    0x3e, 0x2c, 0xbf, 0x32, 0x19, 0x31, 0x26, 0xac, 0xbf, 0xf3, 0x29, 0x3c,
-    0xcf, 0x6c, 0x99, 0xee, 0x7b, 0x9e, 0x33, 0xdc, 0xf4, 0xb2, 0xff, 0xd3,
-    0xc2, 0x7b, 0x9e, 0x33, 0xc2, 0x78, 0x32, 0x59, 0x2c, 0x89, 0xe9, 0x65,
-    0xff, 0xa7, 0x8b, 0x29, 0x3c, 0x27, 0x8c, 0xf0, 0x64, 0xb2, 0xac, 0xf0,
-    0x9e, 0x96, 0x5f, 0xf7, 0x87, 0x26, 0x72, 0xe1, 0x33, 0x64, 0xa6, 0xa3,
-    0x3c, 0xb7, 0x32, 0xab, 0x7d, 0x4f, 0x49, 0xfa, 0xb2, 0xac, 0x70, 0x37,
-    0xe6, 0x4b, 0x5d, 0xc9, 0x65, 0xfd, 0x07, 0xde, 0xc3, 0x56, 0x53, 0x20,
-    0xf5, 0xa7, 0x81, 0x55, 0xe0, 0x67, 0x92, 0x5d, 0xcd, 0x2c, 0xbc, 0xd8,
-    0xe2, 0xcb, 0xff, 0xfd, 0xd1, 0x35, 0x1e, 0x8c, 0x00, 0xcc, 0xb6, 0x6c,
-    0x49, 0x65, 0xda, 0x85, 0x94, 0x67, 0xef, 0xfb, 0x0d, 0xe9, 0x8c, 0x55,
-    0x97, 0x64, 0x96, 0x5d, 0x9f, 0x99, 0xb4, 0x71, 0xeb, 0xf7, 0x7f, 0x10,
-    0xa6, 0x59, 0x7f, 0xe7, 0xe4, 0xee, 0x73, 0x25, 0x28, 0x59, 0x6e, 0x2c,
-    0xbf, 0xa0, 0x07, 0xb3, 0x92, 0xcb, 0xff, 0xf1, 0x3b, 0x07, 0xa8, 0x94,
-    0xb3, 0x9f, 0xff, 0x0b, 0x2f, 0xf3, 0xf4, 0x39, 0x84, 0xc2, 0xca, 0x1a,
-    0x6b, 0x78, 0x56, 0xc1, 0x5c, 0xc8, 0x1a, 0x11, 0xf1, 0x67, 0xea, 0xd7,
-    0xf6, 0x76, 0x0a, 0x26, 0x59, 0x7f, 0xff, 0x68, 0xf7, 0x1d, 0xac, 0xe3,
-    0x5a, 0x3d, 0xc0, 0x07, 0x65, 0x97, 0xc7, 0xe1, 0x1a, 0xb2, 0xff, 0xf1,
-    0xb1, 0x3b, 0x09, 0xfe, 0xe3, 0x0c, 0x3a, 0xca, 0x01, 0xf8, 0x91, 0x1d,
-    0xff, 0xe7, 0xe1, 0x67, 0xec, 0xfc, 0x60, 0x7d, 0x2c, 0xb8, 0x85, 0x59,
-    0x7e, 0xe1, 0x05, 0xe4, 0xb2, 0xfe, 0xec, 0xd2, 0x7d, 0x30, 0xb2, 0xec,
-    0x02, 0xcb, 0xc3, 0xc6, 0x1c, 0xf1, 0xba, 0x61, 0x7d, 0xe8, 0x68, 0x16,
-    0x54, 0x23, 0x67, 0x05, 0xdd, 0xb7, 0xa6, 0x77, 0xdc, 0x90, 0x7f, 0x59,
-    0x78, 0x79, 0xe5, 0x97, 0xa6, 0x31, 0x56, 0x58, 0x72, 0x37, 0x46, 0x39,
-    0x7f, 0xf4, 0xe8, 0x82, 0x86, 0xce, 0x9d, 0xe9, 0xf5, 0x95, 0x07, 0xe4,
-    0x44, 0xd7, 0xfe, 0xf6, 0x4d, 0xe3, 0xf4, 0x6a, 0x16, 0x5c, 0xff, 0x2c,
-    0xbf, 0xcf, 0xc7, 0xf0, 0x4b, 0x65, 0x94, 0x47, 0x94, 0x11, 0x7a, 0x9c,
-    0xbd, 0xb7, 0xb0, 0xbc, 0xa1, 0x26, 0x71, 0xd8, 0xcc, 0xcf, 0xa2, 0xc6,
-    0xc3, 0x57, 0xc4, 0x25, 0x19, 0x27, 0x0e, 0xbb, 0x0d, 0x01, 0x08, 0x37,
-    0x21, 0x11, 0x74, 0x69, 0x65, 0xd9, 0xe5, 0x97, 0xc5, 0x9b, 0xf1, 0x65,
-    0x00, 0xf3, 0xa7, 0xc5, 0x84, 0x16, 0xbe, 0xc6, 0x9f, 0x56, 0x56, 0x8f,
-    0x53, 0xa6, 0x77, 0x80, 0x1d, 0x2c, 0xbd, 0xa7, 0xc5, 0x97, 0x89, 0xfa,
-    0xb2, 0xf1, 0x1f, 0x16, 0x58, 0x56, 0x49, 0xb6, 0x81, 0xbb, 0xa3, 0xcb,
-    0x2f, 0xb5, 0xbd, 0xda, 0xb2, 0xfe, 0x03, 0x4a, 0x3e, 0xfd, 0x65, 0xf8,
-    0xb3, 0xb0, 0x2a, 0xcb, 0xff, 0xc7, 0x3b, 0xd9, 0x31, 0xfd, 0xcf, 0x60,
-    0x16, 0x5f, 0x9a, 0x4f, 0xde, 0x2c, 0xbd, 0x19, 0xa5, 0x97, 0xff, 0x80,
-    0xfa, 0x7e, 0x9f, 0x20, 0xa3, 0xf5, 0x96, 0x97, 0x8f, 0x8c, 0x41, 0xba,
-    0xf9, 0x16, 0x7a, 0x84, 0x55, 0x42, 0xa7, 0x4d, 0x88, 0x86, 0x3b, 0x8a,
-    0x20, 0x2b, 0x31, 0x69, 0x89, 0x38, 0x5f, 0xd2, 0x70, 0xc6, 0x01, 0x7c,
-    0x36, 0x8b, 0xc5, 0x97, 0x8c, 0x46, 0xac, 0xb8, 0xc6, 0xb2, 0x9c, 0xd9,
-    0x88, 0x3b, 0x7b, 0x9b, 0x9b, 0x8b, 0x2f, 0xa7, 0x4b, 0xf6, 0xac, 0xbd,
-    0xac, 0x1a, 0xcb, 0xfc, 0xfd, 0x89, 0xb8, 0x6d, 0x59, 0x4c, 0x1e, 0x7f,
-    0x87, 0x2f, 0xf4, 0x48, 0xb3, 0xee, 0xe2, 0xcb, 0xf0, 0x0f, 0xed, 0x89,
-    0x65, 0xff, 0xce, 0x08, 0x21, 0xcd, 0x28, 0xd6, 0xcb, 0x2c, 0x7f, 0x1f,
-    0x77, 0x8a, 0x6f, 0xe2, 0xd3, 0xbb, 0xf5, 0x65, 0xff, 0xf7, 0x78, 0x3d,
-    0x61, 0xb1, 0xe1, 0x5c, 0xb6, 0x59, 0x7c, 0x43, 0xc6, 0x16, 0x5e, 0xf0,
-    0x5a, 0xb2, 0xed, 0xe3, 0x59, 0x4c, 0xad, 0x56, 0x84, 0x95, 0xf0, 0x87,
-    0xe2, 0x33, 0x75, 0xd1, 0x1f, 0xa1, 0x40, 0xe5, 0x1c, 0x2b, 0xea, 0x90,
-    0x48, 0x85, 0x1d, 0xbf, 0x61, 0x14, 0x6c, 0xb2, 0xdf, 0x2c, 0xd1, 0xa6,
-    0xbf, 0x72, 0x68, 0x2d, 0x96, 0x56, 0x1e, 0x5f, 0x48, 0xaf, 0xc4, 0xc1,
-    0xe7, 0x16, 0x5f, 0xed, 0x4b, 0xc7, 0xc3, 0x1a, 0xcb, 0xe7, 0xeb, 0x81,
-    0x65, 0x19, 0xea, 0x0a, 0x67, 0x7c, 0x16, 0x5f, 0x36, 0x59, 0x7f, 0xe1,
-    0x5f, 0xfc, 0x07, 0x9f, 0xfe, 0x2c, 0xa8, 0x3e, 0x9c, 0x28, 0xbf, 0xf7,
-    0x1f, 0xe8, 0x27, 0x1e, 0x30, 0xb2, 0x8d, 0x36, 0x4f, 0x3d, 0x94, 0x22,
-    0xfa, 0x41, 0x7f, 0xfb, 0xbe, 0xc6, 0xfe, 0xfa, 0xcd, 0xf8, 0x35, 0x97,
-    0x47, 0x96, 0x58, 0x6b, 0x29, 0xa6, 0x9c, 0x85, 0xac, 0xc2, 0xcb, 0xc5,
-    0xfc, 0x2c, 0xb8, 0x87, 0x38, 0xd7, 0x70, 0x4a, 0xfe, 0xce, 0x0a, 0xe5,
-    0xb2, 0xca, 0x84, 0xc7, 0x71, 0xcd, 0xd3, 0x88, 0xba, 0xfd, 0xa0, 0xf1,
-    0xc0, 0xb2, 0xf7, 0x07, 0x0b, 0x2f, 0xfb, 0x9d, 0xc0, 0x07, 0xf7, 0xc5,
-    0x94, 0xc1, 0xea, 0xb8, 0xe5, 0x42, 0x27, 0xc2, 0xfb, 0x6e, 0x2c, 0xb6,
-    0x2c, 0xb3, 0x4c, 0xd0, 0xee, 0x08, 0xdf, 0xf6, 0x13, 0xcb, 0x92, 0x17,
-    0x65, 0x97, 0xd2, 0xe1, 0x92, 0xcb, 0xff, 0x00, 0x9f, 0xcf, 0xf6, 0x7d,
-    0xd5, 0x95, 0x24, 0x4d, 0x7c, 0x74, 0x12, 0x1b, 0xed, 0x63, 0xb5, 0x65,
-    0x41, 0xe9, 0x39, 0x8d, 0xfe, 0x7d, 0x4a, 0x00, 0x60, 0x59, 0x50, 0xba,
-    0xcd, 0x91, 0xc2, 0x9c, 0x6b, 0xde, 0x86, 0xcb, 0xa1, 0x94, 0x62, 0xa1,
-    0x20, 0xbf, 0xfc, 0xc3, 0xe7, 0xdd, 0xec, 0x66, 0xf3, 0x02, 0xcb, 0xfc,
-    0x59, 0xce, 0xbb, 0x92, 0xca, 0x60, 0xff, 0x37, 0xa6, 0x5f, 0xff, 0xf8,
-    0xf5, 0xa8, 0x13, 0xa6, 0x41, 0x96, 0x70, 0x61, 0x7d, 0x49, 0x65, 0xff,
-    0xfc, 0x58, 0xc6, 0x14, 0xee, 0x77, 0xd8, 0xd1, 0x23, 0xf5, 0x95, 0x08,
-    0xca, 0xc6, 0xcb, 0xfc, 0x17, 0xe1, 0xcc, 0x62, 0xac, 0xa3, 0x4d, 0x13,
-    0xd0, 0xef, 0x22, 0x1b, 0xde, 0x82, 0x59, 0x7b, 0xee, 0xb5, 0x65, 0x00,
-    0xdc, 0xb8, 0xdd, 0xf0, 0xf4, 0x62, 0xac, 0xb9, 0x8d, 0xeb, 0x2f, 0x60,
-    0x46, 0xb2, 0xb6, 0x3d, 0x92, 0x23, 0xe0, 0xd5, 0xe3, 0x2e, 0xac, 0xbf,
-    0x9f, 0x79, 0xcc, 0x62, 0xac, 0xa6, 0x9e, 0x58, 0x83, 0x77, 0xf8, 0x3a,
-    0xd9, 0xb1, 0x9d, 0x59, 0x7f, 0xdc, 0x86, 0x8f, 0xd0, 0x40, 0x59, 0x71,
-    0x96, 0x1f, 0x63, 0x06, 0x95, 0x08, 0xbb, 0x1c, 0x23, 0xef, 0x48, 0x3c,
-    0x59, 0x7f, 0x0d, 0xf5, 0xfc, 0xfe, 0x2c, 0xbd, 0xe1, 0x37, 0xac, 0xbf,
-    0xe8, 0x69, 0x60, 0x34, 0x7f, 0xac, 0xb0, 0xd6, 0x5e, 0xe7, 0x31, 0x65,
-    0x87, 0x06, 0xb5, 0xc4, 0x6a, 0x48, 0xaa, 0xe1, 0x00, 0x59, 0x6f, 0xef,
-    0x39, 0x83, 0x09, 0x65, 0xfe, 0x96, 0x1f, 0x38, 0x18, 0x59, 0x7f, 0x0f,
-    0x0a, 0x5e, 0xc5, 0x95, 0x07, 0xbc, 0x66, 0x57, 0xfe, 0xec, 0x37, 0xe0,
-    0x1f, 0xd9, 0xa5, 0x97, 0xef, 0x66, 0x8f, 0x8b, 0x2f, 0x11, 0xcb, 0xe3,
-    0xe7, 0xea, 0x05, 0xff, 0x9f, 0x3f, 0x82, 0x71, 0xe3, 0x0b, 0x2a, 0x13,
-    0x80, 0xda, 0x11, 0x32, 0x84, 0x3f, 0xe6, 0x77, 0xff, 0x8b, 0xb3, 0xf9,
-    0x34, 0x9f, 0x5b, 0x0e, 0x16, 0x5f, 0xff, 0xc5, 0x28, 0xeb, 0xfb, 0x86,
-    0xfd, 0xfc, 0x42, 0x92, 0xcb, 0xee, 0xf7, 0x37, 0x56, 0x5f, 0xf4, 0x64,
-    0xbd, 0x87, 0x2e, 0x2c, 0xae, 0x1e, 0xe7, 0x49, 0x6f, 0xc3, 0x9b, 0xc1,
-    0xdd, 0x59, 0x5f, 0x1e, 0x79, 0x11, 0x56, 0x26, 0xec, 0x69, 0xcf, 0x18,
-    0x35, 0xfb, 0x44, 0x78, 0xc2, 0xcb, 0x9b, 0x25, 0x97, 0xfc, 0xf8, 0x01,
-    0xe6, 0xbf, 0x35, 0x94, 0x33, 0xcf, 0xf0, 0xbd, 0xfe, 0xfb, 0x82, 0x11,
-    0xc0, 0xd6, 0x56, 0x8f, 0x58, 0x88, 0xaa, 0x11, 0xda, 0x70, 0xcc, 0xbf,
-    0xe8, 0x97, 0x0a, 0x3f, 0x76, 0xac, 0xbf, 0x8f, 0x5b, 0x07, 0xfc, 0x59,
-    0x7e, 0xec, 0x61, 0x01, 0x65, 0xf7, 0xdd, 0x86, 0xac, 0xa6, 0x0f, 0x27,
-    0xe2, 0x6b, 0xfe, 0x90, 0x9d, 0x3f, 0x19, 0x75, 0x65, 0xff, 0xb3, 0x74,
-    0x7e, 0x8f, 0x47, 0x78, 0xb2, 0xff, 0xf4, 0x67, 0xdd, 0xf4, 0x74, 0xa3,
-    0xfe, 0x2c, 0xba, 0x3f, 0x59, 0x77, 0x9a, 0xb2, 0x80, 0x6b, 0xb8, 0x2f,
-    0x5b, 0x27, 0x5e, 0x6f, 0x0e, 0x48, 0x47, 0x3d, 0x41, 0x0b, 0xc5, 0xff,
-    0xe2, 0x0b, 0xc9, 0xa1, 0xef, 0xa0, 0x2c, 0xb5, 0x97, 0xb6, 0x3d, 0x2c,
-    0xbf, 0xee, 0x1f, 0xdd, 0x9a, 0x51, 0xf2, 0xcb, 0xf7, 0x3b, 0xcc, 0xea,
-    0xca, 0xe1, 0xf2, 0x04, 0xf2, 0xfe, 0x0b, 0x2c, 0xe6, 0x31, 0x56, 0x5d,
-    0x9e, 0x59, 0x78, 0x51, 0x45, 0x49, 0x7f, 0xfb, 0xa7, 0xde, 0x78, 0xe7,
-    0xc4, 0xd4, 0x49, 0x23, 0x33, 0x41, 0x4c, 0x26, 0xd8, 0x70, 0x81, 0x72,
-    0x2e, 0x99, 0x84, 0xda, 0xe9, 0x8d, 0x65, 0xff, 0xfd, 0x28, 0x2c, 0xef,
-    0x8f, 0x3b, 0x0d, 0x3d, 0x49, 0x65, 0x68, 0xfb, 0xfa, 0x2f, 0x7e, 0xce,
-    0x04, 0xba, 0xb2, 0x8c, 0xf2, 0x48, 0x8a, 0xa4, 0xcd, 0x0e, 0x1b, 0x6e,
-    0x3c, 0x82, 0x33, 0x5f, 0x89, 0xcc, 0x76, 0x68, 0x6d, 0xea, 0x3b, 0x06,
-    0xc7, 0x7f, 0xe8, 0xc8, 0x7f, 0x26, 0x28, 0xf9, 0xf8, 0xad, 0xd8, 0xee,
-    0xb7, 0xc6, 0x0f, 0x7f, 0xdf, 0x4b, 0x9c, 0xc1, 0xbf, 0x56, 0x5f, 0xda,
-    0xec, 0x05, 0x97, 0xc5, 0x96, 0xc5, 0x97, 0xda, 0x27, 0xde, 0xb2, 0xf6,
-    0x39, 0x2c, 0xb9, 0xc5, 0x59, 0x50, 0x8d, 0x01, 0x9d, 0x30, 0x64, 0x62,
-    0x1a, 0x23, 0x68, 0xd5, 0xef, 0xf9, 0x8b, 0x2f, 0xf3, 0xca, 0x6f, 0x1f,
-    0xdd, 0x59, 0x67, 0x59, 0x7a, 0x3d, 0xc5, 0x95, 0xf1, 0xac, 0x31, 0x0b,
-    0xff, 0x40, 0x27, 0x61, 0x40, 0x59, 0x7c, 0x59, 0x7f, 0xff, 0x3f, 0x4f,
-    0xce, 0xd9, 0xd9, 0xc8, 0xcd, 0x61, 0x2c, 0xbf, 0xfb, 0x8f, 0xf7, 0x39,
-    0x85, 0xfc, 0xfe, 0x2c, 0xbf, 0xfc, 0x60, 0xe4, 0x4f, 0xe7, 0x65, 0x2c,
-    0xe2, 0xca, 0x1a, 0x76, 0x5a, 0x61, 0x69, 0x09, 0x21, 0xf5, 0x67, 0x7a,
-    0x45, 0xf6, 0xbd, 0x84, 0xb2, 0x8c, 0xfe, 0x9d, 0x66, 0xfe, 0x18, 0x92,
-    0x3f, 0xf8, 0xb2, 0xfe, 0x29, 0xc2, 0x72, 0x31, 0x65, 0xf7, 0x63, 0xe1,
-    0x56, 0x50, 0x15, 0x76, 0x7a, 0x52, 0x4b, 0x90, 0x7e, 0x60, 0x29, 0x7d,
-    0xff, 0xfb, 0xa1, 0x13, 0xa5, 0x1f, 0xbf, 0x7f, 0x10, 0xa4, 0xb2, 0xfe,
-    0x3e, 0xf7, 0x09, 0xab, 0x2e, 0x17, 0xcb, 0x2f, 0xff, 0x41, 0x00, 0x4d,
-    0x3f, 0xe7, 0xdf, 0x42, 0xcb, 0xe7, 0xd9, 0xc9, 0x65, 0xfb, 0xbe, 0xcf,
-    0xdd, 0x65, 0x7c, 0x79, 0x24, 0x43, 0x7f, 0x36, 0x77, 0xb3, 0xf7, 0x59,
-    0x7f, 0x0b, 0xcc, 0xc2, 0xd9, 0x65, 0x42, 0x20, 0x30, 0x88, 0xcc, 0x2f,
-    0xa3, 0x91, 0xbd, 0x65, 0xff, 0xd0, 0x4f, 0xd9, 0x43, 0x0e, 0x2f, 0x56,
-    0x57, 0x8f, 0x9c, 0x24, 0x77, 0xa7, 0x38, 0x16, 0x54, 0x2a, 0x84, 0x92,
-    0xc8, 0x0b, 0x3f, 0x18, 0xe4, 0x62, 0x7d, 0x84, 0xa6, 0xe1, 0x15, 0xfd,
-    0x21, 0x1a, 0xd3, 0xdd, 0x59, 0x7f, 0x4b, 0x9d, 0x38, 0xf9, 0x65, 0xf3,
-    0x44, 0x82, 0x59, 0x7c, 0x63, 0xc6, 0xac, 0xbe, 0x77, 0x2f, 0xd6, 0x58,
-    0x58, 0x3c, 0x26, 0x08, 0x6e, 0x0b, 0x56, 0x5f, 0xe1, 0x5e, 0x6c, 0x94,
-    0x6e, 0xac, 0xbf, 0x6e, 0x06, 0x63, 0x99, 0x65, 0x1a, 0x29, 0x3c, 0x53,
-    0xc1, 0x70, 0x9b, 0xdf, 0xf1, 0xb7, 0xdf, 0x3e, 0xef, 0x78, 0xb2, 0xfe,
-    0x03, 0xfb, 0xd8, 0x35, 0x95, 0x07, 0xd4, 0x13, 0xdb, 0xfd, 0x0f, 0xaf,
-    0x0a, 0xe3, 0x49, 0x70, 0xa2, 0xa4, 0xa1, 0x9e, 0x60, 0xa6, 0x77, 0xba,
-    0x7b, 0xa9, 0x19, 0x9a, 0x3b, 0xfb, 0xe0, 0x1f, 0x3c, 0x6b, 0x2f, 0x83,
-    0x20, 0xf5, 0x65, 0x42, 0xb2, 0x0f, 0x8c, 0x8c, 0xba, 0x68, 0xc2, 0x1b,
-    0x0a, 0x6e, 0x42, 0x43, 0xa6, 0x33, 0xe5, 0xd7, 0xc4, 0x3f, 0x3a, 0xcb,
-    0xd8, 0xfb, 0xab, 0x2b, 0x0d, 0xfe, 0x88, 0x6f, 0xec, 0xfc, 0xa3, 0xbc,
-    0x59, 0x70, 0xbc, 0x59, 0x6c, 0x59, 0x6f, 0xb0, 0xd4, 0x74, 0x62, 0xfb,
-    0xe9, 0x32, 0x7e, 0x59, 0x7f, 0xf7, 0x38, 0x32, 0x81, 0xfa, 0x3b, 0xc5,
-    0x95, 0x08, 0x94, 0xc2, 0x70, 0x94, 0xdf, 0xef, 0x1b, 0xcb, 0xa7, 0xb2,
-    0xcb, 0xff, 0x74, 0xf4, 0xff, 0xee, 0x77, 0x3c, 0xb2, 0xff, 0x8c, 0x52,
-    0xce, 0x98, 0x7f, 0x59, 0x7f, 0x1b, 0x4e, 0x63, 0x15, 0x65, 0xf8, 0xf4,
-    0x38, 0xd9, 0x65, 0xfe, 0x7d, 0x77, 0x84, 0x6c, 0x2c, 0xbf, 0xe7, 0x17,
-    0xb9, 0xe1, 0xc3, 0x56, 0x5f, 0xfe, 0xe6, 0x31, 0x81, 0xd3, 0x8e, 0x3d,
-    0x0b, 0x2f, 0x84, 0x1f, 0xa1, 0x65, 0x42, 0xaf, 0x39, 0x43, 0xa7, 0xe2,
-    0xe3, 0x33, 0xdd, 0x42, 0xd1, 0xcf, 0x8b, 0x9c, 0xa0, 0x8c, 0xf8, 0x72,
-    0x14, 0x9b, 0xd3, 0x3e, 0x96, 0x5f, 0xf7, 0x7d, 0x9f, 0x86, 0x3e, 0x11,
-    0x65, 0xff, 0xff, 0x9c, 0xfb, 0x1e, 0x2c, 0xef, 0x8c, 0x49, 0x46, 0xf3,
-    0x2f, 0xd6, 0x5f, 0x81, 0x8d, 0x8e, 0x2c, 0xbc, 0x12, 0x1a, 0xcb, 0xff,
-    0xde, 0xc3, 0xd9, 0xb0, 0xe7, 0x27, 0xe2, 0xca, 0x84, 0xd4, 0x3e, 0x1d,
-    0xf1, 0xe3, 0xb6, 0x7e, 0x4f, 0xd1, 0xcb, 0xd0, 0x5d, 0x59, 0x71, 0xe9,
-    0x65, 0x6c, 0x6c, 0x70, 0x6e, 0xff, 0x48, 0xdb, 0xef, 0x9f, 0x75, 0x65,
-    0xf3, 0xea, 0x24, 0xb2, 0xff, 0x9f, 0xe9, 0xdf, 0x73, 0x09, 0x85, 0x95,
-    0xb2, 0x2d, 0xbe, 0x21, 0x69, 0xbf, 0x48, 0x6f, 0xbd, 0xba, 0x6d, 0x59,
-    0x78, 0xa3, 0xf5, 0x95, 0x38, 0xf0, 0x78, 0x4b, 0x7f, 0x75, 0xda, 0xd8,
-    0x6a, 0xcb, 0x37, 0x0f, 0x47, 0xe2, 0x4b, 0xfd, 0xf7, 0xb2, 0x6f, 0x1e,
-    0x96, 0x54, 0x1e, 0xee, 0x14, 0x5f, 0xfa, 0x3e, 0xf4, 0x34, 0x1e, 0x39,
-    0x96, 0x5f, 0xf4, 0xb9, 0xe7, 0x04, 0x10, 0xd6, 0x5e, 0xff, 0xbe, 0x59,
-    0x67, 0xf8, 0xf5, 0xbf, 0x38, 0xa8, 0x56, 0x99, 0x91, 0x9f, 0x9c, 0x65,
-    0xda, 0x20, 0x78, 0x4b, 0x5f, 0xc4, 0x3e, 0x70, 0xda, 0xb2, 0xfc, 0x07,
-    0xdb, 0x05, 0x59, 0x7e, 0x8d, 0x0f, 0x09, 0x65, 0x61, 0xfe, 0x11, 0x6f,
-    0x4a, 0x6f, 0xd1, 0x3e, 0x7e, 0x0a, 0xcb, 0xe2, 0xd1, 0xf9, 0x65, 0xe9,
-    0xf8, 0x11, 0x65, 0xff, 0xd1, 0xfc, 0x79, 0xa4, 0xec, 0x78, 0xd6, 0x5a,
-    0x7b, 0x59, 0x7f, 0x7a, 0x08, 0x57, 0xf9, 0x65, 0xff, 0x8a, 0x68, 0xc2,
-    0xdb, 0x3e, 0xea, 0xca, 0x19, 0xf6, 0xb9, 0x75, 0xff, 0xc6, 0x3f, 0x40,
-    0x23, 0xf7, 0x2f, 0xd6, 0x5f, 0x0a, 0xf0, 0xd5, 0x97, 0xe7, 0xe6, 0xc7,
-    0xa5, 0x97, 0xda, 0x30, 0xec, 0xb8, 0xbd, 0x57, 0x80, 0x1d, 0x97, 0x17,
-    0xaa, 0xff, 0xd8, 0x7b, 0xf0, 0xb0, 0x6f, 0x25, 0xc5, 0xea, 0xbf, 0x39,
-    0x7d, 0x26, 0x63, 0x45, 0x2f, 0x0c, 0x05, 0x2b, 0xa1, 0xa6, 0x3a, 0xd8,
-    0x66, 0xdf, 0x98, 0xeb, 0xb9, 0x2c, 0xbc, 0x41, 0xd9, 0x65, 0x39, 0xe2,
-    0x74, 0x9e, 0x8d, 0x11, 0xc4, 0xdb, 0x50, 0xae, 0xc8, 0x65, 0xb8, 0x54,
-    0x64, 0x3a, 0x20, 0x6a, 0x23, 0xc2, 0x0f, 0x84, 0x3d, 0x44, 0x0c, 0x79,
-    0xb7, 0xf8, 0x9d, 0xbe, 0x8c, 0x1a, 0xcb, 0xa7, 0xa9, 0xe5, 0x65, 0xe3,
-    0x8d, 0x2c, 0xa9, 0xec, 0xde, 0x78, 0x86, 0xff, 0xed, 0x1b, 0x63, 0x74,
-    0xb1, 0xbf, 0x42, 0xca, 0x91, 0xf6, 0x4c, 0x4d, 0x78, 0x9c, 0x6b, 0x2f,
-    0x73, 0x67, 0x59, 0x46, 0x6e, 0x04, 0x1b, 0xbf, 0xdd, 0x3d, 0x40, 0x33,
-    0x7a, 0xcb, 0x9a, 0x6b, 0x2a, 0x0f, 0x2b, 0x63, 0x4b, 0xf6, 0x37, 0x4f,
-    0xf2, 0xca, 0x1a, 0x2d, 0x49, 0xaf, 0x84, 0x57, 0xe9, 0x66, 0xf8, 0x92,
-    0xcb, 0xd9, 0xa8, 0x59, 0x40, 0x54, 0xb9, 0xf4, 0x36, 0x4e, 0x31, 0x0d,
-    0x17, 0xf8, 0xa6, 0xff, 0xc7, 0x31, 0x8b, 0x06, 0x3c, 0x6a, 0xcb, 0xcf,
-    0xad, 0x96, 0x52, 0xcb, 0x10, 0x0d, 0x44, 0xc3, 0xb7, 0xf7, 0x9e, 0x6d,
-    0x46, 0xcb, 0x2f, 0xe3, 0xfb, 0x9e, 0xc0, 0x2c, 0xbf, 0xa3, 0x7e, 0x7b,
-    0xd0, 0xb2, 0xfd, 0x9d, 0xe6, 0x4c, 0xb3, 0xc6, 0xba, 0xff, 0xff, 0xfc,
-    0x79, 0xf7, 0x0f, 0x05, 0x9d, 0x9f, 0x4b, 0x87, 0xde, 0x1f, 0xc3, 0x18,
-    0x76, 0x59, 0x7f, 0xfe, 0x32, 0x1c, 0xe1, 0x3a, 0x7c, 0x73, 0x20, 0xc9,
-    0x65, 0xf3, 0xed, 0xe3, 0x59, 0x58, 0x9f, 0x59, 0x93, 0xcc, 0x5e, 0x4b,
-    0x9d, 0x38, 0xdf, 0x08, 0x99, 0xf5, 0x6b, 0xc1, 0xd4, 0x96, 0x5f, 0xf9,
-    0xae, 0x3d, 0x47, 0x7d, 0x83, 0x59, 0x7f, 0x3f, 0x7f, 0x10, 0xa4, 0xb2,
-    0xff, 0x86, 0xee, 0x2f, 0xef, 0xde, 0x2c, 0xbf, 0xf0, 0xe3, 0xaf, 0x2c,
-    0xde, 0xe3, 0x59, 0x7e, 0x3d, 0xb6, 0x3d, 0x2c, 0xbf, 0x41, 0x10, 0x5a,
-    0xb2, 0xd2, 0xe9, 0xe7, 0x88, 0x53, 0x53, 0x93, 0x7b, 0x81, 0xdd, 0x8f,
-    0x98, 0x2f, 0x69, 0xd3, 0xc2, 0x3a, 0xff, 0x44, 0x8d, 0x98, 0xa2, 0x8a,
-    0x92, 0xec, 0xf2, 0xcb, 0xb0, 0x6b, 0x2f, 0xdd, 0xfc, 0x42, 0x92, 0xca,
-    0x60, 0xf0, 0x1c, 0x5a, 0xfe, 0xf3, 0xe8, 0x11, 0xd5, 0x97, 0x38, 0xd6,
-    0x5f, 0xda, 0x7e, 0x79, 0xe4, 0xb2, 0xdf, 0x2c, 0xb8, 0xc5, 0x59, 0x70,
-    0x9f, 0xac, 0xa9, 0x8d, 0x87, 0xe2, 0xf7, 0xa4, 0xe3, 0x59, 0x70, 0xa2,
-    0xac, 0xa9, 0x23, 0x77, 0x05, 0x80, 0x5a, 0x68, 0x5c, 0x23, 0x14, 0x72,
-    0xf7, 0x44, 0xfd, 0x23, 0x33, 0xd6, 0xbf, 0xd8, 0xd3, 0x1e, 0xc1, 0xe2,
-    0xcb, 0xff, 0xfb, 0xf9, 0xfc, 0xd4, 0x74, 0xc0, 0x63, 0xda, 0x0a, 0x16,
-    0x5e, 0xcf, 0xba, 0xb2, 0xd8, 0x47, 0xf5, 0xc5, 0xda, 0xf2, 0x35, 0x39,
-    0x0a, 0xeb, 0xfe, 0x31, 0xe3, 0x4e, 0x63, 0x15, 0x65, 0xff, 0xff, 0x4b,
-    0xd0, 0x38, 0x3f, 0xbf, 0xd6, 0x0e, 0x34, 0x7f, 0x7e, 0xb2, 0xff, 0xf3,
-    0x8f, 0x30, 0x98, 0xe7, 0x30, 0xbf, 0x59, 0x7d, 0xe0, 0xbb, 0x10, 0x8e,
-    0xbc, 0x39, 0x6b, 0x4d, 0xe2, 0x8f, 0x2c, 0xbf, 0xff, 0xa4, 0xfc, 0xe4,
-    0x66, 0xc1, 0x90, 0xf4, 0x4e, 0x2a, 0xcb, 0x40, 0xd1, 0x7a, 0xc2, 0x31,
-    0x8d, 0xd7, 0x15, 0x02, 0xf6, 0x3d, 0x0b, 0xe9, 0x78, 0xf8, 0xb2, 0xfe,
-    0x7d, 0xb3, 0x09, 0x85, 0x97, 0xf1, 0xb4, 0x18, 0x40, 0x59, 0x7c, 0xfb,
-    0x73, 0xcb, 0x2b, 0x47, 0x9f, 0xc2, 0xca, 0x9c, 0xbb, 0x9d, 0x25, 0x61,
-    0x91, 0x7d, 0x1b, 0x01, 0xcb, 0x0b, 0x22, 0xbe, 0x11, 0x75, 0xf2, 0xfd,
-    0xbc, 0x4f, 0x1f, 0x56, 0x5f, 0xf6, 0x77, 0xd1, 0xae, 0xe0, 0x16, 0x5c,
-    0xc3, 0xac, 0xbf, 0x7d, 0x84, 0x19, 0x96, 0x5d, 0xa9, 0x96, 0x5d, 0xa8,
-    0x59, 0x50, 0x6b, 0xb0, 0x62, 0xa1, 0x98, 0xcf, 0x25, 0x7c, 0x94, 0xa2,
-    0x71, 0xf4, 0x79, 0x7d, 0xe7, 0x81, 0xbf, 0x84, 0x11, 0x15, 0xf4, 0xe0,
-    0x22, 0xf3, 0xea, 0xf7, 0xf7, 0x3c, 0x7b, 0xf3, 0x65, 0x97, 0xfd, 0xe0,
-    0xf7, 0xd9, 0xa3, 0xe2, 0xcb, 0xdc, 0x79, 0x96, 0x5f, 0x36, 0x3e, 0x92,
-    0xcb, 0xff, 0x66, 0xf8, 0x19, 0x67, 0x73, 0xf5, 0x97, 0x61, 0x2c, 0xb6,
-    0x7c, 0x7a, 0x9b, 0xcf, 0xef, 0xde, 0xec, 0x49, 0xab, 0x2e, 0x13, 0xf5,
-    0x94, 0x68, 0xe2, 0xd3, 0xbf, 0x8a, 0xbf, 0x28, 0xbf, 0xf8, 0xc6, 0xfd,
-    0x3e, 0x64, 0xb3, 0xcb, 0x2e, 0x7d, 0xc5, 0x97, 0xb3, 0xee, 0xac, 0xb6,
-    0x78, 0xfe, 0x3a, 0x85, 0xb8, 0x33, 0x7f, 0xf7, 0xe2, 0x14, 0x8b, 0x3b,
-    0xdc, 0xd9, 0x65, 0xfb, 0x4f, 0xbf, 0x71, 0xd6, 0x54, 0x95, 0x63, 0x0c,
-    0xc3, 0xe3, 0x9d, 0x43, 0xfc, 0xa1, 0x6b, 0xd3, 0x7d, 0xe8, 0xd7, 0xed,
-    0xf8, 0x46, 0xc2, 0xcb, 0xc4, 0x0d, 0xc5, 0x97, 0xff, 0xf7, 0xdc, 0x27,
-    0xe7, 0xb2, 0x59, 0xe3, 0xd7, 0x9d, 0x65, 0xf6, 0x7d, 0xb6, 0xf5, 0x97,
-    0xfc, 0x43, 0xc2, 0x0c, 0xb3, 0x8b, 0x2f, 0xbe, 0xe0, 0x7f, 0x59, 0x71,
-    0x01, 0x65, 0x41, 0xbb, 0x72, 0x5b, 0xfc, 0x27, 0x4b, 0x36, 0x3d, 0x2c,
-    0xbf, 0x10, 0x18, 0x1f, 0xcb, 0x2f, 0x9f, 0x73, 0x09, 0x65, 0xe3, 0xe1,
-    0xac, 0xa7, 0x3e, 0x8e, 0x15, 0x74, 0x8e, 0xa1, 0x51, 0x1e, 0x14, 0x98,
-    0xfe, 0x96, 0x9c, 0x9b, 0xf7, 0x22, 0x1f, 0x0c, 0x27, 0x2f, 0xfe, 0xda,
-    0x04, 0xfc, 0x32, 0x93, 0xf8, 0x2b, 0x2f, 0xfb, 0xc6, 0x33, 0x65, 0xc1,
-    0x1a, 0xcb, 0xff, 0xe3, 0x63, 0x0d, 0xba, 0x80, 0xb2, 0xdf, 0xdc, 0x59,
-    0x7f, 0x9e, 0x58, 0x3d, 0x73, 0x8b, 0x2f, 0xa3, 0x04, 0x1a, 0xcb, 0xff,
-    0xfa, 0x45, 0x19, 0xcc, 0x2e, 0xfb, 0x06, 0x1e, 0xf1, 0x65, 0xfe, 0x60,
-    0xfa, 0xfe, 0x17, 0x75, 0x65, 0xfd, 0x1b, 0x4f, 0xe6, 0xa1, 0x65, 0xfe,
-    0xc9, 0xbd, 0x9c, 0x72, 0x59, 0x7f, 0xe1, 0xe7, 0xd2, 0xe7, 0x78, 0xff,
-    0xac, 0xad, 0x1f, 0x98, 0x4c, 0xaf, 0xb9, 0xcc, 0x15, 0x65, 0xfe, 0x14,
-    0x7e, 0xcd, 0xf9, 0xa5, 0x97, 0xff, 0x1b, 0x67, 0x03, 0xc7, 0xe0, 0x1f,
-    0x16, 0x5f, 0xec, 0x96, 0x05, 0x96, 0xe4, 0xb2, 0xff, 0xe8, 0x97, 0xa3,
-    0xee, 0xc7, 0x9f, 0x75, 0x65, 0x42, 0x3e, 0x34, 0x6d, 0xe4, 0x62, 0x35,
-    0xbf, 0xff, 0xc6, 0x59, 0xf7, 0x58, 0x7e, 0xfa, 0x3d, 0x9b, 0xde, 0x4b,
-    0x2f, 0x66, 0x12, 0xca, 0xd9, 0x5e, 0x80, 0xd4, 0xc0, 0x67, 0xf1, 0x11,
-    0xac, 0xcc, 0x71, 0xa8, 0x51, 0xf8, 0x8b, 0xb1, 0x8d, 0xef, 0x3b, 0xdc,
-    0x62, 0xb8, 0xa1, 0x65, 0xfc, 0x3e, 0x7a, 0x05, 0xe2, 0xcb, 0xfe, 0x19,
-    0xea, 0x37, 0xff, 0xc9, 0x2c, 0xba, 0x1a, 0xb2, 0xa0, 0xf4, 0xbc, 0x79,
-    0x5e, 0x45, 0xbb, 0x8a, 0xf6, 0x10, 0x37, 0xfd, 0xc7, 0xf1, 0x8c, 0x07,
-    0xb2, 0xcb, 0xfc, 0xf2, 0xc1, 0xf3, 0x90, 0xb2, 0xfe, 0xef, 0xa1, 0xb3,
-    0x12, 0xca, 0x84, 0x4c, 0xe1, 0xcf, 0xe6, 0x55, 0x0b, 0xcd, 0x39, 0x38,
-    0x14, 0xf1, 0xb1, 0x86, 0x19, 0xb7, 0xa0, 0xba, 0xb2, 0xff, 0xdb, 0xcf,
-    0xbf, 0x84, 0xb8, 0x63, 0x59, 0x7e, 0xce, 0x78, 0x3b, 0x2c, 0xb6, 0xb0,
-    0xfa, 0xbc, 0x83, 0x7f, 0xff, 0x9e, 0x42, 0x4b, 0xd8, 0x16, 0x5e, 0x13,
-    0x04, 0x59, 0x32, 0xca, 0x84, 0x46, 0x34, 0x9e, 0xfc, 0x7a, 0x94, 0xd0,
-    0xb2, 0xff, 0xef, 0x61, 0x3b, 0x1e, 0x3e, 0xc8, 0xd6, 0x58, 0xfc, 0x7d,
-    0x7c, 0x28, 0xbf, 0xff, 0x18, 0x40, 0x27, 0xdf, 0xbf, 0x1f, 0x47, 0xf7,
-    0xeb, 0x2f, 0xd1, 0x37, 0x8f, 0x4b, 0x2f, 0xe0, 0xf7, 0x91, 0xfe, 0xcb,
-    0x2f, 0x9f, 0x51, 0x25, 0x97, 0xff, 0xf1, 0x93, 0x99, 0x7f, 0xa8, 0xf3,
-    0x9f, 0x63, 0xcb, 0x28, 0x68, 0xa8, 0x23, 0x0e, 0x90, 0xdf, 0x8f, 0xbc,
-    0x0e, 0xcb, 0x2f, 0xfe, 0x89, 0x08, 0x37, 0xdb, 0x1a, 0xfc, 0x59, 0x7f,
-    0xf8, 0x8f, 0xfe, 0xfc, 0x03, 0xd0, 0x90, 0x35, 0x97, 0xfd, 0xe1, 0x06,
-    0x1e, 0xf3, 0xf8, 0x59, 0x50, 0x88, 0x87, 0x4c, 0xa1, 0xaa, 0x70, 0x02,
-    0xd1, 0xc3, 0x41, 0xa5, 0xe4, 0x53, 0xd8, 0x66, 0xdf, 0xcf, 0xfb, 0x98,
-    0xcd, 0x65, 0xf3, 0xb7, 0x8e, 0xb2, 0xf4, 0x36, 0x16, 0x56, 0x8f, 0xa3,
-    0x85, 0x9b, 0xc8, 0x6f, 0xda, 0x08, 0x3d, 0x0b, 0x2f, 0xed, 0x4d, 0x23,
-    0xef, 0x16, 0x58, 0xa0, 0xf5, 0xf0, 0xa2, 0xfb, 0x35, 0x1c, 0x59, 0x7f,
-    0xa6, 0x79, 0x9f, 0xe9, 0x71, 0x65, 0xfc, 0xfb, 0x1c, 0xc6, 0x2a, 0xcb,
-    0xff, 0xfc, 0xe2, 0xf7, 0x3d, 0x38, 0x79, 0x34, 0x9f, 0x5b, 0x78, 0x2b,
-    0x2a, 0x11, 0xd9, 0x84, 0x2e, 0x6c, 0x45, 0xf7, 0xec, 0x2d, 0xb0, 0x55,
-    0x97, 0xe7, 0x6f, 0x8c, 0x55, 0x95, 0xb1, 0xe8, 0x0c, 0xa2, 0xff, 0xa3,
-    0x61, 0x25, 0xe0, 0xbe, 0xcb, 0x2f, 0xf8, 0xc1, 0x93, 0x39, 0x6c, 0xc9,
-    0x59, 0x58, 0x89, 0xcd, 0x11, 0x91, 0xe5, 0xa7, 0xb5, 0x97, 0xe8, 0xd6,
-    0xb3, 0xcb, 0x2f, 0x3c, 0xba, 0xb2, 0xff, 0xfa, 0x18, 0x17, 0x0f, 0x78,
-    0xae, 0x38, 0xc6, 0xac, 0xbf, 0x89, 0xd8, 0x86, 0xc2, 0xca, 0x64, 0xa3,
-    0x5e, 0x42, 0xcd, 0x27, 0x21, 0xc0, 0xa9, 0x5e, 0xd9, 0x86, 0x16, 0x5e,
-    0x65, 0x37, 0x7f, 0x59, 0x6d, 0xd5, 0x97, 0xd2, 0x08, 0xd9, 0xcf, 0x26,
-    0xe9, 0x82, 0x6b, 0xf9, 0xaf, 0xf4, 0xf5, 0x9e, 0x59, 0x78, 0x57, 0xe2,
-    0xcb, 0xf9, 0xb1, 0x85, 0xde, 0x2c, 0xbf, 0x46, 0xd9, 0x23, 0x59, 0x78,
-    0x41, 0xb3, 0xc4, 0x51, 0xf8, 0xcf, 0x83, 0xbd, 0x2c, 0xa9, 0x93, 0x35,
-    0xf4, 0x39, 0x2f, 0xff, 0x1f, 0x30, 0x73, 0xee, 0x38, 0x28, 0xfd, 0x65,
-    0xf7, 0xbc, 0xe3, 0x59, 0x50, 0xa8, 0x98, 0x71, 0xc7, 0x80, 0xa9, 0xd2,
-    0xef, 0xff, 0xc6, 0x08, 0x6f, 0x1f, 0x58, 0xd0, 0x81, 0xe4, 0xb2, 0xff,
-    0x9f, 0x4f, 0xd3, 0xd3, 0xfe, 0xb2, 0xe3, 0xde, 0xb2, 0xff, 0x41, 0x3f,
-    0x82, 0x5b, 0x2c, 0xbf, 0xf1, 0xb1, 0x03, 0x32, 0x7d, 0x30, 0xb2, 0xff,
-    0xf6, 0x7d, 0xdf, 0xba, 0x62, 0xe0, 0xde, 0x4b, 0x2b, 0x11, 0x15, 0xf9,
-    0xf5, 0xbc, 0xb2, 0xa4, 0x9c, 0xa0, 0x15, 0x37, 0x4e, 0x1a, 0x30, 0x50,
-    0xbc, 0x09, 0x1d, 0xe1, 0xc3, 0x56, 0x5f, 0xdf, 0xe4, 0xd1, 0xf7, 0x16,
-    0x5f, 0xfb, 0xd8, 0x40, 0x9d, 0x83, 0x3d, 0xeb, 0x2f, 0xff, 0xf1, 0x38,
-    0xbe, 0xc6, 0xb8, 0xbd, 0xe6, 0x0a, 0x33, 0x6a, 0xcb, 0xde, 0xc9, 0x96,
-    0x5f, 0xee, 0xe6, 0xb2, 0x68, 0x61, 0x65, 0x62, 0x64, 0x86, 0x61, 0x32,
-    0x0f, 0x98, 0xba, 0x3b, 0x7f, 0x98, 0x2c, 0xdb, 0x60, 0x92, 0xca, 0x84,
-    0xef, 0xf2, 0x34, 0x00, 0xa5, 0x5f, 0xde, 0x79, 0x47, 0x24, 0xb2, 0xff,
-    0xb3, 0xc7, 0xf7, 0x3c, 0x1e, 0x2c, 0xbb, 0x08, 0x07, 0xcf, 0xf9, 0x6d,
-    0xff, 0xbe, 0x94, 0x77, 0xb0, 0xed, 0xd9, 0x65, 0xff, 0xec, 0xf3, 0xbb,
-    0x49, 0xf4, 0x71, 0xc5, 0x96, 0xc6, 0xa2, 0x1b, 0x7a, 0x05, 0xf9, 0xff,
-    0x1e, 0x12, 0xca, 0xf1, 0xe8, 0x91, 0x55, 0xf8, 0xe7, 0xf3, 0x4c, 0x2c,
-    0xb9, 0xe1, 0x65, 0xcc, 0x49, 0x65, 0xfb, 0xc7, 0xbc, 0xc0, 0xb2, 0xec,
-    0xf4, 0x8f, 0x04, 0x03, 0x14, 0xd4, 0x57, 0x70, 0xae, 0x7d, 0x5a, 0xf0,
-    0xa2, 0x8a, 0x92, 0xff, 0xda, 0x20, 0xb8, 0x99, 0x34, 0x35, 0x63, 0x33,
-    0x41, 0x7a, 0x63, 0x15, 0x65, 0xef, 0x07, 0xf5, 0x96, 0xf1, 0x9b, 0xc9,
-    0x87, 0xac, 0x05, 0x95, 0x08, 0xc5, 0xc8, 0x46, 0xe8, 0x9e, 0xff, 0x40,
-    0xf2, 0x50, 0x40, 0x59, 0x50, 0xd9, 0x8a, 0x6d, 0x18, 0x8c, 0xa1, 0x1b,
-    0x92, 0xa5, 0xce, 0x19, 0x3b, 0xb0, 0x88, 0x9a, 0x31, 0x1d, 0x46, 0x4a,
-    0xd8, 0xc1, 0x7d, 0x29, 0xcd, 0xe3, 0xd7, 0x29, 0x43, 0xdc, 0x84, 0xe7,
-    0x63, 0x04, 0x0c, 0x33, 0xc5, 0x8c, 0x60, 0x43, 0x3b, 0xe3, 0xd3, 0xfe,
-    0xb2, 0xff, 0x0f, 0xd1, 0xb1, 0x67, 0xcb, 0x29, 0xa7, 0xad, 0xf9, 0x15,
-    0xf6, 0xb5, 0x9e, 0x59, 0x7f, 0x78, 0xf7, 0x37, 0x02, 0xc2, 0xca, 0x83,
-    0xd7, 0x01, 0x15, 0x99, 0x6b, 0x2c, 0x6b, 0x2f, 0xfb, 0xb1, 0xae, 0x7a,
-    0x0b, 0xab, 0x2c, 0xcb, 0x59, 0x7f, 0xdd, 0x8d, 0x73, 0xd0, 0x5d, 0x59,
-    0x77, 0x21, 0x65, 0xe6, 0x8e, 0x16, 0x5f, 0xe2, 0xeb, 0xcd, 0xc8, 0xea,
-    0xca, 0x33, 0xcf, 0x71, 0xcb, 0xe3, 0x7c, 0x02, 0xcb, 0xff, 0x66, 0xf2,
-    0xce, 0x4c, 0x50, 0x35, 0x97, 0xc0, 0x1c, 0x6c, 0xb2, 0xef, 0xe1, 0x65,
-    0xee, 0x1e, 0x96, 0x56, 0x1e, 0xb7, 0xe4, 0x7d, 0x17, 0xbf, 0xd2, 0xc2,
-    0x31, 0xe1, 0x2c, 0xbd, 0xde, 0x33, 0x84, 0xf9, 0xb0, 0x56, 0x63, 0x8f,
-    0x32, 0xfe, 0x40, 0x44, 0x1c, 0x84, 0xaf, 0x4b, 0xee, 0xe4, 0x2c, 0xbc,
-    0xd1, 0xc2, 0xcb, 0xfc, 0x5d, 0x79, 0xb9, 0x1d, 0x59, 0x46, 0x79, 0xee,
-    0x39, 0x7c, 0x6f, 0x80, 0x59, 0x7f, 0xec, 0xde, 0x59, 0xc9, 0x8a, 0x06,
-    0xb2, 0xf8, 0x03, 0x8d, 0x96, 0x5f, 0xd3, 0x7e, 0x7b, 0xaf, 0x32, 0xcb,
-    0xbf, 0x85, 0x97, 0xb8, 0x7a, 0x59, 0x58, 0x88, 0x90, 0x11, 0xfe, 0x67,
-    0xd1, 0x7b, 0xfd, 0x2c, 0x23, 0x1e, 0x12, 0xcb, 0xf8, 0x9c, 0x78, 0xc3,
-    0x38, 0x5c, 0xa7, 0x18, 0xae, 0x08, 0x02, 0x50, 0xf4, 0xd0, 0x8a, 0xf3,
-    0x2f, 0xe4, 0x04, 0x41, 0xc8, 0x64, 0x74, 0xf6, 0xff, 0xed, 0x47, 0xdc,
-    0x28, 0x6e, 0x7d, 0xd5, 0x97, 0xff, 0xe7, 0x1e, 0x61, 0x30, 0x21, 0x41,
-    0x6c, 0x7a, 0x59, 0x79, 0xf5, 0xb2, 0xe4, 0x12, 0x5f, 0x4b, 0x3e, 0x92,
-    0xe4, 0x12, 0x5e, 0xe1, 0x8d, 0x72, 0x09, 0x2e, 0x14, 0x55, 0xc8, 0x24,
-    0xa0, 0x22, 0xa6, 0x62, 0xae, 0x98, 0x0a, 0x53, 0x73, 0xf5, 0x32, 0x09,
-    0x0c, 0xcd, 0xfd, 0xff, 0xff, 0xc3, 0x28, 0x1f, 0xa3, 0xbc, 0x8e, 0xc0,
-    0xe3, 0xb8, 0xdf, 0xc5, 0x59, 0x7f, 0x67, 0xb3, 0x09, 0x85, 0x97, 0x9c,
-    0xbf, 0x9c, 0xbf, 0xbf, 0x13, 0x99, 0x1a, 0x86, 0x13, 0x51, 0x4a, 0x33,
-    0xce, 0x1b, 0x75, 0xca, 0xfa, 0x7f, 0x1f, 0xcb, 0x2d, 0x9b, 0xa8, 0xaf,
-    0xfe, 0x11, 0x76, 0x92, 0xcb, 0xfa, 0x41, 0xdb, 0xa7, 0xb2, 0x4b, 0xed,
-    0x7e, 0x7d, 0x59, 0x7c, 0xe3, 0xf6, 0x2c, 0xbc, 0x33, 0x6a, 0xcb, 0xff,
-    0x7a, 0x3a, 0x65, 0x0d, 0x8e, 0x2c, 0xa8, 0x44, 0xe3, 0x04, 0x6e, 0x43,
-    0xc1, 0xca, 0x99, 0x30, 0x8f, 0x43, 0x32, 0xff, 0xa0, 0xa4, 0x51, 0xfb,
-    0xb5, 0x65, 0xfc, 0x03, 0xe7, 0x73, 0xcb, 0x2f, 0xc7, 0xdd, 0x05, 0xab,
-    0x2f, 0xa3, 0xc1, 0xd2, 0xcb, 0xde, 0x7e, 0xac, 0xad, 0x8f, 0x9a, 0x62,
-    0x8e, 0x11, 0x5a, 0x16, 0x5f, 0xe3, 0x90, 0x5f, 0x9e, 0x35, 0x97, 0xf6,
-    0x6f, 0x76, 0xe7, 0x96, 0x5a, 0x49, 0x2f, 0x3e, 0xb6, 0x49, 0x49, 0x2a,
-    0x0d, 0xc8, 0x04, 0x5a, 0x3b, 0x7a, 0x3f, 0x02, 0x46, 0x66, 0xb6, 0x9a,
-    0x8c, 0x32, 0x84, 0xa5, 0xe2, 0x97, 0x96, 0x5e, 0xfa, 0x5c, 0x59, 0x50,
-    0x9a, 0xb6, 0x43, 0xd5, 0xa4, 0xee, 0x39, 0x7f, 0x9f, 0x6c, 0x2d, 0x8f,
-    0x4b, 0x2f, 0xda, 0xfd, 0xa7, 0xc5, 0x97, 0xf0, 0x85, 0x2e, 0x78, 0x6b,
-    0x30, 0xd4, 0xdf, 0xdd, 0xe7, 0xee, 0xfa, 0x59, 0x7d, 0x00, 0x3e, 0x2c,
-    0xbe, 0x0b, 0xea, 0x4b, 0x2c, 0xd5, 0x96, 0x90, 0xcd, 0x9c, 0xc4, 0x55,
-    0x08, 0xaa, 0xd8, 0xbb, 0x15, 0x2f, 0xfe, 0xcf, 0xbb, 0xc3, 0x28, 0xfd,
-    0xda, 0xb2, 0xf4, 0xa3, 0xe5, 0x97, 0xd9, 0x31, 0xb5, 0x65, 0x6c, 0x88,
-    0x39, 0x91, 0x05, 0x1d, 0xbf, 0x44, 0xd2, 0x8f, 0xd2, 0x5e, 0xc2, 0xfd,
-    0x65, 0xff, 0xfb, 0xd8, 0x72, 0xe4, 0xee, 0xfb, 0x06, 0x1e, 0xf1, 0x65,
-    0x01, 0x13, 0xba, 0x29, 0xe8, 0xe5, 0xff, 0x7e, 0xe5, 0xd9, 0xb3, 0x58,
-    0xb2, 0xc6, 0xb2, 0xff, 0xb6, 0x0c, 0x87, 0xe0, 0xb9, 0x2c, 0xbf, 0x8e,
-    0x1b, 0xb6, 0x0a, 0xb2, 0xfd, 0x9b, 0x37, 0x1a, 0xb2, 0xf7, 0x0f, 0x4b,
-    0x28, 0x8f, 0x13, 0xa5, 0x17, 0xf1, 0x3f, 0xff, 0x87, 0x8b, 0x2f, 0xe3,
-    0x60, 0x48, 0x6b, 0x31, 0xa6, 0x19, 0x82, 0x1a, 0x3a, 0xe3, 0x97, 0x48,
-    0x6b, 0x15, 0x5a, 0x9c, 0x34, 0x1c, 0xc0, 0xa3, 0x45, 0xbf, 0xbd, 0xec,
-    0xdb, 0xbc, 0x59, 0x7b, 0x36, 0x0a, 0xca, 0xc3, 0xcc, 0x22, 0xfb, 0xfe,
-    0xce, 0xce, 0x2c, 0xfc, 0x4f, 0x96, 0x54, 0x36, 0x56, 0xf2, 0xa4, 0x84,
-    0x0c, 0xc7, 0x23, 0x19, 0x60, 0xab, 0xe3, 0x73, 0x84, 0x9e, 0x8c, 0x7d,
-    0x1b, 0x33, 0xa0, 0x7e, 0xb8, 0x50, 0xe8, 0xe4, 0xb6, 0x7e, 0xc2, 0x4a,
-    0x7c, 0x82, 0xff, 0xfd, 0xb6, 0xb5, 0x83, 0x76, 0xf9, 0xfa, 0x51, 0x32,
-    0xcb, 0xff, 0xff, 0xc1, 0xd0, 0x66, 0x27, 0xff, 0x9c, 0xc6, 0x30, 0x3a,
-    0x71, 0xc7, 0xa1, 0x65, 0xff, 0xf6, 0x76, 0x3b, 0xcd, 0x41, 0x77, 0xd9,
-    0x25, 0x97, 0xf0, 0x63, 0x5a, 0x3d, 0x96, 0x5f, 0xd2, 0x8f, 0xfc, 0x62,
-    0xac, 0xbf, 0x9c, 0x7e, 0x82, 0x0a, 0xcb, 0xe0, 0x31, 0xaf, 0xd6, 0x59,
-    0x98, 0xd1, 0x5d, 0x31, 0x73, 0x4b, 0xc8, 0xb2, 0xfa, 0x37, 0x47, 0x0b,
-    0x2f, 0xb7, 0x3c, 0x11, 0x16, 0x5f, 0xf4, 0x4c, 0x11, 0x38, 0x78, 0x4b,
-    0x2f, 0x0a, 0x28, 0xa9, 0x2e, 0x94, 0x24, 0x66, 0x68, 0x2f, 0xbb, 0xe8,
-    0xfd, 0x65, 0xde, 0xd2, 0xcb, 0xde, 0x9e, 0xc5, 0x59, 0x7d, 0x36, 0x60,
-    0x16, 0x54, 0x2b, 0x5b, 0xd9, 0x5a, 0x4f, 0x39, 0x0f, 0xc0, 0x22, 0xfc,
-    0x49, 0x31, 0x3e, 0x96, 0x5c, 0xa3, 0xa4, 0x7b, 0xc5, 0xc5, 0x23, 0xbe,
-    0x1e, 0x66, 0x96, 0x5f, 0xfe, 0xec, 0xd9, 0xad, 0x3c, 0xd9, 0xac, 0xea,
-    0xca, 0xc3, 0xec, 0x32, 0x1b, 0xf9, 0x88, 0xd6, 0xb3, 0xcb, 0x2f, 0xed,
-    0xa6, 0x94, 0xf7, 0xad, 0x96, 0x5f, 0xfe, 0xfd, 0xaf, 0x29, 0xd0, 0x3d,
-    0x9b, 0x1a, 0x59, 0x7c, 0x70, 0x5d, 0x59, 0x7b, 0x67, 0x25, 0x95, 0xa4,
-    0x45, 0x79, 0x3b, 0xa4, 0x17, 0xfe, 0x60, 0x3c, 0x91, 0xeb, 0x60, 0xfe,
-    0xb2, 0xe2, 0xc5, 0x97, 0x84, 0xf8, 0x96, 0x5d, 0xf0, 0xab, 0x2f, 0xb3,
-    0x76, 0x1a, 0xb2, 0x9c, 0xde, 0xf0, 0x66, 0x98, 0x46, 0x99, 0xa1, 0xb4,
-    0x57, 0xcb, 0x77, 0x8e, 0x1a, 0xb2, 0xe7, 0x1a, 0xcb, 0x6d, 0xa3, 0x63,
-    0xd1, 0xbb, 0xef, 0x0f, 0x09, 0x65, 0xff, 0xf4, 0x09, 0xd2, 0x8f, 0xdf,
-    0xbf, 0x88, 0x52, 0x59, 0x4c, 0x85, 0x59, 0xb9, 0x0c, 0x13, 0x8c, 0x0d,
-    0xdb, 0xb8, 0x51, 0xd2, 0x1b, 0xe1, 0x07, 0xe3, 0x59, 0x7f, 0xe7, 0xef,
-    0x05, 0xcf, 0x7e, 0xfd, 0x59, 0x7e, 0xff, 0x06, 0xf2, 0x59, 0x7f, 0xff,
-    0xec, 0xec, 0x00, 0xb3, 0x0a, 0x25, 0xdf, 0x3b, 0x4b, 0x37, 0xac, 0xad,
-    0x91, 0xe8, 0x32, 0x3d, 0x20, 0x0a, 0x51, 0x78, 0x41, 0xcc, 0xb2, 0xf4,
-    0x8c, 0x96, 0x5f, 0xfc, 0x6d, 0x27, 0x63, 0x9e, 0x82, 0xea, 0xcb, 0xed,
-    0x84, 0xdc, 0x15, 0x65, 0xff, 0x47, 0x9c, 0xfb, 0x31, 0x8a, 0xb2, 0xff,
-    0xdf, 0xe6, 0x8f, 0xfc, 0xff, 0x4d, 0x59, 0x7f, 0xf9, 0x88, 0xe6, 0xa3,
-    0xc5, 0x9d, 0x86, 0xac, 0xb8, 0x22, 0x2c, 0xbf, 0xe0, 0xcb, 0x38, 0x26,
-    0xc1, 0x25, 0x97, 0xf8, 0xb3, 0x79, 0xcc, 0x62, 0xac, 0xaf, 0x22, 0x20,
-    0x86, 0x38, 0x77, 0x7f, 0xff, 0x05, 0xf6, 0x00, 0x76, 0xee, 0x78, 0xb3,
-    0xbe, 0x35, 0x97, 0xe8, 0x98, 0x83, 0xc5, 0x95, 0x89, 0xc2, 0x1c, 0x34,
-    0x7c, 0x5f, 0xd5, 0xcb, 0x8c, 0x96, 0x5f, 0xce, 0x5f, 0xe7, 0x58, 0x59,
-    0x50, 0xad, 0x9f, 0x63, 0xf9, 0x0f, 0xb0, 0x36, 0xe8, 0x64, 0x53, 0xc3,
-    0x9e, 0xc7, 0x8b, 0xbd, 0x06, 0x7c, 0x56, 0xf8, 0xbb, 0x13, 0xeb, 0x2f,
-    0xdb, 0xe3, 0x4f, 0xe5, 0x97, 0xde, 0x0b, 0x61, 0x65, 0x2c, 0xa5, 0x96,
-    0x76, 0x96, 0xdc, 0x0b, 0xb8, 0x2c, 0xb5, 0x97, 0xde, 0xcf, 0xdd, 0x65,
-    0x32, 0x11, 0xce, 0x64, 0x8e, 0x52, 0x47, 0x01, 0x25, 0xde, 0x37, 0x66,
-    0x6c, 0x88, 0x4a, 0xe3, 0xb2, 0x61, 0x95, 0x3c, 0xc2, 0x8e, 0x7b, 0x85,
-    0x3b, 0x2b, 0x2c, 0x9e, 0x24, 0x8c, 0xab, 0x28, 0x45, 0x94, 0x84, 0x64,
-    0xf0, 0x2c, 0x89, 0xef, 0x7d, 0xa5, 0xf8, 0xca, 0x5b, 0x10, 0xe7, 0xa2,
-    0x32, 0x9e, 0x8e, 0xc4, 0x7a, 0x20, 0x96, 0x85, 0xf4, 0xad, 0x83, 0x97,
-    0x29, 0xbb, 0x0c, 0x59, 0xa5, 0x89, 0xea, 0x74, 0xed, 0xb3, 0x90, 0xfe,
-    0xa7, 0xab, 0xbc, 0xb7, 0xbf, 0xe5, 0x4a, 0xb2, 0xdd, 0x0a, 0x7a, 0xc7,
-    0x95, 0x9b, 0x27, 0x6b, 0x45, 0x20, 0xce, 0x2c, 0x6f, 0x8c, 0x6c, 0x52,
-    0x09, 0xf9, 0x5f, 0x62, 0x4e, 0x60, 0x6e, 0x46, 0xfd, 0x7f, 0xfb, 0x66,
-    0xc7, 0xcc, 0xd9, 0x0c, 0xa7, 0x49, 0xff, 0x59, 0x4e, 0xad, 0x20, 0x32,
-    0xbc, 0x2f, 0x8c, 0xbf, 0x35, 0x97, 0x9d, 0xbc, 0x59, 0x52, 0x37, 0xbb,
-    0xc8, 0x6f, 0xcd, 0xc3, 0x7f, 0xd6, 0x5f, 0x01, 0xdc, 0x0a, 0x8a, 0x29,
-    0x7f, 0xfe, 0x7f, 0xe0, 0x1e, 0x3e, 0x78, 0xfb, 0xec, 0x25, 0x95, 0xa4,
-    0x41, 0x11, 0x75, 0xf7, 0x74, 0x7f, 0x2c, 0xbf, 0xf4, 0x74, 0xff, 0x89,
-    0x77, 0x93, 0xd2, 0xcb, 0xfb, 0x3f, 0x13, 0x4f, 0xfa, 0xcb, 0xcf, 0x26,
-    0x70, 0x9b, 0x16, 0x42, 0xa4, 0xc8, 0xb4, 0x47, 0xd4, 0x4b, 0xff, 0xa1,
-    0xf4, 0x41, 0x7f, 0xb3, 0xce, 0xb2, 0xff, 0xfc, 0x33, 0x98, 0xa3, 0xbc,
-    0xef, 0xc0, 0x32, 0xd9, 0x65, 0x99, 0xe2, 0xa7, 0xe6, 0xc7, 0x0b, 0xe6,
-    0x0e, 0x21, 0x5f, 0xe6, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x74, 0x2f, 0xfe,
-    0x66, 0xf2, 0x67, 0x9a, 0x03, 0xb8, 0x15, 0x12, 0x5a, 0xfd, 0xa0, 0x3b,
-    0x81, 0x51, 0x79, 0x2e, 0x7d, 0xeb, 0x2c, 0xcf, 0x0f, 0x32, 0x7c, 0xd2,
-    0xa2, 0x14, 0xdb, 0x3b, 0x46, 0x95, 0x24, 0xac, 0x84, 0xe0, 0x21, 0x61,
-    0x32, 0x33, 0x50, 0x7d, 0x3a, 0xae, 0xe7, 0xe5, 0x89, 0x99, 0xde, 0x4a,
-    0xe6, 0xea, 0x60, 0x50, 0x77, 0xc2, 0x82, 0xff, 0xf3, 0x36, 0xbc, 0x99,
-    0xe6, 0x80, 0xee, 0x05, 0x44, 0xb2, 0xbe, 0x64, 0x31, 0x3e, 0xc8, 0x59,
-    0x69, 0xed, 0x65, 0xb7, 0x16, 0x5b, 0xcb, 0x29, 0x90, 0x6e, 0xe7, 0x91,
-    0x60, 0x8a, 0x5f, 0xe3, 0x1f, 0xb0, 0xc9, 0x85, 0x97, 0xde, 0x7e, 0x85,
-    0x65, 0xf7, 0xa3, 0x75, 0xab, 0x2f, 0xfd, 0x9e, 0x39, 0x16, 0x60, 0x59,
-    0x6b, 0x2f, 0xfd, 0x87, 0xbc, 0xc8, 0x32, 0xce, 0x2c, 0xbc, 0x10, 0x3a,
-    0xca, 0x92, 0x62, 0x66, 0x65, 0xba, 0x44, 0xd2, 0x52, 0x40, 0x10, 0xfa,
-    0xfe, 0x1f, 0x42, 0xf2, 0xe2, 0xcb, 0xe3, 0xdd, 0x8d, 0x96, 0x5f, 0xcd,
-    0x82, 0x63, 0x36, 0x59, 0x73, 0xb5, 0x65, 0x61, 0xe2, 0x74, 0xba, 0xfc,
-    0x1e, 0x9f, 0xa1, 0x65, 0xff, 0xbd, 0x1e, 0x36, 0x3b, 0xc7, 0xfd, 0x65,
-    0xff, 0x3c, 0xb8, 0x1e, 0xc7, 0x78, 0xb2, 0xfe, 0x2e, 0xea, 0x1c, 0x0b,
-    0x2e, 0x7e, 0x2c, 0xbf, 0xff, 0x3b, 0xc9, 0xfd, 0x3b, 0x36, 0x0f, 0x4f,
-    0xd0, 0xb2, 0xb6, 0x3e, 0xc9, 0x85, 0xaf, 0x3b, 0x81, 0x51, 0x19, 0xaf,
-    0xf4, 0x7d, 0x28, 0xd3, 0x64, 0xb2, 0xff, 0xff, 0xb9, 0xde, 0x9f, 0xbe,
-    0x97, 0x08, 0x38, 0xc3, 0x06, 0xf2, 0x59, 0x6c, 0xfd, 0x13, 0xbd, 0x34,
-    0xa0, 0x23, 0xbb, 0x50, 0xc5, 0xbf, 0x8e, 0x1b, 0xb6, 0x0a, 0xb2, 0xe2,
-    0x92, 0xcb, 0x35, 0x65, 0xf8, 0xf5, 0xe7, 0x67, 0xa3, 0xd5, 0x69, 0x70,
-    0x82, 0xd6, 0xf2, 0xcb, 0xa3, 0x4b, 0x2c, 0x60, 0x34, 0xfb, 0xc4, 0x6f,
-    0x8f, 0x4f, 0xa5, 0x97, 0x73, 0x75, 0x65, 0x9e, 0x46, 0xef, 0xa4, 0x37,
-    0xff, 0x70, 0xc3, 0xcc, 0x20, 0xcb, 0x38, 0xb2, 0xe8, 0xf9, 0x65, 0xe3,
-    0x20, 0x2c, 0xae, 0x1b, 0x2e, 0x8b, 0xdf, 0xff, 0x32, 0xcf, 0xbc, 0x3e,
-    0x94, 0x05, 0xf4, 0xc2, 0xca, 0xd9, 0x72, 0xba, 0x44, 0xe3, 0x40, 0xc3,
-    0x93, 0x84, 0xc6, 0xa3, 0x12, 0x6b, 0xef, 0x9d, 0x49, 0x8f, 0x84, 0xdd,
-    0x75, 0x09, 0x0d, 0xff, 0x69, 0xc5, 0xf1, 0xc6, 0xa1, 0x65, 0xff, 0xfe,
-    0xf1, 0xf7, 0xa7, 0xc1, 0x36, 0x8d, 0x8b, 0x3f, 0x0f, 0x16, 0x5f, 0xba,
-    0x6d, 0x89, 0x96, 0x5f, 0xd9, 0x13, 0xa3, 0x8d, 0x59, 0x69, 0x61, 0xeb,
-    0x70, 0xa2, 0xfd, 0xec, 0x27, 0x6a, 0xcb, 0xef, 0xbd, 0x1c, 0x59, 0x7a,
-    0x67, 0x25, 0x97, 0xa3, 0xbc, 0x59, 0x7f, 0xec, 0x63, 0x91, 0x84, 0x3f,
-    0x42, 0xca, 0xe1, 0xec, 0x84, 0x72, 0xa4, 0x8e, 0x0c, 0x26, 0x98, 0x8f,
-    0x8e, 0xb7, 0xff, 0x74, 0xf4, 0xff, 0xce, 0xfa, 0x50, 0xd5, 0x97, 0xe2,
-    0x89, 0x71, 0xd6, 0x51, 0x9f, 0x76, 0xf4, 0x8b, 0x79, 0x65, 0xff, 0xff,
-    0xdd, 0x36, 0xe8, 0xf3, 0xe2, 0x0f, 0x63, 0xd3, 0xb7, 0x9f, 0x66, 0x85,
-    0x95, 0x88, 0x87, 0xe8, 0x8d, 0xff, 0x43, 0x7c, 0xfd, 0x72, 0xfd, 0x65,
-    0x61, 0xed, 0x19, 0x15, 0xfd, 0x2e, 0x71, 0xca, 0x4b, 0x2f, 0x6d, 0xce,
-    0x2c, 0xa7, 0x3c, 0xb2, 0x2d, 0xb9, 0xc6, 0xb2, 0xfd, 0x27, 0x20, 0x81,
-    0x65, 0x00, 0xde, 0xfc, 0x2d, 0x73, 0x81, 0x65, 0xd1, 0xba, 0xb2, 0xb6,
-    0x35, 0xec, 0xb1, 0x6b, 0xff, 0x75, 0xcb, 0xf9, 0xc2, 0x67, 0xc2, 0xac,
-    0xbe, 0xef, 0x61, 0xab, 0x2f, 0xa5, 0xd3, 0xd9, 0x65, 0x62, 0x22, 0x58,
-    0x44, 0x72, 0x2b, 0xc5, 0x80, 0x59, 0x7f, 0xe0, 0x1f, 0x4d, 0xb3, 0x70,
-    0xc9, 0x65, 0xff, 0xa0, 0xf5, 0xde, 0xe4, 0x6b, 0xf5, 0x96, 0xec, 0x1f,
-    0xe4, 0xc7, 0xd7, 0xf9, 0xb9, 0xaf, 0xc8, 0x3f, 0xac, 0xb4, 0x96, 0x56,
-    0x26, 0x0a, 0x70, 0x97, 0x72, 0x81, 0x0d, 0x6f, 0xdf, 0xc7, 0x60, 0x6b,
-    0x2a, 0x15, 0x4e, 0xe2, 0x89, 0xc2, 0xbd, 0xe3, 0x34, 0x0a, 0x0d, 0xff,
-    0xf0, 0x7b, 0xcf, 0xa5, 0x05, 0xff, 0x27, 0x04, 0x96, 0x5e, 0x8e, 0xc2,
-    0xca, 0x19, 0xf7, 0xef, 0x54, 0xbe, 0x68, 0x7a, 0x15, 0x97, 0xbd, 0x84,
-    0xb2, 0x8c, 0xf8, 0xbc, 0x48, 0x12, 0x3b, 0xbd, 0x32, 0xcb, 0xec, 0x9b,
-    0x26, 0x59, 0x7e, 0xd0, 0x7b, 0x9b, 0x2c, 0xbe, 0xcd, 0x0e, 0x16, 0x5b,
-    0x93, 0x8f, 0xb6, 0x08, 0xc8, 0xa6, 0xde, 0x59, 0x5f, 0x1e, 0x33, 0x9a,
-    0xd1, 0xa3, 0xb5, 0xe1, 0x97, 0x7f, 0xdd, 0xe6, 0x6b, 0xf2, 0x0f, 0xeb,
-    0x2f, 0xff, 0x6a, 0x3b, 0xcf, 0x41, 0xf7, 0x91, 0xb2, 0xcb, 0xee, 0xbf,
-    0xa1, 0x65, 0xf7, 0x7c, 0x19, 0xf5, 0x97, 0xfb, 0x23, 0x4f, 0x23, 0xf2,
-    0xcb, 0xfc, 0x62, 0xf2, 0x3c, 0xfb, 0xab, 0x2b, 0x47, 0xcf, 0xd3, 0x1b,
-    0xf7, 0x7d, 0xf6, 0x6e, 0x2c, 0xa1, 0xa6, 0x8d, 0xf2, 0x51, 0x90, 0xb6,
-    0x11, 0xbe, 0x22, 0xbf, 0x71, 0xd8, 0xf1, 0xac, 0xbf, 0xed, 0xd1, 0xf8,
-    0x3c, 0xfa, 0x4e, 0xb2, 0xe3, 0xf6, 0x1f, 0x30, 0x4a, 0x2a, 0x15, 0x31,
-    0xe4, 0x70, 0x2f, 0x0b, 0x6b, 0xfc, 0x72, 0x89, 0x43, 0x64, 0xb2, 0xf0,
-    0x99, 0x3d, 0xac, 0xbf, 0xfd, 0x1a, 0x8f, 0xfc, 0x71, 0xaf, 0xdb, 0x25,
-    0x97, 0xff, 0x83, 0xfb, 0x4c, 0xb3, 0xf2, 0xc7, 0x99, 0x65, 0xfe, 0x3f,
-    0x1c, 0x14, 0xc1, 0x59, 0x7f, 0x8f, 0x59, 0x85, 0xf7, 0x56, 0x54, 0x1f,
-    0x23, 0x99, 0x5f, 0xf8, 0x23, 0xd6, 0x07, 0xd0, 0xdc, 0x59, 0x7f, 0xff,
-    0xe2, 0xcf, 0xe7, 0xf2, 0x71, 0x66, 0xc2, 0x4a, 0x77, 0x38, 0x62, 0xf1,
-    0x65, 0x42, 0xa2, 0x1c, 0x32, 0x32, 0x2d, 0x25, 0xfa, 0x15, 0xdc, 0x20,
-    0xe9, 0xf5, 0xf9, 0xf8, 0x47, 0x0b, 0x2f, 0xff, 0x48, 0xf4, 0x3f, 0x07,
-    0x58, 0x0f, 0x62, 0xcb, 0xee, 0x85, 0xfa, 0xb2, 0xf6, 0xfc, 0xd2, 0xca,
-    0x83, 0xc0, 0xc2, 0x2b, 0x8f, 0x8b, 0x29, 0x84, 0x72, 0xfc, 0x4a, 0x50,
-    0x8a, 0x9f, 0x20, 0xbc, 0x10, 0x8d, 0x65, 0xfd, 0x31, 0xfb, 0x58, 0xd5,
-    0x97, 0x18, 0xab, 0x2e, 0xdc, 0xc5, 0x94, 0xe7, 0xbd, 0xc2, 0xee, 0x8b,
-    0xdf, 0xdc, 0x8e, 0xf3, 0xc6, 0xb2, 0xfc, 0x58, 0xdd, 0x62, 0xcb, 0xed,
-    0x6f, 0xc1, 0xac, 0xac, 0x3f, 0x76, 0x96, 0x84, 0x9a, 0xfd, 0xe8, 0xd3,
-    0x64, 0xb2, 0xf0, 0xf3, 0xab, 0x2f, 0xf6, 0x14, 0xef, 0x46, 0x6e, 0xac,
-    0xbf, 0xf1, 0xf7, 0x98, 0x39, 0x8a, 0x06, 0xb2, 0xfb, 0xf3, 0xfa, 0x4b,
-    0x2f, 0xf4, 0x17, 0x4f, 0x62, 0x85, 0x97, 0xff, 0x8f, 0x47, 0xb4, 0x16,
-    0x7b, 0x41, 0xde, 0xb2, 0xa4, 0x9a, 0xc0, 0xca, 0x1a, 0x39, 0xe3, 0x6f,
-    0xcf, 0x88, 0x93, 0xa6, 0x37, 0xff, 0xa0, 0x80, 0xfd, 0x76, 0x04, 0xda,
-    0x36, 0x59, 0x7f, 0xe3, 0x18, 0x7b, 0xc7, 0xeb, 0xb0, 0xb2, 0xfe, 0xc1,
-    0x7e, 0x97, 0x27, 0x30, 0x88, 0xb7, 0x4c, 0xbf, 0xf8, 0x48, 0xf8, 0x42,
-    0x2c, 0x3f, 0xba, 0xb2, 0x8d, 0x12, 0x0e, 0x95, 0x4c, 0x86, 0xf0, 0xbe,
-    0x79, 0x6a, 0x88, 0xd2, 0xb6, 0x5a, 0x91, 0x70, 0xda, 0x72, 0x73, 0x3d,
-    0x88, 0x58, 0x80, 0xe3, 0xe8, 0x5d, 0x1c, 0x60, 0xf3, 0x42, 0xaf, 0x51,
-    0x82, 0x35, 0xaf, 0xd2, 0xbe, 0x9e, 0x32, 0x4f, 0xe3, 0x1b, 0x29, 0x51,
-    0x3c, 0x94, 0xb7, 0xd8, 0xd3, 0x42, 0x8d, 0xbd, 0xee, 0x7e, 0x14, 0xa2,
-    0x47, 0x0d, 0xb9, 0x1c, 0x05, 0xff, 0x76, 0x07, 0xad, 0x43, 0x78, 0xb2,
-    0xe6, 0x00, 0xb2, 0xfe, 0x6c, 0xa2, 0x38, 0x6b, 0x2e, 0x7f, 0xd6, 0x54,
-    0x1e, 0x1b, 0x96, 0x5f, 0x0d, 0xdf, 0xe5, 0x97, 0xf1, 0xfc, 0x60, 0x81,
-    0x16, 0x53, 0x9e, 0x81, 0x11, 0x5e, 0x03, 0xef, 0x59, 0x77, 0x59, 0xc2,
-    0x68, 0x4d, 0x39, 0xf2, 0xdb, 0xb8, 0x74, 0x82, 0xff, 0xff, 0xe0, 0xfd,
-    0x26, 0x6e, 0x5d, 0xc6, 0xf0, 0x7e, 0x8d, 0x0d, 0xdc, 0x55, 0x94, 0xcd,
-    0x5e, 0xa6, 0x4b, 0x08, 0x25, 0x7b, 0xff, 0xcc, 0xda, 0xf2, 0x67, 0x9a,
-    0x03, 0xb8, 0x15, 0x13, 0x4a, 0xff, 0xf3, 0x36, 0xbc, 0x99, 0xe6, 0x80,
-    0xee, 0x05, 0x44, 0xe2, 0xbf, 0x48, 0xcb, 0xf3, 0x59, 0x7e, 0x96, 0x76,
-    0x52, 0x59, 0x7f, 0xb7, 0xc7, 0xa7, 0x14, 0x49, 0x65, 0xff, 0x9e, 0x4c,
-    0xf3, 0x40, 0x77, 0x02, 0xa2, 0x81, 0x5f, 0xfe, 0x38, 0x6b, 0x8f, 0x51,
-    0xdf, 0x60, 0xd6, 0x5f, 0x70, 0xbe, 0x92, 0xcb, 0x33, 0xc4, 0xcf, 0x3e,
-    0x27, 0x32, 0x86, 0x9b, 0x79, 0x33, 0xa9, 0x17, 0xc0, 0x77, 0x02, 0xa2,
-    0xe0, 0x5f, 0xe1, 0xfa, 0x27, 0xf3, 0x50, 0xb2, 0xb4, 0x7c, 0x64, 0x5d,
-    0x7f, 0x16, 0x74, 0x07, 0xc5, 0x97, 0x41, 0xac, 0xbe, 0xf0, 0x5e, 0x4b,
-    0x2f, 0xf1, 0x4a, 0x0c, 0x78, 0xd5, 0x95, 0x88, 0xb5, 0x69, 0x0f, 0x8b,
-    0x3a, 0x2a, 0x12, 0x2b, 0xf4, 0x99, 0xb0, 0xc9, 0x61, 0x65, 0x33, 0x3f,
-    0xa8, 0x49, 0xb9, 0xff, 0x59, 0x7e, 0x9a, 0x50, 0x52, 0x59, 0x4b, 0x2b,
-    0x0d, 0x99, 0x14, 0x5f, 0xd2, 0xc6, 0x0b, 0x3f, 0x59, 0x7b, 0xfc, 0x15,
-    0x65, 0xf1, 0x46, 0x79, 0x65, 0x41, 0xbe, 0xd8, 0x7a, 0xe3, 0x67, 0xa4,
-    0x7b, 0x12, 0x57, 0x47, 0xc4, 0x6c, 0xbf, 0xe9, 0x33, 0xcd, 0x01, 0xdc,
-    0x0a, 0x89, 0x25, 0x66, 0x7e, 0x44, 0x8b, 0xa5, 0x5f, 0xb0, 0x5f, 0xc3,
-    0xc5, 0x97, 0x0b, 0xfa, 0xcb, 0xff, 0x03, 0xd1, 0xac, 0xe9, 0x43, 0x56,
-    0x5f, 0xe7, 0xe9, 0x66, 0xce, 0x4b, 0x2f, 0xd1, 0x31, 0x40, 0xd6, 0x5c,
-    0xc0, 0xab, 0x2f, 0xe9, 0x3e, 0xb6, 0x1c, 0x2c, 0xbf, 0xb0, 0x9f, 0xe9,
-    0x71, 0x65, 0xff, 0xf8, 0x24, 0xec, 0x75, 0x88, 0x29, 0x67, 0x8d, 0xab,
-    0x2f, 0xcd, 0xd6, 0x0f, 0xab, 0x2f, 0xf4, 0x7c, 0x27, 0x4a, 0x3f, 0x59,
-    0x50, 0x7b, 0xa1, 0x28, 0xbf, 0x6e, 0x7a, 0x09, 0x85, 0x96, 0x1a, 0xcb,
-    0xfb, 0x62, 0xcd, 0xe1, 0x85, 0x95, 0xb1, 0xe0, 0x38, 0x8d, 0xce, 0xcf,
-    0x65, 0x55, 0x83, 0x2a, 0xc1, 0x96, 0x0f, 0x40, 0x63, 0xf1, 0x3c, 0xc3,
-    0x3a, 0x2e, 0x69, 0x6f, 0x21, 0x65, 0xd2, 0x19, 0xf6, 0xba, 0xd9, 0xd4,
-    0xdb, 0x4a, 0xd0, 0x2e, 0x80, 0xe6, 0x65, 0xaf, 0xe3, 0x96, 0xe4, 0x7e,
-    0x3d, 0x8e, 0xab, 0x7c, 0xad, 0x6b, 0xff, 0x30, 0xec, 0xf3, 0x40, 0x77,
-    0x02, 0xa2, 0xd4, 0x5f, 0xf9, 0xe4, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x25,
-    0x55, 0xc6, 0x2a, 0xca, 0x59, 0x66, 0x6c, 0x22, 0xed, 0xa9, 0xbd, 0x4c,
-    0xdc, 0x17, 0xbf, 0xb3, 0x40, 0x77, 0x02, 0xa2, 0x29, 0x5f, 0xf9, 0xdd,
-    0xb9, 0xaf, 0xc8, 0x3f, 0xac, 0xbf, 0xf4, 0x77, 0x99, 0xaf, 0xc8, 0x3f,
-    0xac, 0xbe, 0x3e, 0x43, 0xac, 0xbf, 0xc4, 0xff, 0xf3, 0xb8, 0x05, 0x97,
-    0x35, 0x9f, 0x91, 0xa4, 0x47, 0xfc, 0x40, 0xe9, 0x05, 0x33, 0x4d, 0x55,
-    0xe3, 0x0b, 0xbf, 0x68, 0x0e, 0xe0, 0x54, 0x46, 0x8b, 0xf8, 0x8c, 0x7a,
-    0x3d, 0x96, 0x59, 0x9e, 0x1f, 0x09, 0x9a, 0x5e, 0x9e, 0x13, 0xec, 0x85,
-    0x97, 0xd3, 0xd3, 0x2b, 0x9e, 0x13, 0xc1, 0x65, 0xc1, 0xf2, 0xcb, 0xff,
-    0x0f, 0x1a, 0x7a, 0xce, 0x4d, 0x0b, 0x2f, 0xff, 0xf9, 0xc3, 0xcf, 0x60,
-    0xc4, 0x13, 0x86, 0x27, 0x4f, 0x93, 0x08, 0xb2, 0xff, 0xf4, 0xc6, 0x7e,
-    0x9b, 0x3b, 0x1d, 0x81, 0xac, 0xbc, 0x6e, 0x2a, 0x4b, 0xff, 0x44, 0x6f,
-    0x82, 0x89, 0xa2, 0x65, 0x94, 0x69, 0xa7, 0xee, 0x9f, 0x4c, 0xd8, 0xd4,
-    0xa2, 0x1c, 0xbe, 0x03, 0xb8, 0x15, 0x14, 0xfa, 0xee, 0xc2, 0xca, 0xd1,
-    0xe2, 0x74, 0xba, 0xff, 0x1f, 0x4f, 0xbe, 0x0f, 0x56, 0x5f, 0x43, 0x74,
-    0xeb, 0x2f, 0xf4, 0x77, 0xcf, 0x34, 0xec, 0x59, 0x71, 0xfc, 0xb2, 0xa6,
-    0x3c, 0xcd, 0x1a, 0xd6, 0x91, 0x86, 0x46, 0x7d, 0x6d, 0xbf, 0xe7, 0x91,
-    0x8f, 0xd1, 0x2e, 0x2c, 0xbf, 0x07, 0xbd, 0x8d, 0xeb, 0x2f, 0xfe, 0x89,
-    0xa6, 0x3f, 0xe2, 0x69, 0xb3, 0xf5, 0x97, 0xbc, 0x71, 0xa3, 0xf3, 0x22,
-    0xab, 0xbc, 0x15, 0x95, 0x87, 0x90, 0x13, 0x1b, 0xf6, 0x78, 0xcb, 0xab,
-    0x2f, 0xfe, 0x69, 0x07, 0xc7, 0xac, 0xe4, 0xd0, 0xb2, 0xf9, 0xe6, 0x3f,
-    0x2c, 0xbf, 0xfd, 0xac, 0x39, 0xb8, 0x18, 0xf8, 0xa3, 0xab, 0x2f, 0xdb,
-    0xc3, 0xbb, 0x1f, 0xac, 0xa9, 0x26, 0x08, 0x64, 0xcd, 0x44, 0xe9, 0x10,
-    0x52, 0xaf, 0xbe, 0xe8, 0x74, 0xb2, 0xff, 0xdd, 0xd0, 0x66, 0xe0, 0x1e,
-    0x6e, 0x2c, 0xac, 0x3e, 0x60, 0x92, 0x5f, 0xe7, 0x28, 0xe9, 0x47, 0x56,
-    0x5f, 0xfa, 0x3b, 0xf6, 0x76, 0x26, 0x3e, 0x2c, 0xbf, 0xf4, 0xc1, 0x2d,
-    0xb8, 0x07, 0x9b, 0x8b, 0x2a, 0x11, 0x03, 0x87, 0xf7, 0x3f, 0x16, 0x5f,
-    0xf7, 0x63, 0xe7, 0x9b, 0x51, 0xbd, 0x65, 0x6e, 0x9e, 0x97, 0x45, 0xaf,
-    0x83, 0xe3, 0xd2, 0xcb, 0x33, 0x64, 0x2f, 0xe1, 0xcf, 0x45, 0x53, 0xc9,
-    0xd4, 0x46, 0xcd, 0x90, 0x91, 0x38, 0x72, 0xb4, 0xbf, 0xd0, 0xf3, 0x78,
-    0xc9, 0x4a, 0x16, 0x1c, 0x21, 0xec, 0x2c, 0x42, 0xe7, 0x3e, 0x4b, 0x7f,
-    0xf9, 0x9b, 0x5e, 0x4c, 0xf3, 0x40, 0x77, 0x02, 0xa2, 0x6a, 0x5f, 0xd9,
-    0xa0, 0x3b, 0x81, 0x51, 0x5d, 0xaf, 0xff, 0x66, 0xe1, 0xf4, 0xe5, 0x38,
-    0xa3, 0xbc, 0x59, 0x4b, 0x2e, 0x15, 0x9f, 0x8f, 0x60, 0x54, 0xda, 0x66,
-    0x8c, 0x33, 0x84, 0x8d, 0xdf, 0x9a, 0xcb, 0xdc, 0x86, 0xac, 0xb9, 0xa4,
-    0xb2, 0xf8, 0x0e, 0xe0, 0x54, 0x57, 0xcb, 0xc2, 0x8a, 0x2a, 0x4b, 0x12,
-    0x46, 0x66, 0x82, 0xb4, 0x7e, 0x0d, 0x4e, 0xbf, 0xde, 0xc6, 0x1e, 0x3e,
-    0xdc, 0x59, 0x7a, 0x51, 0xf2, 0xcb, 0xec, 0xef, 0x8d, 0x65, 0xc1, 0xe2,
-    0xcb, 0xb3, 0xcb, 0x28, 0x66, 0xb6, 0x61, 0x7b, 0x9f, 0x7a, 0xcb, 0xfe,
-    0xf0, 0xaf, 0xde, 0x46, 0x6c, 0xb2, 0xf8, 0x9f, 0xee, 0x2c, 0xac, 0x3d,
-    0xce, 0x9d, 0x5e, 0x17, 0x34, 0xb2, 0xdd, 0x59, 0x7f, 0xc7, 0xac, 0xd8,
-    0xe5, 0x83, 0x59, 0x46, 0x7c, 0xda, 0x1d, 0x71, 0x1b, 0xed, 0xcf, 0x04,
-    0x45, 0x97, 0xa6, 0xc9, 0x96, 0x57, 0xc7, 0x8b, 0x31, 0x3d, 0xb4, 0xb2,
-    0x96, 0x51, 0x97, 0x9a, 0x11, 0xbb, 0x66, 0x16, 0x57, 0x8d, 0xc3, 0x8f,
-    0xdf, 0x61, 0x44, 0x96, 0x59, 0x9c, 0xf1, 0x57, 0x89, 0x02, 0xfb, 0x0e,
-    0x64, 0x21, 0x80, 0x45, 0x31, 0xbe, 0x87, 0x5d, 0x3b, 0xf2, 0x22, 0x74,
-    0xe4, 0x21, 0xc2, 0xe5, 0x3e, 0xf0, 0x21, 0x05, 0xff, 0xe6, 0x6d, 0x79,
-    0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x89, 0xed, 0x66, 0x5a, 0xcb, 0xfe, 0x1b,
-    0x82, 0x00, 0x12, 0x1a, 0xcb, 0xe8, 0xdc, 0x7f, 0x96, 0x5e, 0x32, 0xfd,
-    0x65, 0x6c, 0x7f, 0x3e, 0x38, 0xde, 0x4b, 0x7e, 0x31, 0xc6, 0xb8, 0xb2,
-    0xfd, 0xa0, 0x3b, 0x81, 0x51, 0x70, 0xaf, 0x9a, 0x1e, 0xf1, 0x65, 0xfe,
-    0xf1, 0xc8, 0x3f, 0xc4, 0xcb, 0x2c, 0xcd, 0x92, 0x9b, 0x9c, 0x42, 0x3a,
-    0x46, 0x58, 0x4e, 0xc1, 0xa1, 0x91, 0xdf, 0xfc, 0xcd, 0xe4, 0xcf, 0x34,
-    0x07, 0x70, 0x2a, 0x24, 0xf5, 0xff, 0x8e, 0x66, 0x70, 0x18, 0xec, 0x7e,
-    0xb2, 0xa1, 0xb3, 0xbf, 0xda, 0x39, 0xe9, 0x42, 0x31, 0x89, 0xfe, 0xb0,
-    0x43, 0xee, 0x68, 0xc7, 0x75, 0x2f, 0xb7, 0xd0, 0xdc, 0xe4, 0x79, 0xbb,
-    0xd9, 0xc5, 0x54, 0xbf, 0xcc, 0xf3, 0x40, 0x77, 0x02, 0xa2, 0x2a, 0x5f,
-    0xb4, 0x07, 0x70, 0x2a, 0x29, 0x95, 0xfc, 0x7e, 0xc7, 0xfb, 0xf5, 0x96,
-    0x67, 0x87, 0xc5, 0x3e, 0x69, 0x7f, 0xf9, 0x9b, 0x5e, 0x4c, 0xf3, 0x40,
-    0x77, 0x02, 0xa2, 0x67, 0x5f, 0xfe, 0x66, 0xd7, 0x93, 0x3c, 0xd0, 0x1d,
-    0xc0, 0xa8, 0xa3, 0x55, 0xb2, 0x70, 0x63, 0x85, 0x1b, 0x05, 0x9d, 0x5a,
-    0xbf, 0xf3, 0xc9, 0x9e, 0x68, 0x0e, 0xe0, 0x54, 0x47, 0x4b, 0xf8, 0xb3,
-    0xbc, 0x86, 0xac, 0xbd, 0x1d, 0xe2, 0xcb, 0xda, 0xd9, 0x9f, 0x0f, 0x20,
-    0x42, 0xcb, 0xff, 0xfd, 0xa9, 0x33, 0xc2, 0x0f, 0x42, 0xc7, 0x7e, 0x01,
-    0xeb, 0x8b, 0x29, 0x9a, 0x66, 0x51, 0x09, 0x43, 0x38, 0xb8, 0x3e, 0x59,
-    0x7c, 0x00, 0x04, 0x0b, 0x2f, 0xc7, 0xc0, 0xb4, 0xd6, 0x5f, 0xb0, 0x87,
-    0x9b, 0x2c, 0xbf, 0xe3, 0xd7, 0x0b, 0x07, 0xe8, 0x59, 0x7f, 0xa2, 0x01,
-    0x9a, 0xd6, 0x2c, 0xa3, 0x44, 0x7f, 0x89, 0xc8, 0xde, 0xfd, 0x9a, 0x00,
-    0x58, 0x59, 0x7f, 0xc0, 0x86, 0xe1, 0xb6, 0x37, 0x56, 0x5f, 0xf8, 0xb1,
-    0x87, 0x9b, 0x9e, 0x81, 0xac, 0xbd, 0x33, 0xf5, 0x65, 0xf0, 0x1d, 0xc0,
-    0xa8, 0xa6, 0x97, 0xec, 0xf8, 0x57, 0xf2, 0xcb, 0xff, 0xb9, 0x84, 0x38,
-    0x9d, 0x3c, 0x77, 0xfe, 0x6b, 0x28, 0x69, 0xb2, 0x61, 0x49, 0x9d, 0x4c,
-    0x7f, 0xa1, 0xd2, 0x2e, 0xe1, 0x4d, 0xf6, 0x9c, 0x66, 0xb2, 0xff, 0xf0,
-    0x1f, 0x5c, 0xf3, 0x9f, 0x39, 0x9c, 0x59, 0x7f, 0xff, 0xd8, 0x5d, 0xe1,
-    0x83, 0x0b, 0x80, 0xf1, 0xf8, 0x02, 0x6c, 0xb2, 0xff, 0xb8, 0xff, 0x64,
-    0xd1, 0xee, 0x2c, 0xbb, 0xc7, 0xe4, 0x75, 0x12, 0x4f, 0x59, 0xef, 0xfe,
-    0x97, 0x8c, 0xb6, 0xe0, 0x63, 0x53, 0x2c, 0xbd, 0x26, 0xc9, 0x65, 0xf7,
-    0x78, 0xff, 0xac, 0xbd, 0xff, 0x4d, 0x65, 0xfe, 0xe0, 0x0f, 0x5a, 0x3d,
-    0x96, 0x54, 0x1f, 0xa3, 0x91, 0xf0, 0x76, 0xff, 0xfe, 0xd8, 0x3a, 0x9b,
-    0x9b, 0x44, 0xdc, 0xf6, 0x0c, 0xf7, 0xac, 0xbf, 0xec, 0xd3, 0xc1, 0x94,
-    0x35, 0x65, 0x6c, 0x89, 0x7e, 0x31, 0x5f, 0xf6, 0xf0, 0x78, 0xff, 0xf1,
-    0xb5, 0x65, 0x61, 0xf0, 0x19, 0x25, 0xe6, 0xe8, 0x2b, 0x2f, 0xf0, 0x5c,
-    0x81, 0x3b, 0x6e, 0x2c, 0xbf, 0xa0, 0xbb, 0x3f, 0x9d, 0x59, 0x7f, 0xe8,
-    0xf4, 0x36, 0x0b, 0xbe, 0x35, 0x97, 0xf9, 0xff, 0x7e, 0xf7, 0x3c, 0xb2,
-    0xa4, 0x89, 0xe0, 0x17, 0x8a, 0x79, 0x7d, 0xe3, 0xcd, 0x2c, 0xbb, 0xc1,
-    0x59, 0x69, 0x2c, 0xac, 0x3f, 0xa3, 0x31, 0xfc, 0x87, 0x78, 0xbd, 0xef,
-    0x0b, 0xfa, 0xcb, 0x75, 0x65, 0x19, 0xb0, 0xf0, 0xfd, 0xc3, 0x85, 0x97,
-    0xff, 0xee, 0xf0, 0x4e, 0x6a, 0x07, 0x9e, 0x06, 0x16, 0xcb, 0x2a, 0x0f,
-    0xb7, 0x05, 0xaf, 0xe8, 0x3f, 0xdf, 0xa1, 0x59, 0x7f, 0xec, 0xff, 0x32,
-    0x69, 0x8a, 0x06, 0xb2, 0xb1, 0x31, 0x96, 0xc2, 0x37, 0xc4, 0x04, 0x5b,
-    0x7b, 0xb1, 0x25, 0x97, 0xfc, 0x1e, 0xfb, 0x26, 0x94, 0x7c, 0xb2, 0xbc,
-    0x7a, 0xe4, 0x39, 0x69, 0x96, 0x5c, 0xfe, 0x59, 0x7e, 0xcf, 0x39, 0x0d,
-    0x65, 0x6c, 0x79, 0xd2, 0x12, 0xfc, 0x5a, 0xe8, 0x61, 0x65, 0xfc, 0xff,
-    0xf1, 0x94, 0x65, 0x19, 0x45, 0x97, 0xf1, 0xc3, 0x76, 0xc1, 0x56, 0x5f,
-    0xff, 0x67, 0x7d, 0x92, 0xd3, 0x97, 0x7c, 0xf2, 0x59, 0x74, 0x7e, 0xb2,
-    0xff, 0x3f, 0xd0, 0x03, 0x03, 0x3d, 0x22, 0x4c, 0x8b, 0x84, 0x4e, 0xac,
-    0x4f, 0x88, 0xdb, 0xfc, 0x62, 0x42, 0xfc, 0x86, 0x8d, 0xe7, 0x9b, 0x8b,
-    0x2e, 0x13, 0x4b, 0x2f, 0xdf, 0xfa, 0x25, 0xc5, 0x97, 0x88, 0x2c, 0x2c,
-    0xbc, 0x2b, 0xec, 0xb2, 0xff, 0xa3, 0xf7, 0xef, 0xe2, 0x14, 0x96, 0x57,
-    0x8f, 0x64, 0x87, 0xaa, 0x11, 0x80, 0x45, 0x3d, 0x76, 0xb3, 0x39, 0xe5,
-    0x9a, 0x41, 0x02, 0xf2, 0x23, 0x1c, 0x2d, 0xb2, 0x39, 0x26, 0x18, 0xc1,
-    0x18, 0x5f, 0xc7, 0x46, 0x8d, 0xa8, 0x48, 0xfa, 0x32, 0x47, 0x20, 0xfc,
-    0x74, 0xa3, 0x4e, 0xe4, 0x70, 0xdd, 0x94, 0xf4, 0x14, 0xd9, 0xf1, 0xd1,
-    0x21, 0xb1, 0x7c, 0x65, 0xf9, 0xac, 0xbe, 0x03, 0xb8, 0x15, 0x15, 0x52,
-    0xa4, 0x79, 0xfa, 0x21, 0xbf, 0x68, 0x0e, 0xe0, 0x54, 0x4d, 0xab, 0xee,
-    0xe8, 0xfe, 0x59, 0x79, 0xe4, 0xcf, 0x0f, 0x5c, 0xcd, 0x2c, 0xcf, 0x11,
-    0x58, 0xd7, 0x9b, 0xfc, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x2b, 0xf5, 0xfb,
-    0x40, 0x77, 0x02, 0xa2, 0xc6, 0x5d, 0xb9, 0x25, 0x96, 0x67, 0x87, 0x9d,
-    0x31, 0xa5, 0xfb, 0x80, 0xf4, 0x30, 0xb2, 0xff, 0x10, 0x65, 0x9c, 0x7e,
-    0xac, 0xbf, 0x99, 0x03, 0x9e, 0x67, 0x92, 0x61, 0x65, 0xff, 0x10, 0x76,
-    0x9a, 0x51, 0xad, 0x96, 0x5d, 0xae, 0xac, 0xbe, 0x79, 0x60, 0xd6, 0x5f,
-    0xdd, 0xcd, 0x0f, 0x09, 0x65, 0xb0, 0x67, 0x9b, 0xd2, 0x1b, 0xa5, 0x8b,
-    0x2f, 0xe7, 0x7e, 0xf7, 0x3c, 0xb2, 0x98, 0x3c, 0x2d, 0x0b, 0x5f, 0xd9,
-    0xae, 0xfb, 0x36, 0x59, 0x7f, 0x74, 0xdb, 0xf4, 0xb8, 0xb2, 0xcc, 0xf1,
-    0x3f, 0x86, 0x99, 0x78, 0xf5, 0xcf, 0x09, 0x93, 0x8d, 0x22, 0x11, 0xee,
-    0x17, 0x58, 0xd9, 0xaa, 0x9c, 0xd4, 0xa2, 0x1b, 0xf6, 0x80, 0xee, 0x05,
-    0x45, 0xaa, 0xbf, 0xf3, 0xc9, 0x9e, 0x68, 0x0e, 0xe0, 0x54, 0x50, 0x4b,
-    0xf4, 0x0b, 0x3f, 0x9a, 0x59, 0x66, 0x78, 0x8a, 0xb6, 0x9a, 0x08, 0x99,
-    0x7d, 0xdd, 0x3f, 0x96, 0x5f, 0xde, 0x3d, 0xb6, 0x0f, 0x16, 0x5f, 0xd8,
-    0x3d, 0x47, 0x78, 0xb2, 0xfe, 0x86, 0xbf, 0xdd, 0x92, 0xca, 0xc4, 0x56,
-    0x80, 0x88, 0x8c, 0x38, 0x5b, 0x7f, 0x67, 0x99, 0xbe, 0xba, 0xb2, 0xe7,
-    0x15, 0x99, 0xf5, 0x74, 0xee, 0xff, 0x41, 0x7f, 0x1b, 0xae, 0xd5, 0x97,
-    0xff, 0xa6, 0x8d, 0xef, 0xae, 0x70, 0xf5, 0x8c, 0x2c, 0xbf, 0xc7, 0x34,
-    0x6f, 0x7d, 0x71, 0x65, 0xb8, 0xb2, 0xa0, 0xf1, 0x88, 0xd6, 0xff, 0xe8,
-    0xfc, 0x3d, 0xe1, 0x46, 0xe4, 0x6c, 0xb2, 0xed, 0x42, 0xca, 0x92, 0x68,
-    0xc6, 0x6b, 0xe8, 0x49, 0xef, 0x20, 0xdc, 0x48, 0xbe, 0x03, 0xb8, 0x15,
-    0x17, 0x12, 0xfe, 0x0b, 0xfc, 0x3c, 0xd2, 0xca, 0xd1, 0xee, 0x70, 0xba,
-    0xff, 0xfd, 0x21, 0x3d, 0x27, 0xeb, 0xfe, 0x12, 0x7d, 0xe3, 0x59, 0x70,
-    0x93, 0x2c, 0xbf, 0xbe, 0x01, 0xf3, 0xc6, 0xb2, 0xb6, 0x3c, 0x7e, 0x8c,
-    0xdd, 0x8c, 0x2c, 0xbf, 0xdb, 0xf3, 0xbc, 0xdf, 0x1e, 0x59, 0x63, 0x91,
-    0xe7, 0x78, 0x5e, 0xfd, 0x8d, 0x3d, 0xc1, 0xac, 0xba, 0x1a, 0xb2, 0xb7,
-    0x4f, 0x03, 0x45, 0x57, 0xf0, 0x49, 0xd8, 0x97, 0xeb, 0x2f, 0x9f, 0x70,
-    0xf6, 0x59, 0x7e, 0xf0, 0x58, 0xc2, 0x59, 0x7e, 0x1e, 0x6e, 0xc7, 0x96,
-    0x5e, 0xdc, 0x30, 0x2c, 0xa1, 0x9f, 0x8e, 0x8a, 0x37, 0x0a, 0xaf, 0xf3,
-    0x5e, 0x5c, 0x31, 0xe2, 0xcb, 0xcc, 0x47, 0x16, 0x5f, 0xe9, 0x44, 0xcf,
-    0xe8, 0xdd, 0x59, 0x50, 0x7a, 0x78, 0x3b, 0x7e, 0x2e, 0x93, 0xb0, 0xb2,
-    0x96, 0x5b, 0x98, 0x6c, 0xa7, 0xc9, 0xef, 0xe6, 0xbe, 0xf8, 0xd6, 0xe2,
-    0xcb, 0xff, 0x18, 0xf3, 0x7b, 0x72, 0x5f, 0x49, 0x65, 0xfc, 0x7b, 0xe4,
-    0xd8, 0x99, 0x65, 0xff, 0xa3, 0x09, 0xb1, 0xed, 0xc7, 0xdc, 0x59, 0x52,
-    0x3f, 0x2d, 0x18, 0x5f, 0xf6, 0x37, 0x35, 0x9b, 0x60, 0xab, 0x2a, 0x13,
-    0x40, 0xc3, 0x23, 0x85, 0x9f, 0x88, 0xaf, 0xec, 0xd3, 0xf4, 0x30, 0xb2,
-    0xff, 0xf9, 0xca, 0x0f, 0x73, 0x87, 0xcc, 0xf6, 0x4f, 0xac, 0xa1, 0x9f,
-    0xf6, 0xf2, 0xcb, 0xff, 0x8c, 0x83, 0x2c, 0xe7, 0x0c, 0x78, 0xb2, 0xa6,
-    0x3e, 0x6e, 0x92, 0x59, 0x9c, 0x2f, 0x76, 0xe4, 0x2c, 0x3e, 0x22, 0x38,
-    0x50, 0x4c, 0xe3, 0xa6, 0x76, 0x92, 0xf8, 0xbd, 0xe1, 0x2d, 0xf9, 0x91,
-    0x42, 0x17, 0x8a, 0x5d, 0x8d, 0xa4, 0x48, 0xc9, 0x2f, 0xe9, 0xea, 0x7a,
-    0xd3, 0xbc, 0x96, 0x5f, 0xe6, 0x41, 0x4f, 0x3d, 0x9f, 0x9e, 0x46, 0xb2,
-    0xf1, 0x3b, 0x25, 0x65, 0xfa, 0x7b, 0x65, 0x7f, 0xb1, 0x0b, 0x2f, 0xfc,
-    0x7f, 0x32, 0x9c, 0xd4, 0xe9, 0xde, 0x9f, 0x59, 0x7d, 0xe8, 0xe8, 0x16,
-    0x53, 0x2a, 0x9f, 0x78, 0xd3, 0x6f, 0xfa, 0x34, 0xfd, 0xfc, 0x42, 0x92,
-    0xcb, 0xff, 0xcc, 0xa3, 0x02, 0xee, 0xec, 0x39, 0xee, 0x74, 0xef, 0x4f,
-    0xac, 0xbf, 0x73, 0x8f, 0xbf, 0x16, 0x5f, 0x01, 0xdc, 0x0a, 0x8b, 0xa5,
-    0x7e, 0x20, 0xf6, 0x38, 0xb2, 0xb4, 0x7a, 0xbe, 0x2e, 0xbe, 0x27, 0x1c,
-    0x2c, 0xbf, 0xd1, 0xbd, 0xca, 0x37, 0xf1, 0x65, 0x41, 0xea, 0xf8, 0x82,
-    0xff, 0xe6, 0x47, 0x39, 0x34, 0x99, 0x73, 0xa7, 0x7a, 0x7d, 0x65, 0xfd,
-    0x28, 0xf9, 0xf9, 0x25, 0x97, 0xfc, 0x53, 0x6a, 0x3e, 0x91, 0xb5, 0x65,
-    0xff, 0xb7, 0xc1, 0x77, 0x81, 0xee, 0x69, 0x65, 0x41, 0xfd, 0x61, 0xd5,
-    0xf4, 0xb7, 0x33, 0xab, 0x2f, 0xb9, 0x1b, 0x9c, 0x59, 0x50, 0x79, 0x5b,
-    0x84, 0xb7, 0xa3, 0xbb, 0x8b, 0x2f, 0xec, 0x91, 0xc4, 0xb7, 0x56, 0x5e,
-    0x1e, 0x0d, 0x65, 0x0c, 0xf2, 0xf0, 0xbe, 0xff, 0xed, 0xe6, 0x5a, 0x8e,
-    0x98, 0x0c, 0x6b, 0x2f, 0xf6, 0xf8, 0xef, 0x02, 0x06, 0x5a, 0xca, 0xc3,
-    0xfe, 0x74, 0x4b, 0xee, 0x6c, 0xe2, 0x2c, 0xbf, 0xd1, 0xd7, 0xd8, 0x27,
-    0x25, 0x97, 0x09, 0xe5, 0x94, 0x47, 0x96, 0x21, 0x9d, 0xff, 0xf9, 0xe4,
-    0x51, 0xcc, 0xf8, 0x04, 0xf9, 0xf0, 0x16, 0x5f, 0xf1, 0xfb, 0x3e, 0xfe,
-    0x43, 0xc5, 0x96, 0x66, 0xc8, 0x5e, 0xf1, 0x9e, 0x8d, 0xe7, 0x94, 0x56,
-    0x50, 0x7e, 0x21, 0x49, 0xb1, 0x4c, 0x8e, 0x86, 0xc9, 0x8f, 0xc6, 0xef,
-    0xba, 0x43, 0x32, 0xbe, 0xa1, 0x50, 0xd6, 0xaf, 0x12, 0x3b, 0x51, 0x42,
-    0x7f, 0xa4, 0x01, 0x6f, 0xde, 0x45, 0x3e, 0xa9, 0x7f, 0xf8, 0xba, 0x6d,
-    0xf4, 0x19, 0x3e, 0x98, 0x59, 0x7f, 0x3f, 0x61, 0xb0, 0x4b, 0x2b, 0x0f,
-    0xcf, 0x49, 0x17, 0xfe, 0x6f, 0x03, 0xd9, 0x1e, 0xff, 0x1a, 0xcb, 0xfb,
-    0x33, 0x80, 0xec, 0x2c, 0xbf, 0xb6, 0x8e, 0xbb, 0x01, 0x59, 0x4b, 0x2f,
-    0xfe, 0x8d, 0x7f, 0x3b, 0x9e, 0x86, 0xb9, 0x2c, 0xbf, 0xd1, 0xa1, 0x3d,
-    0xec, 0xfd, 0x65, 0x48, 0xfe, 0xfc, 0x8d, 0x7f, 0x49, 0xe4, 0xe4, 0x05,
-    0x97, 0x77, 0x8b, 0x2f, 0xff, 0x67, 0x60, 0x51, 0x36, 0xe6, 0x36, 0x37,
-    0x56, 0x59, 0xab, 0x2f, 0xdb, 0x14, 0x0f, 0x4b, 0x2c, 0xcd, 0x90, 0x9b,
-    0x9e, 0x42, 0x1a, 0x62, 0x2f, 0x16, 0x10, 0xbf, 0x53, 0xc4, 0x11, 0xad,
-    0x2a, 0x18, 0x6c, 0x74, 0x57, 0xd8, 0x2b, 0x21, 0xab, 0x2f, 0xe2, 0x8f,
-    0x9a, 0xfd, 0x59, 0x7f, 0xf8, 0x57, 0x1f, 0xa3, 0xee, 0xc7, 0x9f, 0x75,
-    0x65, 0x8f, 0x47, 0xf7, 0xe2, 0xdb, 0xff, 0xfe, 0x0e, 0xa5, 0xcf, 0x39,
-    0xeb, 0x5a, 0x0f, 0xc7, 0xa7, 0xe2, 0xcb, 0xff, 0xb4, 0x08, 0xcf, 0x47,
-    0x4a, 0x3a, 0xb2, 0xff, 0xff, 0x77, 0x51, 0x9f, 0x13, 0xb0, 0x0f, 0x1c,
-    0xda, 0x81, 0x56, 0x5f, 0xf8, 0x9c, 0x5e, 0xe7, 0x9e, 0x67, 0x59, 0x7f,
-    0xfe, 0xff, 0xf8, 0x9d, 0xe8, 0xe8, 0x41, 0xe8, 0x27, 0x59, 0x7f, 0xfe,
-    0x20, 0xbe, 0xee, 0x4b, 0xd8, 0xc6, 0x0e, 0x60, 0xac, 0xac, 0x45, 0x8f,
-    0x96, 0x2e, 0x06, 0x2c, 0xa8, 0x37, 0x0c, 0x11, 0x5f, 0xe7, 0xef, 0x23,
-    0xc2, 0x4c, 0xb2, 0xf4, 0xa1, 0xab, 0x2d, 0x3c, 0xac, 0xbb, 0x92, 0x59,
-    0x7f, 0xfe, 0xf6, 0x0c, 0x3d, 0xe0, 0x3c, 0x7c, 0x0b, 0xfc, 0xb2, 0x98,
-    0x3e, 0xee, 0x8b, 0xdf, 0xed, 0x69, 0xe5, 0xb6, 0x0a, 0xb2, 0x96, 0x5d,
-    0x30, 0x56, 0x56, 0x1e, 0xc7, 0x8d, 0x45, 0x0b, 0xbf, 0xef, 0x09, 0xd3,
-    0xd1, 0xed, 0x0b, 0x2a, 0x47, 0xd3, 0x85, 0xf7, 0xff, 0x60, 0xe2, 0x51,
-    0xa8, 0x11, 0xc9, 0x65, 0xff, 0xb7, 0xe4, 0x9a, 0x33, 0xdf, 0x03, 0x59,
-    0x4d, 0x44, 0x23, 0xa1, 0x5c, 0xec, 0xf6, 0x5c, 0xd5, 0xc6, 0x8f, 0x90,
-    0xa6, 0x63, 0xd4, 0x64, 0xfe, 0x21, 0x73, 0x52, 0x1c, 0xe4, 0x21, 0x3b,
-    0x0e, 0x41, 0x21, 0x4b, 0x5e, 0x5d, 0xba, 0x29, 0xcf, 0xcb, 0xfd, 0x2c,
-    0xef, 0xa0, 0x42, 0x59, 0x7f, 0xee, 0x98, 0x0c, 0x6e, 0x4c, 0x42, 0xcb,
-    0xfe, 0x8f, 0xbc, 0xfc, 0xec, 0x0a, 0xb2, 0xa0, 0xfd, 0xf4, 0x7b, 0x7f,
-    0x9f, 0xa4, 0x1d, 0xbe, 0xdd, 0x59, 0x66, 0x4a, 0xcb, 0x83, 0xe5, 0x97,
-    0xe2, 0xcf, 0x3f, 0x56, 0x5f, 0xd2, 0x7c, 0xdf, 0x03, 0x59, 0x4c, 0x93,
-    0xd4, 0x9e, 0x24, 0xd7, 0xc6, 0x19, 0x42, 0xcb, 0xec, 0xfa, 0x1a, 0xb2,
-    0xf8, 0xca, 0x3f, 0x59, 0x7f, 0x7a, 0x37, 0xbe, 0x69, 0x65, 0xf9, 0xe6,
-    0x91, 0xf5, 0x65, 0xfe, 0x0e, 0xe1, 0xef, 0xee, 0x79, 0x65, 0xff, 0xa0,
-    0x7a, 0x89, 0x1f, 0xdd, 0xc5, 0x95, 0x24, 0xcc, 0x18, 0x21, 0x01, 0x17,
-    0x88, 0x7f, 0x2e, 0x22, 0x8e, 0x9c, 0x5f, 0xf6, 0xb9, 0xe3, 0x00, 0x03,
-    0xb2, 0xcb, 0xf8, 0x5c, 0xde, 0x41, 0x92, 0xcb, 0xf8, 0x2c, 0x61, 0x6e,
-    0x62, 0xcb, 0xff, 0xff, 0xb5, 0x20, 0x78, 0xda, 0xd3, 0x17, 0x9f, 0x00,
-    0xf3, 0x43, 0x8f, 0x96, 0x54, 0x26, 0x21, 0x87, 0x64, 0x60, 0x13, 0x0b,
-    0xff, 0xfe, 0x81, 0xfb, 0x3e, 0xe9, 0x3f, 0xbf, 0x7e, 0x71, 0xf4, 0x05,
-    0x97, 0xfb, 0x33, 0x18, 0x61, 0xe4, 0xb2, 0x98, 0x44, 0xd7, 0x59, 0xef,
-    0xd9, 0xc0, 0x76, 0x16, 0x5f, 0xfe, 0x31, 0x78, 0x0f, 0x1f, 0xdd, 0xd6,
-    0xa1, 0x65, 0xff, 0xb5, 0xd7, 0x97, 0x37, 0x87, 0x46, 0xb2, 0xff, 0xe7,
-    0xe1, 0x3b, 0x03, 0xf0, 0x5f, 0x8b, 0x2a, 0x11, 0x0a, 0x14, 0x1b, 0xff,
-    0xfe, 0x71, 0x44, 0xcd, 0x13, 0xfd, 0x20, 0x47, 0x79, 0x9f, 0x75, 0x65,
-    0xf8, 0xb3, 0xf8, 0xfd, 0x65, 0xfe, 0x91, 0x94, 0xd2, 0x3f, 0x2c, 0xb4,
-    0x48, 0xf6, 0xe6, 0x28, 0xac, 0x54, 0x0d, 0xa2, 0x7f, 0x43, 0x45, 0xc8,
-    0x8a, 0x18, 0x97, 0xed, 0xe7, 0xac, 0x1a, 0xcb, 0xff, 0xee, 0x78, 0xf9,
-    0xdf, 0x60, 0xcf, 0x98, 0x4b, 0x2f, 0x7a, 0x0b, 0x0f, 0xdc, 0x25, 0x37,
-    0xe7, 0xf4, 0x88, 0x0b, 0x2f, 0xf4, 0x37, 0x0d, 0xb1, 0xba, 0xb2, 0xff,
-    0x49, 0xbc, 0x32, 0xfa, 0x4b, 0x28, 0x07, 0xd1, 0x31, 0xa5, 0xfe, 0x3d,
-    0x39, 0x7f, 0x84, 0xb2, 0xff, 0xf6, 0x6b, 0x4f, 0x2e, 0x16, 0x34, 0x4f,
-    0x96, 0x5f, 0xf1, 0xc8, 0xb3, 0xc4, 0xf2, 0x59, 0x7f, 0xfe, 0x96, 0x10,
-    0xfd, 0x18, 0x51, 0xfb, 0x5e, 0x4b, 0x28, 0x91, 0x12, 0x21, 0xb5, 0xe7,
-    0x70, 0x2a, 0x24, 0xc5, 0xed, 0xc3, 0xe2, 0xca, 0x91, 0xf5, 0x00, 0x8f,
-    0x70, 0xa2, 0xfc, 0x06, 0x52, 0x7b, 0x64, 0x32, 0x56, 0x5f, 0xfe, 0xfa,
-    0x5c, 0xcd, 0xee, 0xdc, 0x62, 0x38, 0xb2, 0xff, 0x67, 0xdd, 0xeb, 0xcb,
-    0x8b, 0x2a, 0x11, 0x79, 0x87, 0x7a, 0x4d, 0xbf, 0xc4, 0xfd, 0xe0, 0x02,
-    0x4b, 0x2f, 0xff, 0xbf, 0x3f, 0xc5, 0xc3, 0xde, 0x59, 0xdf, 0x1a, 0xcb,
-    0xfc, 0xff, 0x71, 0xde, 0x5c, 0x59, 0x6d, 0x62, 0x21, 0x7c, 0xa5, 0x58,
-    0x8d, 0xf3, 0x85, 0xbd, 0xfa, 0x5c, 0x91, 0xfe, 0xb2, 0xff, 0xff, 0xde,
-    0xc9, 0x7b, 0x06, 0x50, 0x01, 0x20, 0x5c, 0xe7, 0x1d, 0x85, 0x95, 0x08,
-    0x96, 0xe9, 0x4d, 0xff, 0x85, 0xc1, 0xbc, 0xbb, 0xc7, 0xfd, 0x65, 0xff,
-    0xfc, 0xff, 0x61, 0x40, 0xa2, 0x74, 0xa3, 0xfc, 0xfb, 0xab, 0x28, 0xd1,
-    0x3a, 0x14, 0x0b, 0xff, 0x8f, 0xe1, 0x7b, 0xe3, 0x82, 0xc0, 0x2c, 0xbf,
-    0xe3, 0x62, 0x07, 0xb3, 0x63, 0x4b, 0x2a, 0x4b, 0xcd, 0x03, 0x31, 0xc8,
-    0x47, 0xb0, 0x46, 0x03, 0x1d, 0x46, 0x7c, 0xd8, 0x77, 0x7a, 0x30, 0xd2,
-    0x85, 0xe7, 0x21, 0x7f, 0xd2, 0x2d, 0xe8, 0x97, 0xf0, 0xff, 0x64, 0xf3,
-    0xf9, 0xf5, 0x97, 0xb7, 0x37, 0x21, 0x65, 0xff, 0xe1, 0xe0, 0xbe, 0x7e,
-    0xf2, 0x3c, 0x24, 0xcb, 0x2f, 0x70, 0xc6, 0xb2, 0xfe, 0x28, 0xf9, 0xaf,
-    0xd5, 0x97, 0xfd, 0x00, 0xe8, 0x7d, 0xa8, 0x15, 0x65, 0xff, 0x1e, 0x0a,
-    0x0f, 0x41, 0xcf, 0xac, 0xbf, 0xfd, 0x05, 0x2c, 0x0e, 0xb6, 0xff, 0x30,
-    0x6b, 0x2f, 0xf0, 0x0f, 0x5c, 0x9a, 0x1d, 0x65, 0xff, 0xc1, 0xe7, 0x9e,
-    0x5e, 0x79, 0x41, 0x2c, 0xa6, 0x11, 0x81, 0xf2, 0x56, 0x8c, 0xec, 0x63,
-    0x4f, 0xf6, 0x64, 0xdd, 0x0e, 0x34, 0xb5, 0x96, 0x75, 0xd8, 0x7d, 0xdf,
-    0x87, 0x1c, 0xe9, 0xac, 0xa8, 0x55, 0x5b, 0xe9, 0x43, 0xee, 0xcf, 0x7d,
-    0xd3, 0x6b, 0xac, 0xbe, 0x17, 0xc1, 0x02, 0xcb, 0x30, 0xb2, 0xfe, 0xf7,
-    0x23, 0xb0, 0x35, 0x95, 0x07, 0xc7, 0x84, 0x86, 0x25, 0x58, 0x8b, 0x0e,
-    0xc2, 0x12, 0xff, 0xf0, 0x5f, 0xce, 0x39, 0x37, 0xd0, 0x21, 0x2c, 0xbf,
-    0xe8, 0xf7, 0x4f, 0x66, 0xc0, 0x16, 0x5f, 0xff, 0x9c, 0x1a, 0x8f, 0x16,
-    0x77, 0x19, 0x8a, 0x28, 0xa9, 0x2a, 0x49, 0x81, 0x80, 0x9f, 0x89, 0x5d,
-    0x39, 0xbf, 0x00, 0x20, 0x28, 0x59, 0x7e, 0xe4, 0xde, 0x8e, 0xac, 0xbd,
-    0xa3, 0xf9, 0x65, 0x00, 0xfb, 0x66, 0x27, 0xe9, 0x4d, 0xff, 0xdf, 0x48,
-    0xa2, 0x5a, 0x8e, 0xbf, 0x56, 0x5f, 0xf0, 0xc4, 0x8f, 0xa7, 0xf3, 0x50,
-    0xb2, 0xe8, 0x92, 0xca, 0xc4, 0x4b, 0xba, 0x21, 0x1e, 0xdf, 0x07, 0x76,
-    0x24, 0xb2, 0xff, 0xcf, 0xd8, 0xd7, 0x3d, 0x05, 0xd5, 0x97, 0xec, 0x91,
-    0xbe, 0xf5, 0x95, 0xe4, 0x45, 0x11, 0x2f, 0x0f, 0x6a, 0x48, 0xe6, 0x0c,
-    0x2d, 0xef, 0x35, 0xfc, 0xb2, 0xff, 0xf1, 0x44, 0xb5, 0xa0, 0xfc, 0x7a,
-    0x7e, 0x2c, 0xbf, 0xfe, 0xe6, 0x30, 0x59, 0xde, 0x64, 0x89, 0xc5, 0x59,
-    0x63, 0xf2, 0x26, 0x7a, 0x95, 0x46, 0x8d, 0xdd, 0xf0, 0xb5, 0xbe, 0xdc,
-    0x8f, 0x71, 0x65, 0xfe, 0xdb, 0xa5, 0x01, 0xef, 0x16, 0x5f, 0xe6, 0xf7,
-    0x26, 0x93, 0x92, 0xca, 0xc3, 0xe7, 0x33, 0x4a, 0x84, 0x6a, 0xe1, 0x4e,
-    0xa1, 0x19, 0x73, 0xb2, 0xd6, 0x5f, 0xff, 0xc4, 0xec, 0x7a, 0x0e, 0x46,
-    0x5d, 0x96, 0x6b, 0x16, 0x51, 0x1f, 0x90, 0x46, 0xaf, 0x7f, 0xfc, 0x2c,
-    0xbf, 0x10, 0x76, 0xfb, 0x75, 0x65, 0x70, 0xf2, 0xfa, 0x3d, 0x7f, 0xfa,
-    0x36, 0x2c, 0xcd, 0xba, 0xc4, 0x14, 0x96, 0x5f, 0xf9, 0xcb, 0x6f, 0x3b,
-    0x4f, 0x86, 0xb2, 0x9d, 0x15, 0x24, 0x44, 0x2a, 0x55, 0xff, 0x74, 0xf8,
-    0x61, 0x65, 0x8e, 0x16, 0x5e, 0x14, 0x51, 0x52, 0x5f, 0x6c, 0xd3, 0xe2,
-    0x46, 0x66, 0x82, 0xe8, 0x1a, 0xca, 0x73, 0xcb, 0x23, 0x5b, 0xfe, 0x3e,
-    0x44, 0xa6, 0xf1, 0xfe, 0xb2, 0x8d, 0x30, 0x1d, 0x42, 0x9f, 0xc4, 0x17,
-    0xe8, 0xc2, 0x76, 0xac, 0xbf, 0xf3, 0xcb, 0xc7, 0xf7, 0xfa, 0x71, 0xac,
-    0xb8, 0x62, 0xac, 0xbf, 0xff, 0x66, 0xf8, 0x2e, 0xb6, 0x30, 0x87, 0x9f,
-    0x75, 0x65, 0xe7, 0x20, 0x6c, 0x7d, 0xba, 0x18, 0xaf, 0xd3, 0x05, 0x22,
-    0x50, 0xc2, 0xb6, 0xff, 0x4a, 0x35, 0xb4, 0x6b, 0x65, 0x97, 0xff, 0xbd,
-    0x9c, 0xe6, 0x34, 0x67, 0xbe, 0x06, 0xb2, 0xfe, 0x86, 0xcd, 0xe3, 0xd2,
-    0xcb, 0xfb, 0x39, 0x8d, 0x7f, 0x96, 0x5f, 0xb8, 0x78, 0x5f, 0xac, 0xad,
-    0x1e, 0xa7, 0x0b, 0x6f, 0x6b, 0x37, 0x56, 0x5f, 0xfe, 0x0f, 0x3c, 0x79,
-    0x31, 0xed, 0x9f, 0x75, 0x65, 0xff, 0x0a, 0x26, 0xdc, 0xc6, 0xc6, 0xea,
-    0xcb, 0xff, 0xc6, 0x0c, 0x21, 0xe9, 0xc1, 0x9f, 0x75, 0x65, 0x42, 0x22,
-    0x38, 0x7f, 0x7f, 0xe3, 0x21, 0x32, 0x6e, 0x1f, 0xc2, 0xac, 0xbe, 0x7f,
-    0xfa, 0xcb, 0x59, 0x40, 0x54, 0xd9, 0x32, 0x5e, 0xa1, 0x04, 0xd2, 0x22,
-    0x1f, 0xec, 0x35, 0x37, 0x91, 0x0a, 0x83, 0x7f, 0x7b, 0x3e, 0xef, 0xa1,
-    0x65, 0x42, 0xb4, 0xfc, 0x95, 0x42, 0xf0, 0x80, 0xbf, 0xff, 0x1f, 0x39,
-    0x1a, 0x96, 0xa3, 0xbc, 0x10, 0xa4, 0xb2, 0xff, 0xf8, 0xe6, 0x28, 0xef,
-    0x3b, 0xf0, 0x0c, 0xb6, 0x59, 0x7f, 0xff, 0xf8, 0xcb, 0xf1, 0x0b, 0x35,
-    0xac, 0x17, 0x37, 0x70, 0xa3, 0xf6, 0xbc, 0x96, 0x5f, 0xff, 0xdd, 0xe0,
-    0x47, 0xe3, 0xc9, 0x9c, 0xf7, 0x4f, 0xe9, 0x2c, 0xbf, 0xff, 0x8b, 0x3f,
-    0x72, 0xff, 0x5a, 0xc1, 0x73, 0xf7, 0xf9, 0x65, 0x12, 0x2f, 0x3a, 0xbf,
-    0x7e, 0x3e, 0xed, 0x82, 0xac, 0xbf, 0xe8, 0x07, 0x88, 0x3d, 0x8e, 0x2c,
-    0xbf, 0xf6, 0xe4, 0x02, 0x1b, 0x83, 0x76, 0xac, 0xbf, 0x6e, 0x88, 0x50,
-    0x05, 0x94, 0x67, 0xd6, 0xe8, 0x17, 0xff, 0x4b, 0x99, 0x03, 0x32, 0x7d,
-    0x30, 0xb2, 0xfd, 0xa8, 0xc1, 0x9a, 0xcb, 0xfb, 0xc6, 0x31, 0xe0, 0xab,
-    0x2f, 0xda, 0xcd, 0xfe, 0xc9, 0xc7, 0xa8, 0x02, 0x6a, 0x84, 0x6c, 0xbc,
-    0x25, 0xef, 0xff, 0xdd, 0xf6, 0x4a, 0x70, 0x3c, 0x7d, 0xf8, 0x07, 0xa5,
-    0x95, 0x25, 0x73, 0x87, 0x19, 0xb6, 0x88, 0x9a, 0x53, 0xe8, 0x51, 0xff,
-    0x0f, 0x92, 0x26, 0xbf, 0xfd, 0xd8, 0x68, 0x1c, 0x78, 0x28, 0x9a, 0x92,
-    0xcb, 0xe2, 0xdb, 0x78, 0xd6, 0x5f, 0xff, 0xef, 0x19, 0x0f, 0x58, 0x0f,
-    0x47, 0xb3, 0x5a, 0x86, 0x16, 0x5f, 0xf3, 0x5c, 0x62, 0x6e, 0x41, 0x49,
-    0x65, 0xff, 0x00, 0x3b, 0xbc, 0x31, 0x73, 0x4b, 0x2a, 0x0f, 0xe4, 0x07,
-    0x97, 0xff, 0xfd, 0xd0, 0xe9, 0xf8, 0x0f, 0x1c, 0xc4, 0xe2, 0xf7, 0x3c,
-    0xd5, 0x97, 0xff, 0xb9, 0x9a, 0x9c, 0x0f, 0x1e, 0xf3, 0x21, 0xac, 0xa3,
-    0x45, 0xaf, 0x1a, 0x28, 0xd1, 0xf0, 0xf0, 0xd6, 0xbf, 0xe6, 0xc6, 0xb7,
-    0xe6, 0xa2, 0x65, 0x97, 0xfe, 0xd0, 0x1b, 0x1f, 0x73, 0x37, 0xe2, 0xcb,
-    0x9f, 0x75, 0x65, 0x98, 0x59, 0x7f, 0xff, 0x4c, 0x50, 0x3c, 0xfb, 0xb9,
-    0x28, 0x2d, 0x9b, 0x8b, 0x2f, 0xef, 0xe7, 0xf0, 0x78, 0xd5, 0x95, 0xa4,
-    0x4f, 0x78, 0x48, 0x96, 0xef, 0xba, 0xfa, 0xe2, 0xcb, 0xf4, 0xe9, 0xfc,
-    0xd4, 0x2c, 0xad, 0x8f, 0x38, 0x88, 0xaa, 0x13, 0x97, 0xd9, 0x07, 0x21,
-    0x6e, 0xef, 0xb7, 0xf9, 0xff, 0x9d, 0x83, 0x79, 0x2c, 0xb3, 0x0b, 0x2f,
-    0xfe, 0xc0, 0x7a, 0x3d, 0x9a, 0xd4, 0x30, 0xb2, 0xfd, 0x9a, 0xd4, 0x30,
-    0xb2, 0xf8, 0x8f, 0xfe, 0x41, 0xff, 0x68, 0x4b, 0xc8, 0x97, 0xfd, 0xe7,
-    0xfd, 0xaf, 0x27, 0xe2, 0xcb, 0xfc, 0xf2, 0x94, 0x48, 0x1c, 0x59, 0x58,
-    0x7d, 0x81, 0x39, 0xac, 0x4e, 0x14, 0xe1, 0x67, 0xe8, 0x58, 0xdf, 0xfe,
-    0x7d, 0xbc, 0x70, 0x59, 0x31, 0xe8, 0xd6, 0x54, 0x99, 0x67, 0x23, 0x56,
-    0xc9, 0x7d, 0xbf, 0x3a, 0x9a, 0x64, 0xc4, 0xbe, 0x8f, 0x47, 0xf2, 0x6e,
-    0x47, 0xa5, 0xd8, 0xf1, 0x85, 0x39, 0xbf, 0xff, 0x61, 0x18, 0xf9, 0xe7,
-    0xe1, 0x91, 0x47, 0xcb, 0x2f, 0xc5, 0x9e, 0x7e, 0xac, 0xbf, 0xf4, 0xa0,
-    0xb6, 0x13, 0x44, 0x19, 0x2c, 0xbf, 0x89, 0xc7, 0xff, 0xdf, 0xac, 0xad,
-    0xd4, 0x4b, 0x4c, 0x4d, 0xc4, 0x0b, 0xff, 0x9c, 0xa5, 0xa7, 0xfb, 0xd1,
-    0x9c, 0x59, 0x7f, 0xf0, 0x0f, 0x5e, 0xc9, 0xbc, 0x7a, 0xd9, 0x65, 0xf7,
-    0x76, 0xc1, 0xac, 0xbf, 0xe3, 0x60, 0x4d, 0x7e, 0xd3, 0xe2, 0xca, 0x98,
-    0xf7, 0xe7, 0xc8, 0xef, 0x0a, 0x28, 0xab, 0x2f, 0xff, 0x9b, 0xd2, 0x8f,
-    0xf0, 0x7c, 0xc6, 0xc0, 0x12, 0x33, 0x34, 0x17, 0xfe, 0x7f, 0xc1, 0xe3,
-    0x98, 0xa3, 0xf5, 0x95, 0x88, 0xa1, 0x36, 0x1b, 0xfb, 0x59, 0xb9, 0xe7,
-    0x1a, 0xcb, 0xff, 0x67, 0xd3, 0x8b, 0x37, 0xe8, 0xf8, 0xb2, 0xfe, 0x07,
-    0x8e, 0x08, 0x0b, 0x2a, 0x0f, 0xbb, 0x10, 0xaf, 0xf6, 0xa3, 0xa6, 0x03,
-    0x1a, 0xcb, 0xf4, 0xa6, 0xcc, 0x02, 0xcb, 0x69, 0x65, 0x4f, 0x47, 0xd7,
-    0x06, 0x42, 0x14, 0x5f, 0x8f, 0xfc, 0x7d, 0xd5, 0x97, 0x1f, 0x16, 0x54,
-    0x97, 0x2a, 0x72, 0x1d, 0x0c, 0x1a, 0x7c, 0x86, 0x70, 0xa5, 0xf4, 0x39,
-    0xdc, 0x84, 0xa1, 0x3d, 0xc8, 0x45, 0xf4, 0xd2, 0x7c, 0xaa, 0xf8, 0xb6,
-    0x8f, 0x2c, 0xbd, 0xf0, 0xb3, 0xd2, 0xcb, 0xf7, 0x7a, 0x6d, 0xe2, 0xcb,
-    0xa5, 0xe5, 0x94, 0x66, 0xff, 0xa5, 0x16, 0x35, 0x97, 0xff, 0xf8, 0x58,
-    0x28, 0x60, 0xa1, 0x81, 0x27, 0xe3, 0x50, 0x08, 0x59, 0x7f, 0x7a, 0x27,
-    0x00, 0xf6, 0x59, 0x7f, 0xe7, 0x6e, 0x69, 0x86, 0x02, 0x5d, 0x59, 0x7f,
-    0xa3, 0xbc, 0xe1, 0x94, 0xcb, 0x2b, 0xc7, 0xe6, 0x48, 0x17, 0xfc, 0xfd,
-    0xe7, 0x7a, 0xf2, 0xe2, 0xca, 0x98, 0xf6, 0x88, 0x86, 0xff, 0xe7, 0xd3,
-    0xcb, 0x38, 0xfd, 0xc9, 0x96, 0x5f, 0xda, 0x7d, 0x14, 0x49, 0x65, 0xff,
-    0xf3, 0xf7, 0xd9, 0xbf, 0xc7, 0x3b, 0x9c, 0x36, 0xac, 0xbf, 0xf1, 0xc8,
-    0xf5, 0xf4, 0x14, 0x71, 0x65, 0x32, 0xb5, 0x52, 0x50, 0x20, 0x36, 0x4c,
-    0x87, 0xe8, 0x08, 0xb4, 0x86, 0x45, 0x9d, 0x53, 0xb3, 0x39, 0xe9, 0xda,
-    0x18, 0xcf, 0x22, 0xb3, 0xdb, 0x5c, 0x46, 0xb9, 0xb4, 0x6e, 0xd2, 0x86,
-    0xa8, 0xe5, 0x15, 0x64, 0xf9, 0x93, 0x10, 0xc9, 0x04, 0xae, 0x5f, 0xa3,
-    0xea, 0x38, 0x55, 0xcd, 0x1d, 0x6e, 0xa3, 0xda, 0x6c, 0x29, 0x7d, 0x18,
-    0xab, 0xc6, 0x61, 0xfc, 0x67, 0x45, 0x2e, 0x17, 0x94, 0xb7, 0x4e, 0xce,
-    0xb0, 0x06, 0x16, 0xa2, 0x91, 0x4f, 0xb1, 0x89, 0x2a, 0xca, 0xfd, 0x2f,
-    0xa0, 0x86, 0xb2, 0xa4, 0xa8, 0x58, 0xa3, 0xee, 0xbf, 0xfd, 0xac, 0x14,
-    0x7e, 0xc9, 0x8b, 0x35, 0x25, 0x97, 0xb5, 0x9b, 0xab, 0x2f, 0xfd, 0x02,
-    0x89, 0xb7, 0x31, 0xb1, 0xba, 0xb2, 0xb4, 0x8a, 0xe6, 0xa5, 0xf4, 0x7e,
-    0xff, 0xf9, 0xdb, 0x1a, 0x06, 0x82, 0xc6, 0x82, 0xfc, 0x59, 0x58, 0x88,
-    0x10, 0x98, 0x5f, 0xed, 0x00, 0x2e, 0x36, 0xc2, 0xcb, 0xff, 0xa3, 0x42,
-    0x74, 0xfb, 0xec, 0x19, 0xac, 0xbf, 0xc5, 0xf7, 0xf9, 0xc7, 0xdd, 0x59,
-    0x7f, 0xc5, 0x1b, 0x09, 0xef, 0x3e, 0xea, 0xcb, 0xe8, 0xc1, 0xfc, 0xb2,
-    0xb1, 0x12, 0xde, 0x37, 0xde, 0x7b, 0x76, 0xfd, 0xc5, 0x97, 0xff, 0xfc,
-    0x64, 0x7f, 0xf3, 0x58, 0x0f, 0x47, 0xb3, 0x5a, 0x86, 0x16, 0x54, 0x27,
-    0x81, 0xb1, 0x9e, 0x43, 0x6b, 0xf3, 0x1e, 0x8e, 0x5e, 0x9e, 0x33, 0xd4,
-    0x96, 0x5e, 0x7d, 0x6c, 0xb2, 0xe1, 0x45, 0x59, 0x79, 0xc0, 0xcc, 0x06,
-    0xd8, 0x51, 0xdb, 0xf6, 0x9e, 0x47, 0xe5, 0x97, 0xff, 0x6b, 0x9e, 0x31,
-    0x7c, 0x7b, 0x39, 0x2c, 0xa8, 0x3e, 0xc7, 0x27, 0xbf, 0x63, 0x7c, 0xe3,
-    0x59, 0x66, 0x70, 0xf8, 0xae, 0xb2, 0x21, 0x1a, 0x0e, 0x4a, 0x44, 0x60,
-    0xac, 0x13, 0xcb, 0x93, 0x16, 0xea, 0x15, 0x5e, 0x21, 0x7b, 0x6c, 0xfe,
-    0x51, 0xac, 0xf2, 0x3e, 0x2e, 0xa8, 0x6f, 0x5e, 0x16, 0x14, 0x3b, 0x84,
-    0x15, 0x27, 0xed, 0xd1, 0x1d, 0x35, 0x5b, 0xe9, 0x48, 0x5a, 0x2a, 0x6c,
-    0x23, 0xfd, 0x2b, 0x1b, 0xf8, 0x6f, 0x14, 0x69, 0xfc, 0xa4, 0x31, 0xf6,
-    0x7f, 0x68, 0x37, 0x8e, 0x69, 0x7e, 0xc1, 0xfa, 0x05, 0x59, 0x7f, 0x72,
-    0x26, 0x91, 0xcc, 0xb2, 0xff, 0xbb, 0x04, 0x7f, 0xe7, 0xdd, 0x59, 0x7d,
-    0x3e, 0xe5, 0xfa, 0xcb, 0xa3, 0x6c, 0x3d, 0xe1, 0x0e, 0x68, 0x91, 0xc7,
-    0xc2, 0x81, 0x21, 0x1b, 0x7f, 0x9f, 0x40, 0x67, 0x2c, 0xf9, 0x65, 0xff,
-    0xe9, 0x3f, 0x19, 0x94, 0x67, 0x63, 0xe9, 0x2c, 0xba, 0x3f, 0x59, 0x7d,
-    0xde, 0xc3, 0x56, 0x5e, 0x31, 0xb3, 0xf1, 0xb9, 0x10, 0x5e, 0xff, 0xd1,
-    0x26, 0x62, 0x40, 0xa2, 0x4d, 0xc5, 0x96, 0x30, 0x1f, 0xd7, 0xe6, 0xb4,
-    0xcd, 0x39, 0x1d, 0x8d, 0x4c, 0xdb, 0xb0, 0xfe, 0xbf, 0xf3, 0x81, 0x98,
-    0x7f, 0x39, 0x64, 0x96, 0x5f, 0xb4, 0x07, 0x70, 0x2a, 0x23, 0x55, 0xff,
-    0xf7, 0x8c, 0x57, 0x20, 0x6a, 0x0e, 0x4f, 0xc5, 0x97, 0xe3, 0x1b, 0xe7,
-    0x56, 0x5e, 0x63, 0xee, 0x2c, 0xb3, 0x3d, 0x93, 0x08, 0xc4, 0x10, 0x1a,
-    0x3a, 0x77, 0x49, 0xaf, 0xff, 0xf6, 0xf8, 0x2e, 0xb3, 0x7d, 0xee, 0x3c,
-    0x1b, 0xb5, 0xc6, 0xb2, 0xfd, 0xa0, 0x3b, 0x81, 0x51, 0x52, 0xac, 0x05,
-    0x44, 0x34, 0xa5, 0x94, 0xe6, 0xa7, 0xf1, 0xeb, 0x33, 0xc3, 0xfe, 0x75,
-    0xdb, 0xff, 0xc4, 0xec, 0xc4, 0xcf, 0x13, 0xf7, 0xb0, 0xb2, 0xfc, 0xed,
-    0xd9, 0xf7, 0x56, 0x5f, 0xb4, 0x07, 0x70, 0x2a, 0x23, 0xe5, 0xff, 0xc1,
-    0xd7, 0xe0, 0xf1, 0xcc, 0x51, 0xfa, 0xcb, 0xfd, 0x2c, 0xdd, 0x72, 0xfe,
-    0x7b, 0x59, 0x7f, 0xfc, 0x4f, 0xd9, 0x43, 0x13, 0xa3, 0xbc, 0x8f, 0xd6,
-    0x5d, 0x26, 0x7b, 0x26, 0x67, 0x85, 0x7c, 0x34, 0xea, 0x38, 0x87, 0x74,
-    0x04, 0xf5, 0xde, 0x37, 0xdb, 0xf9, 0x9f, 0x1e, 0x3e, 0x92, 0xcb, 0xf7,
-    0x7d, 0x04, 0xc2, 0xcb, 0xff, 0x3e, 0xd1, 0xe3, 0xd1, 0xc3, 0x56, 0x5f,
-    0xe8, 0xd6, 0x17, 0x73, 0xcb, 0x2e, 0xc6, 0x70, 0x89, 0x69, 0xf2, 0x81,
-    0x0f, 0x69, 0x84, 0xc1, 0x9b, 0x0c, 0x6a, 0x66, 0x9a, 0xcc, 0x46, 0x5f,
-    0x7f, 0xff, 0x83, 0xa6, 0x1f, 0x98, 0x38, 0xfb, 0x82, 0x75, 0x83, 0x61,
-    0x65, 0xf4, 0x71, 0xf8, 0xb2, 0xa4, 0x88, 0x79, 0x99, 0xaf, 0x0a, 0xc0,
-    0x16, 0x5f, 0xbe, 0xfa, 0x59, 0xd5, 0x95, 0xc3, 0xc9, 0x08, 0xfd, 0xff,
-    0xe6, 0x51, 0x81, 0x77, 0x76, 0x1c, 0xf7, 0x3a, 0x77, 0xa7, 0xd6, 0x5f,
-    0xf8, 0x2f, 0xa9, 0x16, 0x72, 0x34, 0xb2, 0xf8, 0x0e, 0xe0, 0x54, 0x58,
-    0xeb, 0xf4, 0x78, 0x9c, 0x45, 0x95, 0xa3, 0xd5, 0x69, 0x75, 0xfe, 0xc3,
-    0x2d, 0xbb, 0x9e, 0x59, 0x73, 0xf1, 0x65, 0xfd, 0xb0, 0x9a, 0xd6, 0x69,
-    0x65, 0x48, 0xf1, 0x9c, 0x5a, 0xff, 0x89, 0xd8, 0xf1, 0xc1, 0x6c, 0xb2,
-    0xfe, 0x2e, 0xe8, 0x30, 0xd5, 0x97, 0xff, 0xe2, 0x76, 0x27, 0x75, 0x88,
-    0x29, 0x67, 0x8d, 0xab, 0x29, 0xd1, 0x08, 0x12, 0xdb, 0xfb, 0xf7, 0xef,
-    0x21, 0x85, 0x97, 0xf8, 0xfb, 0x1a, 0x63, 0xc6, 0xb2, 0xff, 0xfa, 0x5b,
-    0x32, 0x91, 0x3c, 0xec, 0x0d, 0x4e, 0x9d, 0xe9, 0xf5, 0x97, 0xfd, 0x9b,
-    0xe2, 0x5f, 0x4b, 0x3a, 0xb2, 0xb1, 0x30, 0x27, 0x2f, 0xfc, 0xcc, 0x99,
-    0x6e, 0x39, 0x2c, 0xbf, 0xdd, 0x2c, 0xdf, 0xe7, 0x92, 0xca, 0x19, 0xe5,
-    0x60, 0xb5, 0xf8, 0xfb, 0xd3, 0xea, 0xcb, 0xff, 0xf0, 0x49, 0xd8, 0xeb,
-    0x10, 0x52, 0xcf, 0x1b, 0x56, 0x5f, 0x6b, 0x59, 0x3e, 0xb2, 0xfd, 0xaf,
-    0xcf, 0xd0, 0xb2, 0xb1, 0x19, 0x2d, 0x27, 0x75, 0x50, 0x92, 0xdf, 0xb3,
-    0x59, 0x93, 0x2c, 0xb3, 0x38, 0x5d, 0xf2, 0xd9, 0xb6, 0x44, 0x43, 0x64,
-    0xc8, 0x49, 0x30, 0x44, 0x6f, 0x13, 0x10, 0xb6, 0x17, 0x9e, 0x8c, 0x90,
-    0xa1, 0x0d, 0xc8, 0x75, 0x08, 0x77, 0x7c, 0xc1, 0xea, 0x65, 0x97, 0xfa,
-    0x62, 0x71, 0x7b, 0x9e, 0x59, 0x73, 0x58, 0x59, 0x4c, 0x93, 0xcc, 0x65,
-    0x0d, 0x2f, 0xc5, 0x9e, 0x7e, 0xac, 0xbd, 0x3c, 0x27, 0xaf, 0xd6, 0x53,
-    0x24, 0xf3, 0xd9, 0x42, 0x6b, 0xff, 0x8b, 0x05, 0xe6, 0x1f, 0x3b, 0x9b,
-    0xab, 0x2f, 0x78, 0x23, 0x59, 0x7f, 0xd1, 0x31, 0xf7, 0x86, 0x53, 0x2c,
-    0xbf, 0xcf, 0xff, 0x1f, 0xbd, 0x75, 0x97, 0x34, 0x0b, 0x2f, 0xf9, 0xc6,
-    0x7f, 0x4b, 0xa7, 0xa5, 0x94, 0x34, 0xc7, 0xf1, 0x1b, 0x43, 0xa4, 0x73,
-    0xd3, 0x3d, 0xe2, 0xf7, 0xfc, 0x2e, 0xb0, 0x9f, 0xe9, 0x71, 0x65, 0xc4,
-    0xc2, 0xcb, 0xb0, 0x6b, 0x2b, 0x0f, 0x9d, 0xce, 0xb7, 0x8b, 0xdf, 0xbc,
-    0xed, 0x82, 0x59, 0x7d, 0xcf, 0x18, 0xab, 0x2f, 0xe0, 0x3e, 0xa7, 0xdf,
-    0xcb, 0x2f, 0xd0, 0x2f, 0x73, 0xcb, 0x2e, 0x13, 0x16, 0x5f, 0x0f, 0x3e,
-    0xea, 0xca, 0x83, 0x74, 0x62, 0xf5, 0x39, 0x1f, 0x58, 0x4c, 0x64, 0x64,
-    0x61, 0xc6, 0x2b, 0x01, 0x65, 0xef, 0xd9, 0x1e, 0x59, 0x4c, 0xac, 0xd9,
-    0xf0, 0x46, 0xf8, 0x3c, 0xf6, 0x2c, 0xad, 0x1e, 0x49, 0x13, 0xdf, 0xfe,
-    0xcd, 0xcc, 0x07, 0x7e, 0x96, 0x17, 0xee, 0xb2, 0xff, 0xff, 0xe3, 0x2d,
-    0xf8, 0x32, 0x77, 0xdf, 0x9b, 0xbd, 0xdd, 0x3e, 0x94, 0x7e, 0xb2, 0xf1,
-    0x87, 0xf5, 0x96, 0xfb, 0x75, 0x12, 0xb3, 0x3c, 0x5e, 0x69, 0xe9, 0x65,
-    0x61, 0xe5, 0x7e, 0x5d, 0x7b, 0x1c, 0x96, 0x5e, 0xf4, 0x4c, 0xb2, 0xe3,
-    0xe9, 0x9b, 0x77, 0x1a, 0xbe, 0x96, 0xe9, 0xb5, 0x65, 0xf7, 0x1d, 0xf7,
-    0x56, 0x5f, 0xec, 0xdf, 0x9e, 0xdd, 0x32, 0x73, 0xc9, 0xe9, 0x2d, 0xff,
-    0xef, 0x47, 0xd9, 0xb1, 0x04, 0x3d, 0x8f, 0x2c, 0xbf, 0xe3, 0x07, 0x8f,
-    0xbc, 0x7f, 0x96, 0x5f, 0xe8, 0xd1, 0x60, 0xf3, 0xc0, 0x44, 0x27, 0x92,
-    0xef, 0xff, 0xd9, 0x36, 0x6e, 0x16, 0x6f, 0x2c, 0xfd, 0xb1, 0x25, 0x97,
-    0xfc, 0xff, 0x16, 0x77, 0x98, 0x2a, 0xca, 0xc5, 0x78, 0x80, 0x21, 0x38,
-    0xcb, 0x37, 0x56, 0x74, 0xe7, 0xe8, 0x68, 0x12, 0x48, 0x56, 0x6f, 0xde,
-    0x3d, 0x06, 0x4b, 0x2f, 0xfb, 0x63, 0xf4, 0xcf, 0x23, 0xf2, 0xcb, 0xf6,
-    0xbf, 0x9f, 0x0f, 0x56, 0x5f, 0xd1, 0xac, 0xc2, 0x61, 0x65, 0x41, 0xec,
-    0xf8, 0xb6, 0xff, 0x17, 0x67, 0xb7, 0xe8, 0x61, 0x65, 0xfd, 0x22, 0xcf,
-    0xba, 0xeb, 0x2a, 0x0f, 0x91, 0xcd, 0xef, 0xfb, 0x7b, 0xed, 0xde, 0x3b,
-    0xee, 0xac, 0xbf, 0xf1, 0xe8, 0x1e, 0x39, 0x9d, 0xe4, 0xb2, 0xff, 0xef,
-    0x43, 0x41, 0xe3, 0xee, 0x63, 0x56, 0x5f, 0xe7, 0x63, 0x35, 0xb4, 0x30,
-    0xb2, 0xa0, 0xfe, 0x09, 0x0e, 0xfb, 0xfc, 0x37, 0x59, 0x7b, 0xf3, 0x11,
-    0x65, 0xff, 0xff, 0xe8, 0x2e, 0xf0, 0xfc, 0x6d, 0x1c, 0x7b, 0x37, 0xee,
-    0x99, 0x0f, 0x36, 0x59, 0x4e, 0x8b, 0x9f, 0xc8, 0x7a, 0x3d, 0x7f, 0xcf,
-    0xad, 0xbc, 0x79, 0xa9, 0x96, 0x5f, 0xfc, 0xee, 0x5f, 0xf3, 0x37, 0x66,
-    0x77, 0x59, 0x40, 0x44, 0x04, 0xc7, 0x57, 0xe9, 0x73, 0x6c, 0x15, 0x65,
-    0xec, 0xd6, 0xcb, 0x2f, 0x39, 0x4c, 0xb2, 0xbc, 0x6e, 0x5c, 0x76, 0xf3,
-    0xb8, 0x15, 0x16, 0x82, 0xff, 0xce, 0x2e, 0xe0, 0x1f, 0x5b, 0x60, 0xab,
-    0x2f, 0xef, 0xe0, 0xa3, 0xbc, 0x59, 0x50, 0x98, 0xe0, 0xd8, 0xc0, 0x41,
-    0xa2, 0x8f, 0xd1, 0x2f, 0x04, 0x3a, 0x59, 0x78, 0xa3, 0x4b, 0x2e, 0xd4,
-    0xd3, 0x1b, 0x8e, 0x0e, 0xdf, 0xff, 0xee, 0x39, 0x7a, 0x37, 0xfb, 0x3b,
-    0x8e, 0x40, 0xc1, 0xac, 0xbf, 0xff, 0xf3, 0x91, 0xc7, 0x4f, 0xd1, 0xcf,
-    0x67, 0x35, 0x80, 0xce, 0xac, 0xb6, 0xa1, 0x18, 0xfe, 0x5f, 0xac, 0x4c,
-    0x78, 0xe1, 0xed, 0x7e, 0x1c, 0x4c, 0x6d, 0x59, 0x7e, 0x1e, 0x7e, 0xf0,
-    0xb2, 0xff, 0xff, 0xcf, 0xa9, 0x70, 0xc7, 0x9a, 0xd8, 0xf9, 0xe7, 0xff,
-    0x98, 0x4b, 0x2c, 0x1c, 0x44, 0x9f, 0x09, 0xef, 0xdb, 0x35, 0xdc, 0x96,
-    0x5f, 0xf3, 0xff, 0x87, 0xce, 0x47, 0xeb, 0x2a, 0x0f, 0x83, 0x84, 0xf7,
-    0xfe, 0x1c, 0xfe, 0x70, 0x7e, 0x3d, 0x6c, 0xb2, 0xff, 0xfb, 0x05, 0xeb,
-    0x63, 0x3b, 0xec, 0xc2, 0x02, 0xca, 0x84, 0x48, 0xf9, 0x0e, 0xff, 0xfc,
-    0x7d, 0x96, 0x6b, 0x4f, 0x21, 0x09, 0xfb, 0xc5, 0x97, 0xfa, 0x6f, 0x47,
-    0x7d, 0x13, 0x2c, 0xa8, 0x64, 0xc3, 0x6c, 0x51, 0x28, 0x49, 0x8e, 0x10,
-    0xb8, 0x40, 0xc1, 0xf0, 0x21, 0x6c, 0x70, 0xd9, 0xdd, 0x85, 0x86, 0xa3,
-    0x40, 0xf4, 0x74, 0x2e, 0x4e, 0x50, 0xbb, 0xe4, 0x22, 0x3b, 0x0b, 0x2d,
-    0xe4, 0x42, 0x2a, 0xdf, 0xf0, 0x7b, 0xc2, 0xcf, 0xba, 0xeb, 0x2d, 0x8b,
-    0x2f, 0xff, 0x0f, 0xd1, 0x07, 0xde, 0x19, 0x7d, 0x25, 0x96, 0x08, 0xcf,
-    0x64, 0x84, 0x2e, 0xc6, 0xac, 0xbf, 0xfe, 0x60, 0xf5, 0x9f, 0x77, 0xc6,
-    0x24, 0x0e, 0x16, 0x5f, 0xfb, 0xed, 0xfe, 0xdd, 0x3e, 0x94, 0x35, 0x65,
-    0x62, 0x25, 0x5d, 0x46, 0xf4, 0x6c, 0x6b, 0x29, 0x84, 0xe8, 0x4e, 0x12,
-    0x5a, 0x27, 0x78, 0x55, 0x91, 0x0d, 0xf8, 0xbb, 0x39, 0xbb, 0x2c, 0xbe,
-    0x0b, 0x5f, 0xab, 0x2f, 0xff, 0xc7, 0xb1, 0x66, 0xff, 0x1f, 0x7e, 0x94,
-    0x14, 0xcb, 0x2a, 0x11, 0x4a, 0x32, 0xbf, 0x11, 0x5f, 0xf4, 0xc5, 0x0d,
-    0xf4, 0x6f, 0x6a, 0xcb, 0xf7, 0x4e, 0x7f, 0x36, 0x59, 0x7f, 0xb9, 0x9e,
-    0x3e, 0x07, 0x65, 0x97, 0xc7, 0x3f, 0x9b, 0x2c, 0xb9, 0xfe, 0x9c, 0x88,
-    0x4e, 0x15, 0xf4, 0xd2, 0xb1, 0x1f, 0xbc, 0x85, 0xfd, 0x8c, 0x69, 0xa9,
-    0xf6, 0x32, 0xcb, 0xfe, 0xf1, 0xf7, 0x8f, 0xf7, 0xe2, 0xac, 0xbc, 0x37,
-    0xd9, 0x65, 0xda, 0xd8, 0x07, 0xb2, 0x21, 0xe5, 0xff, 0xf0, 0x76, 0xd1,
-    0xf7, 0x60, 0xea, 0x5c, 0xdd, 0x35, 0x95, 0xe4, 0xc3, 0x9e, 0x11, 0x04,
-    0x61, 0x7f, 0xc1, 0x7e, 0xbc, 0x9f, 0xe9, 0x2c, 0xbf, 0x38, 0x99, 0xf7,
-    0x56, 0x50, 0x0f, 0x8b, 0x87, 0x37, 0xf8, 0xc7, 0x8d, 0x9d, 0x83, 0x59,
-    0x73, 0xf1, 0x65, 0xf8, 0xc5, 0x64, 0x32, 0x59, 0x0b, 0x2f, 0xff, 0x83,
-    0xad, 0x41, 0x63, 0x07, 0xef, 0x60, 0x8b, 0x2c, 0xcb, 0x59, 0x5a, 0x3e,
-    0x50, 0xa8, 0x5f, 0x46, 0xa2, 0x65, 0x97, 0x8a, 0x1a, 0xb2, 0xd0, 0xb2,
-    0xa6, 0x35, 0x6d, 0x1b, 0xbf, 0xcd, 0x09, 0x77, 0x81, 0xd2, 0xca, 0x92,
-    0x75, 0x23, 0x34, 0x60, 0x5b, 0x50, 0x9a, 0x69, 0x11, 0x26, 0xcf, 0x91,
-    0x5b, 0x4b, 0x2f, 0x6b, 0x31, 0x65, 0x7e, 0x6b, 0x37, 0x04, 0x6e, 0x26,
-    0x16, 0x5f, 0xbe, 0x96, 0xb9, 0xc5, 0x95, 0x07, 0x83, 0x82, 0xf7, 0xff,
-    0x8f, 0x70, 0x2d, 0xf4, 0x36, 0x6d, 0xd3, 0x1a, 0xcb, 0xf8, 0xbe, 0x97,
-    0x42, 0x35, 0x97, 0xed, 0xdc, 0x26, 0x9a, 0xca, 0x83, 0xd8, 0x72, 0xfb,
-    0xc5, 0x9f, 0xac, 0xbf, 0xd9, 0xee, 0x4d, 0x99, 0xb2, 0xcb, 0x0b, 0xa3,
-    0xd0, 0xe8, 0xe5, 0xfc, 0x2f, 0x4a, 0x1b, 0xc5, 0x94, 0xe7, 0xae, 0x12,
-    0x9b, 0xf4, 0xde, 0xcf, 0xdd, 0x65, 0x42, 0xa4, 0x09, 0x33, 0x61, 0x07,
-    0xa1, 0x52, 0x50, 0xc7, 0xde, 0x43, 0x7f, 0xff, 0xf4, 0x0f, 0xd9, 0xde,
-    0xbe, 0xd9, 0xd6, 0x98, 0x4a, 0x62, 0xc1, 0x56, 0x5f, 0xe2, 0x77, 0xdf,
-    0x2d, 0xff, 0xac, 0xbf, 0xfe, 0xe4, 0x4d, 0xe8, 0xde, 0x58, 0x3f, 0x47,
-    0x16, 0x50, 0xd1, 0x11, 0xd3, 0x7b, 0xff, 0xcd, 0x3f, 0xa5, 0xc2, 0xc0,
-    0x74, 0x24, 0xb2, 0xff, 0x73, 0x37, 0x7f, 0x77, 0x99, 0x65, 0x62, 0x29,
-    0x1a, 0x47, 0xe4, 0xab, 0xfe, 0x7e, 0x96, 0x0f, 0xd9, 0xd5, 0x95, 0x0a,
-    0x81, 0x32, 0x39, 0xe7, 0x2f, 0xbf, 0x10, 0x1f, 0x86, 0xb2, 0xff, 0xfe,
-    0xd1, 0x44, 0x7d, 0x3b, 0x9d, 0x28, 0x1f, 0xa3, 0xab, 0x2e, 0x3f, 0x2c,
-    0xbe, 0x91, 0x38, 0x8b, 0x2f, 0xf0, 0xdf, 0xfd, 0x69, 0xff, 0x59, 0x7d,
-    0xa0, 0x6e, 0x8a, 0xb2, 0xf9, 0x86, 0x4b, 0x8a, 0xb2, 0xb0, 0xf3, 0xdc,
-    0x9e, 0x8d, 0x14, 0x85, 0x08, 0x4a, 0x84, 0xe1, 0x30, 0x9b, 0x75, 0x71,
-    0xc5, 0x83, 0x0c, 0x6b, 0xff, 0xb4, 0x59, 0xbf, 0x58, 0x7e, 0x81, 0xac,
-    0xbc, 0xfb, 0xa6, 0xb2, 0xff, 0xc2, 0x75, 0x83, 0x62, 0x30, 0xa1, 0x65,
-    0xbe, 0x59, 0x7f, 0xf8, 0xdd, 0xe6, 0xef, 0xb2, 0x5e, 0x3d, 0xeb, 0x2a,
-    0x0f, 0x77, 0x74, 0x4a, 0xfc, 0x27, 0x4a, 0x3f, 0x59, 0x50, 0x9a, 0x5f,
-    0xc8, 0x9a, 0x1e, 0x6c, 0x27, 0x37, 0x92, 0x5f, 0xa3, 0xb9, 0xe8, 0x59,
-    0x7e, 0xfe, 0x3b, 0x8d, 0x59, 0x7f, 0xff, 0xff, 0x9b, 0xba, 0x7e, 0xff,
-    0x1c, 0x81, 0x9f, 0x4b, 0x87, 0xde, 0x1f, 0xd2, 0x28, 0xf4, 0x2c, 0xbf,
-    0xf6, 0x7d, 0x2e, 0x1f, 0x5c, 0xb1, 0x65, 0xfe, 0xc6, 0xfb, 0x26, 0x79,
-    0x96, 0x5f, 0xd8, 0x7b, 0x7a, 0x22, 0x71, 0xf8, 0xf4, 0xf6, 0xff, 0xff,
-    0xb2, 0x6c, 0xe8, 0xfd, 0x1f, 0x66, 0xa3, 0xa6, 0x03, 0x1a, 0xcb, 0x18,
-    0xd1, 0x57, 0xe4, 0x5a, 0xc4, 0xf5, 0x7d, 0x1d, 0x6d, 0xff, 0xff, 0x8c,
-    0xb3, 0xb0, 0xd1, 0x42, 0xfb, 0x4e, 0xcf, 0x1e, 0xbc, 0xeb, 0x2f, 0xcc,
-    0x30, 0xfd, 0xe2, 0xcb, 0xff, 0xec, 0xd9, 0xc6, 0x61, 0x06, 0x8c, 0x59,
-    0x8d, 0x65, 0x42, 0x3a, 0x31, 0xb7, 0x45, 0x57, 0xfe, 0xcf, 0xa5, 0xc9,
-    0xb4, 0xfd, 0xe2, 0xcb, 0xf1, 0x40, 0x24, 0xd5, 0x97, 0xff, 0xb3, 0x77,
-    0xc1, 0x9b, 0xd9, 0x34, 0xa3, 0xe5, 0x97, 0xff, 0x73, 0x26, 0xf4, 0x6f,
-    0xcf, 0x7a, 0x16, 0x50, 0xd1, 0x7b, 0xa2, 0x7e, 0xa8, 0x5f, 0xe7, 0xff,
-    0x8d, 0x7f, 0xba, 0xb2, 0x96, 0x5f, 0xf7, 0x08, 0x21, 0xec, 0xa1, 0x85,
-    0x95, 0xf1, 0xe2, 0xf4, 0x2e, 0xb1, 0x19, 0xae, 0x60, 0x17, 0xab, 0xff,
-    0x8b, 0x36, 0xd4, 0x47, 0x4f, 0xd0, 0xb2, 0xff, 0xf4, 0x8d, 0x83, 0xe9,
-    0x64, 0xb5, 0xce, 0x2c, 0xbf, 0xd1, 0x13, 0x66, 0xf3, 0xd2, 0xcb, 0xe3,
-    0xd6, 0x12, 0xca, 0x84, 0x4f, 0x12, 0x57, 0x0d, 0x2f, 0xff, 0x18, 0x47,
-    0x84, 0x19, 0x18, 0xf3, 0xf5, 0x97, 0xff, 0xe3, 0x0f, 0xde, 0xc1, 0x43,
-    0x87, 0xee, 0x46, 0xcb, 0x2b, 0x65, 0xf0, 0x9c, 0x26, 0x04, 0x7f, 0xba,
-    0x8c, 0x47, 0xf2, 0xe2, 0x8f, 0x2f, 0x85, 0xdd, 0x87, 0x06, 0xf2, 0xed,
-    0xc4, 0x9b, 0xe9, 0xa4, 0x73, 0x2c, 0xb8, 0xb6, 0x59, 0x7d, 0xfe, 0x9e,
-    0x7d, 0x65, 0x4e, 0x3e, 0x19, 0xe4, 0x93, 0xe1, 0x7b, 0x6e, 0x2c, 0xbb,
-    0xdb, 0x8b, 0x2f, 0xff, 0x66, 0xff, 0x3c, 0xbf, 0x7f, 0xbf, 0x3f, 0x96,
-    0x5b, 0xb0, 0x7d, 0x3e, 0x1a, 0xbf, 0xfe, 0xd6, 0xd1, 0xbb, 0xc2, 0xce,
-    0xf4, 0xf4, 0x05, 0x97, 0xf6, 0x6d, 0xc2, 0xcd, 0xeb, 0x2a, 0x49, 0x93,
-    0x1b, 0xeb, 0x93, 0xf5, 0x4e, 0xa1, 0x93, 0xff, 0x93, 0xeb, 0x67, 0x18,
-    0x5b, 0xc6, 0xbb, 0x7c, 0xed, 0x79, 0x2c, 0xbf, 0xfb, 0xc7, 0x3b, 0x0b,
-    0x0f, 0x4f, 0xbd, 0x65, 0xff, 0xc6, 0x4e, 0x32, 0xc1, 0xfa, 0x38, 0xb2,
-    0xf0, 0x91, 0xa5, 0x97, 0xfd, 0xb3, 0x63, 0x5d, 0x28, 0xd9, 0x65, 0xf8,
-    0xc1, 0xf3, 0x00, 0x59, 0x7d, 0xbe, 0x08, 0x0b, 0x2f, 0xff, 0xe8, 0x2c,
-    0xff, 0x98, 0x3f, 0x46, 0xcd, 0x09, 0x0d, 0x65, 0x19, 0xff, 0x78, 0x8e,
-    0xfc, 0x7d, 0xec, 0x49, 0x65, 0xd1, 0xf2, 0xca, 0x1a, 0xa0, 0x56, 0x08,
-    0x40, 0x8b, 0xa4, 0x17, 0x1d, 0x23, 0xae, 0xc2, 0xa3, 0x79, 0x0c, 0xf9,
-    0x3d, 0xfc, 0x5d, 0x8e, 0x74, 0xd6, 0x5f, 0xff, 0xd1, 0x36, 0x0f, 0xd1,
-    0xbf, 0xd9, 0xd2, 0x88, 0x6a, 0xcb, 0xfb, 0xe1, 0x8f, 0x1f, 0x65, 0x97,
-    0x8a, 0x06, 0xb2, 0xfa, 0x59, 0xec, 0x59, 0x7b, 0x60, 0x92, 0xcb, 0xbe,
-    0xe4, 0x22, 0x22, 0x62, 0xf7, 0x1b, 0x10, 0x86, 0xff, 0xa0, 0x1e, 0x39,
-    0x9d, 0xf6, 0x59, 0x50, 0x9c, 0x93, 0x4b, 0x1e, 0x1c, 0x7f, 0xa5, 0x5f,
-    0x1e, 0xcd, 0x85, 0x97, 0xfa, 0x51, 0xad, 0xa3, 0x5b, 0x2c, 0xbf, 0xed,
-    0xee, 0x5f, 0xfb, 0x3f, 0x75, 0x97, 0xff, 0xb3, 0x3f, 0x6c, 0x4d, 0xc1,
-    0xf9, 0xf6, 0x59, 0x46, 0x88, 0x72, 0x3b, 0xbe, 0x7f, 0x19, 0x2c, 0xbe,
-    0xcf, 0xe0, 0x96, 0x58, 0xb6, 0x3c, 0x1f, 0x10, 0x5f, 0xf1, 0x84, 0xa5,
-    0xa8, 0xc1, 0xac, 0xbf, 0xff, 0xd9, 0x20, 0x78, 0xfd, 0x19, 0xa9, 0x74,
-    0xa1, 0xbc, 0x59, 0x7f, 0xed, 0x3e, 0xc1, 0x8c, 0x20, 0xec, 0xb2, 0xbc,
-    0x89, 0xee, 0x2f, 0xdf, 0xf0, 0x7b, 0xbb, 0xcc, 0x32, 0x1a, 0xcb, 0xe0,
-    0xc7, 0xc3, 0x59, 0x43, 0x4f, 0x81, 0xd8, 0xb8, 0x51, 0xd8, 0x6a, 0xef,
-    0x23, 0x14, 0xee, 0xfb, 0x72, 0x35, 0xb2, 0xca, 0x85, 0x64, 0x39, 0x2a,
-    0x71, 0xd7, 0xef, 0xf6, 0x81, 0x36, 0x1f, 0x82, 0xb2, 0xff, 0xff, 0xde,
-    0x76, 0x38, 0x33, 0xcf, 0x80, 0x64, 0xff, 0x36, 0x23, 0x8b, 0x2f, 0xfc,
-    0x7b, 0xcb, 0x39, 0xd6, 0x0c, 0x0b, 0x2f, 0xfc, 0x5b, 0xf0, 0x73, 0x66,
-    0x13, 0x0b, 0x2f, 0xf7, 0x7d, 0xba, 0x7e, 0x79, 0x96, 0x5f, 0xd0, 0x02,
-    0x7f, 0xba, 0xb2, 0xa4, 0x8e, 0x43, 0x40, 0xdd, 0x40, 0x69, 0xbd, 0xfa,
-    0x3b, 0xb6, 0x0a, 0xb2, 0xff, 0xdf, 0x00, 0x9f, 0x67, 0x91, 0xf9, 0x65,
-    0x68, 0xfa, 0x02, 0x53, 0x7f, 0x60, 0x30, 0xff, 0xe2, 0xcb, 0xf0, 0xc0,
-    0x1c, 0xdd, 0x59, 0x7f, 0xe2, 0x8f, 0xbd, 0x06, 0x4e, 0x35, 0x95, 0x31,
-    0xf3, 0xb4, 0xae, 0xfb, 0x98, 0x4c, 0x2c, 0xbe, 0x8c, 0x93, 0xac, 0xaf,
-    0x8f, 0x0b, 0xc4, 0x57, 0xed, 0x7f, 0x3c, 0xb2, 0x67, 0xa5, 0x95, 0x08,
-    0xc0, 0x1b, 0x2b, 0x91, 0xdf, 0xe1, 0xef, 0x82, 0xee, 0x7e, 0xb2, 0xfd,
-    0x1d, 0xf4, 0x75, 0x65, 0xc5, 0xfa, 0xca, 0xd8, 0xfc, 0xf4, 0x6a, 0xe4,
-    0xf7, 0xff, 0xff, 0x83, 0xaf, 0x64, 0xd3, 0x3e, 0xa6, 0xef, 0x83, 0xff,
-    0x30, 0xf7, 0x8e, 0x16, 0x5f, 0xf1, 0xfb, 0x9a, 0x32, 0x86, 0xac, 0xbf,
-    0xa3, 0x9b, 0xa7, 0xf7, 0x56, 0x5f, 0xd1, 0xc9, 0x8b, 0x26, 0x59, 0x46,
-    0x98, 0xa6, 0xeb, 0xf6, 0x8d, 0xfc, 0x63, 0x7e, 0xef, 0x9c, 0x98, 0x59,
-    0x7f, 0xb7, 0x08, 0x21, 0x01, 0xb0, 0xb2, 0xfc, 0x62, 0xb5, 0xfa, 0xb2,
-    0xff, 0x07, 0x61, 0xfb, 0x0a, 0x16, 0x54, 0x22, 0x48, 0x06, 0xe4, 0x51,
-    0x7f, 0xf6, 0x0f, 0xd0, 0x2f, 0xd2, 0xe8, 0x46, 0xb2, 0xec, 0xe2, 0xcb,
-    0x9f, 0xab, 0x2f, 0x70, 0x32, 0xd1, 0xac, 0xf0, 0xb5, 0xb0, 0x69, 0xe7,
-    0x62, 0x00, 0x21, 0x74, 0x45, 0xdd, 0x73, 0xbf, 0xfd, 0x90, 0x58, 0x02,
-    0xce, 0x85, 0xc5, 0x59, 0x7f, 0xd9, 0xfc, 0xfe, 0x38, 0xf3, 0x8b, 0x2f,
-    0xfe, 0x3e, 0xfb, 0x0e, 0x5c, 0xcf, 0xba, 0xb2, 0x86, 0x8c, 0x62, 0x47,
-    0xe1, 0xdd, 0xff, 0x7e, 0x59, 0xde, 0x3b, 0x92, 0xcb, 0xff, 0x83, 0x93,
-    0x61, 0x80, 0xb3, 0xd8, 0xb2, 0xdf, 0x80, 0xfe, 0x48, 0xde, 0xf3, 0x5f,
-    0xe5, 0x95, 0xa3, 0xc5, 0xfc, 0xa2, 0xa1, 0x92, 0xf8, 0x33, 0x4c, 0x8d,
-    0x40, 0xe1, 0x4f, 0xa2, 0x2f, 0x46, 0xa8, 0xf0, 0xa1, 0x29, 0x62, 0x3d,
-    0x8c, 0x64, 0x30, 0xed, 0xbf, 0xfe, 0xfd, 0xfd, 0x9f, 0xfe, 0xfa, 0xcd,
-    0xfe, 0xc5, 0x97, 0xff, 0xee, 0xf0, 0x82, 0x1f, 0xa5, 0xc1, 0xfb, 0x0f,
-    0xab, 0x2d, 0x0d, 0x45, 0x51, 0x29, 0xd9, 0xab, 0x2f, 0xdf, 0x99, 0x4b,
-    0x8b, 0x2c, 0x7f, 0x1b, 0x9e, 0x88, 0xdf, 0xde, 0x98, 0xfc, 0x6d, 0x59,
-    0x77, 0xfc, 0x59, 0x58, 0x78, 0xc6, 0x5d, 0x7f, 0xa5, 0x9a, 0xe1, 0x46,
-    0xcb, 0x2f, 0x98, 0xd4, 0x35, 0x65, 0xd9, 0xb2, 0xca, 0x83, 0x75, 0x3e,
-    0x47, 0x7f, 0x8c, 0xbb, 0x2c, 0xd6, 0x2c, 0xbf, 0xa0, 0x1a, 0x38, 0x6a,
-    0xca, 0x91, 0xee, 0x91, 0x8d, 0xff, 0xe6, 0xfe, 0xfa, 0xcd, 0xf8, 0x63,
-    0xf1, 0xac, 0xbf, 0xf3, 0xff, 0xa8, 0x2e, 0xfb, 0x24, 0xb2, 0xa1, 0x15,
-    0x58, 0x42, 0x69, 0x77, 0xb3, 0xce, 0xb2, 0xf0, 0x42, 0x4b, 0x2f, 0xc7,
-    0xef, 0x60, 0xd6, 0x5a, 0x65, 0x83, 0x3c, 0x3e, 0x0e, 0x50, 0xd1, 0x1c,
-    0xeb, 0xd7, 0xf6, 0xc5, 0x9f, 0x87, 0x8b, 0x2f, 0xf7, 0xf3, 0xf8, 0xe3,
-    0xce, 0x2c, 0xbd, 0xba, 0x6d, 0x59, 0x7f, 0xfc, 0xff, 0xf2, 0x3f, 0xee,
-    0x18, 0xf0, 0xa6, 0x59, 0xe2, 0xfe, 0xa1, 0x1c, 0x78, 0x5e, 0xea, 0xb7,
-    0xfa, 0x5d, 0xf6, 0x6a, 0x3a, 0xb2, 0xfe, 0x17, 0x00, 0x0c, 0x15, 0x65,
-    0xc0, 0xde, 0xb2, 0xff, 0xf9, 0xe5, 0xcc, 0xd4, 0x70, 0xb3, 0xf0, 0xf1,
-    0x65, 0x41, 0xf4, 0x78, 0x66, 0xb1, 0x17, 0x1d, 0x84, 0xbd, 0xff, 0xec,
-    0xdc, 0xfd, 0xb1, 0x37, 0x4c, 0x3a, 0xe2, 0xcb, 0xfc, 0xdc, 0xc2, 0xec,
-    0xfe, 0x2c, 0xbf, 0xfb, 0x9d, 0x88, 0xd7, 0xf3, 0x16, 0x0a, 0xb2, 0xbe,
-    0x3f, 0xa7, 0x34, 0xbc, 0xc4, 0x82, 0xb2, 0xfd, 0xe8, 0xd6, 0xcd, 0x59,
-    0x7f, 0x82, 0xe5, 0xec, 0x79, 0x96, 0x5b, 0xe9, 0x8f, 0x6c, 0x52, 0x9a,
-    0x34, 0x52, 0x3b, 0xcd, 0x42, 0xac, 0x2c, 0x87, 0x59, 0x93, 0xbc, 0x32,
-    0x4a, 0x18, 0xd5, 0x0b, 0xf1, 0x32, 0x60, 0xc6, 0xdf, 0x88, 0x0d, 0xb7,
-    0xd1, 0x95, 0x3c, 0x2e, 0xca, 0x30, 0x5e, 0x4a, 0xef, 0xb8, 0x24, 0xb2,
-    0xfb, 0xee, 0x47, 0xcb, 0x29, 0x96, 0x6e, 0x88, 0x5a, 0xf1, 0x67, 0xeb,
-    0x2d, 0x0b, 0x2b, 0xf3, 0x59, 0xd1, 0xcb, 0x9f, 0xab, 0x2b, 0x46, 0xe3,
-    0xc4, 0x57, 0xcd, 0x8d, 0x71, 0x65, 0xfe, 0x86, 0x96, 0x7e, 0x1e, 0x2c,
-    0xbf, 0xed, 0x67, 0xb3, 0x69, 0xc7, 0xc5, 0x95, 0x88, 0xb1, 0x32, 0x12,
-    0x22, 0x09, 0x9d, 0xfe, 0x91, 0xf3, 0x91, 0xa9, 0x2c, 0xbe, 0x76, 0xc1,
-    0xac, 0xa1, 0x9e, 0x9c, 0xc6, 0x77, 0xf1, 0x90, 0x65, 0x9c, 0x59, 0x7f,
-    0xfe, 0x91, 0xf7, 0x80, 0xf1, 0xf7, 0xe9, 0x1f, 0x78, 0xb2, 0xff, 0xa3,
-    0xf6, 0xbc, 0xb5, 0x9b, 0x2c, 0xbf, 0xee, 0xc7, 0xdf, 0xbf, 0xbc, 0x6b,
-    0x2f, 0x8e, 0x7f, 0x36, 0x59, 0x58, 0x7b, 0xfd, 0x3a, 0xb3, 0x56, 0x5f,
-    0xc6, 0x41, 0x96, 0x72, 0x71, 0xb2, 0xde, 0x43, 0x50, 0x9d, 0xbb, 0x04,
-    0x73, 0x16, 0x79, 0x5f, 0xb0, 0xcb, 0xbf, 0xfb, 0x41, 0xfa, 0x5c, 0xf6,
-    0x6c, 0x12, 0x59, 0x66, 0x73, 0xd3, 0xe6, 0x94, 0x4f, 0x2e, 0x13, 0xdb,
-    0xd4, 0x46, 0x95, 0xb4, 0x2f, 0xe5, 0x19, 0x48, 0xe7, 0x22, 0x72, 0x94,
-    0x08, 0xc4, 0xac, 0x20, 0x4b, 0x59, 0xfa, 0x12, 0xc7, 0x1e, 0x5c, 0xd2,
-    0xb6, 0x75, 0x29, 0x99, 0xb1, 0xdc, 0xfa, 0x97, 0x34, 0xf2, 0x95, 0xbf,
-    0x94, 0x36, 0xcb, 0x42, 0x29, 0x68, 0x7c, 0xa4, 0xd9, 0x76, 0x91, 0xca,
-    0x18, 0x67, 0xcf, 0xc6, 0x72, 0x24, 0xa4, 0x4d, 0xc5, 0x1b, 0xfb, 0x4c,
-    0xc7, 0xbc, 0xe1, 0x65, 0xfd, 0xb8, 0x63, 0x28, 0x99, 0x65, 0xe8, 0x72,
-    0x59, 0x7d, 0x9e, 0x7e, 0xac, 0xb3, 0x27, 0x0f, 0xaf, 0xc6, 0x04, 0x35,
-    0x7f, 0xfa, 0x34, 0x19, 0xa6, 0x3f, 0x1b, 0x5c, 0x6b, 0x2f, 0xe2, 0x7e,
-    0xf2, 0x37, 0x56, 0x5f, 0xff, 0xfc, 0xe5, 0xde, 0x41, 0xcb, 0x37, 0x0b,
-    0xb1, 0xe8, 0x60, 0x31, 0xb8, 0xb2, 0xfc, 0x1e, 0xcd, 0x0c, 0x2c, 0xa0,
-    0x26, 0x32, 0x69, 0x7e, 0x2f, 0x27, 0x5b, 0xec, 0xe7, 0xe6, 0xb2, 0xdf,
-    0x2c, 0xbf, 0xe8, 0x3e, 0x61, 0xfa, 0x3a, 0xb2, 0xa4, 0x79, 0x1e, 0x12,
-    0xbe, 0x03, 0xb8, 0x15, 0x16, 0xb2, 0x8c, 0xf4, 0x34, 0x45, 0x7e, 0xc9,
-    0x1f, 0x82, 0xb2, 0xff, 0xa4, 0x13, 0xf6, 0xce, 0x43, 0x59, 0x7f, 0x9a,
-    0x6d, 0x79, 0xb3, 0xcb, 0x2f, 0xdf, 0xe6, 0xe1, 0x75, 0x65, 0xfe, 0x09,
-    0x66, 0xe1, 0x8a, 0x6b, 0x2f, 0xb8, 0xe4, 0x05, 0x95, 0xe3, 0xd6, 0xdc,
-    0x35, 0xa8, 0x45, 0x36, 0x42, 0x06, 0xf6, 0xa1, 0xab, 0x2f, 0xef, 0x67,
-    0x23, 0x6d, 0xc5, 0x97, 0x7e, 0x35, 0x97, 0xed, 0x01, 0xdc, 0x0a, 0x8a,
-    0x0d, 0x7d, 0x80, 0xcf, 0x96, 0x5d, 0x26, 0x63, 0x3e, 0xec, 0x18, 0xf1,
-    0xa5, 0x62, 0x36, 0xde, 0x13, 0xf7, 0xd9, 0x34, 0x75, 0x65, 0xfe, 0xe6,
-    0x10, 0x1c, 0xbf, 0x59, 0x7f, 0xd1, 0x28, 0xd6, 0xd1, 0xad, 0x96, 0x5e,
-    0xc6, 0x9a, 0xcb, 0xed, 0x1b, 0x0d, 0x59, 0x7b, 0xb9, 0xe5, 0x94, 0x33,
-    0xda, 0xc1, 0xb6, 0x08, 0xee, 0x6c, 0xcb, 0x2f, 0xd1, 0xf8, 0x4a, 0x65,
-    0x96, 0xf4, 0xe3, 0xc1, 0x66, 0x31, 0x7e, 0x7e, 0x36, 0x3f, 0x59, 0x7e,
-    0x9b, 0xf7, 0x29, 0x96, 0x5c, 0x46, 0xb2, 0xa0, 0xdf, 0x80, 0xaa, 0xf9,
-    0xff, 0xcd, 0x2c, 0xac, 0x46, 0xab, 0x05, 0x86, 0xcf, 0xe2, 0x0b, 0xfd,
-    0x31, 0xf4, 0x33, 0x1f, 0x56, 0x5f, 0xff, 0x70, 0xf6, 0x7e, 0x39, 0x3f,
-    0x7d, 0x13, 0x2c, 0xbf, 0xf3, 0x97, 0xf9, 0xd8, 0x23, 0xfd, 0x65, 0x75,
-    0x11, 0x93, 0xe9, 0xf6, 0x67, 0x3d, 0xb2, 0x0c, 0xe2, 0x35, 0x09, 0x1e,
-    0x64, 0x2e, 0x98, 0x21, 0xf8, 0x9c, 0xce, 0x66, 0x86, 0xce, 0x89, 0x9b,
-    0x0f, 0x7f, 0x13, 0x39, 0x11, 0x19, 0x72, 0x12, 0x9d, 0x8d, 0x14, 0x27,
-    0x82, 0x43, 0x06, 0xff, 0x30, 0xcd, 0xfd, 0xec, 0xd9, 0x65, 0xff, 0xe6,
-    0x6d, 0x79, 0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x8a, 0x2d, 0x7f, 0x99, 0xe6,
-    0x80, 0xee, 0x05, 0x45, 0xd4, 0xa8, 0x7e, 0x74, 0xd9, 0x46, 0x9b, 0x8a,
-    0x40, 0x87, 0x11, 0xcb, 0x58, 0x6c, 0xf5, 0x27, 0xaf, 0x37, 0xfd, 0xe5,
-    0x0a, 0xff, 0x48, 0xcf, 0x28, 0xc6, 0xf8, 0x6f, 0xd5, 0xab, 0xf6, 0x80,
-    0xee, 0x05, 0x44, 0x42, 0xbd, 0xe3, 0x25, 0x97, 0x60, 0xd6, 0x58, 0x0b,
-    0x28, 0x07, 0x85, 0xe1, 0xb2, 0x16, 0xbe, 0xcd, 0xe7, 0xa5, 0x97, 0xc7,
-    0xac, 0xf9, 0x65, 0x62, 0x3a, 0x7e, 0x76, 0xdd, 0x2e, 0x9f, 0x23, 0xbe,
-    0x28, 0xff, 0x8b, 0x2f, 0x66, 0x0d, 0x65, 0xdd, 0x67, 0x31, 0xbd, 0x22,
-    0x2a, 0x66, 0x8a, 0xfc, 0x84, 0x05, 0xa7, 0xd6, 0x5f, 0x47, 0xa1, 0xab,
-    0x2f, 0x80, 0xee, 0x05, 0x44, 0x6c, 0xa0, 0x1e, 0x7e, 0x88, 0x6c, 0xcc,
-    0x68, 0x85, 0xc6, 0x3b, 0xfc, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x29, 0xb5,
-    0xcf, 0x25, 0x97, 0xc0, 0x77, 0x02, 0xa2, 0xa0, 0x50, 0xcf, 0x13, 0x42,
-    0xd7, 0xb3, 0xe1, 0x56, 0x59, 0x9e, 0x1e, 0x07, 0x88, 0xaf, 0xf3, 0x3c,
-    0xd0, 0x1d, 0xc0, 0xa8, 0xa9, 0x97, 0x82, 0x7a, 0x59, 0x7e, 0xd0, 0x1d,
-    0xc0, 0xa8, 0xac, 0x17, 0xe3, 0x14, 0x61, 0xd2, 0xcb, 0x6c, 0xb2, 0xe1,
-    0x24, 0xb2, 0xf3, 0x90, 0x16, 0x54, 0x1e, 0x2f, 0xe2, 0x5d, 0x18, 0xbb,
-    0x84, 0xb2, 0xe1, 0xb0, 0xb2, 0xe6, 0xf1, 0x65, 0xf9, 0xe5, 0xd3, 0xd9,
-    0x65, 0xfb, 0x9c, 0x2c, 0xfd, 0x65, 0x19, 0xe8, 0x39, 0x45, 0xfc, 0x73,
-    0xef, 0x07, 0x3e, 0xb2, 0xff, 0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x88, 0xfd,
-    0x70, 0x78, 0xb2, 0xf1, 0x40, 0xd6, 0x54, 0x22, 0x92, 0x46, 0x23, 0x41,
-    0x31, 0x7b, 0xec, 0xc2, 0x92, 0xcb, 0x42, 0xcb, 0xa3, 0x65, 0x95, 0x23,
-    0x4f, 0x82, 0x17, 0xd1, 0x30, 0x74, 0xb2, 0xfe, 0xfa, 0x4f, 0x23, 0x25,
-    0x97, 0xa0, 0xa6, 0x59, 0x7d, 0x34, 0xa3, 0xe5, 0x97, 0xd1, 0xc3, 0x99,
-    0x65, 0x62, 0x23, 0xd8, 0x2d, 0x31, 0xcd, 0x12, 0x5c, 0xfd, 0x59, 0x73,
-    0x77, 0x16, 0x5d, 0xde, 0xac, 0xb3, 0x31, 0xae, 0x0e, 0xe0, 0xe0, 0x0d,
-    0x3e, 0x6e, 0x32, 0xfd, 0xd1, 0x66, 0x8c, 0x79, 0x9d, 0xe1, 0x89, 0xf9,
-    0xd9, 0x23, 0xf0, 0x83, 0xb0, 0xb2, 0x9f, 0x3c, 0x10, 0x5b, 0x70, 0x6a,
-    0xff, 0xf3, 0x36, 0xbc, 0x99, 0xe6, 0x80, 0xee, 0x05, 0x44, 0xde, 0xbf,
-    0xf9, 0xaf, 0x26, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x3f, 0x2f, 0xd3, 0xd4,
-    0xf5, 0x3d, 0x32, 0x27, 0xa5, 0x97, 0xf3, 0xb6, 0x1b, 0x02, 0x2c, 0xb9,
-    0xe4, 0xb2, 0x99, 0x08, 0x84, 0x9e, 0x90, 0x59, 0x59, 0x6d, 0xc2, 0x35,
-    0x65, 0xfd, 0x8c, 0x1f, 0x4a, 0x16, 0x50, 0x0f, 0x12, 0x7c, 0x62, 0xfd,
-    0xa8, 0xf0, 0x61, 0x65, 0xfb, 0xd9, 0xd8, 0x1a, 0xca, 0x64, 0x9f, 0x99,
-    0x92, 0xb9, 0x3d, 0xfa, 0x7a, 0x8e, 0xc0, 0xd6, 0x5f, 0xe9, 0xe1, 0x3d,
-    0x1c, 0xff, 0x8d, 0x96, 0xb2, 0xe2, 0x02, 0xcb, 0xee, 0x4c, 0xde, 0x2c,
-    0xbf, 0x17, 0x7c, 0x6d, 0x59, 0x7d, 0x30, 0x5c, 0x45, 0x95, 0x07, 0x96,
-    0xe4, 0xf7, 0x00, 0x0b, 0x2f, 0xf0, 0x3c, 0x7d, 0xcc, 0x6a, 0xcb, 0xb7,
-    0x81, 0x71, 0x81, 0x29, 0x90, 0x9c, 0x2c, 0xf0, 0x2c, 0x84, 0x53, 0x16,
-    0x99, 0xbf, 0xf2, 0x0e, 0x0b, 0xf4, 0xca, 0xfc, 0xc8, 0x64, 0xcf, 0xe7,
-    0xcb, 0x2f, 0xe9, 0xe9, 0xf6, 0xf1, 0xee, 0xac, 0xbf, 0xe9, 0xdd, 0xf6,
-    0x37, 0x35, 0x8b, 0x2f, 0xe6, 0x55, 0x64, 0x32, 0x19, 0x3c, 0x85, 0x97,
-    0xe9, 0xe5, 0x86, 0x33, 0x75, 0x65, 0xfd, 0xd3, 0x21, 0x70, 0x96, 0x5d,
-    0xbc, 0x0b, 0x8c, 0x05, 0x6f, 0x2c, 0xbb, 0xff, 0xd6, 0x54, 0xf4, 0x9c,
-    0x9b, 0x24, 0xd2, 0x7b, 0x36, 0x65, 0x67, 0x53, 0xc1, 0x07, 0x0c, 0xba,
-    0x58, 0x12, 0x61, 0x04, 0x6f, 0xa4, 0xe3, 0x35, 0x97, 0xb4, 0xf8, 0xb2,
-    0xf9, 0xc7, 0x8d, 0x59, 0x78, 0x10, 0x4b, 0x29, 0x92, 0x7f, 0x13, 0xc9,
-    0x0c, 0xf1, 0x1b, 0xc2, 0x1b, 0xe9, 0xef, 0x66, 0xf1, 0x65, 0xfd, 0x93,
-    0x41, 0x1f, 0xcb, 0x2f, 0xff, 0xc4, 0xfd, 0x82, 0x01, 0xb4, 0x61, 0x7d,
-    0x49, 0x65, 0xf8, 0x5e, 0xf6, 0x1a, 0xb2, 0xa7, 0x93, 0xfc, 0xd9, 0x4e,
-    0xff, 0x9f, 0xc7, 0xbd, 0x98, 0xa2, 0x8a, 0x92, 0xff, 0x79, 0xfb, 0xd7,
-    0x71, 0x56, 0x5f, 0xb0, 0x0f, 0xc3, 0x59, 0x53, 0xda, 0x72, 0x6c, 0xac,
-    0xa6, 0x78, 0xc2, 0xa5, 0x95, 0x4a, 0x27, 0x82, 0x07, 0x8c, 0xef, 0xff,
-    0xf7, 0x8f, 0x91, 0x2c, 0xf1, 0xeb, 0xcf, 0x81, 0xcf, 0x2c, 0xbf, 0xfe,
-    0xd4, 0x1f, 0x7d, 0x83, 0x3e, 0x61, 0x7e, 0xb2, 0xcc, 0x97, 0x45, 0x67,
-    0x17, 0xae, 0xe4, 0x2c, 0xa6, 0x41, 0xe1, 0x48, 0xb2, 0xfe, 0xdd, 0x8d,
-    0x3b, 0xc9, 0x65, 0xfb, 0xc6, 0xff, 0xcf, 0x05, 0x97, 0xa3, 0xe9, 0x2c,
-    0xa9, 0xe9, 0x14, 0x0c, 0xa1, 0x37, 0x4b, 0xf7, 0x0b, 0xaf, 0xfd, 0x3c,
-    0xcf, 0x53, 0x14, 0x0f, 0x3e, 0xea, 0xcb, 0xec, 0x1b, 0xc9, 0x65, 0xed,
-    0x07, 0x71, 0x65, 0x4f, 0x28, 0x8b, 0x9e, 0x29, 0x41, 0x21, 0xbe, 0x2c,
-    0x3f, 0xd6, 0x5f, 0x32, 0xbf, 0xd8, 0x85, 0x97, 0x1e, 0xcb, 0x29, 0x92,
-    0x7c, 0x53, 0xd9, 0x0f, 0x4a, 0xaf, 0xf9, 0xfb, 0xf4, 0xbb, 0x9a, 0x61,
-    0x65, 0xc7, 0xfa, 0xca, 0x9e, 0x07, 0xa4, 0x47, 0x77, 0xfe, 0x88, 0x88,
-    0x88, 0x8f, 0xb8, 0xb2, 0xf4, 0xd1, 0xd5, 0x97, 0x44, 0x41, 0xec, 0x4c,
-    0x77, 0x7f, 0xfb, 0xd1, 0x37, 0xdc, 0xcf, 0xb7, 0x62, 0x09, 0x65, 0xe3,
-    0xfb, 0x16, 0x5f, 0xb4, 0x7b, 0x3b, 0x52, 0x5c, 0x28, 0xa9, 0x2b, 0x0f,
-    0x04, 0x52, 0x8b, 0x05, 0x23, 0x33, 0x45, 0x7b, 0xd8, 0x05, 0x95, 0x09,
-    0x9c, 0x78, 0xb3, 0xf4, 0xee, 0x3f, 0x88, 0x47, 0x7e, 0x0c, 0xfc, 0x07,
-    0xe5, 0x97, 0xce, 0x51, 0xb8, 0xb2, 0xb0, 0xf3, 0xdc, 0xb2, 0xff, 0x7d,
-    0x29, 0xdc, 0x30, 0xe9, 0x65, 0xff, 0xb7, 0x0f, 0x77, 0xd3, 0x46, 0xeb,
-    0xb5, 0x65, 0xff, 0xb1, 0xb1, 0xce, 0x64, 0xa7, 0xf1, 0x65, 0x79, 0x11,
-    0x04, 0x91, 0x7e, 0x6b, 0xb7, 0x06, 0xb2, 0xff, 0xba, 0x0f, 0x19, 0x14,
-    0x7c, 0xb2, 0xa0, 0xf7, 0xdc, 0x9e, 0xb1, 0x36, 0x03, 0x85, 0xff, 0xa1,
-    0x03, 0x7f, 0xb0, 0x67, 0xbf, 0x9f, 0x81, 0x65, 0xff, 0xff, 0xb3, 0x79,
-    0xf6, 0x59, 0xff, 0x0b, 0x3f, 0xd4, 0x6c, 0xfa, 0x02, 0xcb, 0xa2, 0x4e,
-    0x8a, 0x5e, 0x1b, 0x5f, 0xdd, 0xe6, 0x66, 0xd0, 0xb2, 0xbc, 0x7b, 0x44,
-    0x5b, 0x7d, 0xc1, 0xf4, 0x2b, 0x2f, 0xff, 0xfe, 0xdf, 0x1a, 0xc1, 0x93,
-    0xe9, 0x87, 0xe8, 0x7a, 0x7d, 0xe7, 0x8d, 0x65, 0xfe, 0xd0, 0x48, 0x3d,
-    0x0f, 0x56, 0x5e, 0xf4, 0x12, 0xcb, 0x41, 0x9e, 0x7f, 0x4d, 0x2e, 0x60,
-    0x55, 0x97, 0xff, 0xe9, 0x41, 0x14, 0x6c, 0x2b, 0xed, 0xe3, 0x82, 0x59,
-    0x50, 0x9c, 0xc8, 0x08, 0x4c, 0x8f, 0xd0, 0xc2, 0xe9, 0x30, 0x46, 0x6f,
-    0x8f, 0x67, 0x6a, 0xcb, 0xc4, 0x70, 0xb2, 0xfd, 0x02, 0x37, 0xc6, 0xb2,
-    0x86, 0x7c, 0x9a, 0x22, 0x21, 0xab, 0xf3, 0xed, 0x0e, 0x05, 0x97, 0xf0,
-    0x93, 0xa3, 0x90, 0xd5, 0x95, 0xe3, 0xd7, 0x72, 0x7b, 0xfa, 0x5c, 0xee,
-    0x13, 0x0b, 0x2f, 0xb8, 0xf2, 0xdd, 0x59, 0x7f, 0xe9, 0x72, 0x25, 0x1f,
-    0xf3, 0x37, 0xac, 0xbf, 0xfa, 0x01, 0x9a, 0xcf, 0x1e, 0xbc, 0xeb, 0x2f,
-    0x0a, 0xe2, 0xac, 0xbf, 0xfa, 0x35, 0x20, 0x78, 0xe6, 0x27, 0x15, 0x65,
-    0xff, 0xda, 0x7d, 0x87, 0xe8, 0xe7, 0x43, 0xe5, 0x95, 0xc4, 0x45, 0xf5,
-    0x16, 0xcd, 0xd2, 0x61, 0xde, 0x42, 0xe4, 0x2a, 0x6f, 0xa1, 0xb1, 0xe5,
-    0x97, 0xe8, 0x14, 0x78, 0xd5, 0x96, 0x39, 0x1e, 0x48, 0x84, 0x35, 0x09,
-    0xfe, 0x64, 0x69, 0xfe, 0x84, 0x2d, 0xfc, 0xff, 0xb8, 0x1f, 0x4b, 0x2f,
-    0xff, 0x82, 0x45, 0x0c, 0x37, 0xd1, 0xf7, 0x63, 0xcb, 0x2f, 0x0d, 0xfc,
-    0xb2, 0xff, 0xa3, 0xd1, 0xf4, 0xa5, 0x1b, 0x2c, 0xbe, 0x07, 0x8f, 0x4b,
-    0x2f, 0xed, 0xd2, 0xcd, 0xb0, 0x55, 0x95, 0x88, 0xa9, 0xd0, 0xe3, 0x9d,
-    0x04, 0x8a, 0xff, 0xf7, 0x8d, 0xa3, 0x89, 0xd3, 0xe1, 0xf1, 0xe9, 0x65,
-    0xfd, 0xd8, 0xf1, 0x44, 0x96, 0x5f, 0xe2, 0x76, 0x0f, 0x51, 0x29, 0xc7,
-    0xf6, 0x69, 0xf7, 0x1f, 0xcb, 0x2f, 0xf7, 0xe1, 0xcf, 0xda, 0xf2, 0x59,
-    0x76, 0x42, 0xcb, 0x3c, 0x8f, 0x87, 0xe1, 0x76, 0x9a, 0xdf, 0xff, 0xf7,
-    0x9c, 0x7e, 0x32, 0x7e, 0xc4, 0xc6, 0xc1, 0x96, 0x6f, 0x59, 0x7f, 0xc7,
-    0xdc, 0xd6, 0x83, 0xb6, 0xf5, 0x97, 0xfd, 0xcc, 0xe8, 0xf3, 0x3f, 0xe2,
-    0xca, 0xf1, 0xfa, 0xf4, 0xf2, 0xff, 0x8f, 0xb9, 0xad, 0x07, 0x6d, 0xeb,
-    0x2e, 0x09, 0x4e, 0x3d, 0xef, 0x11, 0x56, 0x26, 0xd1, 0xc8, 0xce, 0x6a,
-    0x4b, 0xd5, 0x03, 0x94, 0x43, 0x87, 0x40, 0x2d, 0xd4, 0x3e, 0x7d, 0x0b,
-    0x62, 0x85, 0x5f, 0x23, 0x9d, 0xbe, 0x69, 0x8e, 0x16, 0x5f, 0xc7, 0xed,
-    0x68, 0xf6, 0x59, 0x50, 0x79, 0xfe, 0x21, 0xb8, 0x5e, 0xac, 0xbf, 0xf8,
-    0xcf, 0xd3, 0x67, 0x63, 0xb0, 0x35, 0x96, 0x85, 0x97, 0xff, 0xd1, 0xf4,
-    0x9c, 0xbf, 0x9d, 0xf9, 0xe8, 0xd8, 0x59, 0x50, 0x8b, 0xf9, 0x86, 0x27,
-    0xd0, 0xf7, 0x04, 0x2f, 0xf4, 0x7d, 0x37, 0xa0, 0x98, 0x59, 0x71, 0x4c,
-    0xb2, 0xf7, 0x3c, 0x6b, 0x29, 0xa6, 0xcf, 0xa2, 0xf7, 0xdb, 0x34, 0xe4,
-    0xb2, 0xfa, 0x3f, 0x11, 0xab, 0x2f, 0x88, 0x2f, 0x25, 0x94, 0x03, 0xc5,
-    0xe1, 0x25, 0xfe, 0xf4, 0x35, 0x9f, 0xff, 0xc2, 0xca, 0x84, 0x60, 0xe3,
-    0x41, 0x91, 0x5f, 0x8f, 0xdd, 0xc0, 0x2c, 0xbd, 0x85, 0xfa, 0xca, 0x98,
-    0xf0, 0xf7, 0x09, 0xea, 0x13, 0xe0, 0xc6, 0x8d, 0x43, 0x89, 0xdc, 0x2f,
-    0xf0, 0xc4, 0x8d, 0xdf, 0x07, 0x8b, 0x2f, 0xdb, 0x86, 0xdc, 0xea, 0xca,
-    0xf8, 0xf8, 0x9a, 0x71, 0x7b, 0x90, 0x2a, 0xcb, 0x9f, 0xcb, 0x2e, 0x9a,
-    0x16, 0x5d, 0x1d, 0x59, 0x50, 0x6b, 0x58, 0x17, 0xbe, 0x1e, 0x14, 0x96,
-    0x5f, 0xb0, 0xe5, 0xe8, 0x59, 0x74, 0xdd, 0x33, 0xc7, 0xf1, 0x0d, 0xff,
-    0xf8, 0x7e, 0x8d, 0x1f, 0xf0, 0x24, 0x4c, 0x50, 0xd5, 0x97, 0xf9, 0x88,
-    0x2e, 0xf1, 0xfc, 0xb2, 0xa1, 0x16, 0xe6, 0x5c, 0xea, 0xd7, 0xe2, 0xc7,
-    0x2d, 0x96, 0x54, 0x27, 0xeb, 0x84, 0x66, 0x3a, 0xe8, 0x65, 0x18, 0xff,
-    0x0b, 0x6f, 0x3e, 0x69, 0x65, 0xfd, 0x1b, 0x6a, 0x30, 0x6b, 0x2f, 0xef,
-    0x47, 0x7b, 0x0d, 0x59, 0x7f, 0xff, 0x6b, 0x07, 0xc2, 0x0e, 0x48, 0x2e,
-    0x3e, 0x66, 0x96, 0x50, 0xd1, 0x0e, 0x65, 0xb5, 0xa4, 0x78, 0xf8, 0x6c,
-    0x48, 0x5a, 0x5f, 0xf6, 0xa3, 0x4f, 0x12, 0x89, 0x2c, 0xbf, 0xfe, 0x2c,
-    0xde, 0x07, 0xd6, 0xcf, 0xd7, 0xfb, 0xf5, 0x95, 0x08, 0xc0, 0x33, 0x67,
-    0x37, 0xbf, 0xc4, 0xfb, 0x7d, 0x28, 0xdc, 0x59, 0x7f, 0xb9, 0xe7, 0x13,
-    0xd1, 0x25, 0x95, 0xb1, 0xf5, 0xfc, 0x6f, 0x76, 0x4c, 0xb2, 0xff, 0xff,
-    0xd9, 0xd8, 0x39, 0x3f, 0x39, 0x18, 0x51, 0x2c, 0x6b, 0xfc, 0xb2, 0xb0,
-    0xff, 0xf8, 0x2f, 0x7f, 0xfd, 0xe8, 0x69, 0xe8, 0xf7, 0x20, 0x4d, 0xb0,
-    0x55, 0x97, 0xf6, 0x04, 0x02, 0x67, 0xcb, 0x2a, 0x64, 0x41, 0xef, 0x54,
-    0xbf, 0xf1, 0xea, 0x38, 0x21, 0x14, 0x69, 0x65, 0xff, 0x44, 0x89, 0xfb,
-    0x23, 0xde, 0xb2, 0xf0, 0x91, 0xfa, 0xca, 0xf1, 0xeb, 0xf0, 0xe6, 0xdb,
-    0xab, 0x2f, 0x76, 0x58, 0xb2, 0xee, 0x62, 0xcb, 0xf4, 0x4c, 0x71, 0xc5,
-    0x97, 0xff, 0x72, 0x34, 0x0e, 0x96, 0x6c, 0xe4, 0xb2, 0xff, 0xdd, 0xf6,
-    0x6f, 0x72, 0x1e, 0x7e, 0xb2, 0xa1, 0x3c, 0xcd, 0x89, 0xb2, 0x12, 0x86,
-    0x44, 0xe2, 0x9f, 0x8e, 0x10, 0xb7, 0x49, 0xc2, 0x87, 0x77, 0x5a, 0xb2,
-    0xfd, 0x9e, 0x37, 0x92, 0xcb, 0xee, 0x7c, 0x5a, 0x59, 0x7f, 0xfe, 0xe6,
-    0x19, 0x64, 0xd1, 0xb3, 0xec, 0xd3, 0xd9, 0x65, 0x42, 0x2d, 0xb8, 0x2f,
-    0xd2, 0x60, 0x91, 0xdf, 0xfa, 0x3a, 0xfc, 0xcf, 0x78, 0xda, 0xb2, 0xfc,
-    0x51, 0xb4, 0x6c, 0xb2, 0x86, 0x7c, 0xb3, 0x1e, 0xdf, 0xc3, 0x87, 0xd7,
-    0xe1, 0x59, 0x76, 0x79, 0x65, 0x6c, 0x78, 0x9b, 0xcb, 0xaf, 0xff, 0xb0,
-    0xda, 0x7f, 0xbf, 0x4b, 0x36, 0xd4, 0x2c, 0xbf, 0xb7, 0x73, 0x79, 0x64,
-    0x96, 0x5c, 0x73, 0x2c, 0xa3, 0x3c, 0x8e, 0x98, 0xdf, 0xe3, 0x61, 0xe5,
-    0xc3, 0x1a, 0xca, 0x84, 0xdd, 0xb1, 0x9f, 0xc4, 0xbc, 0x84, 0xb7, 0x48,
-    0x6e, 0x0c, 0x96, 0x5f, 0xde, 0x3d, 0x6b, 0x3a, 0xb2, 0xb6, 0x3c, 0x40,
-    0x0b, 0xdf, 0xe3, 0xe7, 0x9d, 0xb1, 0xba, 0xb2, 0xff, 0xf4, 0xd2, 0x3d,
-    0xf1, 0xac, 0x39, 0x07, 0x4b, 0x2b, 0x48, 0x81, 0x73, 0x5b, 0xed, 0xd3,
-    0x14, 0x0b, 0x2e, 0x39, 0x2c, 0xa8, 0x37, 0x9d, 0x26, 0xbf, 0xec, 0x6f,
-    0x0e, 0x7f, 0x35, 0x0b, 0x2a, 0x1b, 0xe8, 0xfd, 0xa1, 0x37, 0x28, 0xe0,
-    0x07, 0x2b, 0x47, 0x21, 0x7e, 0x08, 0x42, 0xfc, 0x42, 0x73, 0xda, 0xdb,
-    0xb0, 0xdd, 0x9a, 0x1c, 0x1a, 0x94, 0x46, 0xd9, 0x52, 0xfe, 0x94, 0x14,
-    0xf0, 0x98, 0xfe, 0x14, 0x65, 0x29, 0xc3, 0x91, 0x9b, 0xf6, 0x50, 0xb8,
-    0x61, 0x25, 0xbe, 0x14, 0x82, 0x2f, 0x6e, 0x10, 0x5c, 0xc7, 0x56, 0x5f,
-    0xff, 0xf4, 0xf1, 0x9e, 0xe3, 0x19, 0x57, 0x53, 0xdb, 0x29, 0xbf, 0x76,
-    0x78, 0x06, 0x74, 0xef, 0x4f, 0xac, 0xb8, 0xe1, 0x65, 0xe9, 0x84, 0x6a,
-    0xcb, 0xfe, 0xce, 0xf3, 0x3b, 0xec, 0xfd, 0x65, 0xfe, 0x36, 0x1c, 0xbb,
-    0x84, 0xb2, 0x98, 0x44, 0xf3, 0x8a, 0x90, 0xff, 0x4e, 0x6e, 0x72, 0x59,
-    0x5a, 0x3d, 0x16, 0x9e, 0x5f, 0x47, 0x71, 0xab, 0x2f, 0xdd, 0x82, 0x3f,
-    0xd6, 0x5d, 0xf7, 0xcb, 0x2f, 0xda, 0x0e, 0xff, 0xc5, 0x59, 0x71, 0x71,
-    0x65, 0xfd, 0x82, 0xbf, 0xed, 0xc5, 0x95, 0x39, 0x1a, 0x58, 0x43, 0xf1,
-    0x3f, 0x86, 0x7f, 0x2d, 0x21, 0x6b, 0xff, 0x43, 0x4f, 0xee, 0x06, 0x60,
-    0xb0, 0xb2, 0xfc, 0x5d, 0xf6, 0x49, 0x65, 0xdc, 0xc5, 0x94, 0x66, 0xf5,
-    0xc9, 0xef, 0xf1, 0x40, 0xb3, 0xf9, 0xa8, 0x59, 0x7c, 0x43, 0x8d, 0xc5,
-    0x96, 0x16, 0x72, 0x3d, 0xe4, 0xfe, 0x31, 0xf7, 0x35, 0xbe, 0xda, 0x3b,
-    0xc5, 0x97, 0xa3, 0xfe, 0x2c, 0xad, 0x1e, 0x01, 0x11, 0xdf, 0x3e, 0x9e,
-    0x4b, 0x2d, 0xac, 0x3c, 0x22, 0x21, 0xbc, 0x28, 0xa2, 0xac, 0xbe, 0xd8,
-    0x8e, 0x12, 0x33, 0x34, 0x17, 0xfd, 0xbb, 0xe7, 0x29, 0x0e, 0x36, 0x59,
-    0x7c, 0xfd, 0x81, 0xac, 0xbb, 0xe9, 0x2c, 0xbf, 0xcc, 0x47, 0x79, 0xe7,
-    0x0a, 0xcb, 0xf1, 0xed, 0x9f, 0x75, 0x65, 0xfe, 0x7f, 0x16, 0x6f, 0x70,
-    0x2c, 0xb7, 0xeb, 0x2c, 0x05, 0x95, 0x86, 0x8c, 0xc4, 0xaa, 0x11, 0xd4,
-    0xc0, 0xc3, 0x4d, 0x08, 0xa7, 0xaa, 0xd7, 0xfd, 0x2f, 0xb8, 0x7a, 0x07,
-    0xb1, 0x65, 0xf9, 0x87, 0xe6, 0xf9, 0x2c, 0xaf, 0x91, 0x5d, 0xa4, 0x9e,
-    0x9d, 0x5f, 0x9c, 0xa4, 0x6d, 0x59, 0x7b, 0x03, 0x3e, 0xb2, 0x99, 0x2b,
-    0xf1, 0xac, 0xa0, 0xc4, 0x47, 0x0c, 0x38, 0x7a, 0x64, 0x6a, 0x07, 0x0c,
-    0x7f, 0x23, 0x39, 0x99, 0x1e, 0x06, 0x3b, 0x9d, 0xe6, 0x33, 0xe4, 0xd7,
-    0xa7, 0xa6, 0x56, 0xc8, 0x59, 0x7f, 0xde, 0x79, 0x8a, 0x33, 0x52, 0x59,
-    0x7f, 0xe7, 0x21, 0x26, 0xe1, 0x97, 0xd2, 0x59, 0x7f, 0xe1, 0x73, 0x84,
-    0x71, 0xac, 0xd9, 0x65, 0x6e, 0xa2, 0xd8, 0x27, 0x1b, 0xd0, 0x2f, 0xff,
-    0xff, 0xfd, 0xbb, 0x3b, 0xd9, 0xf4, 0xbc, 0xd9, 0xc0, 0xf0, 0x7b, 0xdc,
-    0x2f, 0x67, 0x60, 0x73, 0xa7, 0x7a, 0x7d, 0x65, 0xff, 0x0f, 0x02, 0xcb,
-    0x3f, 0x3b, 0x56, 0x5f, 0xa1, 0xa5, 0x93, 0x2c, 0xc3, 0x79, 0x7b, 0x51,
-    0xbd, 0x65, 0xed, 0xf8, 0x35, 0x97, 0xf7, 0x8e, 0x08, 0x30, 0xb2, 0xff,
-    0x46, 0xeb, 0x19, 0xc7, 0xdd, 0x59, 0x4c, 0x1f, 0x27, 0x8a, 0xef, 0xd8,
-    0x31, 0x3f, 0xe2, 0xcb, 0xee, 0x39, 0x49, 0x65, 0x4e, 0x4c, 0x3b, 0xc3,
-    0xcf, 0x08, 0x22, 0x23, 0xe1, 0x55, 0xf7, 0xa0, 0x4f, 0x2c, 0xa1, 0xa7,
-    0x6f, 0xc8, 0xd1, 0x3a, 0xa1, 0x7f, 0x44, 0xbd, 0x1b, 0xcd, 0x65, 0xfe,
-    0x39, 0x47, 0xfe, 0x94, 0x2c, 0xbf, 0x34, 0x25, 0x0d, 0x59, 0x61, 0xac,
-    0xb9, 0xf8, 0xb2, 0xda, 0x69, 0xa7, 0x08, 0x8d, 0x41, 0xfa, 0xba, 0x75,
-    0xd2, 0xea, 0xcb, 0xe9, 0xa3, 0xae, 0xb2, 0xf8, 0x3f, 0xe1, 0x00, 0xdc,
-    0x84, 0x5e, 0xd2, 0x59, 0x5b, 0x1e, 0x4f, 0x8e, 0x2f, 0xfe, 0x8f, 0x08,
-    0x3e, 0x9e, 0x4d, 0x0d, 0x59, 0x7f, 0xee, 0x98, 0xa0, 0xf1, 0xef, 0x31,
-    0xac, 0xbf, 0xda, 0x97, 0xb3, 0x7c, 0x35, 0x65, 0xf0, 0x59, 0x7c, 0xc5,
-    0x95, 0xf2, 0x27, 0x0d, 0x05, 0xcd, 0x6f, 0xcf, 0x2e, 0x1e, 0xf5, 0x97,
-    0xfd, 0x9a, 0xc9, 0xd9, 0xa8, 0x1a, 0xcb, 0xcd, 0x0e, 0xf5, 0x97, 0xf6,
-    0x4b, 0xe9, 0x67, 0x56, 0x5b, 0xb2, 0x44, 0x36, 0x1c, 0xf8, 0x7e, 0xf7,
-    0x42, 0xd5, 0x97, 0xdf, 0x4b, 0xc6, 0xb2, 0xa0, 0xf0, 0x1c, 0x76, 0x95,
-    0x10, 0x72, 0xfe, 0x7d, 0xbf, 0x72, 0x1a, 0x2b, 0x06, 0xad, 0xc0, 0x1e,
-    0xa4, 0xf8, 0xc5, 0x35, 0x13, 0xfd, 0x74, 0xbf, 0xe3, 0xce, 0xf3, 0x58,
-    0x3c, 0x59, 0x7f, 0x79, 0xda, 0x51, 0xf2, 0xcb, 0xe6, 0xf1, 0xe5, 0xe3,
-    0xe4, 0x10, 0xde, 0xfe, 0xff, 0xc5, 0x9d, 0xe2, 0xcb, 0xf8, 0xb3, 0x79,
-    0x67, 0x16, 0x5a, 0x34, 0x7b, 0x7d, 0x2e, 0xa8, 0x4d, 0x0f, 0x21, 0x0f,
-    0xc8, 0x4a, 0xdb, 0x8b, 0x2f, 0xde, 0x8d, 0xd0, 0xc9, 0x65, 0x41, 0xbc,
-    0x71, 0x1a, 0x92, 0xf2, 0x2b, 0x05, 0xc0, 0x85, 0x46, 0xa1, 0x44, 0xd2,
-    0x3f, 0x43, 0x87, 0xf2, 0xf2, 0x85, 0x7f, 0x65, 0x2b, 0xef, 0x75, 0xbf,
-    0xa4, 0x59, 0xf7, 0x71, 0x65, 0xff, 0xf8, 0x4f, 0xff, 0x8f, 0xb3, 0x61,
-    0xbb, 0x81, 0xc6, 0xb2, 0xa1, 0x10, 0xda, 0x2d, 0xbf, 0x8b, 0xb2, 0xcd,
-    0x62, 0xcb, 0xa7, 0xdd, 0x65, 0x39, 0xe2, 0x88, 0x59, 0x7f, 0xb5, 0xb7,
-    0x1c, 0x1a, 0xc5, 0x97, 0xfb, 0xd8, 0x07, 0xf4, 0x79, 0x65, 0xff, 0xce,
-    0x7d, 0x82, 0x06, 0x77, 0xc6, 0xb2, 0xfe, 0x23, 0xff, 0x9e, 0x35, 0x97,
-    0x68, 0x6b, 0x2e, 0x14, 0x55, 0x95, 0x23, 0x60, 0x28, 0xbd, 0xe8, 0x3d,
-    0xe9, 0x19, 0x9a, 0x2b, 0xfe, 0x32, 0x3f, 0xf9, 0x9e, 0x75, 0x95, 0x89,
-    0xac, 0x78, 0xc9, 0xd0, 0x78, 0xff, 0xd2, 0xfb, 0xfa, 0x0b, 0xbe, 0xc9,
-    0x2c, 0xbb, 0xfe, 0x2c, 0xbf, 0x8f, 0xc6, 0xc3, 0x10, 0xb2, 0xc2, 0x0c,
-    0xf1, 0xba, 0x31, 0x5a, 0x44, 0xdf, 0x1c, 0xaa, 0x15, 0x49, 0x9c, 0x71,
-    0x82, 0x43, 0x92, 0xee, 0x75, 0x65, 0xfb, 0x24, 0x64, 0xeb, 0x28, 0x06,
-    0xf3, 0x74, 0x5e, 0xf9, 0xbe, 0x88, 0x59, 0x78, 0x51, 0x45, 0x49, 0x49,
-    0x19, 0x9a, 0x0b, 0xe3, 0x14, 0xe6, 0x49, 0x40, 0x3c, 0x03, 0x1d, 0xbe,
-    0xd4, 0x6f, 0xc5, 0x97, 0xa6, 0xcf, 0x2c, 0xac, 0x3c, 0x07, 0x23, 0xbe,
-    0xce, 0x85, 0xd6, 0x5d, 0x8c, 0xb5, 0x95, 0x3c, 0xb6, 0x0b, 0x11, 0x0e,
-    0x2d, 0x8d, 0x72, 0x54, 0xf1, 0xcf, 0x3e, 0x6a, 0x33, 0x26, 0xb3, 0xfa,
-    0x55, 0xab, 0xbc, 0x7e, 0x48, 0x50, 0x81, 0xe3, 0x0f, 0x48, 0x05, 0x21,
-    0xbe, 0xd4, 0x83, 0x8b, 0x2f, 0xf1, 0x7d, 0xd1, 0x3c, 0xff, 0xac, 0xbc,
-    0x47, 0xc5, 0x97, 0x8f, 0x36, 0x59, 0x7c, 0x37, 0x2f, 0xd6, 0x5f, 0xfd,
-    0x05, 0xf9, 0x47, 0xd3, 0x41, 0x7e, 0xb2, 0xb1, 0x1a, 0x86, 0x6d, 0xe1,
-    0xbf, 0xc7, 0x38, 0x45, 0x7d, 0x2f, 0xe4, 0x4b, 0x2f, 0xd3, 0x4f, 0xff,
-    0x3f, 0x8b, 0x2f, 0xa3, 0xaf, 0xe5, 0x97, 0xed, 0x66, 0xf7, 0xf2, 0xcb,
-    0x1a, 0xcb, 0xfe, 0x76, 0x01, 0xe3, 0x1b, 0xc9, 0x65, 0xf7, 0xc0, 0x3d,
-    0x2c, 0xbe, 0xdb, 0x67, 0xf9, 0x65, 0xb8, 0x68, 0x91, 0x21, 0x0e, 0x9c,
-    0x88, 0x47, 0x4c, 0x23, 0xf3, 0xf8, 0x5d, 0x5f, 0x66, 0xbc, 0x6b, 0x2f,
-    0xff, 0x3c, 0x8b, 0x37, 0xbc, 0xd1, 0x9d, 0xe2, 0xca, 0x83, 0xeb, 0x72,
-    0x1b, 0xf6, 0x0d, 0xcc, 0x6b, 0x2f, 0xf6, 0x6c, 0x27, 0xbd, 0x9b, 0xab,
-    0x2f, 0xfe, 0xff, 0xd9, 0x9b, 0x1e, 0x6f, 0x8f, 0x96, 0x54, 0x1f, 0xf8,
-    0xa7, 0x17, 0xff, 0xbf, 0x86, 0xeb, 0x51, 0xb7, 0x5d, 0xd8, 0x59, 0x7c,
-    0x1e, 0x7b, 0x16, 0x5e, 0x6c, 0x01, 0x65, 0xff, 0x3c, 0xb9, 0xfb, 0xef,
-    0xc1, 0xac, 0xbb, 0x3d, 0x87, 0xaf, 0xe1, 0xcb, 0xff, 0xf1, 0xeb, 0xc1,
-    0xf3, 0x9f, 0x62, 0x41, 0x1e, 0x2c, 0xbf, 0x68, 0xf6, 0x76, 0xac, 0xb8,
-    0x51, 0x56, 0x56, 0x1e, 0x08, 0xa5, 0x16, 0x0a, 0x46, 0x66, 0x8a, 0x9a,
-    0x8d, 0xaf, 0x42, 0xde, 0xf4, 0x84, 0x6a, 0xcb, 0xe7, 0xf8, 0x63, 0x59,
-    0x52, 0x4d, 0xbc, 0xe3, 0x06, 0x72, 0x8e, 0x0f, 0x5e, 0xc6, 0xee, 0xac,
-    0xbf, 0xf3, 0xef, 0xc1, 0x0a, 0x3c, 0x7b, 0x2c, 0xbf, 0xd9, 0xc2, 0xce,
-    0xf8, 0xd6, 0x50, 0xd1, 0x21, 0xa1, 0xf2, 0x40, 0xbf, 0x8f, 0xce, 0x46,
-    0xd5, 0x95, 0x8b, 0x9b, 0x93, 0x42, 0x57, 0x44, 0x1e, 0x85, 0x2f, 0xe4,
-    0x44, 0x99, 0xd8, 0xfa, 0x37, 0xc3, 0x4b, 0x70, 0xbe, 0xd0, 0xb2, 0xfb,
-    0x3c, 0x62, 0xac, 0xbe, 0x97, 0xf9, 0xfa, 0xcb, 0xfb, 0xb9, 0x31, 0x43,
-    0x57, 0x10, 0x12, 0xf8, 0x87, 0xe8, 0x54, 0x40, 0x46, 0x66, 0xea, 0xb6,
-    0x46, 0x07, 0xc4, 0x4e, 0xbd, 0x7f, 0xef, 0xa4, 0x47, 0xb7, 0x5e, 0x5c,
-    0x59, 0x7f, 0xdc, 0x1e, 0x14, 0x10, 0x61, 0x65, 0x8d, 0x83, 0xf6, 0xf9,
-    0x02, 0xfe, 0xc6, 0xff, 0xac, 0xf9, 0x65, 0xfb, 0x46, 0x16, 0x5c, 0x2c,
-    0xbf, 0xda, 0xcf, 0xb9, 0xfb, 0xf5, 0x65, 0x41, 0xf0, 0x30, 0x57, 0x60,
-    0xec, 0x8b, 0x10, 0x42, 0x3e, 0xfd, 0x12, 0x7f, 0x85, 0x59, 0x7f, 0xd3,
-    0xb5, 0xac, 0xf7, 0xd2, 0xe2, 0xcb, 0xff, 0xfd, 0x9c, 0x0b, 0xfd, 0x98,
-    0x4c, 0x73, 0x98, 0x5d, 0xe2, 0xca, 0x02, 0x27, 0x7e, 0x3d, 0xbf, 0x38,
-    0xa3, 0x63, 0x7a, 0xca, 0xc5, 0x43, 0xe7, 0x0d, 0xad, 0x17, 0xbc, 0x31,
-    0x88, 0x92, 0xfb, 0xbc, 0x0c, 0x96, 0x5f, 0x83, 0x3f, 0x9a, 0xfd, 0x65,
-    0x39, 0xe7, 0xf0, 0x8e, 0xdb, 0x2c, 0xbf, 0x4e, 0xc9, 0x8d, 0xab, 0x2f,
-    0xfd, 0x1f, 0x77, 0x24, 0x65, 0xf9, 0xac, 0xbf, 0xfc, 0x18, 0x9d, 0xb9,
-    0xd3, 0xe7, 0xbe, 0x71, 0x56, 0x56, 0xc8, 0xb9, 0x32, 0xae, 0x1f, 0x5f,
-    0xfb, 0x07, 0xe7, 0x67, 0x1e, 0x8f, 0x96, 0x53, 0x25, 0x33, 0xbd, 0x43,
-    0x2d, 0xa6, 0x17, 0xfc, 0x4c, 0x68, 0x8c, 0x01, 0x25, 0x97, 0xee, 0xc6,
-    0x14, 0x2c, 0xa3, 0x3d, 0xd2, 0x38, 0xbc, 0x21, 0x75, 0x65, 0xe3, 0x6b,
-    0xac, 0xad, 0x8d, 0xc3, 0x03, 0xb7, 0xe0, 0x61, 0xf1, 0xab, 0x2f, 0xfe,
-    0xe4, 0x17, 0x44, 0x9b, 0xc7, 0xde, 0x2c, 0xbe, 0xcd, 0x46, 0xf5, 0x96,
-    0xfb, 0xe3, 0xe9, 0xea, 0x35, 0x35, 0x17, 0x4f, 0x09, 0x0a, 0x84, 0xfc,
-    0xf2, 0x12, 0xe6, 0xb0, 0x18, 0x6e, 0xde, 0xdc, 0x8f, 0x96, 0x5f, 0xe2,
-    0xcf, 0xf8, 0x23, 0xf5, 0x65, 0xe8, 0xc6, 0xac, 0xbf, 0xdd, 0xcd, 0x68,
-    0xe6, 0xe2, 0xcb, 0xcd, 0xda, 0x16, 0x53, 0x07, 0xa2, 0x03, 0x4b, 0xec,
-    0xe4, 0x80, 0xb2, 0xf7, 0xed, 0xea, 0xca, 0x92, 0x64, 0x66, 0x40, 0xd3,
-    0x47, 0x6c, 0xfc, 0x8c, 0x88, 0xaf, 0xfd, 0x8d, 0x80, 0x1f, 0x74, 0x16,
-    0xac, 0xbf, 0x6c, 0x19, 0x9c, 0x6b, 0x2f, 0x1f, 0xdc, 0x59, 0x7f, 0xf7,
-    0x23, 0x6c, 0xd4, 0xc5, 0x1f, 0xf1, 0x65, 0xfe, 0x3f, 0x66, 0xb5, 0x9f,
-    0x2c, 0xbf, 0x4c, 0x51, 0xa9, 0x2c, 0xb4, 0x48, 0xf6, 0xf0, 0xce, 0xa4,
-    0x9a, 0x63, 0x9f, 0x7e, 0x55, 0xd1, 0xd1, 0x61, 0x43, 0x7d, 0xa7, 0x94,
-    0xcb, 0x2f, 0xdc, 0xe4, 0x7f, 0x3d, 0x2c, 0xa6, 0x0f, 0x44, 0x52, 0x3b,
-    0xef, 0x67, 0xee, 0xb2, 0xa1, 0x1d, 0x0f, 0x0a, 0x2e, 0x12, 0x5f, 0xed,
-    0x4d, 0xc3, 0x2e, 0x9a, 0xcb, 0xff, 0x48, 0xda, 0x2e, 0x10, 0xfd, 0x0b,
-    0x2f, 0xf3, 0x19, 0xaf, 0xda, 0x7c, 0x59, 0x5f, 0x1f, 0x99, 0x1f, 0x5f,
-    0xef, 0x1f, 0xdf, 0xe9, 0xc6, 0xb2, 0xfb, 0xef, 0xf5, 0x09, 0x2e, 0x14,
-    0x54, 0x95, 0x06, 0xf4, 0x52, 0x4b, 0x88, 0xd2, 0x33, 0x34, 0x37, 0xff,
-    0xff, 0x13, 0x3c, 0xcd, 0xc8, 0x98, 0xdb, 0x13, 0x4e, 0x2f, 0xa5, 0xe0,
-    0xfe, 0xb2, 0xe3, 0x02, 0xca, 0x59, 0x76, 0xa5, 0x39, 0x35, 0x69, 0x42,
-    0x4f, 0xe2, 0x7d, 0x3d, 0xfe, 0x2d, 0x50, 0x9e, 0xc3, 0xc6, 0xf1, 0x7e,
-    0x29, 0x00, 0x3b, 0x2c, 0xbd, 0x1a, 0x99, 0x65, 0x39, 0xe3, 0x04, 0xa6,
-    0xfe, 0x11, 0xa4, 0xfd, 0xe2, 0xca, 0x9e, 0x5b, 0x70, 0xc8, 0x87, 0xb6,
-    0xc9, 0x32, 0x23, 0x19, 0x86, 0x4e, 0xfc, 0xfd, 0x09, 0xb3, 0x86, 0x86,
-    0xa5, 0x63, 0x36, 0x14, 0x3e, 0x96, 0x9e, 0xf1, 0xb4, 0x14, 0xa8, 0xae,
-    0x99, 0x86, 0x53, 0xf0, 0xad, 0xc2, 0x10, 0xde, 0xe9, 0x8a, 0xb2, 0xfe,
-    0xda, 0x7c, 0x3e, 0x3d, 0x2c, 0xbf, 0xc5, 0x2e, 0x0f, 0xc6, 0x2a, 0xcb,
-    0xdb, 0x3b, 0x56, 0x5d, 0xf1, 0x2c, 0xbf, 0x7d, 0x2f, 0x09, 0xc5, 0x96,
-    0x7c, 0x3c, 0x22, 0x17, 0xb8, 0xc6, 0xb2, 0xf7, 0x4c, 0x55, 0xc6, 0x10,
-    0xbc, 0x17, 0x11, 0x51, 0x03, 0xbe, 0x35, 0x55, 0x24, 0x50, 0x78, 0x97,
-    0xa8, 0x15, 0x09, 0xca, 0x99, 0x93, 0x9a, 0x06, 0x1f, 0xf7, 0x8b, 0x4c,
-    0xb5, 0x97, 0xf6, 0x17, 0xf9, 0x83, 0x59, 0x7f, 0xff, 0xe9, 0x03, 0xc7,
-    0xad, 0x9b, 0x00, 0xf4, 0x18, 0xe3, 0xd1, 0x25, 0x97, 0xbd, 0x0c, 0x2c,
-    0xaf, 0x91, 0x13, 0xbd, 0xb2, 0xff, 0x60, 0x23, 0x62, 0x80, 0x2c, 0xbf,
-    0x00, 0xa3, 0xe9, 0x2c, 0xb7, 0xeb, 0x2d, 0xbb, 0x38, 0xfb, 0x30, 0xc8,
-    0xca, 0x2e, 0x80, 0xac, 0xbf, 0x04, 0xbf, 0x12, 0x4b, 0x2f, 0xff, 0x8b,
-    0x39, 0x38, 0x4f, 0x47, 0xed, 0x79, 0x4e, 0xc3, 0xc0, 0xe0, 0xb5, 0x3a,
-    0x6e, 0xa1, 0x84, 0x96, 0xf7, 0x8b, 0xff, 0xb4, 0x7f, 0x09, 0xdc, 0x39,
-    0x3f, 0x16, 0x5f, 0xf0, 0x76, 0x89, 0xd1, 0xd8, 0x1a, 0xca, 0xd2, 0x20,
-    0x3c, 0x8b, 0x79, 0xf5, 0xb2, 0xcb, 0x85, 0x15, 0x65, 0xfe, 0xd1, 0xe6,
-    0xf1, 0x24, 0xcc, 0x06, 0xd8, 0x51, 0xdb, 0xff, 0x1b, 0x13, 0xb8, 0x1f,
-    0xdb, 0x12, 0x59, 0x7f, 0xb9, 0x9d, 0x76, 0xe1, 0x2c, 0xa1, 0xa6, 0x39,
-    0xa5, 0x9f, 0x27, 0xf5, 0x0e, 0xff, 0xdc, 0xc2, 0xcf, 0x60, 0x30, 0x96,
-    0x5f, 0xfe, 0x3e, 0x61, 0x4e, 0x13, 0x53, 0x66, 0x0a, 0xb2, 0xff, 0x73,
-    0xbe, 0xc6, 0xe4, 0x96, 0x5d, 0x1c, 0x59, 0x52, 0x3c, 0x9f, 0xcc, 0xef,
-    0xfd, 0x8c, 0x79, 0xe4, 0x23, 0xfd, 0x0b, 0x2a, 0x49, 0x9a, 0x0c, 0xec,
-    0xe1, 0x2c, 0x44, 0x75, 0x09, 0xd9, 0xe4, 0x6e, 0x57, 0xfb, 0x78, 0xb8,
-    0x43, 0xf4, 0x2c, 0xbe, 0x03, 0xb8, 0x15, 0x10, 0xc2, 0xff, 0x1c, 0x6a,
-    0x41, 0x8c, 0x59, 0x7e, 0x6b, 0x5e, 0x59, 0xa3, 0xdf, 0x22, 0xeb, 0xff,
-    0xfe, 0x2c, 0x07, 0xa3, 0xe9, 0x4f, 0xe7, 0x80, 0x78, 0x4e, 0xc2, 0xcb,
-    0x81, 0xfa, 0xcb, 0x9f, 0x98, 0x88, 0x06, 0xb4, 0x56, 0x23, 0xa8, 0x30,
-    0xbd, 0xbf, 0xb5, 0x93, 0x41, 0x0d, 0x65, 0x42, 0xfe, 0x54, 0x88, 0x0e,
-    0x51, 0x57, 0xa5, 0xc3, 0x39, 0x41, 0x46, 0xfc, 0x12, 0x7b, 0xf1, 0x47,
-    0xff, 0x7e, 0xb2, 0xfd, 0x92, 0x8d, 0x7e, 0xb2, 0xe8, 0x11, 0x65, 0xf9,
-    0xf6, 0x28, 0x92, 0x4a, 0x98, 0xdf, 0x78, 0x5e, 0xff, 0xdd, 0xf3, 0x9f,
-    0x63, 0x51, 0xfa, 0xcb, 0xf7, 0x9c, 0x84, 0xd9, 0x65, 0x49, 0x31, 0x96,
-    0x0a, 0x9a, 0xcc, 0x44, 0x42, 0x9f, 0x5f, 0xf8, 0xc1, 0x1c, 0x7d, 0x68,
-    0xc5, 0x59, 0x7f, 0xdb, 0x49, 0xb1, 0xe7, 0x36, 0x16, 0x5f, 0xfb, 0xa6,
-    0x5b, 0x67, 0xdd, 0xf3, 0xac, 0xbf, 0xf8, 0xf4, 0xc0, 0x3c, 0x7e, 0x20,
-    0xec, 0xb2, 0xb1, 0x10, 0xbf, 0x9f, 0xdf, 0xff, 0xc3, 0xd1, 0x38, 0xb3,
-    0x8f, 0x50, 0x59, 0xec, 0x02, 0xca, 0x24, 0xcf, 0x79, 0x0b, 0xf1, 0x48,
-    0xef, 0x83, 0x9c, 0x35, 0x97, 0x70, 0x2b, 0x2f, 0xe9, 0x79, 0xdc, 0xa1,
-    0x65, 0xa0, 0x07, 0x85, 0xf0, 0xbd, 0xff, 0xd9, 0xd8, 0xf1, 0xe3, 0x0c,
-    0x44, 0x96, 0x5f, 0xb4, 0x07, 0x70, 0x2a, 0x20, 0xa5, 0xef, 0x43, 0x56,
-    0x5f, 0xfa, 0x36, 0x7e, 0xeb, 0x25, 0x3f, 0x8b, 0x2f, 0x6c, 0x7a, 0x59,
-    0x43, 0x47, 0x96, 0x22, 0x19, 0xa1, 0x0e, 0x71, 0x06, 0xfd, 0xe8, 0x68,
-    0x7e, 0x59, 0x7b, 0x91, 0xf2, 0xcb, 0xee, 0xf2, 0x3f, 0x49, 0x79, 0xf5,
-    0xb2, 0x4b, 0xe0, 0x93, 0xb0, 0x92, 0xff, 0x1e, 0xd9, 0xde, 0x47, 0xe9,
-    0x29, 0x25, 0xfd, 0x80, 0x8f, 0x43, 0x52, 0x5c, 0x28, 0xa9, 0x2f, 0xe2,
-    0x82, 0xd8, 0xf4, 0x92, 0xb1, 0x31, 0x20, 0x11, 0xb4, 0x77, 0xc4, 0x5f,
-    0x9a, 0x10, 0x58, 0xa5, 0x82, 0x0c, 0xdb, 0x49, 0x19, 0x9f, 0x9d, 0x7c,
-    0x9e, 0x31, 0xc7, 0x45, 0x52, 0x54, 0xc1, 0x32, 0x3f, 0xa3, 0xef, 0xbf,
-    0xfe, 0x17, 0x85, 0x9f, 0x75, 0xcb, 0x6c, 0xfb, 0xab, 0x2f, 0xed, 0xf3,
-    0x9e, 0x52, 0xc5, 0x95, 0x08, 0x83, 0xc5, 0x2b, 0xff, 0xee, 0x9f, 0x81,
-    0x0d, 0x13, 0x6c, 0x1c, 0x35, 0x65, 0x42, 0xf8, 0x46, 0x26, 0x1c, 0x6f,
-    0x7a, 0x36, 0xf3, 0x1b, 0xcb, 0x7a, 0x28, 0x5e, 0x04, 0x86, 0xf3, 0x5c,
-    0x6b, 0x2f, 0xff, 0xf8, 0xb3, 0xbd, 0x8f, 0xa5, 0x3b, 0xd0, 0xd0, 0xfd,
-    0xcf, 0x42, 0xcb, 0xfb, 0x0b, 0x86, 0x58, 0xb2, 0xfe, 0x6e, 0x0f, 0xd9,
-    0xb2, 0xcb, 0xff, 0xc4, 0xec, 0x73, 0xfe, 0xf7, 0xee, 0xe0, 0x16, 0x54,
-    0x1f, 0xdb, 0x05, 0xd7, 0xbc, 0x16, 0xac, 0xa6, 0x13, 0x6a, 0xdd, 0x1c,
-    0xf3, 0x51, 0x42, 0x97, 0x70, 0x8a, 0xfe, 0x2c, 0xe6, 0xa3, 0x8b, 0x2f,
-    0x06, 0x58, 0xb2, 0x9c, 0xf2, 0x3f, 0x2c, 0xbf, 0x61, 0x3f, 0x78, 0xb2,
-    0xfd, 0x9e, 0x27, 0x99, 0x65, 0x0c, 0xf3, 0x48, 0x9a, 0xa4, 0x89, 0x0e,
-    0x37, 0xdf, 0x3c, 0xd9, 0xe5, 0x97, 0xfd, 0x06, 0x4f, 0xd9, 0x8c, 0x55,
-    0x96, 0xd4, 0xe3, 0xda, 0xe1, 0x15, 0x42, 0x29, 0xcd, 0xf6, 0xfd, 0xaf,
-    0xa5, 0x9d, 0x59, 0x7f, 0xfc, 0xe7, 0xff, 0x31, 0x87, 0x6e, 0xa3, 0x09,
-    0x65, 0xf4, 0x00, 0x4f, 0xd6, 0x5f, 0x7a, 0x3e, 0xe2, 0xcb, 0xe3, 0xcf,
-    0xba, 0xb2, 0xb0, 0xf1, 0x7a, 0x47, 0x7f, 0xff, 0xde, 0x3d, 0x60, 0xdd,
-    0xb8, 0x5d, 0x28, 0x17, 0x3b, 0xc5, 0x96, 0x85, 0x97, 0xd1, 0xbc, 0x70,
-    0x03, 0xf4, 0xfd, 0x92, 0xff, 0xcf, 0x2f, 0x3f, 0x79, 0x85, 0x25, 0x95,
-    0xe3, 0xf8, 0xe9, 0xdd, 0x69, 0x50, 0x7f, 0x8a, 0x49, 0x3b, 0x8d, 0x3d,
-    0x8c, 0x36, 0xff, 0xf6, 0x6b, 0xfe, 0xeb, 0x36, 0xec, 0x67, 0x16, 0x5e,
-    0x06, 0x35, 0x65, 0xfc, 0x37, 0xef, 0x03, 0x25, 0x97, 0x4a, 0x7e, 0x0f,
-    0x28, 0x41, 0xcb, 0xf9, 0xf5, 0x1d, 0x3d, 0xeb, 0x2b, 0xe3, 0xdf, 0x23,
-    0x1b, 0xff, 0xff, 0x6b, 0x51, 0xf4, 0xbe, 0xe1, 0xe8, 0x1e, 0xc1, 0x34,
-    0x70, 0x35, 0x97, 0xe2, 0x60, 0x4c, 0xf9, 0x65, 0xff, 0x3e, 0xb3, 0xe9,
-    0x47, 0xf0, 0xb2, 0xa1, 0x1e, 0x98, 0x44, 0x6d, 0xe1, 0x2a, 0xbf, 0xef,
-    0xa5, 0xdc, 0xe7, 0x73, 0x75, 0x65, 0xff, 0xf8, 0x0c, 0x3f, 0x33, 0x52,
-    0x3f, 0x39, 0x7d, 0x25, 0x97, 0xfe, 0x04, 0x77, 0x99, 0xd3, 0xf8, 0x55,
-    0x95, 0x88, 0x96, 0x61, 0x5a, 0xa1, 0x1e, 0xcf, 0x0d, 0x3a, 0x85, 0x71,
-    0xe3, 0x51, 0xf4, 0x7d, 0x05, 0x19, 0x85, 0xfb, 0x84, 0x1d, 0xf2, 0x59,
-    0x7e, 0xc2, 0xf6, 0x12, 0xcb, 0xdb, 0x08, 0x05, 0x97, 0xc4, 0x73, 0x6e,
-    0xac, 0xa8, 0x44, 0x9f, 0x8a, 0x9c, 0x97, 0x83, 0xf7, 0x3f, 0xeb, 0x2a,
-    0x47, 0xa5, 0xd3, 0xbb, 0xfe, 0x96, 0x75, 0xb1, 0x84, 0x35, 0x97, 0xff,
-    0xe7, 0x79, 0x3f, 0xa7, 0x66, 0xc1, 0xe8, 0x5c, 0x45, 0x45, 0xf6, 0xbd,
-    0xbc, 0x3d, 0x59, 0x74, 0x0d, 0x65, 0x41, 0xb5, 0xfc, 0x7e, 0xfe, 0x70,
-    0x41, 0x47, 0xeb, 0x2f, 0xfd, 0xc3, 0x2f, 0xa5, 0xa0, 0xc7, 0x16, 0x5f,
-    0xb3, 0x58, 0x38, 0x59, 0x5f, 0x27, 0x07, 0x31, 0xbe, 0xa1, 0x35, 0xe2,
-    0x1e, 0x96, 0x6f, 0x3f, 0xbf, 0x7b, 0x26, 0x8d, 0xd5, 0x97, 0xe1, 0xeb,
-    0x58, 0x2a, 0xca, 0xd8, 0xf5, 0x08, 0xae, 0xfe, 0x32, 0xce, 0xc4, 0xcb,
-    0x2f, 0xfe, 0x97, 0x21, 0xb8, 0x02, 0x7c, 0x02, 0xcb, 0xe8, 0x26, 0x06,
-    0xb2, 0xf3, 0xff, 0x0b, 0x2a, 0x11, 0x9d, 0x22, 0x2f, 0x8b, 0x3c, 0x85,
-    0xc2, 0x2b, 0xa5, 0xc5, 0x97, 0xe9, 0x18, 0x1f, 0x4b, 0x2f, 0xff, 0x39,
-    0x67, 0x60, 0xf4, 0x6c, 0x31, 0x0b, 0x2b, 0x87, 0xde, 0x21, 0x3d, 0x80,
-    0xb2, 0xff, 0xff, 0x7e, 0x7a, 0x63, 0xd0, 0xd9, 0xa4, 0x65, 0xe8, 0xd4,
-    0x2c, 0xb7, 0x70, 0xfc, 0xf8, 0x23, 0x78, 0xf5, 0x8b, 0x2f, 0x16, 0x49,
-    0x65, 0x00, 0xdb, 0x74, 0x6e, 0xf1, 0x43, 0x56, 0x54, 0x22, 0x64, 0xd7,
-    0x78, 0x43, 0x7f, 0xe2, 0x39, 0x77, 0xd9, 0xa3, 0xe2, 0xcb, 0xf4, 0x8b,
-    0x33, 0x65, 0x97, 0x6b, 0x65, 0x97, 0xfd, 0x33, 0x27, 0xa6, 0x31, 0xe1,
-    0x2c, 0xa8, 0x3f, 0xcc, 0x27, 0x31, 0x8b, 0xfc, 0xe3, 0x8f, 0xe0, 0x5e,
-    0x2c, 0xaf, 0x1f, 0x03, 0x96, 0x5f, 0xd3, 0xec, 0xab, 0x3a, 0x77, 0xa7,
-    0xd7, 0x10, 0x0a, 0xff, 0x77, 0xf1, 0x0a, 0x5e, 0xc5, 0xc4, 0x02, 0xbc,
-    0xfa, 0x92, 0xe2, 0x01, 0x56, 0x1f, 0x58, 0x50, 0xae, 0x79, 0x2e, 0x20,
-    0x15, 0xf3, 0x97, 0xd2, 0x5c, 0x40, 0x2b, 0xfc, 0x60, 0xf6, 0x7f, 0xfc,
-    0x2e, 0x20, 0x15, 0xe3, 0x21, 0xae, 0x20, 0x15, 0x0d, 0x17, 0x6d, 0x23,
-    0xf1, 0x7e, 0xf4, 0x1b, 0x30, 0xb8, 0x80, 0x57, 0xb5, 0x1d, 0x5c, 0x40,
-    0x2a, 0x5c, 0x40, 0x2b, 0xd3, 0xe7, 0xfa, 0xe2, 0x01, 0x5d, 0x0d, 0x5c,
-    0x40, 0x2a, 0x19, 0xf4, 0x60, 0xc1, 0x96, 0xdf, 0x1b, 0x47, 0x0b, 0x88,
-    0x05, 0x7b, 0xae, 0x05, 0xc4, 0x02, 0xbf, 0xf1, 0x3c, 0x99, 0xf8, 0xc0,
-    0xfa, 0x5c, 0x40, 0x2b, 0xff, 0x9f, 0xa1, 0xd8, 0xcb, 0xbe, 0x79, 0x2e,
-    0x20, 0x15, 0xce, 0x35, 0xc4, 0x02, 0xbf, 0xc4, 0xe2, 0xf3, 0x91, 0xfa,
-    0xe2, 0x01, 0x5f, 0x8d, 0x87, 0x2f, 0xd7, 0x10, 0x0a, 0xe3, 0xe2, 0xe2,
-    0x01, 0x56, 0x8f, 0x63, 0xa6, 0xb7, 0xff, 0xbc, 0x7d, 0xee, 0x72, 0x76,
-    0x8e, 0x1a, 0xb8, 0x80, 0x57, 0xee, 0x94, 0x7d, 0x25, 0x44, 0x02, 0xbb,
-    0xf8, 0x5c, 0x40, 0x26, 0x66, 0xd6, 0xfc, 0x70, 0xd7, 0x1a, 0xe2, 0x01,
-    0x5f, 0x05, 0xc8, 0x0b, 0x88, 0x05, 0x7a, 0x34, 0x05, 0xc4, 0x02, 0xbf,
-    0xf6, 0x7d, 0xc1, 0xc6, 0x17, 0xfc, 0x5c, 0x40, 0x2b, 0xf0, 0x5e, 0x52,
-    0x85, 0xc4, 0x02, 0xbf, 0x38, 0x3d, 0x1f, 0x2e, 0x20, 0x15, 0x62, 0x2d,
-    0x7c, 0x98, 0x13, 0x4b, 0xb5, 0xfa, 0xe2, 0x01, 0x54, 0x95, 0x9a, 0x0c,
-    0x8f, 0x21, 0x32, 0x02, 0x23, 0x84, 0x6f, 0x8d, 0xbf, 0x33, 0xe1, 0x77,
-    0x61, 0xbc, 0x12, 0xfb, 0xf6, 0x77, 0x8f, 0xf2, 0xe2, 0x01, 0x5f, 0xe1,
-    0xc0, 0x26, 0xd4, 0x75, 0x71, 0x00, 0x86, 0x6d, 0x6f, 0x6a, 0x05, 0x5c,
-    0x40, 0x2a, 0x01, 0xfd, 0xe9, 0x46, 0xff, 0x05, 0xe5, 0x28, 0x11, 0xab,
-    0x88, 0x05, 0x7c, 0x65, 0x2e, 0x2e, 0x20, 0x15, 0xfc, 0xf3, 0x4b, 0x3e,
-    0x92, 0xe2, 0x01, 0x56, 0x23, 0x37, 0xc4, 0x5f, 0xa0, 0x84, 0xba, 0xff,
-    0xbd, 0x1c, 0x67, 0xc0, 0xeb, 0xf5, 0xc4, 0x02, 0xb1, 0xae, 0x20, 0x15,
-    0xcf, 0xb0, 0xcf, 0x9f, 0xc9, 0x57, 0x6b, 0xf5, 0xc4, 0x02, 0xbf, 0x3f,
-    0x78, 0x7f, 0x2e, 0x20, 0x15, 0xfc, 0x64, 0x19, 0x67, 0x17, 0x10, 0x0a,
-    0xa1, 0x12, 0x64, 0x4b, 0xd3, 0x5a, 0x86, 0x54, 0x18, 0xe1, 0x71, 0x90,
-    0xdc, 0x33, 0xf9, 0x87, 0xf5, 0x09, 0x1f, 0x16, 0xb9, 0x77, 0xe5, 0x24,
-    0x99, 0xc9, 0x70, 0xbd, 0x94, 0x31, 0x3f, 0x0a, 0x41, 0x21, 0x83, 0x7b,
-    0xa6, 0x2a, 0xe3, 0x09, 0x5e, 0x77, 0x02, 0xa2, 0x01, 0x33, 0x4c, 0x57,
-    0xe8, 0x75, 0xde, 0x65, 0x63, 0x6a, 0xcb, 0xfb, 0xa5, 0x9f, 0xcf, 0xe2,
-    0xca, 0x60, 0xf4, 0xda, 0x47, 0x7f, 0xa4, 0x7d, 0x61, 0x8c, 0xdd, 0x59,
-    0x7d, 0x1d, 0x81, 0xac, 0xb6, 0xcb, 0x2a, 0x46, 0xcf, 0x79, 0x0d, 0xfd,
-    0xb4, 0x6b, 0xcf, 0xba, 0xb2, 0xdc, 0x59, 0x7c, 0x50, 0x3f, 0x2c, 0xaf,
-    0x1b, 0x2d, 0xe2, 0x35, 0x08, 0xa9, 0xc2, 0x33, 0x63, 0xbf, 0xf1, 0x60,
-    0x3c, 0x7f, 0xfe, 0x19, 0x96, 0x5f, 0xf0, 0xf1, 0x82, 0xce, 0xc0, 0xab,
-    0x2a, 0x47, 0xf5, 0xfa, 0x0d, 0xfb, 0xb8, 0x37, 0xf2, 0xcb, 0xbf, 0x84,
-    0x96, 0x61, 0x25, 0xef, 0x46, 0xcb, 0x2e, 0x14, 0x54, 0x94, 0x67, 0xbf,
-    0xba, 0x2f, 0x30, 0x90, 0xa3, 0xb6, 0xe2, 0x46, 0x67, 0x81, 0x58, 0x8e,
-    0xa3, 0x86, 0x35, 0xff, 0xd9, 0xfc, 0x8f, 0xb0, 0xd8, 0x21, 0xac, 0xa6,
-    0x9f, 0x4b, 0x93, 0x5f, 0xdd, 0xe6, 0x0b, 0xe3, 0x59, 0x6e, 0xac, 0xae,
-    0x9b, 0xf0, 0x97, 0x5f, 0xa3, 0x6e, 0x36, 0x4b, 0x28, 0xcf, 0x2b, 0xa4,
-    0x37, 0xff, 0xef, 0xa5, 0xc2, 0xfa, 0x18, 0xe4, 0x7d, 0x23, 0x6a, 0xcb,
-    0xff, 0xdd, 0xe6, 0x30, 0x7a, 0x13, 0xff, 0xe3, 0xe5, 0x95, 0x3d, 0xb6,
-    0x83, 0xf1, 0x08, 0x6d, 0xa3, 0x2f, 0x91, 0x70, 0xe3, 0x19, 0x05, 0x2e,
-    0xe4, 0xe1, 0x47, 0x31, 0x1e, 0xa3, 0x14, 0x78, 0x53, 0xff, 0x1b, 0xb7,
-    0x61, 0x54, 0x12, 0x11, 0x16, 0x6f, 0xfb, 0x24, 0x63, 0x70, 0x72, 0x4b,
-    0x2f, 0xf9, 0xa6, 0x40, 0x3d, 0x1f, 0xeb, 0x28, 0x07, 0xe1, 0xe3, 0x8b,
-    0xfb, 0xa3, 0xf0, 0x5c, 0x96, 0x5e, 0x07, 0x89, 0x65, 0xff, 0xdd, 0x9f,
-    0xc9, 0xa4, 0xfa, 0xd8, 0x70, 0xb2, 0xbe, 0x44, 0x93, 0x4b, 0x48, 0x72,
-    0xfe, 0x8f, 0xa0, 0x9f, 0xab, 0x2e, 0x2f, 0xd6, 0x5d, 0x1c, 0x59, 0x46,
-    0x6b, 0x77, 0x8b, 0xdd, 0xd1, 0x3c, 0x7f, 0x7b, 0xd6, 0x6f, 0xf6, 0x7d,
-    0xde, 0xbc, 0xb8, 0xb2, 0xf4, 0x99, 0x72, 0x59, 0x77, 0xd2, 0x5c, 0x60,
-    0x0b, 0xff, 0xd8, 0x2c, 0x77, 0x26, 0x91, 0xf7, 0x8e, 0xb2, 0xfa, 0x6d,
-    0x47, 0x56, 0x57, 0xc8, 0xb3, 0x22, 0x1e, 0x12, 0xf5, 0x2a, 0xff, 0xfd,
-    0x19, 0xee, 0x13, 0xf4, 0x3d, 0x1f, 0x8d, 0x85, 0x97, 0xff, 0xff, 0xff,
-    0xfb, 0x81, 0xdd, 0x27, 0xcf, 0x38, 0x85, 0x9b, 0xf0, 0x9d, 0x89, 0xa4,
-    0x1e, 0x70, 0x57, 0x1f, 0x8c, 0x5e, 0x63, 0x8d, 0x65, 0x42, 0xbc, 0xbc,
-    0x85, 0xa1, 0xc2, 0xaf, 0x46, 0x2f, 0x0e, 0x72, 0x3d, 0xea, 0xad, 0xff,
-    0xf8, 0x88, 0x3f, 0x67, 0xdd, 0x1e, 0x9f, 0xec, 0xd9, 0x65, 0xfb, 0x3b,
-    0xa8, 0xe2, 0xca, 0x33, 0xff, 0x25, 0x8b, 0xf4, 0xd2, 0x8d, 0x6c, 0xb2,
-    0xfa, 0x18, 0x86, 0xac, 0xa9, 0x1f, 0x66, 0x88, 0x1a, 0x55, 0x7f, 0xe9,
-    0x72, 0x71, 0x63, 0x63, 0x4c, 0x2c, 0xbf, 0x4e, 0x9d, 0x9e, 0x75, 0x97,
-    0xfe, 0xe7, 0x9c, 0xfb, 0x2f, 0x05, 0x85, 0x97, 0xf4, 0xa3, 0x5f, 0x88,
-    0xd5, 0x97, 0xff, 0x1b, 0x0c, 0x19, 0x02, 0x76, 0xde, 0x61, 0x65, 0xff,
-    0xdb, 0xcb, 0x39, 0xdc, 0x29, 0x67, 0x16, 0x5f, 0x36, 0x03, 0xd5, 0x95,
-    0x87, 0xcc, 0xe8, 0x97, 0xdd, 0xeb, 0xe9, 0x65, 0xfb, 0x26, 0xf4, 0x6c,
-    0xb2, 0x9c, 0xf2, 0xc8, 0x8a, 0xf7, 0x5c, 0x96, 0x59, 0xe7, 0x27, 0x8d,
-    0x88, 0x1e, 0x30, 0x28, 0x58, 0x71, 0xaf, 0x70, 0x82, 0xa7, 0x2a, 0x56,
-    0xf4, 0x7e, 0x37, 0xfd, 0x1b, 0xa3, 0xf4, 0x6c, 0xe4, 0xb2, 0xff, 0xa0,
-    0x10, 0xd3, 0x6f, 0xe6, 0xb2, 0xb4, 0x8a, 0x0f, 0x16, 0xee, 0x1d, 0xdf,
-    0xc2, 0x0b, 0xa3, 0xcf, 0x24, 0xbf, 0xcf, 0xd8, 0x90, 0x47, 0x8b, 0x2f,
-    0xbd, 0x19, 0xb2, 0xca, 0x23, 0xd4, 0xe1, 0x95, 0xf4, 0xd9, 0x82, 0xac,
-    0xbe, 0x91, 0xeb, 0x8b, 0x2f, 0xfe, 0xfc, 0x8f, 0x3e, 0xec, 0xd2, 0x7d,
-    0x2c, 0xbe, 0x9b, 0xcf, 0x32, 0xcb, 0xe0, 0x3e, 0xb6, 0x59, 0x7e, 0xc9,
-    0xa5, 0x1f, 0x2c, 0xb8, 0xe6, 0x59, 0x78, 0xe0, 0x96, 0x5f, 0xb3, 0x43,
-    0xf6, 0x2c, 0xa1, 0x9e, 0x0f, 0x06, 0xab, 0xc7, 0xf5, 0xc5, 0x8b, 0xc5,
-    0x12, 0x49, 0x7f, 0xe2, 0xfc, 0xf7, 0x37, 0x03, 0x28, 0xdd, 0x59, 0x66,
-    0xac, 0xac, 0x3f, 0x47, 0x1b, 0x11, 0x22, 0xa7, 0x2a, 0x5a, 0x19, 0x0e,
-    0x11, 0xfc, 0x45, 0xa4, 0x6f, 0x12, 0x11, 0x1f, 0x61, 0x47, 0xb9, 0x09,
-    0x6a, 0x85, 0xf0, 0x4c, 0x2f, 0x39, 0x66, 0xfe, 0x33, 0x79, 0x5b, 0xb7,
-    0xee, 0x6b, 0x51, 0xd5, 0x97, 0xfb, 0x3c, 0xf9, 0xf8, 0x9d, 0x59, 0x5f,
-    0x1e, 0xe6, 0xe9, 0x45, 0xfb, 0x8c, 0x69, 0xc0, 0xb2, 0xee, 0x49, 0x65,
-    0x48, 0xf0, 0x37, 0x94, 0xde, 0x2e, 0xf1, 0x65, 0xe2, 0x39, 0x2c, 0xbf,
-    0x6b, 0xce, 0xed, 0x59, 0x7c, 0x12, 0x08, 0x16, 0x53, 0x9e, 0x4f, 0x09,
-    0xef, 0xee, 0xcd, 0x2c, 0xfa, 0x4b, 0x2a, 0x11, 0xea, 0x64, 0x8e, 0x38,
-    0x16, 0x41, 0x08, 0x6f, 0xfe, 0xf0, 0xb1, 0xae, 0x60, 0xaf, 0xa6, 0x16,
-    0x5f, 0xe1, 0x73, 0xee, 0xf6, 0x1a, 0xb2, 0xfc, 0x59, 0xf8, 0x78, 0xb2,
-    0xff, 0x80, 0x78, 0x59, 0xbd, 0xf8, 0xb2, 0xb6, 0x3e, 0x0f, 0x14, 0x53,
-    0xa2, 0xe3, 0x90, 0x95, 0xbe, 0x18, 0xf1, 0xab, 0x2e, 0xfe, 0x12, 0x5c,
-    0x28, 0xa9, 0x28, 0xcd, 0x80, 0xa2, 0xf7, 0xe1, 0x85, 0xf5, 0x24, 0x8c,
-    0xcd, 0x0d, 0x62, 0x2b, 0x58, 0x73, 0xbf, 0xfd, 0xdf, 0x80, 0x7e, 0x9f,
-    0x8e, 0xf8, 0x4e, 0x2c, 0xbf, 0xd1, 0x23, 0xec, 0xa3, 0xab, 0x2e, 0x65,
-    0xf1, 0x66, 0x8d, 0x95, 0xff, 0x79, 0xfb, 0xc0, 0x16, 0x6c, 0xb2, 0xe0,
-    0x1a, 0xcb, 0xe2, 0x3f, 0xa4, 0xb2, 0xff, 0x8f, 0xef, 0x60, 0xf4, 0xe0,
-    0x59, 0x50, 0x7b, 0x7a, 0x22, 0xbf, 0xdc, 0xc3, 0xeb, 0x07, 0xe5, 0x97,
-    0xfd, 0xe8, 0xd4, 0x00, 0xc8, 0x0b, 0x2f, 0x30, 0xfc, 0x02, 0x3f, 0x34,
-    0xe3, 0xd2, 0x1d, 0xc3, 0x3a, 0xc4, 0xe1, 0xfb, 0x19, 0xad, 0x49, 0x71,
-    0x4f, 0xe8, 0x7f, 0xea, 0x1a, 0x8d, 0x23, 0x0c, 0x20, 0x85, 0x8e, 0xca,
-    0xfe, 0x15, 0x87, 0xe9, 0x42, 0xcb, 0xcd, 0x0e, 0x96, 0x5e, 0x01, 0xf1,
-    0x65, 0xf0, 0x5b, 0x83, 0x59, 0x5f, 0x22, 0x24, 0xcb, 0xbc, 0x3b, 0xb8,
-    0x39, 0x7f, 0xff, 0x6a, 0x41, 0x8c, 0xf0, 0x0f, 0x98, 0x3d, 0xb0, 0x55,
-    0x97, 0xfe, 0xf6, 0x6e, 0x39, 0x31, 0x9f, 0x75, 0x65, 0xfd, 0xe3, 0x1f,
-    0x82, 0xc2, 0xcb, 0xf1, 0x44, 0xc7, 0xf2, 0xcb, 0x60, 0x0f, 0x5c, 0xcb,
-    0xef, 0x77, 0x00, 0xb2, 0x9a, 0x78, 0x5c, 0x26, 0xbd, 0x26, 0xfe, 0xb2,
-    0xa1, 0x37, 0x76, 0x17, 0x3f, 0x86, 0xdf, 0x48, 0xaf, 0xb0, 0x8d, 0x85,
-    0x97, 0xfc, 0xc3, 0xce, 0x86, 0x91, 0xb0, 0xb2, 0xff, 0xcf, 0xc6, 0xc1,
-    0xeb, 0x46, 0x2a, 0xcb, 0x71, 0x83, 0xf9, 0xf1, 0xdd, 0xf3, 0xc9, 0xf4,
-    0xb2, 0xf3, 0x11, 0xc5, 0x97, 0xfd, 0x9d, 0xe9, 0xb1, 0xdc, 0x02, 0xcb,
-    0xfa, 0x3e, 0xe6, 0x7d, 0xd5, 0x97, 0x6a, 0x16, 0x50, 0xcf, 0x17, 0xa5,
-    0xf7, 0xff, 0xdd, 0xd4, 0x67, 0xd3, 0xe4, 0xd0, 0xf7, 0xf7, 0x59, 0x7f,
-    0xba, 0x60, 0x31, 0xc7, 0x56, 0x5f, 0xb9, 0x00, 0xc6, 0xac, 0xa8, 0x3d,
-    0x9e, 0x19, 0x5b, 0x92, 0x4e, 0x2c, 0x63, 0xb8, 0xfd, 0xf1, 0x16, 0xa1,
-    0x5b, 0x52, 0x55, 0x8b, 0xf4, 0x26, 0x9a, 0x53, 0xd8, 0xeb, 0x2f, 0xfb,
-    0xa7, 0xb4, 0x7d, 0xfe, 0xa1, 0x65, 0xee, 0x77, 0x16, 0x5d, 0x9c, 0x9c,
-    0x7a, 0xe2, 0x1d, 0xdf, 0xef, 0x00, 0xf8, 0x19, 0x1a, 0xcb, 0xff, 0xb3,
-    0xa7, 0xf4, 0x8a, 0x27, 0xb9, 0xe3, 0x3e, 0xb2, 0xff, 0xf0, 0x65, 0xe7,
-    0x3e, 0x99, 0x74, 0x3e, 0x59, 0x7f, 0x98, 0xef, 0xc0, 0x3d, 0x71, 0x65,
-    0xfb, 0x3b, 0xfb, 0xf5, 0x65, 0x42, 0x65, 0x92, 0x33, 0xd2, 0x90, 0x52,
-    0x67, 0xcd, 0xaf, 0xff, 0xd1, 0xe7, 0xc2, 0x8d, 0x30, 0x30, 0xbe, 0xa4,
-    0xb2, 0xa4, 0x9f, 0xef, 0x63, 0x5c, 0xdc, 0x4d, 0xa8, 0x64, 0x49, 0xe4,
-    0x3e, 0x8e, 0x3b, 0x77, 0x96, 0x12, 0x19, 0x53, 0xf7, 0xde, 0x37, 0x92,
-    0xcb, 0xfd, 0x85, 0x2c, 0xe0, 0x8d, 0x59, 0x7e, 0x6f, 0x3f, 0x77, 0x59,
-    0x5d, 0x3d, 0xb1, 0x0c, 0xef, 0xf6, 0x14, 0xef, 0x67, 0xc2, 0xac, 0xbf,
-    0xa3, 0xc7, 0xbf, 0x26, 0x59, 0x5a, 0x3e, 0x5f, 0xcd, 0xaf, 0xfa, 0x44,
-    0x1f, 0xe7, 0x01, 0xbf, 0xac, 0xad, 0x93, 0x65, 0x93, 0xe6, 0x42, 0x23,
-    0xe2, 0x3b, 0xfe, 0xcf, 0xa5, 0xed, 0xcd, 0xc8, 0xdd, 0x59, 0x7f, 0xf3,
-    0xfb, 0x87, 0x23, 0xec, 0x77, 0x8b, 0x2f, 0xa3, 0x59, 0xbd, 0x65, 0xfb,
-    0xc7, 0x3e, 0xfb, 0x2c, 0xae, 0x1e, 0x77, 0x48, 0xef, 0xf7, 0xfc, 0xc2,
-    0xce, 0x05, 0x65, 0x61, 0xea, 0xb9, 0x15, 0xff, 0x14, 0x67, 0xdd, 0xcd,
-    0x42, 0xcb, 0xff, 0x47, 0x84, 0xe1, 0x67, 0x7d, 0x8b, 0x2f, 0xdb, 0xfd,
-    0x9f, 0xba, 0xcb, 0xef, 0x47, 0xf8, 0xb2, 0xb0, 0xf3, 0x02, 0x55, 0x50,
-    0xa9, 0xbf, 0x11, 0x0d, 0x0f, 0xd0, 0xe6, 0x72, 0x0f, 0xcd, 0xca, 0x11,
-    0x57, 0xe7, 0xde, 0x31, 0xc2, 0xcb, 0xff, 0xfb, 0x52, 0x9c, 0x3f, 0x44,
-    0xe2, 0xcf, 0xbb, 0x18, 0x2a, 0xcb, 0xb9, 0xc5, 0x97, 0x85, 0x14, 0x55,
-    0x97, 0x7e, 0xe9, 0x19, 0x9a, 0x0a, 0x34, 0x60, 0x69, 0x83, 0x86, 0xf7,
-    0xfe, 0xce, 0x13, 0xb1, 0x31, 0x1c, 0xcb, 0x2f, 0xef, 0xe2, 0x5e, 0x13,
-    0x8b, 0x2f, 0xf8, 0xff, 0x13, 0x37, 0x90, 0x78, 0xb2, 0xfe, 0x32, 0xfc,
-    0x00, 0x35, 0x97, 0x9f, 0xfc, 0x49, 0x52, 0x54, 0x18, 0xd8, 0x74, 0xf8,
-    0xbf, 0xf3, 0xf2, 0x30, 0xde, 0x79, 0x3e, 0x5b, 0x7d, 0x03, 0x31, 0xac,
-    0xbf, 0xb9, 0xe3, 0x03, 0xe9, 0x65, 0xf8, 0x7a, 0x30, 0xec, 0xb2, 0xfd,
-    0x9d, 0xe3, 0xfc, 0xb2, 0xff, 0x0b, 0x85, 0x9b, 0xcf, 0x4b, 0x2f, 0xe2,
-    0xcf, 0xbf, 0x12, 0x4b, 0x2f, 0xff, 0xb9, 0xdc, 0xf0, 0x8d, 0xc0, 0x47,
-    0xa1, 0xab, 0x2d, 0xc5, 0x95, 0x89, 0xa1, 0xcc, 0x5b, 0xa2, 0x92, 0x28,
-    0xe9, 0xa0, 0x4c, 0x05, 0x50, 0xbf, 0x66, 0x77, 0xd8, 0xb2, 0xe7, 0x6a,
-    0xcb, 0xfe, 0x0f, 0x3b, 0x13, 0x07, 0xee, 0x2c, 0xbe, 0x3d, 0x6a, 0x16,
-    0x5f, 0xec, 0xdf, 0x8c, 0xc5, 0x14, 0x54, 0x97, 0xe9, 0xa3, 0x3d, 0xc5,
-    0x95, 0x39, 0x17, 0xfe, 0x3c, 0x22, 0x11, 0x0e, 0xaf, 0xf3, 0x2e, 0x02,
-    0x0f, 0x1e, 0x96, 0x5e, 0x6b, 0xf5, 0x65, 0x4c, 0x9b, 0x3f, 0xa1, 0xaa,
-    0x13, 0xfd, 0xe6, 0xf4, 0xb2, 0xfb, 0xe0, 0x1e, 0x96, 0x5b, 0xf6, 0x41,
-    0xae, 0xe8, 0x5d, 0xfb, 0x7b, 0xb4, 0xda, 0xb2, 0xa0, 0xf5, 0x48, 0xb2,
-    0xfd, 0x93, 0x4a, 0x24, 0xb2, 0xfe, 0xd8, 0x71, 0x84, 0x35, 0x95, 0x0b,
-    0xa0, 0x92, 0x70, 0x38, 0xd9, 0x3c, 0xca, 0xf1, 0xc6, 0xf2, 0x19, 0x3d,
-    0x20, 0x10, 0xa2, 0xf3, 0xfe, 0x6b, 0x2f, 0xf8, 0x64, 0x1e, 0x66, 0xd9,
-    0xb2, 0xcb, 0xd1, 0xa2, 0x59, 0x7f, 0xb0, 0x64, 0xfc, 0x31, 0xac, 0xb7,
-    0x96, 0x5e, 0x0b, 0xec, 0x47, 0x85, 0xc3, 0x1a, 0xd2, 0x24, 0x3a, 0xbb,
-    0x7c, 0xde, 0x63, 0x56, 0x51, 0x9e, 0x2b, 0x91, 0xdf, 0xd1, 0xae, 0xf7,
-    0x37, 0x56, 0x5d, 0x1b, 0xd6, 0x53, 0x53, 0x93, 0x71, 0xc6, 0x5c, 0x61,
-    0xe4, 0x41, 0xb8, 0x61, 0x7f, 0x08, 0x32, 0x8c, 0xd9, 0x65, 0x89, 0x65,
-    0xf4, 0x6d, 0x12, 0x59, 0x43, 0x3e, 0x07, 0x2e, 0x21, 0x0b, 0xfb, 0xc7,
-    0xd2, 0x86, 0xac, 0xbf, 0xfd, 0x83, 0x76, 0xe7, 0xd2, 0xcf, 0xf0, 0x6b,
-    0x2e, 0xf3, 0xac, 0xba, 0x6e, 0x2c, 0xbf, 0x66, 0xf3, 0x21, 0xe1, 0xae,
-    0x10, 0x5a, 0xfe, 0x9d, 0xdc, 0xe7, 0x21, 0x65, 0xf6, 0x7d, 0xd8, 0x59,
-    0x7f, 0xf3, 0xeb, 0x18, 0x3d, 0x66, 0xf7, 0xd2, 0xca, 0xf1, 0xf3, 0xef,
-    0x22, 0xbf, 0x6e, 0x3e, 0xc2, 0x49, 0x65, 0x4e, 0x4e, 0x75, 0x9b, 0xc4,
-    0x1f, 0x64, 0x25, 0x82, 0x49, 0x7c, 0x3c, 0xf3, 0xac, 0xbf, 0xe2, 0x97,
-    0xb0, 0x8a, 0x05, 0x59, 0x7f, 0xf9, 0xf6, 0x8d, 0x69, 0xe5, 0x3b, 0xf1,
-    0xe2, 0xca, 0xc4, 0x42, 0x11, 0xbd, 0xff, 0xb3, 0x5a, 0x79, 0x4e, 0xdf,
-    0x1b, 0xab, 0x2a, 0x0f, 0x9a, 0x44, 0x35, 0xa4, 0xdf, 0x89, 0x4b, 0xb1,
-    0x85, 0xdf, 0xed, 0x73, 0xd8, 0x47, 0xc5, 0x95, 0x0a, 0xf7, 0x30, 0xb4,
-    0xe5, 0xa3, 0xb9, 0xb5, 0xff, 0x60, 0xf0, 0xa0, 0x83, 0x0b, 0x2c, 0x2a,
-    0xcb, 0xff, 0xdf, 0xe7, 0xdd, 0x8f, 0xa5, 0xdf, 0xe2, 0x4b, 0x2f, 0xf7,
-    0x48, 0xfe, 0xe0, 0x8d, 0x59, 0x44, 0x88, 0x3e, 0x27, 0x54, 0x22, 0xdc,
-    0xe1, 0x2b, 0x50, 0xfc, 0xa2, 0xdb, 0x47, 0x65, 0x2a, 0x40, 0x50, 0xe9,
-    0x13, 0x19, 0x1f, 0x5b, 0x11, 0xea, 0x82, 0x76, 0xff, 0xe8, 0xcb, 0x8e,
-    0x3a, 0x59, 0xa3, 0x83, 0xd5, 0x68, 0xd2, 0xd9, 0xd3, 0xaf, 0x52, 0x17,
-    0xde, 0x16, 0x7f, 0xc6, 0xb6, 0x54, 0xd2, 0xee, 0x4e, 0x1b, 0xf6, 0x7d,
-    0xf0, 0x32, 0x85, 0xb7, 0xce, 0x49, 0x08, 0x85, 0xb9, 0x0e, 0xcb, 0xfe,
-    0xcd, 0x14, 0x76, 0x59, 0xe5, 0x97, 0xf4, 0x8b, 0x00, 0x7d, 0x59, 0x7f,
-    0xf1, 0x01, 0x87, 0xe6, 0x4a, 0x08, 0x0b, 0x2f, 0xdf, 0xe0, 0xde, 0x4b,
-    0x2b, 0xe4, 0x4b, 0x99, 0x61, 0x21, 0xdf, 0xf7, 0x79, 0xe3, 0x86, 0xb8,
-    0xd6, 0x5f, 0x0f, 0x4f, 0x25, 0x97, 0x84, 0x8f, 0xd6, 0x5f, 0xfb, 0xc6,
-    0x51, 0xf7, 0x0d, 0xb0, 0xb2, 0xf7, 0x23, 0x4b, 0x2e, 0xef, 0x00, 0x7b,
-    0x3f, 0x1e, 0xd4, 0x26, 0x00, 0xc1, 0xc3, 0x91, 0x05, 0xde, 0xff, 0x00,
-    0xb2, 0x52, 0x7e, 0x2c, 0xbf, 0x9c, 0x5c, 0xfc, 0x4e, 0xac, 0xb8, 0x66,
-    0xb2, 0xfb, 0xee, 0x47, 0xcb, 0x2e, 0x79, 0x4e, 0x37, 0x46, 0x2d, 0x79,
-    0x8f, 0x1a, 0xcb, 0xff, 0xa6, 0xd4, 0x6f, 0xf4, 0x1e, 0x8e, 0x65, 0x95,
-    0x23, 0xe4, 0xf8, 0x76, 0xff, 0x38, 0xfd, 0x9d, 0xe3, 0xac, 0xbf, 0xb9,
-    0x83, 0x3e, 0x6c, 0xb2, 0xf4, 0xa3, 0xf5, 0x97, 0xe1, 0x26, 0x94, 0x6e,
-    0xa4, 0xa8, 0x5c, 0x34, 0xc8, 0x67, 0x31, 0x19, 0x79, 0x9e, 0xe8, 0xcb,
-    0xcd, 0x4f, 0x09, 0x12, 0x23, 0xe1, 0x97, 0x4b, 0x84, 0x1d, 0xb0, 0x16,
-    0x5f, 0xfc, 0xc1, 0x05, 0xc4, 0xce, 0x1c, 0x12, 0xcb, 0xd3, 0xe6, 0x35,
-    0x95, 0xa3, 0xe2, 0x6a, 0x1d, 0xe8, 0x7d, 0x2c, 0xbf, 0x9b, 0xdf, 0x46,
-    0xf8, 0x59, 0x7d, 0x84, 0x0f, 0xd6, 0x5f, 0xfb, 0xa1, 0x6f, 0xa0, 0xc9,
-    0xc6, 0xb2, 0xfa, 0x52, 0x7e, 0xac, 0xaf, 0x8f, 0x7d, 0xcf, 0x6f, 0x98,
-    0xd3, 0x8a, 0xb2, 0xe0, 0x6f, 0x59, 0x61, 0x15, 0x10, 0x2a, 0xdd, 0x55,
-    0x02, 0x8a, 0xd1, 0xeb, 0x74, 0x64, 0x51, 0xfa, 0xc4, 0x55, 0x1b, 0xd5,
-    0xfc, 0x03, 0xdb, 0xae, 0x35, 0x97, 0xf1, 0xb2, 0xc1, 0xe8, 0x15, 0x65,
-    0xfe, 0xf1, 0x88, 0xcf, 0xff, 0xe1, 0x25, 0x68, 0xfa, 0xa7, 0xcc, 0xaf,
-    0xd8, 0xd7, 0x7d, 0x96, 0x5f, 0xa0, 0x1e, 0x8d, 0x2c, 0xbd, 0xe0, 0xb0,
-    0xb2, 0xf6, 0xe3, 0x2f, 0x8b, 0x2b, 0xc7, 0x84, 0x43, 0xd5, 0xb2, 0x6d,
-    0xc7, 0x09, 0x82, 0x25, 0xe9, 0x38, 0x8d, 0x37, 0xfc, 0x5f, 0x8f, 0xce,
-    0x26, 0x6c, 0xb2, 0xfd, 0x81, 0x65, 0xe7, 0x16, 0x51, 0x9f, 0x37, 0x8e,
-    0xef, 0xf8, 0xbb, 0xc0, 0xfd, 0xd3, 0x15, 0x65, 0xff, 0xfb, 0x05, 0x86,
-    0x85, 0xc7, 0xdf, 0x80, 0x64, 0x2a, 0xcb, 0xff, 0x7d, 0xd0, 0x78, 0xc7,
-    0xec, 0xd9, 0x65, 0xfe, 0xfc, 0xfe, 0xe7, 0x8c, 0x55, 0x95, 0x87, 0xef,
-    0xa4, 0x1b, 0xf9, 0xf9, 0x98, 0x4c, 0x2c, 0xac, 0x3c, 0xd0, 0x90, 0xde,
-    0x77, 0x15, 0x65, 0x42, 0x72, 0x63, 0x3b, 0xf4, 0x63, 0x64, 0x43, 0x7f,
-    0xbb, 0xc9, 0xd8, 0xd3, 0x1a, 0xcb, 0xfe, 0x7d, 0x4c, 0x51, 0xff, 0x02,
-    0xb2, 0xa0, 0xfb, 0xc6, 0x6b, 0x7f, 0xa1, 0xe5, 0xc1, 0x23, 0x75, 0x65,
-    0xff, 0xa7, 0x13, 0xb1, 0x3b, 0x9f, 0xff, 0x0b, 0x2f, 0xff, 0x6c, 0x1f,
-    0xf9, 0x23, 0xe7, 0x23, 0x52, 0x59, 0x63, 0x61, 0x12, 0x5a, 0x45, 0xbf,
-    0xcf, 0xef, 0xb9, 0x05, 0xd5, 0x95, 0x24, 0xc9, 0x39, 0x0c, 0x8e, 0x94,
-    0xdf, 0xff, 0xe1, 0xfa, 0x01, 0xe3, 0x99, 0xde, 0x4c, 0x38, 0x8f, 0xba,
-    0xb2, 0xf8, 0xb3, 0x7e, 0x2c, 0xad, 0x91, 0x0e, 0x2b, 0x2d, 0xfe, 0xf1,
-    0xcd, 0x28, 0x29, 0x2c, 0xbf, 0xff, 0xa3, 0xbc, 0x10, 0xbb, 0xe0, 0xbc,
-    0xbb, 0xcc, 0x15, 0x65, 0xff, 0x9c, 0x5e, 0xe7, 0xba, 0x71, 0xba, 0xb2,
-    0xff, 0xd0, 0x2f, 0x19, 0x2e, 0x0c, 0xfb, 0xab, 0x2a, 0x13, 0x3a, 0x01,
-    0x2e, 0x8c, 0xc9, 0x77, 0xa8, 0x37, 0xd2, 0xf6, 0x6c, 0xb2, 0xf8, 0xf6,
-    0x04, 0x96, 0x5f, 0xf4, 0x7c, 0xd7, 0xee, 0x7d, 0xd5, 0x97, 0x3e, 0xcb,
-    0x2b, 0xe4, 0x4b, 0xe8, 0x8c, 0x88, 0xc5, 0x3a, 0xbf, 0xcd, 0x7e, 0x14,
-    0x63, 0x0b, 0x2f, 0xf8, 0x21, 0xf1, 0xf7, 0xcf, 0x25, 0x97, 0xe0, 0xfb,
-    0x50, 0x2a, 0xcb, 0xa7, 0xdd, 0x65, 0xd0, 0x0c, 0x45, 0x6b, 0x4c, 0xba,
-    0x72, 0x21, 0x4d, 0xda, 0x75, 0x97, 0xff, 0x6f, 0x3e, 0x73, 0x08, 0x0e,
-    0x5f, 0xac, 0xbf, 0xde, 0x31, 0x8f, 0x05, 0x99, 0x65, 0xf3, 0x07, 0xf7,
-    0x16, 0x5b, 0xfc, 0x44, 0xf0, 0x11, 0x7a, 0x6b, 0x7c, 0x27, 0x9f, 0xab,
-    0x2d, 0x1a, 0x3d, 0x96, 0x9b, 0x56, 0x93, 0x34, 0xf4, 0x61, 0xb7, 0xfe,
-    0x7f, 0xb9, 0x9d, 0x36, 0xbc, 0x96, 0x5b, 0xab, 0x2b, 0xf3, 0xcf, 0x10,
-    0xfa, 0xff, 0xec, 0xf1, 0x83, 0xd9, 0xdc, 0x62, 0x4b, 0x2f, 0xff, 0xfc,
-    0xfa, 0x60, 0x7e, 0x8e, 0x7b, 0x3e, 0x97, 0x4e, 0x68, 0xe0, 0x56, 0x56,
-    0x22, 0xcd, 0xd1, 0x2f, 0x8a, 0x70, 0x26, 0x59, 0x7f, 0xff, 0xa6, 0x28,
-    0x6e, 0xa0, 0x19, 0xac, 0xf1, 0xeb, 0xce, 0xb2, 0xff, 0xf9, 0xf5, 0xfc,
-    0xfe, 0x6a, 0x24, 0x7f, 0x77, 0x16, 0x5f, 0xff, 0xfc, 0x1e, 0x79, 0xe5,
-    0xc9, 0x1f, 0x44, 0xd4, 0x7a, 0x3b, 0xc7, 0xf9, 0x65, 0xfa, 0x30, 0xbb,
-    0x3e, 0xb2, 0xfe, 0x3f, 0xbf, 0xd3, 0x8d, 0x65, 0x9a, 0xb2, 0x9a, 0x7d,
-    0x3e, 0x29, 0x22, 0xfb, 0xf7, 0xa3, 0x5c, 0x35, 0x97, 0x6b, 0x75, 0x65,
-    0xe9, 0x04, 0x6b, 0x2e, 0x7f, 0xa7, 0x22, 0x30, 0x65, 0xd3, 0x13, 0xb8,
-    0xd5, 0x42, 0xa8, 0xbc, 0x25, 0x35, 0xfd, 0x29, 0xf2, 0x36, 0x9b, 0xf8,
-    0xf5, 0x3d, 0xf3, 0xa6, 0xb2, 0xff, 0xfe, 0xc2, 0xdb, 0x9c, 0x8f, 0xf3,
-    0xc7, 0xa7, 0x17, 0xab, 0x2f, 0xe1, 0xe1, 0x31, 0xa8, 0x59, 0x52, 0x66,
-    0xf7, 0x0e, 0x3b, 0x40, 0x42, 0xc7, 0xe8, 0xd1, 0x66, 0x8f, 0xdf, 0x50,
-    0xe0, 0x6c, 0x3a, 0xfd, 0x1b, 0xe7, 0xef, 0x25, 0x0d, 0x7e, 0xca, 0xac,
-    0xde, 0x9e, 0x29, 0x94, 0xfa, 0xe5, 0xcc, 0xbd, 0xc5, 0x97, 0x8d, 0xb8,
-    0xb2, 0xbe, 0x37, 0x3a, 0x1e, 0xbf, 0xff, 0xc5, 0x83, 0xf4, 0x0a, 0x58,
-    0x7b, 0x4f, 0x87, 0xc7, 0xa5, 0x95, 0x0d, 0x83, 0x01, 0xd3, 0xa9, 0x1e,
-    0x33, 0x70, 0x91, 0x5f, 0x40, 0x0c, 0x0b, 0x2f, 0x87, 0xa3, 0x15, 0x65,
-    0xef, 0x67, 0xeb, 0x2d, 0x0b, 0x2f, 0xff, 0xa6, 0x77, 0x97, 0x21, 0xa3,
-    0xf4, 0x10, 0x16, 0x54, 0x1e, 0xf9, 0x88, 0x5f, 0xf6, 0x4d, 0x28, 0xfb,
-    0x3e, 0xea, 0xcb, 0x6d, 0x08, 0xd7, 0xc7, 0xc2, 0x20, 0xa9, 0x26, 0x9e,
-    0x32, 0x1d, 0x43, 0xea, 0xf8, 0x7e, 0x0e, 0xcb, 0x2f, 0xe7, 0x96, 0x6c,
-    0x12, 0x59, 0x76, 0x0d, 0x65, 0x0c, 0xf0, 0xc0, 0x5b, 0x7f, 0xed, 0x66,
-    0xec, 0xde, 0x76, 0x9f, 0x16, 0x5b, 0x68, 0x46, 0x5e, 0x33, 0xe8, 0x8a,
-    0xc6, 0xb2, 0xe6, 0x5e, 0x2c, 0xac, 0x3d, 0xfd, 0x1a, 0xb8, 0x85, 0xff,
-    0xb7, 0x9f, 0x65, 0x13, 0xbb, 0x01, 0x59, 0x69, 0x96, 0x5f, 0xa7, 0xc3,
-    0xec, 0x02, 0xca, 0xc3, 0xff, 0x99, 0x0b, 0xa2, 0x57, 0xf4, 0x74, 0xff,
-    0x89, 0x2c, 0xba, 0x4e, 0xb2, 0xb4, 0x78, 0x6e, 0x5b, 0x7f, 0x7d, 0xb3,
-    0xca, 0x37, 0x56, 0x5c, 0x52, 0x59, 0x50, 0x79, 0x1b, 0x19, 0x53, 0x25,
-    0xb8, 0xc1, 0x87, 0x39, 0x11, 0x30, 0x36, 0x02, 0xf3, 0x84, 0x0b, 0x61,
-    0x99, 0xea, 0xc7, 0xbd, 0xe3, 0x9d, 0x28, 0xd8, 0x39, 0x0a, 0xce, 0xb9,
-    0x05, 0xa6, 0xff, 0xcc, 0x91, 0x21, 0xa0, 0xf3, 0xfd, 0xfa, 0xcb, 0xfd,
-    0x29, 0xb0, 0x9f, 0xd8, 0xb2, 0xfb, 0xe9, 0x43, 0x56, 0x5f, 0xf4, 0x16,
-    0xdc, 0xc6, 0xc6, 0xea, 0xcb, 0xa3, 0xcb, 0x2f, 0xe7, 0x98, 0x70, 0x5b,
-    0x2c, 0xad, 0x91, 0x44, 0x32, 0x32, 0x3b, 0xde, 0x2d, 0x7d, 0x13, 0x1f,
-    0x96, 0x5e, 0xdc, 0x86, 0xac, 0xa7, 0x3c, 0x1d, 0xc2, 0x2b, 0xf1, 0x0f,
-    0xd1, 0x25, 0x97, 0xef, 0x44, 0xb3, 0x8b, 0x2f, 0xb7, 0x20, 0x80, 0xb2,
-    0xfe, 0xf6, 0x30, 0xf1, 0xb2, 0xcb, 0xe8, 0x9b, 0x50, 0xb2, 0xe6, 0xe2,
-    0xca, 0x69, 0xb8, 0xf1, 0x15, 0xf4, 0x05, 0x96, 0x6b, 0x2f, 0xb8, 0x50,
-    0x2a, 0xcb, 0xf0, 0xfd, 0x85, 0x25, 0x95, 0x87, 0x92, 0xe4, 0x57, 0xa4,
-    0x7f, 0xac, 0xbf, 0x3f, 0x3a, 0x73, 0x2c, 0xbf, 0xc7, 0xa8, 0xd9, 0xf4,
-    0x05, 0x97, 0x02, 0x65, 0x96, 0xec, 0xe5, 0x47, 0x70, 0x48, 0x32, 0x7c,
-    0x27, 0x01, 0x21, 0xb3, 0x68, 0x87, 0xcd, 0xce, 0x41, 0xc1, 0xde, 0x94,
-    0x4f, 0x99, 0xdf, 0xfe, 0xd0, 0x0b, 0x37, 0x96, 0x46, 0xa3, 0x8b, 0x2f,
-    0xfc, 0xd3, 0xcf, 0xb0, 0xc7, 0x1b, 0x8b, 0x2f, 0xf3, 0xcd, 0xec, 0x6e,
-    0x71, 0x65, 0x62, 0x2f, 0x34, 0x93, 0xbd, 0x02, 0xf4, 0xfc, 0x75, 0x65,
-    0xf4, 0x6f, 0x3d, 0xeb, 0x2e, 0xc6, 0xac, 0xb3, 0x13, 0x8d, 0xd9, 0x92,
-    0xd6, 0xc8, 0x83, 0x25, 0xab, 0xf3, 0x1d, 0xcc, 0x6a, 0xcb, 0xff, 0x4a,
-    0x46, 0x08, 0x6c, 0xdc, 0x85, 0x95, 0x88, 0x8a, 0x32, 0x37, 0x28, 0xbf,
-    0xfd, 0x31, 0x63, 0x0c, 0x3f, 0x78, 0x65, 0x32, 0xcb, 0xef, 0x66, 0xc4,
-    0xb2, 0xfd, 0x83, 0x3d, 0x71, 0x65, 0xf8, 0x49, 0x1f, 0xfc, 0x59, 0x7e,
-    0xd0, 0x23, 0x36, 0x59, 0x7b, 0xbd, 0xf9, 0x65, 0xff, 0xdf, 0x00, 0xfd,
-    0x3b, 0x73, 0x3c, 0x6d, 0x59, 0x5f, 0x9f, 0x47, 0x47, 0xae, 0x0e, 0x96,
-    0x56, 0x23, 0x2b, 0x90, 0x90, 0x9f, 0x23, 0xb4, 0x6c, 0x9a, 0x93, 0x49,
-    0xc5, 0x87, 0xa5, 0x42, 0xfc, 0x6e, 0x4a, 0xbb, 0x38, 0xda, 0xbd, 0x19,
-    0xf3, 0x96, 0xf1, 0x33, 0xb1, 0xba, 0x5f, 0xf8, 0x8c, 0x4f, 0xb3, 0x7f,
-    0xd0, 0x22, 0xcb, 0x49, 0x65, 0xff, 0xe3, 0xcd, 0x0e, 0x05, 0xcf, 0x47,
-    0xdc, 0x59, 0x7c, 0x24, 0x6b, 0xf5, 0x97, 0xfe, 0x8f, 0xbd, 0xe8, 0xda,
-    0x02, 0xd5, 0x97, 0xff, 0x6b, 0x4f, 0xfe, 0x78, 0xf5, 0xe7, 0x59, 0x69,
-    0x2c, 0xae, 0x1e, 0xa8, 0x88, 0x97, 0x3e, 0x96, 0x5f, 0xff, 0x98, 0xce,
-    0x9f, 0x3c, 0x1c, 0xef, 0xee, 0x38, 0x59, 0x7f, 0x74, 0xf6, 0x6c, 0x01,
-    0x65, 0x0d, 0x13, 0x5a, 0x16, 0xf2, 0xb5, 0xf4, 0x8f, 0x52, 0x59, 0x7f,
-    0x7f, 0x34, 0x8f, 0x52, 0x59, 0x31, 0xa2, 0xbf, 0xde, 0xcf, 0x60, 0x1c,
-    0x0b, 0x2e, 0x3d, 0x96, 0x50, 0x0f, 0x27, 0xa6, 0x55, 0xf2, 0x2b, 0x35,
-    0x08, 0xab, 0xfc, 0x09, 0x8d, 0xa1, 0x7e, 0x2c, 0xbe, 0xc0, 0xeb, 0x65,
-    0x95, 0xf1, 0xeb, 0xb4, 0xd2, 0xf4, 0x0c, 0x6b, 0x2e, 0xcd, 0xc5, 0x97,
-    0xdf, 0x88, 0x52, 0x59, 0x67, 0x23, 0x7b, 0xd1, 0x9b, 0xf7, 0x39, 0x85,
-    0xfa, 0xca, 0xfc, 0xf3, 0x48, 0x96, 0xa1, 0x53, 0x49, 0xc3, 0xf9, 0xe1,
-    0x01, 0xd2, 0x30, 0xc2, 0x9a, 0xd3, 0x2c, 0xbf, 0xe0, 0xb8, 0x93, 0x4b,
-    0x3e, 0x92, 0xca, 0xf8, 0xf3, 0x88, 0x4a, 0xfc, 0x27, 0x7f, 0x6e, 0x2c,
-    0xa6, 0x9e, 0x67, 0xe4, 0x57, 0x47, 0x16, 0x5f, 0x47, 0xa0, 0x6b, 0x28,
-    0x06, 0xde, 0x61, 0x6b, 0xfe, 0x93, 0xeb, 0xa5, 0x0d, 0xe2, 0xcb, 0xfd,
-    0x03, 0x8d, 0x06, 0x3f, 0x59, 0x78, 0xb3, 0xe5, 0x97, 0x37, 0x93, 0x22,
-    0x1d, 0xa7, 0x04, 0x67, 0x7f, 0xfd, 0x19, 0xf7, 0x7d, 0x87, 0x23, 0x61,
-    0x8c, 0x59, 0x7e, 0x28, 0xdc, 0x28, 0x59, 0x7f, 0xf9, 0xdf, 0x5b, 0x79,
-    0xfb, 0xe3, 0xd4, 0x96, 0x5f, 0xb4, 0x3f, 0x1c, 0xcb, 0x2e, 0x71, 0x46,
-    0x7e, 0x78, 0x95, 0x7f, 0xce, 0x59, 0xde, 0x98, 0xbd, 0x59, 0x7f, 0xff,
-    0xf4, 0xd2, 0x32, 0xec, 0x7f, 0xb9, 0xd3, 0x63, 0x59, 0x1f, 0x48, 0xda,
-    0xb2, 0xa1, 0x15, 0xe4, 0x71, 0x50, 0xac, 0x9f, 0x16, 0x8e, 0x15, 0x3a,
-    0x3c, 0x75, 0x02, 0x84, 0xd8, 0x61, 0xb9, 0x53, 0xdb, 0x64, 0x53, 0x08,
-    0xd2, 0xa4, 0x30, 0xe3, 0xe3, 0x08, 0x60, 0x11, 0x99, 0x2b, 0xc4, 0x9f,
-    0xc2, 0x57, 0x92, 0xc9, 0xbb, 0x38, 0x33, 0x7e, 0x31, 0x02, 0xfc, 0x59,
-    0x7f, 0xf7, 0x7e, 0x96, 0x74, 0xf7, 0xc1, 0x01, 0x65, 0xfd, 0x01, 0xf8,
-    0xfe, 0xdc, 0x59, 0x7e, 0xc1, 0x73, 0xee, 0xac, 0xa9, 0xc7, 0xb6, 0x66,
-    0x57, 0xfb, 0xe9, 0x60, 0xfd, 0x9b, 0x2c, 0xa1, 0xa6, 0x43, 0xf1, 0x46,
-    0xa1, 0x42, 0x44, 0x77, 0xe8, 0xd7, 0xd2, 0xe2, 0xcb, 0xff, 0xfe, 0xd4,
-    0xcf, 0xe3, 0xe4, 0x4c, 0x7d, 0xee, 0x7b, 0xf3, 0xde, 0xb2, 0xb6, 0x44,
-    0x98, 0x4a, 0x6f, 0x6b, 0x38, 0xb2, 0xfc, 0x65, 0xbf, 0x24, 0xb2, 0xf6,
-    0x1e, 0xcb, 0x29, 0x83, 0xe0, 0x68, 0xe7, 0x8a, 0x2f, 0xe8, 0xdb, 0x3b,
-    0x8d, 0x59, 0x7f, 0xf6, 0x10, 0x41, 0xec, 0x6c, 0xce, 0x05, 0x94, 0x68,
-    0xa1, 0xd1, 0x87, 0x0b, 0x6f, 0x9a, 0x70, 0x35, 0x97, 0xf8, 0x98, 0xf4,
-    0x35, 0xa4, 0xb2, 0xfe, 0xdd, 0x38, 0xdc, 0x0f, 0x56, 0x5f, 0xa2, 0x6c,
-    0xc0, 0x2c, 0xa8, 0x45, 0x76, 0x10, 0x99, 0x9f, 0x8c, 0xef, 0x89, 0xaf,
-    0xd5, 0x97, 0x88, 0xe4, 0xb2, 0xff, 0xde, 0xc9, 0x8e, 0x60, 0xee, 0x07,
-    0x8b, 0x2f, 0x1e, 0x98, 0x59, 0x7d, 0xd3, 0x8f, 0x96, 0x51, 0xa2, 0x0c,
-    0x91, 0x38, 0x3b, 0x7f, 0xd1, 0x34, 0x77, 0xd9, 0xa0, 0x2c, 0xbd, 0xe8,
-    0x99, 0x65, 0xa3, 0xe3, 0xd6, 0xdc, 0x39, 0xa9, 0x22, 0xbf, 0x90, 0x84,
-    0xbc, 0x46, 0x6b, 0x2e, 0x7d, 0x96, 0x5f, 0xce, 0xdc, 0xde, 0xfa, 0x59,
-    0x5b, 0x1e, 0x2b, 0x45, 0xef, 0xfd, 0x31, 0xfa, 0x3e, 0x94, 0x4d, 0x0b,
-    0x28, 0xcf, 0x8c, 0x24, 0x77, 0xcd, 0x8e, 0xb5, 0x65, 0xf8, 0x6e, 0x51,
-    0xe5, 0x97, 0xf4, 0xa3, 0xee, 0xe7, 0x96, 0x5f, 0xfe, 0xef, 0x0f, 0xf8,
-    0x97, 0x33, 0x3e, 0xea, 0xca, 0x98, 0xfe, 0x78, 0x5d, 0x5e, 0x46, 0x10,
-    0xb0, 0x9f, 0xbf, 0xde, 0x79, 0xb0, 0xf7, 0x06, 0xb2, 0xa1, 0x34, 0x33,
-    0x87, 0x27, 0x0a, 0x6f, 0xcd, 0xdc, 0x20, 0xec, 0xb2, 0xff, 0x70, 0xfc,
-    0x73, 0x1e, 0xcb, 0x2f, 0xef, 0xa5, 0x81, 0xd6, 0xcb, 0x2f, 0xff, 0x6b,
-    0x50, 0x58, 0xc1, 0xfb, 0xd8, 0x22, 0xca, 0x33, 0xfa, 0x09, 0x85, 0x42,
-    0x3e, 0xf0, 0xb3, 0x50, 0xae, 0xbc, 0x0f, 0x42, 0xcb, 0xb5, 0x0b, 0x2b,
-    0xe3, 0x65, 0x30, 0xe5, 0xfa, 0x0f, 0xb3, 0xd4, 0xf0, 0x59, 0x7e, 0x73,
-    0x1c, 0x12, 0xcb, 0xa0, 0x2b, 0x2a, 0x11, 0x21, 0xe2, 0x32, 0x32, 0xe1,
-    0x2d, 0xf6, 0xd1, 0xb9, 0x0b, 0x2f, 0xbd, 0xfb, 0xf5, 0x65, 0xbc, 0xb2,
-    0xdb, 0xdc, 0xda, 0x04, 0x8e, 0xff, 0xe3, 0x69, 0xf3, 0xd0, 0x7a, 0x0e,
-    0xea, 0xca, 0x84, 0x63, 0x9a, 0xcb, 0x94, 0x5f, 0xc5, 0xc3, 0xdf, 0x03,
-    0x59, 0x7f, 0xdf, 0x99, 0x76, 0x38, 0x1f, 0x2c, 0xbc, 0x46, 0xc2, 0xcb,
-    0xf3, 0xeb, 0x51, 0xb2, 0xcb, 0xfb, 0xa7, 0xa3, 0xe8, 0x56, 0x54, 0xe4,
-    0x55, 0x34, 0xe7, 0xa3, 0x82, 0x14, 0x5e, 0xe3, 0xfe, 0xb2, 0xa0, 0xf7,
-    0x7a, 0x81, 0x7f, 0x04, 0x4f, 0x67, 0xdc, 0x59, 0x7f, 0xff, 0xfd, 0x1d,
-    0x27, 0x01, 0xf2, 0x63, 0xd0, 0x23, 0x9d, 0x8f, 0xa0, 0x4c, 0xe2, 0xcb,
-    0xfd, 0xcc, 0xd4, 0x6f, 0x8d, 0xd5, 0x95, 0xa4, 0x5a, 0x75, 0xf6, 0xff,
-    0x7b, 0x3e, 0x8d, 0x1b, 0x56, 0x5f, 0x76, 0x1b, 0x0b, 0x2f, 0xff, 0xff,
-    0xfb, 0x99, 0xdf, 0x3b, 0x79, 0xad, 0x1f, 0xdd, 0x77, 0x63, 0x32, 0x60,
-    0xf6, 0x05, 0xfa, 0x16, 0x5f, 0x83, 0x36, 0x4f, 0xe2, 0xcb, 0xbc, 0xeb,
-    0x2b, 0x88, 0xd8, 0xec, 0x25, 0xf7, 0x95, 0xdf, 0xf7, 0xdc, 0x23, 0x6f,
-    0x73, 0x75, 0x65, 0xd9, 0xa5, 0x95, 0x07, 0xa5, 0xe3, 0xcb, 0xfb, 0xa4,
-    0xff, 0xe1, 0x2c, 0xbf, 0x13, 0xff, 0x84, 0xb2, 0xa7, 0x1e, 0x97, 0x4b,
-    0x2a, 0x15, 0x37, 0x8c, 0x8f, 0x0c, 0xde, 0x1f, 0x3d, 0x84, 0x48, 0x5c,
-    0xef, 0xfd, 0xd3, 0xe1, 0x3f, 0x66, 0x71, 0xac, 0xbe, 0xfd, 0xfe, 0xe2,
-    0xcb, 0x85, 0x15, 0x65, 0x70, 0xde, 0x8a, 0x49, 0x7d, 0xe7, 0xcf, 0x24,
-    0x66, 0x68, 0xab, 0x11, 0xa0, 0x70, 0x9d, 0xbf, 0x09, 0x8d, 0x3d, 0x2c,
-    0xbf, 0x00, 0xf9, 0xe3, 0x59, 0x73, 0x5d, 0x65, 0xfe, 0xec, 0x10, 0x27,
-    0x9f, 0xda, 0xb2, 0xbc, 0x79, 0xe1, 0x16, 0xb8, 0xfe, 0x59, 0x7b, 0xd1,
-    0xfa, 0xcb, 0xdb, 0x9b, 0x90, 0xb2, 0xff, 0x87, 0xe3, 0xd1, 0xfd, 0x34,
-    0x2c, 0xa7, 0x3d, 0xc0, 0x91, 0x5c, 0xc8, 0xde, 0xb2, 0xb1, 0x38, 0xef,
-    0x8a, 0x0d, 0xdb, 0x44, 0x4e, 0x2e, 0x4f, 0x3d, 0x21, 0xbd, 0xe9, 0xdb,
-    0xab, 0x2f, 0x10, 0x0d, 0x65, 0xfb, 0xd0, 0x59, 0xb2, 0xca, 0x83, 0xe4,
-    0x32, 0x27, 0x1b, 0xbf, 0xa3, 0xa1, 0x68, 0x7a, 0xb2, 0xff, 0x41, 0x79,
-    0xff, 0x0c, 0xcb, 0x2b, 0xc7, 0xc5, 0xb8, 0x5d, 0x50, 0xd9, 0x93, 0xed,
-    0x0d, 0x69, 0x46, 0x4a, 0x38, 0x6e, 0xe1, 0xd3, 0x04, 0x3f, 0x46, 0x9a,
-    0x65, 0x1b, 0xb0, 0xc2, 0x9a, 0x36, 0x4d, 0x46, 0x5e, 0xd8, 0x7a, 0xfa,
-    0x30, 0x27, 0x2d, 0xfe, 0x33, 0x56, 0x59, 0x09, 0x4b, 0x53, 0xe4, 0x66,
-    0x1d, 0x8e, 0xd3, 0x7c, 0x31, 0xb7, 0x21, 0x1d, 0x7f, 0x81, 0xe3, 0xef,
-    0x1f, 0xe5, 0x97, 0xb3, 0x5b, 0xd6, 0x5f, 0x1e, 0x84, 0x99, 0x65, 0xff,
-    0x8b, 0xf6, 0xbc, 0x8a, 0x3b, 0xc5, 0x97, 0x66, 0x2c, 0xbe, 0x07, 0x8c,
-    0x45, 0x94, 0xc2, 0x3b, 0x0c, 0xd3, 0xc3, 0xce, 0x48, 0xcb, 0x3e, 0x10,
-    0x56, 0xfd, 0x34, 0x4d, 0xe8, 0x59, 0x7f, 0xf8, 0xbb, 0xc1, 0x3a, 0x64,
-    0x19, 0x67, 0x16, 0x5c, 0x24, 0x2c, 0xbc, 0x28, 0xa2, 0xa4, 0xbe, 0x97,
-    0x70, 0x09, 0x19, 0x9a, 0x0b, 0xf6, 0x0c, 0xff, 0xe2, 0xee, 0xfe, 0x56,
-    0x8f, 0xa4, 0x8d, 0x2f, 0x47, 0x24, 0xb2, 0xf6, 0x36, 0x7d, 0x65, 0x42,
-    0x6d, 0xf8, 0x53, 0xa4, 0xa7, 0x85, 0x07, 0xe4, 0x24, 0x39, 0x7c, 0xd1,
-    0xe1, 0x2c, 0xbb, 0xbc, 0x59, 0x7f, 0xf8, 0x79, 0x8c, 0x4e, 0xce, 0x9f,
-    0x3c, 0x6b, 0x2f, 0xf7, 0x7d, 0x1d, 0xe7, 0x8d, 0x65, 0xcf, 0x25, 0x97,
-    0xe9, 0xd9, 0x31, 0xec, 0xb2, 0xa7, 0x1f, 0xa3, 0x4c, 0xf8, 0x2d, 0x6e,
-    0x2c, 0xbf, 0xdd, 0xfa, 0x5e, 0x82, 0xd9, 0x25, 0xff, 0xb3, 0xe9, 0x1e,
-    0x11, 0x60, 0xd6, 0x5f, 0x34, 0x3f, 0x75, 0x65, 0xf6, 0x7a, 0x37, 0xac,
-    0xad, 0x8f, 0x1f, 0x84, 0x95, 0x09, 0xf9, 0xec, 0x2f, 0xf4, 0x2f, 0xf4,
-    0x62, 0x42, 0x3c, 0x35, 0xec, 0x20, 0xef, 0xf0, 0x3c, 0x63, 0x87, 0xd2,
-    0xcb, 0xc7, 0xc3, 0x59, 0x63, 0x59, 0x7c, 0xe2, 0x38, 0xd6, 0x5a, 0x5e,
-    0x3c, 0xd7, 0x1b, 0x08, 0x85, 0x0d, 0x16, 0x7f, 0x3f, 0xdf, 0xf1, 0x40,
-    0xbc, 0x32, 0xfa, 0x4b, 0x2f, 0xff, 0xfd, 0xcf, 0xcf, 0x43, 0xc2, 0xf1,
-    0x83, 0xc7, 0xd6, 0x20, 0xa4, 0xb2, 0xe8, 0x02, 0xca, 0x24, 0x5d, 0xf4,
-    0xe7, 0x7b, 0x65, 0xe1, 0x23, 0x75, 0x65, 0xe6, 0x3c, 0x6b, 0x2b, 0x63,
-    0x7a, 0x64, 0x17, 0xe2, 0x81, 0x70, 0x96, 0x5f, 0xf7, 0xbe, 0x86, 0x26,
-    0x94, 0x6e, 0xac, 0xb7, 0x06, 0x7c, 0xb8, 0x4d, 0x5a, 0x45, 0x6f, 0x61,
-    0x0d, 0x4b, 0x2f, 0xd2, 0xd1, 0xc3, 0x56, 0x5e, 0x13, 0xe1, 0x56, 0x56,
-    0xc7, 0xa5, 0xf0, 0x5f, 0x09, 0xea, 0x15, 0xe3, 0xe4, 0x64, 0x47, 0x0d,
-    0xf7, 0x8c, 0x6c, 0x2f, 0x57, 0xef, 0xa5, 0x9d, 0x35, 0x97, 0xfa, 0x5e,
-    0x8f, 0xbb, 0x1e, 0x59, 0x7f, 0xfa, 0x5d, 0x0f, 0xb5, 0x02, 0xc8, 0xff,
-    0xc5, 0x97, 0x3b, 0x56, 0x50, 0x11, 0x7d, 0xf1, 0x41, 0x1a, 0x6f, 0x4c,
-    0xbf, 0xff, 0x75, 0xf5, 0x87, 0xff, 0x33, 0xc7, 0xaf, 0x3a, 0xcb, 0xd0,
-    0x43, 0x59, 0x7e, 0xfb, 0x93, 0x67, 0x56, 0x56, 0x23, 0x63, 0xe3, 0xff,
-    0x2a, 0x10, 0xdd, 0xfc, 0x7d, 0x27, 0xff, 0x8b, 0x2f, 0xd0, 0xde, 0xe7,
-    0x96, 0x5f, 0x70, 0xe0, 0x0b, 0x2f, 0xfe, 0x9b, 0x35, 0x8e, 0xd8, 0xf1,
-    0x8d, 0x65, 0x61, 0xf2, 0x74, 0x86, 0xfe, 0x0b, 0x73, 0xdf, 0x3a, 0xca,
-    0x61, 0x30, 0x70, 0x16, 0x94, 0x22, 0xf8, 0x43, 0x7f, 0xf8, 0xc6, 0x4f,
-    0xf1, 0x67, 0x70, 0xff, 0x59, 0x7d, 0xb6, 0xcf, 0xba, 0xb2, 0xf8, 0x03,
-    0x0e, 0xcb, 0x2f, 0x4b, 0x81, 0x59, 0x7f, 0x17, 0x4f, 0xd2, 0x25, 0x97,
-    0xff, 0xff, 0xef, 0x46, 0x6d, 0x23, 0xef, 0x23, 0x58, 0xcc, 0xff, 0x88,
-    0xdf, 0x10, 0x40, 0x59, 0x6e, 0xe2, 0x3c, 0x7c, 0x48, 0xe3, 0xbc, 0x2c,
-    0xbc, 0x28, 0xa2, 0xac, 0xbf, 0xfe, 0x6e, 0x7d, 0xd2, 0xcd, 0x9b, 0x8d,
-    0xc2, 0x48, 0xcc, 0xd0, 0x54, 0x23, 0x08, 0xd8, 0x6f, 0xb6, 0xcf, 0x3a,
-    0xcb, 0xf7, 0x9f, 0x59, 0xa5, 0x97, 0xff, 0xa3, 0x62, 0x0e, 0xc1, 0xe7,
-    0x79, 0x82, 0xac, 0xb8, 0x2e, 0xb2, 0x80, 0x88, 0xaf, 0x13, 0x92, 0x6d,
-    0xee, 0xc0, 0xd6, 0x5f, 0x4b, 0xa1, 0x1a, 0xcb, 0xf4, 0x1c, 0x9f, 0x8b,
-    0x2a, 0x0f, 0x97, 0xe1, 0xcd, 0x11, 0xdf, 0xd9, 0xdf, 0x06, 0x3e, 0x59,
-    0x7d, 0xd3, 0xd6, 0x2c, 0xbe, 0xfb, 0x86, 0xc0, 0xcf, 0x3f, 0x0b, 0xab,
-    0x64, 0xd3, 0x0a, 0x12, 0x9d, 0x7e, 0xbf, 0xd9, 0xc2, 0xcd, 0xfe, 0x35,
-    0x97, 0xfe, 0x6c, 0x7c, 0x59, 0xff, 0x23, 0x75, 0x65, 0x68, 0xfd, 0x5a,
-    0x67, 0x7f, 0x86, 0x59, 0xbc, 0xf4, 0xeb, 0x2a, 0x7b, 0x55, 0xf1, 0x11,
-    0xfc, 0x1c, 0x2a, 0xc2, 0x45, 0x7e, 0xdb, 0x74, 0xf3, 0xe5, 0x97, 0xe3,
-    0xe4, 0x6c, 0xd5, 0xd9, 0xfa, 0xbf, 0x43, 0xeb, 0xf0, 0xae, 0xcf, 0xd5,
-    0xcf, 0x25, 0xd9, 0xfa, 0xbe, 0x0c, 0xb3, 0x8b, 0xb3, 0xf5, 0x43, 0x3d,
-    0x22, 0x23, 0xbf, 0x46, 0x73, 0x09, 0x76, 0x7e, 0xa9, 0x76, 0x7e, 0xae,
-    0x7e, 0xae, 0xcf, 0xd3, 0x4b, 0x8b, 0x48, 0x8f, 0xf0, 0x29, 0x57, 0xd9,
-    0x3e, 0x7f, 0xae, 0xcf, 0xd5, 0x2e, 0xcf, 0xd5, 0xdf, 0xc2, 0xec, 0xfd,
-    0x5f, 0xf6, 0x7e, 0xfa, 0xcd, 0xf8, 0x35, 0xd9, 0xfa, 0xbf, 0xb3, 0xc7,
-    0xc0, 0xec, 0xbb, 0x3f, 0x55, 0xfa, 0x29, 0x88, 0x93, 0x88, 0xf7, 0xda,
-    0xda, 0x3a, 0xbb, 0x3f, 0x54, 0xbb, 0x3f, 0x58, 0x6c, 0x2e, 0x14, 0x55,
-    0xd9, 0xfa, 0xa9, 0x2b, 0x1d, 0x19, 0xae, 0x42, 0x1f, 0xe8, 0x4e, 0xe8,
-    0x9d, 0xa6, 0x5c, 0x85, 0xf7, 0x58, 0x05, 0x27, 0xba, 0x18, 0x4d, 0x9f,
-    0xa3, 0x34, 0x48, 0x5f, 0xf6, 0xd1, 0xbf, 0x0f, 0x59, 0xb2, 0xcb, 0xff,
-    0x9f, 0xc0, 0xf1, 0x93, 0xe9, 0xe4, 0xb2, 0xa4, 0x8b, 0x6d, 0x1c, 0xf4,
-    0xee, 0xfe, 0x8c, 0x12, 0x25, 0x25, 0x97, 0xfb, 0x99, 0x29, 0x47, 0x7e,
-    0x59, 0x58, 0x89, 0x12, 0x30, 0xe1, 0x6d, 0xff, 0xb0, 0x03, 0xcd, 0x0a,
-    0xfe, 0x99, 0x65, 0x2c, 0xbf, 0xf1, 0x64, 0xd1, 0xb7, 0xef, 0xf7, 0x16,
-    0x54, 0x1e, 0x67, 0x02, 0xee, 0x96, 0xc9, 0x2f, 0xa6, 0x77, 0xd2, 0xca,
-    0xd9, 0x31, 0x5f, 0x8b, 0xbd, 0x08, 0xc2, 0x21, 0xdc, 0x18, 0xb8, 0xf6,
-    0x59, 0x5a, 0x5e, 0xa0, 0x79, 0xe3, 0x5e, 0xaa, 0x5f, 0xdc, 0x28, 0xf0,
-    0x74, 0xb2, 0xfe, 0xe1, 0x67, 0x73, 0xf5, 0x95, 0xf1, 0xed, 0x34, 0xb6,
-    0xff, 0xa6, 0x2c, 0xdf, 0xef, 0x9f, 0x75, 0x65, 0xfd, 0xdc, 0xf4, 0x6b,
-    0xf5, 0x97, 0xfe, 0x6c, 0x13, 0x13, 0xb4, 0x79, 0xbd, 0x65, 0xff, 0x68,
-    0xdb, 0xc1, 0x23, 0x26, 0x59, 0x7f, 0xc0, 0x8f, 0xc6, 0x17, 0xd4, 0x96,
-    0x5f, 0xf9, 0xdf, 0x6c, 0x6b, 0x97, 0xd2, 0x59, 0x79, 0xd8, 0xe6, 0x1f,
-    0xc4, 0xc7, 0x57, 0xff, 0x67, 0xa7, 0x77, 0xd8, 0xd1, 0x23, 0xf5, 0x96,
-    0x16, 0x72, 0x73, 0xd8, 0x5d, 0xa4, 0x22, 0x85, 0x97, 0x4d, 0x2a, 0x15,
-    0x2b, 0xe1, 0x1b, 0xc7, 0xbb, 0x7c, 0x6c, 0x18, 0xab, 0x2f, 0xbb, 0xec,
-    0xd9, 0x65, 0x34, 0xf1, 0x88, 0x8e, 0xe1, 0x8a, 0xb2, 0xff, 0x0c, 0x4d,
-    0xee, 0xe4, 0x05, 0x95, 0x07, 0xdd, 0x84, 0x26, 0x31, 0x79, 0xbf, 0xe9,
-    0x65, 0xe1, 0xf4, 0x96, 0x5f, 0xfe, 0xfb, 0xbe, 0x31, 0x07, 0x98, 0x5c,
-    0x35, 0x97, 0xff, 0xe9, 0x6a, 0x37, 0xbc, 0xd0, 0x3f, 0x43, 0x5e, 0x65,
-    0x97, 0xfb, 0x71, 0xf8, 0x7c, 0x9b, 0x16, 0x54, 0xe4, 0xc4, 0x99, 0x8f,
-    0x60, 0xe7, 0xc9, 0x5a, 0x58, 0xbf, 0xe8, 0xfa, 0x33, 0x9c, 0x6f, 0xcb,
-    0x2f, 0x19, 0x49, 0x65, 0x43, 0x77, 0x11, 0xb2, 0xd4, 0xa7, 0x76, 0xf2,
-    0x3e, 0xf3, 0x8d, 0x0f, 0x75, 0x0e, 0x64, 0x8d, 0x47, 0xb5, 0xe9, 0x63,
-    0x2f, 0x3d, 0xda, 0x52, 0xba, 0xf9, 0x0e, 0x90, 0xc6, 0x7c, 0x2a, 0x7e,
-    0xe1, 0xd5, 0xf0, 0x3f, 0xdb, 0x16, 0x52, 0xcb, 0x3e, 0x8d, 0x7b, 0x49,
-    0x2f, 0xec, 0x6c, 0xce, 0xf2, 0x59, 0x7f, 0xff, 0x3f, 0xa2, 0x4c, 0xf3,
-    0xf8, 0x97, 0x07, 0xe8, 0xd2, 0xcb, 0x18, 0xd1, 0x15, 0xe2, 0xdb, 0xff,
-    0x31, 0x1f, 0x14, 0x7b, 0xc1, 0x02, 0xcb, 0xff, 0xb5, 0x18, 0x59, 0x23,
-    0xf6, 0x6f, 0x59, 0x7f, 0xfc, 0x4e, 0xc7, 0x33, 0x7c, 0x7d, 0xde, 0x05,
-    0xab, 0x28, 0x68, 0x96, 0x24, 0x3b, 0xfc, 0x51, 0xdf, 0xa6, 0x76, 0xac,
-    0xbf, 0x74, 0x3d, 0xc1, 0xac, 0xb6, 0x2c, 0xa7, 0x37, 0x1b, 0xca, 0x29,
-    0xa8, 0x8e, 0x26, 0xcb, 0xff, 0xbd, 0x1b, 0x73, 0x35, 0xfb, 0xe7, 0xeb,
-    0x2f, 0xe2, 0x76, 0x3c, 0xf2, 0x59, 0x7f, 0xe6, 0x96, 0x74, 0xa0, 0x07,
-    0x25, 0x96, 0xd2, 0xca, 0x33, 0xcd, 0x73, 0xcb, 0xf0, 0x31, 0xb1, 0xc5,
-    0x97, 0x85, 0x14, 0x54, 0x97, 0x84, 0x8f, 0xd2, 0x33, 0x34, 0x17, 0xfc,
-    0xf2, 0x13, 0x59, 0xbd, 0xf4, 0xb2, 0xda, 0x59, 0x7f, 0xe2, 0x2c, 0xda,
-    0x69, 0x46, 0xb6, 0x59, 0x7b, 0xd9, 0x28, 0x3d, 0x11, 0x04, 0x68, 0x91,
-    0x7f, 0xd8, 0x46, 0x5f, 0xe2, 0x91, 0xb7, 0x3e, 0xea, 0xcb, 0xef, 0x80,
-    0x64, 0xb2, 0x9c, 0xf5, 0x7a, 0x67, 0x4b, 0x2e, 0xfe, 0x24, 0x6b, 0x19,
-    0x64, 0x37, 0xe9, 0xd0, 0x0c, 0xd2, 0xcb, 0xff, 0x4e, 0x82, 0x0b, 0x60,
-    0x58, 0xe2, 0xcb, 0x60, 0xcf, 0xa4, 0x8a, 0x6f, 0xfb, 0xae, 0x59, 0xcd,
-    0x47, 0x16, 0x5f, 0x4a, 0x3f, 0xf9, 0x65, 0xfd, 0xfc, 0x16, 0x7d, 0xd5,
-    0x97, 0x3f, 0xf3, 0x8f, 0x48, 0x42, 0x4b, 0xff, 0xc2, 0x14, 0xcc, 0x38,
-    0xfd, 0x80, 0xcd, 0x2c, 0xa3, 0x4f, 0x1b, 0xd0, 0x9a, 0x72, 0x62, 0x84,
-    0x4f, 0x0c, 0x6f, 0x6f, 0x8d, 0x2c, 0xbc, 0x1c, 0xf2, 0xca, 0xd9, 0x7e,
-    0x42, 0x50, 0xb0, 0x19, 0x46, 0x43, 0x58, 0xe1, 0x61, 0x31, 0x13, 0x51,
-    0xbc, 0xf4, 0xe4, 0x1f, 0xa3, 0x94, 0x3b, 0xfb, 0x29, 0xbb, 0x7a, 0x90,
-    0xa3, 0xd7, 0x1e, 0xcb, 0x2f, 0xf1, 0x00, 0x67, 0xbe, 0x06, 0xb2, 0x86,
-    0x79, 0x61, 0x17, 0xbf, 0xfe, 0xc3, 0xd7, 0xa0, 0xfb, 0xc3, 0x2f, 0xa4,
-    0xb2, 0xdf, 0xac, 0xbf, 0xfa, 0x6f, 0x46, 0xc2, 0x77, 0xc1, 0x79, 0x2c,
-    0xbf, 0xd1, 0xbb, 0x3b, 0xcf, 0x9a, 0x59, 0x7b, 0x35, 0x0b, 0x2f, 0xbd,
-    0xec, 0xf9, 0x65, 0xd8, 0xd9, 0xf3, 0x7c, 0x20, 0xdd, 0x62, 0x29, 0x49,
-    0xd6, 0xd3, 0x2c, 0xb3, 0x56, 0x59, 0xa6, 0x68, 0xdc, 0x4a, 0xfd, 0x9f,
-    0xf2, 0x24, 0xb2, 0xfc, 0x6d, 0x18, 0xf1, 0x65, 0xbf, 0x23, 0xcf, 0x9f,
-    0x28, 0xbf, 0xee, 0xfb, 0x39, 0x3b, 0xa7, 0xb2, 0xcb, 0xfb, 0x26, 0xcd,
-    0x0c, 0xd6, 0x54, 0x22, 0x50, 0xca, 0xc8, 0xf2, 0xff, 0x88, 0xc2, 0xcb,
-    0xe4, 0xfc, 0x75, 0x65, 0xfe, 0xff, 0x47, 0x9e, 0x0f, 0x16, 0x5e, 0xcf,
-    0x9a, 0xb2, 0xfe, 0xcf, 0xf7, 0x3a, 0x6d, 0x59, 0x50, 0x88, 0x22, 0x34,
-    0xe8, 0xed, 0xe7, 0xd7, 0xeb, 0x2b, 0x65, 0x7a, 0x52, 0x4e, 0x18, 0x94,
-    0xd0, 0xed, 0x6a, 0x27, 0xa3, 0x08, 0x22, 0xde, 0xc3, 0x06, 0x7c, 0xba,
-    0xfb, 0x3a, 0x26, 0xcb, 0x2f, 0x0a, 0x28, 0xa9, 0x88, 0x40, 0xbe, 0x03,
-    0xb8, 0x13, 0x10, 0x80, 0xcc, 0xd7, 0x5f, 0x3e, 0xb0, 0x55, 0x95, 0xa3,
-    0xe3, 0xde, 0x83, 0x78, 0x51, 0x45, 0x4c, 0x41, 0xe5, 0x26, 0x20, 0xf1,
-    0x99, 0xae, 0xbf, 0xba, 0xed, 0x6c, 0x35, 0x65, 0xf9, 0xfa, 0xe5, 0xfa,
-    0xcb, 0xfb, 0x3b, 0xe0, 0xbc, 0x96, 0x5e, 0x14, 0x51, 0x56, 0x5e, 0xe4,
-    0x30, 0x91, 0x99, 0xa0, 0xac, 0x4d, 0x34, 0x0a, 0x5f, 0x15, 0xf8, 0xb4,
-    0x89, 0xfa, 0x9b, 0x5b, 0xaa, 0x96, 0x5b, 0x28, 0x0a, 0xf0, 0xb0, 0x4b,
-    0x2f, 0xfe, 0xf4, 0x48, 0xfb, 0x9e, 0x04, 0x35, 0x65, 0x42, 0x23, 0x9c,
-    0xbf, 0x78, 0xe5, 0xee, 0xc7, 0x16, 0x5f, 0xfb, 0xc6, 0x38, 0x2e, 0xe7,
-    0xdd, 0x59, 0x7f, 0x8a, 0x1b, 0xce, 0x04, 0x96, 0x50, 0x0f, 0xc3, 0x87,
-    0xd7, 0xff, 0x78, 0xf5, 0xe7, 0xce, 0x1b, 0xec, 0xb2, 0xff, 0xd1, 0xdc,
-    0xd6, 0x73, 0x3e, 0xea, 0xca, 0xc4, 0x40, 0x92, 0x1d, 0xff, 0xb6, 0x6e,
-    0x37, 0x0b, 0xb8, 0x05, 0x97, 0xd1, 0xd8, 0x6a, 0xca, 0x9e, 0xd3, 0xaf,
-    0xfa, 0x11, 0x8d, 0x85, 0x19, 0x10, 0xf4, 0xfa, 0xff, 0xbd, 0x04, 0x0f,
-    0xb8, 0xfb, 0xab, 0x2f, 0x88, 0x3b, 0x12, 0xcb, 0xc7, 0xf4, 0x96, 0x54,
-    0x8d, 0xff, 0xe4, 0x57, 0xf0, 0xf9, 0x8d, 0x8d, 0xd5, 0x97, 0x82, 0xe2,
-    0x2c, 0xbb, 0x6f, 0x96, 0x59, 0xc6, 0x6d, 0xbf, 0x1d, 0xa9, 0x26, 0x55,
-    0xf3, 0xdb, 0x91, 0x0a, 0xcd, 0x7e, 0x2e, 0xfb, 0x24, 0xb2, 0xf1, 0xc3,
-    0x0b, 0x29, 0xcf, 0x0c, 0x89, 0xef, 0xfb, 0x0a, 0x3d, 0xe8, 0x14, 0xd6,
-    0x5e, 0x12, 0x3f, 0x59, 0x5b, 0x1f, 0xab, 0x04, 0x0d, 0x37, 0xbf, 0x02,
-    0x3d, 0x0d, 0x49, 0x7e, 0x27, 0x22, 0xc4, 0x97, 0x60, 0x12, 0x5c, 0x28,
-    0xa9, 0x2b, 0x0f, 0xeb, 0x84, 0xfd, 0x24, 0x14, 0x5a, 0xff, 0x10, 0x91,
-    0xff, 0xb3, 0x71, 0x23, 0x33, 0x79, 0x7f, 0xfb, 0x61, 0xe9, 0xc0, 0x59,
-    0xbf, 0x47, 0xc5, 0x95, 0x0a, 0xfd, 0xf2, 0x38, 0x43, 0x87, 0xbb, 0xc3,
-    0x9c, 0x29, 0x37, 0xff, 0x47, 0xfc, 0xcc, 0x1b, 0x93, 0xb0, 0xb2, 0xff,
-    0x8b, 0xff, 0x3f, 0x7a, 0x7f, 0xac, 0xbf, 0xff, 0x78, 0xf7, 0x99, 0x0f,
-    0x91, 0xa3, 0xcf, 0xb8, 0xb2, 0xfe, 0x28, 0xcd, 0x3f, 0xeb, 0x2f, 0xfd,
-    0x1a, 0xf4, 0x1f, 0xa0, 0x8d, 0x65, 0xd2, 0xe6, 0x23, 0xdc, 0x07, 0x5d,
-    0x56, 0x14, 0xb2, 0xff, 0x41, 0x63, 0x4f, 0xe9, 0x2c, 0xbf, 0xfe, 0xe1,
-    0x67, 0xdf, 0xbf, 0x1f, 0x47, 0xf7, 0xeb, 0x2b, 0xe4, 0x66, 0xf5, 0x24,
-    0x53, 0x2a, 0xf2, 0xa3, 0x97, 0x94, 0x0f, 0x7b, 0x78, 0x8d, 0x59, 0x7d,
-    0xed, 0xb0, 0x55, 0x97, 0xc3, 0x09, 0x49, 0x65, 0xb8, 0xe7, 0x8c, 0x21,
-    0x25, 0xfc, 0x60, 0x1e, 0x3f, 0xeb, 0x2f, 0xff, 0xdd, 0xe7, 0xd3, 0x87,
-    0x83, 0x87, 0xd6, 0x17, 0xeb, 0x2f, 0xff, 0xfd, 0x3b, 0xb2, 0xcf, 0xe7,
-    0xf2, 0x70, 0xf0, 0x70, 0xfa, 0xc2, 0xfd, 0x08, 0x5f, 0xfd, 0x9d, 0x9c,
-    0x0f, 0x1f, 0xbc, 0x7f, 0xaa, 0x10, 0xb5, 0x49, 0x19, 0x7c, 0x77, 0xbd,
-    0x1b, 0x33, 0xe2, 0x68, 0xdd, 0x8c, 0x8e, 0xfc, 0xde, 0x0a, 0xff, 0x2c,
-    0xb7, 0x06, 0x7d, 0x02, 0x1f, 0x5f, 0xd9, 0x34, 0x8f, 0x5c, 0x59, 0x7e,
-    0xf8, 0x4e, 0x46, 0x2c, 0xbe, 0xf0, 0x0f, 0x8b, 0x2a, 0x0f, 0x2f, 0xa5,
-    0x37, 0xff, 0xff, 0x3e, 0xc2, 0x0f, 0xd1, 0x2e, 0xe6, 0x0b, 0xc2, 0xce,
-    0xf4, 0xf6, 0x59, 0x7f, 0x3e, 0xb4, 0xff, 0xc2, 0xca, 0x86, 0xd3, 0xe0,
-    0x71, 0x95, 0x64, 0xbf, 0x43, 0x96, 0xf7, 0xa9, 0xdd, 0x67, 0x95, 0x23,
-    0xf9, 0x5b, 0x2d, 0x98, 0x8a, 0x39, 0x1e, 0xdf, 0x4a, 0x42, 0xf2, 0x29,
-    0x08, 0x8e, 0x97, 0x85, 0x14, 0x54, 0x97, 0x9c, 0x86, 0x91, 0x99, 0xa0,
-    0xbe, 0xcd, 0x67, 0x56, 0x57, 0xe7, 0x9d, 0xc2, 0xdb, 0xef, 0x1b, 0xc9,
-    0x65, 0xff, 0xe1, 0x08, 0xb3, 0x68, 0xfa, 0x52, 0x86, 0xac, 0xbc, 0x51,
-    0x25, 0x97, 0xda, 0xd1, 0xb5, 0x65, 0xb8, 0x33, 0x7a, 0x63, 0x75, 0x24,
-    0x57, 0x76, 0x11, 0x17, 0x9b, 0xb0, 0xd6, 0x51, 0x1e, 0x37, 0x4a, 0x2f,
-    0xda, 0xc0, 0x47, 0x96, 0x5e, 0x9c, 0xc4, 0xfa, 0xcb, 0xdd, 0x71, 0xac,
-    0xad, 0x1b, 0xfe, 0x11, 0xdf, 0xe6, 0x3e, 0xee, 0xa3, 0x3e, 0x59, 0x7f,
-    0x02, 0x3f, 0x3d, 0x30, 0x92, 0xfe, 0x13, 0x35, 0x99, 0x32, 0xcb, 0xf3,
-    0xfa, 0x70, 0xe1, 0x65, 0x49, 0x54, 0xe0, 0xc8, 0xf2, 0x31, 0x56, 0x08,
-    0x4d, 0x99, 0xc8, 0x48, 0xdb, 0x85, 0xfd, 0x2e, 0xbf, 0x3e, 0xb5, 0x9f,
-    0x2c, 0xbf, 0xfd, 0xdf, 0x1b, 0xff, 0x9a, 0x1c, 0x14, 0x96, 0x5f, 0xfe,
-    0xfa, 0x77, 0xdf, 0xc1, 0x01, 0xf6, 0x27, 0x59, 0x50, 0x8b, 0xfc, 0x28,
-    0x24, 0x9b, 0xf4, 0x70, 0x42, 0x92, 0xcb, 0xe9, 0xc0, 0x39, 0x2c, 0xbf,
-    0xf0, 0x33, 0x58, 0x7c, 0xf4, 0x6f, 0x59, 0x7e, 0x8d, 0xcd, 0xb0, 0x55,
-    0x97, 0xff, 0xff, 0x39, 0xf4, 0xfc, 0x03, 0x9d, 0x23, 0xf3, 0x97, 0x65,
-    0x9a, 0xc5, 0x97, 0x67, 0x96, 0x5d, 0x9b, 0x8b, 0x2a, 0x63, 0x5f, 0xe1,
-    0x6a, 0xf2, 0x30, 0x5e, 0x13, 0xf7, 0xfc, 0x51, 0xf7, 0x23, 0xb0, 0x35,
-    0x97, 0xb8, 0x27, 0x27, 0x1e, 0xfe, 0x13, 0xd0, 0xd3, 0xe5, 0xf8, 0x93,
-    0xc7, 0xfd, 0x8d, 0x32, 0xff, 0xb5, 0x12, 0x3e, 0x99, 0x49, 0x65, 0xff,
-    0xff, 0xff, 0x47, 0x23, 0xbb, 0x60, 0xba, 0xcf, 0x38, 0x9c, 0xc6, 0x1c,
-    0xbf, 0x82, 0x89, 0xbd, 0x0b, 0x2f, 0xdc, 0xf3, 0x82, 0x16, 0x5f, 0x9f,
-    0x61, 0x5e, 0x4b, 0x2a, 0x13, 0x1c, 0x23, 0x71, 0x61, 0x2a, 0x21, 0x3d,
-    0xff, 0x73, 0xd0, 0xfa, 0xd6, 0x7c, 0xb2, 0xff, 0xff, 0xcc, 0x7d, 0x2e,
-    0xe1, 0x77, 0x93, 0xb9, 0xcc, 0xd6, 0x13, 0xc9, 0x65, 0x62, 0x2a, 0x0c,
-    0xe6, 0xfd, 0x1f, 0xf7, 0x36, 0x59, 0x7f, 0xf3, 0x31, 0x94, 0x04, 0x18,
-    0xc1, 0xe9, 0x65, 0xed, 0x3f, 0x16, 0x5d, 0x82, 0xac, 0xa8, 0x3f, 0x91,
-    0xa3, 0x70, 0x72, 0xf7, 0x7d, 0x0b, 0x2b, 0x0f, 0x29, 0xcb, 0xaf, 0xde,
-    0x82, 0x7f, 0x2c, 0xbf, 0xb6, 0xf3, 0xf7, 0x50, 0xb2, 0xff, 0x0f, 0xd1,
-    0x33, 0xbf, 0xcb, 0x2f, 0x7b, 0xfd, 0xeb, 0x2b, 0x47, 0xa9, 0xb8, 0x69,
-    0x71, 0xec, 0xb2, 0xf7, 0xcf, 0xba, 0xb2, 0xb4, 0x6d, 0xfc, 0x2f, 0x52,
-    0x4d, 0x14, 0x64, 0x1a, 0x26, 0x78, 0x41, 0x12, 0xe5, 0xff, 0xd9, 0xaf,
-    0xda, 0x7c, 0x13, 0x91, 0x8b, 0x2f, 0x47, 0xdb, 0xab, 0x2f, 0xb8, 0x46,
-    0xc2, 0xcb, 0x0f, 0x47, 0x85, 0xd2, 0x0b, 0xff, 0x98, 0x16, 0x35, 0xe8,
-    0x37, 0xef, 0x16, 0x5f, 0x34, 0xa2, 0x65, 0x97, 0xff, 0xde, 0x39, 0x1e,
-    0x9f, 0xfe, 0x94, 0x37, 0x8b, 0x2f, 0xbb, 0x1a, 0xfe, 0x0f, 0xc4, 0x04,
-    0x57, 0x6e, 0xf1, 0x65, 0xff, 0x70, 0x1e, 0x71, 0xb2, 0x19, 0x33, 0xda,
-    0xca, 0x61, 0x13, 0x4e, 0x73, 0xd1, 0xaa, 0x92, 0xa2, 0xfc, 0x84, 0x39,
-    0x94, 0x3c, 0x6a, 0x17, 0xa7, 0xa2, 0xfd, 0x65, 0xfa, 0x04, 0x27, 0x92,
-    0xcb, 0xff, 0xda, 0x72, 0xee, 0x7f, 0x3f, 0x03, 0x1c, 0x2c, 0xbf, 0xa5,
-    0xa8, 0x93, 0xe9, 0x65, 0xd8, 0xd5, 0x97, 0xff, 0x61, 0x7f, 0x38, 0x4d,
-    0x7e, 0xd3, 0xe2, 0xcb, 0xf8, 0xfc, 0x79, 0xf7, 0x56, 0x50, 0xd1, 0x18,
-    0xd1, 0x6e, 0xa4, 0xd2, 0xcb, 0xef, 0xfb, 0x9f, 0xac, 0xbf, 0x47, 0x38,
-    0x7b, 0xd6, 0x5f, 0x34, 0x8a, 0x16, 0x5f, 0xf1, 0x8f, 0xd1, 0x2c, 0xfb,
-    0xab, 0x2f, 0xf8, 0x11, 0xbe, 0x38, 0x7f, 0xfc, 0xb2, 0xe7, 0x62, 0x11,
-    0x2a, 0x32, 0x0c, 0x39, 0xa1, 0xaa, 0x83, 0xc2, 0x7f, 0x93, 0x0e, 0x17,
-    0x33, 0x18, 0x68, 0x2f, 0xc4, 0x85, 0x0b, 0xeb, 0xd3, 0xff, 0x42, 0xcb,
-    0xfe, 0x07, 0x8a, 0x3e, 0x38, 0xf2, 0xca, 0x86, 0x72, 0xbc, 0xa3, 0x42,
-    0x19, 0x6e, 0x4a, 0x0d, 0x38, 0xd8, 0x75, 0x0e, 0xb6, 0x90, 0xbc, 0xa3,
-    0x12, 0x94, 0xfb, 0xc4, 0x70, 0xca, 0xa5, 0x9f, 0x7c, 0x10, 0x82, 0xff,
-    0xce, 0x63, 0x0f, 0x79, 0xb6, 0x0a, 0xb2, 0xe9, 0xe8, 0x96, 0x5f, 0xb9,
-    0x8c, 0x47, 0x16, 0x5f, 0xd1, 0xf3, 0x5c, 0xbf, 0x59, 0x7f, 0x6e, 0xf0,
-    0xcb, 0xe9, 0x2c, 0xbf, 0xf3, 0xea, 0x7c, 0xfd, 0x8f, 0xf7, 0xeb, 0x2f,
-    0xef, 0xc4, 0x2f, 0x67, 0xcb, 0x2f, 0xff, 0xc7, 0xd8, 0x6e, 0x7d, 0xd8,
-    0x68, 0x9a, 0x7f, 0xd6, 0x5f, 0x19, 0x38, 0xd6, 0x5f, 0xf7, 0x23, 0x5d,
-    0x86, 0x63, 0x35, 0x95, 0x24, 0x58, 0x8d, 0x5f, 0x84, 0x17, 0xff, 0xf6,
-    0x7a, 0x76, 0x34, 0xfd, 0x13, 0xb9, 0xcc, 0x2f, 0xd6, 0x5f, 0xfc, 0x7a,
-    0x89, 0x7a, 0x26, 0x20, 0xb0, 0xb2, 0xbc, 0x8a, 0x3e, 0x2f, 0x5f, 0xfb,
-    0x68, 0x98, 0xa3, 0x99, 0x12, 0x59, 0x70, 0x27, 0xd6, 0x5f, 0xcc, 0x76,
-    0x3d, 0x1c, 0x59, 0x7f, 0xdc, 0x2c, 0xef, 0x23, 0x5b, 0x2c, 0xbf, 0xbc,
-    0x7f, 0x71, 0xfe, 0x59, 0x7f, 0xb0, 0x79, 0xa9, 0x46, 0x96, 0x5e, 0xf1,
-    0xf5, 0x65, 0x42, 0x67, 0x92, 0x3e, 0x31, 0xa9, 0x8b, 0xbf, 0x39, 0xe1,
-    0x78, 0x86, 0x57, 0xe7, 0xf6, 0x7d, 0xd5, 0x97, 0xee, 0x83, 0xd0, 0x15,
-    0x97, 0xfe, 0x72, 0xd8, 0x5c, 0x21, 0xfa, 0x16, 0x5c, 0x7b, 0x2c, 0xac,
-    0x3d, 0x52, 0x3e, 0xbf, 0xc1, 0xfa, 0x5c, 0x12, 0x37, 0x56, 0x5e, 0x04,
-    0x6e, 0xac, 0xbf, 0xd3, 0x79, 0xf5, 0xa3, 0x1a, 0xca, 0xc3, 0xd3, 0x71,
-    0xfb, 0xfc, 0xff, 0x09, 0xa3, 0x6e, 0x2c, 0xbf, 0x9c, 0xb6, 0x6b, 0xf5,
-    0x65, 0x11, 0xf0, 0xf0, 0xd2, 0xf8, 0xfc, 0xed, 0x59, 0x7f, 0xc4, 0x59,
-    0xb7, 0x7b, 0x0d, 0x59, 0x52, 0x54, 0x99, 0x85, 0x13, 0x3e, 0xe8, 0x80,
-    0xa1, 0x19, 0xc8, 0x40, 0xf4, 0x84, 0x42, 0x1b, 0xf6, 0xb3, 0x86, 0x2a,
-    0xcb, 0xe6, 0xc6, 0xb8, 0xb2, 0xff, 0xf4, 0x0f, 0xc1, 0x60, 0x48, 0x1f,
-    0x83, 0xc5, 0x97, 0x46, 0xe8, 0xcf, 0xbc, 0x42, 0x2b, 0xd1, 0x3c, 0x5d,
-    0x65, 0xfc, 0x24, 0x04, 0x01, 0x6a, 0xcb, 0x8c, 0x96, 0x5f, 0x4a, 0x08,
-    0x0b, 0x28, 0x66, 0xdb, 0x05, 0x6d, 0x32, 0xcb, 0xe6, 0x4b, 0xc7, 0xcb,
-    0x2d, 0x04, 0x6e, 0x3a, 0x25, 0x53, 0x8f, 0xf4, 0xd6, 0x2f, 0xa3, 0xfc,
-    0x25, 0x95, 0x26, 0x48, 0xd0, 0xca, 0x30, 0xb8, 0x06, 0x3f, 0x21, 0x1c,
-    0x38, 0x66, 0x86, 0x9e, 0xa3, 0x5f, 0x6c, 0xab, 0x27, 0x7d, 0xfe, 0x12,
-    0xfc, 0x31, 0x09, 0x08, 0xb0, 0xe2, 0x9f, 0x23, 0xbe, 0x6b, 0x29, 0x3c,
-    0x67, 0x95, 0x97, 0x77, 0x8b, 0x28, 0xcf, 0x2a, 0x63, 0x3b, 0xe1, 0x20,
-    0x5e, 0x2c, 0xbb, 0xfe, 0xac, 0xbb, 0xff, 0x2c, 0xbe, 0xd6, 0xb3, 0x8b,
-    0x2e, 0xc9, 0x96, 0x5a, 0x53, 0x91, 0x1b, 0xb1, 0x23, 0x46, 0x1c, 0x60,
-    0x42, 0x2b, 0xf1, 0xf5, 0xcb, 0x16, 0x5f, 0xb4, 0x3c, 0xc2, 0x59, 0x7c,
-    0xc6, 0x9c, 0x55, 0x97, 0xfe, 0x3c, 0xf4, 0x6f, 0xe7, 0xa3, 0xe5, 0x95,
-    0x87, 0xc9, 0xba, 0x49, 0x7f, 0x7d, 0xa0, 0xfd, 0xd9, 0x2c, 0xba, 0x36,
-    0x59, 0x4e, 0x8f, 0x6e, 0x42, 0x28, 0x24, 0x82, 0x18, 0xdf, 0x85, 0xef,
-    0x73, 0x65, 0x97, 0xf3, 0xc7, 0xf9, 0xf4, 0x96, 0x52, 0xcb, 0xfc, 0x5a,
-    0xce, 0x61, 0xf9, 0x65, 0x32, 0x4d, 0xe6, 0x05, 0xdf, 0xff, 0x4b, 0xa5,
-    0x8f, 0xd2, 0xce, 0xf7, 0x05, 0x59, 0x7f, 0xb5, 0xa3, 0xef, 0xb2, 0x4b,
-    0x2f, 0x49, 0xf7, 0x16, 0x5f, 0xff, 0x60, 0xcf, 0xb8, 0xdf, 0x44, 0x01,
-    0xae, 0xb2, 0xec, 0xde, 0xb2, 0xff, 0x81, 0xec, 0x1b, 0x4f, 0x58, 0xb2,
-    0xa1, 0x13, 0xbb, 0x26, 0xe0, 0xc5, 0xfd, 0x11, 0xaf, 0x46, 0xf5, 0x97,
-    0xef, 0xcc, 0xa6, 0xdd, 0x59, 0x7f, 0x46, 0xfc, 0xf7, 0xa1, 0x65, 0xf7,
-    0x79, 0x93, 0x2c, 0xf1, 0xae, 0xbf, 0xbc, 0x33, 0xdf, 0x03, 0x59, 0x58,
-    0x7c, 0x4e, 0x67, 0x7d, 0xa3, 0x7d, 0x96, 0x5e, 0x3c, 0xfd, 0x65, 0x61,
-    0xbe, 0xe1, 0x15, 0xfe, 0x30, 0xeb, 0xd9, 0xbf, 0x8b, 0x2f, 0xff, 0xf6,
-    0x74, 0xfe, 0x91, 0x44, 0xee, 0x9e, 0x6e, 0x0f, 0xd8, 0xb2, 0xfb, 0x3a,
-    0x7c, 0x59, 0x7f, 0x4f, 0x53, 0x14, 0xf3, 0xb0, 0x56, 0x56, 0xea, 0x3d,
-    0x26, 0x35, 0xe3, 0x27, 0x48, 0x6f, 0xfc, 0x17, 0x6f, 0x0c, 0x9f, 0x4c,
-    0x2c, 0xa9, 0x2f, 0x2e, 0x0e, 0x31, 0xbc, 0x42, 0x60, 0xa8, 0x0d, 0x5f,
-    0x12, 0x1a, 0x74, 0xc6, 0x7a, 0x85, 0xe7, 0x8b, 0xff, 0x2e, 0x28, 0x5e,
-    0x71, 0x7b, 0xb1, 0x8a, 0x0a, 0x83, 0x7d, 0xde, 0x9c, 0x96, 0x5f, 0xd8,
-    0x29, 0x6f, 0xd4, 0x96, 0x5f, 0xff, 0xba, 0x7c, 0xdb, 0x05, 0xe1, 0xec,
-    0x4f, 0xf7, 0x56, 0x5f, 0xf4, 0xb3, 0xb8, 0x33, 0x2f, 0xd6, 0x5e, 0x17,
-    0x3c, 0xb2, 0xfe, 0xcd, 0x68, 0x2c, 0x69, 0x65, 0xfc, 0x52, 0x15, 0xfd,
-    0xc5, 0x97, 0xe6, 0x3c, 0xe4, 0x6b, 0x2d, 0xcc, 0x3d, 0x53, 0x2e, 0xbe,
-    0x19, 0x3b, 0x0b, 0x2f, 0xfe, 0x39, 0x3e, 0xb3, 0x7f, 0xc0, 0x3f, 0x96,
-    0x56, 0xc7, 0xd3, 0xd2, 0x2b, 0xe3, 0xe6, 0x0e, 0x15, 0x1a, 0xec, 0x45,
-    0x86, 0x1f, 0x2c, 0x39, 0xc1, 0x0e, 0xf6, 0x10, 0x82, 0x42, 0x3e, 0xff,
-    0xcf, 0xbb, 0xf8, 0x78, 0x65, 0xf4, 0x96, 0x5b, 0xf5, 0x97, 0xf8, 0x78,
-    0x46, 0x2f, 0x82, 0xb2, 0xff, 0xfb, 0xc7, 0x1d, 0x3f, 0xe2, 0x4c, 0xc5,
-    0x14, 0x54, 0x97, 0xff, 0x1c, 0x77, 0xf8, 0x93, 0x31, 0x45, 0x15, 0x25,
-    0x62, 0x27, 0xfc, 0xab, 0x5b, 0x23, 0xd3, 0xb0, 0xd2, 0xbf, 0xde, 0x0b,
-    0xb4, 0x6e, 0xd5, 0x94, 0x47, 0xb9, 0xd2, 0x9b, 0xe1, 0xe6, 0x30, 0x92,
-    0xf9, 0xff, 0x7e, 0xac, 0xbf, 0xed, 0x38, 0x27, 0x7a, 0x04, 0x25, 0x97,
-    0x83, 0x1a, 0x59, 0x77, 0x78, 0x33, 0xd7, 0x98, 0xee, 0xf9, 0x80, 0xff,
-    0xc5, 0x97, 0x10, 0x55, 0x10, 0xca, 0xfe, 0x86, 0xc7, 0x35, 0x8b, 0x2a,
-    0x47, 0x9f, 0x31, 0x1d, 0xef, 0x46, 0xcb, 0x2f, 0xdd, 0x89, 0x30, 0xd5,
-    0x97, 0x85, 0x14, 0x54, 0x97, 0xb0, 0x80, 0x91, 0x99, 0xa0, 0xbf, 0xf6,
-    0x6d, 0x83, 0x79, 0x14, 0x6c, 0xb2, 0xa1, 0x16, 0x9f, 0xa4, 0x91, 0x6d,
-    0xfb, 0xbe, 0x72, 0x61, 0x65, 0xfd, 0xf4, 0xb8, 0x4e, 0x05, 0x97, 0xcf,
-    0xbb, 0xde, 0x2c, 0xbc, 0x4c, 0xab, 0x3d, 0xac, 0xac, 0x3f, 0xbf, 0x8b,
-    0x9c, 0x96, 0xe6, 0x55, 0x65, 0x55, 0x97, 0xec, 0xef, 0x43, 0xb2, 0xcb,
-    0xff, 0x1e, 0xde, 0x37, 0x97, 0x4f, 0x65, 0x96, 0x93, 0x2a, 0xa2, 0x34,
-    0x89, 0x7a, 0x53, 0x7c, 0x3f, 0x60, 0x16, 0x5e, 0x7d, 0xd8, 0x59, 0x7e,
-    0xc1, 0xf9, 0xf7, 0x56, 0x5f, 0x8b, 0x07, 0x0d, 0x59, 0x53, 0xca, 0xf0,
-    0x74, 0x46, 0xc5, 0xb1, 0x08, 0xc8, 0xb1, 0xe5, 0x82, 0xff, 0x9d, 0x26,
-    0x23, 0xd4, 0x34, 0x5a, 0x5f, 0xe8, 0x51, 0xbc, 0x2e, 0xc8, 0xf0, 0x24,
-    0x5b, 0xc7, 0x85, 0x2a, 0xbf, 0x9b, 0x87, 0xa9, 0xa4, 0xb2, 0xff, 0xf9,
-    0x81, 0x1c, 0xbc, 0xf2, 0xe6, 0x36, 0x37, 0x56, 0x54, 0x22, 0x04, 0xcb,
-    0xaf, 0xa3, 0xa1, 0x11, 0x65, 0xee, 0x9c, 0x2c, 0xbb, 0x09, 0x65, 0x19,
-    0xb0, 0x08, 0xdd, 0xf8, 0xa3, 0xe8, 0xe2, 0xcb, 0xff, 0x61, 0x93, 0xf7,
-    0x82, 0xc1, 0x2c, 0xbd, 0xe7, 0xd4, 0x1f, 0x1f, 0x09, 0xef, 0x8f, 0x51,
-    0xd5, 0x97, 0xdc, 0xc8, 0x92, 0xca, 0x19, 0xe1, 0x11, 0x0d, 0xef, 0x67,
-    0xcb, 0x2f, 0xc3, 0xd1, 0xc3, 0x56, 0x5a, 0x24, 0x78, 0x84, 0x3b, 0x7d,
-    0x23, 0x80, 0x2c, 0xbb, 0xef, 0xd6, 0x5f, 0xcd, 0x8e, 0x7e, 0x60, 0x59,
-    0x7b, 0x90, 0xc7, 0xe7, 0x8f, 0xc1, 0x9b, 0xfc, 0x1c, 0xd7, 0xff, 0x99,
-    0x2c, 0xbf, 0x8b, 0xa7, 0xb1, 0x42, 0xcb, 0x71, 0x65, 0xd3, 0xce, 0xcb,
-    0x2a, 0x0f, 0x6a, 0x45, 0x8e, 0x23, 0x7f, 0xec, 0x69, 0x8f, 0x58, 0x37,
-    0x6a, 0xcb, 0xec, 0x68, 0x83, 0x59, 0x5e, 0x3e, 0x02, 0x3d, 0xbf, 0xf7,
-    0x84, 0xe6, 0x68, 0x0e, 0xe0, 0x54, 0x41, 0x8b, 0xff, 0xb6, 0x86, 0x33,
-    0x5d, 0xec, 0x67, 0x16, 0x58, 0xc6, 0x89, 0x12, 0x4c, 0xbf, 0xf7, 0x82,
-    0xec, 0x67, 0x7b, 0x9e, 0x59, 0x7f, 0xbd, 0x05, 0xdf, 0xdf, 0xab, 0x2f,
-    0xff, 0x4b, 0x51, 0x20, 0x78, 0xfc, 0x4e, 0xd5, 0x95, 0xc3, 0xfc, 0x09,
-    0x9d, 0xff, 0x00, 0xda, 0xd3, 0x9d, 0xc0, 0xac, 0xbf, 0xf7, 0x3f, 0x7f,
-    0xb8, 0x26, 0xbc, 0xeb, 0x2f, 0x83, 0xec, 0x02, 0xca, 0x92, 0x74, 0x63,
-    0x27, 0xd4, 0x2e, 0xc8, 0x8b, 0xa7, 0x73, 0xe8, 0x57, 0xff, 0x77, 0x9b,
-    0x40, 0x85, 0x1e, 0x3d, 0x96, 0x5f, 0xee, 0x46, 0xa4, 0x03, 0xd9, 0x65,
-    0x11, 0xfd, 0x71, 0x1a, 0xfe, 0x0b, 0x05, 0x9b, 0x05, 0x65, 0x41, 0xe8,
-    0x78, 0x86, 0xf7, 0x83, 0xba, 0xb2, 0xff, 0xf6, 0x9f, 0x7e, 0x10, 0x3c,
-    0x7f, 0x89, 0xd5, 0x95, 0x09, 0xdb, 0xca, 0x32, 0x96, 0x59, 0x08, 0x48,
-    0x2f, 0xb3, 0x09, 0x85, 0x95, 0xf2, 0xee, 0x27, 0x8d, 0x4a, 0x11, 0xdc,
-    0x84, 0x6f, 0x67, 0x03, 0x37, 0x11, 0xef, 0x14, 0x0a, 0xb2, 0xf8, 0xc0,
-    0x63, 0x59, 0x58, 0x6f, 0x7a, 0x39, 0x7d, 0x1d, 0x39, 0x96, 0x5f, 0xc1,
-    0x71, 0x02, 0xe2, 0x2c, 0xa9, 0x8f, 0x47, 0x44, 0x57, 0x6f, 0xc5, 0x95,
-    0x86, 0xed, 0xc8, 0xef, 0xfe, 0x79, 0x4e, 0xce, 0xe7, 0xa3, 0x5f, 0xac,
-    0xbb, 0xff, 0xd6, 0x5f, 0xf0, 0x3c, 0x7a, 0x23, 0xef, 0x16, 0x54, 0x91,
-    0x2e, 0xd4, 0x6f, 0xc6, 0x6f, 0xf7, 0xe7, 0xef, 0x67, 0xee, 0xb2, 0xff,
-    0x70, 0xf0, 0xb3, 0xe1, 0x56, 0x5f, 0xff, 0xec, 0xef, 0x5f, 0x45, 0x1f,
-    0x48, 0x4d, 0x7e, 0xd3, 0xe2, 0xca, 0xdd, 0x44, 0xb3, 0x4c, 0xef, 0xc1,
-    0xf8, 0x18, 0xd5, 0x97, 0xfc, 0xd3, 0x17, 0x08, 0x7e, 0x85, 0x97, 0xff,
-    0xa3, 0xbc, 0x08, 0x27, 0x79, 0xca, 0x21, 0x65, 0xde, 0x0a, 0xcb, 0xff,
-    0xf4, 0x8c, 0x87, 0xec, 0xf8, 0x47, 0x2e, 0x90, 0xd6, 0x5f, 0xff, 0xc6,
-    0x2f, 0x9c, 0x10, 0x43, 0xcf, 0xbb, 0xe7, 0x1a, 0xcb, 0xfd, 0x83, 0xf6,
-    0x7d, 0x9c, 0x59, 0x78, 0xc5, 0xdd, 0x59, 0x7f, 0xb3, 0x7f, 0x3b, 0xd8,
-    0x6a, 0xca, 0xd1, 0xea, 0xf8, 0x82, 0xa1, 0x52, 0x10, 0xc9, 0xb0, 0xa5,
-    0x83, 0x83, 0x4a, 0x98, 0x5f, 0x4a, 0xa4, 0xb7, 0xc8, 0x44, 0x5c, 0x29,
-    0xac, 0xbf, 0x34, 0x18, 0x40, 0x59, 0x50, 0x6f, 0x8c, 0x5e, 0xff, 0xe7,
-    0xdb, 0x8e, 0x38, 0xda, 0x25, 0x0b, 0x2f, 0xec, 0xe4, 0xfe, 0x6a, 0x16,
-    0x56, 0x91, 0x25, 0xc1, 0xf9, 0xf4, 0x4b, 0xe3, 0x82, 0x99, 0x65, 0x6c,
-    0xce, 0xf3, 0x92, 0x98, 0xe1, 0x07, 0x8e, 0x80, 0x65, 0xf8, 0x98, 0xe7,
-    0x8b, 0x26, 0x85, 0x63, 0x61, 0x58, 0xf0, 0xb6, 0xfc, 0xc7, 0x92, 0xc3,
-    0x3b, 0x1a, 0x98, 0xa6, 0x77, 0xfb, 0x9c, 0xc2, 0xfe, 0x7f, 0x16, 0x5f,
-    0x11, 0xee, 0x42, 0xcb, 0xe1, 0x0b, 0x38, 0xb2, 0xd3, 0x2c, 0xbf, 0xb9,
-    0x85, 0xfc, 0xfe, 0x2c, 0xa9, 0xc8, 0xbd, 0xc3, 0x67, 0x23, 0xfc, 0x8b,
-    0x82, 0x57, 0xdd, 0x77, 0x25, 0x95, 0xbc, 0xfa, 0xc5, 0x4b, 0xbf, 0xfd,
-    0xf4, 0x8f, 0x3c, 0xfe, 0xf4, 0x7d, 0xc5, 0x97, 0xfb, 0xbf, 0x85, 0xb1,
-    0x9d, 0x59, 0x4e, 0x7f, 0xe1, 0x4b, 0xbf, 0xfc, 0x5b, 0x4e, 0x98, 0xcb,
-    0x07, 0x84, 0xc2, 0xcb, 0xf8, 0xfe, 0xdc, 0xf4, 0x75, 0x65, 0xf8, 0x3c,
-    0x33, 0xf9, 0x65, 0xf8, 0xb3, 0xbe, 0x35, 0x97, 0x84, 0xc8, 0x59, 0x7b,
-    0xc1, 0x61, 0x65, 0xee, 0xc0, 0x8b, 0x2f, 0xf6, 0x0f, 0x4e, 0x0e, 0xfe,
-    0xb2, 0xfd, 0x84, 0x3f, 0x42, 0xca, 0xc3, 0xf7, 0xf0, 0xe8, 0xa6, 0x95,
-    0x09, 0xd5, 0xee, 0xa6, 0x4c, 0x63, 0xa2, 0x87, 0x26, 0x21, 0xce, 0x42,
-    0x56, 0xf8, 0x7a, 0x79, 0x2c, 0xbf, 0xff, 0xd8, 0x4f, 0xde, 0x66, 0xbf,
-    0xfe, 0x33, 0xee, 0xf0, 0xd6, 0x5d, 0x28, 0x59, 0x69, 0xf5, 0x95, 0x38,
-    0xd5, 0x60, 0xb5, 0x0d, 0x15, 0xbd, 0x84, 0x5d, 0x42, 0x3d, 0xde, 0x19,
-    0xf7, 0xa3, 0x53, 0x2c, 0xa9, 0xce, 0xcb, 0x29, 0x90, 0x81, 0x14, 0x93,
-    0x5d, 0xa3, 0x3f, 0x1c, 0x2b, 0xf2, 0x7a, 0xbc, 0x12, 0xc7, 0x3e, 0x84,
-    0x91, 0xcf, 0x28, 0xfa, 0x37, 0xa7, 0xa7, 0x8a, 0x7f, 0x28, 0x58, 0xa1,
-    0x48, 0x18, 0xf3, 0x05, 0x8d, 0x8a, 0x7c, 0x9a, 0xf7, 0xdb, 0x6f, 0x59,
-    0x7e, 0x07, 0xa3, 0xed, 0xc5, 0x97, 0x05, 0x96, 0xb2, 0xfd, 0xe7, 0xd3,
-    0x4d, 0x65, 0xe1, 0x23, 0x75, 0x65, 0xfc, 0x20, 0x3d, 0x1f, 0x6e, 0x2c,
-    0xa9, 0xc8, 0xc1, 0x91, 0x60, 0x06, 0xf8, 0x4e, 0x12, 0x0b, 0xc6, 0x58,
-    0xb2, 0xfe, 0xf1, 0xb2, 0xfd, 0x1b, 0x2c, 0xb0, 0xe4, 0x79, 0x80, 0x1a,
-    0xbb, 0xf1, 0x56, 0x5f, 0xde, 0x83, 0xdd, 0x69, 0xac, 0xa9, 0xc7, 0x90,
-    0x01, 0x9a, 0xf9, 0x32, 0xc3, 0x84, 0xc7, 0x5c, 0x2f, 0xec, 0x17, 0x30,
-    0x98, 0x59, 0x71, 0xec, 0xb2, 0xf3, 0xe7, 0x16, 0x5f, 0x9f, 0x63, 0x0c,
-    0x96, 0x5e, 0xff, 0xf8, 0x59, 0x4d, 0x3e, 0x1f, 0x0d, 0x91, 0x45, 0xec,
-    0x26, 0x16, 0x51, 0xa3, 0xbd, 0xa5, 0xae, 0xf1, 0xb8, 0x5d, 0x7f, 0xee,
-    0x6a, 0x3a, 0x4e, 0xd6, 0x9a, 0xcb, 0xff, 0xd1, 0xce, 0x43, 0x73, 0xa7,
-    0xcf, 0x3a, 0xcb, 0xc6, 0x5d, 0x59, 0x40, 0x3e, 0x3f, 0x24, 0x5f, 0xfc,
-    0xd8, 0xef, 0x1f, 0x35, 0xfb, 0x71, 0x65, 0xfc, 0x51, 0x26, 0xc1, 0xac,
-    0xaf, 0xcf, 0xbc, 0x91, 0x2f, 0xda, 0x76, 0xc0, 0x16, 0x5f, 0xb3, 0x79,
-    0x67, 0x16, 0x5f, 0xee, 0x9e, 0xf3, 0xec, 0xa1, 0x25, 0x9a, 0xb2, 0xfe,
-    0xc2, 0x63, 0x50, 0xcc, 0xcf, 0x14, 0x43, 0x4b, 0xb1, 0x85, 0x95, 0x39,
-    0x52, 0x26, 0x42, 0x80, 0xe1, 0x22, 0xe4, 0x44, 0x4f, 0xc6, 0xd9, 0xf4,
-    0x6b, 0xff, 0xcf, 0xbe, 0x30, 0x6f, 0x2c, 0xf1, 0x8a, 0xb2, 0xf0, 0x7e,
-    0x92, 0xcb, 0xe9, 0x69, 0xf7, 0xac, 0xa9, 0x22, 0x33, 0x49, 0x44, 0x3d,
-    0x7f, 0x8a, 0x45, 0x8d, 0x80, 0x2c, 0xbf, 0x1f, 0x8a, 0x24, 0xb2, 0xf3,
-    0xf0, 0xd6, 0x5b, 0x16, 0x5e, 0xcc, 0x61, 0x65, 0x9a, 0x33, 0x59, 0xb8,
-    0x21, 0x50, 0x8f, 0x7c, 0x2f, 0xd1, 0x8f, 0x89, 0x9d, 0x1e, 0xff, 0x8f,
-    0x7e, 0x68, 0x0e, 0xe0, 0x54, 0x61, 0xab, 0xd3, 0xe1, 0xea, 0xcb, 0x8f,
-    0x7a, 0xcb, 0xe7, 0xd3, 0x88, 0xb2, 0xec, 0x61, 0x65, 0xff, 0xd0, 0xd3,
-    0x1e, 0x13, 0x1e, 0x86, 0xac, 0xaf, 0x1e, 0xd7, 0x45, 0xe8, 0x69, 0x8e,
-    0x01, 0x19, 0xa4, 0x1c, 0x18, 0xeb, 0xe5, 0xc2, 0x79, 0x65, 0xfe, 0x39,
-    0x89, 0xc5, 0x11, 0xab, 0x29, 0x83, 0xcd, 0xf0, 0xc5, 0xff, 0xf1, 0xf7,
-    0xd1, 0xc8, 0xf4, 0x1e, 0xd0, 0xc2, 0xcb, 0xfd, 0xe8, 0x9a, 0x47, 0xa9,
-    0x2c, 0xbf, 0x14, 0xc5, 0x0d, 0x59, 0x7f, 0xba, 0x62, 0xcc, 0x4e, 0x2a,
-    0xcb, 0xbc, 0x6b, 0x2f, 0xfb, 0x37, 0xc0, 0xfd, 0x87, 0xd5, 0x97, 0xb8,
-    0xff, 0xac, 0xa2, 0x3d, 0x6e, 0x9c, 0xd6, 0xea, 0x23, 0x7a, 0xd9, 0x7f,
-    0x04, 0x4f, 0xff, 0x8f, 0x96, 0x5f, 0xa1, 0xbd, 0xc0, 0x2c, 0xbf, 0x44,
-    0xbf, 0x2c, 0x59, 0x71, 0xec, 0xb2, 0xa1, 0x51, 0x48, 0xd3, 0xf0, 0xd3,
-    0xe2, 0x73, 0x86, 0x14, 0xc4, 0xde, 0x32, 0x22, 0x7e, 0x93, 0xdf, 0x9f,
-    0xba, 0x8d, 0xeb, 0x2f, 0xa3, 0xe0, 0xee, 0xac, 0xbf, 0xff, 0x00, 0x3e,
-    0x60, 0xca, 0x3d, 0x02, 0xc1, 0x62, 0xca, 0x98, 0xfe, 0x88, 0x9a, 0xf8,
-    0xc7, 0xb8, 0x6b, 0x2a, 0x11, 0xd2, 0xf0, 0xa3, 0x14, 0x8a, 0xff, 0xbd,
-    0x12, 0x32, 0xc6, 0xc2, 0xcb, 0xe7, 0x1c, 0xb6, 0x59, 0x7f, 0xd9, 0xdf,
-    0x63, 0x49, 0xfa, 0xb2, 0xfe, 0xde, 0x7a, 0xfa, 0x37, 0x56, 0x50, 0xcf,
-    0xab, 0x0d, 0xeb, 0xc8, 0xae, 0x28, 0x46, 0xdc, 0x5f, 0xac, 0xbf, 0x36,
-    0x01, 0xb0, 0xd6, 0x5f, 0x4a, 0x1a, 0xeb, 0x2f, 0xda, 0xfd, 0xa7, 0xc5,
-    0x97, 0x77, 0x8c, 0x94, 0x45, 0x60, 0xbb, 0x94, 0x88, 0x43, 0x50, 0x8f,
-    0xd0, 0xc2, 0xc6, 0xdc, 0x59, 0x7f, 0x46, 0xd8, 0x46, 0xc2, 0xca, 0xd1,
-    0xbe, 0xe0, 0x8d, 0xff, 0xd0, 0x4f, 0xe8, 0xfd, 0x9e, 0xb9, 0xc4, 0x97,
-    0xb0, 0x10, 0xb2, 0xb6, 0x55, 0x90, 0x38, 0xf8, 0x71, 0x95, 0xa4, 0x3b,
-    0xd1, 0xaf, 0x36, 0x00, 0xb2, 0xfc, 0xf3, 0x1e, 0x71, 0x65, 0xf7, 0x23,
-    0x52, 0x59, 0x61, 0xce, 0x3c, 0x9e, 0x13, 0xd4, 0x22, 0x3d, 0xd9, 0x6f,
-    0xf8, 0x87, 0xe8, 0xef, 0x61, 0xab, 0x2e, 0x0e, 0xcb, 0x2f, 0xf7, 0xd2,
-    0xfb, 0x87, 0xd8, 0x59, 0x78, 0xfe, 0xe2, 0xca, 0xc3, 0xd2, 0x33, 0x5a,
-    0xc4, 0x61, 0x19, 0xc7, 0x9a, 0xae, 0xc0, 0x2c, 0xbb, 0x38, 0xb3, 0xa5,
-    0xb5, 0xee, 0xe7, 0x96, 0x56, 0x8f, 0x04, 0x24, 0xb7, 0xff, 0xc3, 0x9c,
-    0xe7, 0x9c, 0x8d, 0xb0, 0x8d, 0x85, 0x97, 0xfb, 0x4d, 0x8f, 0xba, 0xe0,
-    0x59, 0x7f, 0xff, 0x16, 0x77, 0xd9, 0x2c, 0x04, 0x03, 0xa4, 0xed, 0x59,
-    0x58, 0x8d, 0xc3, 0x50, 0xe1, 0xa5, 0xff, 0xb4, 0x72, 0x3e, 0x7d, 0x23,
-    0x25, 0x97, 0xc6, 0xd8, 0x99, 0x65, 0xff, 0xdc, 0x3f, 0x8b, 0x26, 0xd4,
-    0x77, 0x8b, 0x2f, 0xb3, 0x60, 0xc9, 0x65, 0x1a, 0x32, 0x26, 0x3e, 0xfc,
-    0x88, 0x54, 0x5b, 0xfd, 0xc8, 0x93, 0xec, 0xed, 0x59, 0x7c, 0xfa, 0x7f,
-    0x96, 0x5f, 0xdf, 0xec, 0xf2, 0x8d, 0xd5, 0x97, 0x86, 0x38, 0x59, 0x4c,
-    0x1f, 0x87, 0xc4, 0x41, 0x32, 0xa8, 0x4c, 0x4c, 0xcf, 0xde, 0x14, 0x77,
-    0xda, 0x8c, 0x6a, 0xcb, 0xb0, 0x55, 0x94, 0x9c, 0x43, 0x0b, 0xfb, 0x82,
-    0x46, 0xa1, 0xa9, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29,
-    0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x92, 0x2e, 0x4c, 0x67, 0xf3, 0xc0,
-    0x8c, 0xcf, 0x8c, 0xee, 0x0c, 0xdd, 0xec, 0x4e, 0x21, 0x85, 0xfc, 0xef,
-    0xd9, 0xa1, 0xa9, 0xc4, 0x30, 0x9c, 0x69, 0x2c, 0xcb, 0x4e, 0x21, 0x85,
-    0x27, 0x10, 0xc2, 0x93, 0x88, 0x61, 0x52, 0x36, 0x46, 0x33, 0x49, 0xc4,
-    0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29, 0x38, 0x86, 0x14, 0x9c,
-    0x43, 0x0a, 0x4e, 0x21, 0x85, 0x6c, 0x89, 0x61, 0x8c, 0x98, 0xcf, 0xe3,
-    0x3c, 0x19, 0xde, 0x33, 0x49, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x54, 0x8d,
-    0x97, 0x06, 0x69, 0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e, 0x21, 0x85,
-    0x27, 0x10, 0xc2, 0xa4, 0x7c, 0x9f, 0x8c, 0xf4, 0x67, 0x70, 0x66, 0x93,
-    0x88, 0x61, 0x49, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x2b,
-    0x63, 0xe4, 0x60, 0x67, 0x43, 0x3e, 0x19, 0xb3, 0x09, 0xc4, 0x30, 0xa4,
-    0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29, 0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a,
-    0x19, 0xf2, 0x7c, 0x33, 0xf8, 0xc8, 0x46, 0x69, 0x38, 0x86, 0x14, 0x9c,
-    0x43, 0x0a, 0x4e, 0x21, 0x85, 0xfb, 0xd1, 0xff, 0x31, 0x38, 0x86, 0x14,
-    0x9c, 0x43, 0x0a, 0x92, 0x26, 0x80, 0x33, 0xe1, 0x97, 0x19, 0xfc, 0xda,
-    0xc0, 0x4e, 0x21, 0x85, 0x27, 0x10, 0xc2, 0x93, 0x88, 0x61, 0x49, 0xc4,
-    0x30, 0xa4, 0xe2, 0x18, 0x54, 0x8f, 0x93, 0xe1, 0x93, 0x19, 0xde, 0x33,
-    0x49, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29, 0x38, 0x86,
-    0x15, 0x23, 0xe4, 0x18, 0xcf, 0x86, 0x48, 0x66, 0xde, 0x4e, 0x21, 0x85,
-    0x27, 0x10, 0xc2, 0x93, 0x88, 0x61, 0x69, 0x27, 0x10, 0xc2, 0x93, 0x88,
-    0x61, 0xf1, 0x7f, 0x49, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c,
-    0x29, 0x38, 0x86, 0x15, 0xb2, 0x37, 0xa4, 0x32, 0xc1, 0xc0, 0x0a, 0x66,
-    0x19, 0xfc, 0x67, 0xa3, 0x36, 0xc4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29,
-    0x38, 0x86, 0x16, 0x92, 0x71, 0x0c, 0x29, 0x38, 0x86, 0x1f, 0x17, 0xf4,
-    0x9c, 0x43, 0x0a, 0x4e, 0x21, 0x85, 0x42, 0x2b, 0x24, 0x32, 0x67, 0x1a,
-    0x29, 0x68, 0xcd, 0x27, 0x10, 0xc2, 0x93, 0x88, 0x61, 0x49, 0xc4, 0x30,
-    0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x2a, 0x0f, 0xf7, 0xe1, 0x9d, 0x0c,
-    0xb4, 0x64, 0x86, 0x69, 0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e, 0x21,
-    0x85, 0x68, 0xf2, 0xf8, 0x33, 0xd1, 0x9a, 0x4e, 0x21, 0x85, 0x27, 0x10,
-    0xc2, 0x93, 0x88, 0x61, 0x4d, 0x3c, 0xb2, 0x19, 0xe8, 0xcd, 0x9a, 0x9c,
-    0x43, 0x0a, 0x4e, 0x21, 0x85, 0x27, 0x10, 0xc2, 0xbf, 0x36, 0x41, 0x19,
-    0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29, 0x38, 0x86, 0x14, 0x9c, 0x43,
-    0x0a, 0x83, 0xe4, 0x98, 0x67, 0xc3, 0x21, 0x19, 0xa8, 0x66, 0x0a, 0x6d,
-    0x08, 0x19, 0x26, 0x8d, 0x57, 0x21, 0x6c, 0x08, 0x46, 0x7d, 0x08, 0x53,
-    0x85, 0x26, 0xe9, 0xf4, 0xd0, 0x84, 0xd4, 0x36, 0x1a, 0x95, 0xe8, 0x41,
-    0xbc, 0x28, 0xbf, 0x3b, 0x28, 0x7e, 0xf1, 0xa3, 0xb0, 0xca, 0x0c, 0x31,
-    0x77, 0xc2, 0x4c, 0x57, 0xa9, 0xf2, 0xe1, 0x14, 0x77, 0x21, 0x0d, 0x7e,
-    0x91, 0x46, 0x71, 0x38, 0x86, 0x0c, 0xd3, 0x97, 0xbc, 0x70, 0xd4, 0xe2,
-    0x18, 0x5f, 0x18, 0x1f, 0x4b, 0xc4, 0x31, 0x78, 0xc7, 0x8b, 0xc4, 0x31,
-    0x66, 0x7f, 0x23, 0x23, 0x49, 0x3e, 0x29, 0xe9, 0x75, 0xa3, 0x7b, 0x3e,
-    0x24, 0x4a, 0x7a, 0x1d, 0xe3, 0x2d, 0x96, 0x5f, 0xc6, 0x28, 0xf5, 0x1b,
-    0x2c, 0xa9, 0x1e, 0x5f, 0x87, 0x2e, 0x7f, 0x96, 0x5f, 0x44, 0xfc, 0x75,
-    0x65, 0xe3, 0xde, 0xcb, 0x59, 0x71, 0xee, 0x2c, 0xa0, 0x36, 0x18, 0xbf,
-    0x53, 0xea, 0xa6, 0x84, 0x1f, 0x88, 0x88, 0x5f, 0xa4, 0x9b, 0x84, 0x57,
-    0xd9, 0x33, 0x88, 0xb2, 0xff, 0xff, 0xd9, 0x84, 0x1e, 0x9f, 0x88, 0x2c,
-    0x16, 0x7d, 0xd8, 0xcd, 0x2c, 0xac, 0x44, 0x6c, 0xf9, 0x1d, 0xef, 0xc3,
-    0xc5, 0x97, 0xf9, 0xc8, 0x49, 0xa4, 0x64, 0xb2, 0xef, 0xe1, 0x65, 0xfd,
-    0xa7, 0x21, 0x23, 0xf5, 0x97, 0x3e, 0x96, 0x58, 0xd6, 0x00, 0xb6, 0xb0,
-    0x16, 0x59, 0xab, 0x2c, 0xcc, 0xd1, 0x39, 0xa1, 0x7f, 0x22, 0x38, 0xf8,
-    0x82, 0x37, 0xf7, 0xd2, 0xf4, 0x16, 0xcb, 0x29, 0xa9, 0xa7, 0xcf, 0xc3,
-    0x3f, 0x71, 0x46, 0xf6, 0x8f, 0x65, 0x97, 0xfa, 0x1b, 0x93, 0x41, 0x6c,
-    0xb2, 0x96, 0x56, 0x8f, 0x6f, 0xc3, 0xbf, 0x99, 0xdf, 0xb1, 0xbe, 0x8f,
-    0xd6, 0x5f, 0xfd, 0x39, 0xc0, 0x3f, 0x47, 0xf8, 0x5f, 0xac, 0xbb, 0xf8,
-    0x59, 0x58, 0x7b, 0xdf, 0xa3, 0xd4, 0x95, 0x6e, 0x64, 0x6d, 0xbf, 0xc2,
-    0x5f, 0xa6, 0x01, 0x84, 0x35, 0xff, 0xc4, 0x51, 0xb1, 0x61, 0xef, 0x89,
-    0xf5, 0x97, 0xa3, 0xee, 0x2c, 0xa7, 0x3e, 0x3e, 0x23, 0x5e, 0x7d, 0x42,
-    0xcb, 0xf1, 0xcf, 0xb9, 0x7e, 0xb2, 0xfc, 0x7f, 0x71, 0xfe, 0x59, 0x52,
-    0x3e, 0xe6, 0x8d, 0xf0, 0xaa, 0xfb, 0x7b, 0x60, 0xd6, 0x5f, 0xf0, 0x8e,
-    0x3e, 0x63, 0x63, 0x75, 0x65, 0xec, 0xf8, 0x55, 0x97, 0x7f, 0x9a, 0x3d,
-    0xa2, 0x3c, 0xbf, 0xfc, 0x7b, 0xa1, 0x60, 0xfe, 0xe6, 0x4d, 0x1d, 0x59,
-    0x5f, 0x1f, 0xe3, 0x4b, 0x6e, 0x0c, 0x2c, 0xbd, 0x9a, 0x92, 0xca, 0x19,
-    0xb2, 0xde, 0x2d, 0x78, 0x6e, 0x4b, 0x28, 0xcd, 0xf3, 0x91, 0xdf, 0xa0,
-    0x0e, 0x4c, 0x2c, 0xbf, 0xf9, 0xf5, 0xa7, 0xfe, 0x19, 0x8a, 0x28, 0xab,
-    0x2f, 0x48, 0xff, 0x59, 0x7f, 0xe6, 0x33, 0xee, 0x9f, 0x74, 0x16, 0xac,
-    0xb4, 0x4e, 0x45, 0x43, 0xa5, 0x74, 0x76, 0xa1, 0x56, 0xfe, 0x17, 0xbc,
-    0x3e, 0x79, 0x09, 0x3e, 0x8f, 0x86, 0x19, 0xf7, 0xff, 0x16, 0x1f, 0xa3,
-    0xef, 0xf3, 0xbc, 0x59, 0x7f, 0xf0, 0x44, 0x9a, 0x74, 0x08, 0xe0, 0x8f,
-    0x2c, 0xbf, 0xfb, 0x72, 0x34, 0x6d, 0xe6, 0x36, 0x37, 0x56, 0x53, 0x25,
-    0xd8, 0x09, 0xc4, 0xa0, 0xed, 0xa3, 0x25, 0x94, 0xa8, 0x21, 0xc7, 0xe9,
-    0x91, 0xb1, 0xb1, 0x09, 0x80, 0x4a, 0x4c, 0xfa, 0x36, 0xc3, 0x95, 0xf9,
-    0xbb, 0x0e, 0x39, 0xa1, 0xc7, 0xa8, 0x42, 0xb6, 0x1f, 0xde, 0x94, 0x12,
-    0xf5, 0x87, 0xc7, 0xf1, 0x84, 0x14, 0xb0, 0x1e, 0x42, 0xff, 0xb2, 0xdb,
-    0xa7, 0xd9, 0x44, 0x44, 0xdc, 0x49, 0xbd, 0xfe, 0xd8, 0xb2, 0xf3, 0x78,
-    0x05, 0x97, 0x88, 0x10, 0xb2, 0xfb, 0x3a, 0xff, 0x2c, 0xa9, 0xc7, 0xb4,
-    0x63, 0xba, 0x1b, 0xbe, 0x96, 0x6a, 0x16, 0x5f, 0xc2, 0xbe, 0xb4, 0xff,
-    0x2c, 0xbf, 0xff, 0x73, 0x5a, 0x39, 0xb9, 0xa8, 0xe9, 0x80, 0xc6, 0xb2,
-    0x9a, 0x8d, 0x6f, 0xcc, 0x08, 0x84, 0x52, 0xfb, 0xdd, 0x8e, 0x2c, 0xbd,
-    0xfc, 0xf9, 0x2c, 0xa6, 0x9b, 0xc2, 0x1c, 0xbd, 0xb1, 0x8d, 0x65, 0x82,
-    0xb2, 0xdf, 0x99, 0xae, 0x21, 0xdb, 0x32, 0x56, 0x5f, 0x68, 0xc9, 0x85,
-    0x97, 0xfb, 0xb0, 0x10, 0x78, 0xf4, 0xb2, 0xfe, 0xc0, 0x7a, 0x3e, 0x92,
-    0xcb, 0xf9, 0xbc, 0x36, 0x3a, 0x2a, 0xcb, 0xf4, 0x7d, 0xe8, 0x92, 0xca,
-    0x9e, 0xd1, 0xe1, 0xa1, 0x52, 0x22, 0xe9, 0x98, 0x85, 0xdb, 0x86, 0x17,
-    0xfd, 0x9f, 0x16, 0x77, 0xb9, 0xb2, 0xcb, 0xbe, 0xea, 0xcb, 0xf6, 0x16,
-    0xc7, 0xa5, 0x97, 0xee, 0xb9, 0x07, 0x16, 0x5f, 0xee, 0x63, 0x4f, 0xbe,
-    0x75, 0x96, 0x8c, 0x44, 0xbe, 0x86, 0x08, 0x9f, 0xa4, 0xd7, 0xa7, 0x34,
-    0xd6, 0x5f, 0xd9, 0x36, 0xa3, 0xbc, 0x59, 0x71, 0x35, 0x65, 0x48, 0xf8,
-    0x88, 0x7b, 0x85, 0xd7, 0xb7, 0x35, 0x0b, 0x2f, 0xfb, 0xc7, 0xaf, 0x3b,
-    0x24, 0x51, 0x56, 0x5f, 0xfe, 0x27, 0x17, 0x85, 0x9f, 0x4b, 0xa1, 0xd9,
-    0x65, 0xfe, 0xd1, 0xcc, 0x59, 0xbd, 0xd6, 0x5b, 0x93, 0x93, 0x0c, 0x82,
-    0xec, 0x1f, 0x98, 0xff, 0x49, 0x97, 0xfb, 0x45, 0x83, 0xf6, 0x12, 0xcb,
-    0xe7, 0x20, 0xe2, 0xcb, 0xf0, 0xf9, 0xc8, 0x6a, 0xca, 0xf9, 0x19, 0x6e,
-    0xa5, 0xf9, 0x89, 0x10, 0x5f, 0xf1, 0x43, 0xed, 0xe8, 0xd7, 0xeb, 0x2f,
-    0xf1, 0xe8, 0xbb, 0xdc, 0xd9, 0x65, 0xcf, 0xbd, 0x65, 0xfd, 0x22, 0x39,
-    0x7b, 0x16, 0x5f, 0xb6, 0x3d, 0x44, 0x96, 0x53, 0x08, 0x9f, 0x98, 0xcf,
-    0x43, 0x04, 0x59, 0x7e, 0x0f, 0x67, 0xf3, 0xab, 0x2f, 0x0c, 0xd8, 0x59,
-    0x50, 0x79, 0x18, 0x57, 0x7f, 0x3f, 0x84, 0xd3, 0xfe, 0xb2, 0xf6, 0xbf,
-    0x11, 0x65, 0xff, 0xc7, 0xd8, 0xef, 0x3c, 0xe7, 0xe0, 0xac, 0xa8, 0x3e,
-    0x27, 0x1f, 0xbe, 0x22, 0x0c, 0x96, 0x5f, 0xe2, 0x0f, 0x31, 0xb0, 0x05,
-    0x97, 0xfe, 0xf4, 0x6b, 0xf2, 0xc1, 0x5f, 0xf5, 0x97, 0xb3, 0x26, 0x59,
-    0x6c, 0x61, 0x11, 0xde, 0x32, 0xfd, 0x02, 0xf4, 0x7c, 0x2a, 0xcb, 0xf6,
-    0x82, 0xd7, 0x25, 0x95, 0xd3, 0xc5, 0x08, 0xf5, 0xf3, 0x63, 0x36, 0x59,
-    0x7e, 0xcd, 0xe5, 0x1f, 0x2c, 0xa3, 0x3c, 0xbe, 0x11, 0x5f, 0x41, 0x74,
-    0x0b, 0x28, 0x6b, 0x81, 0x39, 0x0d, 0x8d, 0x42, 0x19, 0xa4, 0x1e, 0x84,
-    0x8b, 0x90, 0x14, 0x2b, 0xf8, 0xf9, 0xd6, 0xd9, 0xf2, 0x1b, 0xf4, 0xff,
-    0xb3, 0xf7, 0x59, 0x7f, 0xbf, 0x13, 0x08, 0x7e, 0x85, 0x95, 0x09, 0x80,
-    0xb6, 0x14, 0x4e, 0x57, 0x7f, 0x73, 0x1a, 0x7e, 0x85, 0x97, 0xbe, 0x97,
-    0x16, 0x57, 0xc7, 0x95, 0xa2, 0xcb, 0xdc, 0xfc, 0x55, 0x97, 0xdf, 0x72,
-    0x3e, 0x59, 0x7f, 0x3c, 0xbb, 0xc8, 0x61, 0x65, 0xa4, 0x67, 0xa4, 0xd2,
-    0x4a, 0x84, 0x5d, 0xe1, 0x1b, 0xb8, 0xdf, 0xf0, 0xa5, 0x9a, 0xe7, 0xb0,
-    0x0b, 0x2f, 0xfe, 0x2c, 0xe6, 0x0e, 0x69, 0x46, 0xb6, 0x59, 0x46, 0x7f,
-    0xdd, 0x39, 0xbe, 0xc1, 0x99, 0x2c, 0xbe, 0x0b, 0xea, 0x4b, 0x2f, 0xa0,
-    0x2c, 0xbe, 0x24, 0xbf, 0x49, 0x98, 0xa2, 0x8a, 0xb2, 0x88, 0xf5, 0x02,
-    0x4d, 0x7f, 0xfd, 0xe3, 0x61, 0x88, 0xef, 0x20, 0x8b, 0x3a, 0xb2, 0xf8,
-    0xb1, 0xb0, 0xb2, 0xff, 0x47, 0x5f, 0xf7, 0xcd, 0x2c, 0xbf, 0xff, 0xba,
-    0x59, 0xfb, 0x97, 0xfd, 0x27, 0xfc, 0x5c, 0xf2, 0xcb, 0x88, 0x00, 0x47,
-    0xe9, 0xa7, 0xb4, 0x80, 0x43, 0x2b, 0xdd, 0x6f, 0x56, 0x5f, 0x82, 0x64,
-    0x7c, 0x59, 0x4e, 0x78, 0x7c, 0x1d, 0xbf, 0x73, 0x50, 0xe0, 0x59, 0x7e,
-    0x82, 0x04, 0x6f, 0x59, 0x58, 0x79, 0xfe, 0x27, 0xa9, 0xca, 0xb4, 0x06,
-    0x41, 0x8e, 0xcf, 0x18, 0xf7, 0xf0, 0x8b, 0xeb, 0x85, 0xfe, 0xfc, 0xb3,
-    0x7e, 0x8f, 0x8b, 0x2f, 0xf0, 0x84, 0x4e, 0x2b, 0xf9, 0x65, 0x32, 0x5b,
-    0x1b, 0xd8, 0x8d, 0x3b, 0x1e, 0xbe, 0x4e, 0x38, 0xc5, 0xb4, 0xbe, 0xd8,
-    0x68, 0x3c, 0xa7, 0x9f, 0xe7, 0x51, 0xca, 0x33, 0x9e, 0x42, 0xac, 0x32,
-    0xbc, 0x77, 0xb2, 0x8a, 0x6b, 0x79, 0x91, 0x3c, 0x59, 0x2b, 0x2f, 0x48,
-    0x9d, 0x65, 0xfe, 0xec, 0x37, 0xe9, 0x67, 0x56, 0x5b, 0xe6, 0x41, 0xfd,
-    0x41, 0x5e, 0x0d, 0xdf, 0xb7, 0x22, 0x5a, 0x85, 0x97, 0xba, 0xff, 0xac,
-    0xbf, 0x6b, 0x68, 0xd6, 0xcb, 0x2f, 0xec, 0xef, 0x02, 0x5d, 0x59, 0x50,
-    0x7a, 0xf8, 0x55, 0x7f, 0xe8, 0x2e, 0xf8, 0x2f, 0x29, 0x42, 0xcb, 0x6c,
-    0xb2, 0xfd, 0xa8, 0xf1, 0xb0, 0xb2, 0x98, 0x37, 0x40, 0x12, 0xbf, 0x07,
-    0xfc, 0x20, 0x2c, 0xbd, 0xa8, 0x99, 0x65, 0xe2, 0x79, 0x96, 0x5f, 0xb8,
-    0x2b, 0xfd, 0xc5, 0x94, 0x67, 0x8c, 0xe3, 0x97, 0xdc, 0xec, 0x35, 0x65,
-    0xff, 0x8a, 0x18, 0xf3, 0xf4, 0x4c, 0xfd, 0x65, 0xee, 0x6b, 0x16, 0x5e,
-    0x2c, 0x92, 0xcb, 0xf6, 0xbf, 0x20, 0xfe, 0xb2, 0xa0, 0xf1, 0x70, 0x6e,
-    0x8d, 0x10, 0x3c, 0x61, 0xb6, 0xea, 0xcb, 0xfb, 0x04, 0x89, 0x8f, 0x8b,
-    0x28, 0x8f, 0x0b, 0xa2, 0x95, 0x0a, 0xda, 0xb6, 0x2a, 0x93, 0xa0, 0xc8,
-    0x31, 0xdf, 0x44, 0x4d, 0x28, 0xf3, 0x1f, 0xe4, 0x04, 0x45, 0xd8, 0x60,
-    0xef, 0x64, 0xbf, 0xe8, 0x3f, 0x43, 0x76, 0xc1, 0x56, 0x5f, 0xfb, 0x90,
-    0x63, 0x28, 0x91, 0xfe, 0xb2, 0xfd, 0xe3, 0xd9, 0xc9, 0x65, 0xf8, 0x2c,
-    0x39, 0x7e, 0xb2, 0xef, 0x1a, 0xca, 0x83, 0xe6, 0xf1, 0x3e, 0xe1, 0x4d,
-    0xff, 0x6c, 0x59, 0x2f, 0x67, 0xfc, 0x59, 0x7f, 0xd0, 0x40, 0x9c, 0x32,
-    0x71, 0x56, 0x5f, 0xfb, 0x0b, 0xe9, 0x73, 0x41, 0x8f, 0xd6, 0x5e, 0xe6,
-    0x30, 0xb2, 0xe7, 0x6a, 0xcb, 0x67, 0x4d, 0x9e, 0xf1, 0xda, 0xd9, 0x1a,
-    0xa6, 0x74, 0xd7, 0x3b, 0xff, 0x6b, 0xc2, 0xb8, 0xf7, 0xf7, 0x00, 0xb2,
-    0xf7, 0xb3, 0x71, 0x65, 0xf4, 0x9f, 0xbc, 0x59, 0x6e, 0xce, 0x3c, 0x19,
-    0x87, 0xe9, 0xd1, 0x5c, 0x50, 0x83, 0xbc, 0x38, 0xde, 0xb2, 0xe8, 0x99,
-    0x65, 0xff, 0xc5, 0x02, 0x8c, 0xa3, 0xe9, 0x19, 0x2c, 0xad, 0x1e, 0xd1,
-    0x0b, 0xdf, 0x9b, 0x9e, 0x7d, 0xc5, 0x95, 0x87, 0x96, 0x64, 0x37, 0xef,
-    0x80, 0x7d, 0xe2, 0xcb, 0xff, 0xa7, 0x4d, 0x28, 0xd6, 0xd3, 0x85, 0xcf,
-    0x2c, 0xa8, 0x3f, 0x57, 0x29, 0xa8, 0x4e, 0x78, 0x64, 0xde, 0x86, 0x19,
-    0x42, 0x56, 0xff, 0x7b, 0x3b, 0x81, 0xd6, 0xcb, 0x2f, 0xbe, 0x01, 0xfc,
-    0xb2, 0x9a, 0x7b, 0x1c, 0x34, 0xbf, 0xc5, 0x12, 0x9b, 0xd1, 0xb2, 0xcb,
-    0x80, 0x6b, 0x2f, 0xf8, 0xca, 0x68, 0x06, 0xb3, 0xe5, 0x94, 0xe7, 0x9f,
-    0xc1, 0x6a, 0x1a, 0x29, 0x3b, 0x08, 0x3b, 0xf0, 0xd8, 0x60, 0x3f, 0x2c,
-    0xb3, 0x0e, 0x7a, 0x81, 0x28, 0xbf, 0xe8, 0xee, 0x68, 0x0e, 0xe0, 0x54,
-    0x5f, 0x0b, 0xff, 0xfd, 0xd3, 0xcf, 0x87, 0xe0, 0xf3, 0x01, 0x3b, 0xc7,
-    0x8d, 0x59, 0x7e, 0xcd, 0x47, 0xd2, 0x59, 0x74, 0x34, 0x08, 0xcf, 0xe2,
-    0x27, 0x58, 0xef, 0xf9, 0xd8, 0xe1, 0xf0, 0xfe, 0xea, 0xca, 0xf1, 0xfa,
-    0x91, 0xdd, 0xff, 0xf8, 0x81, 0x3b, 0xd0, 0x7a, 0x36, 0x9c, 0xfc, 0x35,
-    0x65, 0xe7, 0xd6, 0xca, 0x8b, 0xfd, 0x7f, 0xf6, 0x17, 0xe2, 0xe7, 0xdd,
-    0xec, 0x35, 0x65, 0xff, 0x8b, 0xba, 0xc8, 0xfa, 0x46, 0xd5, 0x97, 0xb3,
-    0x6d, 0xc5, 0x95, 0x09, 0xa3, 0xe1, 0x08, 0x16, 0x3c, 0x54, 0xe8, 0xc4,
-    0x7d, 0x7b, 0xa6, 0x2a, 0xcb, 0xf9, 0xf6, 0x10, 0x6f, 0xba, 0xb2, 0xba,
-    0x79, 0xe1, 0x1d, 0xbf, 0xda, 0xd6, 0x4c, 0xd8, 0xe2, 0xcb, 0xfe, 0x7e,
-    0xf0, 0xcb, 0xe9, 0x35, 0x65, 0xff, 0x1e, 0xb6, 0x0f, 0xff, 0xc7, 0x56,
-    0x5f, 0xf4, 0x66, 0xa7, 0x48, 0xfe, 0x92, 0xca, 0x92, 0x60, 0xd8, 0x45,
-    0xf9, 0xa7, 0x0e, 0x7a, 0x79, 0x7f, 0xff, 0xbc, 0xfc, 0x38, 0xe4, 0xee,
-    0xfb, 0x1b, 0x80, 0x7d, 0x2c, 0xba, 0x37, 0x16, 0x5f, 0x73, 0x8e, 0xd5,
-    0x95, 0xe4, 0x4e, 0x7e, 0xc3, 0xd1, 0x9b, 0xfd, 0xf7, 0x44, 0xf7, 0xb3,
-    0x75, 0x65, 0xfb, 0x0f, 0x68, 0x61, 0x65, 0xb6, 0xc3, 0xe1, 0xf1, 0xcd,
-    0xf7, 0xd2, 0xeb, 0xac, 0xbf, 0xfe, 0x18, 0x3c, 0x65, 0x9b, 0xde, 0x5c,
-    0x31, 0xac, 0xbf, 0xb9, 0xd2, 0x8c, 0xf9, 0x65, 0x62, 0x28, 0x1c, 0x8c,
-    0x2a, 0x17, 0xff, 0xb3, 0x9e, 0x73, 0xec, 0x34, 0x9d, 0x85, 0x97, 0xef,
-    0xf9, 0xdc, 0xf2, 0xcb, 0xf8, 0x5e, 0xe7, 0xa5, 0x8b, 0x2a, 0x0f, 0x5d,
-    0xca, 0x6a, 0x13, 0xb5, 0x94, 0x32, 0x30, 0xb8, 0xa1, 0x3f, 0x7f, 0x4e,
-    0x1e, 0x67, 0xfc, 0x59, 0x7f, 0xfe, 0xee, 0x6b, 0x63, 0xe1, 0xef, 0xf1,
-    0xe7, 0xdd, 0x59, 0x68, 0x6a, 0x22, 0x08, 0xc2, 0xfd, 0xcc, 0x6b, 0xfc,
-    0xb2, 0xf3, 0x75, 0xb2, 0xca, 0xc3, 0xc6, 0x32, 0x8b, 0xff, 0x76, 0x39,
-    0xc8, 0x3d, 0x9f, 0xab, 0x2f, 0xf8, 0xf0, 0x86, 0xc1, 0xe6, 0x96, 0x51,
-    0xa6, 0x05, 0xa6, 0xde, 0x90, 0x6e, 0x1f, 0x5f, 0xf7, 0x33, 0x6e, 0x19,
-    0x3e, 0xcb, 0x2e, 0xcf, 0x96, 0x56, 0x1e, 0x87, 0x4e, 0x6f, 0xe7, 0xd7,
-    0xd2, 0xce, 0xac, 0xbf, 0xf7, 0x78, 0x7a, 0xe9, 0x05, 0xe4, 0xb2, 0xff,
-    0xfc, 0x7c, 0xc1, 0xfb, 0x3a, 0x79, 0xcd, 0xb0, 0x55, 0x97, 0xff, 0x9b,
-    0x13, 0xf8, 0x12, 0xcc, 0xdf, 0x1f, 0x2c, 0xbf, 0xf4, 0x66, 0xb3, 0x5f,
-    0xb4, 0xf8, 0xb2, 0xf3, 0xfd, 0xb8, 0xb2, 0xfe, 0x7e, 0xf2, 0x33, 0x65,
-    0x95, 0x09, 0xcc, 0xe1, 0x70, 0x0f, 0x8d, 0x54, 0x93, 0x77, 0x9f, 0x0a,
-    0x41, 0x7e, 0xfd, 0xfe, 0x96, 0x2c, 0xbf, 0xd1, 0xf7, 0x0c, 0xbe, 0x92,
-    0xca, 0x83, 0xdd, 0x69, 0x4d, 0xff, 0x06, 0x1b, 0xcc, 0x6c, 0x6e, 0xac,
-    0xbf, 0xf6, 0xb6, 0xc1, 0xe7, 0xbd, 0x9b, 0xab, 0x2c, 0xc2, 0xcb, 0xfd,
-    0xde, 0x09, 0xbe, 0x33, 0xe5, 0x95, 0x07, 0x92, 0x42, 0x57, 0xfe, 0xd7,
-    0x1a, 0x26, 0x68, 0xe2, 0x65, 0x95, 0x87, 0xc0, 0x12, 0x0a, 0xc4, 0xc3,
-    0x39, 0x0e, 0xbb, 0xfb, 0x8f, 0x22, 0x86, 0xac, 0xbc, 0x51, 0xba, 0xb2,
-    0xff, 0xfa, 0x51, 0xad, 0xba, 0x6c, 0x73, 0x8e, 0x52, 0x59, 0x7f, 0x6d,
-    0xcc, 0x6c, 0x6e, 0xac, 0xa9, 0x91, 0x04, 0x22, 0x8d, 0x69, 0x1e, 0x3c,
-    0x2c, 0x16, 0x14, 0x17, 0x8f, 0xc6, 0xb2, 0xe1, 0xc9, 0x65, 0xe2, 0xc9,
-    0x2c, 0xb4, 0xb4, 0x6c, 0xba, 0x2f, 0x7c, 0xde, 0x9e, 0xcb, 0x2b, 0x0f,
-    0x28, 0xc9, 0xef, 0xfe, 0xdf, 0xd6, 0x20, 0xa5, 0x9e, 0x36, 0xac, 0xbb,
-    0x6e, 0xac, 0xbf, 0xdb, 0xfc, 0xf2, 0x8c, 0x25, 0x95, 0x07, 0x97, 0x83,
-    0x17, 0xd2, 0x7d, 0x49, 0x65, 0xff, 0xe8, 0xd3, 0xf4, 0x3d, 0x3e, 0xf3,
-    0xc6, 0xb2, 0xd2, 0x98, 0xfa, 0xfc, 0x45, 0x7f, 0x60, 0xa2, 0x79, 0xfa,
-    0xb2, 0xfe, 0x93, 0x7a, 0x41, 0x99, 0x65, 0xff, 0xf0, 0x92, 0x8d, 0xe6,
-    0x5f, 0xe8, 0xe1, 0xb8, 0x92, 0xb4, 0x88, 0x0e, 0x97, 0xdf, 0x78, 0x4f,
-    0xba, 0xb2, 0xfd, 0x8d, 0xc3, 0xde, 0xb2, 0xf6, 0xd3, 0x6e, 0xac, 0xb0,
-    0xab, 0x2a, 0x13, 0x7c, 0xd8, 0xa7, 0x21, 0x5e, 0x02, 0x33, 0x25, 0x09,
-    0x44, 0xf9, 0x15, 0xdd, 0xc5, 0x97, 0xed, 0x1e, 0xce, 0xd5, 0x4c, 0x26,
-    0xbe, 0xe8, 0x61, 0xd5, 0x30, 0x9a, 0xef, 0xe1, 0x54, 0x09, 0xaf, 0xf1,
-    0x3b, 0x1d, 0x8d, 0x7e, 0xaa, 0x04, 0xd7, 0xfb, 0x99, 0xe3, 0xe0, 0x76,
-    0x54, 0xc2, 0x6b, 0xb0, 0x6a, 0x98, 0x4d, 0x70, 0xa2, 0xae, 0x61, 0x35,
-    0x62, 0x6a, 0x5f, 0x1a, 0x99, 0x73, 0x49, 0x38, 0x83, 0xbd, 0x04, 0x52,
-    0x3b, 0x75, 0x33, 0x09, 0x8c, 0xcf, 0x9e, 0xbe, 0x54, 0x02, 0x2c, 0x79,
-    0xf7, 0xd8, 0x30, 0x92, 0xca, 0x33, 0xce, 0x72, 0xdb, 0xff, 0xf7, 0xed,
-    0x79, 0x73, 0xd1, 0xbf, 0x04, 0x1b, 0xc9, 0x65, 0x42, 0xf5, 0xc1, 0x9b,
-    0x7a, 0x12, 0xee, 0x40, 0x50, 0x91, 0xe4, 0xa0, 0x7e, 0xca, 0xba, 0x09,
-    0x05, 0xff, 0xda, 0x91, 0x3b, 0x13, 0x48, 0xf5, 0x25, 0x97, 0xcf, 0xbf,
-    0x05, 0x59, 0x7f, 0xfe, 0xf3, 0xcb, 0xd1, 0x07, 0xde, 0x19, 0x7d, 0x25,
-    0x97, 0xa6, 0x8e, 0x2c, 0xbc, 0x5f, 0xb5, 0x65, 0xff, 0x40, 0x7a, 0x47,
-    0xbc, 0x46, 0xac, 0xba, 0x1a, 0xb2, 0xec, 0xe4, 0x22, 0x2f, 0x07, 0x74,
-    0x3b, 0x3e, 0x77, 0x58, 0x9c, 0x96, 0x91, 0x9c, 0x90, 0xa1, 0xbf, 0x7f,
-    0x74, 0x2f, 0xce, 0x75, 0x65, 0xfb, 0x91, 0x9f, 0xc2, 0xcb, 0xf3, 0xff,
-    0xe2, 0xcf, 0x8f, 0x57, 0xa5, 0xd7, 0xd8, 0x7a, 0x61, 0x65, 0xdb, 0x69,
-    0x65, 0xdf, 0xcc, 0xb2, 0xff, 0xe6, 0xcd, 0x27, 0x2d, 0x87, 0x05, 0xb2,
-    0xca, 0x83, 0xf7, 0x18, 0xc6, 0x0c, 0xde, 0xce, 0x49, 0x65, 0xf1, 0xf9,
-    0xda, 0xb2, 0xfb, 0x51, 0xcd, 0x96, 0x56, 0x8f, 0x83, 0xa3, 0x82, 0x10,
-    0xd4, 0x37, 0xe4, 0x9b, 0x46, 0x1e, 0x39, 0x4f, 0x99, 0x09, 0xe6, 0x23,
-    0x1a, 0x04, 0xab, 0x3f, 0xa3, 0xa9, 0x38, 0x73, 0xcd, 0x29, 0x1f, 0x51,
-    0xe7, 0xb6, 0x12, 0x1e, 0x8e, 0xeb, 0xf8, 0x60, 0x91, 0x0f, 0x23, 0x47,
-    0xec, 0xfe, 0x8e, 0xf9, 0x43, 0x42, 0xc2, 0x56, 0x7c, 0xfc, 0x48, 0x4c,
-    0xee, 0x42, 0x36, 0xfb, 0x66, 0xf7, 0x8b, 0x2f, 0x46, 0x12, 0xcb, 0xb3,
-    0x8b, 0x2a, 0x46, 0xc3, 0xf1, 0xab, 0xfa, 0x53, 0x4a, 0x0b, 0xab, 0x2f,
-    0xec, 0x91, 0x05, 0xf8, 0xb2, 0xfb, 0xee, 0x1c, 0x2c, 0xbf, 0xd8, 0x5b,
-    0x9d, 0x32, 0x61, 0x65, 0x7c, 0x8b, 0x1d, 0x17, 0x78, 0xb3, 0xf2, 0x2b,
-    0xec, 0xd1, 0xb0, 0xb2, 0xf0, 0xbb, 0x35, 0x65, 0xff, 0x7a, 0x1a, 0x4f,
-    0x2c, 0xf2, 0xca, 0x84, 0x5b, 0x8c, 0xff, 0x08, 0xb8, 0x3f, 0x7f, 0x7a,
-    0x04, 0x2f, 0xbf, 0x59, 0x76, 0x6e, 0x2c, 0xbe, 0x8f, 0x09, 0xc5, 0x95,
-    0x3c, 0x9b, 0xc9, 0x0c, 0xde, 0xcc, 0x15, 0x65, 0xc6, 0xc2, 0xca, 0xd8,
-    0xd9, 0x98, 0xe5, 0xfb, 0xb9, 0x31, 0xb5, 0x65, 0xfa, 0x3e, 0xff, 0xf8,
-    0x59, 0x50, 0x7a, 0x44, 0x51, 0x7e, 0x8d, 0xf0, 0x5d, 0x59, 0x7e, 0x3d,
-    0xfd, 0x3d, 0x96, 0x5f, 0xbb, 0xe8, 0xd4, 0x96, 0x5f, 0xfb, 0x1b, 0x05,
-    0x1f, 0xb5, 0xe4, 0xb2, 0xff, 0xcd, 0x23, 0x62, 0x3b, 0xc3, 0xd2, 0xcb,
-    0xe9, 0x77, 0x00, 0xb2, 0xb0, 0xf8, 0x1c, 0xfa, 0xe2, 0x85, 0x97, 0xfd,
-    0xe7, 0x94, 0x4c, 0x50, 0xd5, 0x97, 0xe2, 0xc1, 0x32, 0x65, 0x97, 0xff,
-    0xec, 0x07, 0xf0, 0xdc, 0xe9, 0xf3, 0x30, 0x98, 0x59, 0x7f, 0x34, 0xe1,
-    0xae, 0x4b, 0x2b, 0xc7, 0xff, 0xfa, 0xa5, 0xff, 0xc6, 0xd1, 0x85, 0xf5,
-    0x2c, 0xfb, 0xab, 0x2c, 0x58, 0x7d, 0x00, 0x23, 0xbf, 0xf3, 0x97, 0xff,
-    0x77, 0x51, 0x82, 0xac, 0xbf, 0xf7, 0x3c, 0x73, 0xbe, 0x94, 0x66, 0xcb,
-    0x2d, 0x9b, 0xa8, 0x82, 0xfd, 0x02, 0xff, 0xbc, 0xed, 0xf1, 0xc7, 0xd2,
-    0x59, 0x7d, 0xe7, 0x76, 0xac, 0xbe, 0x7f, 0x78, 0xd6, 0x51, 0x1e, 0x16,
-    0xf2, 0x1b, 0xf1, 0x4a, 0x7d, 0xf6, 0x59, 0x50, 0x79, 0xc2, 0x11, 0xd4,
-    0x27, 0x7f, 0x28, 0x54, 0x19, 0x67, 0xf0, 0xc9, 0xb9, 0x83, 0x59, 0x5b,
-    0x2e, 0x68, 0x0c, 0x80, 0x05, 0x1f, 0x15, 0x6e, 0x94, 0x6a, 0x13, 0xad,
-    0x20, 0xf0, 0xa9, 0x1c, 0x76, 0x56, 0x74, 0xfa, 0x3d, 0xfe, 0xf7, 0xd2,
-    0xe7, 0xb3, 0x65, 0x97, 0xfc, 0xfe, 0x98, 0xcb, 0xd9, 0xf2, 0xca, 0x83,
-    0xef, 0xc3, 0x6b, 0xc1, 0xfb, 0x65, 0x97, 0xe9, 0xa5, 0x1d, 0xe2, 0xcb,
-    0xb9, 0xfa, 0xca, 0xf1, 0xf0, 0x7e, 0x3f, 0x3e, 0x53, 0x7f, 0xff, 0xfd,
-    0xec, 0x2f, 0xf0, 0xbb, 0xec, 0xf4, 0x64, 0xc7, 0xa9, 0xbc, 0x7f, 0x75,
-    0x65, 0xfd, 0xa3, 0x07, 0xb2, 0x65, 0x97, 0xff, 0xc5, 0x93, 0x3f, 0xf9,
-    0xd8, 0xde, 0x65, 0xfa, 0xca, 0x69, 0xff, 0xf4, 0xba, 0xb1, 0x31, 0xf7,
-    0x87, 0xed, 0xf1, 0x46, 0x0a, 0xb2, 0xf7, 0xdc, 0x75, 0x97, 0xdc, 0x8d,
-    0x42, 0xca, 0x83, 0x7d, 0xd1, 0xda, 0x87, 0x5c, 0x53, 0xb4, 0x2b, 0x64,
-    0x72, 0x38, 0x51, 0xe5, 0x7e, 0xaa, 0x08, 0xe5, 0x7e, 0x54, 0x38, 0xe2,
-    0xb7, 0x4e, 0xe6, 0x6c, 0xd2, 0xcb, 0xce, 0xa1, 0x94, 0x63, 0xbd, 0x84,
-    0x00, 0x63, 0x52, 0xde, 0x4e, 0x22, 0xfd, 0xff, 0xf1, 0x96, 0x36, 0x04,
-    0x20, 0xc8, 0xb1, 0xab, 0x2f, 0xc4, 0x19, 0x67, 0x16, 0x5f, 0xf6, 0x0f,
-    0xd1, 0xdf, 0x47, 0x16, 0x5c, 0x33, 0xc3, 0xdf, 0x22, 0x7b, 0xfe, 0xd6,
-    0xa0, 0x1e, 0xf9, 0xf7, 0x56, 0x5e, 0x28, 0xe2, 0xcb, 0xec, 0x2c, 0x6a,
-    0xca, 0x59, 0x50, 0x78, 0xd2, 0x1b, 0x09, 0x05, 0xfc, 0x00, 0xb8, 0xdb,
-    0x0b, 0x2f, 0xfb, 0xc7, 0x2f, 0x3c, 0x8d, 0xab, 0x2f, 0xfd, 0xc3, 0x2f,
-    0xa5, 0xd3, 0xe1, 0xac, 0xac, 0x3f, 0x6e, 0x9c, 0x5f, 0xcf, 0xdf, 0x40,
-    0x59, 0x6b, 0x2f, 0xfc, 0x6d, 0xc1, 0xf8, 0xf8, 0x58, 0xb2, 0xf9, 0xb0,
-    0x38, 0x59, 0x44, 0x7b, 0xbc, 0x3c, 0xa9, 0x2a, 0xfb, 0xc8, 0x56, 0x19,
-    0x5c, 0xd0, 0x83, 0xd1, 0x73, 0x61, 0x46, 0x44, 0x3d, 0x84, 0x75, 0xf7,
-    0xb3, 0xf7, 0x59, 0x7c, 0x51, 0xa9, 0x2c, 0xbf, 0xef, 0x44, 0x8c, 0x88,
-    0x3f, 0x2c, 0xbf, 0xe8, 0x91, 0xf6, 0x50, 0x5f, 0xac, 0xbf, 0xe8, 0xce,
-    0x89, 0xff, 0xf1, 0xf2, 0xcb, 0xd8, 0x4c, 0x2c, 0xb6, 0xa1, 0x1d, 0x38,
-    0x43, 0xa3, 0x86, 0x9c, 0x32, 0xcf, 0x2f, 0xe2, 0x80, 0x6a, 0x24, 0xb2,
-    0xff, 0xf3, 0x9f, 0x64, 0x12, 0xef, 0x3c, 0xf2, 0x58, 0x21, 0xac, 0xba,
-    0x3c, 0xb2, 0xbc, 0x7e, 0x1b, 0xd6, 0xaf, 0xfd, 0xc1, 0x3a, 0x64, 0x19,
-    0x67, 0x16, 0x5c, 0x3e, 0x2c, 0xad, 0xd3, 0xfa, 0xf1, 0x21, 0x1f, 0xdf,
-    0xff, 0xd9, 0xf6, 0x71, 0xcb, 0xc7, 0x1d, 0xf0, 0x5d, 0xab, 0x2a, 0x72,
-    0xaf, 0xd8, 0x8c, 0x2d, 0xe3, 0x68, 0x23, 0x1b, 0xcd, 0x3c, 0x59, 0x7e,
-    0x0b, 0x4f, 0xd0, 0xb2, 0xfd, 0x9a, 0x04, 0x62, 0xca, 0x23, 0xcd, 0x10,
-    0x9e, 0xff, 0xb1, 0xb9, 0xa3, 0xd9, 0xda, 0xb2, 0xfd, 0xd7, 0x76, 0xf1,
-    0x65, 0xd9, 0xb2, 0xcb, 0xfe, 0x28, 0xfa, 0x7d, 0x8e, 0xe7, 0x96, 0x5d,
-    0xd9, 0xf5, 0x96, 0x76, 0x9e, 0xb9, 0x1e, 0xdf, 0xff, 0x9c, 0xba, 0xef,
-    0xe2, 0x8e, 0xf0, 0x5c, 0xf2, 0xcb, 0xfc, 0x26, 0xb3, 0x7c, 0x14, 0x96,
-    0x5f, 0xfc, 0xde, 0x3c, 0xb5, 0x1c, 0x82, 0xd9, 0x65, 0xff, 0x47, 0x7d,
-    0x8d, 0xcd, 0x62, 0xcb, 0xf7, 0x7c, 0x71, 0xc5, 0x97, 0xb6, 0x72, 0xd1,
-    0xef, 0x70, 0xde, 0xff, 0xa3, 0xfe, 0x0c, 0x2f, 0xa9, 0x2c, 0xbd, 0xae,
-    0x71, 0x71, 0x01, 0xaf, 0x80, 0xee, 0x05, 0x44, 0x06, 0x66, 0x6a, 0xad,
-    0x92, 0x45, 0x26, 0x99, 0x2f, 0xfa, 0x3c, 0x03, 0xe3, 0x9e, 0xcb, 0x2d,
-    0x13, 0x8f, 0x83, 0x45, 0x17, 0x9a, 0xf2, 0x59, 0x5e, 0x3c, 0x5f, 0xca,
-    0x6e, 0x7f, 0xd6, 0x54, 0x1b, 0xae, 0x91, 0xd8, 0x0b, 0x2b, 0x46, 0xc4,
-    0x88, 0x2b, 0x15, 0x54, 0xbc, 0x28, 0x84, 0x8f, 0x9e, 0x86, 0xb8, 0xc1,
-    0xf1, 0xc6, 0x89, 0xfc, 0xdd, 0xf9, 0x31, 0x29, 0xf6, 0x56, 0xf5, 0xf0,
-    0xfd, 0x13, 0xeb, 0x2f, 0xff, 0xe3, 0x19, 0x67, 0x23, 0x53, 0xb9, 0xe7,
-    0x1c, 0x0d, 0x65, 0xed, 0xf1, 0xe5, 0x95, 0x0b, 0xbe, 0xf8, 0xd0, 0x73,
-    0x90, 0x4e, 0xdf, 0xc2, 0x51, 0x16, 0xef, 0xf8, 0xb6, 0xe4, 0x35, 0xfe,
-    0xea, 0xcb, 0x9f, 0xe5, 0x97, 0xbc, 0xfb, 0xab, 0x2f, 0xa3, 0xf9, 0xfc,
-    0x59, 0x7c, 0xd6, 0xbf, 0x56, 0x56, 0x22, 0xdd, 0xa7, 0x5f, 0x8b, 0xf4,
-    0x7c, 0x42, 0x5b, 0xfb, 0x37, 0x1d, 0xfd, 0xc5, 0x97, 0xff, 0x67, 0x3a,
-    0xff, 0x09, 0xb9, 0x05, 0x25, 0x97, 0xff, 0xf8, 0xc3, 0xb4, 0xce, 0xfb,
-    0x77, 0x26, 0x28, 0x6f, 0x9d, 0x65, 0xfe, 0x2d, 0x86, 0x7a, 0x8d, 0xeb,
-    0x2f, 0x8b, 0xbf, 0x85, 0x65, 0xf9, 0xac, 0x86, 0x43, 0x22, 0x7a, 0x59,
-    0x7f, 0xff, 0x4b, 0x38, 0x7a, 0xd1, 0xb4, 0x4e, 0xfb, 0x05, 0xea, 0xca,
-    0x84, 0x77, 0xe1, 0xa9, 0x91, 0xb9, 0xd5, 0xfb, 0x6f, 0x3f, 0xa1, 0x65,
-    0xff, 0xa0, 0xfd, 0xec, 0xef, 0xb2, 0x4b, 0x2f, 0xf6, 0x14, 0xb3, 0x82,
-    0x35, 0x65, 0xd8, 0x5a, 0x3f, 0x0e, 0x9e, 0xd3, 0xa3, 0x10, 0x58, 0x4c,
-    0x5f, 0xfe, 0x96, 0x7d, 0x21, 0x23, 0xf6, 0x62, 0x8a, 0x2a, 0x4b, 0xf3,
-    0x45, 0xc3, 0xde, 0xb2, 0xf4, 0xb0, 0xa6, 0x3f, 0xd1, 0x14, 0xea, 0x11,
-    0xb2, 0xf0, 0xa5, 0xbf, 0xff, 0x3e, 0xa4, 0x3f, 0x47, 0x0b, 0x05, 0x7d,
-    0x30, 0xb2, 0xa1, 0x71, 0x94, 0x69, 0x78, 0x5f, 0xa4, 0x8f, 0x46, 0xa2,
-    0x51, 0xeb, 0x04, 0x9a, 0xff, 0x8c, 0xa5, 0xc6, 0x55, 0x9e, 0x99, 0x13,
-    0xd2, 0xcb, 0xe9, 0xb9, 0x93, 0x2c, 0xbf, 0x7f, 0x1d, 0xcd, 0xd5, 0x97,
-    0xfc, 0x39, 0xf3, 0x61, 0x88, 0x2e, 0xac, 0xbf, 0xb9, 0xad, 0x1c, 0xdc,
-    0x59, 0x7f, 0xa3, 0x34, 0x07, 0x70, 0x2a, 0x20, 0x95, 0xff, 0x47, 0x73,
-    0x40, 0x77, 0x02, 0xa2, 0xf9, 0x5f, 0x9c, 0x7e, 0x86, 0x16, 0x5f, 0xff,
-    0xf6, 0x1e, 0xb0, 0x7e, 0x8f, 0xa5, 0xa8, 0xef, 0x04, 0x29, 0x2c, 0xbf,
-    0xf1, 0x67, 0x7a, 0x7c, 0xee, 0x7e, 0xb2, 0xec, 0xe3, 0x25, 0x37, 0xe1,
-    0x97, 0x80, 0xf9, 0xa8, 0x84, 0x51, 0xc6, 0x7a, 0xc5, 0x44, 0x25, 0x1d,
-    0xdd, 0x12, 0xa7, 0x5d, 0xf2, 0x93, 0x2f, 0xfe, 0x8f, 0x1b, 0x19, 0xad,
-    0x9a, 0x1f, 0x96, 0x5f, 0xf0, 0xf5, 0x8d, 0xc9, 0x38, 0xd6, 0x5f, 0xff,
-    0x82, 0xfc, 0xc2, 0x07, 0x8c, 0x7e, 0xcf, 0xb7, 0x16, 0x56, 0x2b, 0x9d,
-    0x39, 0x53, 0x3e, 0x2d, 0x74, 0x72, 0x38, 0xbf, 0x4b, 0x3f, 0x13, 0xab,
-    0x2f, 0xef, 0x4f, 0xf8, 0xc1, 0xe5, 0x94, 0xe7, 0xb6, 0x12, 0xab, 0xf7,
-    0xf1, 0x2e, 0x62, 0xcb, 0xff, 0xfa, 0x02, 0x0f, 0x46, 0xb3, 0x84, 0x17,
-    0x93, 0x0e, 0xb2, 0xff, 0xdd, 0x86, 0xf2, 0x0f, 0x67, 0xea, 0xcb, 0xff,
-    0x6c, 0xff, 0x4f, 0xe7, 0x49, 0xf7, 0xac, 0xbf, 0xfe, 0xce, 0xc1, 0x77,
-    0x99, 0x8c, 0x30, 0xf2, 0x59, 0x7f, 0x31, 0x9d, 0xee, 0x0d, 0x65, 0xff,
-    0xb0, 0x71, 0x28, 0xf6, 0x7e, 0xeb, 0x2f, 0xe7, 0x90, 0x64, 0xe3, 0x59,
-    0x7f, 0xff, 0xde, 0x0b, 0xed, 0xa8, 0xf3, 0x9f, 0x39, 0x8c, 0x39, 0x7e,
-    0xb2, 0xfc, 0x7b, 0x73, 0x8e, 0xb2, 0x86, 0x88, 0xff, 0x33, 0xde, 0x14,
-    0x51, 0x52, 0x5f, 0xbd, 0x80, 0x7d, 0x24, 0x66, 0x68, 0x2f, 0xff, 0xf4,
-    0xda, 0x8d, 0xf3, 0x98, 0x79, 0xc2, 0x4d, 0xc9, 0xd9, 0xf7, 0x56, 0x54,
-    0x23, 0xaf, 0xa8, 0x62, 0x1c, 0xdf, 0xf7, 0x8c, 0x5e, 0xcd, 0xa8, 0xea,
-    0xcb, 0xff, 0x1f, 0x43, 0x9d, 0x76, 0xe1, 0x2c, 0xb1, 0xc8, 0xfd, 0xf4,
-    0x77, 0x5b, 0x2b, 0x73, 0x02, 0x26, 0x93, 0xda, 0x5d, 0xf9, 0xe9, 0x47,
-    0x4f, 0xd8, 0x53, 0xd2, 0xca, 0x59, 0x74, 0xb8, 0x29, 0x6d, 0xb8, 0x17,
-    0x7f, 0xe6, 0xc7, 0xdc, 0x2c, 0xd8, 0x49, 0x2c, 0xbf, 0xff, 0xc7, 0xe7,
-    0x2f, 0xa4, 0x24, 0xa0, 0xa4, 0xed, 0xc1, 0xac, 0xbf, 0xfd, 0x99, 0xe1,
-    0xfa, 0x39, 0x9e, 0x3f, 0xd6, 0x5f, 0xa6, 0x94, 0x6b, 0x8b, 0x2f, 0xf6,
-    0x10, 0x65, 0xcd, 0x9d, 0x65, 0x98, 0x9c, 0x7b, 0x83, 0x29, 0xbf, 0xf1,
-    0xf7, 0x60, 0xf2, 0x76, 0xb5, 0x0b, 0x2a, 0x13, 0xe3, 0xd8, 0xc2, 0x48,
-    0x23, 0x60, 0x38, 0x52, 0xf4, 0xae, 0xfa, 0x71, 0xf8, 0x2b, 0x2f, 0xd9,
-    0x2f, 0x46, 0x96, 0x50, 0x0f, 0x2f, 0x74, 0x92, 0xfc, 0x7e, 0x62, 0x3e,
-    0x59, 0x7e, 0xc1, 0x94, 0x7c, 0xb2, 0xdd, 0x83, 0xd0, 0x22, 0x9b, 0xff,
-    0xff, 0xf7, 0xdd, 0x28, 0x6f, 0x07, 0xe8, 0xe6, 0x48, 0xd8, 0x61, 0xfa,
-    0x50, 0xde, 0x2c, 0xbf, 0xfb, 0xbc, 0x79, 0x73, 0x01, 0x0d, 0x35, 0x97,
-    0xff, 0xbe, 0x29, 0xc0, 0xf1, 0xff, 0xfc, 0x6a, 0x4b, 0x2a, 0x13, 0xb1,
-    0x37, 0x57, 0x26, 0x0c, 0x21, 0x04, 0x43, 0xbf, 0xf6, 0xdf, 0x41, 0xb7,
-    0x0b, 0x37, 0x56, 0x5f, 0xb6, 0xf4, 0x07, 0x16, 0x5f, 0xc7, 0xcc, 0x18,
-    0x98, 0xb2, 0xfd, 0xb8, 0x65, 0x9b, 0xd6, 0x5f, 0xd8, 0x33, 0x08, 0x3c,
-    0x03, 0xd8, 0x72, 0xdb, 0xfb, 0x92, 0x36, 0xbc, 0x96, 0x54, 0x23, 0xc3,
-    0x50, 0x80, 0xfd, 0x0e, 0xff, 0x70, 0xb3, 0x7f, 0x9e, 0x4b, 0x2f, 0x72,
-    0x5b, 0xd6, 0x51, 0x9e, 0x9e, 0xe9, 0xa5, 0xff, 0xe8, 0xd8, 0x4f, 0x47,
-    0xdd, 0xcd, 0x88, 0x6b, 0x2b, 0x15, 0x15, 0x1c, 0x66, 0x2f, 0x08, 0x82,
-    0x24, 0xbf, 0xf9, 0xe5, 0x83, 0x23, 0x7f, 0x43, 0x56, 0x5c, 0xfe, 0x59,
-    0x5e, 0x3d, 0x7e, 0xa0, 0xdf, 0xe8, 0xc2, 0xeb, 0x24, 0x50, 0x2c, 0xbf,
-    0xde, 0xcd, 0xf3, 0xb9, 0x20, 0x2c, 0xae, 0x1f, 0x7f, 0x4d, 0xeb, 0xa8,
-    0xb3, 0x0c, 0x24, 0x6f, 0xff, 0xe2, 0xfc, 0xb3, 0xbe, 0xcf, 0x13, 0xfd,
-    0x23, 0xc5, 0x97, 0xf1, 0x4e, 0x13, 0x5e, 0x75, 0x97, 0xfe, 0x0b, 0xca,
-    0x74, 0x18, 0xf1, 0xab, 0x28, 0xd1, 0x90, 0xeb, 0x24, 0x61, 0x7f, 0xed,
-    0x1f, 0xfb, 0x7a, 0x38, 0x1e, 0x2c, 0xbf, 0x66, 0x9f, 0xe1, 0x56, 0x5a,
-    0x4b, 0x2f, 0xff, 0xc2, 0x96, 0x0f, 0x46, 0x1d, 0x87, 0xe8, 0x2d, 0x96,
-    0x5b, 0x68, 0x3e, 0x8c, 0x11, 0xad, 0x91, 0x71, 0xc8, 0x48, 0xdf, 0xe9,
-    0x89, 0xc5, 0xee, 0x79, 0x65, 0xef, 0x60, 0x16, 0x5e, 0x14, 0x51, 0x52,
-    0x5f, 0xdf, 0xc1, 0x67, 0xdd, 0x48, 0xcc, 0xd0, 0x54, 0xe4, 0x58, 0x4f,
-    0x9a, 0x08, 0x79, 0x7f, 0xff, 0x32, 0xe7, 0x03, 0xc6, 0x31, 0xe0, 0xb3,
-    0xbb, 0xcc, 0xd9, 0x65, 0x79, 0x13, 0x81, 0x36, 0xa8, 0x55, 0x22, 0x70,
-    0xf9, 0x78, 0xdd, 0x6f, 0xf8, 0x48, 0xe6, 0x0a, 0x21, 0x75, 0x65, 0x6c,
-    0xda, 0xcb, 0xca, 0x5f, 0x58, 0xe1, 0x55, 0x84, 0x20, 0x28, 0xf9, 0x68,
-    0xe5, 0xd8, 0xea, 0x53, 0x5b, 0x65, 0x2c, 0x7a, 0x53, 0xc1, 0x46, 0xa1,
-    0xc8, 0x78, 0x76, 0x55, 0xf0, 0x87, 0x57, 0xfe, 0xc3, 0x2d, 0x9c, 0xbb,
-    0x8d, 0x59, 0x7f, 0xf3, 0x02, 0x74, 0xf8, 0x59, 0xbc, 0xc6, 0xb2, 0xfe,
-    0x2c, 0x1f, 0x9c, 0x55, 0x95, 0xa3, 0xf4, 0x6a, 0x3d, 0xe2, 0x76, 0xac,
-    0xbf, 0x87, 0xec, 0xec, 0xfe, 0x2c, 0xb1, 0xf8, 0xf2, 0xc5, 0x1b, 0xa8,
-    0x44, 0xaf, 0x9b, 0x6f, 0x89, 0xfe, 0xea, 0xcb, 0xd8, 0x5f, 0xac, 0xbe,
-    0xce, 0xcd, 0x25, 0x97, 0xff, 0x6e, 0x14, 0x6e, 0x71, 0xc8, 0x4f, 0xf8,
-    0xb2, 0xbc, 0x7d, 0xce, 0x47, 0x7f, 0xec, 0xec, 0x6b, 0x9e, 0x82, 0xea,
-    0xe2, 0x08, 0x5f, 0xd9, 0xa0, 0x3b, 0x81, 0x51, 0x04, 0x19, 0x9e, 0x55,
-    0xe8, 0x19, 0xac, 0xa8, 0x3e, 0x7e, 0x26, 0x5d, 0xbc, 0x6b, 0x2f, 0x6f,
-    0x86, 0xac, 0xbe, 0xfb, 0x99, 0xa5, 0x97, 0xed, 0xb3, 0x51, 0x25, 0x97,
-    0xda, 0xd1, 0x8a, 0xb2, 0x9a, 0x79, 0x7e, 0x28, 0xa8, 0x44, 0x83, 0xb7,
-    0x5f, 0xdb, 0xa3, 0x15, 0xca, 0x4b, 0x2b, 0x64, 0xc6, 0x70, 0x64, 0xa1,
-    0x5c, 0x12, 0x1b, 0xff, 0xd3, 0x48, 0xcb, 0xb1, 0xfc, 0xc4, 0x73, 0x2c,
-    0xb8, 0xa6, 0x59, 0x68, 0x19, 0xf1, 0xe2, 0x65, 0x6c, 0xae, 0x0d, 0x82,
-    0x2f, 0x42, 0x2b, 0xf8, 0x69, 0x14, 0x67, 0x5b, 0xe1, 0x4b, 0x7e, 0xf1,
-    0xc6, 0xbf, 0x59, 0x7f, 0xd9, 0xaf, 0x1e, 0x8b, 0x36, 0x59, 0x7f, 0x7b,
-    0x3b, 0xd3, 0x6a, 0xcb, 0xff, 0xb8, 0x32, 0x3d, 0x84, 0xd1, 0x46, 0x2c,
-    0xbf, 0xba, 0x26, 0x79, 0xfe, 0x59, 0x5f, 0x22, 0x83, 0xc5, 0xa4, 0x89,
-    0x7f, 0xc5, 0xb6, 0x6b, 0xf2, 0x0f, 0xeb, 0x2f, 0xec, 0xfb, 0xba, 0xd4,
-    0x2c, 0xbf, 0xfb, 0x84, 0xfd, 0x76, 0x89, 0x1b, 0x62, 0xca, 0x19, 0xf9,
-    0x70, 0xba, 0xa1, 0x1f, 0xe6, 0x60, 0x18, 0x56, 0xdf, 0xd8, 0x01, 0x37,
-    0xfb, 0x16, 0x5f, 0xb7, 0x8f, 0xd1, 0xc5, 0x96, 0x6a, 0xcb, 0xfd, 0x1d,
-    0x1f, 0x82, 0xfc, 0x58, 0x21, 0x63, 0x7f, 0xdb, 0x3c, 0xa0, 0xbb, 0x3f,
-    0x8b, 0x2f, 0xff, 0xc4, 0x3d, 0x60, 0x3d, 0x1e, 0xcd, 0x6a, 0x18, 0x59,
-    0x50, 0x89, 0x03, 0x3b, 0xba, 0x18, 0x59, 0x7f, 0xb3, 0x47, 0xfb, 0x5e,
-    0x4b, 0x2e, 0x32, 0x59, 0x61, 0x56, 0x50, 0xcd, 0x38, 0x82, 0xb7, 0x88,
-    0x3b, 0x2c, 0xbd, 0xb1, 0x42, 0xcb, 0xf7, 0x9e, 0x58, 0x4b, 0x2f, 0xe3,
-    0xe9, 0x67, 0x8d, 0x65, 0xbd, 0x38, 0xf4, 0x60, 0x9a, 0xff, 0xa3, 0x9e,
-    0x3d, 0x69, 0xe4, 0xb2, 0xb0, 0xf8, 0x48, 0xa6, 0xe7, 0x16, 0x72, 0x73,
-    0xc3, 0x17, 0xc5, 0xaf, 0x11, 0x38, 0xef, 0x61, 0x9d, 0x7f, 0x46, 0xdd,
-    0xe6, 0x75, 0x65, 0x42, 0xec, 0xf4, 0xa3, 0xd7, 0xc3, 0x33, 0x30, 0xd1,
-    0xdf, 0xa1, 0xa6, 0x51, 0xdf, 0x8a, 0xd3, 0x7f, 0x70, 0xc6, 0x3c, 0x25,
-    0x97, 0xff, 0xff, 0x67, 0x61, 0xa3, 0xce, 0xc6, 0x14, 0x8b, 0x3e, 0x94,
-    0x67, 0x56, 0x5f, 0xff, 0xbd, 0x9c, 0xe6, 0x60, 0x75, 0xb6, 0x04, 0xba,
-    0xb2, 0x89, 0x18, 0x7d, 0x6e, 0xbf, 0xef, 0x46, 0xba, 0x51, 0x9f, 0x2c,
-    0xbf, 0xff, 0xe3, 0xda, 0x25, 0xcd, 0x68, 0xfe, 0x9a, 0x4f, 0xa6, 0xe7,
-    0xcb, 0x2f, 0xf4, 0x3e, 0xcf, 0xa7, 0x11, 0x65, 0xef, 0x61, 0x0d, 0x1a,
-    0xbe, 0x38, 0xeb, 0x55, 0x62, 0xa2, 0x63, 0x87, 0x7f, 0x61, 0xef, 0x7e,
-    0x8d, 0x4d, 0xcd, 0x96, 0x5f, 0xf7, 0xa3, 0x35, 0x2e, 0x05, 0xab, 0x2b,
-    0x63, 0xe3, 0x01, 0x55, 0xc7, 0xc5, 0x97, 0xfd, 0x9b, 0x3f, 0x7f, 0x10,
-    0xa4, 0xb2, 0xfe, 0x7e, 0xce, 0x89, 0x30, 0xb2, 0xfe, 0x11, 0xbc, 0x15,
-    0xfe, 0x59, 0x50, 0x9b, 0x96, 0x42, 0x75, 0x82, 0x3d, 0x0b, 0x39, 0xdf,
-    0x4c, 0x2f, 0x6b, 0x3c, 0xb2, 0xf7, 0x0d, 0xab, 0x2b, 0x46, 0xe3, 0xa3,
-    0x97, 0x1e, 0xcb, 0x2a, 0x0d, 0xc6, 0xe1, 0x0d, 0x99, 0x2b, 0x2f, 0xfc,
-    0x70, 0x53, 0x9c, 0xa4, 0x6d, 0x59, 0x58, 0x7a, 0x5e, 0x15, 0xbe, 0x39,
-    0x8c, 0x55, 0x97, 0xfe, 0x7f, 0x84, 0xe9, 0xea, 0x02, 0xcb, 0x59, 0x70,
-    0x9b, 0x2c, 0xa6, 0x9e, 0xef, 0x51, 0x2e, 0xdf, 0xa5, 0x97, 0xff, 0xe0,
-    0xec, 0x51, 0x9e, 0x67, 0x1d, 0xcf, 0x07, 0x4b, 0x2f, 0xbb, 0xc1, 0x39,
-    0x39, 0x33, 0x31, 0x90, 0xe4, 0x20, 0x08, 0x88, 0x41, 0x9b, 0x88, 0x55,
-    0x97, 0xee, 0x37, 0x3b, 0xc5, 0x97, 0xf7, 0xfa, 0x80, 0x61, 0x2c, 0xbf,
-    0xf3, 0x19, 0xd3, 0xf6, 0x76, 0x34, 0xb2, 0xa0, 0xfa, 0xcc, 0xb6, 0xfc,
-    0xf2, 0x23, 0x85, 0x97, 0xe7, 0x2e, 0xe1, 0x2c, 0xbf, 0xf3, 0x04, 0xfd,
-    0xe6, 0x6f, 0xf1, 0xac, 0xa8, 0x3e, 0x57, 0x25, 0xbf, 0xf4, 0xc4, 0xe2,
-    0xcd, 0x27, 0xd4, 0x96, 0x5f, 0xc7, 0xad, 0x46, 0x12, 0xcb, 0xfe, 0x89,
-    0x73, 0x00, 0x51, 0xa5, 0x94, 0xc1, 0xf1, 0x68, 0xae, 0xc6, 0xb2, 0xfe,
-    0xe1, 0xe8, 0x1e, 0xc5, 0x97, 0x89, 0xd8, 0xc3, 0xe0, 0x01, 0x1f, 0xc2,
-    0x15, 0x25, 0xcc, 0x9c, 0x8e, 0xa0, 0x0d, 0x46, 0x2f, 0xa8, 0x49, 0xb4,
-    0x80, 0xa1, 0x15, 0xc2, 0x00, 0xc6, 0x07, 0x7d, 0xf0, 0x0c, 0x6b, 0x2f,
-    0xde, 0x39, 0xf3, 0x61, 0x65, 0xf6, 0x7e, 0x7b, 0xd6, 0x5f, 0x7f, 0xf8,
-    0x7f, 0x59, 0x40, 0x3f, 0x52, 0x2b, 0x10, 0x92, 0xf8, 0x3a, 0xe9, 0xac,
-    0xbf, 0x14, 0xb9, 0xb7, 0xeb, 0x2f, 0xff, 0xe9, 0x74, 0xe6, 0x07, 0x8f,
-    0xee, 0x88, 0x59, 0xbf, 0x16, 0x5f, 0xfd, 0xfc, 0x71, 0xb0, 0x7a, 0xd1,
-    0x8a, 0xb2, 0xf3, 0xbc, 0x96, 0x50, 0xd3, 0x0b, 0xc2, 0x2f, 0x8a, 0x8d,
-    0x7f, 0xf4, 0x5b, 0xf3, 0x4f, 0xbd, 0x85, 0x97, 0x8f, 0x05, 0x59, 0x7c,
-    0x7c, 0xc1, 0x99, 0xe1, 0x91, 0x3d, 0xfc, 0x5c, 0xc6, 0xc6, 0xea, 0xcb,
-    0xed, 0xdf, 0x66, 0xcb, 0x2f, 0xf4, 0x0f, 0x3a, 0x7e, 0x0a, 0xca, 0x83,
-    0xd8, 0x19, 0x35, 0xf3, 0x07, 0xf7, 0x16, 0x54, 0x23, 0x31, 0xb0, 0x87,
-    0xe9, 0x0d, 0xff, 0xba, 0x27, 0xf0, 0x24, 0x7f, 0x1f, 0xac, 0xbf, 0x9f,
-    0x86, 0x51, 0xc5, 0x97, 0x79, 0xd6, 0x5f, 0x82, 0x37, 0x2f, 0xfc, 0x78,
-    0x2c, 0xb2, 0xbb, 0xff, 0xff, 0x35, 0xcb, 0xf9, 0x1f, 0x02, 0xdf, 0x1c,
-    0x77, 0xc1, 0x76, 0xac, 0xbf, 0xfe, 0x20, 0xf6, 0x47, 0xff, 0x9c, 0xfa,
-    0xed, 0x59, 0x74, 0xed, 0xd5, 0x97, 0xff, 0xe7, 0x3e, 0x98, 0xf0, 0x79,
-    0xd3, 0x69, 0xe9, 0x65, 0xf4, 0xb9, 0x0d, 0x59, 0x7f, 0xfa, 0x00, 0x3c,
-    0x13, 0xa7, 0xa8, 0x0b, 0x2d, 0x65, 0xe0, 0xe0, 0xd6, 0x5e, 0xd3, 0xf3,
-    0x13, 0x49, 0xd2, 0x7f, 0x87, 0x1d, 0x48, 0x88, 0xa7, 0xd3, 0xad, 0xd9,
-    0x2a, 0x61, 0x74, 0x30, 0xc7, 0x6b, 0x5f, 0x2b, 0x22, 0x39, 0x5c, 0xb7,
-    0x4a, 0x16, 0x5f, 0xfe, 0xd8, 0x7e, 0x8f, 0x67, 0xdf, 0xe7, 0x78, 0xb2,
-    0x9c, 0xf8, 0xc2, 0x2d, 0x50, 0xbe, 0xd0, 0x38, 0x4c, 0x64, 0x67, 0x40,
-    0x84, 0x71, 0xc6, 0x04, 0xf2, 0xd5, 0x8a, 0x11, 0xf7, 0xb5, 0xa8, 0x59,
-    0x7f, 0x6a, 0x36, 0x32, 0xea, 0xcb, 0x84, 0x6a, 0xcb, 0x99, 0x13, 0xd2,
-    0xca, 0x19, 0xb8, 0xe0, 0xc5, 0xf8, 0xa0, 0x79, 0x32, 0xcb, 0xee, 0x07,
-    0x4c, 0x2c, 0xbf, 0x47, 0xbb, 0x12, 0x59, 0x7c, 0x30, 0xf7, 0x90, 0x7e,
-    0x5f, 0x13, 0xfe, 0x49, 0x7b, 0xc2, 0x69, 0x65, 0xfe, 0x82, 0x7f, 0x04,
-    0xb6, 0x59, 0x7f, 0xfe, 0xf1, 0xeb, 0xcf, 0x04, 0xc3, 0xcc, 0xef, 0xb2,
-    0xcb, 0xec, 0x3f, 0xf8, 0xb2, 0xf8, 0xf9, 0x12, 0xc3, 0xf7, 0xd2, 0xad,
-    0xed, 0x87, 0x0b, 0x2f, 0x36, 0x3c, 0xb2, 0xf4, 0x49, 0x92, 0xb2, 0xdf,
-    0xe1, 0xbc, 0x21, 0xcb, 0xfe, 0x8e, 0x47, 0x79, 0x85, 0x25, 0x97, 0xff,
-    0xff, 0xb3, 0x6e, 0x43, 0x0f, 0xce, 0xcb, 0x18, 0x63, 0x3e, 0xee, 0xa3,
-    0x3e, 0x59, 0x7e, 0x89, 0xda, 0x29, 0x2c, 0xaf, 0x23, 0x73, 0x86, 0xe1,
-    0x7c, 0xbc, 0xcb, 0xf6, 0x2c, 0xa9, 0xed, 0x70, 0x14, 0x63, 0x98, 0xca,
-    0x70, 0x93, 0x99, 0x21, 0xa3, 0xde, 0x85, 0x4b, 0x9b, 0x92, 0xcf, 0x63,
-    0x02, 0x09, 0x85, 0xc2, 0x71, 0x65, 0xff, 0xbb, 0xcc, 0x99, 0xff, 0xe6,
-    0x6c, 0xb2, 0xb4, 0x7b, 0x24, 0x31, 0x7e, 0xc1, 0x7a, 0x23, 0x56, 0x5f,
-    0xff, 0xf7, 0x04, 0x8f, 0xc7, 0xe8, 0xd6, 0x11, 0xbc, 0xb9, 0x9d, 0x59,
-    0x77, 0x36, 0x59, 0x7f, 0x14, 0x0b, 0xa8, 0x6a, 0xca, 0x19, 0xe2, 0xe0,
-    0xc5, 0x69, 0x19, 0x9d, 0x85, 0x5d, 0xff, 0xa2, 0x5c, 0x0e, 0xbf, 0xcf,
-    0x3a, 0xcb, 0xfd, 0xbf, 0x06, 0xe4, 0xfb, 0xd6, 0x5f, 0xf7, 0xa3, 0xee,
-    0xc7, 0x9f, 0x75, 0x65, 0x2c, 0xa9, 0xc7, 0x8e, 0xca, 0xcf, 0x2d, 0xf2,
-    0xcb, 0xb0, 0x55, 0x97, 0x77, 0xa6, 0x6a, 0x7a, 0x25, 0x50, 0x7f, 0xe6,
-    0xa7, 0x7f, 0xe7, 0x20, 0x66, 0x80, 0xee, 0x05, 0x44, 0x22, 0xba, 0x5b,
-    0x2c, 0xa8, 0x55, 0xf5, 0x84, 0x27, 0x0f, 0x66, 0x94, 0x39, 0xff, 0xf0,
-    0xfb, 0x09, 0x06, 0xf4, 0x9b, 0xed, 0xb9, 0xfb, 0xac, 0xbf, 0xed, 0x38,
-    0xf0, 0xf7, 0xbb, 0x56, 0x56, 0x1e, 0xee, 0x89, 0x2f, 0xff, 0xff, 0x7b,
-    0x03, 0xa6, 0x3c, 0x7f, 0x47, 0x43, 0xe2, 0xcf, 0xba, 0x17, 0xe2, 0xcb,
-    0xff, 0xb3, 0xe1, 0x3a, 0x64, 0x19, 0x67, 0x16, 0x5f, 0xff, 0xff, 0xff,
-    0xff, 0xff, 0xb0, 0xb6, 0x27, 0x1c, 0x16, 0xd1, 0xa1, 0xe1, 0x67, 0x78,
-    0x60, 0xc2, 0x13, 0x6c, 0xd4, 0x70, 0x9d, 0x8e, 0x61, 0xff, 0xf8, 0x7f,
-    0x27, 0x1c, 0x16, 0xd1, 0xa5, 0x97, 0xe7, 0xdc, 0xcf, 0xba, 0xb2, 0xfe,
-    0x91, 0x66, 0x05, 0x96, 0xb2, 0xff, 0x3f, 0x65, 0x9a, 0xce, 0x2c, 0xa8,
-    0x4f, 0x73, 0x11, 0x7d, 0x18, 0x53, 0x95, 0x91, 0x85, 0xff, 0x9c, 0xb0,
-    0xf4, 0x51, 0xf4, 0x96, 0x5f, 0xfd, 0xd7, 0x2d, 0xbe, 0x91, 0x46, 0x71,
-    0x65, 0xff, 0xfa, 0x3f, 0x9a, 0x51, 0xb1, 0x3b, 0x1c, 0x28, 0x92, 0xcb,
-    0xff, 0x09, 0x9e, 0x76, 0xb3, 0x14, 0x51, 0x56, 0x5f, 0xff, 0xb0, 0x1e,
-    0x82, 0x19, 0x1e, 0xd8, 0x46, 0xc2, 0xcb, 0x3e, 0xc8, 0x98, 0x92, 0x2d,
-    0x49, 0x31, 0x87, 0x87, 0x7d, 0xff, 0xfd, 0x31, 0x47, 0xfc, 0x07, 0x8f,
-    0x53, 0x14, 0x7f, 0xc5, 0x97, 0xff, 0xf7, 0x79, 0x0c, 0x48, 0xfc, 0xe5,
-    0xd9, 0x66, 0xb1, 0x65, 0xff, 0x8f, 0x98, 0x39, 0xcf, 0xfc, 0xfe, 0x2c,
-    0xb8, 0x3b, 0xd6, 0x5f, 0xe8, 0x6f, 0xdd, 0x8c, 0xf9, 0x65, 0xff, 0xbc,
-    0x7b, 0xfc, 0xf2, 0xd4, 0x30, 0xb2, 0xb1, 0x32, 0xb0, 0x2d, 0x69, 0x0f,
-    0xc3, 0x3d, 0x34, 0xbf, 0x83, 0xd3, 0x09, 0x30, 0xb2, 0xfe, 0xc1, 0x70,
-    0x83, 0xfa, 0xcb, 0xf4, 0xb3, 0xb1, 0xfa, 0xcb, 0xa1, 0xbb, 0x1e, 0xb7,
-    0xc5, 0xd7, 0xff, 0xff, 0x7e, 0xd7, 0x97, 0x9c, 0xfa, 0x63, 0xc1, 0xe7,
-    0x4d, 0xa7, 0xa5, 0x95, 0xc4, 0x4f, 0x84, 0xbe, 0xff, 0xfc, 0x59, 0xcc,
-    0xf3, 0xee, 0x03, 0xc6, 0xd8, 0x02, 0xcb, 0xf6, 0xcd, 0x81, 0xc2, 0xca,
-    0x92, 0xff, 0xd0, 0xe5, 0x2b, 0x01, 0x37, 0xe3, 0xc9, 0xa3, 0x5c, 0xd1,
-    0x47, 0xa3, 0x89, 0xe2, 0x57, 0x63, 0x23, 0xde, 0x46, 0x22, 0xb5, 0xff,
-    0xa1, 0x86, 0x20, 0xb3, 0xbe, 0x35, 0x97, 0xfa, 0x39, 0xc8, 0xdb, 0x05,
-    0x59, 0x7f, 0xfc, 0x3e, 0x85, 0xfe, 0xef, 0xf8, 0x39, 0xde, 0x35, 0x97,
-    0xff, 0xdb, 0xdf, 0xde, 0x31, 0xe7, 0x78, 0x12, 0xea, 0xcb, 0xfb, 0x1b,
-    0x9e, 0x09, 0x2c, 0xa8, 0x3f, 0xdf, 0x28, 0xd0, 0xd3, 0x26, 0x73, 0x4e,
-    0xc3, 0x46, 0xfb, 0x34, 0xc1, 0xac, 0xa8, 0x65, 0x47, 0xe5, 0x20, 0x6c,
-    0xe1, 0x72, 0xf1, 0xb2, 0x04, 0xd6, 0xf0, 0xa2, 0x8a, 0x92, 0xff, 0xb3,
-    0xf7, 0xd6, 0x6f, 0xc1, 0xa4, 0x66, 0x68, 0x2e, 0x14, 0x54, 0x97, 0x85,
-    0x14, 0x54, 0x97, 0xf3, 0xec, 0x3f, 0x47, 0x12, 0x33, 0x34, 0x14, 0x48,
-    0xc5, 0x15, 0x32, 0x7c, 0xe6, 0xfc, 0x03, 0x18, 0x8d, 0x48, 0xcc, 0xd9,
-    0xde, 0x14, 0x51, 0x52, 0x5e, 0xe4, 0x69, 0x23, 0x33, 0x41, 0x7c, 0xe5,
-    0xf7, 0x56, 0x5b, 0xf3, 0x45, 0x5f, 0x56, 0xc5, 0x2e, 0xba, 0x7e, 0x7a,
-    0x59, 0x7e, 0x28, 0x93, 0x81, 0x65, 0xec, 0x98, 0xd6, 0x50, 0xcf, 0x08,
-    0x42, 0x6b, 0xf7, 0x03, 0xb4, 0xf9, 0x2c, 0xbf, 0x0c, 0xf7, 0xc0, 0xd6,
-    0x5f, 0x61, 0x66, 0xea, 0xca, 0xd1, 0xe6, 0x34, 0xa6, 0x8d, 0x13, 0x42,
-    0x3c, 0x5f, 0xfd, 0xe7, 0x91, 0x3b, 0x13, 0x11, 0xcc, 0xb2, 0xff, 0xb6,
-    0x8f, 0xb8, 0x65, 0x9f, 0xac, 0xbe, 0x79, 0x1f, 0xeb, 0x2b, 0x47, 0xb9,
-    0xe3, 0xab, 0xf6, 0x6c, 0xdc, 0x6a, 0xcb, 0xfa, 0x36, 0x1f, 0xa3, 0x8b,
-    0x2f, 0xf4, 0x60, 0x33, 0x79, 0x8d, 0x65, 0xb0, 0x07, 0xc2, 0x45, 0xd5,
-    0x88, 0xd1, 0x22, 0x29, 0xf8, 0x44, 0xdf, 0xde, 0xcd, 0xf9, 0xde, 0x2c,
-    0xa0, 0x27, 0xaf, 0xfc, 0x6e, 0x5d, 0x36, 0xa9, 0x2b, 0x50, 0xd3, 0x0f,
-    0xa1, 0x7a, 0x51, 0xfd, 0x5f, 0x6d, 0xf8, 0x7f, 0x59, 0x76, 0xdd, 0x59,
-    0x50, 0xb8, 0x1d, 0x92, 0xe1, 0xdd, 0x24, 0x89, 0xaf, 0xdb, 0x4f, 0xfb,
-    0x00, 0xb2, 0xe6, 0x55, 0x9e, 0x96, 0x5e, 0xe4, 0x75, 0x65, 0xdf, 0x8a,
-    0xb2, 0xdc, 0x98, 0xda, 0xb8, 0xe5, 0x62, 0x2a, 0xfe, 0x2c, 0xea, 0xc5,
-    0xf8, 0x11, 0xe8, 0x6a, 0xcb, 0x9f, 0xab, 0x2f, 0xb7, 0x5c, 0xbf, 0xc3,
-    0x7a, 0x44, 0xf7, 0xff, 0x86, 0xe5, 0xf9, 0x3b, 0x8f, 0xa1, 0x75, 0x95,
-    0x88, 0x81, 0x09, 0xcd, 0xff, 0x41, 0x48, 0x87, 0xe8, 0xd9, 0x65, 0xfc,
-    0x3c, 0xd4, 0xfb, 0x46, 0xb2, 0xf7, 0x8e, 0x64, 0x95, 0xa3, 0xce, 0xe1,
-    0x8d, 0xff, 0x3f, 0xdd, 0xc9, 0x83, 0xa6, 0x16, 0x58, 0x06, 0x7b, 0xc1,
-    0x22, 0xbf, 0xc5, 0x9f, 0x4b, 0x86, 0xc2, 0xcb, 0xda, 0x0e, 0xcb, 0x2f,
-    0x3e, 0x98, 0x59, 0x5a, 0x37, 0x6e, 0x3d, 0x66, 0x16, 0x5f, 0xfd, 0x80,
-    0xf4, 0x7b, 0x35, 0xa8, 0x61, 0x65, 0xe3, 0xff, 0x90, 0x7a, 0xda, 0x12,
-    0xa9, 0xc9, 0x8c, 0x6c, 0xde, 0x4e, 0xd7, 0xfd, 0x98, 0x0f, 0xe3, 0x3e,
-    0x92, 0xcb, 0xff, 0xbb, 0xa0, 0xf3, 0xcf, 0x2f, 0xcc, 0x6b, 0x2f, 0xa1,
-    0xdb, 0xbd, 0x25, 0xff, 0xde, 0x37, 0xff, 0xf8, 0xfe, 0x3d, 0xc5, 0x97,
-    0xf7, 0xb1, 0xad, 0x79, 0x2c, 0xbc, 0x28, 0xa2, 0xa4, 0xbf, 0xc5, 0xdf,
-    0x1c, 0x16, 0xc9, 0x19, 0x9a, 0x0b, 0xd1, 0xfe, 0x49, 0x12, 0x38, 0x9b,
-    0x5d, 0x4c, 0x28, 0x48, 0x6b, 0xdf, 0xd9, 0x3b, 0xaf, 0xff, 0x16, 0x50,
-    0x13, 0x87, 0x6c, 0x65, 0xbb, 0xca, 0xaf, 0xf9, 0xff, 0x2c, 0x9a, 0x51,
-    0xf2, 0xca, 0x85, 0x48, 0x19, 0x1e, 0x69, 0x9c, 0xdf, 0xe7, 0x21, 0x34,
-    0x41, 0x92, 0xcb, 0xff, 0xfa, 0x5e, 0x79, 0x03, 0xc7, 0xd9, 0x67, 0xbc,
-    0xf2, 0x59, 0x7e, 0x8f, 0xe3, 0xdc, 0x59, 0x58, 0x88, 0x3f, 0xd6, 0xef,
-    0xfe, 0x10, 0xa0, 0xc7, 0xec, 0x97, 0x8d, 0x65, 0xff, 0x84, 0x8d, 0x7f,
-    0xdf, 0x38, 0xcd, 0x65, 0xfb, 0x5a, 0x3e, 0xf1, 0x65, 0x4e, 0x45, 0x58,
-    0xd0, 0xc4, 0x40, 0xbf, 0xfe, 0xfe, 0x7f, 0x23, 0x9e, 0x8f, 0xba, 0xc0,
-    0x74, 0xb2, 0xff, 0xdf, 0xcf, 0xe4, 0x48, 0xfa, 0x50, 0xb2, 0xa1, 0x19,
-    0x38, 0x66, 0xea, 0xd7, 0xe8, 0x91, 0xcb, 0x8b, 0x2a, 0x19, 0x16, 0xb2,
-    0x87, 0x73, 0x04, 0x5f, 0x43, 0x90, 0xe3, 0x3f, 0x98, 0xcf, 0xd2, 0x9e,
-    0x5c, 0xd7, 0xf8, 0x5b, 0x14, 0x72, 0xfc, 0x2d, 0xbf, 0xff, 0xba, 0x6d,
-    0xc2, 0xef, 0x21, 0x8e, 0x04, 0x7e, 0x35, 0x97, 0xef, 0xf0, 0xfc, 0xc2,
-    0xcb, 0xff, 0xec, 0x04, 0x13, 0xf7, 0x83, 0x0b, 0xea, 0x4b, 0x2b, 0xe3,
-    0xf7, 0x69, 0x4d, 0xfd, 0x04, 0x06, 0x44, 0xf1, 0x9e, 0x56, 0x5f, 0xa1,
-    0xba, 0x8d, 0xeb, 0x2f, 0x4a, 0x09, 0x65, 0xff, 0xd0, 0x0e, 0x94, 0x0b,
-    0x9d, 0xe7, 0x16, 0x5f, 0xf9, 0xfd, 0xa8, 0xe9, 0x80, 0xc6, 0xb2, 0xff,
-    0xbb, 0xec, 0x3d, 0x48, 0x46, 0xac, 0xbb, 0x3f, 0x59, 0x5e, 0x44, 0x77,
-    0x0f, 0x7a, 0x75, 0x5a, 0x4c, 0x0b, 0xf8, 0x69, 0x5f, 0xff, 0xfc, 0x4e,
-    0xd8, 0xd0, 0x07, 0xe8, 0xe0, 0x5c, 0xe5, 0xcf, 0x3c, 0x96, 0x5e, 0x0f,
-    0x78, 0xb2, 0xfc, 0x2b, 0xfa, 0x1a, 0xb2, 0xf0, 0x23, 0x8b, 0x2f, 0xfe,
-    0x12, 0x59, 0xe7, 0xf1, 0xeb, 0x50, 0xb2, 0xa1, 0x11, 0x18, 0x51, 0xf8,
-    0xe5, 0xfd, 0xec, 0x93, 0x97, 0xeb, 0x2f, 0x73, 0x7e, 0x2c, 0xba, 0x34,
-    0xb2, 0xba, 0x6d, 0x27, 0xc7, 0xaf, 0xec, 0xdb, 0x9b, 0xa6, 0x05, 0x95,
-    0x07, 0xaa, 0x44, 0x97, 0xe0, 0xe9, 0x8f, 0x1a, 0xca, 0x9c, 0xb9, 0xc9,
-    0x10, 0xd2, 0x19, 0x18, 0x0f, 0x0c, 0xa7, 0x51, 0x8e, 0xb9, 0x57, 0xee,
-    0x05, 0x0a, 0x5e, 0x17, 0xf6, 0x16, 0xd3, 0xe4, 0x16, 0x15, 0x65, 0xff,
-    0x10, 0x5d, 0x8f, 0xdb, 0x12, 0x59, 0x5a, 0x3c, 0xcf, 0xc4, 0xaf, 0xf1,
-    0x38, 0xb8, 0x4e, 0xc2, 0xcb, 0xff, 0xb3, 0xbc, 0x13, 0x8d, 0x28, 0xd4,
-    0x2c, 0xbd, 0xbf, 0x08, 0x67, 0xec, 0xd3, 0x2b, 0xff, 0x85, 0x8d, 0x13,
-    0xed, 0x1a, 0x89, 0x2c, 0xa3, 0x3f, 0x8f, 0x1a, 0x5f, 0xff, 0xef, 0x18,
-    0xb9, 0xb8, 0x6d, 0x7e, 0xf0, 0x32, 0xcf, 0xba, 0xb2, 0xff, 0xed, 0x1f,
-    0xe2, 0x7a, 0x1a, 0xef, 0xd5, 0x94, 0x34, 0x55, 0x69, 0x96, 0xa1, 0x3f,
-    0xfc, 0x8c, 0x45, 0xe1, 0x97, 0x7f, 0xd3, 0x03, 0xc6, 0xd8, 0xd3, 0x0b,
-    0x2f, 0xf1, 0xea, 0x6c, 0xec, 0x4c, 0xb2, 0xfd, 0xb9, 0xb8, 0x64, 0x05,
-    0x97, 0xed, 0xa7, 0x06, 0x26, 0x59, 0x69, 0x2c, 0xbc, 0x21, 0x4c, 0xb2,
-    0xa4, 0x6b, 0xff, 0x11, 0xac, 0x4c, 0x64, 0x07, 0x7a, 0x34, 0x72, 0xde,
-    0x2d, 0xd4, 0x3f, 0x88, 0xce, 0xd2, 0xe0, 0xa5, 0x3c, 0x82, 0x39, 0xd7,
-    0xbc, 0xad, 0x81, 0xd8, 0x87, 0xf0, 0x23, 0x45, 0x39, 0x74, 0xbb, 0xae,
-    0x53, 0x4e, 0xe3, 0x6a, 0x70, 0x69, 0xb3, 0xb2, 0x9e, 0x9f, 0xfc, 0x79,
-    0xc8, 0x9f, 0xe7, 0x00, 0x0a, 0x96, 0xd1, 0xc9, 0xe2, 0xfe, 0xd2, 0x68,
-    0xc3, 0x3b, 0x44, 0x2c, 0xb0, 0xa1, 0x23, 0x52, 0xba, 0x1a, 0xb2, 0xf8,
-    0x7e, 0xce, 0x2c, 0xbd, 0xb8, 0x7b, 0xd6, 0x5c, 0x7e, 0x59, 0x7d, 0x98,
-    0x5d, 0x59, 0x74, 0x12, 0xca, 0xf1, 0xe5, 0xf0, 0x5b, 0x79, 0x05, 0xff,
-    0xf6, 0x13, 0x3e, 0xb0, 0x7f, 0x73, 0xd9, 0xfb, 0xac, 0xa9, 0x22, 0x10,
-    0x66, 0x37, 0x9d, 0xc5, 0x59, 0x77, 0xf0, 0xb2, 0xfc, 0x0c, 0xef, 0x8d,
-    0x65, 0x9c, 0x67, 0xb4, 0x63, 0x84, 0x2f, 0x7f, 0xff, 0xd9, 0xe7, 0x13,
-    0x98, 0xc3, 0x97, 0xf0, 0x51, 0x37, 0xa1, 0x65, 0xa1, 0x65, 0xff, 0xfa,
-    0x35, 0xe8, 0x6e, 0xe0, 0x60, 0xa2, 0x6f, 0x42, 0xcb, 0xf1, 0xea, 0x68,
-    0xf6, 0x91, 0x9b, 0xfb, 0x31, 0x08, 0x54, 0x95, 0x6d, 0xe1, 0x17, 0xd0,
-    0xf0, 0x6b, 0xe8, 0x90, 0xff, 0xbf, 0x4d, 0xe8, 0xdb, 0x16, 0x5b, 0xcb,
-    0x2a, 0x46, 0xe8, 0x65, 0x36, 0x65, 0x6b, 0x2f, 0xfd, 0xdf, 0x3c, 0xbb,
-    0x31, 0x43, 0x56, 0x5f, 0xf9, 0xcb, 0xf9, 0xc3, 0x0b, 0xea, 0x4b, 0x2f,
-    0x8c, 0xb6, 0x85, 0x97, 0xbb, 0xa8, 0x59, 0x7f, 0xc5, 0x0d, 0x32, 0xc6,
-    0xc2, 0xcb, 0xde, 0x39, 0x2c, 0xb8, 0xc7, 0x87, 0xdb, 0x30, 0xe7, 0x4d,
-    0x6b, 0x75, 0x30, 0x9d, 0x20, 0x94, 0x23, 0xaf, 0xfe, 0x2e, 0xf3, 0xcf,
-    0x29, 0xd9, 0xf7, 0x56, 0x54, 0xf1, 0x4f, 0x7a, 0x05, 0xf2, 0x34, 0x80,
-    0x9c, 0x5f, 0xf3, 0xee, 0xcd, 0xc8, 0xf3, 0xee, 0xac, 0xbf, 0xe1, 0x22,
-    0x61, 0x23, 0x4f, 0x32, 0xcb, 0xd0, 0x5b, 0x2c, 0xbe, 0x3f, 0x1b, 0x56,
-    0x51, 0x9b, 0xd9, 0x87, 0x2f, 0xfd, 0xde, 0x32, 0x44, 0x81, 0x7c, 0x12,
-    0x59, 0x5e, 0x3e, 0x62, 0x21, 0xbd, 0xce, 0x9a, 0xcb, 0xa6, 0x0a, 0xcb,
-    0xa0, 0x10, 0x6d, 0x08, 0x72, 0xff, 0xa3, 0xbe, 0x7f, 0xdf, 0xee, 0x2c,
-    0xa1, 0x9f, 0x21, 0x15, 0x5f, 0xff, 0xe2, 0x0b, 0x83, 0x81, 0x73, 0x94,
-    0x10, 0x33, 0xee, 0xac, 0xbf, 0xef, 0xe7, 0x78, 0xc0, 0x1d, 0x7e, 0xb2,
-    0xf6, 0xe4, 0x6e, 0xac, 0xad, 0x1f, 0x06, 0xe1, 0xf5, 0xe9, 0x83, 0xa5,
-    0x97, 0xb0, 0xfa, 0xb2, 0xff, 0x8f, 0x59, 0xf3, 0x31, 0x45, 0x15, 0x65,
-    0x78, 0xf6, 0x9c, 0x6e, 0xa1, 0x17, 0xce, 0x4b, 0xc7, 0x8b, 0xff, 0xe2,
-    0x89, 0x4e, 0x13, 0xa6, 0x41, 0x96, 0x71, 0x65, 0xff, 0xfb, 0xc1, 0xe3,
-    0x63, 0xe0, 0x78, 0xda, 0x47, 0xb2, 0xca, 0x1a, 0xe0, 0x66, 0x43, 0x7c,
-    0x10, 0xb9, 0x69, 0x0f, 0xa3, 0x7d, 0xfc, 0xbb, 0x8a, 0x37, 0x70, 0x2b,
-    0x2f, 0xef, 0x1b, 0x40, 0x63, 0x59, 0x7b, 0xf7, 0x6a, 0xcb, 0xb3, 0xf5,
-    0x95, 0x06, 0xd3, 0x07, 0x6f, 0x3e, 0x35, 0x65, 0xc5, 0x2d, 0x91, 0x65,
-    0x82, 0xe4, 0xc3, 0xb8, 0x3f, 0x7d, 0x1e, 0x0e, 0x96, 0x5f, 0xdc, 0x2c,
-    0x19, 0x3a, 0xca, 0x23, 0xcd, 0x14, 0x8a, 0xe0, 0x1a, 0xcb, 0xf1, 0x46,
-    0xd1, 0xf2, 0xcb, 0x70, 0x06, 0xf8, 0xc5, 0xaa, 0x13, 0x1d, 0x38, 0x4b,
-    0xbb, 0x05, 0xf7, 0x0a, 0x36, 0x59, 0x7f, 0xdb, 0x3f, 0x9c, 0x64, 0xe0,
-    0x59, 0x5a, 0x3d, 0xa2, 0x22, 0xbf, 0xfe, 0x17, 0x01, 0xcc, 0xec, 0xd8,
-    0xc1, 0x67, 0xeb, 0x2b, 0x0f, 0xcc, 0xc8, 0x6f, 0xfb, 0x05, 0xcd, 0x01,
-    0xdc, 0x0a, 0x8c, 0x39, 0x7f, 0xf0, 0x78, 0x3f, 0x3b, 0x7e, 0x91, 0x92,
-    0xcb, 0xf7, 0x7c, 0xe5, 0xfa, 0xca, 0xd9, 0x16, 0x5e, 0x45, 0x74, 0x5b,
-    0xff, 0x3f, 0x72, 0x67, 0x82, 0x89, 0x96, 0x5f, 0xfb, 0xc7, 0x82, 0x64,
-    0xc2, 0xc7, 0xcb, 0x2c, 0x7a, 0x45, 0x77, 0x8c, 0x38, 0x7b, 0x70, 0x00,
-    0xa8, 0xc1, 0x15, 0x24, 0xf6, 0x41, 0x1c, 0x07, 0xe6, 0xb7, 0xfa, 0x7a,
-    0xe0, 0xcb, 0x3c, 0xc9, 0x59, 0x76, 0x12, 0xca, 0x59, 0x7f, 0xf4, 0x10,
-    0x33, 0xbe, 0x3d, 0x7e, 0x05, 0x94, 0x47, 0x9f, 0xd0, 0xbb, 0xe3, 0xe7,
-    0x8d, 0x65, 0xec, 0xfb, 0xab, 0x28, 0x66, 0xf9, 0xa4, 0x37, 0xf1, 0x96,
-    0x77, 0xc6, 0xb2, 0xd1, 0x87, 0x99, 0xc2, 0x1a, 0x1a, 0x66, 0xb8, 0xc8,
-    0x18, 0x55, 0xdf, 0xfe, 0xf1, 0xcd, 0xe3, 0xfb, 0xa5, 0x9b, 0xdd, 0x65,
-    0xff, 0xbc, 0x7b, 0xfd, 0x9a, 0xd1, 0xef, 0x59, 0x7f, 0xfb, 0x0b, 0xbc,
-    0x86, 0x38, 0x11, 0xf8, 0xd6, 0x5f, 0xcd, 0xe7, 0x1c, 0xb6, 0x59, 0x73,
-    0x5a, 0xb2, 0xa0, 0xf1, 0x5c, 0xba, 0xff, 0xbf, 0xe4, 0x8f, 0xce, 0x7b,
-    0x2c, 0xbe, 0xe6, 0x17, 0x56, 0x5e, 0xdc, 0x8d, 0x2c, 0xa3, 0x3f, 0xa7,
-    0x3a, 0x09, 0x0d, 0xef, 0x3f, 0x56, 0x5e, 0xeb, 0xee, 0xac, 0xbf, 0xdd,
-    0xf1, 0xb3, 0xfd, 0xcd, 0x65, 0xfe, 0x63, 0xd1, 0x20, 0xbe, 0x96, 0x58,
-    0x96, 0x51, 0x9e, 0x20, 0x4d, 0x2e, 0x13, 0x16, 0x56, 0xcb, 0x8e, 0xc3,
-    0x8d, 0xc4, 0x06, 0xb3, 0x26, 0x35, 0x0b, 0xd0, 0x8f, 0x28, 0x4d, 0x70,
-    0xb7, 0xa3, 0x81, 0x1f, 0x9f, 0x79, 0x10, 0x86, 0xfc, 0xc7, 0xe7, 0x37,
-    0x16, 0x5f, 0x78, 0xde, 0x4b, 0x2f, 0x0d, 0xe4, 0xb2, 0xa0, 0xde, 0xe1,
-    0x0d, 0x83, 0x08, 0x87, 0xfd, 0xa2, 0xff, 0xf4, 0xe2, 0x7e, 0xc6, 0x83,
-    0x2d, 0x44, 0x96, 0x5f, 0xa3, 0xbe, 0x89, 0x96, 0x5d, 0xde, 0x2c, 0xbf,
-    0x3b, 0x02, 0xc6, 0x96, 0x51, 0xa2, 0xcf, 0xc9, 0x6e, 0x50, 0x42, 0xf7,
-    0xf8, 0xcb, 0xb2, 0xcd, 0x62, 0xcb, 0xff, 0x8c, 0x05, 0x8d, 0x89, 0x87,
-    0x1b, 0x2c, 0xbf, 0xfa, 0x45, 0x8d, 0x72, 0xcf, 0x3b, 0x56, 0x5f, 0xec,
-    0xec, 0x6f, 0x32, 0xfd, 0x65, 0xff, 0xf7, 0xed, 0x79, 0x4b, 0x3f, 0x13,
-    0xbb, 0x70, 0x2b, 0x28, 0x08, 0x89, 0xd1, 0xa5, 0xfe, 0xd4, 0x18, 0xc9,
-    0xe4, 0xb2, 0xff, 0xb3, 0x7c, 0x67, 0xdf, 0x75, 0x95, 0x56, 0x5f, 0xc1,
-    0x8e, 0xf3, 0x0a, 0x71, 0xfa, 0x78, 0xc6, 0xfc, 0x0f, 0x7c, 0xfb, 0xab,
-    0x2f, 0xf7, 0x22, 0x4c, 0x31, 0x9b, 0xab, 0x2f, 0xfc, 0x32, 0x0f, 0x79,
-    0x05, 0x1c, 0x59, 0x50, 0x7e, 0xa6, 0x71, 0x66, 0x5a, 0xca, 0x92, 0xaf,
-    0x10, 0x18, 0xfc, 0x88, 0x70, 0xca, 0x28, 0x4b, 0x85, 0x17, 0x7c, 0x28,
-    0x45, 0x20, 0xbf, 0xf3, 0xeb, 0x37, 0xe0, 0xf4, 0x42, 0xac, 0xbf, 0xff,
-    0x04, 0xa5, 0x85, 0xd3, 0x9f, 0xce, 0x93, 0xc9, 0x65, 0xfe, 0x8f, 0xe3,
-    0xd9, 0xf4, 0x96, 0x51, 0xa2, 0x24, 0x95, 0x6b, 0xf4, 0x75, 0x76, 0x19,
-    0x37, 0xd3, 0x3c, 0xce, 0xb2, 0xf9, 0xfa, 0x19, 0x2c, 0xa9, 0xc7, 0x8a,
-    0x44, 0x77, 0xfd, 0xe7, 0x2c, 0x9a, 0x51, 0xf2, 0xcb, 0xff, 0xbc, 0x7a,
-    0xce, 0x16, 0x6f, 0xf1, 0xac, 0xbf, 0x16, 0x70, 0x33, 0xb0, 0xff, 0x66,
-    0x39, 0xbf, 0x68, 0x0e, 0xe0, 0x54, 0x40, 0xcb, 0xf9, 0xf6, 0xfd, 0xc8,
-    0x68, 0xac, 0x1e, 0xbd, 0x9c, 0x0e, 0x1f, 0x84, 0xf9, 0xa5, 0xef, 0x3c,
-    0xa7, 0x23, 0x94, 0xa1, 0x61, 0x7f, 0xde, 0x3c, 0x2c, 0x00, 0xf1, 0x65,
-    0x35, 0x53, 0x19, 0x37, 0x76, 0x38, 0x5d, 0xe7, 0x57, 0xba, 0x18, 0x59,
-    0x7d, 0xfe, 0xb9, 0xc5, 0x97, 0xfb, 0xfe, 0x9e, 0xcd, 0x80, 0x2c, 0xaf,
-    0x8f, 0xd5, 0xc7, 0x08, 0x92, 0xfc, 0x39, 0xe5, 0xc7, 0x3c, 0xac, 0xbf,
-    0x81, 0xf7, 0xbe, 0x7d, 0xd5, 0x97, 0xfa, 0x34, 0xfa, 0xee, 0x01, 0x65,
-    0xff, 0xc6, 0x39, 0xd9, 0x9f, 0x7e, 0xe5, 0xd5, 0x96, 0x94, 0x8f, 0xe3,
-    0x86, 0x55, 0x08, 0xd3, 0x78, 0x55, 0xd4, 0x2e, 0xf2, 0xe4, 0xbd, 0x13,
-    0x85, 0xdb, 0x97, 0x06, 0x30, 0x5b, 0x8e, 0x4b, 0x2f, 0xef, 0xba, 0x3c,
-    0xc6, 0x16, 0x5f, 0x64, 0xc6, 0xd5, 0x94, 0x33, 0xe7, 0xc1, 0x61, 0x0b,
-    0xed, 0x0b, 0x2f, 0xa0, 0x8f, 0xf5, 0x96, 0xcf, 0x1b, 0x1e, 0x88, 0x5f,
-    0xed, 0x13, 0x8a, 0x27, 0xc2, 0xac, 0xbb, 0xfd, 0xeb, 0x28, 0x67, 0xa3,
-    0xe3, 0x7b, 0xff, 0xc7, 0xf8, 0x3c, 0x7e, 0x28, 0xcd, 0x62, 0xcb, 0xfe,
-    0xf8, 0x71, 0xc3, 0x1f, 0xa1, 0x65, 0xe7, 0xd6, 0xca, 0x8c, 0x15, 0x7f,
-    0xe7, 0xd6, 0x17, 0xfc, 0xef, 0x3e, 0x59, 0x7f, 0xff, 0xff, 0x67, 0x7c,
-    0xe4, 0xc4, 0xee, 0x69, 0xdf, 0xbb, 0xf0, 0x73, 0xb1, 0xae, 0x5f, 0x49,
-    0x71, 0x05, 0xaf, 0xfc, 0xee, 0xc0, 0x1c, 0x73, 0x98, 0x15, 0x71, 0x05,
-    0xaf, 0xfe, 0xf1, 0xf8, 0xe0, 0xbb, 0x39, 0x81, 0x57, 0x10, 0x5a, 0xff,
-    0x41, 0x97, 0x67, 0x30, 0x2a, 0xe2, 0x0b, 0x5f, 0xcd, 0xc1, 0xce, 0x60,
-    0x55, 0xc4, 0x16, 0xbf, 0xff, 0xe7, 0x22, 0x36, 0xce, 0xe0, 0x3c, 0x7a,
-    0x36, 0x36, 0xc1, 0x57, 0x10, 0x5a, 0xef, 0xa7, 0x0d, 0x39, 0xc0, 0x28,
-    0x69, 0x51, 0xd0, 0xc8, 0xfe, 0xa1, 0x56, 0x7f, 0x90, 0x0a, 0x51, 0xbd,
-    0xfe, 0x38, 0x63, 0x9d, 0xe7, 0xcb, 0x2f, 0x9f, 0x5f, 0xba, 0xcb, 0xff,
-    0xbc, 0x7e, 0x38, 0x2e, 0xce, 0x60, 0x55, 0xc4, 0x16, 0xbf, 0xe9, 0xb8,
-    0x03, 0xda, 0x73, 0x02, 0xae, 0x20, 0xb5, 0xfb, 0xbc, 0x86, 0xce, 0x02,
-    0x28, 0x44, 0x54, 0xbf, 0xfd, 0x38, 0x1e, 0x30, 0x47, 0x79, 0x39, 0x81,
-    0x57, 0x10, 0x5a, 0xff, 0xff, 0xe2, 0x23, 0x6c, 0xe0, 0xe4, 0xee, 0x03,
-    0xc7, 0xa3, 0x63, 0x6c, 0x15, 0x71, 0x05, 0xab, 0x13, 0x25, 0xf9, 0x0d,
-    0xd7, 0xaf, 0xfb, 0xc7, 0xa3, 0x63, 0x6c, 0x15, 0x71, 0x05, 0xaf, 0xff,
-    0x9d, 0xfe, 0x97, 0x3c, 0x63, 0x1c, 0x6a, 0x12, 0x5f, 0xfb, 0x25, 0x20,
-    0xf3, 0x45, 0xb4, 0xfa, 0xe2, 0x0b, 0x50, 0x11, 0xcf, 0xa4, 0x8e, 0x27,
-    0xdf, 0xf8, 0x07, 0xae, 0xbf, 0xfc, 0x9c, 0x2a, 0xe2, 0x0b, 0x5f, 0xde,
-    0x3f, 0x78, 0xff, 0x54, 0x01, 0x6b, 0xf6, 0x7f, 0x39, 0x81, 0x57, 0x10,
-    0x5a, 0xec, 0xe8, 0x0f, 0xd7, 0xc7, 0x75, 0xf2, 0x3c, 0xb9, 0x0c, 0x5b,
-    0xf9, 0xb8, 0x39, 0xcc, 0x0a, 0xb8, 0x82, 0xd7, 0xfe, 0x07, 0x8f, 0x46,
-    0xc6, 0xd8, 0x2a, 0xe2, 0x0b, 0x5d, 0x93, 0x9d, 0x11, 0xbc, 0x3f, 0xbf,
-    0xc1, 0x36, 0xb9, 0x7d, 0x25, 0xc4, 0x16, 0xbf, 0xf6, 0x1e, 0xfc, 0x2c,
-    0x1b, 0xc9, 0x71, 0x05, 0x9a, 0x78, 0x14, 0x35, 0xe0, 0xdd, 0x1b, 0xfe,
-    0x6a, 0x51, 0xf4, 0x72, 0x31, 0x7e, 0xc6, 0x44, 0x18, 0x5b, 0x0a, 0xdf,
-    0x77, 0xf0, 0xa8, 0x82, 0xcc, 0xd1, 0x19, 0x73, 0x81, 0x65, 0xb8, 0x36,
-    0x50, 0xc8, 0x0e, 0x7f, 0xa4, 0xc9, 0x74, 0xe2, 0xe9, 0x6e, 0x2c, 0xbd,
-    0x12, 0xdc, 0x59, 0x50, 0x6e, 0x48, 0x6a, 0xb6, 0x66, 0x01, 0x8d, 0x83,
-    0xe7, 0x7d, 0x11, 0x7f, 0x4a, 0x61, 0x28, 0x45, 0x5f, 0xfd, 0x92, 0x2c,
-    0xef, 0x8f, 0x3e, 0xea, 0xcb, 0xfd, 0x1e, 0x31, 0x7e, 0x97, 0x16, 0x5f,
-    0xa3, 0xbc, 0xf1, 0xac, 0xbf, 0xf6, 0xb1, 0x8f, 0x63, 0x43, 0xad, 0x96,
-    0x5f, 0xf7, 0xc5, 0x86, 0xdc, 0x2f, 0xd6, 0x5f, 0xff, 0xff, 0x9e, 0x62,
-    0x71, 0x73, 0x79, 0xf3, 0xd9, 0xfc, 0xfe, 0x77, 0x8e, 0xdc, 0xfb, 0xab,
-    0x2f, 0xd2, 0xef, 0x30, 0x96, 0x5f, 0xfe, 0x70, 0x41, 0x0c, 0xb3, 0x7e,
-    0x8f, 0x8b, 0x2f, 0xfd, 0xc9, 0xa4, 0x11, 0xcd, 0x20, 0x8d, 0x65, 0x6c,
-    0xa8, 0x46, 0x46, 0xa3, 0x27, 0xc4, 0x16, 0x0e, 0x3e, 0x84, 0x4f, 0x89,
-    0xfa, 0x93, 0x7f, 0xd9, 0xd1, 0x70, 0x87, 0xe8, 0x59, 0x7f, 0xf4, 0x7d,
-    0x21, 0x1b, 0xce, 0xc7, 0xc2, 0xac, 0xbf, 0x4b, 0x73, 0x70, 0x3b, 0x2c,
-    0xb7, 0x8c, 0xfe, 0x5d, 0x26, 0xfb, 0xa5, 0x0d, 0x59, 0x7e, 0xd4, 0x7d,
-    0x2e, 0x2c, 0xad, 0x93, 0x21, 0x94, 0x2c, 0x4c, 0x9b, 0x44, 0x37, 0x9a,
-    0xfd, 0x59, 0x73, 0xf1, 0x65, 0xff, 0xf8, 0x84, 0xe9, 0x90, 0x65, 0x9c,
-    0xff, 0xbd, 0xf9, 0x65, 0xff, 0x83, 0xc9, 0xfc, 0xd7, 0xed, 0x3e, 0x2c,
-    0xbd, 0x9a, 0x61, 0x65, 0xff, 0xdb, 0xf7, 0xc7, 0x1f, 0xdf, 0x4b, 0x3a,
-    0xb2, 0xb1, 0x30, 0x1f, 0xd6, 0x27, 0xd0, 0xc4, 0x1d, 0xbf, 0xdf, 0x87,
-    0xa5, 0x1d, 0xe2, 0xca, 0x92, 0x75, 0x2c, 0x0e, 0x7f, 0x18, 0xbf, 0x10,
-    0xaa, 0x15, 0xe6, 0xe4, 0x73, 0x6f, 0x1f, 0x65, 0xe6, 0x9f, 0x16, 0x5f,
-    0xa5, 0x1b, 0xdf, 0xcb, 0x2b, 0x63, 0xc5, 0x71, 0xcb, 0xff, 0xb3, 0xee,
-    0xf0, 0xca, 0x3f, 0x76, 0xac, 0xbf, 0xff, 0x67, 0x7c, 0x73, 0x98, 0x79,
-    0xc5, 0x82, 0xbf, 0xeb, 0x2f, 0xf7, 0x1f, 0xc7, 0xc8, 0x92, 0xcb, 0xff,
-    0x32, 0xf0, 0x8b, 0x04, 0x82, 0xfd, 0x65, 0xfe, 0xcf, 0x1f, 0x0c, 0x32,
-    0x59, 0x5b, 0x26, 0x86, 0x48, 0x9d, 0x5a, 0x09, 0x96, 0xe2, 0x0d, 0xf7,
-    0xdc, 0x8f, 0x96, 0x5f, 0xfa, 0x59, 0xf4, 0xb5, 0x1d, 0x7e, 0xac, 0xbc,
-    0xd8, 0x92, 0xcb, 0xf6, 0x0f, 0xc1, 0x15, 0x65, 0x4e, 0x45, 0x44, 0xc4,
-    0x8e, 0x7e, 0x43, 0x97, 0xfc, 0x0f, 0x18, 0xfd, 0x1d, 0xe2, 0xcb, 0xc3,
-    0x7e, 0xac, 0xbf, 0xff, 0xc5, 0x1f, 0x77, 0xb9, 0x34, 0xb3, 0x6f, 0xa0,
-    0xa3, 0x8b, 0x2f, 0xfd, 0xc8, 0x28, 0x97, 0x7d, 0x84, 0xb2, 0xb4, 0x99,
-    0x8b, 0x4f, 0x9c, 0xe7, 0xf1, 0xce, 0x31, 0x5e, 0x39, 0xfc, 0x59, 0x7f,
-    0x60, 0xbc, 0x3f, 0xba, 0xb2, 0xfe, 0xe1, 0x8f, 0x05, 0xe2, 0xcb, 0xf9,
-    0xf4, 0xe3, 0x3c, 0x59, 0x76, 0xbf, 0x59, 0x76, 0x0a, 0xb2, 0x9c, 0xd7,
-    0xf4, 0x62, 0xdf, 0x42, 0x3d, 0x76, 0x1e, 0xf8, 0xbf, 0xc5, 0xdd, 0x5a,
-    0xbe, 0x17, 0x3c, 0xeb, 0x2f, 0x98, 0xd1, 0x8a, 0xb2, 0xfd, 0xb3, 0xfa,
-    0x37, 0x56, 0x5f, 0xb6, 0xec, 0xfe, 0x75, 0x65, 0x4f, 0x47, 0xf7, 0x84,
-    0x81, 0x2b, 0xbf, 0x98, 0xf4, 0x7d, 0xdc, 0x59, 0x7f, 0x8b, 0x07, 0xe8,
-    0x14, 0x96, 0x54, 0x1f, 0x0e, 0x8b, 0xea, 0x17, 0x9c, 0x32, 0x36, 0x53,
-    0x94, 0x4e, 0xf1, 0xa0, 0x7e, 0xa4, 0x50, 0x9d, 0x0c, 0x25, 0x2f, 0x8a,
-    0x6e, 0x62, 0xcb, 0xf4, 0xb3, 0x6e, 0xc2, 0xcb, 0xff, 0x8a, 0x36, 0x6f,
-    0x8f, 0x5a, 0x79, 0x2c, 0xa5, 0x94, 0x68, 0x99, 0x98, 0x88, 0x8a, 0x27,
-    0xd1, 0x2f, 0xf6, 0xdb, 0x41, 0x7d, 0x9d, 0x59, 0x7e, 0x1e, 0x61, 0x01,
-    0x65, 0xfb, 0xee, 0x93, 0xf9, 0x65, 0xd1, 0x32, 0xca, 0xd8, 0xf9, 0x64,
-    0x4d, 0xf9, 0x45, 0x62, 0x61, 0x46, 0x7e, 0x18, 0x4d, 0x5f, 0xfd, 0xa2,
-    0x0f, 0xdd, 0x2c, 0xd9, 0xc9, 0x65, 0xff, 0xfc, 0x3f, 0x07, 0x63, 0xcd,
-    0x6b, 0x23, 0xe9, 0x1b, 0x56, 0x5f, 0xe7, 0x98, 0x83, 0xd2, 0x85, 0x97,
-    0xf9, 0xc6, 0x27, 0x7a, 0x62, 0xac, 0xbc, 0xfa, 0xd9, 0x65, 0xdf, 0xc2,
-    0xcb, 0xe3, 0x86, 0xe2, 0xca, 0x59, 0x7f, 0x3b, 0x1d, 0x8d, 0x7e, 0xb2,
-    0x86, 0x6e, 0x88, 0x2e, 0xff, 0xff, 0x41, 0x8c, 0xa0, 0x20, 0xee, 0x00,
-    0x70, 0x01, 0x1a, 0xb2, 0xef, 0xe1, 0x65, 0xd0, 0xc2, 0xcb, 0xfe, 0xce,
-    0xf2, 0x1a, 0x26, 0x4c, 0xb2, 0xff, 0x73, 0x3c, 0x7c, 0x0e, 0xcb, 0x2e,
-    0x14, 0x54, 0x97, 0xfc, 0x59, 0xbd, 0xe5, 0xc3, 0x1a, 0xca, 0x02, 0x7f,
-    0x86, 0x3b, 0xa1, 0x76, 0xad, 0x78, 0x83, 0xf6, 0x06, 0x58, 0xb9, 0x0b,
-    0xf0, 0xe8, 0x53, 0x41, 0x06, 0x6f, 0x0a, 0x28, 0xa9, 0x2c, 0xd4, 0x8c,
-    0xcd, 0x05, 0xf4, 0xce, 0xfa, 0x48, 0xcd, 0x1c, 0x22, 0x42, 0xfa, 0xb6,
-    0x5c, 0x2d, 0x02, 0x27, 0xcb, 0x9e, 0x32, 0x79, 0x62, 0x57, 0xf7, 0x63,
-    0x3d, 0x9b, 0x2c, 0xbb, 0x1a, 0xb2, 0xbe, 0x3c, 0x3e, 0x16, 0xdc, 0x7c,
-    0x59, 0x4c, 0x97, 0xc0, 0xa7, 0x89, 0x5e, 0x3b, 0x42, 0x46, 0x51, 0xff,
-    0x8d, 0x23, 0x27, 0x12, 0xd8, 0x94, 0x8d, 0xf4, 0xad, 0x93, 0x9c, 0xae,
-    0xd4, 0x68, 0x8d, 0x86, 0xe7, 0xa9, 0x22, 0x0f, 0x4c, 0xc5, 0xfd, 0xac,
-    0xa7, 0x88, 0x79, 0x3d, 0xe1, 0xd9, 0x44, 0x61, 0x9c, 0x61, 0xdf, 0x09,
-    0x89, 0xf2, 0x3b, 0x84, 0xea, 0xcb, 0xfb, 0x3f, 0xfc, 0xf5, 0x25, 0x97,
-    0x03, 0x16, 0x50, 0xcf, 0x15, 0xcb, 0xef, 0xfd, 0x0d, 0x9f, 0x7d, 0xb0,
-    0x66, 0x2a, 0xcb, 0xb0, 0x55, 0x97, 0x47, 0x56, 0x56, 0xc6, 0xb4, 0x02,
-    0xf6, 0x6a, 0xca, 0x92, 0x28, 0xb1, 0xbf, 0xa4, 0x57, 0xfa, 0x46, 0x58,
-    0xd0, 0xf9, 0x65, 0xfb, 0xce, 0x64, 0xeb, 0x2f, 0xfd, 0x9d, 0xe7, 0x8d,
-    0xaf, 0x9a, 0x59, 0x50, 0x89, 0x46, 0x0c, 0x88, 0x96, 0xfd, 0x93, 0xb3,
-    0xfe, 0xac, 0xbe, 0x9d, 0xd8, 0xde, 0xb2, 0xfd, 0x80, 0x86, 0x9a, 0xcb,
-    0xec, 0x6e, 0x75, 0x65, 0xfd, 0xe8, 0x10, 0xe3, 0x65, 0x97, 0xfc, 0x7b,
-    0xf5, 0x93, 0x67, 0xdd, 0x59, 0x40, 0x3e, 0xaf, 0x17, 0x5c, 0xec, 0x2c,
-    0xad, 0x1b, 0x9e, 0x91, 0x5f, 0x3b, 0x5e, 0x65, 0x97, 0xe3, 0x81, 0x62,
-    0x65, 0x97, 0xcf, 0xdf, 0xb8, 0xb2, 0x8c, 0xf2, 0xc8, 0xa2, 0xff, 0xff,
-    0xcf, 0x30, 0x64, 0x10, 0x4e, 0xf1, 0xf7, 0xb1, 0xf4, 0x6d, 0x1c, 0x59,
-    0x7e, 0x27, 0xdd, 0xda, 0x65, 0x97, 0xd3, 0x72, 0x3a, 0xb2, 0x80, 0x8c,
-    0x09, 0x9c, 0x42, 0x59, 0x61, 0x56, 0x5f, 0xff, 0xe2, 0x77, 0xdf, 0x12,
-    0xf4, 0x6b, 0x68, 0xef, 0x1e, 0x4b, 0x2f, 0xe8, 0x07, 0x78, 0xff, 0x2c,
-    0xbe, 0xc6, 0xbf, 0xcb, 0x2b, 0x75, 0x16, 0x24, 0xc2, 0x21, 0x75, 0xe3,
-    0xfa, 0x65, 0x97, 0xc1, 0x65, 0xb4, 0xd6, 0x5f, 0xb3, 0x36, 0x0f, 0x16,
-    0x5f, 0x68, 0x8f, 0xf5, 0x97, 0xc6, 0x07, 0xd2, 0xcb, 0xa3, 0xf5, 0x97,
-    0xc1, 0xd8, 0x2c, 0xfc, 0x6e, 0x04, 0x21, 0xa3, 0x44, 0xbf, 0x96, 0xad,
-    0xfa, 0xcb, 0xb0, 0x0b, 0x2f, 0xd9, 0xad, 0x1e, 0x96, 0x56, 0xe9, 0xe7,
-    0xf8, 0x4b, 0xf1, 0x6b, 0xf3, 0xc7, 0xd8, 0x05, 0x97, 0xfd, 0xe7, 0xe7,
-    0x8f, 0x67, 0x25, 0x97, 0xcf, 0xb0, 0x92, 0x59, 0x4c, 0x96, 0x40, 0x5c,
-    0xf6, 0xbb, 0x10, 0xc3, 0x94, 0x30, 0xc6, 0x5f, 0x85, 0x4c, 0x13, 0x7c,
-    0x4c, 0x70, 0xc4, 0xdd, 0x21, 0x99, 0xb7, 0x50, 0xe0, 0xf1, 0x8b, 0xc3,
-    0x0f, 0xf3, 0x36, 0x58, 0xf7, 0x09, 0xbb, 0x0b, 0xf0, 0xb8, 0x8a, 0x66,
-    0x21, 0x3e, 0xe1, 0xc5, 0xfc, 0x41, 0x1b, 0x5e, 0x4b, 0x2f, 0x1e, 0xc1,
-    0x59, 0x7e, 0x8f, 0xcf, 0xec, 0x59, 0x73, 0x42, 0xb2, 0xfc, 0xfd, 0xf0,
-    0x49, 0x65, 0xcd, 0xde, 0xb2, 0xc3, 0x83, 0xff, 0x32, 0x8f, 0x0b, 0x91,
-    0x3d, 0xff, 0xe9, 0x14, 0x4e, 0x69, 0x43, 0x1d, 0x3d, 0x96, 0x5f, 0x9d,
-    0xb9, 0xe6, 0xac, 0xaf, 0x8f, 0xcf, 0xa9, 0x96, 0x15, 0x65, 0xee, 0xea,
-    0x16, 0x5f, 0x66, 0xc2, 0x49, 0x65, 0xe1, 0x0b, 0xf5, 0x94, 0x47, 0x85,
-    0xd2, 0x4b, 0xfb, 0xbb, 0xf0, 0xb0, 0x6b, 0x2a, 0x63, 0xcf, 0xe1, 0x0d,
-    0xfd, 0x9c, 0xc9, 0x1e, 0x96, 0x5e, 0x0e, 0xee, 0xe2, 0xcb, 0x6f, 0x59,
-    0x7f, 0xda, 0xf3, 0x88, 0xfe, 0x3f, 0xd6, 0x54, 0x1e, 0x69, 0x89, 0xdf,
-    0xc6, 0x5b, 0x78, 0x3c, 0x59, 0x5e, 0x3c, 0xee, 0x90, 0x5f, 0x6b, 0x68,
-    0xea, 0xcb, 0xdc, 0x96, 0xcb, 0x2b, 0x64, 0xc8, 0x72, 0x17, 0xce, 0x44,
-    0x21, 0x1d, 0x42, 0xe0, 0x84, 0x8b, 0x72, 0x13, 0x87, 0x0b, 0x29, 0x88,
-    0xda, 0x24, 0xf0, 0xad, 0x22, 0x3e, 0xc6, 0x9b, 0x79, 0xe7, 0x08, 0xb2,
-    0xf4, 0xc7, 0xe5, 0x97, 0xf4, 0x69, 0xe6, 0x3f, 0x2c, 0xbf, 0x70, 0x70,
-    0x5b, 0x39, 0xe5, 0x70, 0x76, 0xfe, 0xcd, 0xa3, 0xde, 0x85, 0x97, 0xec,
-    0x9b, 0xd8, 0x4b, 0x2f, 0xe8, 0xc1, 0x08, 0x3f, 0xac, 0xad, 0x22, 0x0b,
-    0xc5, 0xa4, 0x4f, 0x79, 0xb0, 0xd5, 0x95, 0xf2, 0x61, 0x7a, 0x86, 0x03,
-    0x4b, 0xef, 0xff, 0x8a, 0x53, 0xb0, 0x67, 0xcf, 0xba, 0x17, 0xe2, 0xcb,
-    0xf7, 0x82, 0x51, 0xbd, 0x65, 0xfc, 0x4f, 0xd9, 0x43, 0x0b, 0x2a, 0x0f,
-    0x58, 0x42, 0x9b, 0xff, 0xdc, 0x8d, 0x03, 0xbc, 0x3e, 0xfb, 0x06, 0xb2,
-    0xfb, 0x33, 0xe9, 0x2c, 0xbd, 0xc3, 0x99, 0x65, 0x98, 0x23, 0x7f, 0xc2,
-    0x2b, 0xfe, 0xd1, 0xc7, 0x73, 0x7b, 0x8d, 0x65, 0xff, 0xb6, 0x28, 0xf8,
-    0xc6, 0x51, 0xb2, 0xcb, 0xfd, 0xff, 0x3a, 0x50, 0xde, 0x2c, 0xbf, 0xcd,
-    0x8f, 0x3f, 0x23, 0x75, 0x65, 0x41, 0xf4, 0xb9, 0xa5, 0x3a, 0x32, 0x0a,
-    0x15, 0x14, 0x04, 0xf5, 0xf5, 0x08, 0x9f, 0x13, 0x94, 0x60, 0x37, 0xe9,
-    0xde, 0x8d, 0x49, 0x65, 0x4e, 0x5c, 0xbe, 0x88, 0xdd, 0x30, 0xdc, 0x10,
-    0xa8, 0x78, 0xfe, 0x45, 0x48, 0xbc, 0xde, 0x42, 0xcb, 0xfb, 0x69, 0xa5,
-    0x3d, 0xeb, 0x65, 0x97, 0xcd, 0xc7, 0xf2, 0xcb, 0x6c, 0xb2, 0xfd, 0xdf,
-    0x1b, 0x74, 0xb2, 0xa4, 0x6e, 0xb4, 0x25, 0x7b, 0xc3, 0x35, 0x97, 0xef,
-    0x61, 0xcb, 0x8b, 0x2f, 0xff, 0xbd, 0x02, 0x33, 0xe9, 0x3f, 0xfc, 0xe4,
-    0x7e, 0x92, 0xfd, 0x9d, 0x70, 0xb2, 0xd6, 0x5f, 0xb4, 0x07, 0x70, 0x2e,
-    0x20, 0x45, 0xee, 0x47, 0xcb, 0x2f, 0x8f, 0x9a, 0x92, 0xcb, 0x7f, 0x87,
-    0xe7, 0xf1, 0xa3, 0x47, 0x6f, 0x8b, 0x05, 0xdc, 0x59, 0x71, 0xec, 0xb2,
-    0x8c, 0xde, 0x74, 0x96, 0xf0, 0x48, 0x0b, 0x2f, 0xb6, 0x27, 0x6a, 0xcb,
-    0x9c, 0x96, 0x54, 0x1b, 0x7d, 0x88, 0xaa, 0x4a, 0x87, 0xc6, 0x4f, 0xf2,
-    0xa6, 0xa1, 0x3c, 0xd7, 0x2f, 0x10, 0x75, 0x4e, 0xfe, 0x7d, 0x66, 0xfc,
-    0x1a, 0xcb, 0xf0, 0x1d, 0x8f, 0x1a, 0xca, 0xfc, 0xf5, 0x88, 0xba, 0xf0,
-    0xde, 0x4b, 0x2d, 0x25, 0x95, 0x06, 0xb7, 0x70, 0x72, 0xfb, 0xbb, 0x39,
-    0x2c, 0xbc, 0xd8, 0x02, 0xcb, 0x9d, 0x85, 0x95, 0x86, 0xcc, 0x87, 0x2d,
-    0x25, 0x97, 0xf6, 0x6c, 0x1e, 0xef, 0xea, 0xca, 0x83, 0xc2, 0x60, 0x46,
-    0xff, 0x9e, 0x5a, 0x8d, 0x9f, 0x40, 0x59, 0x63, 0x59, 0x79, 0x83, 0xea,
-    0xcb, 0xdc, 0x7e, 0xac, 0xa8, 0x3c, 0x96, 0x04, 0x3e, 0x1d, 0xba, 0x77,
-    0x96, 0x5f, 0xcd, 0xe9, 0x8c, 0x30, 0xb2, 0xf3, 0x7a, 0x05, 0x96, 0xec,
-    0x1e, 0x56, 0x16, 0xdf, 0xd0, 0xdc, 0x62, 0x38, 0xb2, 0xb6, 0x54, 0xc7,
-    0x84, 0x60, 0x55, 0xd3, 0x0b, 0x48, 0xbd, 0x08, 0x2f, 0xcc, 0x09, 0x8f,
-    0xa4, 0xd7, 0xcd, 0xcd, 0x62, 0xcb, 0xfe, 0xff, 0xd9, 0xf4, 0xba, 0x73,
-    0x2c, 0xac, 0x3d, 0xd0, 0x90, 0xdd, 0x9b, 0x2c, 0xb0, 0x56, 0x50, 0xcd,
-    0x46, 0x85, 0xef, 0xf1, 0x38, 0xbc, 0xe4, 0x7e, 0xb2, 0xf4, 0x3e, 0x96,
-    0x5f, 0xfb, 0xce, 0x5d, 0xe1, 0x05, 0xc4, 0x59, 0x7f, 0xda, 0xd1, 0xfd,
-    0x2e, 0xbf, 0xcb, 0x2f, 0x4f, 0xbb, 0x0b, 0x2f, 0xfa, 0x1b, 0x2c, 0xdb,
-    0x02, 0xcb, 0x59, 0x7f, 0xd1, 0xf9, 0xcb, 0xc6, 0x5f, 0xac, 0xb6, 0xcb,
-    0x2e, 0x7e, 0xe8, 0xf2, 0xd9, 0x67, 0x35, 0x88, 0xd9, 0x32, 0x07, 0x84,
-    0x45, 0xe1, 0x60, 0x45, 0x97, 0x9c, 0x86, 0xba, 0xbe, 0x97, 0xd2, 0x0c,
-    0x30, 0xb2, 0xdf, 0xac, 0xac, 0x36, 0xae, 0x47, 0x50, 0xaa, 0x38, 0x64,
-    0x2c, 0x1a, 0x00, 0x6c, 0xcf, 0xb5, 0x18, 0xa7, 0x8c, 0xbf, 0x1e, 0xea,
-    0xed, 0xfe, 0xef, 0xb2, 0x5e, 0x3d, 0xeb, 0x2f, 0x9b, 0xa0, 0xec, 0xb2,
-    0xff, 0xf8, 0x8d, 0x86, 0x7c, 0xef, 0x82, 0xf2, 0x94, 0x2c, 0xa8, 0x3f,
-    0x6c, 0x24, 0xbf, 0x7b, 0x3b, 0xc8, 0x59, 0x7e, 0x2e, 0x87, 0x3c, 0xb2,
-    0xe9, 0xc1, 0x59, 0x50, 0x78, 0x1b, 0x13, 0xd6, 0xc9, 0xed, 0x4a, 0x10,
-    0xcc, 0x42, 0xac, 0x04, 0x1a, 0x67, 0xbc, 0x37, 0x92, 0xcb, 0x8f, 0x4b,
-    0x2b, 0x0d, 0x97, 0x87, 0x2f, 0xce, 0x44, 0x6d, 0x59, 0x7b, 0x37, 0x88,
-    0xb2, 0xe3, 0xf2, 0xcb, 0xc3, 0x79, 0x2c, 0xbe, 0x76, 0xe3, 0x56, 0x5f,
-    0x1b, 0x63, 0x75, 0x65, 0xc7, 0xa9, 0xc7, 0x8b, 0x84, 0x34, 0x34, 0x52,
-    0xe0, 0xb7, 0x98, 0x6f, 0xc6, 0xd7, 0x2c, 0x59, 0x78, 0xe2, 0x4b, 0x2a,
-    0x73, 0x38, 0x49, 0x90, 0x39, 0x06, 0xf2, 0x5b, 0x19, 0x0e, 0x4a, 0x3b,
-    0x62, 0x18, 0x47, 0x2a, 0xcb, 0xd0, 0xe2, 0x79, 0xcb, 0x1f, 0xe1, 0x12,
-    0x44, 0x1c, 0x25, 0x0c, 0x31, 0x27, 0xcb, 0xf7, 0x09, 0x6f, 0xfe, 0xec,
-    0x1f, 0x9f, 0x50, 0xc6, 0x4c, 0xb2, 0xfc, 0x38, 0xf4, 0x08, 0xb2, 0x9c,
-    0xfb, 0x02, 0x89, 0x7f, 0x67, 0xb0, 0x01, 0xc5, 0x97, 0x69, 0xab, 0x2f,
-    0x8f, 0xb1, 0x25, 0x97, 0xf8, 0x2e, 0x72, 0x82, 0x02, 0xca, 0xc3, 0xe9,
-    0xf0, 0xbf, 0x08, 0x6f, 0xfc, 0x7a, 0xf3, 0xf1, 0x8d, 0x74, 0x0b, 0x2f,
-    0xc7, 0xd8, 0xef, 0x12, 0x5f, 0x02, 0x3b, 0xc4, 0x97, 0x0a, 0x2a, 0x4a,
-    0x91, 0xf1, 0x61, 0x38, 0xa4, 0x54, 0x91, 0x99, 0xaf, 0xaf, 0x23, 0xb8,
-    0x58, 0x68, 0xde, 0x72, 0xfd, 0x65, 0xe7, 0xf3, 0xac, 0xac, 0x3e, 0x06,
-    0x0a, 0x7c, 0x39, 0x7d, 0x31, 0x38, 0xab, 0x2f, 0x4d, 0xe3, 0x59, 0x7f,
-    0xfd, 0xd8, 0x06, 0x61, 0x77, 0xc7, 0x05, 0xb2, 0xcb, 0xff, 0xc2, 0xbf,
-    0x3a, 0x7e, 0x3c, 0x60, 0xf4, 0xb2, 0x96, 0x56, 0x22, 0x8b, 0xc9, 0xbc,
-    0x4a, 0xa1, 0xab, 0x72, 0x98, 0x85, 0xb0, 0x95, 0xfe, 0x37, 0xc2, 0x2f,
-    0xe1, 0x18, 0xb0, 0xbf, 0xbf, 0xfc, 0x51, 0xf7, 0xf8, 0x51, 0x2d, 0x6a,
-    0x16, 0x5f, 0xfb, 0xbc, 0xc0, 0x79, 0xcb, 0xbc, 0x59, 0x78, 0xcb, 0xf5,
-    0x93, 0x8d, 0xf5, 0x35, 0x16, 0xbb, 0xe1, 0x0f, 0x7f, 0xfa, 0x18, 0x69,
-    0xe3, 0x7b, 0xc0, 0x97, 0x56, 0x54, 0x1f, 0xa7, 0x8a, 0xaf, 0xe8, 0xf4,
-    0x7a, 0x36, 0x59, 0x7b, 0xb0, 0x35, 0x97, 0xff, 0x48, 0xdf, 0xe9, 0x77,
-    0x84, 0x6c, 0x2c, 0xa8, 0x3e, 0x1c, 0x1c, 0xad, 0x91, 0x5d, 0x28, 0x47,
-    0x5c, 0xfc, 0x59, 0x6f, 0x41, 0xbf, 0x72, 0x9b, 0xf4, 0xbc, 0x18, 0xd2,
-    0xcb, 0xfd, 0x1b, 0xcf, 0x79, 0x07, 0x8b, 0x2f, 0xe3, 0xe3, 0xfd, 0x2c,
-    0x59, 0x73, 0xb7, 0x47, 0xc7, 0x3e, 0x6d, 0x7f, 0x8e, 0x3a, 0x50, 0xde,
-    0x2c, 0xaf, 0x91, 0xd9, 0xe8, 0x45, 0x91, 0x85, 0xfb, 0x02, 0xd8, 0xe2,
-    0xca, 0x59, 0x76, 0x4d, 0xa3, 0x65, 0xc2, 0x7b, 0xfe, 0x30, 0xb2, 0xfd,
-    0x02, 0x16, 0xcb, 0x2f, 0xfa, 0x36, 0x8f, 0xba, 0x59, 0xb2, 0xcb, 0xdb,
-    0x86, 0x2a, 0xca, 0xc4, 0x62, 0x80, 0xb4, 0xcf, 0xb7, 0x0e, 0xaf, 0xfe,
-    0x13, 0x87, 0xc9, 0x8c, 0x78, 0x5f, 0xac, 0xbd, 0x22, 0x75, 0x97, 0xcf,
-    0xdc, 0xd9, 0x65, 0xd1, 0xf2, 0xcb, 0x8a, 0x16, 0x59, 0xb0, 0x7d, 0x3e,
-    0x1b, 0x22, 0x2e, 0x8b, 0xdf, 0xff, 0x82, 0xfb, 0xa2, 0x14, 0x79, 0xcf,
-    0xb1, 0xde, 0x2c, 0xa1, 0xa6, 0x8c, 0xf0, 0xaf, 0x24, 0x0b, 0xe0, 0x1e,
-    0xb1, 0x65, 0x4c, 0xac, 0x17, 0x51, 0x96, 0x7a, 0x38, 0x42, 0x34, 0xbe,
-    0xcf, 0x66, 0xcb, 0x2f, 0x49, 0xf4, 0xb2, 0xfe, 0xfd, 0xaf, 0x2c, 0x1a,
-    0xcb, 0x05, 0x65, 0xfb, 0x9e, 0x82, 0xea, 0xcb, 0x67, 0x0d, 0xc6, 0xf1,
-    0x1b, 0xec, 0xee, 0x0d, 0x25, 0xff, 0x39, 0x31, 0x84, 0xfd, 0xe2, 0xcb,
-    0xe7, 0x63, 0xf1, 0x56, 0x54, 0x8f, 0xf7, 0xc4, 0x24, 0x6f, 0x7d, 0x04,
-    0x50, 0xb2, 0xa6, 0x4d, 0xd3, 0x43, 0x84, 0xcd, 0xd8, 0x52, 0x88, 0x5d,
-    0x7f, 0x38, 0xaf, 0xd7, 0x61, 0x65, 0xf7, 0xfc, 0x6e, 0x96, 0x53, 0x0a,
-    0x8e, 0x4e, 0x39, 0x6d, 0x28, 0xf4, 0xba, 0xff, 0xfe, 0xfa, 0x59, 0xd6,
-    0x4c, 0xf7, 0x83, 0x0f, 0x4f, 0xb1, 0xa5, 0x97, 0xf7, 0x4f, 0x50, 0x16,
-    0x5a, 0xcb, 0xb4, 0xfe, 0x44, 0xb0, 0x8c, 0xb7, 0xfb, 0x3d, 0x93, 0xbd,
-    0x9b, 0x2c, 0xa7, 0x3e, 0x42, 0x2f, 0xbf, 0xfb, 0xa7, 0xb7, 0x78, 0x1d,
-    0xde, 0xbf, 0x96, 0x5f, 0xff, 0x16, 0x74, 0xf0, 0xbd, 0x9d, 0xf1, 0x81,
-    0x65, 0xff, 0x74, 0xdb, 0xcf, 0x40, 0x84, 0xb2, 0xff, 0xa0, 0x80, 0xfd,
-    0x7f, 0xbf, 0x9c, 0x88, 0x5f, 0x93, 0x2a, 0x49, 0x91, 0x7f, 0x0c, 0xeb,
-    0xf8, 0x2c, 0xb3, 0xd6, 0xb1, 0x65, 0xfe, 0xf6, 0x30, 0xf0, 0x73, 0xeb,
-    0x2f, 0xf6, 0x73, 0x37, 0x7d, 0x03, 0x59, 0x74, 0x6c, 0xb2, 0xf7, 0xa2,
-    0x65, 0x97, 0xfa, 0x0c, 0xb3, 0x61, 0x24, 0xb2, 0xdf, 0x0c, 0xf9, 0xf0,
-    0x5f, 0xc3, 0xb7, 0xe7, 0x98, 0x8e, 0x65, 0x96, 0xe0, 0x13, 0x2e, 0xf1,
-    0xa8, 0x61, 0x39, 0xbc, 0xd6, 0xfb, 0xac, 0x67, 0x96, 0x5d, 0xa9, 0x2c,
-    0xbf, 0xf1, 0x67, 0x7a, 0x1d, 0xbb, 0x80, 0x59, 0x7e, 0x18, 0x5f, 0x52,
-    0x59, 0x78, 0xb0, 0x55, 0x97, 0xcd, 0xe0, 0x8d, 0x59, 0x50, 0x78, 0x18,
-    0x39, 0x6e, 0x2c, 0xb0, 0xab, 0x2e, 0x3f, 0xd6, 0x5f, 0x0a, 0xe5, 0x25,
-    0x97, 0x0c, 0xd6, 0x5d, 0xe3, 0x59, 0x6e, 0x4e, 0x3e, 0x51, 0x8b, 0x80,
-    0x8a, 0x61, 0x6a, 0x34, 0x5e, 0x05, 0xde, 0x9d, 0x1d, 0xff, 0xc3, 0x36,
-    0xef, 0xe1, 0x65, 0xdf, 0xc2, 0xcb, 0xf0, 0x65, 0x84, 0xcc, 0xcd, 0x77,
-    0xe2, 0xf5, 0x0a, 0xa1, 0x46, 0x46, 0xc0, 0xb9, 0x9f, 0xe9, 0xa3, 0xf8,
-    0xc3, 0xc9, 0x5a, 0xff, 0xf1, 0x3f, 0xdc, 0x61, 0x87, 0x9c, 0x06, 0xfe,
-    0xb2, 0xfa, 0x35, 0x1e, 0x59, 0x58, 0x7e, 0x2e, 0xa1, 0x7f, 0xd8, 0x7f,
-    0x77, 0x51, 0x9f, 0x2c, 0xbf, 0xfb, 0xbe, 0xc6, 0x89, 0x1f, 0xe7, 0xdd,
-    0x59, 0x7f, 0xbe, 0x01, 0xe8, 0x48, 0x1a, 0xcb, 0xef, 0xda, 0xf2, 0x9c,
-    0x8d, 0x52, 0x20, 0xe1, 0xcf, 0x51, 0xee, 0x0f, 0x56, 0x5f, 0xdf, 0xb4,
-    0x4e, 0x09, 0xb2, 0xcb, 0xfb, 0x86, 0x45, 0x1f, 0x2c, 0xbb, 0x3e, 0x59,
-    0x5f, 0x1f, 0xb7, 0x4c, 0xe7, 0xcb, 0x2f, 0xff, 0x09, 0x02, 0xc4, 0xd2,
-    0x72, 0xcf, 0xba, 0xb2, 0xfb, 0xfd, 0x1e, 0x96, 0x54, 0x27, 0x0b, 0x25,
-    0x67, 0x84, 0x6f, 0x0c, 0xc5, 0x4c, 0xbf, 0xb9, 0xc8, 0x94, 0x69, 0x65,
-    0xff, 0x6a, 0x1a, 0x73, 0x43, 0xee, 0xac, 0xac, 0x3e, 0x80, 0x16, 0xde,
-    0x0f, 0xdd, 0x59, 0x67, 0x59, 0x74, 0xdc, 0x59, 0x44, 0x7c, 0xfc, 0x21,
-    0xe8, 0xf0, 0x82, 0x17, 0x60, 0xab, 0x2f, 0xfa, 0x3e, 0xcf, 0xe3, 0x7e,
-    0x6c, 0xb2, 0xfe, 0x2c, 0xef, 0x1f, 0xf5, 0x95, 0xa4, 0x40, 0x7e, 0x2f,
-    0xc3, 0xcb, 0xfc, 0x5b, 0x1e, 0xbe, 0xf6, 0xcb, 0x2f, 0xfa, 0x36, 0xe6,
-    0xb0, 0x11, 0xb2, 0xcb, 0xfd, 0x85, 0xb6, 0x0d, 0xfc, 0xb2, 0xa6, 0x3e,
-    0xc1, 0x4e, 0xaf, 0xec, 0x6e, 0x0c, 0xc5, 0x59, 0x73, 0x61, 0x65, 0x34,
-    0xf0, 0xdc, 0xb6, 0xfd, 0x93, 0x78, 0xfa, 0xb2, 0xff, 0xfe, 0xc2, 0x76,
-    0x26, 0x8c, 0xec, 0x36, 0x3d, 0x1f, 0xac, 0xa2, 0x44, 0x17, 0x0a, 0x2f,
-    0xb3, 0x3d, 0xc5, 0x95, 0x09, 0xf7, 0xe4, 0x28, 0x9d, 0x9f, 0xb0, 0xa3,
-    0xdc, 0x22, 0xbc, 0x28, 0xa2, 0xa4, 0xbf, 0x63, 0x04, 0x1e, 0x24, 0x66,
-    0x68, 0x2f, 0x99, 0x8a, 0x28, 0xab, 0x2e, 0xcf, 0xd6, 0x56, 0x1b, 0xfe,
-    0x94, 0x54, 0x22, 0x67, 0xaf, 0x37, 0xff, 0xc7, 0x27, 0xe3, 0x5a, 0xf2,
-    0x76, 0x3c, 0x6b, 0x2f, 0x8f, 0x5f, 0xf1, 0x65, 0xff, 0x82, 0xcb, 0xc9,
-    0xf2, 0xc1, 0x5f, 0xf5, 0x97, 0xff, 0x6d, 0x1f, 0xc4, 0xa3, 0x5a, 0xc1,
-    0x56, 0x54, 0x22, 0x30, 0xd1, 0xaf, 0xfb, 0x9a, 0x80, 0xf4, 0x8f, 0x7a,
-    0xcb, 0xff, 0x16, 0x70, 0x1e, 0x30, 0x41, 0x2c, 0xbf, 0xff, 0xcc, 0x0a,
-    0xfa, 0x61, 0x9f, 0x32, 0x44, 0x17, 0xe6, 0x12, 0xca, 0x84, 0x6d, 0x61,
-    0xd1, 0x9e, 0x5f, 0xda, 0x08, 0x3c, 0x7c, 0x59, 0x7c, 0x2b, 0x94, 0x96,
-    0x5f, 0xf7, 0x63, 0xef, 0xdf, 0xde, 0x35, 0x96, 0xf2, 0xca, 0xc3, 0xcb,
-    0x01, 0xd5, 0xf7, 0x0d, 0xb0, 0xb2, 0xfc, 0x59, 0xd8, 0xd2, 0xcb, 0xc2,
-    0x8a, 0x2a, 0x4b, 0xf3, 0xb1, 0xe3, 0xea, 0x46, 0x66, 0x82, 0xa1, 0x10,
-    0x06, 0x8d, 0x7c, 0xde, 0x47, 0x56, 0x5e, 0xdf, 0x0d, 0x59, 0x7b, 0xa6,
-    0x2a, 0xcb, 0xdc, 0x7d, 0x2c, 0xaf, 0x8d, 0xcf, 0x47, 0x6f, 0x7a, 0x06,
-    0xb2, 0xa1, 0x16, 0xf8, 0x44, 0x6a, 0xee, 0x45, 0x7d, 0xfe, 0x64, 0xcb,
-    0x2f, 0xb9, 0x85, 0xd5, 0x95, 0x87, 0x88, 0xe4, 0x76, 0xe4, 0xe5, 0x46,
-    0xff, 0x10, 0xea, 0x14, 0x3e, 0x86, 0xc1, 0x3e, 0xde, 0x9f, 0xcf, 0x96,
-    0x5a, 0x43, 0x56, 0x45, 0x92, 0xa9, 0x0d, 0x7a, 0xa7, 0xb5, 0x71, 0xa1,
-    0x96, 0xa1, 0x7f, 0x43, 0x63, 0xd1, 0xfa, 0xcb, 0xd1, 0xb0, 0x56, 0x59,
-    0x97, 0x87, 0x95, 0xe2, 0xdb, 0xff, 0x8f, 0xb1, 0xac, 0x2e, 0xbb, 0x92,
-    0xca, 0x99, 0x79, 0x2b, 0x50, 0xaf, 0xf4, 0x3e, 0xca, 0x5d, 0xd0, 0x5e,
-    0xf7, 0x95, 0xdf, 0xfd, 0x18, 0x58, 0x37, 0x91, 0x46, 0xcb, 0x2f, 0x81,
-    0xa8, 0x92, 0xcb, 0xb7, 0xc2, 0xcb, 0xff, 0x1e, 0x81, 0xe3, 0x07, 0x8c,
-    0x96, 0x5f, 0xff, 0xfe, 0x72, 0xff, 0xbe, 0xc6, 0xf7, 0x99, 0xbf, 0xc6,
-    0x0f, 0x18, 0x81, 0xd9, 0x65, 0x6c, 0x8b, 0x9f, 0xcf, 0x6a, 0x11, 0xed,
-    0x90, 0xd1, 0xac, 0x64, 0x42, 0x9c, 0xf4, 0xce, 0x9b, 0x5d, 0x04, 0xa3,
-    0x18, 0xbc, 0x51, 0xbd, 0x65, 0xff, 0xda, 0x80, 0x78, 0x9f, 0xa5, 0x02,
-    0xac, 0xb9, 0x96, 0x6b, 0x2e, 0x3f, 0x2c, 0xad, 0x8d, 0x86, 0x86, 0xaa,
-    0x11, 0x2a, 0xee, 0x77, 0xa6, 0x7d, 0x96, 0x5e, 0xe0, 0x77, 0x56, 0x56,
-    0x1b, 0xee, 0x8f, 0x5f, 0xe8, 0x29, 0x11, 0xc7, 0xcb, 0x2a, 0x1d, 0x16,
-    0x14, 0xa3, 0xa1, 0x1c, 0x61, 0xd9, 0x38, 0x2c, 0xc4, 0xa8, 0x40, 0x46,
-    0x7f, 0xf4, 0x68, 0x46, 0x55, 0x34, 0x6b, 0xfa, 0x95, 0xa1, 0xe9, 0x66,
-    0xcf, 0x18, 0xf7, 0xf0, 0xbc, 0x29, 0x44, 0x1c, 0x8c, 0x3b, 0xb4, 0x8a,
-    0x7d, 0xeb, 0x13, 0xf0, 0xb2, 0x11, 0x7f, 0x70, 0x82, 0xfc, 0x73, 0x48,
-    0xc9, 0x65, 0xd3, 0xd1, 0xac, 0xbf, 0xe9, 0xbb, 0xb9, 0xc8, 0x98, 0x3a,
-    0x59, 0x7f, 0x87, 0x04, 0xd8, 0x1c, 0x2c, 0xa8, 0x3f, 0x07, 0x3f, 0xbf,
-    0xef, 0x46, 0xda, 0x89, 0x3e, 0x96, 0x5f, 0x89, 0x81, 0x23, 0xf5, 0x97,
-    0xfe, 0x27, 0xfb, 0xbe, 0x80, 0x64, 0xcb, 0x2f, 0xc6, 0x3f, 0x1b, 0x0b,
-    0x2f, 0x08, 0xe4, 0xb2, 0xb1, 0x15, 0xa4, 0x55, 0xd3, 0xfd, 0xc2, 0x8b,
-    0xfb, 0x68, 0x23, 0x6e, 0x2c, 0xbf, 0xf1, 0xfa, 0x07, 0xe0, 0xc7, 0xdc,
-    0x59, 0x78, 0x8b, 0x16, 0x56, 0x1e, 0xcb, 0x9f, 0xde, 0x1b, 0x1f, 0xac,
-    0xbf, 0x37, 0x5a, 0x7e, 0xac, 0xbf, 0xf3, 0x47, 0x05, 0x9b, 0xcb, 0x38,
-    0xb2, 0xa7, 0x22, 0x16, 0x07, 0xcc, 0xa2, 0xff, 0xe9, 0x9c, 0x1e, 0x89,
-    0x74, 0xb1, 0xab, 0x2f, 0xed, 0x61, 0x13, 0xec, 0xb2, 0x80, 0x7e, 0x06,
-    0x89, 0x7f, 0xf4, 0x0b, 0xf4, 0xb9, 0x3b, 0x3d, 0x84, 0xb2, 0xff, 0xf3,
-    0x7e, 0x97, 0x27, 0x61, 0x16, 0x1f, 0xeb, 0x2f, 0xe7, 0xd0, 0x63, 0xe9,
-    0x2c, 0xa3, 0x3f, 0xa7, 0x4c, 0xbf, 0x9a, 0xf8, 0x33, 0xde, 0xb2, 0xf1,
-    0xf8, 0x2b, 0x2f, 0xe3, 0x17, 0x01, 0x1f, 0xac, 0xa9, 0xcb, 0xa7, 0x4c,
-    0x82, 0x79, 0x42, 0x2c, 0x64, 0x19, 0x0e, 0x63, 0x3e, 0xd4, 0x21, 0x7d,
-    0x0a, 0x57, 0x85, 0x01, 0x10, 0xf6, 0x18, 0x21, 0x20, 0xde, 0x5d, 0xb8,
-    0x39, 0x66, 0x6c, 0x89, 0x62, 0x27, 0x33, 0xd4, 0x3d, 0x99, 0x31, 0xdb,
-    0x4f, 0x32, 0x83, 0xe7, 0xb8, 0xc4, 0x59, 0x5c, 0x7b, 0xb3, 0xc6, 0x50,
-    0x4b, 0x2a, 0xc3, 0x55, 0x94, 0x84, 0xec, 0xf0, 0x84, 0x54, 0x5a, 0x04,
-    0x6d, 0xa9, 0x25, 0x92, 0xac, 0x49, 0x47, 0x5b, 0xfc, 0xe5, 0xf3, 0x21,
-    0xb1, 0x3b, 0xf2, 0x0a, 0xe5, 0xa7, 0xea, 0xcc, 0x18, 0xeb, 0x50, 0x8d,
-    0xd9, 0x4d, 0x93, 0x57, 0xaa, 0x5a, 0xaf, 0x71, 0xdb, 0x59, 0x28, 0x7a,
-    0xd9, 0xd6, 0x3d, 0xb1, 0x51, 0xfe, 0xb3, 0x7c, 0x65, 0xc6, 0xe8, 0x56,
-    0xc7, 0x2f, 0x97, 0xea, 0x7b, 0xdb, 0xc2, 0x5e, 0x0d, 0x26, 0x63, 0x7c,
-    0xeb, 0x70, 0xb3, 0xaa, 0x13, 0xf4, 0xe7, 0xd1, 0x2d, 0x3d, 0x86, 0xe4,
-    0xf5, 0xb5, 0x33, 0x96, 0x2a, 0xeb, 0x2d, 0x62, 0x41, 0xf7, 0x9b, 0x9d,
-    0x59, 0x7f, 0x9d, 0xb1, 0xd3, 0xe1, 0xac, 0xbf, 0x66, 0x84, 0xef, 0x16,
-    0x59, 0x9f, 0xe7, 0xec, 0x43, 0x9c, 0x31, 0xbf, 0xcc, 0xf3, 0x40, 0x77,
-    0x02, 0xa2, 0xe3, 0x5f, 0xe6, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x75, 0xaf,
-    0xfe, 0x66, 0xf2, 0x67, 0x9a, 0x03, 0xb8, 0x15, 0x12, 0x8a, 0xa2, 0x58,
-    0xf5, 0x54, 0xa1, 0x5c, 0x32, 0xa6, 0x21, 0x8a, 0x02, 0x93, 0x9c, 0x5e,
-    0xdd, 0x87, 0xb3, 0xeb, 0x15, 0xcf, 0xfe, 0x16, 0x9c, 0x37, 0xea, 0x0e,
-    0xe2, 0x0d, 0xff, 0xe6, 0x6d, 0x79, 0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x89,
-    0x69, 0x7f, 0xd3, 0xc3, 0xc7, 0xba, 0xf1, 0xf6, 0xe2, 0xcb, 0xff, 0xff,
-    0x85, 0xdc, 0xec, 0xf6, 0x36, 0xcf, 0x64, 0x6c, 0xab, 0xd6, 0x5e, 0xa7,
-    0x99, 0xd3, 0xbd, 0x3e, 0xb2, 0xf3, 0xb8, 0x15, 0x11, 0xba, 0xfd, 0xf4,
-    0xc5, 0x03, 0x59, 0x6d, 0x00, 0xf4, 0x5c, 0xa2, 0xff, 0x68, 0xd9, 0x60,
-    0xf4, 0x0a, 0xb2, 0xf0, 0x67, 0xc5, 0x59, 0x7d, 0xa0, 0xc7, 0xeb, 0x28,
-    0xcf, 0xf2, 0x63, 0x81, 0x08, 0x6f, 0xff, 0xff, 0xb7, 0x96, 0x73, 0x83,
-    0x8c, 0xd0, 0x1d, 0xc0, 0xce, 0x47, 0xd8, 0xef, 0x15, 0x18, 0x7a, 0xde,
-    0x84, 0x5e, 0x19, 0x85, 0xfd, 0xc6, 0x62, 0xf3, 0x74, 0x45, 0x97, 0xed,
-    0xc6, 0x7a, 0x65, 0x8a, 0xb2, 0xf8, 0x65, 0x9f, 0xac, 0xbe, 0x81, 0x5a,
-    0x35, 0x95, 0x87, 0x8b, 0xa2, 0x2b, 0xff, 0x3c, 0x99, 0xe6, 0x80, 0xee,
-    0x05, 0x44, 0xbe, 0xb6, 0x2c, 0xbd, 0xe7, 0xea, 0xcb, 0x77, 0x86, 0xb0,
-    0x41, 0x0b, 0xf8, 0x43, 0xfb, 0x73, 0x42, 0xac, 0xa8, 0x3d, 0xc3, 0x28,
-    0xbf, 0xa0, 0xf7, 0x73, 0xe9, 0x2c, 0xbf, 0x69, 0x8f, 0x07, 0x8b, 0x2b,
-    0xc7, 0xb4, 0x21, 0x85, 0xe8, 0xd4, 0x2c, 0xac, 0x37, 0xc6, 0x47, 0x7a,
-    0x4f, 0xe5, 0x97, 0xbf, 0x81, 0x56, 0x5f, 0xec, 0x3d, 0x4b, 0xc6, 0x2a,
-    0xca, 0xdd, 0x3d, 0x1f, 0x0f, 0x5f, 0x07, 0xc7, 0xa5, 0x97, 0xdc, 0xf4,
-    0x79, 0x65, 0xfe, 0x8d, 0xa0, 0xb6, 0xcd, 0xc5, 0x97, 0x73, 0x4b, 0x2a,
-    0x0f, 0xbf, 0x62, 0x29, 0x8d, 0xac, 0xcd, 0x95, 0x57, 0xa0, 0xe1, 0x17,
-    0x21, 0xd6, 0x08, 0xd7, 0xfe, 0x27, 0xdd, 0x36, 0xd3, 0xc3, 0x48, 0x7d,
-    0x0d, 0x42, 0x85, 0xc7, 0x07, 0xfa, 0xdb, 0x3e, 0x4a, 0x24, 0x24, 0x6f,
-    0xff, 0xc5, 0x00, 0x67, 0xdf, 0x80, 0x7c, 0x2c, 0xde, 0xeb, 0x2f, 0xfe,
-    0x97, 0x4e, 0x66, 0x63, 0x3d, 0xf0, 0x35, 0x97, 0xe1, 0x59, 0x9b, 0x1b,
-    0x2c, 0xbf, 0xcc, 0xff, 0x7f, 0xbf, 0x3f, 0x96, 0x50, 0xd3, 0x07, 0xf9,
-    0x60, 0xd2, 0x48, 0xb6, 0xff, 0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x8a, 0xad,
-    0x74, 0xfb, 0x21, 0x65, 0xc7, 0xb8, 0xb2, 0xec, 0xd2, 0xcb, 0xd9, 0xf7,
-    0x56, 0x5f, 0x1b, 0x5f, 0x7a, 0xca, 0x60, 0xfb, 0xdc, 0x67, 0xf1, 0x6e,
-    0x8e, 0xde, 0x2d, 0xc1, 0x56, 0x5f, 0xde, 0x8d, 0xe1, 0x1e, 0x2c, 0xbf,
-    0x9f, 0xd3, 0x14, 0x0d, 0x65, 0xff, 0xf7, 0x7f, 0x68, 0x47, 0x99, 0xdf,
-    0xda, 0x1f, 0x96, 0x5f, 0xfd, 0xdf, 0x47, 0x09, 0xc2, 0xcb, 0x3d, 0x2c,
-    0xbd, 0x12, 0xc5, 0x97, 0xf1, 0x84, 0x05, 0x13, 0x2c, 0xa9, 0x26, 0x7e,
-    0x32, 0xfc, 0x2d, 0xf9, 0x52, 0x64, 0x7f, 0x0d, 0xdf, 0xf3, 0x18, 0x59,
-    0xf7, 0x5d, 0xab, 0x2f, 0x6e, 0x47, 0x56, 0x5f, 0xd0, 0xd1, 0x20, 0x80,
-    0xb2, 0xe8, 0xd2, 0xca, 0xd1, 0xe1, 0xf0, 0xb6, 0xe7, 0xf9, 0x65, 0xe1,
-    0x23, 0xf5, 0x95, 0xf1, 0xb5, 0xe8, 0xbd, 0xfd, 0x8d, 0x99, 0xdf, 0x65,
-    0x97, 0xba, 0xff, 0x2c, 0xbf, 0xfe, 0x97, 0x9e, 0x4c, 0x3f, 0x30, 0x3c,
-    0xe1, 0xac, 0xa5, 0x95, 0x87, 0xb7, 0xb8, 0xa1, 0x46, 0x8c, 0xa7, 0x2e,
-    0x27, 0x8b, 0x86, 0x6b, 0x2f, 0xda, 0x03, 0xb8, 0x15, 0x12, 0x02, 0xfb,
-    0x58, 0x5d, 0x59, 0x58, 0x7a, 0xba, 0x34, 0xa9, 0xc8, 0x8c, 0x66, 0xd7,
-    0x7e, 0xe3, 0x93, 0xfc, 0xb2, 0xec, 0x25, 0x97, 0x06, 0x16, 0x54, 0x8f,
-    0xe7, 0xe2, 0x7d, 0xd2, 0x7d, 0x0a, 0xdf, 0xd1, 0xad, 0xa3, 0x5b, 0x2c,
-    0xbe, 0x36, 0xc7, 0x16, 0x54, 0x8f, 0x41, 0x82, 0xfb, 0xfd, 0xad, 0x9b,
-    0x05, 0x2e, 0x2c, 0xa8, 0x3d, 0x7c, 0x23, 0xbf, 0xfd, 0xe3, 0x86, 0xb8,
-    0xc4, 0xdc, 0x82, 0x92, 0xcb, 0xdb, 0x38, 0xd6, 0x5f, 0xe0, 0x1e, 0x0a,
-    0x12, 0xea, 0xca, 0xc3, 0xd0, 0xf8, 0x76, 0xfe, 0x12, 0x7b, 0xd1, 0xc3,
-    0x56, 0x5d, 0xc9, 0x2c, 0xa7, 0x3c, 0xae, 0x19, 0xdc, 0xc9, 0xf2, 0xcb,
-    0xff, 0xa6, 0xf3, 0xb7, 0xbe, 0x8e, 0x85, 0xab, 0x2f, 0xfe, 0xc1, 0xc4,
-    0xa3, 0x07, 0x05, 0xd5, 0x95, 0x88, 0x87, 0x6a, 0x35, 0xed, 0xc8, 0xea,
-    0xca, 0x86, 0x45, 0x2e, 0xd0, 0x8d, 0x19, 0xee, 0x46, 0xbe, 0xc2, 0xce,
-    0xe9, 0xcc, 0xcc, 0x4d, 0x57, 0xf4, 0x3b, 0x1e, 0x33, 0x22, 0x87, 0x3f,
-    0x08, 0x3b, 0x09, 0xc0, 0xb6, 0x4f, 0x90, 0x89, 0x0a, 0x2d, 0xc2, 0x2b,
-    0xff, 0x4a, 0x33, 0xff, 0x66, 0x10, 0x16, 0x5f, 0xa0, 0x8b, 0x3a, 0xb2,
-    0xfb, 0x5a, 0x30, 0x2c, 0xbe, 0x2c, 0xd9, 0x9e, 0x22, 0x12, 0x7c, 0xf4,
-    0x42, 0x5b, 0xfc, 0xcf, 0xce, 0xdc, 0x81, 0xac, 0xa6, 0x6a, 0x87, 0x35,
-    0x1c, 0xe4, 0xfa, 0x65, 0xfe, 0x67, 0x9a, 0x03, 0xb8, 0x15, 0x16, 0x42,
-    0xff, 0xff, 0x79, 0xf4, 0xcf, 0xcf, 0xd2, 0x0e, 0xdc, 0xc6, 0xc6, 0xea,
-    0xcb, 0xf8, 0xf7, 0xb3, 0xe4, 0x7c, 0xb2, 0xff, 0xff, 0xd1, 0x20, 0x8f,
-    0x19, 0x89, 0x9e, 0x20, 0xbe, 0xee, 0x31, 0x1c, 0x59, 0x5c, 0x45, 0x1f,
-    0x4c, 0xa8, 0x69, 0x96, 0x1c, 0x61, 0x37, 0xf9, 0x9e, 0x68, 0x0e, 0xe0,
-    0x54, 0x5a, 0xeb, 0xff, 0xd8, 0x24, 0x6c, 0xcf, 0x26, 0xe8, 0xe0, 0x96,
-    0x5f, 0xe6, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x72, 0x2f, 0xda, 0x03, 0xb8,
-    0x15, 0x17, 0x62, 0xff, 0xcf, 0x26, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x47,
-    0x2c, 0xcf, 0x11, 0x00, 0xd3, 0x4b, 0xe2, 0x89, 0x35, 0x65, 0xfa, 0x46,
-    0x5f, 0x9a, 0xcb, 0xff, 0x4f, 0x6c, 0x96, 0xc6, 0xa5, 0x87, 0xbd, 0x65,
-    0xa4, 0xb2, 0xfd, 0xa0, 0x3b, 0x81, 0x51, 0x4a, 0xaf, 0xf8, 0x1e, 0x39,
-    0xbd, 0x1b, 0x62, 0xcb, 0xff, 0xde, 0x8d, 0xa3, 0xc7, 0xbd, 0xc7, 0xe3,
-    0x58, 0xcc, 0xdd, 0x5d, 0x26, 0x78, 0x8c, 0xb9, 0x9b, 0xab, 0xe4, 0xc3,
-    0x5e, 0x1b, 0x97, 0xfe, 0x73, 0xec, 0x82, 0x37, 0x2f, 0xd6, 0x5d, 0xe0,
-    0xac, 0xb3, 0x31, 0xaa, 0x1c, 0xc2, 0x1f, 0x89, 0xdb, 0x1a, 0xb7, 0x8a,
-    0x78, 0x7d, 0x7f, 0xff, 0xf3, 0xf7, 0x3f, 0x89, 0x33, 0x11, 0xb8, 0x38,
-    0x94, 0x0d, 0xdd, 0x85, 0x95, 0xb3, 0x74, 0xad, 0x29, 0xed, 0xdc, 0x8f,
-    0xdf, 0xe3, 0xd3, 0xa5, 0x81, 0x34, 0xf5, 0xe3, 0x6d, 0xfc, 0xa4, 0x90,
-    0x78, 0x9b, 0xd8, 0x60, 0xef, 0x94, 0x8c, 0x2b, 0x3d, 0xff, 0x49, 0x9e,
-    0x68, 0x0e, 0xe0, 0x54, 0x47, 0x0b, 0xfe, 0x36, 0x79, 0xa0, 0x3b, 0x81,
-    0x51, 0x5a, 0xac, 0xcd, 0xd1, 0x1b, 0xd4, 0x7b, 0xff, 0xcc, 0xda, 0xf2,
-    0x67, 0x9a, 0x03, 0xb8, 0x15, 0x12, 0xda, 0xc0, 0x59, 0x78, 0x3a, 0xfd,
-    0x65, 0xd9, 0xf2, 0xcb, 0xf3, 0x5b, 0x07, 0xc5, 0x97, 0xf4, 0x6b, 0xf7,
-    0xfb, 0x8b, 0x2c, 0x3c, 0x3d, 0x6f, 0x13, 0xdf, 0xbb, 0x1e, 0x13, 0x8b,
-    0x2f, 0x6f, 0x0c, 0x96, 0x53, 0x25, 0x30, 0xb0, 0x08, 0xfc, 0x3c, 0x6d,
-    0xa4, 0x4f, 0xbc, 0xa6, 0xf7, 0x87, 0x25, 0x97, 0xe3, 0xdc, 0x1c, 0x7c,
-    0xb2, 0xff, 0xb3, 0xe2, 0xcf, 0xff, 0x79, 0x2c, 0xb9, 0xa0, 0x59, 0x7f,
-    0x1f, 0xdc, 0x1e, 0x12, 0xcb, 0xfb, 0xec, 0x94, 0x6b, 0xf5, 0x95, 0x87,
-    0xb8, 0xe5, 0xb7, 0xff, 0xd0, 0x5b, 0x70, 0x2e, 0x72, 0xe7, 0x9e, 0x4b,
-    0x2a, 0x13, 0x1c, 0x91, 0xd6, 0x9c, 0xfc, 0x41, 0x7c, 0x51, 0xf4, 0x96,
-    0x5f, 0xf8, 0xcb, 0xbc, 0x18, 0x5f, 0x52, 0x59, 0x7f, 0x6d, 0x00, 0x7d,
-    0x7e, 0xb2, 0xff, 0xfc, 0xff, 0x7e, 0x3f, 0x3c, 0xb3, 0x84, 0x17, 0x11,
-    0x65, 0xf7, 0xf9, 0xa9, 0x96, 0x5f, 0x8f, 0xd0, 0x24, 0xcb, 0x2f, 0x76,
-    0x1a, 0xb2, 0x80, 0x9a, 0x7c, 0xc4, 0x5a, 0x3e, 0xf1, 0x7f, 0xea, 0xfd,
-    0x24, 0xdc, 0x29, 0xbf, 0xf9, 0x88, 0x2e, 0xe6, 0x8f, 0x67, 0x6a, 0xcb,
-    0xe7, 0x93, 0x06, 0xb2, 0xcc, 0x2c, 0xf1, 0xa2, 0xbf, 0x8f, 0x44, 0x7d,
-    0xe2, 0xcb, 0xf6, 0x9c, 0xb2, 0x16, 0x52, 0xa2, 0x1b, 0x19, 0xf9, 0xf8,
-    0x89, 0xcb, 0x2e, 0x82, 0x59, 0x7b, 0x0c, 0x6b, 0x2f, 0x0f, 0x1a, 0xb2,
-    0xe3, 0x21, 0x9b, 0x73, 0x1b, 0xa8, 0x3f, 0x69, 0x26, 0x5f, 0xc0, 0xf1,
-    0xea, 0x06, 0xb2, 0xfb, 0x26, 0x96, 0x2c, 0xbf, 0xf3, 0xc9, 0x9e, 0x68,
-    0x0e, 0xe0, 0x54, 0x4c, 0x0b, 0xf0, 0x5f, 0xa7, 0xd5, 0x97, 0xfb, 0x67,
-    0xef, 0xe2, 0x14, 0x96, 0x5a, 0x16, 0x5d, 0xb1, 0xac, 0xac, 0x34, 0xe4,
-    0x21, 0x77, 0x21, 0x65, 0x42, 0x2e, 0x4c, 0x9d, 0xd7, 0x42, 0x3f, 0x78,
-    0x53, 0xfd, 0x65, 0xd3, 0xf8, 0xb2, 0xfb, 0x8e, 0x5f, 0xac, 0xbc, 0x51,
-    0xb2, 0xca, 0x98, 0xfd, 0x7c, 0x3d, 0xf8, 0xcb, 0x2c, 0x8a, 0xff, 0x07,
-    0xed, 0x1c, 0x37, 0x16, 0x5f, 0xbc, 0x70, 0x5b, 0x2c, 0xbf, 0xe8, 0xdb,
-    0xa5, 0x01, 0xef, 0x16, 0x57, 0x91, 0x27, 0xc3, 0x39, 0xf2, 0x7b, 0xe2,
-    0xce, 0x42, 0xca, 0xe9, 0xe9, 0xef, 0x33, 0xbd, 0x23, 0xfd, 0x65, 0xf8,
-    0x8b, 0x3a, 0x6b, 0x2f, 0xbe, 0x01, 0xb0, 0xb2, 0xfc, 0xec, 0x67, 0x9d,
-    0x65, 0x62, 0x2c, 0x66, 0x24, 0x71, 0xde, 0x92, 0x84, 0x92, 0xff, 0xf4,
-    0xbd, 0x84, 0x28, 0x9a, 0xf1, 0xc3, 0x56, 0x5f, 0xc7, 0xdc, 0x6c, 0x79,
-    0x65, 0xff, 0x1f, 0xfb, 0x7a, 0x38, 0x1e, 0x2c, 0xbf, 0xd2, 0x7e, 0xf0,
-    0xca, 0x16, 0x5a, 0x34, 0x7d, 0x84, 0x77, 0x5f, 0x26, 0x13, 0xa4, 0xbe,
-    0xc2, 0x62, 0xff, 0xd8, 0xdc, 0xd6, 0x7d, 0x2c, 0xea, 0xcb, 0xf8, 0xfc,
-    0x6d, 0xc6, 0x16, 0x57, 0x8f, 0xaf, 0x87, 0xd7, 0xfc, 0xfe, 0xd4, 0x1c,
-    0x9f, 0x8b, 0x2f, 0xff, 0x3e, 0xde, 0x38, 0x2c, 0x98, 0xf4, 0x6b, 0x2b,
-    0x13, 0x43, 0xec, 0x28, 0x82, 0x44, 0x29, 0xbd, 0x89, 0x65, 0xa7, 0xd6,
-    0x5f, 0x00, 0xf0, 0x6b, 0x2e, 0x06, 0x2c, 0xb8, 0x3f, 0xa4, 0xa6, 0x41,
-    0xf9, 0xec, 0x21, 0xf0, 0xa1, 0x90, 0xe8, 0x5a, 0xfc, 0xc4, 0x4b, 0x06,
-    0xb2, 0xff, 0x60, 0xcb, 0x3b, 0xec, 0x59, 0x74, 0xf6, 0x05, 0xc6, 0x14,
-    0xbb, 0xbf, 0xac, 0xbb, 0x72, 0x4b, 0x2b, 0x63, 0x65, 0xa1, 0x8b, 0xf0,
-    0x93, 0xee, 0x5f, 0xac, 0xbf, 0xb3, 0xce, 0x21, 0x75, 0x65, 0x6c, 0x7b,
-    0x23, 0x2c, 0xbc, 0xee, 0x05, 0x97, 0xf6, 0x77, 0xb1, 0xae, 0x2c, 0xbf,
-    0x9c, 0xbf, 0xdb, 0xfe, 0xac, 0xa8, 0x44, 0xde, 0xc4, 0x64, 0x37, 0x3e,
-    0x5b, 0x66, 0x70, 0xce, 0xe6, 0xd9, 0x76, 0x43, 0xa3, 0x8d, 0x1f, 0x23,
-    0x8c, 0x61, 0xa8, 0x10, 0xd9, 0xfa, 0x16, 0xf3, 0x10, 0xe8, 0xb5, 0xa4,
-    0x5e, 0x8c, 0x15, 0xe1, 0x5e, 0x51, 0xec, 0xf2, 0x54, 0xaf, 0x61, 0x6c,
-    0x14, 0xed, 0xe5, 0x02, 0x98, 0xcf, 0xad, 0x89, 0x18, 0xb5, 0xe6, 0x87,
-    0x49, 0x2f, 0xfc, 0xf2, 0x67, 0x9a, 0x03, 0xb8, 0x15, 0x13, 0x1a, 0xe8,
-    0xdc, 0x59, 0x76, 0xb1, 0x65, 0xa3, 0x46, 0xbf, 0xc3, 0x36, 0x66, 0x68,
-    0xbe, 0x68, 0xef, 0x9e, 0xef, 0xf8, 0x67, 0xbd, 0x9f, 0xdf, 0x89, 0x25,
-    0x97, 0xf3, 0x25, 0x91, 0x3c, 0x65, 0x2f, 0x2c, 0xbc, 0xca, 0xe4, 0x35,
-    0x94, 0xc8, 0x3e, 0x06, 0x50, 0xf6, 0xfe, 0xd6, 0x82, 0x59, 0xe5, 0x97,
-    0xd1, 0xb4, 0x69, 0x65, 0xee, 0xc4, 0xcb, 0x2f, 0xd9, 0x13, 0x1b, 0x56,
-    0x5f, 0x6c, 0x11, 0xee, 0xac, 0xbf, 0xed, 0xc3, 0xfe, 0x76, 0x4d, 0x0d,
-    0x59, 0x46, 0x8c, 0xc9, 0x88, 0xb4, 0x3a, 0x21, 0x3e, 0xe1, 0x3d, 0xa4,
-    0xb2, 0xfc, 0xd8, 0xce, 0xf1, 0x65, 0x4f, 0x26, 0xe0, 0x62, 0x37, 0xfb,
-    0xd1, 0xad, 0x84, 0x0f, 0xeb, 0x2f, 0x83, 0xb3, 0x92, 0xcb, 0x9f, 0x8b,
-    0x2f, 0xa7, 0x77, 0x3c, 0xb2, 0xd1, 0xe3, 0x75, 0xc1, 0x6b, 0xd0, 0x5b,
-    0x2c, 0xbf, 0xff, 0xfe, 0x97, 0x3d, 0x81, 0x17, 0x9e, 0xc0, 0x67, 0x27,
-    0x67, 0xd2, 0xe1, 0x91, 0xac, 0xbc, 0xee, 0x05, 0x45, 0x62, 0xbe, 0x71,
-    0x21, 0x85, 0x94, 0x03, 0xcb, 0xd1, 0x45, 0xfb, 0xc6, 0xd8, 0xd2, 0xcb,
-    0xff, 0xc1, 0x7d, 0xb5, 0x8d, 0xf4, 0x6c, 0x41, 0x59, 0x46, 0x7e, 0x44,
-    0x4f, 0x7f, 0xe9, 0xfc, 0xe9, 0x60, 0x60, 0xba, 0xb2, 0xff, 0x16, 0x73,
-    0xfc, 0xc1, 0xac, 0xa6, 0x15, 0x19, 0x00, 0x9b, 0xe1, 0xcd, 0x43, 0x2f,
-    0xd0, 0x94, 0xe9, 0x06, 0xf3, 0xfb, 0xff, 0x98, 0x0f, 0x78, 0x59, 0xbc,
-    0xb3, 0x8b, 0x2f, 0xfe, 0x2e, 0xb0, 0x18, 0x2c, 0x04, 0x69, 0x65, 0xfe,
-    0xd6, 0xdd, 0xe3, 0xfc, 0x05, 0x95, 0x07, 0xf2, 0xe8, 0x77, 0xfd, 0x2c,
-    0xee, 0x14, 0x0b, 0x3e, 0xb2, 0xff, 0xde, 0x8d, 0xef, 0xa0, 0x79, 0xf7,
-    0x16, 0x5f, 0xe8, 0x2e, 0xfb, 0x3f, 0x75, 0x97, 0xd0, 0xd7, 0xea, 0xca,
-    0x91, 0xe9, 0xf0, 0xca, 0xfd, 0xb9, 0xdc, 0xfa, 0x65, 0x97, 0xdc, 0x98,
-    0xd8, 0x59, 0x7f, 0xff, 0xff, 0x9f, 0xbd, 0xcf, 0x71, 0xe4, 0x65, 0xd9,
-    0x66, 0xb3, 0x99, 0xe7, 0xd8, 0xa2, 0x4b, 0x2f, 0x76, 0x26, 0x59, 0x50,
-    0x8f, 0x9c, 0x2d, 0xe1, 0x20, 0x90, 0x8b, 0xbf, 0x83, 0x3e, 0x0f, 0x1b,
-    0x2d, 0x65, 0xf7, 0xd2, 0x8f, 0x2c, 0xbf, 0xdc, 0x1f, 0xb0, 0x01, 0xdd,
-    0x59, 0x6c, 0xe1, 0xed, 0x04, 0x8e, 0xe8, 0xde, 0xb2, 0xbc, 0x6f, 0xc8,
-    0x9e, 0xfe, 0xf1, 0x8c, 0xb0, 0x2b, 0x2f, 0xf4, 0xcf, 0x87, 0x21, 0x1a,
-    0xb2, 0x86, 0x88, 0x00, 0x10, 0x19, 0x65, 0xfe, 0xfa, 0x53, 0x49, 0xf5,
-    0xb2, 0xcb, 0xe9, 0x74, 0xf6, 0x59, 0x50, 0x7b, 0x4e, 0x6f, 0x50, 0x9f,
-    0xbe, 0x46, 0x9c, 0x70, 0x89, 0xba, 0x5d, 0x59, 0x7f, 0x66, 0xd8, 0x59,
-    0x25, 0x95, 0x07, 0x87, 0xa1, 0x7b, 0xff, 0xb9, 0xec, 0xdc, 0x3e, 0x9c,
-    0xb8, 0x15, 0x97, 0xf3, 0x7a, 0x17, 0xda, 0x16, 0x58, 0xfe, 0x3f, 0x51,
-    0x11, 0xef, 0xf6, 0x8c, 0x3b, 0x7f, 0xc9, 0x2c, 0xbc, 0x71, 0xb2, 0xca,
-    0x19, 0xe9, 0x4c, 0x6d, 0x7e, 0x07, 0xa0, 0x98, 0x59, 0x58, 0x79, 0x6e,
-    0x47, 0x7c, 0xd7, 0xfb, 0xab, 0x2f, 0xfe, 0xda, 0x3b, 0x38, 0x40, 0x09,
-    0xb8, 0x27, 0x16, 0x5f, 0xfc, 0xfb, 0xb8, 0x4e, 0x37, 0xcf, 0xba, 0xb2,
-    0xff, 0xb5, 0x1c, 0x7d, 0x14, 0x49, 0x65, 0x69, 0x19, 0x7e, 0x4f, 0xde,
-    0x8b, 0x7a, 0x4f, 0xb2, 0xcb, 0xd3, 0xb6, 0x6a, 0xcb, 0xf8, 0xa3, 0x62,
-    0x8d, 0x96, 0x5b, 0xab, 0x2f, 0xfc, 0xc7, 0x39, 0x9e, 0x3e, 0x07, 0x65,
-    0x94, 0x33, 0xd2, 0x08, 0x8d, 0x4f, 0x69, 0xff, 0x64, 0x3b, 0xbe, 0x32,
-    0x31, 0xd7, 0x20, 0x27, 0xfb, 0xff, 0x13, 0x8f, 0xd1, 0xbf, 0xce, 0x4b,
-    0x2e, 0x8d, 0xd5, 0x97, 0xff, 0xfe, 0x0e, 0xd8, 0x09, 0xc4, 0x1d, 0xc9,
-    0xd9, 0xf4, 0xb0, 0x25, 0xff, 0x16, 0x5f, 0xfe, 0xdb, 0x3e, 0xef, 0x0c,
-    0xa3, 0xf7, 0x6a, 0xcb, 0xfd, 0xf1, 0x60, 0xfc, 0xe2, 0xac, 0xac, 0x3f,
-    0xf7, 0x4b, 0xa1, 0xa6, 0xd8, 0xe7, 0xc4, 0x33, 0xc8, 0x7a, 0xdf, 0x76,
-    0x50, 0x6b, 0x2f, 0xfb, 0x07, 0xb6, 0x0b, 0x9e, 0x75, 0x97, 0xf6, 0xd3,
-    0x4a, 0x7b, 0xd6, 0xcb, 0x2f, 0x88, 0xb3, 0xab, 0x2f, 0xc7, 0xbb, 0xad,
-    0x1a, 0xca, 0x64, 0x22, 0x06, 0x0d, 0xfc, 0x41, 0x7f, 0x6c, 0x24, 0xfb,
-    0x97, 0xeb, 0x2f, 0xb7, 0x63, 0x84, 0xb2, 0xff, 0xde, 0x76, 0xf7, 0xd1,
-    0xd0, 0xb5, 0x65, 0x61, 0xf1, 0xcc, 0x49, 0x7f, 0xf6, 0x63, 0x0d, 0x83,
-    0xd6, 0x8c, 0x55, 0x97, 0x9d, 0xf4, 0xb2, 0xff, 0x8e, 0x47, 0xe0, 0xb5,
-    0xa6, 0xb2, 0xec, 0xea, 0xca, 0x84, 0xd9, 0x72, 0x12, 0xda, 0x22, 0xf2,
-    0x27, 0x46, 0xe7, 0xce, 0x2f, 0x13, 0xee, 0x2c, 0xbd, 0xe3, 0x66, 0xca,
-    0xdb, 0x2f, 0xd6, 0x55, 0x2b, 0x88, 0x7c, 0xed, 0x08, 0x69, 0x13, 0x0c,
-    0xdf, 0x25, 0x47, 0x30, 0xe8, 0x08, 0x5f, 0xfc, 0x40, 0x67, 0x73, 0x42,
-    0x5b, 0x51, 0x8d, 0xfa, 0x51, 0xc3, 0xbe, 0x7f, 0x09, 0x62, 0x86, 0x37,
-    0x25, 0x0f, 0x76, 0x3c, 0xb0, 0xa0, 0xef, 0x21, 0x9f, 0x85, 0xd0, 0x91,
-    0xcc, 0x6e, 0x2f, 0x5e, 0x9e, 0x13, 0xec, 0x85, 0x97, 0x48, 0x96, 0x5f,
-    0xda, 0xd4, 0x0f, 0x1a, 0xb2, 0xdb, 0xab, 0x2e, 0x3d, 0xc5, 0x97, 0xdb,
-    0x6a, 0x36, 0x59, 0x70, 0x9f, 0xac, 0xbd, 0xe3, 0x6a, 0xcb, 0x4c, 0xb2,
-    0x9c, 0xd7, 0x04, 0x72, 0xfc, 0xe5, 0xb0, 0x78, 0xb2, 0xfd, 0x83, 0xd3,
-    0x81, 0x65, 0xf3, 0xed, 0x1a, 0x59, 0x74, 0x0f, 0xc7, 0x92, 0x44, 0xf4,
-    0x69, 0xc1, 0x4c, 0x5a, 0xd1, 0x47, 0x19, 0xfc, 0x90, 0x91, 0xf8, 0x41,
-    0xd7, 0x1b, 0x79, 0x65, 0xee, 0x09, 0xc5, 0x97, 0xdf, 0x6d, 0x0c, 0x2c,
-    0xad, 0x8f, 0x50, 0x62, 0x21, 0x1e, 0xbb, 0xb0, 0xb2, 0xff, 0x7d, 0xa8,
-    0x39, 0x3f, 0x16, 0x5f, 0x61, 0x44, 0x96, 0x56, 0x1e, 0x9b, 0x4c, 0xed,
-    0x3e, 0xb2, 0xfd, 0xcc, 0xe9, 0xe9, 0x65, 0xec, 0xfb, 0xab, 0x2d, 0x9f,
-    0x9e, 0x27, 0x09, 0xee, 0x71, 0xac, 0xbd, 0xdc, 0xe2, 0xca, 0x91, 0xb2,
-    0x08, 0xb5, 0xc5, 0xba, 0xb2, 0xf6, 0x9c, 0x96, 0x52, 0xcb, 0x4f, 0xac,
-    0xbf, 0x8b, 0x37, 0xe8, 0xf8, 0xb2, 0xb6, 0x3c, 0x21, 0x45, 0x2d, 0xf2,
-    0xca, 0x84, 0x4f, 0x60, 0xd9, 0xa6, 0x84, 0x92, 0xfd, 0x9a, 0x94, 0x35,
-    0x65, 0xfc, 0x7b, 0x61, 0x1b, 0x0b, 0x2f, 0xf3, 0xea, 0x5f, 0x9f, 0xdc,
-    0x59, 0x7d, 0xce, 0x47, 0xeb, 0x2a, 0x15, 0x48, 0x8c, 0x87, 0x16, 0x0d,
-    0x69, 0xa4, 0x3e, 0x85, 0xbb, 0x9d, 0x11, 0x38, 0x4b, 0x45, 0x35, 0xbf,
-    0xf6, 0x16, 0x30, 0x59, 0xdf, 0x1a, 0xcb, 0xf9, 0xd8, 0xc1, 0xbc, 0x96,
-    0x57, 0x8f, 0xa4, 0x8f, 0x2f, 0xe3, 0x22, 0xcd, 0xee, 0xb2, 0xf4, 0x84,
-    0xea, 0xcb, 0xda, 0xd3, 0xac, 0xbe, 0x97, 0xe1, 0x92, 0xcb, 0xed, 0x09,
-    0x1f, 0xac, 0xa8, 0x3c, 0x83, 0x24, 0xbf, 0xc7, 0xb3, 0xb7, 0xff, 0xe1,
-    0x65, 0xc6, 0x35, 0x97, 0x3f, 0xcb, 0x2f, 0xef, 0x64, 0xc5, 0x03, 0x59,
-    0x7f, 0xd2, 0x86, 0xf3, 0x35, 0x1c, 0x59, 0x40, 0x3e, 0x5f, 0x8b, 0x68,
-    0x68, 0x9f, 0x37, 0xcb, 0xdd, 0x3f, 0xd6, 0x5f, 0x7f, 0x04, 0x05, 0x96,
-    0x65, 0xac, 0xa6, 0x0f, 0x53, 0xe1, 0xd0, 0x91, 0x5f, 0x4b, 0xb8, 0x22,
-    0xcb, 0xc0, 0x8f, 0xd6, 0x5e, 0xd4, 0x35, 0x65, 0x1a, 0x23, 0x5c, 0xc4,
-    0x24, 0x62, 0x8e, 0xdf, 0x6c, 0x26, 0x4c, 0xb2, 0xf4, 0x6b, 0x65, 0x95,
-    0x07, 0x84, 0x64, 0xb4, 0xb2, 0xf0, 0x23, 0xf5, 0x97, 0x41, 0x48, 0xd4,
-    0x60, 0x5d, 0xf7, 0x48, 0xf7, 0x16, 0x5c, 0x1e, 0x2c, 0xbf, 0x06, 0x5c,
-    0xf0, 0xd6, 0x54, 0x1e, 0x01, 0x0b, 0xd4, 0x97, 0x14, 0x06, 0x43, 0xf1,
-    0x61, 0x8f, 0x4c, 0xc9, 0xa2, 0x06, 0x9a, 0xfa, 0x16, 0xa5, 0x18, 0x1f,
-    0x1f, 0xba, 0x90, 0x12, 0xad, 0xec, 0x97, 0xf3, 0xcb, 0x73, 0x70, 0x3b,
-    0x2c, 0xb1, 0x2c, 0xba, 0x5b, 0xab, 0x2b, 0xc7, 0xbf, 0xc3, 0x5e, 0x88,
-    0x5a, 0x7d, 0x65, 0xfd, 0x9b, 0x0f, 0xc7, 0xa5, 0x95, 0xe3, 0xc2, 0x21,
-    0x4b, 0xff, 0x46, 0x72, 0x74, 0x18, 0xc4, 0x92, 0xcb, 0xf8, 0xc5, 0xe6,
-    0xd8, 0x2a, 0xca, 0x23, 0xf0, 0xea, 0x05, 0xc5, 0x0b, 0x2f, 0xd0, 0x3e,
-    0xe0, 0x16, 0x5e, 0x82, 0x02, 0xcb, 0xff, 0xf9, 0xc5, 0x1b, 0xbe, 0xb6,
-    0xf3, 0xf7, 0xc7, 0xa9, 0x2c, 0xbf, 0x00, 0x1e, 0x8d, 0x2c, 0xaf, 0x22,
-    0x7c, 0x86, 0xc2, 0xb9, 0x52, 0x4c, 0xac, 0x04, 0x3c, 0x15, 0xec, 0x31,
-    0xaf, 0x9c, 0x9e, 0x65, 0x97, 0xe3, 0xe9, 0x64, 0x96, 0x5f, 0x40, 0xb1,
-    0x32, 0xcb, 0xff, 0x73, 0x7b, 0xfa, 0x18, 0xce, 0xf1, 0x65, 0xc2, 0x35,
-    0x65, 0xf8, 0xb3, 0x41, 0xc5, 0x97, 0x9f, 0xe2, 0x59, 0x7f, 0x74, 0x9f,
-    0xfc, 0x25, 0x97, 0xe2, 0x7f, 0xf0, 0x96, 0x54, 0xe3, 0xd2, 0xe9, 0x65,
-    0x0d, 0x12, 0x41, 0x6e, 0xad, 0x93, 0x9e, 0x60, 0x84, 0xc9, 0xa6, 0x23,
-    0xf2, 0x0f, 0xe3, 0x05, 0x0b, 0x8b, 0xee, 0x61, 0x01, 0x65, 0xfd, 0x05,
-    0xd0, 0x07, 0x65, 0x97, 0xfa, 0x05, 0x18, 0x5f, 0x52, 0x59, 0x7b, 0x91,
-    0x25, 0x97, 0xef, 0x66, 0x8f, 0x8b, 0x2e, 0x3d, 0x7c, 0x78, 0x7d, 0x1c,
-    0xb6, 0xf5, 0x95, 0x09, 0x83, 0xc8, 0x87, 0x45, 0xde, 0x77, 0xdc, 0x2e,
-    0xbc, 0x46, 0xc2, 0xcb, 0xec, 0x19, 0xef, 0x59, 0x74, 0x37, 0x0d, 0xfb,
-    0x8e, 0x5f, 0xa5, 0xd3, 0x6f, 0x56, 0x5f, 0xcf, 0xf7, 0xa0, 0x42, 0x59,
-    0x6c, 0xf8, 0xf5, 0x85, 0x28, 0xbf, 0x9e, 0x4e, 0x59, 0xb8, 0xb2, 0xfb,
-    0x9e, 0x79, 0x2c, 0xa3, 0x47, 0xce, 0xa1, 0x00, 0xe5, 0x21, 0x2e, 0xbd,
-    0x85, 0x32, 0xcb, 0x7c, 0xb2, 0xef, 0xe1, 0x25, 0xc2, 0x8a, 0x92, 0x8c,
-    0xd8, 0x0a, 0x2f, 0x7e, 0x2c, 0xef, 0x8d, 0x23, 0x33, 0x43, 0x7c, 0xc1,
-    0x67, 0x16, 0x54, 0x8f, 0x68, 0x67, 0x17, 0xf9, 0xd8, 0x82, 0x2c, 0xea,
-    0xcb, 0xc7, 0xfb, 0xac, 0xa8, 0x4d, 0x20, 0x63, 0x8f, 0x0b, 0xd2, 0x22,
-    0x09, 0x8d, 0xef, 0x40, 0xab, 0x2f, 0x3f, 0xdc, 0x59, 0x6e, 0x2c, 0xbe,
-    0x13, 0xcf, 0xd5, 0x95, 0xb1, 0xf7, 0x0c, 0x77, 0xe1, 0xde, 0x88, 0xde,
-    0x82, 0x99, 0x65, 0xc5, 0x0b, 0x29, 0x65, 0x2c, 0xa9, 0x8b, 0x66, 0x85,
-    0xdd, 0xe9, 0x96, 0x5c, 0x7f, 0xac, 0xa8, 0x35, 0xff, 0x8c, 0x54, 0xc8,
-    0xb8, 0xd0, 0xe3, 0x95, 0xfe, 0xa1, 0x7f, 0xf3, 0x06, 0x40, 0xe4, 0x35,
-    0xfe, 0xea, 0xcb, 0xdf, 0xe6, 0xe2, 0xcb, 0xff, 0xe2, 0xcf, 0xf1, 0xa1,
-    0x8d, 0x68, 0xc2, 0x05, 0x97, 0xc5, 0x0d, 0x99, 0x65, 0x30, 0x8d, 0x6d,
-    0x22, 0x91, 0x07, 0x53, 0xef, 0x9b, 0xc0, 0xb5, 0x65, 0x98, 0x59, 0x69,
-    0xf5, 0x97, 0x69, 0x85, 0x95, 0x07, 0xc2, 0x64, 0x61, 0x12, 0x10, 0x52,
-    0xff, 0xfb, 0xd9, 0x2e, 0x47, 0x65, 0x9b, 0xae, 0x5f, 0xac, 0xbf, 0xe3,
-    0xef, 0xb3, 0xee, 0x86, 0x16, 0x5f, 0x09, 0x1a, 0xfd, 0x65, 0x48, 0xf7,
-    0x7c, 0x73, 0x76, 0x71, 0x65, 0x41, 0xb8, 0x91, 0x15, 0x71, 0x30, 0x7e,
-    0xc3, 0x9e, 0xe8, 0xe2, 0xcb, 0x7e, 0xb2, 0xfc, 0x70, 0xd8, 0x6a, 0xcb,
-    0x62, 0xca, 0x34, 0x43, 0xe8, 0xa5, 0xc5, 0xb8, 0x25, 0x3e, 0x4d, 0x66,
-    0x16, 0x54, 0x2e, 0x67, 0x64, 0x3d, 0x8e, 0x31, 0x4f, 0x42, 0x79, 0xe3,
-    0xc9, 0xdc, 0x4b, 0xbe, 0x81, 0x43, 0x32, 0xcb, 0xdc, 0x89, 0x96, 0x5f,
-    0xd8, 0x3c, 0xde, 0x7a, 0x59, 0x4b, 0x2c, 0xd5, 0x95, 0xd2, 0xf3, 0x78,
-    0x5d, 0xf0, 0xdd, 0xfe, 0x59, 0x7e, 0xfc, 0xf4, 0x6c, 0x2c, 0xb9, 0xd8,
-    0x59, 0x76, 0x7c, 0xb2, 0x80, 0x99, 0x34, 0xc4, 0x8d, 0x1d, 0xf2, 0x53,
-    0x91, 0x7e, 0x44, 0x45, 0x33, 0xe2, 0xf7, 0x67, 0x96, 0x5d, 0x9a, 0x59,
-    0x4b, 0x29, 0x65, 0xa1, 0x65, 0x32, 0xcd, 0x31, 0x05, 0xf4, 0x2e, 0xf6,
-    0x6f, 0x75, 0x97, 0xde, 0xf6, 0x7e, 0xb2, 0xd1, 0xe3, 0xc0, 0x10, 0x76,
-    0xa1, 0x1d, 0x6d, 0x16, 0x73, 0xcf, 0xdc, 0x6f, 0xe3, 0xee, 0x79, 0xd8,
-    0x59, 0x7f, 0x74, 0x67, 0xfc, 0x12, 0xcb, 0xdb, 0x78, 0xd6, 0x5d, 0xe0,
-    0xfc, 0x79, 0x4e, 0x5b, 0x78, 0x51, 0x45, 0x49, 0x7f, 0xa3, 0x61, 0x33,
-    0xcf, 0xf2, 0x46, 0x66, 0x82, 0xff, 0x18, 0xdc, 0xbe, 0x97, 0x16, 0x50,
-    0xcf, 0xeb, 0xc8, 0xf7, 0x66, 0xcb, 0x2f, 0xcd, 0x12, 0x35, 0xfa, 0xca,
-    0x59, 0x4b, 0x2d, 0x0d, 0x2d, 0xbf, 0x0b, 0xa8, 0x3e, 0x69, 0x20, 0x5f,
-    0xfb, 0x91, 0x2f, 0x66, 0x14, 0xb8, 0xb2, 0x86, 0x9e, 0x28, 0x21, 0x90,
-    0x64, 0x53, 0x3e, 0xf4, 0x86, 0xf4, 0x34, 0xd6, 0x5e, 0x96, 0x01, 0x65,
-    0x62, 0x21, 0xc0, 0xa1, 0xf0, 0xdd, 0xf1, 0xeb, 0x70, 0x6b, 0x2f, 0xde,
-    0x8f, 0x9f, 0x75, 0x65, 0xff, 0xf4, 0x77, 0x83, 0xce, 0x9f, 0x83, 0x9f,
-    0x75, 0x65, 0x78, 0xfe, 0xfa, 0x57, 0x78, 0xb3, 0xcb, 0x2d, 0xa5, 0x97,
-    0xfb, 0x30, 0x02, 0x6f, 0xf6, 0x2c, 0xbf, 0xe8, 0x2e, 0x96, 0x76, 0x05,
-    0x59, 0x7f, 0xb0, 0x5e, 0x19, 0x7d, 0x25, 0x94, 0xb2, 0x8c, 0xfd, 0xb4,
-    0x6e, 0xe6, 0x97, 0xbb, 0xa0, 0xac, 0xb7, 0x16, 0x51, 0x1a, 0xe0, 0x8e,
-    0xdf, 0xe7, 0xdf, 0x83, 0xdb, 0x05, 0x59, 0x7f, 0xfe, 0xc1, 0xc6, 0x7c,
-    0x27, 0x4c, 0x83, 0x2c, 0xe2, 0xcb, 0xec, 0xf0, 0x9a, 0x59, 0x73, 0x7f,
-    0x59, 0x73, 0x92, 0xca, 0xf1, 0xad, 0x71, 0x8b, 0xf3, 0x4f, 0xbf, 0xba,
-    0xca, 0xd9, 0x59, 0xbe, 0x42, 0x80, 0xc8, 0xb7, 0x46, 0xe6, 0x11, 0xd4,
-    0x2a, 0xdd, 0x6f, 0xf2, 0x02, 0x36, 0xe2, 0xaf, 0x54, 0x02, 0x41, 0x76,
-    0x98, 0x59, 0x7d, 0x0d, 0x7f, 0x2c, 0xbd, 0xde, 0xba, 0xcb, 0xed, 0x06,
-    0x37, 0xac, 0xbf, 0x66, 0xeb, 0x97, 0xe3, 0x3e, 0x17, 0x21, 0xe8, 0xe5,
-    0xf7, 0xba, 0x7b, 0x2c, 0xbf, 0xc0, 0x3e, 0x16, 0x6f, 0x75, 0x97, 0xd1,
-    0xb3, 0xc9, 0x65, 0xf7, 0x79, 0xe3, 0x59, 0x7f, 0x13, 0xf7, 0x6c, 0x15,
-    0x65, 0x2c, 0xa2, 0x37, 0x3d, 0x2e, 0xa8, 0x3f, 0xbc, 0x5b, 0xbf, 0x66,
-    0xc5, 0x9f, 0x2c, 0xbe, 0xe9, 0x97, 0x16, 0x5f, 0x4e, 0xcf, 0xba, 0xb2,
-    0xfe, 0xe4, 0x7d, 0x2c, 0xea, 0xca, 0x01, 0xe9, 0xf0, 0x96, 0xfb, 0x3a,
-    0x7c, 0x59, 0x4b, 0x2b, 0xe3, 0x58, 0xe4, 0x35, 0x88, 0xe3, 0x37, 0x47,
-    0x4e, 0xa8, 0x56, 0x23, 0x27, 0x9c, 0x4d, 0xf8, 0x8f, 0x46, 0x7e, 0x84,
-    0xe9, 0x10, 0x72, 0x30, 0xbb, 0xc2, 0x04, 0x45, 0x97, 0x88, 0xf7, 0x56,
-    0x5f, 0x0e, 0x7d, 0xd8, 0x59, 0x50, 0x78, 0x98, 0x3d, 0x69, 0xf5, 0x97,
-    0x40, 0xd6, 0x53, 0x24, 0xd5, 0x78, 0x52, 0xdc, 0x59, 0x66, 0xac, 0xb6,
-    0x96, 0x53, 0x9a, 0x20, 0x88, 0xd6, 0x8f, 0x4f, 0xc6, 0x74, 0xb0, 0xcd,
-    0x15, 0xfe, 0x82, 0x93, 0xb7, 0x06, 0xb2, 0xfb, 0xad, 0x6e, 0x96, 0x5f,
-    0xfd, 0xfc, 0x10, 0x1f, 0xbf, 0x88, 0x52, 0x59, 0x7a, 0x47, 0xe5, 0x97,
-    0xdd, 0x2c, 0x92, 0xcb, 0xe0, 0xb2, 0xf8, 0xeb, 0x2f, 0xdb, 0x0d, 0xdc,
-    0x55, 0x95, 0x87, 0x9e, 0x12, 0x6b, 0xff, 0xc7, 0xcf, 0x60, 0xcb, 0x37,
-    0x96, 0x71, 0x65, 0x49, 0x39, 0x06, 0x0c, 0x7e, 0x23, 0x99, 0x1b, 0x43,
-    0x84, 0xe1, 0xd2, 0x1b, 0x84, 0x02, 0xca, 0x64, 0x3a, 0xb3, 0xb9, 0xec,
-    0xaa, 0x23, 0x98, 0xda, 0x18, 0xb2, 0x30, 0x1c, 0xaf, 0xac, 0x9d, 0x47,
-    0x62, 0x32, 0x10, 0x38, 0xfd, 0x1d, 0xe1, 0xc7, 0xc3, 0x34, 0x6e, 0x7a,
-    0x8e, 0x15, 0xb1, 0xc4, 0x7a, 0x76, 0x25, 0xe3, 0x95, 0xfe, 0x36, 0x06,
-    0x59, 0xe1, 0x4a, 0xc3, 0xe4, 0xb6, 0x7e, 0xcb, 0xc4, 0x0b, 0xe6, 0xf6,
-    0x31, 0x52, 0xa7, 0xe1, 0x34, 0x24, 0x75, 0x5b, 0x8c, 0xf7, 0xfc, 0xcf,
-    0xa7, 0x9b, 0x9c, 0x0c, 0x2c, 0xbf, 0xff, 0xe0, 0xc3, 0x3e, 0xf0, 0xfc,
-    0xe7, 0xdc, 0xd7, 0xed, 0x79, 0x2c, 0xa6, 0x6a, 0xa7, 0x36, 0x8f, 0xdc,
-    0x67, 0xb7, 0xed, 0x01, 0xdc, 0x0a, 0x8a, 0xdd, 0x7f, 0xe7, 0x93, 0x3c,
-    0xd0, 0x1d, 0xc0, 0xa8, 0x9c, 0x16, 0x67, 0x88, 0x80, 0x69, 0xa5, 0xd3,
-    0xd8, 0xd6, 0x5b, 0xcb, 0x2d, 0xc5, 0x94, 0x13, 0x45, 0x3e, 0x23, 0x7e,
-    0xc1, 0x78, 0x62, 0xac, 0xbd, 0x2e, 0x71, 0x65, 0xf0, 0x1d, 0xc0, 0xa8,
-    0xb4, 0x57, 0xff, 0xb0, 0x7e, 0x76, 0x26, 0x98, 0xf8, 0x16, 0xac, 0xad,
-    0x1f, 0xdf, 0x8b, 0xaf, 0x19, 0x01, 0x65, 0xe7, 0x2f, 0xd6, 0x56, 0x1b,
-    0x70, 0x0d, 0xdf, 0x7f, 0x04, 0x05, 0x97, 0xfb, 0x37, 0x79, 0xad, 0x3f,
-    0x56, 0x5f, 0xd1, 0xb3, 0xf9, 0xda, 0xb2, 0xa6, 0x3e, 0x3f, 0x1b, 0x5d,
-    0xee, 0x2c, 0xbf, 0xa1, 0xc8, 0x23, 0xc5, 0x97, 0xed, 0x0c, 0x3d, 0xe2,
-    0xcb, 0xfe, 0x8d, 0xbd, 0x9c, 0xf6, 0x6e, 0xac, 0xbf, 0xfa, 0x01, 0xcc,
-    0x01, 0x47, 0xfc, 0x85, 0x97, 0xfd, 0xbf, 0x99, 0xec, 0x21, 0x06, 0xb2,
-    0xa0, 0xff, 0xb1, 0x0e, 0xbc, 0x8d, 0xa2, 0x85, 0xd5, 0xfe, 0xcd, 0x7f,
-    0x93, 0x09, 0xc5, 0x96, 0x61, 0x65, 0xff, 0x64, 0x6d, 0x93, 0x68, 0xf8,
-    0xb2, 0x8c, 0xf2, 0xe6, 0x12, 0xbf, 0xff, 0x6d, 0x1d, 0x81, 0xea, 0x3c,
-    0xfc, 0x2c, 0xfd, 0x65, 0xff, 0xa3, 0xe7, 0xdd, 0xf1, 0x3e, 0xee, 0xcb,
-    0x2f, 0xfd, 0x1a, 0xff, 0x0f, 0x35, 0xd0, 0xac, 0xa8, 0x46, 0xc7, 0x95,
-    0x78, 0x8b, 0x43, 0x4f, 0x44, 0xc9, 0xe6, 0x84, 0x0f, 0x21, 0xf5, 0x7f,
-    0x46, 0xf2, 0x7e, 0xf1, 0x65, 0xff, 0xf7, 0x60, 0x7e, 0x0b, 0xb0, 0x0c,
-    0x32, 0x02, 0xcb, 0xe6, 0x99, 0x49, 0x65, 0x19, 0xf8, 0x71, 0x3e, 0xa1,
-    0x5e, 0xde, 0x4a, 0xd4, 0xf2, 0x43, 0xc2, 0x7a, 0x96, 0x5e, 0xd4, 0x30,
-    0xb2, 0xfc, 0x7d, 0x28, 0x6a, 0xca, 0x64, 0x1e, 0x74, 0xc1, 0x7e, 0x1d,
-    0xbf, 0xd0, 0xdd, 0x68, 0xff, 0xe2, 0xcb, 0xc0, 0xc1, 0x56, 0x5b, 0x26,
-    0x3d, 0x1f, 0x1a, 0x58, 0x55, 0x97, 0xfb, 0x51, 0xdf, 0xa5, 0x9d, 0x59,
-    0x7f, 0xff, 0x64, 0xce, 0x5b, 0x7e, 0x7f, 0x70, 0x18, 0x64, 0x05, 0x97,
-    0x60, 0xd6, 0x5e, 0xd9, 0xda, 0xb2, 0xf4, 0x7f, 0xa8, 0x36, 0x66, 0x2d,
-    0x7f, 0xf7, 0xdc, 0xe9, 0x66, 0xfe, 0xf4, 0xc6, 0xb2, 0x8d, 0x34, 0xd9,
-    0x84, 0x88, 0xd3, 0x90, 0x8f, 0x09, 0x8d, 0xc7, 0x25, 0x97, 0xf6, 0x6f,
-    0xe8, 0x60, 0x0b, 0x2f, 0xf7, 0xbc, 0x16, 0x1b, 0x1c, 0x59, 0x7f, 0xfe,
-    0x3e, 0x16, 0x6f, 0x7e, 0x96, 0x73, 0xcf, 0x32, 0xcb, 0xf4, 0x77, 0x82,
-    0x79, 0x65, 0x42, 0x3e, 0x06, 0x2d, 0x85, 0xf3, 0x1a, 0x92, 0xad, 0xf1,
-    0x1f, 0xd2, 0x59, 0x7b, 0xf7, 0xf2, 0xcb, 0xfd, 0xb6, 0x18, 0xdd, 0xd8,
-    0x59, 0x58, 0x7a, 0x0e, 0x3b, 0x7f, 0x6a, 0x07, 0x05, 0x32, 0xcb, 0x71,
-    0x65, 0x6c, 0x6f, 0xbc, 0x5b, 0x66, 0x6c, 0x96, 0x5b, 0x94, 0xf2, 0x7d,
-    0xb1, 0x20, 0xca, 0x72, 0x13, 0x00, 0x59, 0xf8, 0x82, 0x68, 0x42, 0xe8,
-    0x8d, 0xa2, 0xfe, 0x9c, 0x06, 0xfe, 0x12, 0xc5, 0x08, 0x5e, 0x46, 0xeb,
-    0xd8, 0xd1, 0xc2, 0x91, 0x3e, 0xe4, 0x22, 0xf5, 0xee, 0x37, 0x8b, 0x2f,
-    0xf3, 0x26, 0x0f, 0xb2, 0xce, 0x2c, 0xbf, 0xfe, 0x3e, 0x9e, 0x9f, 0xf8,
-    0xf1, 0x82, 0x3f, 0x59, 0x74, 0xa4, 0xb2, 0xff, 0xec, 0x28, 0xc6, 0x22,
-    0x5d, 0xcd, 0x96, 0x5f, 0xf9, 0xfd, 0x3a, 0x33, 0xbe, 0x36, 0xac, 0xbf,
-    0xff, 0xc7, 0xd8, 0xf1, 0x67, 0x75, 0x1e, 0x2c, 0xde, 0x10, 0x2c, 0xbf,
-    0xfe, 0x8c, 0xef, 0x9e, 0x5a, 0x08, 0xe0, 0xa1, 0x65, 0x49, 0x39, 0x5d,
-    0xd4, 0xff, 0x0b, 0x85, 0x0f, 0x79, 0xfe, 0xe3, 0x05, 0xff, 0xe3, 0xf3,
-    0x9e, 0xdd, 0x32, 0x3f, 0xf8, 0xb2, 0xff, 0x8a, 0x25, 0x9c, 0xc3, 0x85,
-    0x96, 0xd9, 0x65, 0x41, 0xe3, 0x91, 0xad, 0xff, 0xff, 0x47, 0xed, 0x79,
-    0x4e, 0xef, 0xb1, 0xb8, 0x08, 0xf4, 0x35, 0x65, 0xff, 0xf1, 0x97, 0x43,
-    0xe3, 0xe4, 0xfb, 0xf7, 0x06, 0xb2, 0xbc, 0x8b, 0x9e, 0xb4, 0x5f, 0xc7,
-    0xb4, 0xe7, 0x2f, 0xd6, 0x5f, 0x01, 0xdc, 0x0a, 0x8b, 0x69, 0x7f, 0xff,
-    0x43, 0xf6, 0x3d, 0x1c, 0x33, 0x91, 0xeb, 0x06, 0xb2, 0xfe, 0xf4, 0x36,
-    0x0c, 0x6b, 0x28, 0xd3, 0x04, 0x98, 0x8f, 0x46, 0x1c, 0x2e, 0xea, 0xbd,
-    0xfc, 0xf2, 0x1f, 0x8d, 0xab, 0x2f, 0xf6, 0x4c, 0x50, 0xd9, 0xc0, 0x59,
-    0x77, 0x8c, 0x67, 0xc5, 0xd2, 0xdb, 0xff, 0xde, 0xc9, 0x39, 0x75, 0xe4,
-    0x6c, 0x42, 0xcb, 0xfe, 0xcc, 0x04, 0xf8, 0x7c, 0x7a, 0x59, 0x7f, 0xf7,
-    0xb3, 0x6e, 0x1e, 0xa3, 0x71, 0xc9, 0x65, 0xd8, 0x6b, 0x2d, 0x00, 0x3d,
-    0xbd, 0xe8, 0xd6, 0x9e, 0x96, 0x5f, 0xfd, 0x9d, 0x86, 0x93, 0xb0, 0x59,
-    0xfa, 0xcb, 0x7e, 0xb2, 0xa6, 0x3e, 0xb2, 0x16, 0xea, 0x1d, 0xff, 0x8c,
-    0x87, 0x10, 0xdd, 0xc7, 0x92, 0xcb, 0xfe, 0x8f, 0xfd, 0x1b, 0x16, 0x71,
-    0x65, 0x41, 0xfc, 0x04, 0xfe, 0xfb, 0xd1, 0xa6, 0x16, 0x5f, 0xfe, 0x3d,
-    0x46, 0x78, 0x27, 0xcf, 0x67, 0xeb, 0x2f, 0xff, 0x86, 0x1e, 0xf0, 0x79,
-    0x2f, 0x46, 0xf1, 0xc2, 0xca, 0x92, 0x2f, 0x86, 0x46, 0x69, 0x37, 0xfd,
-    0x12, 0x8d, 0x6d, 0x1a, 0xd9, 0x65, 0xff, 0xe8, 0x97, 0xa0, 0x98, 0x2c,
-    0xd8, 0x49, 0x2c, 0xbf, 0xff, 0xd0, 0x64, 0xfd, 0x0f, 0x70, 0x70, 0xd1,
-    0xfa, 0x3e, 0x59, 0x7f, 0x8d, 0xa3, 0x8e, 0x09, 0xc5, 0x97, 0xbb, 0x80,
-    0x59, 0x7f, 0xfc, 0x47, 0xbc, 0xfb, 0xe8, 0xef, 0x23, 0x7c, 0x2c, 0xa3,
-    0x4d, 0x2f, 0x49, 0x7e, 0x5f, 0xe9, 0xa0, 0x47, 0x2f, 0xf0, 0xf0, 0xa4,
-    0x7e, 0x0a, 0xcb, 0x0d, 0x65, 0xf3, 0xfd, 0xcf, 0x2c, 0xa3, 0x3e, 0x67,
-    0x32, 0xe0, 0x8d, 0xff, 0xdd, 0x73, 0xc8, 0xd3, 0xc8, 0xfc, 0xb2, 0xfc,
-    0xe3, 0xc2, 0xfd, 0x65, 0x48, 0xfa, 0x0d, 0x06, 0xff, 0xa3, 0x53, 0xb9,
-    0x1e, 0x73, 0x59, 0x7f, 0xbc, 0x6f, 0x2e, 0x9e, 0xcb, 0x2f, 0xc3, 0x8c,
-    0x23, 0x59, 0x53, 0xd3, 0x30, 0xc9, 0x92, 0x3b, 0x11, 0xe5, 0xc9, 0x80,
-    0x70, 0x90, 0xc8, 0xf7, 0x41, 0x0a, 0xd3, 0x2d, 0x99, 0x23, 0x50, 0x96,
-    0x6c, 0x25, 0x3d, 0x0a, 0x77, 0x86, 0xf9, 0x17, 0xf2, 0x38, 0x5e, 0xc2,
-    0xc0, 0x30, 0x95, 0x14, 0x86, 0x7c, 0xe4, 0x43, 0x3b, 0xfa, 0x19, 0xeb,
-    0x31, 0x85, 0x97, 0xfd, 0x1a, 0x7e, 0xfe, 0x21, 0x49, 0x65, 0xff, 0xfd,
-    0xa8, 0xe9, 0x80, 0xc7, 0x07, 0xa3, 0x91, 0xf1, 0x65, 0xfc, 0xc3, 0xe8,
-    0x61, 0x25, 0x97, 0xfd, 0x1d, 0x30, 0x18, 0xfe, 0x25, 0x97, 0xff, 0xff,
-    0xfe, 0x19, 0x40, 0x3e, 0x01, 0xfc, 0xd7, 0x26, 0x30, 0x9f, 0xe1, 0x41,
-    0xe3, 0x98, 0x8d, 0xbc, 0x59, 0x7f, 0xe3, 0xec, 0x74, 0xf7, 0xc1, 0x01,
-    0x65, 0xdf, 0x49, 0x65, 0x62, 0x3c, 0x9e, 0x13, 0x81, 0x3e, 0xbf, 0x8a,
-    0x7c, 0xf5, 0x8c, 0x2c, 0xbb, 0xbe, 0x59, 0x7f, 0xd9, 0xde, 0x09, 0xce,
-    0xe7, 0x96, 0x56, 0xc7, 0xa2, 0xd1, 0x7b, 0xf1, 0xec, 0xd8, 0x02, 0xcb,
-    0xf3, 0xfd, 0x21, 0x38, 0xb2, 0xff, 0xc7, 0x37, 0x37, 0xb9, 0x6c, 0x11,
-    0xac, 0xb3, 0x3d, 0x95, 0xaa, 0xe1, 0xd3, 0x0b, 0x1a, 0x2e, 0xf4, 0x65,
-    0x44, 0x67, 0xc8, 0x40, 0xf4, 0x8f, 0x79, 0x40, 0x85, 0x54, 0xcd, 0x75,
-    0xf3, 0x23, 0x55, 0xfe, 0x5c, 0x25, 0xcd, 0xf2, 0xcb, 0xf6, 0x80, 0xee,
-    0x05, 0x45, 0xca, 0xbf, 0x9c, 0x7e, 0x82, 0xd9, 0x65, 0xcc, 0x79, 0x65,
-    0x99, 0x8d, 0x12, 0x18, 0x2f, 0xe3, 0x47, 0x2d, 0xbf, 0x68, 0x0e, 0xe0,
-    0x54, 0x5d, 0xab, 0xdb, 0x60, 0xab, 0x2f, 0xf8, 0xe5, 0x23, 0x2f, 0xe2,
-    0x4b, 0x2e, 0x6c, 0xfa, 0xcb, 0xe3, 0xd3, 0xfe, 0xb2, 0xf3, 0xed, 0x0b,
-    0x2c, 0xcf, 0x11, 0xc4, 0xd3, 0x47, 0x1e, 0x23, 0x8e, 0x0d, 0x04, 0x8a,
-    0xa1, 0xfd, 0xe3, 0x36, 0x2a, 0x95, 0x60, 0x96, 0x39, 0x44, 0x98, 0x6e,
-    0xc5, 0x67, 0x3c, 0x76, 0xbe, 0x43, 0x76, 0x17, 0x7e, 0xa5, 0xce, 0x15,
-    0x65, 0xc9, 0xc8, 0x69, 0x76, 0x32, 0x5b, 0xfc, 0xcf, 0x34, 0x07, 0x70,
-    0x2a, 0x2a, 0x75, 0xf8, 0x99, 0xeb, 0x9c, 0x59, 0x76, 0xd8, 0xb2, 0xfb,
-    0x85, 0xee, 0xac, 0xbf, 0xde, 0x8e, 0x43, 0x43, 0x32, 0xca, 0x91, 0xeb,
-    0x0c, 0x8a, 0xfe, 0x0f, 0xcd, 0x77, 0x25, 0x96, 0xea, 0xcb, 0xef, 0xb9,
-    0x03, 0x59, 0x60, 0xac, 0xbd, 0x0f, 0xb4, 0xe3, 0x69, 0xf9, 0x1d, 0x19,
-    0xfd, 0x12, 0x2d, 0xf0, 0x1d, 0xc0, 0xa8, 0xae, 0x57, 0x36, 0x16, 0x5f,
-    0xb4, 0x07, 0x70, 0x2a, 0x2c, 0xe5, 0x99, 0xc1, 0xe5, 0x60, 0xb5, 0xcf,
-    0x25, 0x97, 0xf4, 0xbb, 0xf0, 0x0f, 0x8b, 0x29, 0xcf, 0x14, 0x22, 0xd7,
-    0xf1, 0xf3, 0x09, 0xc5, 0x59, 0x78, 0x32, 0x85, 0x95, 0xa4, 0xd3, 0xbc,
-    0xf0, 0x4d, 0xbd, 0x21, 0xde, 0x59, 0x7f, 0xfb, 0xb1, 0xc9, 0xc1, 0xe7,
-    0x62, 0x69, 0x8d, 0x65, 0xff, 0xf9, 0xfd, 0x8d, 0x86, 0xce, 0xcc, 0x61,
-    0x87, 0x92, 0xcb, 0xf8, 0xdb, 0xb0, 0x75, 0x25, 0x97, 0xe6, 0xe4, 0xcf,
-    0xfa, 0xcb, 0xed, 0xbc, 0xfd, 0x59, 0x4e, 0x79, 0x81, 0x29, 0xbf, 0xd1,
-    0xe9, 0xcd, 0x9e, 0x59, 0x3d, 0x59, 0x58, 0x9c, 0x04, 0xc9, 0xde, 0x57,
-    0x27, 0xbd, 0xe4, 0x37, 0xfc, 0x50, 0xde, 0x06, 0x4e, 0xc2, 0xcb, 0xf6,
-    0xb3, 0xa6, 0xd5, 0x97, 0x37, 0x7a, 0xcb, 0xc5, 0x03, 0x59, 0x58, 0x6d,
-    0x1c, 0x66, 0xef, 0x62, 0xcb, 0xf6, 0x4d, 0x30, 0x76, 0x59, 0x66, 0x30,
-    0xf0, 0x7c, 0x2d, 0x7e, 0x9a, 0x1b, 0x02, 0x2c, 0xba, 0x4d, 0x59, 0x50,
-    0x7d, 0x18, 0x50, 0x45, 0x37, 0xff, 0xbc, 0x73, 0xbc, 0xe7, 0xd8, 0xc1,
-    0x9a, 0xcb, 0xff, 0x1e, 0xa7, 0x43, 0x4f, 0x75, 0xe6, 0x59, 0x7c, 0x07,
-    0x70, 0x2a, 0x24, 0x25, 0x30, 0x7e, 0x3a, 0x43, 0xbf, 0xec, 0xef, 0x03,
-    0x28, 0xda, 0x16, 0x5f, 0xff, 0x8f, 0x40, 0xf6, 0x4e, 0xd6, 0xb0, 0x59,
-    0xf8, 0x6a, 0xca, 0x92, 0x25, 0x38, 0x73, 0x7d, 0xdd, 0x1f, 0xcb, 0x2f,
-    0xfd, 0x8d, 0xc7, 0xd6, 0xd3, 0xbe, 0x6a, 0xcb, 0xfd, 0xf7, 0x3a, 0x50,
-    0xde, 0x2c, 0xbf, 0xfc, 0xe4, 0x09, 0xc3, 0x27, 0x97, 0x9e, 0x4b, 0x28,
-    0xcf, 0xf8, 0x26, 0x97, 0xf6, 0x11, 0xff, 0xc8, 0x59, 0x66, 0x72, 0x55,
-    0x89, 0x90, 0xba, 0xfa, 0x16, 0xe6, 0x47, 0xe2, 0x3f, 0xe1, 0x81, 0xc2,
-    0x1b, 0x8f, 0xcb, 0x2f, 0xfc, 0xe2, 0x4c, 0x47, 0xd2, 0x8f, 0xd6, 0x54,
-    0x91, 0xa5, 0xf3, 0xef, 0x45, 0xaf, 0xfe, 0xf1, 0xb7, 0x39, 0x3b, 0xe9,
-    0x67, 0x56, 0x5f, 0x4b, 0xc2, 0x71, 0x65, 0xd3, 0xc6, 0x79, 0x59, 0x7d,
-    0x06, 0x1e, 0x2c, 0xb3, 0x36, 0x56, 0x78, 0x7e, 0x22, 0xa8, 0x46, 0xf6,
-    0x23, 0xbb, 0x3d, 0xf4, 0xf3, 0xe8, 0x6a, 0xcb, 0xfb, 0xdc, 0xe6, 0x6b,
-    0x65, 0x97, 0x40, 0xab, 0x2f, 0xfb, 0xfc, 0x19, 0x3f, 0xf1, 0xbd, 0x65,
-    0x62, 0x20, 0x4c, 0xbd, 0xc5, 0xef, 0x37, 0x7c, 0x96, 0x5f, 0xfe, 0xf4,
-    0x7e, 0xd7, 0x97, 0x3b, 0x98, 0xd5, 0x97, 0xa6, 0x6c, 0xcb, 0x2c, 0xcd,
-    0x95, 0x59, 0x8e, 0x70, 0xdb, 0xb1, 0x10, 0xe1, 0x4f, 0x91, 0xb7, 0x1c,
-    0x79, 0x93, 0x26, 0x68, 0xe5, 0xab, 0x7e, 0x86, 0x43, 0xcb, 0xc2, 0x28,
-    0xc3, 0xf8, 0x5b, 0xd8, 0x54, 0x04, 0xb4, 0x41, 0xfd, 0xc4, 0xab, 0xff,
-    0xd9, 0xf3, 0x31, 0x85, 0xf5, 0x2f, 0x0a, 0xeb, 0x2f, 0xfe, 0x67, 0xe7,
-    0xe1, 0x67, 0x7b, 0x1f, 0xac, 0xbf, 0xfc, 0xcd, 0xaf, 0x26, 0x79, 0xa0,
-    0x3b, 0x81, 0x51, 0x3e, 0x2f, 0xff, 0x49, 0x9e, 0x6f, 0x36, 0x39, 0xc8,
-    0x68, 0x56, 0x5f, 0x07, 0x51, 0xc5, 0x97, 0xe6, 0x1f, 0xb8, 0x2a, 0xcb,
-    0x33, 0x19, 0xe5, 0x84, 0x8a, 0x9d, 0x18, 0x9d, 0x84, 0xd5, 0x01, 0x9f,
-    0xb2, 0x68, 0x3b, 0xb4, 0xc9, 0xdd, 0x46, 0x44, 0xd4, 0xef, 0x23, 0x3c,
-    0x63, 0xd7, 0xff, 0xf0, 0x49, 0xd8, 0x9d, 0xd6, 0x20, 0xa5, 0x9e, 0x36,
-    0xac, 0xb8, 0xfe, 0x59, 0x7f, 0xfd, 0x2d, 0x99, 0x48, 0x9e, 0x76, 0x06,
-    0xa7, 0x4e, 0xf4, 0xfa, 0xca, 0x91, 0xfe, 0x7e, 0x2f, 0x7f, 0xf8, 0xb6,
-    0xf4, 0x1f, 0x78, 0x65, 0xf4, 0x96, 0x5f, 0xfb, 0xac, 0x41, 0x4b, 0x3c,
-    0x6d, 0x59, 0x7f, 0xcc, 0x41, 0x4b, 0x3c, 0x6d, 0x59, 0x7c, 0x12, 0x76,
-    0x27, 0x1f, 0xb7, 0x4f, 0xaf, 0xda, 0xfc, 0xfd, 0x0b, 0x29, 0xa7, 0xc6,
-    0x13, 0xbb, 0xf6, 0x6b, 0x32, 0x65, 0x96, 0x66, 0xd5, 0x4d, 0x1e, 0x86,
-    0xcb, 0x91, 0xf2, 0x32, 0x31, 0x08, 0xaf, 0xda, 0x03, 0xb8, 0x15, 0x15,
-    0x92, 0xff, 0xcf, 0x26, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x37, 0x2c, 0xcf,
-    0x11, 0x00, 0xd3, 0x4a, 0x02, 0x61, 0x27, 0x0d, 0xfb, 0xe0, 0x3b, 0x81,
-    0x51, 0x2b, 0x2f, 0xff, 0xb5, 0xb1, 0x46, 0x9c, 0x64, 0xfa, 0x8d, 0xeb,
-    0x2b, 0x47, 0xfc, 0x12, 0xeb, 0xf1, 0x40, 0xdf, 0xcb, 0x2f, 0xf4, 0x19,
-    0x44, 0xa3, 0x71, 0x65, 0xf3, 0x5e, 0x4c, 0xf0, 0xfe, 0xcc, 0x8b, 0x84,
-    0xd7, 0xe6, 0x6f, 0x37, 0x31, 0x65, 0xf9, 0x9e, 0x4a, 0x3f, 0x59, 0x4c,
-    0xd1, 0x35, 0xb2, 0x34, 0x8a, 0xaf, 0xfd, 0xdc, 0x67, 0x9a, 0x3d, 0x9d,
-    0xab, 0x2f, 0xff, 0x4f, 0x4c, 0x86, 0x4f, 0x31, 0xe4, 0x79, 0xac, 0x59,
-    0x7f, 0xe3, 0xe0, 0x5a, 0x47, 0xbc, 0x2e, 0xb2, 0xff, 0xfb, 0xd1, 0x23,
-    0xff, 0x59, 0xe7, 0x27, 0x92, 0xcb, 0xfa, 0x09, 0xc0, 0xfb, 0xab, 0x2f,
-    0xfa, 0x01, 0x1a, 0x3e, 0xc0, 0x16, 0x54, 0x91, 0xe5, 0xf1, 0xfb, 0x53,
-    0xba, 0x5d, 0x6d, 0x2c, 0xbf, 0xf7, 0xfd, 0xcf, 0x41, 0x76, 0x7f, 0x16,
-    0x50, 0xcf, 0x48, 0x22, 0x37, 0xed, 0x01, 0xdc, 0x0a, 0x89, 0x71, 0x7f,
-    0x9e, 0x5d, 0x28, 0x6f, 0x16, 0x5f, 0xfc, 0x7c, 0x0b, 0x1c, 0xc6, 0x9f,
-    0xa1, 0x65, 0x19, 0xfb, 0x39, 0x95, 0xfa, 0x53, 0xe7, 0xe7, 0x59, 0x7a,
-    0x27, 0xe1, 0x65, 0xff, 0xfd, 0x81, 0x07, 0xa0, 0xa2, 0x4e, 0x38, 0xfb,
-    0x46, 0xb2, 0xff, 0xdc, 0x32, 0x0f, 0x67, 0xcf, 0x7b, 0x56, 0x5e, 0x32,
-    0x85, 0x95, 0x24, 0x7f, 0x0c, 0xab, 0x74, 0x79, 0xab, 0x3b, 0xd0, 0xef,
-    0xfe, 0x20, 0xcb, 0xcf, 0x2c, 0xfa, 0x50, 0xb2, 0xff, 0xe0, 0xc8, 0x8e,
-    0x51, 0xd2, 0x0c, 0x96, 0x5f, 0xa3, 0x9f, 0xb7, 0xab, 0x28, 0xcf, 0xb3,
-    0xc8, 0x75, 0xc4, 0x68, 0xf6, 0x16, 0x16, 0x02, 0xca, 0x73, 0x73, 0xf9,
-    0x45, 0xfd, 0x2f, 0x61, 0x60, 0x16, 0x5e, 0x97, 0xba, 0xb2, 0xef, 0x41,
-    0x9e, 0x4f, 0x8b, 0x2f, 0xfe, 0x23, 0xff, 0x9a, 0x83, 0x93, 0xf1, 0x65,
-    0xc7, 0xc5, 0x95, 0x88, 0x85, 0x32, 0xc9, 0xf4, 0x3b, 0xfb, 0x46, 0xd2,
-    0x79, 0x2c, 0xbf, 0xf7, 0xd2, 0xce, 0xe6, 0x81, 0x18, 0xb2, 0xf3, 0xc9,
-    0x9c, 0xf1, 0x5e, 0xa4, 0x88, 0xd1, 0xe5, 0x09, 0x0c, 0x22, 0xf4, 0x2a,
-    0x9e, 0x31, 0xee, 0x46, 0xb3, 0xd8, 0x77, 0x84, 0xc7, 0x70, 0xb2, 0xff,
-    0xc1, 0x6b, 0x3e, 0x41, 0x77, 0x34, 0xb2, 0xff, 0x87, 0x8c, 0xe3, 0x47,
-    0xe0, 0xac, 0xbf, 0xf8, 0x70, 0xcf, 0x73, 0x3e, 0x97, 0xa3, 0x8b, 0x2c,
-    0xcc, 0xd9, 0x0e, 0x0d, 0x9e, 0xe4, 0xe4, 0x32, 0x02, 0x81, 0xbc, 0xea,
-    0xff, 0xe6, 0x6f, 0x26, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x1d, 0xaf, 0xff,
-    0x83, 0x1f, 0x48, 0xda, 0x2e, 0x10, 0xfd, 0x0b, 0x2f, 0xcd, 0xfb, 0xa6,
-    0x2a, 0xcb, 0xb6, 0x66, 0x33, 0xfa, 0x11, 0x42, 0xff, 0x7b, 0x24, 0xcd,
-    0xcb, 0x8b, 0x2b, 0x0f, 0x9b, 0xa6, 0x57, 0xfc, 0xc9, 0x9f, 0xc6, 0x0f,
-    0xa5, 0x0b, 0x2f, 0xe9, 0xec, 0xa0, 0x18, 0x4b, 0x2e, 0x0f, 0x96, 0x5f,
-    0xcc, 0x92, 0xcf, 0x3f, 0x56, 0x58, 0x55, 0x97, 0xd8, 0xdd, 0x42, 0xcb,
-    0xf6, 0x11, 0xfe, 0x22, 0xca, 0x23, 0xc9, 0xe1, 0x0d, 0xec, 0xd4, 0x2c,
-    0xbf, 0xff, 0x48, 0xc7, 0xe3, 0xdf, 0x3b, 0x07, 0xa3, 0x08, 0x16, 0x5f,
-    0x46, 0xa3, 0x4b, 0x2a, 0x7b, 0x4c, 0x44, 0xd6, 0xf4, 0x43, 0xd1, 0xb1,
-    0x16, 0x6f, 0x4d, 0x1b, 0x2c, 0xbe, 0x82, 0xef, 0x16, 0x5d, 0x82, 0xc1,
-    0xbf, 0xe0, 0xf5, 0xff, 0xd9, 0xce, 0xe7, 0xa0, 0xbb, 0xe3, 0x59, 0x74,
-    0xf5, 0xc5, 0x97, 0xf7, 0xe5, 0x9f, 0x77, 0x16, 0x5d, 0xb6, 0xea, 0xcb,
-    0xf3, 0xb1, 0xec, 0xfd, 0x65, 0xfc, 0x5f, 0xbe, 0x9c, 0x45, 0x95, 0x3c,
-    0xa2, 0xf2, 0x07, 0x36, 0x2e, 0xd0, 0xdb, 0x94, 0xdf, 0xff, 0xfd, 0xe7,
-    0x19, 0x3c, 0xee, 0x7a, 0x39, 0x38, 0x2f, 0x3a, 0x59, 0xbe, 0x16, 0x5f,
-    0x30, 0x59, 0x25, 0x97, 0x7a, 0x3c, 0x89, 0xa2, 0x78, 0xbf, 0x6b, 0x51,
-    0xbf, 0x8b, 0x2f, 0xfc, 0x7a, 0x9d, 0xc2, 0xc6, 0xc0, 0x16, 0x5f, 0xe0,
-    0xf4, 0xdf, 0x7b, 0xc9, 0x65, 0xfc, 0xfb, 0xc7, 0x84, 0xc2, 0xcb, 0x41,
-    0x1f, 0x18, 0x86, 0x97, 0xff, 0xff, 0x7f, 0x04, 0x07, 0xeb, 0xfd, 0xfc,
-    0xec, 0x23, 0x80, 0xfb, 0xd0, 0xb2, 0xff, 0xc4, 0x19, 0x4e, 0xc3, 0x28,
-    0x6a, 0xcb, 0xfb, 0x92, 0x30, 0x3e, 0x96, 0x5e, 0x77, 0x02, 0xa2, 0xa1,
-    0x5f, 0xb0, 0x3d, 0x0b, 0x56, 0x54, 0x1f, 0xe8, 0x0b, 0x74, 0x51, 0x7f,
-    0x44, 0xd2, 0x0f, 0xd2, 0x59, 0x7f, 0xe3, 0xff, 0x93, 0xb9, 0xfb, 0xe4,
-    0xcb, 0x2f, 0xe0, 0x80, 0xd8, 0x70, 0x2c, 0xbf, 0xec, 0xf6, 0x13, 0xeb,
-    0x46, 0xb2, 0xa4, 0xad, 0x4f, 0x0b, 0x58, 0x2a, 0x04, 0x28, 0xbe, 0x27,
-    0x37, 0x3d, 0x42, 0xed, 0xa5, 0xde, 0x30, 0x24, 0x3e, 0x17, 0x5e, 0xdd,
-    0x78, 0x59, 0x6c, 0x59, 0x7f, 0xfc, 0x6d, 0x80, 0x4e, 0x07, 0x8f, 0x72,
-    0x1b, 0x0b, 0x2f, 0xfe, 0x0b, 0xed, 0xcc, 0x30, 0x03, 0x37, 0xac, 0xa9,
-    0x22, 0xa7, 0xc2, 0x04, 0xa7, 0x7f, 0xd2, 0xe9, 0xe9, 0xc0, 0x64, 0xb2,
-    0xf7, 0xfc, 0xc5, 0x97, 0xfb, 0x81, 0x99, 0xc6, 0xf3, 0x2c, 0xbf, 0xff,
-    0xb8, 0x2b, 0xee, 0x70, 0xf5, 0x37, 0x21, 0xaf, 0xf7, 0x56, 0x5e, 0xd1,
-    0xfc, 0xb2, 0xa4, 0x8d, 0x0f, 0x87, 0x66, 0x35, 0xeb, 0x0d, 0xfa, 0x45,
-    0x0d, 0x61, 0x65, 0xff, 0xcd, 0xcd, 0x16, 0x1e, 0xf3, 0xd3, 0xac, 0xaf,
-    0x8f, 0xad, 0xca, 0x2f, 0xff, 0xc7, 0xa9, 0xd9, 0xd0, 0xc6, 0x6d, 0xec,
-    0x39, 0x2c, 0xbf, 0xf1, 0x64, 0xdd, 0xf6, 0x68, 0xf8, 0xb2, 0xff, 0xe7,
-    0x6c, 0xe6, 0xbf, 0x67, 0x7b, 0xba, 0x59, 0x5e, 0x44, 0x39, 0x1f, 0x5f,
-    0xbe, 0x23, 0x69, 0xac, 0xbf, 0x44, 0xf7, 0xb6, 0x0a, 0xb2, 0xfa, 0x7c,
-    0x3b, 0x90, 0xb2, 0xa1, 0x39, 0xe1, 0x91, 0x64, 0x37, 0x4c, 0x8b, 0x44,
-    0xe1, 0x2e, 0xbf, 0xba, 0xfe, 0x9c, 0x38, 0x59, 0x7f, 0xdd, 0xe0, 0x9c,
-    0x7f, 0xa5, 0x8b, 0x2f, 0xf3, 0xca, 0x77, 0x03, 0xfb, 0xac, 0xbe, 0x8f,
-    0x46, 0xcb, 0x2c, 0x63, 0x3d, 0x8f, 0x1b, 0x54, 0x23, 0xa7, 0x0b, 0xc3,
-    0x09, 0x3b, 0xf7, 0x0f, 0xd8, 0x35, 0x97, 0xe9, 0x47, 0x73, 0x65, 0x95,
-    0xba, 0x79, 0xfa, 0x27, 0xbd, 0xf7, 0x71, 0x65, 0xfd, 0xc3, 0x20, 0x7a,
-    0x16, 0x56, 0x1f, 0x76, 0x89, 0x7a, 0x3b, 0x7f, 0xec, 0xef, 0x35, 0x93,
-    0x78, 0xd8, 0x59, 0x7f, 0xff, 0x1f, 0x3f, 0xc9, 0x14, 0x7e, 0xfe, 0xfa,
-    0x59, 0xd5, 0x97, 0xff, 0x00, 0xf5, 0xa7, 0x93, 0x80, 0x3f, 0x2c, 0xbf,
-    0xec, 0x63, 0x1a, 0x73, 0xf0, 0xd5, 0x95, 0xa4, 0x6e, 0x79, 0x70, 0x91,
-    0x6f, 0xfa, 0x73, 0x96, 0x6e, 0x4e, 0xf0, 0x56, 0x5f, 0x85, 0x3d, 0x63,
-    0x0b, 0x2a, 0x13, 0xe1, 0x32, 0xe7, 0x8c, 0x70, 0x25, 0xe2, 0x1f, 0xdf,
-    0xf7, 0x4f, 0x86, 0x16, 0x58, 0xe1, 0x65, 0xd1, 0xf2, 0xcb, 0xfa, 0x3b,
-    0x84, 0xfb, 0xab, 0x28, 0xd1, 0x03, 0xa3, 0xcf, 0xc5, 0xef, 0xe8, 0xd6,
-    0xd1, 0xad, 0x96, 0x5f, 0x07, 0x68, 0x92, 0xca, 0x91, 0xe9, 0x70, 0xbe,
-    0xff, 0xdc, 0xc2, 0xef, 0x32, 0x47, 0xe5, 0x97, 0xf7, 0x33, 0x79, 0x47,
-    0xcb, 0x2e, 0x0f, 0x96, 0x57, 0x11, 0x07, 0xd3, 0xd9, 0xf2, 0xfb, 0xff,
-    0xe8, 0xff, 0x0a, 0x73, 0xf6, 0x77, 0xb3, 0xf7, 0x59, 0x71, 0x6c, 0xb2,
-    0xa1, 0x34, 0x2c, 0x85, 0x29, 0x99, 0x92, 0x9d, 0xfe, 0x1e, 0x36, 0x77,
-    0x1f, 0xcb, 0x2f, 0x06, 0x38, 0xb2, 0x8c, 0xf4, 0x7c, 0x6b, 0x7f, 0xfb,
-    0xd0, 0xd2, 0x76, 0x0b, 0x3f, 0xfb, 0xf5, 0x97, 0xf6, 0xf7, 0x6f, 0x85,
-    0x75, 0x97, 0xff, 0xf8, 0xe3, 0xaf, 0xe6, 0x7c, 0xf6, 0x17, 0x67, 0x7f,
-    0x2e, 0x2c, 0xa9, 0x23, 0x84, 0xd3, 0x08, 0xc2, 0xf7, 0x03, 0xa5, 0x97,
-    0x8f, 0xc6, 0xb2, 0xfe, 0xd3, 0x97, 0xff, 0xc2, 0xca, 0x84, 0xe5, 0xb2,
-    0x30, 0x23, 0x2e, 0x71, 0xd1, 0x06, 0xef, 0xfa, 0x45, 0x9d, 0xe7, 0xe7,
-    0xf2, 0xcb, 0xf4, 0x35, 0xfe, 0xea, 0xcb, 0xb3, 0x65, 0x97, 0xff, 0x0f,
-    0x99, 0xa2, 0xcf, 0xf9, 0x9a, 0x59, 0x5c, 0x44, 0x1f, 0x4a, 0x02, 0x2f,
-    0x7e, 0xc0, 0x05, 0xf6, 0x59, 0x5e, 0x3d, 0x82, 0x30, 0xbf, 0xfe, 0xd1,
-    0x07, 0xe2, 0xc3, 0xd0, 0x3d, 0x1c, 0x59, 0x7f, 0xff, 0x01, 0xfd, 0x92,
-    0x8d, 0x47, 0xfa, 0x81, 0x1c, 0x96, 0x54, 0x22, 0xa7, 0x13, 0xef, 0xd9,
-    0xb3, 0x96, 0xf5, 0x97, 0xff, 0xff, 0xfa, 0x25, 0x3b, 0xbe, 0x38, 0xe4,
-    0xec, 0x08, 0x23, 0x7c, 0xec, 0xd6, 0xb3, 0x78, 0x5f, 0xcb, 0x2f, 0xbc,
-    0x4f, 0xb8, 0xb2, 0xa1, 0x57, 0x26, 0x46, 0x2b, 0xe8, 0x65, 0x11, 0x0f,
-    0x0a, 0x7b, 0x09, 0x7b, 0xfc, 0xff, 0x70, 0xdb, 0x00, 0x59, 0x7d, 0xb3,
-    0xc6, 0x96, 0x5e, 0x12, 0x7d, 0xd6, 0x5f, 0xff, 0xdb, 0xa7, 0xb7, 0x9c,
-    0xfb, 0x1e, 0x3e, 0xf3, 0x06, 0xb2, 0xbc, 0x7f, 0xae, 0x41, 0x4e, 0x8c,
-    0x00, 0xc2, 0x7e, 0xff, 0xdb, 0xde, 0x58, 0x43, 0x28, 0x92, 0xcb, 0xb6,
-    0x85, 0x96, 0x2c, 0x3d, 0x50, 0x9f, 0x5e, 0x31, 0x66, 0x59, 0x7f, 0xcf,
-    0xe3, 0xe7, 0x02, 0xff, 0xac, 0xa1, 0x9e, 0xbb, 0x8f, 0x59, 0x9c, 0xf4,
-    0xdd, 0x8b, 0x32, 0x4f, 0xe7, 0x93, 0x09, 0xec, 0x5e, 0x23, 0x41, 0xda,
-    0x11, 0xf2, 0x2c, 0x1c, 0x3f, 0xb2, 0x70, 0xed, 0x88, 0x51, 0x82, 0x18,
-    0xff, 0x17, 0x9c, 0x60, 0xfa, 0x94, 0x90, 0xd8, 0xd0, 0xfd, 0x2b, 0x45,
-    0xe1, 0xa0, 0x51, 0xe2, 0x72, 0x51, 0x37, 0x65, 0x99, 0x05, 0x9a, 0x7e,
-    0x1e, 0x62, 0x3e, 0x6e, 0x3e, 0xde, 0x23, 0x15, 0x65, 0xf0, 0x1d, 0xc0,
-    0xa8, 0xaa, 0x17, 0xfb, 0x51, 0xbf, 0xe9, 0x67, 0x56, 0x56, 0x8f, 0x90,
-    0x25, 0xd7, 0xf9, 0x88, 0xef, 0x37, 0xe0, 0xd6, 0x5f, 0xf9, 0xe4, 0xcf,
-    0x34, 0x07, 0x70, 0x2a, 0x26, 0xb5, 0xff, 0x7a, 0x1b, 0xce, 0x39, 0x01,
-    0x65, 0xf4, 0x6a, 0x3a, 0xb2, 0xe7, 0xea, 0xca, 0x19, 0xb7, 0x69, 0x0d,
-    0x99, 0xc9, 0x3b, 0x4c, 0x84, 0x03, 0x04, 0x4d, 0x36, 0xf2, 0x63, 0xb7,
-    0xdf, 0xff, 0x6e, 0x98, 0xf1, 0xb3, 0xbb, 0x9b, 0xa7, 0xbf, 0x8b, 0x2f,
-    0xda, 0x03, 0xb8, 0x15, 0x15, 0x62, 0xf6, 0xa1, 0xab, 0x2f, 0xfa, 0x25,
-    0x1a, 0xda, 0x35, 0xb2, 0xcb, 0x33, 0x84, 0x71, 0xe2, 0xce, 0x8d, 0x08,
-    0x72, 0xf8, 0xb0, 0x2c, 0xb5, 0x97, 0xf7, 0xdd, 0x8f, 0x3e, 0xea, 0xcb,
-    0xf3, 0xfb, 0x35, 0x8b, 0x2a, 0x0f, 0x5d, 0xcc, 0x6f, 0xed, 0x06, 0x6e,
-    0x47, 0x56, 0x54, 0x23, 0x2f, 0xcf, 0x81, 0x20, 0xbf, 0xfb, 0xfc, 0x26,
-    0x72, 0xff, 0x9b, 0x39, 0x2c, 0xa6, 0x67, 0xef, 0x05, 0xf7, 0xf1, 0xb4,
-    0xfb, 0xe8, 0x59, 0x7d, 0x13, 0x47, 0xcb, 0x2b, 0xc7, 0x9f, 0xc2, 0xcb,
-    0xfe, 0x93, 0x3c, 0xd0, 0x1d, 0xc0, 0xa8, 0x91, 0x17, 0xf6, 0xd1, 0xaf,
-    0x39, 0xac, 0xb3, 0x3c, 0x44, 0xb3, 0x91, 0x71, 0x1e, 0xfd, 0xa0, 0x3b,
-    0x81, 0x51, 0x69, 0x2f, 0xfc, 0xf2, 0x67, 0x9a, 0x03, 0xb8, 0x15, 0x13,
-    0xea, 0xcc, 0xf1, 0x10, 0x0d, 0x34, 0xbf, 0xfc, 0xcd, 0xaf, 0x26, 0x79,
-    0xa0, 0x3b, 0x81, 0x51, 0x42, 0x2f, 0xfe, 0xc1, 0x59, 0xf5, 0x87, 0xe1,
-    0xf6, 0x16, 0x5f, 0xba, 0x10, 0x3f, 0x16, 0x5f, 0x1e, 0xd1, 0xa5, 0x94,
-    0xd3, 0xca, 0xf1, 0x45, 0xfb, 0x40, 0x77, 0x02, 0xa2, 0x8f, 0x5f, 0xf4,
-    0x4a, 0x35, 0xb4, 0x6b, 0x65, 0x97, 0xff, 0xff, 0xf8, 0x43, 0xd4, 0xd1,
-    0xed, 0x67, 0x9c, 0x4e, 0x63, 0x0e, 0x5f, 0xc1, 0x44, 0xde, 0x85, 0x97,
-    0xe7, 0xe1, 0xf6, 0x16, 0x5f, 0xf4, 0x4d, 0x05, 0x13, 0x7a, 0x16, 0x54,
-    0x23, 0xb9, 0x88, 0x48, 0x11, 0x35, 0xff, 0xfd, 0x83, 0xf4, 0x08, 0xcf,
-    0xa4, 0xff, 0xf3, 0x91, 0xfa, 0x4b, 0xcf, 0x26, 0x70, 0xa8, 0x47, 0x08,
-    0x88, 0xd3, 0xb1, 0x94, 0x4f, 0x9a, 0x5f, 0xfd, 0x9e, 0x67, 0xd6, 0x1f,
-    0x87, 0xd8, 0x59, 0x66, 0x7b, 0x2b, 0x4d, 0x6c, 0xaa, 0x2e, 0xb2, 0xd4,
-    0x3b, 0x18, 0x2d, 0xa9, 0x14, 0x72, 0x64, 0xc8, 0xcd, 0x18, 0xae, 0xcd,
-    0xc1, 0x2d, 0xd3, 0xe8, 0xd1, 0xce, 0x38, 0x49, 0xa3, 0x08, 0xf4, 0x2d,
-    0xbf, 0x2a, 0xec, 0xba, 0x7b, 0xff, 0xe1, 0x41, 0x3d, 0x32, 0x7f, 0x65,
-    0xea, 0x79, 0x9d, 0x3b, 0xd3, 0xeb, 0x2f, 0xff, 0xfd, 0xb9, 0xd9, 0xec,
-    0x6d, 0x9e, 0xc8, 0xd9, 0x57, 0xac, 0xbd, 0x4f, 0x33, 0xa7, 0x7a, 0x7d,
-    0x65, 0x79, 0x30, 0x11, 0x5b, 0xaf, 0xfe, 0xf4, 0x1e, 0x8d, 0x96, 0x0f,
-    0x40, 0xab, 0x2f, 0xfd, 0xc6, 0x59, 0xb1, 0x3a, 0x77, 0xa7, 0xd9, 0xc1,
-    0xf6, 0x80, 0x96, 0xfd, 0xa0, 0x3b, 0x81, 0x51, 0x11, 0x2f, 0xf7, 0x03,
-    0x13, 0x74, 0xf7, 0xac, 0xb3, 0x3c, 0x3e, 0xa9, 0x8d, 0x2f, 0xec, 0xd0,
-    0x1d, 0xc0, 0xa8, 0x8a, 0xd7, 0xfd, 0xba, 0xcf, 0x34, 0x07, 0x70, 0x2a,
-    0x2b, 0x85, 0x33, 0x44, 0x1b, 0x9c, 0xdf, 0x79, 0xf4, 0x6b, 0x2f, 0xdd,
-    0xfc, 0x42, 0x92, 0xcb, 0xf7, 0xf0, 0x40, 0x67, 0x07, 0x96, 0xe4, 0x37,
-    0xcc, 0xf6, 0x9b, 0x75, 0x65, 0x8f, 0xe3, 0xe9, 0xfc, 0xfe, 0xff, 0x32,
-    0x67, 0xa2, 0x80, 0x3f, 0xcb, 0x2f, 0xb3, 0xcf, 0xd5, 0x97, 0xfb, 0x0f,
-    0x5f, 0xfe, 0x1e, 0x2c, 0xb3, 0x24, 0x8f, 0x5b, 0x84, 0x37, 0xf6, 0xa3,
-    0xae, 0x58, 0xb2, 0xff, 0xfd, 0xc3, 0xf3, 0x9c, 0x8c, 0xba, 0x1f, 0x6b,
-    0x16, 0x51, 0x9f, 0xf7, 0x4a, 0xef, 0xe8, 0xff, 0x9d, 0x28, 0x59, 0x7c,
-    0x07, 0x70, 0x2a, 0x29, 0xe5, 0xff, 0x8a, 0x37, 0x9f, 0x65, 0x18, 0x4b,
-    0x2b, 0x47, 0xd7, 0xd2, 0xeb, 0xfc, 0x3f, 0xe7, 0x46, 0xec, 0x49, 0x65,
-    0xfe, 0x69, 0x8c, 0x2f, 0xa9, 0x2c, 0xb9, 0xa6, 0xb2, 0xa0, 0xf2, 0x40,
-    0x67, 0x7f, 0xff, 0x47, 0x78, 0x16, 0x80, 0xff, 0x8c, 0xf1, 0x84, 0x0b,
-    0x2f, 0xe8, 0x6f, 0x20, 0xf6, 0x59, 0x52, 0x44, 0x47, 0x56, 0xef, 0xff,
-    0xe7, 0xd3, 0xfb, 0xe9, 0x67, 0x70, 0x83, 0xd0, 0xb0, 0xb2, 0xfa, 0x51,
-    0x9b, 0x2c, 0xbf, 0xff, 0x68, 0x3a, 0xd4, 0x16, 0x30, 0x7e, 0xf6, 0x08,
-    0xb2, 0xf6, 0x8f, 0xe5, 0x94, 0x04, 0x78, 0xfc, 0xb9, 0xa2, 0x2e, 0xab,
-    0x5e, 0x32, 0xea, 0xcb, 0xff, 0x9e, 0x4c, 0xdc, 0x79, 0x2f, 0x40, 0x16,
-    0x5f, 0xf8, 0xf4, 0xfb, 0x0c, 0x2f, 0xa9, 0x2c, 0xbf, 0xec, 0x2f, 0xe1,
-    0xa7, 0xa9, 0x2c, 0xbf, 0xc7, 0xc3, 0x0b, 0x2c, 0x70, 0xb2, 0xa4, 0x7d,
-    0xdd, 0x38, 0xb3, 0xac, 0xbf, 0xfe, 0x6e, 0x1f, 0x43, 0xd8, 0x91, 0x8f,
-    0x06, 0xb2, 0x8d, 0x10, 0x1e, 0x22, 0xfc, 0x42, 0xfe, 0x8d, 0x6d, 0x1a,
-    0xd9, 0x65, 0xfd, 0x1b, 0x38, 0xdf, 0xab, 0x2a, 0x47, 0xb9, 0xb8, 0x5f,
-    0x7d, 0x38, 0x9e, 0x4b, 0x2f, 0xcf, 0x9e, 0x36, 0xac, 0xae, 0x1e, 0x4e,
-    0xf2, 0x3a, 0x84, 0x49, 0x63, 0x75, 0xff, 0x6f, 0x76, 0xce, 0x1f, 0x8d,
-    0xab, 0x2f, 0xf8, 0xa1, 0xb1, 0x22, 0xc6, 0xac, 0xbf, 0xfc, 0xd8, 0xd6,
-    0xd1, 0xf6, 0x05, 0x97, 0x83, 0x59, 0x58, 0x8c, 0x23, 0x3d, 0x73, 0x6b,
-    0xf0, 0x30, 0xca, 0x65, 0x97, 0xf8, 0x81, 0x9b, 0xf3, 0xbc, 0x59, 0x73,
-    0xb0, 0xb2, 0xa0, 0xf2, 0xf4, 0x69, 0x7e, 0x7d, 0xa3, 0x41, 0x59, 0x53,
-    0xcb, 0x24, 0x26, 0x7b, 0x84, 0x94, 0x42, 0xa6, 0x44, 0x39, 0x09, 0x86,
-    0x08, 0x81, 0x08, 0x2f, 0xa1, 0x52, 0x71, 0x8a, 0x4c, 0x7c, 0xd1, 0xbf,
-    0x22, 0xbc, 0x65, 0xa5, 0x18, 0xf7, 0x21, 0xc7, 0xd2, 0xdd, 0xee, 0x53,
-    0xe4, 0x37, 0xff, 0x9e, 0x4c, 0xc6, 0x4e, 0x2f, 0x39, 0x1f, 0xac, 0xbf,
-    0xfd, 0xff, 0xe1, 0xe3, 0x31, 0x09, 0xda, 0x50, 0xb2, 0xff, 0xe2, 0xcf,
-    0xdc, 0xbf, 0x66, 0xd3, 0x6a, 0xca, 0xd2, 0x25, 0x3a, 0x9d, 0x7e, 0x7f,
-    0x78, 0xe6, 0x59, 0x7f, 0xf6, 0x70, 0xcb, 0xf2, 0xce, 0xfb, 0x16, 0x5f,
-    0xf8, 0xcb, 0xf2, 0xce, 0xfb, 0x19, 0xf8, 0xfa, 0x84, 0x28, 0xa6, 0x6a,
-    0xbe, 0x47, 0x19, 0xa1, 0xc3, 0x87, 0x90, 0x8d, 0xb6, 0x2c, 0xbf, 0x14,
-    0x05, 0x97, 0xc5, 0x97, 0xf3, 0x1a, 0x71, 0xb9, 0x2c, 0xa1, 0x9f, 0x46,
-    0x08, 0x39, 0x5d, 0xff, 0xc6, 0x3d, 0x3f, 0xcc, 0xf5, 0xa8, 0xd9, 0x65,
-    0x33, 0x3f, 0x5f, 0x16, 0xda, 0x16, 0x5f, 0xdc, 0x80, 0x14, 0x0d, 0x65,
-    0x0c, 0xde, 0x18, 0x85, 0xff, 0xfb, 0xd1, 0xac, 0x91, 0xbf, 0x70, 0x66,
-    0x10, 0x24, 0xbf, 0x44, 0xbf, 0x0c, 0x96, 0x5f, 0x01, 0xdc, 0x0a, 0x8a,
-    0xcd, 0x53, 0x1e, 0xbe, 0x8a, 0x6f, 0xba, 0x6d, 0xe2, 0xcb, 0xb8, 0xc2,
-    0xcb, 0xdc, 0x08, 0x16, 0x53, 0x06, 0xd7, 0x83, 0x17, 0xdc, 0xd4, 0x6f,
-    0x59, 0x7f, 0x6f, 0x22, 0x8d, 0xd9, 0x96, 0x5f, 0x9b, 0x05, 0x2e, 0x2c,
-    0xa8, 0x3d, 0x9d, 0x8c, 0xaf, 0xbb, 0xc1, 0x38, 0xb2, 0xfb, 0x9c, 0x81,
-    0x56, 0x59, 0xd6, 0x56, 0x1e, 0xb9, 0x92, 0x70, 0x8e, 0xed, 0x8d, 0x65,
-    0xfe, 0xe4, 0xc6, 0x5e, 0xcf, 0x96, 0x54, 0x1e, 0x5e, 0x0b, 0xdc, 0xfd,
-    0x59, 0x7d, 0xf8, 0x85, 0x25, 0x94, 0x33, 0x75, 0xd1, 0x6b, 0xff, 0xe8,
-    0x6f, 0x73, 0x0b, 0xbc, 0xf6, 0x7e, 0xeb, 0x2f, 0xf3, 0x63, 0xee, 0x6a,
-    0x37, 0xac, 0xb9, 0xf8, 0xb2, 0xa0, 0xf3, 0x02, 0x6d, 0x7f, 0xa4, 0x61,
-    0xdd, 0x9e, 0x7f, 0x6a, 0xcb, 0xf1, 0x47, 0x8f, 0x16, 0x56, 0x1f, 0x13,
-    0x9e, 0xd8, 0xd6, 0x5f, 0xde, 0xc2, 0x27, 0xea, 0xce, 0x16, 0x17, 0xe2,
-    0xef, 0xa3, 0x7a, 0xcb, 0xce, 0xed, 0x59, 0x7e, 0xc9, 0xb6, 0x0f, 0xeb,
-    0x2f, 0xee, 0xc6, 0xbf, 0x89, 0x96, 0x59, 0x9c, 0x2e, 0xba, 0x0c, 0x83,
-    0x21, 0x55, 0xf1, 0x19, 0xab, 0xcc, 0x45, 0xa7, 0xd6, 0xbc, 0xf9, 0xe1,
-    0xd6, 0xbf, 0x21, 0x28, 0x4d, 0x72, 0x10, 0x7d, 0x30, 0x09, 0xd6, 0xf2,
-    0x91, 0x06, 0xf7, 0x0a, 0xef, 0xf8, 0xfa, 0xfa, 0xda, 0x0c, 0x6b, 0x2f,
-    0xe8, 0x6e, 0xc1, 0xd4, 0x96, 0x57, 0x8f, 0x9f, 0xa7, 0x17, 0xfb, 0x6f,
-    0x60, 0x3d, 0x1a, 0x59, 0x7f, 0xd0, 0x52, 0xe3, 0x5c, 0x98, 0x59, 0x50,
-    0x7d, 0x9d, 0x34, 0xba, 0x06, 0xb2, 0xff, 0x82, 0xdc, 0x06, 0xbe, 0x71,
-    0x56, 0x54, 0x8f, 0xcb, 0x84, 0x3d, 0x16, 0xbf, 0xda, 0x86, 0x30, 0x8d,
-    0x85, 0x97, 0xff, 0xec, 0x1f, 0xa3, 0x93, 0xb0, 0xf4, 0x6d, 0x86, 0x16,
-    0x5f, 0xfe, 0x81, 0x44, 0x69, 0x67, 0xdd, 0x8c, 0x15, 0x65, 0xfb, 0xa6,
-    0x58, 0xd5, 0x97, 0xd2, 0x72, 0x67, 0x8a, 0x8a, 0xbe, 0x8c, 0x03, 0x45,
-    0xe4, 0x66, 0x22, 0xb6, 0xe2, 0x65, 0xff, 0x9e, 0x4c, 0xf3, 0x40, 0x77,
-    0x02, 0xa2, 0x45, 0x5f, 0xff, 0xbb, 0xec, 0x26, 0x7d, 0x77, 0xfb, 0x8c,
-    0x30, 0xeb, 0x2f, 0xfc, 0xfd, 0x67, 0x07, 0xa3, 0xe8, 0x56, 0x53, 0x34,
-    0x72, 0x42, 0x63, 0xac, 0xdf, 0xf6, 0xb4, 0x62, 0xe4, 0xc6, 0xd5, 0x97,
-    0xc0, 0x8f, 0x42, 0xca, 0x33, 0xdb, 0x23, 0xab, 0xf6, 0x80, 0xee, 0x05,
-    0x45, 0x92, 0xa8, 0x3d, 0x4c, 0x20, 0xbf, 0x6c, 0x65, 0x2e, 0x2c, 0xbf,
-    0xc1, 0xdb, 0xd1, 0xde, 0x1a, 0xcb, 0xf8, 0x23, 0x3d, 0x3f, 0x16, 0x5c,
-    0x7d, 0x59, 0x7e, 0xef, 0x04, 0xe3, 0x3c, 0x44, 0xfe, 0x8a, 0x38, 0x69,
-    0xd2, 0xda, 0x66, 0x98, 0xe6, 0x42, 0xfe, 0xfb, 0x05, 0xe7, 0x96, 0x5f,
-    0xed, 0xc3, 0x6c, 0x78, 0x41, 0xac, 0xbf, 0xbc, 0x7a, 0x89, 0x71, 0x65,
-    0xfc, 0xde, 0x9f, 0x9d, 0xab, 0x2f, 0xff, 0x1f, 0x7d, 0x9d, 0xc2, 0x8e,
-    0xc0, 0xd6, 0x54, 0x1f, 0xa3, 0x96, 0xdf, 0xf3, 0x9f, 0x43, 0xa7, 0xe3,
-    0x3d, 0x93, 0x1b, 0xc2, 0x30, 0x1b, 0xfa, 0x14, 0x37, 0xff, 0xfb, 0xaf,
-    0xf7, 0xec, 0xc6, 0x51, 0xf4, 0xba, 0x65, 0xff, 0x16, 0x5f, 0xd9, 0xa0,
-    0x3b, 0x81, 0x51, 0x6c, 0x2f, 0xff, 0xde, 0x9c, 0x59, 0xae, 0xf3, 0xd3,
-    0x4e, 0x9d, 0xe9, 0xf5, 0x97, 0xef, 0x3e, 0x8d, 0xab, 0x29, 0x92, 0x88,
-    0x80, 0x30, 0xde, 0xd0, 0x7c, 0xb2, 0xee, 0xb3, 0x83, 0xc4, 0xd1, 0x3d,
-    0x33, 0x4c, 0xd0, 0xe3, 0x05, 0xbd, 0x9c, 0xc5, 0x97, 0xc0, 0x77, 0x02,
-    0xa2, 0xdb, 0x5c, 0xfa, 0x59, 0x69, 0x2c, 0xb7, 0x36, 0x34, 0xe1, 0x16,
-    0xad, 0x1f, 0xef, 0x55, 0x6f, 0xde, 0xe9, 0xfe, 0x15, 0x97, 0xff, 0xa3,
-    0x6e, 0x98, 0xf0, 0xa4, 0x7e, 0x0a, 0xca, 0x33, 0xf2, 0xf1, 0x4d, 0xff,
-    0x44, 0xa3, 0x5b, 0x46, 0xb6, 0x59, 0x7d, 0x13, 0x70, 0xd6, 0x54, 0x93,
-    0xa9, 0xc8, 0x4c, 0x4d, 0x09, 0x42, 0x21, 0xdc, 0x3a, 0xbf, 0xf0, 0xf4,
-    0x61, 0xd9, 0x9f, 0x35, 0xd5, 0x94, 0xcd, 0x13, 0x58, 0xaf, 0x7b, 0xd9,
-    0xb2, 0xcb, 0xf9, 0xc7, 0x98, 0x4c, 0x2c, 0xbe, 0xc2, 0xfd, 0x9c, 0xc7,
-    0x92, 0xd1, 0xdb, 0xa7, 0xb2, 0x59, 0x7a, 0x7b, 0xf0, 0xd6, 0x5e, 0xdb,
-    0xc6, 0xb2, 0xff, 0xd3, 0xdc, 0xf6, 0xca, 0xfb, 0xec, 0x28, 0xfd, 0x65,
-    0xe9, 0xe3, 0x3c, 0x27, 0x8a, 0xcb, 0xf7, 0x63, 0xcf, 0x32, 0xcb, 0xfa,
-    0x0a, 0x43, 0x0b, 0x56, 0x5f, 0xef, 0x18, 0x93, 0x70, 0x3f, 0x2c, 0xbf,
-    0xec, 0xd6, 0xa2, 0x4f, 0xf0, 0xab, 0x2f, 0x80, 0xee, 0x05, 0x45, 0xe0,
-    0xbf, 0x77, 0xe0, 0x1e, 0x96, 0x5f, 0xf8, 0xff, 0xe4, 0xee, 0x7e, 0xf9,
-    0x32, 0xcb, 0xff, 0x3f, 0x63, 0x7e, 0xb5, 0x9f, 0x71, 0x65, 0xff, 0xcf,
-    0xa1, 0x3a, 0x7e, 0x2c, 0xee, 0x2c, 0xad, 0x26, 0x3c, 0xd2, 0xef, 0x14,
-    0x92, 0x1e, 0xf4, 0x1b, 0xf6, 0xba, 0xca, 0xb9, 0x32, 0xcb, 0x9f, 0x8b,
-    0x2f, 0x4f, 0xe7, 0x96, 0x57, 0xe6, 0xd7, 0xa2, 0xd7, 0xe6, 0xc1, 0x49,
-    0xd6, 0x5f, 0xd0, 0x5d, 0xde, 0xe0, 0x59, 0x7f, 0x4a, 0x37, 0xc6, 0xbe,
-    0x59, 0x7f, 0xff, 0x3e, 0xd3, 0x4a, 0x35, 0xb7, 0x65, 0x9b, 0xae, 0x5f,
-    0xac, 0xa9, 0x22, 0xff, 0x0b, 0x9c, 0xc2, 0xfb, 0xc5, 0x93, 0x2c, 0xbf,
-    0xba, 0xfe, 0x9c, 0x38, 0x59, 0x7f, 0xcf, 0xde, 0x41, 0x8f, 0x1a, 0xb2,
-    0xa0, 0xf9, 0x88, 0xbe, 0xf8, 0xb0, 0xd8, 0x59, 0x7f, 0xcd, 0xfa, 0x5d,
-    0xc2, 0xef, 0x16, 0x53, 0x4f, 0x6c, 0x42, 0x1b, 0xb1, 0x85, 0x97, 0xe7,
-    0x97, 0x4f, 0x65, 0x97, 0xff, 0x8f, 0xb0, 0x40, 0x36, 0xb4, 0xf8, 0x15,
-    0x95, 0x08, 0xaa, 0xc2, 0x33, 0x17, 0x72, 0x8b, 0xb1, 0xab, 0x2f, 0xc7,
-    0xe1, 0x9f, 0x16, 0x58, 0xf6, 0x37, 0xb2, 0x16, 0xbf, 0x61, 0x7f, 0xb9,
-    0x0b, 0x2f, 0x84, 0x0b, 0xf1, 0x65, 0xfa, 0x6d, 0x1e, 0xcd, 0x59, 0x50,
-    0x79, 0xb8, 0x47, 0x74, 0xc3, 0x59, 0x7f, 0xf3, 0x60, 0x13, 0xb0, 0x83,
-    0x2c, 0xe2, 0xcb, 0xfd, 0xe3, 0x15, 0x8d, 0x38, 0xab, 0x2f, 0xff, 0xfc,
-    0xe7, 0xd7, 0x6b, 0x97, 0xe0, 0xf1, 0xea, 0x42, 0x4b, 0x09, 0x65, 0xfd,
-    0x1f, 0x7d, 0x27, 0xf9, 0x65, 0x0d, 0x32, 0xec, 0x18, 0x02, 0x2f, 0x8d,
-    0x82, 0xd7, 0x7f, 0x9c, 0xbf, 0xec, 0xfe, 0x79, 0x65, 0xff, 0x79, 0xe4,
-    0xd3, 0x8d, 0x49, 0x65, 0xb3, 0x74, 0xfb, 0xbc, 0x6d, 0x73, 0x78, 0xb2,
-    0xfa, 0x0a, 0x5b, 0xab, 0x2f, 0xff, 0x7d, 0xfb, 0x97, 0xe5, 0x9b, 0xfd,
-    0x83, 0x59, 0x7f, 0xf1, 0xbf, 0xfd, 0x3e, 0x7a, 0x0b, 0xab, 0x2f, 0xb3,
-    0xa2, 0x81, 0x65, 0xd1, 0xfa, 0xca, 0x92, 0x65, 0xf8, 0x54, 0xc0, 0xb9,
-    0x92, 0x79, 0x37, 0x88, 0x7d, 0x23, 0xbf, 0xcf, 0xe7, 0x11, 0xb9, 0xc5,
-    0x96, 0x02, 0xcb, 0x81, 0x25, 0x94, 0x03, 0x51, 0xd1, 0x1a, 0x64, 0x32,
-    0xde, 0x19, 0x23, 0x73, 0xd9, 0x14, 0xf1, 0x1d, 0x9e, 0x09, 0xf0, 0x5f,
-    0xb1, 0x44, 0x8b, 0x46, 0x6f, 0x91, 0xac, 0x30, 0x99, 0xf3, 0x29, 0x91,
-    0x4d, 0x0e, 0x5d, 0x17, 0x36, 0x11, 0x1e, 0x8c, 0x95, 0xdd, 0xbf, 0x27,
-    0x27, 0x7e, 0x46, 0x9d, 0xd8, 0xf9, 0xf7, 0xb2, 0x4f, 0xad, 0xde, 0xec,
-    0x0d, 0x65, 0xf7, 0xef, 0xae, 0x2c, 0xbb, 0xe6, 0x70, 0x6f, 0xf0, 0x72,
-    0xff, 0x7e, 0xce, 0x69, 0x41, 0x75, 0x65, 0x33, 0x54, 0x53, 0x11, 0xe2,
-    0x68, 0xba, 0xf8, 0x86, 0x27, 0xcb, 0x2e, 0xcf, 0x96, 0x5f, 0x3f, 0x03,
-    0xb2, 0xca, 0x33, 0x75, 0xa1, 0x7b, 0xf6, 0x80, 0xee, 0x05, 0x45, 0xe8,
-    0xbf, 0x67, 0x4a, 0x36, 0x59, 0x7f, 0xe7, 0x3e, 0x87, 0x4f, 0xbf, 0x06,
-    0xb2, 0xf0, 0xc3, 0xc5, 0x97, 0xe8, 0x6b, 0xfa, 0x16, 0x5e, 0x69, 0xf5,
-    0x65, 0xff, 0x3f, 0x65, 0x0c, 0x74, 0xf6, 0x59, 0x5a, 0x3f, 0xc6, 0x93,
-    0x10, 0xe5, 0xfb, 0x1b, 0xe7, 0x1a, 0xca, 0x85, 0x40, 0xc3, 0x5e, 0xc2,
-    0x0d, 0x1a, 0x78, 0x9d, 0xcf, 0xc4, 0x84, 0xce, 0xe1, 0x75, 0xff, 0xd8,
-    0x3f, 0x63, 0x5a, 0xf2, 0xc2, 0x59, 0x78, 0x31, 0xfa, 0xcb, 0xed, 0xf8,
-    0x4c, 0xc6, 0x7b, 0xfa, 0x42, 0xbf, 0xcc, 0xfb, 0x93, 0x49, 0xc6, 0xb2,
-    0x8c, 0xfc, 0xbc, 0x79, 0x4c, 0xd3, 0x6b, 0xc8, 0xd2, 0xa9, 0x94, 0x76,
-    0x8b, 0x11, 0x0c, 0xed, 0xa1, 0x5b, 0x28, 0x6c, 0x65, 0x30, 0xac, 0x11,
-    0x96, 0x9c, 0xee, 0xa4, 0xd2, 0xe8, 0xb5, 0x1a, 0xf3, 0x63, 0xfb, 0xf4,
-    0x68, 0xae, 0xe5, 0xfc, 0x73, 0x45, 0x29, 0xbb, 0x8d, 0xa1, 0xa6, 0xee,
-    0x8b, 0x2e, 0xaa, 0xe0, 0xf9, 0x65, 0xff, 0xc1, 0x89, 0x8b, 0x37, 0xbb,
-    0x5a, 0x6b, 0x2f, 0xb3, 0xcf, 0xd5, 0x97, 0xfb, 0x0f, 0x5f, 0xfe, 0x1e,
-    0x2c, 0xb3, 0x25, 0x84, 0x4d, 0x92, 0x2f, 0x08, 0x6f, 0xff, 0x77, 0x81,
-    0x8e, 0x67, 0x4d, 0xaf, 0x25, 0x97, 0xa3, 0xed, 0x96, 0x51, 0x1f, 0x3f,
-    0x52, 0x6f, 0xfb, 0xbc, 0xcf, 0xa5, 0xe0, 0xb0, 0xb2, 0xf7, 0x22, 0x65,
-    0x94, 0x67, 0xf4, 0x44, 0x3c, 0x3c, 0xbc, 0x4f, 0xe5, 0x97, 0xb7, 0xc4,
-    0x96, 0x5e, 0xf6, 0x71, 0x65, 0xff, 0x11, 0xb1, 0xdf, 0x80, 0x7e, 0x59,
-    0x50, 0x7e, 0x83, 0x1e, 0xc1, 0xcb, 0xf9, 0xf5, 0x22, 0x0b, 0xac, 0xb8,
-    0xda, 0xb2, 0x82, 0x78, 0x5b, 0x85, 0x97, 0xcd, 0x09, 0x0d, 0x65, 0xed,
-    0xef, 0xf2, 0xcb, 0xce, 0xe0, 0x54, 0x44, 0x6b, 0xe6, 0x00, 0xfa, 0x59,
-    0x40, 0x3c, 0xb3, 0x28, 0xbf, 0x4f, 0x7d, 0xe3, 0xfe, 0xb2, 0xfc, 0x6e,
-    0xdc, 0xd2, 0xcb, 0xc0, 0x11, 0xab, 0x2f, 0xff, 0xfa, 0x26, 0xec, 0x73,
-    0x51, 0xd3, 0x01, 0x8e, 0x73, 0x04, 0xeb, 0x2a, 0x11, 0x0c, 0x43, 0xd7,
-    0xff, 0x1f, 0x3d, 0x8c, 0x30, 0xf3, 0x87, 0xf2, 0xca, 0xd9, 0x3f, 0x13,
-    0x22, 0xd3, 0x53, 0x48, 0x7c, 0x5d, 0xd8, 0x56, 0x6f, 0x21, 0xbf, 0xe1,
-    0xe9, 0xfe, 0xf6, 0x18, 0xab, 0x2f, 0xfe, 0xe7, 0x31, 0xa5, 0x9b, 0xe7,
-    0x44, 0xf4, 0xb2, 0xde, 0x34, 0x43, 0x04, 0xea, 0xff, 0x6d, 0xac, 0xef,
-    0x4f, 0xab, 0x29, 0x65, 0xff, 0xde, 0xce, 0x94, 0x4d, 0x39, 0x82, 0x75,
-    0x97, 0x06, 0x26, 0x3d, 0x1e, 0x85, 0xd4, 0x22, 0xcf, 0x90, 0x85, 0xbc,
-    0x51, 0xf2, 0xca, 0x91, 0xe1, 0x8c, 0x9e, 0xe7, 0xf2, 0xcb, 0xfd, 0xac,
-    0xe6, 0x39, 0x6c, 0xb2, 0x86, 0x79, 0x18, 0x2d, 0x70, 0xda, 0xb2, 0xfc,
-    0xfb, 0x08, 0x63, 0x59, 0x7f, 0xf6, 0x0a, 0x18, 0xdb, 0xa3, 0x8e, 0xf1,
-    0x65, 0x62, 0x21, 0x9c, 0x5c, 0x8a, 0x6f, 0xff, 0x48, 0xd8, 0x61, 0xf9,
-    0x07, 0xb3, 0xf5, 0x65, 0xff, 0xfc, 0xe7, 0xd8, 0xf1, 0x67, 0x7c, 0x7e,
-    0xc3, 0x15, 0x65, 0x1a, 0x28, 0xfc, 0x97, 0x7f, 0xff, 0xfb, 0xbd, 0x36,
-    0xe8, 0xf3, 0xe2, 0x0f, 0x63, 0xd3, 0xb7, 0x9f, 0x66, 0x85, 0x97, 0xfb,
-    0x0c, 0x8f, 0x5a, 0xc5, 0x97, 0xfd, 0x8e, 0x5f, 0xe8, 0x31, 0xfa, 0xca,
-    0x84, 0xc1, 0xf0, 0x8b, 0xe7, 0xcd, 0x18, 0x5f, 0xff, 0x9b, 0xba, 0x6e,
-    0xf3, 0x77, 0xd9, 0x2f, 0x1e, 0xf5, 0x97, 0xf7, 0xd2, 0xd0, 0x63, 0xf5,
-    0x97, 0xee, 0xc6, 0xa3, 0xf5, 0x97, 0xf3, 0x73, 0x52, 0x86, 0xac, 0xa8,
-    0x46, 0xfe, 0x2d, 0x19, 0x83, 0x94, 0x5d, 0xb3, 0x52, 0x5c, 0x28, 0xa9,
-    0x2f, 0xfc, 0xcc, 0x1e, 0x39, 0xbd, 0x1b, 0x33, 0xfc, 0xd8, 0x8a, 0x31,
-    0x7d, 0xbe, 0x3b, 0x0b, 0x2f, 0x6f, 0x7d, 0x2c, 0xbe, 0xcf, 0x16, 0x2c,
-    0xac, 0x37, 0xdc, 0x1e, 0xa9, 0x23, 0x78, 0xd7, 0x7a, 0xc3, 0x7e, 0x76,
-    0xe7, 0xdd, 0x59, 0x7b, 0x8f, 0xba, 0xb2, 0xb0, 0xf1, 0xcc, 0xa2, 0xf6,
-    0xd1, 0xba, 0xb2, 0xff, 0xfb, 0xc6, 0xc7, 0x0f, 0x0b, 0xf1, 0xe9, 0xc0,
-    0xb2, 0xff, 0x47, 0xb2, 0x69, 0x3e, 0xcb, 0x2f, 0xfe, 0x2c, 0xfa, 0x5c,
-    0x19, 0xef, 0x81, 0xac, 0xad, 0x91, 0xd4, 0x32, 0x00, 0xa8, 0x6e, 0x1a,
-    0x5f, 0xe7, 0xfb, 0x8e, 0x41, 0xc5, 0x97, 0xc7, 0xa7, 0xfd, 0x65, 0x7e,
-    0x7a, 0x9c, 0x32, 0xbf, 0xdf, 0xc6, 0xf7, 0xf7, 0x8d, 0x65, 0x33, 0x3d,
-    0x8e, 0x91, 0xdf, 0xf7, 0x03, 0xad, 0x1c, 0x1e, 0x96, 0x56, 0x26, 0x92,
-    0xf0, 0xed, 0xe9, 0x25, 0xb7, 0x56, 0x5f, 0x17, 0xd3, 0x42, 0xcb, 0xfe,
-    0x8c, 0xfa, 0x1e, 0x4f, 0x25, 0x97, 0xf6, 0x7f, 0x38, 0xb3, 0xf5, 0x97,
-    0x34, 0x0b, 0x28, 0x67, 0x8e, 0xe6, 0x17, 0xfe, 0xc1, 0x67, 0x38, 0xce,
-    0x63, 0x85, 0x97, 0xcd, 0xef, 0xee, 0xb2, 0xf8, 0xb1, 0xf7, 0x56, 0x5f,
-    0xa0, 0x51, 0x3d, 0x0b, 0x29, 0x90, 0x9c, 0x2c, 0x0a, 0x0c, 0x8f, 0x1f,
-    0xb4, 0x42, 0xe8, 0x1c, 0x23, 0x10, 0x8e, 0xfc, 0x59, 0xe7, 0xea, 0xcb,
-    0xd3, 0xb8, 0x05, 0x95, 0xba, 0x78, 0xbe, 0x26, 0xbf, 0xc6, 0xff, 0xeb,
-    0x41, 0xf2, 0xcb, 0xfa, 0x18, 0xc2, 0x36, 0x16, 0x5f, 0xd9, 0xdd, 0xce,
-    0xe7, 0x96, 0x56, 0x22, 0xdb, 0xc4, 0xa4, 0x69, 0xc2, 0xdb, 0xfd, 0x1b,
-    0x4d, 0x1c, 0x0f, 0xcb, 0x2f, 0xff, 0xe0, 0x33, 0xd3, 0x91, 0xf5, 0x9e,
-    0xa3, 0xa4, 0xff, 0xac, 0xbc, 0xf8, 0x4b, 0x2f, 0xfe, 0xe9, 0x47, 0xef,
-    0xdf, 0xc4, 0x29, 0x2c, 0xbf, 0x0c, 0xe6, 0x38, 0x59, 0x7e, 0xce, 0xcf,
-    0xe7, 0x56, 0x5f, 0x78, 0xf5, 0x39, 0xcf, 0x44, 0x89, 0xea, 0x79, 0x6d,
-    0x05, 0x27, 0xb8, 0x59, 0x44, 0x63, 0x7b, 0x16, 0xca, 0x11, 0xe3, 0x6f,
-    0xc9, 0x42, 0xc0, 0x87, 0x97, 0xd1, 0x8f, 0x1b, 0x54, 0xd0, 0xa7, 0xd4,
-    0x7a, 0xfe, 0x8c, 0x71, 0xe3, 0x48, 0xfd, 0xd8, 0xa5, 0x29, 0xf2, 0x3b,
-    0x9e, 0xc6, 0xde, 0x13, 0xbd, 0xe6, 0xd3, 0xeb, 0xc2, 0x0d, 0x6e, 0x42,
-    0x5e, 0xf0, 0x9e, 0xf2, 0xcb, 0xb7, 0x3c, 0xb2, 0xfd, 0xa0, 0x3b, 0x81,
-    0x51, 0x17, 0x2f, 0xdd, 0xfc, 0x42, 0x92, 0x4b, 0xf7, 0x3b, 0xe8, 0xfd,
-    0x65, 0xf9, 0xf6, 0x8d, 0x05, 0x65, 0x99, 0xc2, 0x39, 0xf6, 0x1e, 0xc1,
-    0xa7, 0x34, 0x09, 0x54, 0xf9, 0x4d, 0x33, 0x55, 0xc7, 0x29, 0x50, 0x77,
-    0xff, 0x35, 0xe4, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x26, 0x65, 0xff, 0xc3,
-    0x66, 0x41, 0x71, 0x07, 0xe3, 0x61, 0x65, 0xef, 0x1f, 0x16, 0x5f, 0x32,
-    0x79, 0x1d, 0x59, 0x7f, 0x47, 0x0a, 0x3b, 0xc5, 0x94, 0xca, 0xcf, 0x49,
-    0xa4, 0xd5, 0x3c, 0xa2, 0x59, 0x94, 0x6e, 0xbe, 0xc0, 0xeb, 0x65, 0x97,
-    0x4f, 0xb2, 0x16, 0x54, 0xf6, 0x78, 0x2c, 0xac, 0x8e, 0xfe, 0x65, 0x56,
-    0x43, 0x21, 0x93, 0xc8, 0x59, 0x74, 0x71, 0x65, 0x32, 0xb3, 0xd7, 0xf9,
-    0x06, 0xff, 0xf3, 0x27, 0xb2, 0xcf, 0x79, 0xe4, 0x66, 0x4b, 0x2f, 0x00,
-    0xda, 0xb2, 0xff, 0x99, 0x1f, 0xb4, 0x4d, 0x1e, 0xd0, 0xb2, 0xfa, 0x7b,
-    0xeb, 0x92, 0xcb, 0xe9, 0xea, 0x78, 0x72, 0x16, 0x58, 0x2b, 0x29, 0x95,
-    0x4d, 0xf1, 0x96, 0xdd, 0x3e, 0xc8, 0x59, 0x7d, 0x9f, 0xc7, 0xeb, 0x2e,
-    0xc0, 0xac, 0xbf, 0xfa, 0x1a, 0xfd, 0xcf, 0xbf, 0x68, 0x9e, 0x59, 0x7f,
-    0xf8, 0x1a, 0x0e, 0xdf, 0x70, 0xf4, 0x0f, 0x62, 0xcb, 0xe3, 0xde, 0xff,
-    0xac, 0xa8, 0x3f, 0x1e, 0xa6, 0xd7, 0x91, 0xb2, 0x50, 0xb8, 0xbe, 0x3d,
-    0x82, 0x4b, 0x2f, 0xd9, 0xb6, 0x7f, 0x32, 0xca, 0x9c, 0x79, 0x9d, 0x22,
-    0xbf, 0xb4, 0x7b, 0x8c, 0x18, 0x16, 0x5f, 0xe9, 0xd8, 0x4f, 0xaf, 0xe7,
-    0xd6, 0x5c, 0x52, 0x59, 0x7f, 0xfc, 0xfe, 0xcf, 0xbf, 0xf0, 0xaf, 0xe9,
-    0xbc, 0x15, 0x94, 0x67, 0xd4, 0xd1, 0x6b, 0xfb, 0x39, 0x02, 0x14, 0x2c,
-    0xa1, 0xa3, 0xbf, 0x21, 0x45, 0xe2, 0x1b, 0x62, 0xcb, 0x9d, 0xab, 0x2b,
-    0x86, 0x9b, 0x70, 0x42, 0xed, 0xce, 0xac, 0xb3, 0x2d, 0x65, 0xbf, 0x83,
-    0x5e, 0x11, 0xab, 0xf4, 0x63, 0x5f, 0xab, 0x2f, 0xff, 0xf8, 0xa0, 0x05,
-    0x0d, 0x9d, 0x1a, 0xd1, 0xef, 0xd3, 0xbf, 0xeb, 0x2f, 0xe3, 0x14, 0xf9,
-    0x80, 0x59, 0x46, 0x89, 0x5e, 0x34, 0x5f, 0x1f, 0x62, 0x4b, 0x2f, 0xbb,
-    0xc7, 0x99, 0x65, 0x32, 0x17, 0x37, 0x06, 0x3c, 0x02, 0x33, 0x87, 0x7c,
-    0xce, 0x7a, 0x24, 0xf4, 0x64, 0x0e, 0xb5, 0xfa, 0x99, 0x13, 0xf6, 0x17,
-    0x7b, 0xc8, 0x84, 0x21, 0xbc, 0xe4, 0x05, 0x97, 0xba, 0x50, 0xb2, 0xf8,
-    0x8b, 0x3a, 0xb2, 0x99, 0x26, 0xee, 0x06, 0xeb, 0x87, 0xf4, 0x2a, 0xb5,
-    0xf3, 0xf8, 0xe6, 0x59, 0x7c, 0x53, 0x40, 0xd6, 0x5d, 0xf7, 0x56, 0x5f,
-    0x7a, 0x68, 0x1a, 0xca, 0xc4, 0x51, 0x00, 0x8c, 0xc8, 0xa6, 0x22, 0x71,
-    0x8b, 0xf4, 0x34, 0xb2, 0x65, 0x97, 0xf1, 0xe1, 0x0f, 0xd0, 0xb2, 0xcd,
-    0x59, 0x43, 0x3e, 0x30, 0x13, 0xee, 0x95, 0xd2, 0xcb, 0xfb, 0x50, 0x41,
-    0xcf, 0x2c, 0xbe, 0xd4, 0x61, 0x2c, 0xbe, 0x7e, 0xcb, 0xf5, 0x96, 0x0a,
-    0xcb, 0xfc, 0x60, 0x7c, 0xd6, 0x75, 0x65, 0x7e, 0x78, 0x5c, 0x11, 0xbf,
-    0xcf, 0xa3, 0x8d, 0xd3, 0x6a, 0xca, 0x02, 0x61, 0x0d, 0x2c, 0xf1, 0x07,
-    0x59, 0x77, 0x91, 0xdf, 0xf6, 0xa3, 0x25, 0x1e, 0x8f, 0xd6, 0x5f, 0xfe,
-    0x9d, 0xe7, 0x3e, 0xfe, 0x12, 0x27, 0x92, 0xcb, 0xfe, 0x11, 0xb9, 0xc7,
-    0x7f, 0xa4, 0xb2, 0xf4, 0xf1, 0x64, 0x32, 0x56, 0x56, 0x2a, 0x7a, 0x01,
-    0x91, 0xc6, 0x27, 0xa4, 0xd6, 0x9c, 0x7e, 0x96, 0x47, 0x57, 0xff, 0xff,
-    0xff, 0xff, 0xa7, 0x8b, 0x27, 0x27, 0x8c, 0xf6, 0xca, 0xd9, 0x58, 0x19,
-    0x71, 0x3c, 0x27, 0xbd, 0x6d, 0xb9, 0x81, 0x1b, 0x2a, 0xc4, 0xff, 0xc2,
-    0x7a, 0x7b, 0x88, 0x9e, 0xf7, 0x59, 0x4e, 0xce, 0x9d, 0xe9, 0xf5, 0x97,
-    0xff, 0xef, 0xfe, 0x97, 0x83, 0x1a, 0x67, 0xe3, 0x03, 0xe9, 0x65, 0xff,
-    0xbd, 0x85, 0x8c, 0x61, 0x60, 0xd6, 0x5f, 0xfd, 0xf0, 0xb1, 0xd1, 0x9e,
-    0xef, 0x21, 0xab, 0x2f, 0xb9, 0x9f, 0x75, 0x65, 0xf8, 0x7e, 0x82, 0xd9,
-    0x65, 0xf1, 0x97, 0x78, 0xb2, 0xff, 0xff, 0x9a, 0x7a, 0xf0, 0x79, 0x28,
-    0xdf, 0xa8, 0x2e, 0xfb, 0x24, 0xb2, 0xa4, 0x88, 0x93, 0x21, 0xbf, 0xf1,
-    0xf4, 0xc0, 0x63, 0xee, 0x01, 0x65, 0x49, 0x3b, 0x8c, 0x3c, 0xd2, 0x49,
-    0x11, 0xf6, 0x16, 0x3b, 0x84, 0x57, 0xf8, 0x05, 0x9e, 0xf6, 0x7e, 0xb2,
-    0xf9, 0xc5, 0x7d, 0xd5, 0x94, 0xe7, 0xb0, 0x46, 0x77, 0xdd, 0x9f, 0xcf,
-    0x2c, 0xbf, 0xff, 0xce, 0x40, 0x2c, 0x1f, 0x83, 0x3b, 0xd1, 0x2d, 0x46,
-    0xcb, 0x2b, 0x11, 0x0e, 0x12, 0x5b, 0xf8, 0x42, 0x8f, 0x44, 0x96, 0x5f,
-    0xff, 0xcc, 0x16, 0x7e, 0x1e, 0x4e, 0x91, 0xfa, 0x00, 0x4e, 0xb2, 0x9a,
-    0x88, 0xa7, 0x2d, 0xbe, 0x16, 0x1b, 0xd5, 0x97, 0xfb, 0x05, 0x8e, 0x93,
-    0xf1, 0x65, 0xe3, 0xf1, 0xac, 0xa8, 0x3f, 0x03, 0x23, 0xe9, 0x95, 0xff,
-    0x3e, 0xa5, 0x3b, 0x00, 0x3c, 0x59, 0x53, 0xda, 0xf2, 0x24, 0x46, 0x61,
-    0x92, 0x84, 0xb5, 0x0b, 0x6f, 0x42, 0x9d, 0xe1, 0x58, 0x50, 0x92, 0x09,
-    0x6d, 0xe7, 0xdf, 0xba, 0xb2, 0x96, 0x5f, 0xff, 0x70, 0xe7, 0xf0, 0x1e,
-    0x32, 0x20, 0xeb, 0x65, 0x95, 0xa3, 0xdd, 0xe8, 0x5d, 0xfd, 0xdc, 0x6f,
-    0xd8, 0xd5, 0x95, 0x87, 0xa0, 0x64, 0x57, 0xf9, 0xad, 0x79, 0x70, 0xe4,
-    0xb2, 0xff, 0x31, 0x3a, 0x3e, 0xff, 0x50, 0xb2, 0xb0, 0xfa, 0xdc, 0xce,
-    0x8d, 0x37, 0x9f, 0x43, 0x38, 0xa1, 0x17, 0x7f, 0xfd, 0x9b, 0xf0, 0x7e,
-    0x8d, 0xed, 0x82, 0x71, 0x16, 0x5f, 0xc3, 0x79, 0x70, 0xe4, 0xb2, 0xb4,
-    0x7f, 0xe1, 0x52, 0xbe, 0x09, 0x77, 0x8b, 0x2f, 0xbd, 0x1a, 0x85, 0x94,
-    0x03, 0xc3, 0xd1, 0x15, 0xe9, 0x4f, 0x8a, 0xb2, 0xef, 0xcd, 0x65, 0xf9,
-    0xb2, 0xf0, 0x9c, 0x59, 0x6d, 0x4e, 0x3c, 0x11, 0x05, 0xef, 0xce, 0x29,
-    0x60, 0xd6, 0x54, 0x22, 0xd0, 0xd8, 0xb4, 0x57, 0x7f, 0xe2, 0x80, 0x30,
-    0xf9, 0xa3, 0xfd, 0x65, 0xfd, 0xcc, 0x3d, 0x69, 0xd6, 0x5f, 0xb9, 0x3b,
-    0xf7, 0xea, 0xca, 0xd9, 0x12, 0xbf, 0x9f, 0x74, 0xb2, 0xe8, 0xd2, 0xcb,
-    0xff, 0xb6, 0xce, 0x1b, 0xf9, 0x98, 0xa2, 0x8a, 0x92, 0xc7, 0xf9, 0xf0,
-    0x10, 0xb5, 0xff, 0x05, 0xf5, 0x3e, 0x1f, 0x1e, 0x96, 0x54, 0x23, 0xd4,
-    0x70, 0x92, 0xf1, 0x3d, 0xfd, 0xf6, 0x78, 0x3f, 0x7e, 0xb2, 0xfd, 0xe8,
-    0xdb, 0xc1, 0x59, 0x7e, 0x30, 0x80, 0xf6, 0x59, 0x58, 0x88, 0x2e, 0x98,
-    0xcf, 0x94, 0xdf, 0xf1, 0x64, 0x30, 0xfd, 0x76, 0x16, 0x5f, 0xe6, 0xe0,
-    0x09, 0xf0, 0x0b, 0x2e, 0x0c, 0xcb, 0x2e, 0x97, 0x20, 0xf2, 0x7f, 0x31,
-    0xbc, 0x00, 0x81, 0x65, 0x7c, 0x79, 0x61, 0x2e, 0xbf, 0xed, 0xb3, 0xf1,
-    0x85, 0xf5, 0x25, 0x97, 0xf3, 0xb8, 0xf7, 0xe0, 0xd6, 0x5e, 0x77, 0x02,
-    0xa2, 0xcf, 0x5f, 0xe8, 0x26, 0x34, 0x18, 0x25, 0x97, 0xf7, 0xee, 0x52,
-    0x36, 0xac, 0xad, 0x91, 0xe0, 0x33, 0xb0, 0x17, 0x19, 0x47, 0xe6, 0x57,
-    0xfb, 0xdd, 0xe3, 0xfc, 0x23, 0x56, 0x5f, 0xe8, 0x91, 0xf6, 0x3b, 0xc5,
-    0x97, 0xdf, 0x89, 0xe8, 0x59, 0x5e, 0x3d, 0x62, 0x32, 0xa8, 0x45, 0x69,
-    0xc2, 0x32, 0xff, 0x98, 0x72, 0xcd, 0xe5, 0x9c, 0x59, 0x7f, 0xe7, 0x9d,
-    0x9b, 0xcb, 0x39, 0x84, 0xb2, 0xda, 0x60, 0xfe, 0x3c, 0x73, 0x7f, 0x8c,
-    0x78, 0xd1, 0x73, 0xcb, 0x2d, 0xb2, 0xcb, 0xf7, 0x06, 0x70, 0x4b, 0x2a,
-    0x0f, 0xad, 0xa6, 0x7d, 0x12, 0xbf, 0xfb, 0x9d, 0x39, 0x85, 0x71, 0xc7,
-    0xdc, 0x59, 0x46, 0x98, 0x4b, 0xc2, 0x50, 0x25, 0xd7, 0x85, 0x14, 0x54,
-    0x97, 0xfe, 0x79, 0x70, 0xb0, 0x03, 0xcd, 0x24, 0x66, 0x68, 0x2f, 0xdb,
-    0x81, 0x6e, 0x0d, 0x65, 0xfe, 0xef, 0xb3, 0x7c, 0xe9, 0x35, 0x65, 0x61,
-    0xf1, 0x84, 0xae, 0xff, 0xdf, 0x48, 0x83, 0xfc, 0xe0, 0x37, 0xf5, 0x97,
-    0x43, 0x0b, 0x2f, 0xf8, 0x70, 0x51, 0xfc, 0xbc, 0x6b, 0x2a, 0x11, 0x29,
-    0xb2, 0x29, 0x8b, 0xdf, 0xef, 0x18, 0xc9, 0xde, 0x65, 0x97, 0xf8, 0x7e,
-    0x0b, 0xff, 0x3f, 0x8b, 0x2a, 0x0f, 0xa4, 0xcc, 0xaf, 0xa3, 0xb9, 0xb2,
-    0xcb, 0xfd, 0x13, 0xbb, 0x9c, 0xe4, 0x2c, 0xbf, 0x86, 0x20, 0xc3, 0xde,
-    0x2c, 0xa6, 0x11, 0x0d, 0xa2, 0x22, 0x34, 0xbf, 0xb3, 0x92, 0xf0, 0x9c,
-    0x59, 0x46, 0x7b, 0xe4, 0x61, 0x7a, 0x09, 0x85, 0x95, 0x26, 0x65, 0x28,
-    0xe1, 0x71, 0x8c, 0xac, 0x43, 0x58, 0x11, 0xdc, 0x7d, 0x0b, 0x63, 0x32,
-    0x9a, 0x19, 0x9a, 0x8c, 0x4d, 0xb0, 0xf8, 0xf4, 0x74, 0xff, 0xaa, 0x14,
-    0x2c, 0xb9, 0x0b, 0x5e, 0xc2, 0x63, 0x7c, 0x60, 0xa2, 0x10, 0x5d, 0xff,
-    0x16, 0x5f, 0x8b, 0xb9, 0xfb, 0x56, 0x5f, 0x68, 0xe3, 0xab, 0x2f, 0xee,
-    0x16, 0x4d, 0x0d, 0x59, 0x5f, 0x9e, 0x77, 0x48, 0x69, 0xd1, 0x32, 0x17,
-    0x6b, 0xa3, 0xab, 0x2f, 0xbf, 0x71, 0x7a, 0xb2, 0xff, 0x38, 0xbe, 0x38,
-    0xd4, 0x2c, 0xbf, 0x1e, 0xf8, 0x2e, 0xac, 0xa1, 0xa6, 0xce, 0xc4, 0x2c,
-    0x7e, 0x22, 0x31, 0x6d, 0x12, 0x70, 0xca, 0xff, 0xda, 0x3e, 0x48, 0x4f,
-    0x41, 0x42, 0xcb, 0xed, 0x1c, 0x35, 0x65, 0xff, 0xfb, 0xac, 0x06, 0x30,
-    0x7e, 0xce, 0x7d, 0x28, 0xf2, 0xca, 0xd2, 0x2d, 0x9a, 0x7c, 0x44, 0x37,
-    0xdf, 0x87, 0x5b, 0x2c, 0xb9, 0xe4, 0xb2, 0xff, 0xff, 0xfe, 0x27, 0x17,
-    0xb9, 0xe2, 0xce, 0x87, 0xf6, 0xbc, 0x9c, 0x70, 0x4f, 0xa7, 0x92, 0xcb,
-    0xfd, 0x9e, 0xf0, 0x7a, 0xe4, 0xb2, 0xe3, 0x1a, 0xcb, 0xfb, 0xc0, 0x7d,
-    0x3c, 0x96, 0x58, 0x12, 0x3c, 0x3c, 0x16, 0xbc, 0x73, 0x71, 0x65, 0x41,
-    0xe2, 0x34, 0x9e, 0xff, 0xee, 0x9f, 0x9d, 0xb3, 0xe1, 0xf1, 0xe9, 0x65,
-    0xfc, 0xfd, 0x6c, 0x67, 0x56, 0x53, 0x9f, 0x98, 0x51, 0xef, 0x7a, 0x38,
-    0xb2, 0xc6, 0x35, 0x44, 0xd3, 0x0b, 0x6a, 0x10, 0xcd, 0x85, 0xc9, 0x42,
-    0x53, 0xa4, 0x37, 0xe3, 0xf3, 0xb4, 0xd6, 0x5e, 0x72, 0xfd, 0x65, 0x4e,
-    0x3c, 0x20, 0x13, 0x5e, 0xdf, 0x83, 0x59, 0x6d, 0x6c, 0x78, 0x53, 0x12,
-    0x5e, 0xd3, 0xf9, 0x65, 0xfe, 0xdc, 0xd6, 0x6e, 0x10, 0x45, 0x59, 0x5b,
-    0x1e, 0xb0, 0xa3, 0x97, 0xb7, 0x0c, 0x6b, 0x2b, 0x0f, 0x0d, 0xc9, 0x2a,
-    0x17, 0x13, 0x8c, 0xbf, 0xd2, 0x92, 0xde, 0x1e, 0x25, 0x0c, 0x3b, 0xff,
-    0xff, 0xef, 0xf9, 0x98, 0x4c, 0x09, 0xa2, 0x8c, 0xf3, 0x3e, 0x16, 0x6c,
-    0xdc, 0x6a, 0xcb, 0xb5, 0x8b, 0x2e, 0xe1, 0xac, 0xad, 0x8d, 0x66, 0x85,
-    0xaf, 0xa0, 0x84, 0x6a, 0xca, 0xc3, 0xc4, 0x10, 0x8a, 0xb1, 0x31, 0x2e,
-    0xc3, 0xc2, 0xef, 0xf8, 0xb2, 0xf9, 0xfd, 0x02, 0x2c, 0xac, 0x37, 0x5b,
-    0xc6, 0x2f, 0xa0, 0x5c, 0x1a, 0xcb, 0xff, 0xe0, 0xfd, 0x2e, 0x0f, 0xd1,
-    0xa1, 0xbb, 0x8a, 0xb2, 0xb1, 0x1f, 0x06, 0xc5, 0xa2, 0x22, 0x22, 0xbc,
-    0x4d, 0x35, 0x97, 0xc2, 0xc7, 0xdc, 0x59, 0x7b, 0xa2, 0x62, 0xcb, 0xa3,
-    0x65, 0x94, 0xe6, 0xd3, 0x83, 0xb7, 0x87, 0x12, 0x59, 0x7f, 0xd1, 0x80,
-    0xf1, 0xef, 0x7d, 0x2c, 0xbb, 0x3c, 0xb2, 0x9c, 0xfa, 0xc8, 0x72, 0x7c,
-    0xe6, 0xec, 0x1a, 0xcb, 0xba, 0xcb, 0x59, 0x52, 0x4e, 0x67, 0x0e, 0xbc,
-    0x37, 0xc5, 0x8e, 0xc2, 0x2f, 0x79, 0x84, 0xf8, 0xb5, 0xfd, 0x9a, 0xfd,
-    0xa7, 0xc5, 0x97, 0xbc, 0x11, 0x56, 0x5f, 0xb9, 0xd3, 0x8f, 0x96, 0x5c,
-    0x10, 0x2c, 0xa9, 0x1b, 0xff, 0xca, 0x2f, 0x77, 0x04, 0x59, 0x7f, 0x34,
-    0x3c, 0xee, 0x75, 0x65, 0xf9, 0xfd, 0xf4, 0xb8, 0xb2, 0xa0, 0xf5, 0xc2,
-    0x5d, 0x7e, 0xce, 0x7f, 0x13, 0x2c, 0xbf, 0xa3, 0xee, 0x4e, 0xd4, 0x2c,
-    0xbc, 0x30, 0x81, 0x65, 0xf0, 0xca, 0x24, 0xb2, 0x8c, 0xdf, 0x38, 0xed,
-    0xff, 0xe1, 0x27, 0x7d, 0xd2, 0x8c, 0x9d, 0x9f, 0x75, 0x65, 0x42, 0xa4,
-    0x81, 0x97, 0x7c, 0xba, 0x64, 0x53, 0x3a, 0x68, 0x85, 0xa5, 0x3e, 0x6e,
-    0x08, 0xfd, 0xfe, 0x39, 0x9c, 0x8f, 0xee, 0x2c, 0xbb, 0x00, 0xb2, 0xff,
-    0x17, 0x78, 0x51, 0xde, 0x2c, 0xbf, 0xde, 0x2c, 0x3f, 0xe3, 0xf5, 0x97,
-    0xe3, 0xdf, 0x85, 0xc5, 0x95, 0x88, 0x8d, 0x33, 0x2d, 0x19, 0xdf, 0xdf,
-    0x77, 0x3c, 0x1d, 0xd5, 0x97, 0xf6, 0xb3, 0xde, 0x0f, 0x56, 0x5f, 0xbc,
-    0x51, 0x9a, 0x51, 0x7f, 0x66, 0xb6, 0x0b, 0x8d, 0x51, 0x06, 0x99, 0x9a,
-    0x6b, 0x6b, 0x64, 0x50, 0xc9, 0x52, 0xf8, 0xbd, 0x9f, 0x2c, 0xa8, 0x4c,
-    0x7c, 0xe1, 0xa6, 0xe5, 0x57, 0xe7, 0x01, 0xb6, 0x16, 0x5f, 0xd2, 0xf1,
-    0x3f, 0xdd, 0x59, 0x40, 0x3d, 0x42, 0x26, 0xbe, 0x10, 0x9f, 0x65, 0x95,
-    0x87, 0x89, 0xc2, 0x1b, 0xf4, 0x76, 0x73, 0x45, 0x59, 0x79, 0xb0, 0x05,
-    0x97, 0xc5, 0xf8, 0x78, 0xb2, 0xc7, 0x86, 0xff, 0x43, 0x97, 0xfc, 0x3e,
-    0x73, 0x34, 0x3f, 0x62, 0xcb, 0xfe, 0xe3, 0x94, 0x4c, 0x63, 0xd9, 0x65,
-    0xfe, 0x91, 0xb6, 0x3c, 0x20, 0xd6, 0x5f, 0xfe, 0x8c, 0x2f, 0xbb, 0x9a,
-    0x3d, 0x9d, 0xab, 0x2e, 0xcf, 0x4e, 0x45, 0xb7, 0x0e, 0x7a, 0x69, 0x76,
-    0x71, 0x65, 0x85, 0xe9, 0xe9, 0xcf, 0x9e, 0xd4, 0x26, 0xdc, 0xf1, 0xa1,
-    0x54, 0xe5, 0xd3, 0x49, 0xe4, 0xce, 0x21, 0x47, 0x28, 0xd3, 0x72, 0x19,
-    0x7a, 0x21, 0xf3, 0x51, 0x47, 0x27, 0x76, 0x49, 0x65, 0xff, 0xf8, 0xc0,
-    0x63, 0xec, 0x82, 0x5d, 0xe7, 0x9e, 0x4b, 0x2b, 0x87, 0xd7, 0xd1, 0x6b,
-    0xb0, 0x45, 0x97, 0xdf, 0xfa, 0x06, 0xb2, 0xfe, 0xf1, 0x8a, 0x50, 0x35,
-    0x97, 0xfd, 0x1f, 0xb6, 0x30, 0xbb, 0xc5, 0x97, 0xfd, 0xcc, 0x17, 0xce,
-    0xd3, 0xe2, 0xcb, 0xf6, 0x6b, 0x60, 0xf1, 0x65, 0x1a, 0x3a, 0xa6, 0x23,
-    0xf1, 0x6f, 0x0e, 0x37, 0x9c, 0xdf, 0x8f, 0xe9, 0x19, 0x2c, 0xbc, 0x7e,
-    0xc5, 0x97, 0xf7, 0x5d, 0xad, 0x86, 0xac, 0xac, 0x3e, 0xf0, 0x13, 0xfc,
-    0x37, 0x4b, 0x2d, 0x0d, 0x37, 0x42, 0x97, 0xde, 0xe0, 0x49, 0x65, 0xff,
-    0x82, 0xc3, 0x43, 0xdf, 0x40, 0x59, 0x6b, 0x2b, 0xe3, 0xe1, 0x21, 0xcb,
-    0xe6, 0xc6, 0x98, 0x59, 0x7d, 0x9f, 0xfe, 0xeb, 0x2b, 0x0f, 0x18, 0x88,
-    0xeb, 0x64, 0x44, 0x0a, 0xd1, 0x7c, 0x3e, 0x7a, 0x16, 0x5f, 0x8b, 0x42,
-    0xbe, 0xcb, 0x2a, 0x0f, 0xc3, 0x09, 0x5c, 0x8a, 0xfd, 0x9d, 0xe1, 0xb5,
-    0x65, 0xc1, 0x25, 0x97, 0x8b, 0x36, 0x59, 0x50, 0xb8, 0x3b, 0x22, 0x2c,
-    0x8c, 0x04, 0xe1, 0xeb, 0xa8, 0xe0, 0x08, 0xb3, 0x84, 0xe2, 0x0b, 0x5a,
-    0x4b, 0x2f, 0xb8, 0x18, 0xfd, 0x65, 0x78, 0xda, 0x7e, 0x23, 0x7b, 0xd8,
-    0x4b, 0x2f, 0xf6, 0x16, 0x7d, 0xd9, 0x35, 0x65, 0xdd, 0x85, 0x95, 0x07,
-    0x92, 0xe6, 0x77, 0xfc, 0xf2, 0x19, 0x85, 0x96, 0x7a, 0x59, 0x7e, 0xc2,
-    0x28, 0x1a, 0xcb, 0xef, 0x3f, 0xa1, 0x65, 0xfd, 0x1b, 0x35, 0xe6, 0x85,
-    0x96, 0xd2, 0xca, 0x91, 0xf0, 0x4c, 0x42, 0x12, 0xeb, 0xff, 0xe7, 0x63,
-    0xb1, 0xaf, 0xf5, 0x1d, 0x27, 0xfd, 0x65, 0xfe, 0x80, 0x0f, 0xc1, 0x7e,
-    0x2c, 0xbe, 0x00, 0x9d, 0xe2, 0xcb, 0xf8, 0xb3, 0xfc, 0x29, 0x2c, 0xbf,
-    0xfe, 0x62, 0x70, 0x84, 0xfd, 0xe1, 0xfd, 0xe3, 0x15, 0x65, 0x62, 0x20,
-    0x5c, 0xb2, 0x8d, 0x18, 0xc5, 0x0a, 0x5a, 0x85, 0x60, 0xf8, 0x45, 0xa6,
-    0x46, 0x90, 0x78, 0xf1, 0xe1, 0x0a, 0x46, 0x1c, 0x51, 0x0c, 0x3e, 0x6e,
-    0xe6, 0xf5, 0x97, 0x1f, 0x56, 0x5f, 0x19, 0x38, 0xd6, 0x5f, 0xf9, 0xb9,
-    0xde, 0x09, 0xc7, 0x96, 0x2c, 0xbf, 0x72, 0x35, 0xd8, 0x58, 0xcc, 0xdf,
-    0xd0, 0xd1, 0x31, 0xc5, 0xfb, 0x8d, 0x96, 0xb2, 0xf8, 0x5c, 0x91, 0xac,
-    0xbd, 0x86, 0xc2, 0xcb, 0xe9, 0x9d, 0xf4, 0xb2, 0x9c, 0xf8, 0x08, 0x88,
-    0x41, 0xcb, 0xd8, 0x7b, 0xd6, 0x5e, 0x90, 0x8d, 0x59, 0x5e, 0x37, 0x6e,
-    0x3b, 0x7f, 0x70, 0xf5, 0x81, 0xd2, 0xcb, 0xff, 0xfa, 0x69, 0xc6, 0x00,
-    0xeb, 0x81, 0x9c, 0xd3, 0xef, 0x8d, 0x65, 0xd0, 0xc2, 0xca, 0x83, 0xf8,
-    0x36, 0x1a, 0xc5, 0x56, 0x4c, 0x0c, 0x9c, 0x2b, 0xa6, 0x23, 0x6b, 0xd7,
-    0x9a, 0x7a, 0x41, 0xb9, 0x0a, 0x5b, 0x9a, 0xc9, 0x54, 0x5f, 0x8b, 0xf6,
-    0xdf, 0x4a, 0x06, 0xb2, 0xfd, 0x84, 0x7f, 0x49, 0x65, 0xed, 0x66, 0x2c,
-    0xa6, 0x41, 0xf6, 0x19, 0x57, 0x09, 0xef, 0xfe, 0x97, 0x43, 0x29, 0x37,
-    0xbd, 0x86, 0xac, 0xbf, 0xdd, 0xe4, 0x6d, 0x9c, 0x1a, 0xcb, 0xbd, 0x8b,
-    0x2f, 0xff, 0xbd, 0x03, 0xc0, 0x4e, 0xc2, 0xc1, 0xfa, 0x16, 0x5f, 0xf6,
-    0xa3, 0xc7, 0xbf, 0x51, 0x25, 0x97, 0xff, 0xfb, 0xf8, 0xfa, 0x5c, 0x1e,
-    0x61, 0x60, 0x3c, 0x61, 0xea, 0xcb, 0xff, 0x8f, 0x0b, 0x33, 0x93, 0xa5,
-    0xc6, 0xac, 0xbf, 0xf3, 0xc7, 0xd2, 0x9d, 0xcf, 0x87, 0x0b, 0x28, 0x6a,
-    0x8c, 0xbe, 0x32, 0x34, 0x6d, 0xd3, 0x49, 0x85, 0xb4, 0x9f, 0xf9, 0xd7,
-    0x18, 0x7a, 0x89, 0x79, 0x88, 0xd2, 0xcb, 0xfb, 0xc6, 0xd7, 0x7d, 0xc5,
-    0x97, 0xce, 0xdc, 0xde, 0xb2, 0xf6, 0x8f, 0x65, 0x97, 0xf0, 0xe3, 0xfd,
-    0x67, 0xcb, 0x2d, 0x3e, 0xb2, 0x99, 0xa3, 0x3c, 0x03, 0xb3, 0x17, 0xe8,
-    0x8d, 0xa3, 0xac, 0xb2, 0xfb, 0xfe, 0x36, 0x23, 0x45, 0x86, 0xc2, 0xcb,
-    0x81, 0xb2, 0xcb, 0xf6, 0x1e, 0xa6, 0x92, 0xcb, 0xe2, 0x7e, 0xf1, 0x65,
-    0xa1, 0xa7, 0x93, 0xbc, 0xa2, 0xe3, 0x99, 0x65, 0xfe, 0xd4, 0x30, 0x32,
-    0x8f, 0x96, 0x5f, 0x41, 0x63, 0x0b, 0x2f, 0x72, 0x18, 0x59, 0x7f, 0x9f,
-    0x3e, 0xef, 0x5f, 0xcb, 0x2f, 0xfe, 0x08, 0xf3, 0x51, 0x23, 0x1c, 0x12,
-    0xcb, 0xfe, 0x27, 0xda, 0x35, 0xa7, 0x92, 0xca, 0x91, 0xfd, 0x79, 0x0a,
-    0xff, 0xfb, 0x4f, 0xc2, 0xcd, 0x84, 0x90, 0x60, 0xc9, 0x65, 0x41, 0xf8,
-    0x84, 0x8a, 0xbe, 0x4d, 0x73, 0xc3, 0xbd, 0x8c, 0x7a, 0xf7, 0x4f, 0x65,
-    0x97, 0xef, 0xdf, 0xe8, 0x99, 0x65, 0xe2, 0x80, 0x2c, 0xbf, 0xf1, 0xcd,
-    0xe8, 0xd7, 0xd2, 0x8d, 0x2c, 0xbf, 0xfb, 0x46, 0xdc, 0xd6, 0x44, 0xc6,
-    0xd5, 0x94, 0x34, 0x41, 0xf1, 0x02, 0xfb, 0x3b, 0x03, 0x59, 0x7f, 0xf8,
-    0xc9, 0xfe, 0xe7, 0x33, 0x43, 0xf6, 0x2c, 0xa9, 0xca, 0xdc, 0xa4, 0x2e,
-    0x03, 0x43, 0x8d, 0xf5, 0xa7, 0x0e, 0x3a, 0x45, 0x5c, 0x84, 0xf0, 0xa4,
-    0x7b, 0x84, 0x36, 0x85, 0x94, 0xb2, 0xf6, 0x67, 0xeb, 0x2f, 0x78, 0xfa,
-    0xb2, 0xdb, 0xf0, 0xf4, 0xcc, 0x40, 0x82, 0xc4, 0x1c, 0xbf, 0xb3, 0x5b,
-    0x05, 0xc6, 0xb2, 0xf4, 0x6e, 0x71, 0x65, 0x30, 0x79, 0xa0, 0x2e, 0xbf,
-    0x6b, 0x59, 0xbb, 0x32, 0xcb, 0x85, 0xe2, 0xca, 0x86, 0x58, 0x80, 0xe1,
-    0x01, 0x92, 0xb1, 0x8e, 0x35, 0x4d, 0xd5, 0xe6, 0x9c, 0x79, 0x85, 0xe5,
-    0xcd, 0xff, 0x0e, 0xe0, 0xc2, 0x3f, 0x79, 0x18, 0x85, 0x97, 0x9a, 0xe2,
-    0x2c, 0xbf, 0xec, 0x29, 0x16, 0x36, 0x00, 0xb2, 0xfd, 0xe3, 0xdf, 0x83,
-    0x59, 0x7f, 0xe1, 0xc1, 0x61, 0x06, 0x59, 0xc5, 0x97, 0x4e, 0xf9, 0x65,
-    0xf9, 0xda, 0x7b, 0x98, 0xb2, 0xfe, 0xcf, 0x3f, 0x5e, 0x65, 0x97, 0x47,
-    0xcb, 0x2b, 0xe3, 0xc4, 0xe9, 0x6d, 0x62, 0x24, 0x1d, 0xb6, 0xff, 0xb0,
-    0x25, 0x9d, 0x27, 0x6a, 0xcb, 0x8e, 0x65, 0x97, 0x63, 0x0b, 0x2a, 0x0d,
-    0x77, 0x85, 0xee, 0xd6, 0x2c, 0xbc, 0x4c, 0x8d, 0xc5, 0x97, 0xc7, 0xa8,
-    0x92, 0xcb, 0xed, 0x9b, 0x1c, 0x59, 0x5b, 0x1e, 0x26, 0x10, 0xdf, 0xfa,
-    0x3a, 0xe1, 0xeb, 0xfd, 0x9d, 0x59, 0x7f, 0xda, 0x9d, 0x03, 0xf6, 0x02,
-    0x16, 0x57, 0x8f, 0xe1, 0xcf, 0xaf, 0xc0, 0x78, 0x39, 0xf5, 0x97, 0x8b,
-    0x38, 0xb2, 0xff, 0xff, 0xd1, 0xe3, 0x6b, 0x39, 0xa4, 0xfa, 0x13, 0xc7,
-    0xf7, 0x00, 0x7b, 0x2c, 0xad, 0x95, 0xfa, 0x8c, 0x75, 0x83, 0x63, 0x29,
-    0xdd, 0x3c, 0x9a, 0x15, 0x5a, 0x21, 0xf3, 0x27, 0xe4, 0x04, 0x2d, 0xc6,
-    0x7e, 0xc2, 0x68, 0x24, 0x22, 0x14, 0xee, 0x0d, 0xdb, 0x8b, 0x2f, 0xf0,
-    0x3f, 0x7f, 0xcc, 0x80, 0xb2, 0xc7, 0xe3, 0xc5, 0x21, 0x1b, 0xfd, 0xb0,
-    0xf3, 0xbc, 0x7f, 0x96, 0x5f, 0x4e, 0x79, 0x4f, 0x4b, 0x2f, 0xcf, 0x2e,
-    0x0d, 0xab, 0x2f, 0xfe, 0xcd, 0xf8, 0x3c, 0x20, 0xcb, 0x38, 0xb2, 0xfd,
-    0xa8, 0xf0, 0x83, 0x59, 0x5a, 0x3e, 0xd7, 0x44, 0xbe, 0x83, 0xda, 0x16,
-    0x5f, 0x0a, 0xf9, 0xc5, 0x97, 0xf0, 0xe3, 0xf2, 0xcf, 0x96, 0x5f, 0xf4,
-    0x9a, 0xf2, 0xef, 0x21, 0x85, 0x95, 0x08, 0x8a, 0xc2, 0x27, 0x2e, 0xbd,
-    0xc3, 0x25, 0x96, 0xfd, 0x65, 0xf0, 0x27, 0x73, 0xe5, 0x95, 0xa3, 0x70,
-    0x42, 0x57, 0xf8, 0x49, 0x46, 0xf3, 0x2f, 0xd6, 0x5f, 0x3e, 0xe6, 0x12,
-    0xca, 0xc4, 0x66, 0x3a, 0x99, 0x10, 0x70, 0xda, 0xb1, 0x58, 0xc0, 0x09,
-    0xb7, 0x4d, 0x5a, 0x52, 0xf0, 0x95, 0xfc, 0x84, 0xa1, 0x56, 0x18, 0x7c,
-    0xdd, 0xb4, 0x96, 0x5e, 0x3f, 0x1a, 0xca, 0xf8, 0xd9, 0xf4, 0x62, 0xfb,
-    0x3e, 0x94, 0x2c, 0xbc, 0x17, 0xe2, 0xca, 0xf1, 0xbe, 0x10, 0x8a, 0xff,
-    0x8d, 0x88, 0x1c, 0x6f, 0xcf, 0x2c, 0xbf, 0xc6, 0x2f, 0xd2, 0xe6, 0x01,
-    0x65, 0xfd, 0x21, 0x3f, 0xfe, 0x3e, 0x59, 0x5e, 0x3e, 0x77, 0x35, 0xbf,
-    0x83, 0xc8, 0x98, 0x3a, 0x59, 0x78, 0x39, 0xf2, 0xca, 0xf1, 0xe6, 0x74,
-    0xbe, 0xfe, 0xc6, 0xeb, 0x50, 0x35, 0x97, 0xef, 0xb9, 0xd3, 0xd9, 0x65,
-    0xfc, 0x12, 0xdb, 0x87, 0xf2, 0xcb, 0xff, 0xa3, 0x61, 0x5f, 0xee, 0x60,
-    0xcf, 0x8b, 0x2a, 0x11, 0x3f, 0x22, 0xa2, 0x2f, 0xbe, 0xff, 0xfc, 0xf9,
-    0x65, 0xfe, 0x0c, 0x6c, 0x58, 0x7b, 0x2c, 0xbf, 0xff, 0x46, 0xbf, 0xce,
-    0x10, 0x5e, 0x5e, 0x0b, 0xec, 0xb2, 0xfd, 0xdc, 0x72, 0x02, 0xca, 0xf1,
-    0xfe, 0x6e, 0x2b, 0x5f, 0xfe, 0x1f, 0xa3, 0xe9, 0x16, 0x37, 0x3e, 0xea,
-    0xcb, 0xf3, 0x73, 0xd8, 0x4b, 0x28, 0xcf, 0xc5, 0xd2, 0xef, 0xf8, 0x2f,
-    0x21, 0xe6, 0x7f, 0xc5, 0x97, 0xe6, 0xe6, 0x9c, 0x96, 0x5f, 0xfb, 0xe9,
-    0x7a, 0x1a, 0xff, 0x4b, 0x16, 0x5f, 0xc7, 0xf7, 0xd2, 0xce, 0xac, 0xa8,
-    0x44, 0xae, 0x13, 0x7e, 0x81, 0x5e, 0x47, 0xef, 0x21, 0x9d, 0x7e, 0xfb,
-    0x8d, 0x3d, 0xd5, 0x97, 0xff, 0x79, 0xcf, 0xbf, 0x84, 0x89, 0xe4, 0xb2,
-    0xfa, 0x08, 0x2c, 0xb5, 0x97, 0x67, 0x27, 0x1f, 0x47, 0x90, 0xea, 0x11,
-    0x86, 0x50, 0x94, 0xbf, 0x9f, 0x6f, 0xdc, 0x86, 0xb2, 0xb6, 0x5d, 0xf0,
-    0x1c, 0x28, 0x40, 0xda, 0x64, 0x53, 0x43, 0x33, 0x45, 0xcd, 0x25, 0xf4,
-    0x2b, 0xf9, 0x09, 0x6e, 0xc6, 0x3b, 0xbe, 0x1d, 0x73, 0xe4, 0xd7, 0xf4,
-    0x7f, 0x93, 0x1b, 0x56, 0x5e, 0xee, 0x12, 0xcb, 0xde, 0x7d, 0xd5, 0x97,
-    0xf8, 0x48, 0x04, 0xfe, 0x6a, 0x16, 0x5f, 0xf0, 0xf0, 0x3a, 0xd8, 0x07,
-    0xb2, 0xcb, 0xff, 0xec, 0xdf, 0x84, 0x32, 0x71, 0x79, 0xc8, 0xfd, 0x65,
-    0xf1, 0xea, 0x1a, 0xb2, 0xb4, 0x7e, 0x5e, 0x51, 0xbf, 0xfe, 0x07, 0x82,
-    0x59, 0xf4, 0x8f, 0x85, 0x9b, 0xd6, 0x5f, 0xbd, 0x1e, 0x36, 0x16, 0x5c,
-    0xf3, 0x70, 0xfe, 0x77, 0x14, 0x6a, 0x11, 0x99, 0xe8, 0x4d, 0xd4, 0x95,
-    0x08, 0x30, 0x37, 0xe1, 0xf7, 0x36, 0xec, 0x6f, 0x35, 0x0c, 0x96, 0xfc,
-    0x9e, 0x12, 0x38, 0x66, 0xbc, 0xa3, 0xeb, 0xa6, 0x0a, 0xcb, 0x35, 0x65,
-    0x7c, 0x6a, 0x59, 0x63, 0x17, 0xfb, 0xbf, 0x84, 0xb8, 0x63, 0x59, 0x7e,
-    0x97, 0xf9, 0x83, 0x59, 0x6d, 0xe6, 0x7b, 0x8e, 0x69, 0x7e, 0xf1, 0xeb,
-    0xf0, 0xac, 0xb6, 0xb0, 0xf4, 0x66, 0x28, 0xbf, 0x85, 0xe3, 0xc7, 0xd2,
-    0x59, 0x50, 0x7a, 0xf8, 0x51, 0x7f, 0xfa, 0x62, 0x8e, 0xf3, 0xbf, 0x00,
-    0xcb, 0x65, 0x97, 0xe3, 0x68, 0x93, 0x71, 0x65, 0xfc, 0xff, 0x48, 0xa0,
-    0x6b, 0x2f, 0xfa, 0x3e, 0x91, 0x93, 0x5f, 0xab, 0x28, 0xd1, 0xb7, 0xe4,
-    0xc7, 0x2a, 0x22, 0xdb, 0xf3, 0xcb, 0x36, 0x85, 0x97, 0xff, 0x47, 0x39,
-    0x8d, 0xe9, 0x43, 0x78, 0xb2, 0xfe, 0x62, 0x76, 0x36, 0x00, 0xb2, 0xff,
-    0xe8, 0xfa, 0x5d, 0x0c, 0x6c, 0x7f, 0x75, 0x65, 0xfe, 0x3f, 0x38, 0x20,
-    0x86, 0xb2, 0x8d, 0x15, 0x04, 0x61, 0xc4, 0x7b, 0xfa, 0x01, 0xfb, 0x43,
-    0xfa, 0xcb, 0xf6, 0x6f, 0x32, 0x1a, 0xcb, 0xfc, 0x3e, 0x1f, 0xbd, 0x83,
-    0x59, 0x7f, 0xf1, 0xc7, 0x09, 0xe5, 0x3b, 0x99, 0xa5, 0x97, 0x89, 0xf4,
-    0xb2, 0xf9, 0xdd, 0xf7, 0x16, 0x5f, 0xff, 0xd8, 0x39, 0xc7, 0xfc, 0x4e,
-    0xef, 0xb3, 0xbe, 0x79, 0x2c, 0xbf, 0xfc, 0x7c, 0xdb, 0x05, 0xc2, 0x0e,
-    0xe4, 0x33, 0xc4, 0x4e, 0xb4, 0x6f, 0x79, 0x1d, 0xfe, 0xfa, 0x5c, 0x9a,
-    0x51, 0xb2, 0xca, 0x1a, 0xb5, 0x80, 0x13, 0xea, 0x1d, 0x6d, 0x2e, 0xf1,
-    0x83, 0x94, 0x11, 0x9f, 0x61, 0xc2, 0x17, 0x5b, 0xff, 0xfb, 0xb9, 0xf7,
-    0x75, 0xa8, 0xef, 0xe2, 0x14, 0xbd, 0x8b, 0x2e, 0x3d, 0xeb, 0x2f, 0xa0,
-    0xa5, 0xc5, 0x96, 0x3f, 0x91, 0x2f, 0x32, 0xf7, 0xe3, 0x17, 0xfb, 0x5b,
-    0x14, 0x00, 0xe4, 0xb2, 0xbc, 0x7d, 0x6e, 0x71, 0x7e, 0xf4, 0x6f, 0x1c,
-    0x2c, 0xbc, 0x37, 0x25, 0x96, 0xde, 0xb2, 0xfd, 0xf7, 0x4a, 0x3c, 0xb2,
-    0xda, 0x83, 0x76, 0xe2, 0x77, 0xdf, 0x4d, 0x1a, 0x59, 0x6d, 0x2c, 0xac,
-    0x36, 0xa1, 0x24, 0xa9, 0x23, 0xe4, 0x65, 0x3a, 0x56, 0xe2, 0xd5, 0xfe,
-    0x2e, 0xe8, 0xf7, 0xe0, 0xd6, 0x5f, 0xb5, 0x27, 0xf8, 0x55, 0x95, 0x07,
-    0xbc, 0x66, 0x97, 0xf8, 0x3f, 0x4b, 0xbc, 0x0e, 0xea, 0xcb, 0xf9, 0xc5,
-    0xfe, 0x3d, 0xc5, 0x95, 0x24, 0x44, 0x78, 0x80, 0x8e, 0x6f, 0xe7, 0x7e,
-    0x8f, 0xc3, 0x59, 0x7f, 0xbe, 0xd4, 0x1c, 0x9f, 0x8b, 0x2f, 0xfb, 0xbc,
-    0x0c, 0x84, 0x19, 0xf5, 0x65, 0x41, 0xf7, 0x39, 0x9d, 0xfb, 0xd1, 0x92,
-    0x75, 0x97, 0xb0, 0xf8, 0xb2, 0xfd, 0xde, 0xe0, 0x76, 0x59, 0x7f, 0xfd,
-    0xb3, 0xfb, 0x07, 0x3b, 0x08, 0xb0, 0xff, 0x59, 0x5b, 0x22, 0x50, 0x03,
-    0x7a, 0x29, 0xbf, 0xef, 0x00, 0xde, 0x77, 0x1f, 0xcb, 0x28, 0x69, 0x92,
-    0xe4, 0x2e, 0x9c, 0xc6, 0xf8, 0xa2, 0x46, 0xb2, 0xfc, 0xe5, 0xf4, 0x8d,
-    0x65, 0xe0, 0xc1, 0x2c, 0xbf, 0xff, 0xc7, 0xd8, 0x27, 0x96, 0x0f, 0x8f,
-    0xa3, 0xf1, 0xef, 0x59, 0x7d, 0x05, 0x2e, 0x2c, 0xad, 0x23, 0x8b, 0xc4,
-    0x04, 0x4f, 0xbc, 0x6c, 0x45, 0xfb, 0xff, 0xf7, 0x0a, 0x77, 0x9c, 0xfb,
-    0xf8, 0x48, 0x9e, 0x4b, 0x2f, 0xff, 0xfe, 0x8d, 0x64, 0xd0, 0xdc, 0x01,
-    0x8f, 0xd1, 0xde, 0x31, 0xac, 0xdc, 0x59, 0x7f, 0xbc, 0x6c, 0x4f, 0x87,
-    0x4c, 0x2c, 0xbf, 0xe6, 0xc1, 0x01, 0xcb, 0xf6, 0x4a, 0xcb, 0xfc, 0x6d,
-    0xd6, 0x4f, 0x9f, 0xeb, 0x2f, 0xfa, 0x3f, 0xd6, 0xa0, 0x51, 0xfc, 0xb2,
-    0xff, 0x0a, 0xdf, 0x41, 0x96, 0xcb, 0x2f, 0xff, 0x3c, 0x8f, 0x59, 0xf4,
-    0xd2, 0x8d, 0x6c, 0xb2, 0xa1, 0x10, 0x1f, 0x9a, 0x5f, 0xff, 0x16, 0x73,
-    0x1b, 0x00, 0xce, 0x9e, 0xb1, 0x65, 0x01, 0x3d, 0x66, 0x9c, 0xf8, 0xf3,
-    0xf3, 0x6e, 0xc2, 0xf3, 0x79, 0x1d, 0xff, 0xa6, 0xe7, 0x43, 0xf6, 0x0d,
-    0xc9, 0x65, 0xff, 0x67, 0x61, 0xb1, 0x9f, 0x75, 0x65, 0x42, 0xb2, 0x3c,
-    0x94, 0x96, 0xec, 0x01, 0x40, 0xbf, 0xb6, 0xcd, 0x18, 0x21, 0x65, 0xf1,
-    0x0e, 0x1a, 0xb2, 0xff, 0xf8, 0x25, 0xde, 0x78, 0xe6, 0x28, 0x6b, 0xc9,
-    0x65, 0xf6, 0x10, 0x5d, 0x65, 0x34, 0xfb, 0xf7, 0xa7, 0xdf, 0xcf, 0xfe,
-    0x0d, 0xe4, 0xb2, 0xa1, 0x1c, 0x39, 0x09, 0x03, 0x24, 0xbe, 0xff, 0x8c,
-    0xa3, 0x25, 0x65, 0x1a, 0x6d, 0xbe, 0x8c, 0x39, 0xcc, 0xaf, 0xc7, 0xe0,
-    0x09, 0x25, 0x95, 0x0d, 0x93, 0xb6, 0xd1, 0x95, 0x0e, 0x1f, 0x79, 0x2e,
-    0x48, 0x11, 0xc5, 0x1c, 0x63, 0x53, 0x46, 0x47, 0xa2, 0xf6, 0xc2, 0x6f,
-    0xd1, 0xa2, 0xbc, 0x62, 0xdf, 0xa6, 0x14, 0xb7, 0x9e, 0xc7, 0x60, 0x13,
-    0x5b, 0xff, 0xb0, 0xbf, 0xcc, 0xd7, 0x3b, 0x18, 0xb2, 0xff, 0xbe, 0xee,
-    0x68, 0xf6, 0x76, 0xac, 0xbd, 0x9b, 0xf1, 0x65, 0xb3, 0xf4, 0x4c, 0x92,
-    0x17, 0x0e, 0xaf, 0x32, 0xe4, 0x6b, 0x2f, 0xa0, 0x9e, 0x4b, 0x2f, 0xd9,
-    0xba, 0xe5, 0xfc, 0xe3, 0xc0, 0xd1, 0x05, 0xfe, 0x91, 0xb6, 0x3c, 0x20,
-    0xd6, 0x5f, 0xbc, 0x71, 0xae, 0x2c, 0xaf, 0x1e, 0xde, 0xf3, 0x4b, 0xff,
-    0xf4, 0xb8, 0x59, 0xde, 0x1e, 0x37, 0xba, 0xc1, 0x56, 0x5f, 0xfb, 0xc6,
-    0xd1, 0xe4, 0xd1, 0x9a, 0x59, 0x7a, 0x51, 0xf2, 0xcb, 0xf0, 0x48, 0x31,
-    0xf2, 0xcb, 0xe8, 0xfd, 0xda, 0xb2, 0xd2, 0xc4, 0x52, 0xcc, 0x7c, 0xd1,
-    0xd2, 0x28, 0xaf, 0x93, 0x3c, 0x28, 0x7d, 0x5f, 0x70, 0xfb, 0x0b, 0x2a,
-    0x0f, 0x29, 0xca, 0x6f, 0xc5, 0x9f, 0x87, 0x8b, 0x2f, 0xf4, 0xe2, 0x7d,
-    0x8a, 0x3e, 0x59, 0x70, 0x0f, 0x0f, 0x77, 0x45, 0x17, 0xc0, 0xf1, 0xcc,
-    0xb2, 0xff, 0xdf, 0xbe, 0xb3, 0x7e, 0x6f, 0x81, 0xac, 0xbf, 0xfe, 0xc6,
-    0x18, 0x31, 0xf8, 0xe6, 0xf1, 0xfd, 0xd5, 0x94, 0xd4, 0x4a, 0x92, 0x15,
-    0x42, 0x36, 0xb2, 0x17, 0x17, 0x07, 0x4b, 0x2f, 0x01, 0xf4, 0xb2, 0xff,
-    0xdb, 0x61, 0x37, 0x3b, 0xc1, 0x38, 0xb2, 0xfd, 0xc0, 0x46, 0x98, 0x59,
-    0x7f, 0x1f, 0xff, 0x4b, 0x3a, 0xb2, 0xb6, 0x46, 0x5f, 0x85, 0xdc, 0x73,
-    0xf4, 0x0d, 0xe5, 0x37, 0xd2, 0xee, 0x7e, 0xb2, 0xf7, 0x0e, 0x65, 0x95,
-    0xf1, 0xe0, 0x70, 0x8e, 0xfb, 0xbe, 0x08, 0x16, 0x5f, 0xb0, 0xc7, 0xe3,
-    0x59, 0x5b, 0x1e, 0x4c, 0x88, 0xef, 0x3e, 0x98, 0x59, 0x50, 0x8a, 0xcc,
-    0x6c, 0x72, 0x3b, 0xff, 0xb3, 0xee, 0xf0, 0xca, 0x3f, 0x76, 0xac, 0xbd,
-    0x26, 0xf9, 0x65, 0x6c, 0x7c, 0x3d, 0x44, 0xbf, 0xff, 0xf4, 0xfe, 0x77,
-    0xce, 0x36, 0x65, 0x9b, 0xcb, 0x39, 0xc3, 0xfb, 0xab, 0x2d, 0xf2, 0xcb,
-    0xec, 0x6c, 0x6e, 0xac, 0xb7, 0xcc, 0xb3, 0x6d, 0xc1, 0x2b, 0xcc, 0x18,
-    0xab, 0x2f, 0xc2, 0x9e, 0x13, 0x0b, 0x28, 0xcf, 0x18, 0x23, 0xd5, 0x89,
-    0xaf, 0x19, 0x1b, 0xc2, 0xa0, 0x9c, 0xaf, 0xe7, 0x07, 0x9f, 0x73, 0x8b,
-    0x2d, 0x8b, 0x2f, 0xcf, 0x37, 0x8f, 0x4b, 0x2a, 0x71, 0xb8, 0xf0, 0x85,
-    0xf7, 0x0a, 0x1a, 0xb2, 0xa0, 0xf1, 0x3e, 0x23, 0xbd, 0xe9, 0x35, 0x65,
-    0xde, 0x35, 0x95, 0x86, 0xcf, 0xa3, 0xb5, 0x0c, 0x9b, 0x69, 0x3a, 0xe4,
-    0x27, 0x98, 0x8e, 0xab, 0xe7, 0xdf, 0x46, 0x0c, 0xf0, 0xf1, 0x28, 0xce,
-    0x79, 0x1f, 0x67, 0x4f, 0xc3, 0x0a, 0xc9, 0xf5, 0x5b, 0xfd, 0x13, 0x1f,
-    0xdc, 0x0b, 0x56, 0x5c, 0xd0, 0x2c, 0xad, 0x8f, 0x30, 0x66, 0xb7, 0xf0,
-    0xc4, 0x19, 0x67, 0x96, 0x5f, 0xb3, 0x81, 0xd6, 0xcb, 0x2f, 0xff, 0xff,
-    0xfb, 0xef, 0xf4, 0x0e, 0x6e, 0xef, 0x39, 0xe5, 0x81, 0x27, 0xae, 0x49,
-    0x95, 0xea, 0x78, 0xce, 0xff, 0x76, 0x74, 0xef, 0x4f, 0xac, 0xac, 0x4c,
-    0x74, 0x8b, 0x84, 0x29, 0xbc, 0xd7, 0xea, 0xcb, 0xa5, 0xd5, 0x97, 0xf0,
-    0x06, 0x7b, 0xe0, 0x6b, 0x2d, 0xe5, 0x96, 0xfd, 0x65, 0xdc, 0x92, 0xca,
-    0x84, 0x4e, 0x0c, 0x71, 0xc5, 0xff, 0x2f, 0xe0, 0x88, 0x44, 0xaf, 0xed,
-    0xa6, 0x94, 0xf7, 0xad, 0x96, 0x5e, 0x7c, 0xd2, 0xcb, 0xc5, 0x9d, 0x59,
-    0x7b, 0xd8, 0xd5, 0x95, 0xe3, 0xd2, 0x21, 0xbe, 0x8d, 0xdd, 0xd2, 0x59,
-    0x7a, 0x3e, 0xe2, 0xcb, 0xe3, 0x29, 0x62, 0xcb, 0xdb, 0x39, 0x2c, 0xa1,
-    0x9e, 0xcb, 0x47, 0x7a, 0x41, 0x7d, 0x03, 0x79, 0x2c, 0xbf, 0x67, 0x7c,
-    0x7d, 0x59, 0x7e, 0x7f, 0xb3, 0xee, 0xac, 0xaf, 0x1e, 0x87, 0x49, 0xef,
-    0x04, 0xb6, 0x59, 0x5b, 0x22, 0xc1, 0x87, 0x1f, 0x11, 0x5b, 0x65, 0x96,
-    0xd2, 0xca, 0xd8, 0xd1, 0x98, 0x95, 0xfd, 0xb4, 0xed, 0x9d, 0xfc, 0xb2,
-    0xef, 0xba, 0xb2, 0xff, 0xff, 0x78, 0xf5, 0x8d, 0x7f, 0x99, 0x8c, 0x2f,
-    0xa9, 0x3f, 0xeb, 0x2f, 0xd8, 0x43, 0xf4, 0x2c, 0xa6, 0x42, 0xb4, 0xe8,
-    0x84, 0x4c, 0x8b, 0xb1, 0xbc, 0xe1, 0xbf, 0xe5, 0x57, 0x21, 0x23, 0x10,
-    0x8c, 0x0a, 0xc9, 0x7f, 0xd8, 0x31, 0x9f, 0xd9, 0xf7, 0x56, 0x5f, 0x00,
-    0xa2, 0x4b, 0x2b, 0xc7, 0xb6, 0xe7, 0x57, 0xfa, 0x33, 0xb1, 0xe7, 0x1a,
-    0xcb, 0xd1, 0xf4, 0x96, 0x56, 0xc7, 0xde, 0x32, 0x1d, 0xc3, 0x1b, 0xec,
-    0xc2, 0xea, 0xcb, 0xff, 0xdb, 0xcc, 0xbf, 0xf1, 0xbc, 0xba, 0x7b, 0x2c,
-    0xbe, 0x0b, 0xea, 0x4b, 0x2a, 0x0f, 0xb8, 0x69, 0x97, 0xff, 0x0e, 0x07,
-    0xa8, 0xe9, 0x80, 0xc6, 0xb2, 0xfa, 0x68, 0xdc, 0x92, 0xcb, 0xfb, 0xa0,
-    0x18, 0xdb, 0xa5, 0x97, 0xee, 0x99, 0x47, 0xeb, 0x2f, 0xfa, 0x6e, 0x6f,
-    0x72, 0xd8, 0x23, 0x59, 0x7f, 0x38, 0xbf, 0xfe, 0xd9, 0xf5, 0x97, 0xd9,
-    0xdc, 0x6a, 0xcb, 0x89, 0x85, 0x94, 0xe6, 0xe0, 0x24, 0x35, 0x24, 0x46,
-    0x71, 0xb2, 0xff, 0xed, 0x41, 0x07, 0xb2, 0x09, 0x77, 0x8b, 0x2f, 0xfc,
-    0x51, 0xd9, 0x66, 0xeb, 0x97, 0xeb, 0x2f, 0x7e, 0x7f, 0xac, 0xbe, 0xda,
-    0x6f, 0x1a, 0xcb, 0x7b, 0x0f, 0x08, 0x23, 0xd7, 0xfe, 0x0e, 0xef, 0x8e,
-    0x73, 0x1a, 0xce, 0x2c, 0xbf, 0xf1, 0x3b, 0x1e, 0x79, 0x70, 0xc6, 0xb2,
-    0xfd, 0xe3, 0x27, 0xd9, 0x65, 0x80, 0xb2, 0xf8, 0x32, 0xce, 0x00, 0xdc,
-    0x11, 0x3d, 0x35, 0x15, 0xa4, 0xed, 0x78, 0xb3, 0xab, 0x2e, 0x11, 0xab,
-    0x28, 0xcf, 0x54, 0x88, 0xba, 0x37, 0x77, 0xc3, 0x59, 0x50, 0xba, 0x0d,
-    0xb1, 0x9c, 0xa1, 0x1c, 0x32, 0x1c, 0x43, 0x60, 0x9b, 0xe2, 0xf3, 0x27,
-    0x9a, 0x19, 0x3a, 0x23, 0x6a, 0x27, 0xa1, 0x04, 0x44, 0xfd, 0x8d, 0x1c,
-    0x25, 0xb7, 0xf4, 0xe9, 0xa3, 0xa5, 0xbd, 0x65, 0xff, 0xd1, 0xbf, 0x51,
-    0xac, 0x3f, 0x40, 0xd6, 0x5d, 0x18, 0xb2, 0x88, 0xf6, 0x78, 0x89, 0x73,
-    0xb5, 0x65, 0xd3, 0x4f, 0xac, 0xa2, 0x36, 0x3b, 0xc5, 0xae, 0x0f, 0x56,
-    0x54, 0x93, 0x16, 0xc8, 0x45, 0x9a, 0x94, 0xf9, 0x15, 0x99, 0xb2, 0x21,
-    0x1c, 0xb4, 0xc9, 0x6e, 0x9e, 0x61, 0x09, 0x3d, 0x94, 0xb2, 0xb4, 0xc9,
-    0xe2, 0x38, 0xca, 0xa8, 0x0c, 0xa3, 0x24, 0x4e, 0x81, 0xed, 0x1f, 0x3c,
-    0xa5, 0x92, 0x8e, 0x7a, 0xbb, 0x29, 0xd6, 0x8c, 0x4a, 0x95, 0x04, 0xeb,
-    0x17, 0xd2, 0xff, 0x4e, 0x55, 0xb4, 0xd3, 0xb6, 0x9a, 0x9d, 0x16, 0x6c,
-    0xbb, 0xdf, 0x53, 0x92, 0x1e, 0x73, 0x13, 0xf9, 0xc3, 0xe6, 0x5c, 0x2d,
-    0x8a, 0x93, 0x9f, 0xca, 0xcb, 0xc3, 0xb4, 0xb6, 0x00, 0xc6, 0x3b, 0xbe,
-    0x34, 0x01, 0x61, 0x99, 0x3f, 0x2e, 0x90, 0x49, 0xe6, 0x7d, 0xc8, 0xfe,
-    0xa9, 0x9c, 0x24, 0x91, 0xcd, 0x4b, 0xd8, 0x8f, 0x38, 0xbf, 0xfc, 0xcd,
-    0xaf, 0x26, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x36, 0x2f, 0xda, 0x03, 0xb8,
-    0x15, 0x15, 0x6a, 0xef, 0xf7, 0xac, 0xbb, 0x93, 0xeb, 0x2c, 0xcf, 0x0f,
-    0xa3, 0xc6, 0x9c, 0x1a, 0xbb, 0x7e, 0x96, 0x5c, 0xf0, 0xb2, 0xff, 0x4a,
-    0x41, 0xe9, 0x44, 0x96, 0x5f, 0x67, 0x9f, 0xab, 0x2c, 0xc9, 0xc3, 0xd4,
-    0x23, 0x3b, 0xff, 0xff, 0x4a, 0x37, 0xc1, 0xe8, 0x06, 0xd7, 0x91, 0x96,
-    0x0f, 0x18, 0x59, 0x7f, 0xfb, 0x47, 0x2c, 0x96, 0x3c, 0x8a, 0x1a, 0xb2,
-    0xff, 0x6b, 0x01, 0x1f, 0x88, 0xd5, 0x97, 0xfb, 0xd1, 0xb6, 0xa3, 0x06,
-    0xb2, 0xff, 0xfd, 0x1b, 0x46, 0xa1, 0xb1, 0x1d, 0xf1, 0xfe, 0xd5, 0x95,
-    0x08, 0x88, 0xf1, 0x9d, 0xe8, 0x1c, 0xcb, 0x2a, 0x49, 0xd7, 0x1b, 0x5e,
-    0x91, 0xfd, 0x0b, 0xde, 0x91, 0x5f, 0x69, 0xbe, 0x1a, 0xcb, 0xff, 0xb5,
-    0x22, 0xce, 0xf2, 0x1b, 0xd0, 0x2c, 0xa8, 0x3e, 0x70, 0x91, 0xde, 0x1e,
-    0x12, 0xcb, 0xfb, 0x92, 0x30, 0x3e, 0x96, 0x5e, 0x77, 0x02, 0xa2, 0xb4,
-    0x5f, 0x98, 0xfb, 0x81, 0xf9, 0x65, 0x42, 0x20, 0x40, 0x5a, 0x65, 0x17,
-    0xf0, 0x4d, 0x8d, 0x40, 0xd6, 0x5f, 0xe8, 0xd7, 0xe2, 0x72, 0x31, 0x65,
-    0xff, 0xe3, 0xec, 0xa0, 0x1e, 0x3e, 0xf1, 0xfe, 0x59, 0x5a, 0x46, 0xd3,
-    0x4b, 0xbc, 0x5d, 0xbc, 0xd2, 0xfe, 0xfe, 0x76, 0x68, 0xd8, 0x59, 0x7f,
-    0xd8, 0x33, 0xe4, 0xc5, 0x03, 0x59, 0x43, 0x3e, 0x97, 0x31, 0xbf, 0xe8,
-    0x06, 0x37, 0x0b, 0xb3, 0xeb, 0x2f, 0xf7, 0xa3, 0x5f, 0xf7, 0x36, 0x59,
-    0x77, 0x8d, 0xa7, 0xdf, 0xe3, 0xab, 0xd2, 0xfa, 0x4b, 0x2f, 0x07, 0x9d,
-    0x59, 0x7f, 0xfe, 0x93, 0x91, 0xf6, 0x3c, 0x0c, 0x19, 0x47, 0x16, 0x5f,
-    0xff, 0x8f, 0x72, 0x08, 0x32, 0x3e, 0x72, 0x27, 0x34, 0x0b, 0x28, 0xd1,
-    0x56, 0xea, 0x57, 0x1f, 0xcb, 0x2f, 0xff, 0x81, 0x1a, 0xcf, 0xdd, 0xaf,
-    0x28, 0x30, 0x2c, 0xbf, 0xfe, 0x97, 0x30, 0xa1, 0xaf, 0x9d, 0xec, 0x35,
-    0x65, 0x42, 0x26, 0xdd, 0x3a, 0xb4, 0x8d, 0x3e, 0xc2, 0xca, 0x9a, 0x9f,
-    0x27, 0xa1, 0x91, 0xd8, 0x7a, 0x5f, 0xff, 0xfd, 0xbc, 0xfb, 0xcc, 0x60,
-    0x1e, 0x3e, 0xe4, 0xc5, 0x0d, 0xdb, 0x05, 0x59, 0x7f, 0xfd, 0xd7, 0xce,
-    0x0f, 0x25, 0xe8, 0xde, 0x38, 0x59, 0x7f, 0xff, 0xff, 0x1f, 0x47, 0x81,
-    0xe4, 0xef, 0x60, 0x3c, 0x1d, 0x8f, 0x0b, 0xe9, 0x73, 0x81, 0x85, 0x94,
-    0xe8, 0xdc, 0x25, 0x0a, 0x84, 0xdc, 0xde, 0x35, 0x2b, 0xfd, 0x1d, 0x7f,
-    0x4e, 0x1c, 0x2c, 0xbe, 0x97, 0x4f, 0x65, 0x97, 0xee, 0x71, 0xcb, 0x65,
-    0x97, 0xe1, 0x3a, 0x51, 0xfa, 0xcb, 0x79, 0x65, 0x7c, 0x88, 0x56, 0x91,
-    0xef, 0x28, 0x10, 0xa6, 0xff, 0xfb, 0xf7, 0xcf, 0x39, 0xee, 0x43, 0x49,
-    0xd8, 0x59, 0x7f, 0xe3, 0xe6, 0x0f, 0xee, 0x46, 0xb8, 0xb2, 0xff, 0x3c,
-    0xba, 0x7b, 0x78, 0xd6, 0x54, 0x26, 0x09, 0x88, 0x20, 0x51, 0x33, 0xfb,
-    0xf6, 0x78, 0xf1, 0xab, 0x2f, 0xc7, 0xfb, 0x4f, 0x4b, 0x2f, 0xff, 0xf9,
-    0xfb, 0x04, 0xfb, 0x46, 0xa0, 0xe5, 0x0d, 0x28, 0x61, 0x65, 0xfe, 0x3e,
-    0x18, 0x59, 0x63, 0x85, 0x94, 0x48, 0x99, 0xeb, 0x1d, 0xfd, 0xe8, 0x01,
-    0x3b, 0x56, 0x5f, 0xf9, 0xcc, 0x1e, 0x70, 0xed, 0xa3, 0x59, 0x46, 0x7d,
-    0x44, 0x59, 0x7f, 0xec, 0x7d, 0xa3, 0x08, 0x7e, 0x85, 0x95, 0xb2, 0x79,
-    0xe3, 0x26, 0x38, 0x60, 0xfa, 0x11, 0x84, 0x41, 0x7f, 0xa5, 0x1a, 0xda,
-    0x35, 0xb2, 0xcb, 0xe9, 0x6b, 0x1a, 0xb2, 0xf6, 0x6b, 0xf5, 0x97, 0xe9,
-    0xb0, 0x6d, 0xdd, 0x59, 0x7f, 0x14, 0x0b, 0xf4, 0xb8, 0xb2, 0xbe, 0x44,
-    0xd1, 0x91, 0x4c, 0x3b, 0xb8, 0x59, 0x79, 0x80, 0x81, 0x65, 0x42, 0x65,
-    0xd9, 0x0c, 0xf6, 0x10, 0x6f, 0xff, 0xff, 0xc6, 0x0c, 0xec, 0x17, 0x79,
-    0x3a, 0x0c, 0x78, 0xd9, 0xda, 0x83, 0x93, 0xf1, 0x65, 0xff, 0xf6, 0xbf,
-    0xe7, 0xfe, 0x79, 0x1f, 0x4a, 0x3f, 0x59, 0x58, 0x8d, 0x50, 0xc2, 0x0e,
-    0xfe, 0xce, 0xb9, 0x7e, 0x15, 0x97, 0xf7, 0xa7, 0x1e, 0xce, 0x4b, 0x2f,
-    0xe6, 0xf0, 0x64, 0xe2, 0xac, 0xbf, 0x7f, 0xc6, 0x51, 0x94, 0x65, 0x16,
-    0x54, 0x1f, 0x3b, 0x97, 0x5f, 0x3f, 0xee, 0x35, 0x95, 0x24, 0xc1, 0x70,
-    0xb4, 0xa1, 0x2d, 0xc2, 0x0b, 0xff, 0x66, 0xa6, 0x2c, 0x1f, 0xa3, 0x7a,
-    0xcb, 0x33, 0x64, 0x36, 0x3c, 0x8c, 0x91, 0x99, 0xed, 0xa6, 0x23, 0xd8,
-    0xda, 0x16, 0xc3, 0x21, 0xc8, 0xdd, 0x98, 0x85, 0x40, 0x21, 0x21, 0xf1,
-    0x69, 0xca, 0x02, 0xd4, 0x75, 0xcd, 0x28, 0xf4, 0x77, 0xaf, 0x28, 0x28,
-    0xa3, 0x82, 0xe4, 0x61, 0x5d, 0x8c, 0xb0, 0x44, 0x1b, 0xf6, 0x80, 0xee,
-    0x05, 0x45, 0x80, 0xbf, 0xcd, 0x3e, 0x06, 0x35, 0x32, 0xcb, 0xe0, 0x09,
-    0xe9, 0x96, 0x54, 0x1e, 0xcb, 0x9a, 0x5e, 0xfc, 0x4f, 0xd6, 0x5f, 0x87,
-    0x99, 0xff, 0x16, 0x56, 0x23, 0xd7, 0x90, 0x8d, 0xe9, 0x00, 0x84, 0x17,
-    0xf8, 0x70, 0xcf, 0xee, 0x86, 0x16, 0x53, 0x33, 0xf8, 0x0a, 0x15, 0xfb,
-    0x40, 0x77, 0x02, 0xa2, 0x75, 0x5f, 0xff, 0xef, 0x46, 0xc3, 0xc6, 0xb3,
-    0xe7, 0x33, 0xc7, 0xc0, 0xec, 0xb2, 0xfc, 0xcd, 0xaf, 0x26, 0x78, 0x89,
-    0x99, 0x8d, 0x2f, 0xff, 0xe2, 0x0c, 0x77, 0x98, 0x4c, 0xff, 0xfe, 0x3c,
-    0xfb, 0x2c, 0xbf, 0x89, 0x9c, 0xcf, 0x33, 0xac, 0xa8, 0x44, 0x76, 0x2f,
-    0x5e, 0x62, 0x1a, 0xb2, 0xfd, 0x9b, 0x6d, 0x00, 0x59, 0x7c, 0xe0, 0x11,
-    0xab, 0x2f, 0x4b, 0x8c, 0xd8, 0x3e, 0x92, 0x1d, 0xde, 0x53, 0x7e, 0xd0,
-    0x1d, 0xc0, 0xa8, 0xb6, 0x57, 0xff, 0x78, 0xfb, 0xe0, 0xfd, 0x8d, 0x7f,
-    0x96, 0x5f, 0xdd, 0x7f, 0x4e, 0x1c, 0x2c, 0xbf, 0xff, 0xa4, 0xcf, 0x90,
-    0x78, 0x33, 0xce, 0x67, 0x4a, 0x16, 0x54, 0x22, 0x21, 0xcb, 0xef, 0xd2,
-    0x83, 0xdf, 0x0b, 0x2f, 0xfa, 0x38, 0xcf, 0xc6, 0x07, 0xd2, 0xcb, 0xfe,
-    0x3c, 0x26, 0x23, 0x7b, 0xf9, 0x65, 0x42, 0x26, 0xff, 0x28, 0x9f, 0x3a,
-    0xbf, 0xe8, 0x94, 0x6b, 0x68, 0xd6, 0xcb, 0x2c, 0xcf, 0x15, 0x15, 0x80,
-    0xd1, 0xb0, 0xce, 0x78, 0x5e, 0x11, 0x9d, 0xff, 0x89, 0x9b, 0x42, 0x7d,
-    0x27, 0xdc, 0x59, 0x7f, 0x69, 0xf9, 0xe7, 0x92, 0xcb, 0xf9, 0xf5, 0x3e,
-    0xe4, 0xc2, 0xcb, 0xc1, 0xe3, 0x3c, 0x3d, 0xd2, 0x2d, 0xb9, 0xff, 0xc4,
-    0x69, 0xff, 0x09, 0xfb, 0xbe, 0x02, 0xcb, 0xe0, 0x3b, 0x81, 0x51, 0x73,
-    0x2c, 0xd5, 0x95, 0xa3, 0x7e, 0x29, 0x75, 0xfc, 0x59, 0xf7, 0xe7, 0x25,
-    0x96, 0x65, 0xac, 0xad, 0x1e, 0x1e, 0xf2, 0xeb, 0xa6, 0x6a, 0xca, 0x59,
-    0x66, 0x70, 0x98, 0x1e, 0x2b, 0x9b, 0x28, 0xa4, 0x93, 0xe3, 0x17, 0xed,
-    0x01, 0xdc, 0x0a, 0x8b, 0xbd, 0x7f, 0xa4, 0xcf, 0x9a, 0xd1, 0x8a, 0xb2,
-    0xcc, 0xf0, 0xfa, 0xdc, 0xd2, 0xff, 0x8a, 0x1f, 0x6f, 0xb9, 0x03, 0x59,
-    0x70, 0xff, 0x59, 0x78, 0xb3, 0x65, 0x96, 0x66, 0x33, 0xed, 0x60, 0xe4,
-    0x86, 0x2a, 0x21, 0x61, 0xbb, 0x98, 0x92, 0x75, 0x02, 0x37, 0xd0, 0xc2,
-    0x3a, 0xc8, 0x6b, 0x52, 0xb3, 0x5b, 0x0b, 0xdf, 0x43, 0x49, 0xe1, 0x15,
-    0xfc, 0xa7, 0x02, 0x8c, 0xbb, 0x91, 0x9b, 0xf6, 0x17, 0xe2, 0x42, 0x56,
-    0xff, 0xc2, 0xb9, 0x6d, 0xc3, 0x2f, 0xa4, 0xb2, 0xff, 0xec, 0xdb, 0x05,
-    0xf6, 0x73, 0x0c, 0x96, 0x5f, 0xf8, 0xc8, 0xb1, 0x80, 0x05, 0xc6, 0xb2,
-    0xfd, 0x9e, 0x1b, 0x92, 0xcb, 0x8d, 0x9f, 0x91, 0xcc, 0x48, 0x1c, 0x43,
-    0x10, 0xf6, 0xfd, 0xce, 0x35, 0xe4, 0xb2, 0xff, 0xff, 0xff, 0xde, 0x3f,
-    0x1c, 0x17, 0x49, 0xd8, 0xce, 0x87, 0xa7, 0xde, 0x78, 0xf5, 0x1b, 0x3e,
-    0x80, 0xb2, 0xee, 0x42, 0xcb, 0xff, 0xbe, 0x00, 0x5f, 0xee, 0xe6, 0x13,
-    0x0b, 0x2f, 0x13, 0xb3, 0x84, 0xc7, 0x00, 0x51, 0xc8, 0x4c, 0x74, 0x5a,
-    0xfe, 0x64, 0x4f, 0x31, 0xf6, 0xb6, 0x59, 0x78, 0x2e, 0xd5, 0x97, 0xec,
-    0xdc, 0xec, 0x30, 0xb2, 0xdb, 0x8b, 0x2b, 0x63, 0x7f, 0x85, 0x75, 0xa3,
-    0xfc, 0x25, 0xbb, 0xff, 0x71, 0xd8, 0xf1, 0xc1, 0x06, 0x16, 0x5f, 0xfb,
-    0xcf, 0xd7, 0xf7, 0xd2, 0xce, 0xac, 0xac, 0x3f, 0xc3, 0x3d, 0xb9, 0xff,
-    0x59, 0x7f, 0xff, 0xf8, 0x9c, 0x52, 0xce, 0xf7, 0x36, 0x82, 0x76, 0x38,
-    0xd8, 0xc2, 0x1a, 0xcb, 0xd8, 0x27, 0x16, 0x56, 0x22, 0xa7, 0x42, 0xfb,
-    0x8e, 0xb7, 0xf1, 0x47, 0xed, 0x79, 0x2c, 0xbf, 0xfe, 0xcd, 0xf0, 0x5d,
-    0xc2, 0x8f, 0xda, 0xf2, 0x59, 0x7e, 0x20, 0xf3, 0xc7, 0x87, 0xf9, 0xa2,
-    0xdb, 0xf0, 0xcf, 0x7e, 0xb1, 0x65, 0xbd, 0x07, 0xcd, 0x87, 0xb7, 0xf9,
-    0xe5, 0xac, 0x9f, 0x3f, 0xd6, 0x5e, 0x77, 0x02, 0xa2, 0x57, 0x5f, 0xe6,
-    0x1c, 0xbf, 0xee, 0x79, 0x65, 0x00, 0xf7, 0x0c, 0xa2, 0xfe, 0x7f, 0xb3,
-    0xd8, 0x05, 0x97, 0xfb, 0xe2, 0x76, 0x1f, 0xb2, 0x59, 0x7f, 0xf7, 0xb2,
-    0x40, 0xf1, 0x8e, 0x0b, 0xab, 0x28, 0xcf, 0xdf, 0xa6, 0x95, 0x24, 0xe7,
-    0x86, 0x4d, 0xa8, 0x49, 0x34, 0x84, 0xa1, 0x49, 0x7f, 0xa3, 0x4f, 0x27,
-    0xfa, 0x4b, 0x2f, 0xbb, 0xa3, 0xf9, 0x65, 0xfe, 0x28, 0x68, 0xf4, 0xe0,
-    0x59, 0x7f, 0xff, 0xfd, 0xa7, 0x21, 0x23, 0xfc, 0x97, 0xa3, 0x78, 0xe1,
-    0x9e, 0x10, 0x65, 0x9c, 0x59, 0x6d, 0x96, 0x5b, 0x65, 0x95, 0x06, 0x92,
-    0x42, 0x57, 0xc0, 0x79, 0x62, 0xcb, 0xff, 0x1f, 0x4c, 0xba, 0x1f, 0x32,
-    0x61, 0x65, 0x61, 0xf1, 0x39, 0x0d, 0xff, 0xfe, 0x7f, 0xb9, 0x9a, 0xef,
-    0x5f, 0x61, 0x1a, 0x3f, 0x1b, 0x0b, 0x2f, 0xb7, 0xbc, 0xa7, 0xa5, 0x97,
-    0xfd, 0x87, 0xbc, 0xa3, 0x35, 0x25, 0x97, 0xff, 0xee, 0xcb, 0x37, 0x5c,
-    0xbf, 0xfb, 0xba, 0x8c, 0x15, 0x60, 0xa6, 0xe2, 0xfd, 0xf7, 0x7d, 0x1f,
-    0xac, 0xac, 0x47, 0xb3, 0xb0, 0x85, 0xae, 0xff, 0xf4, 0xc5, 0x1d, 0xe7,
-    0x7e, 0x01, 0x96, 0xcb, 0x2f, 0xf9, 0xc5, 0x1f, 0xa3, 0x6c, 0x15, 0x65,
-    0x1a, 0x21, 0xc9, 0x32, 0xff, 0xfd, 0x87, 0xfe, 0x34, 0xfb, 0xc8, 0x6b,
-    0xfd, 0xd5, 0x97, 0xff, 0xf8, 0x0f, 0xa7, 0xf7, 0xd2, 0xce, 0xe7, 0x60,
-    0x2c, 0xbc, 0x59, 0x7f, 0xf3, 0xfd, 0x23, 0xef, 0xa3, 0x5d, 0x85, 0x97,
-    0xfd, 0x0d, 0xee, 0x4d, 0x23, 0xea, 0xca, 0x92, 0x66, 0xc6, 0xaa, 0xd6,
-    0x4e, 0xa2, 0x5f, 0xff, 0xef, 0x18, 0xc7, 0x82, 0xfd, 0xd0, 0xbf, 0x3c,
-    0x2b, 0x8d, 0x65, 0xf0, 0x5f, 0x52, 0x59, 0x7f, 0x14, 0x6d, 0xfb, 0xf5,
-    0x65, 0xfe, 0x71, 0x89, 0xb9, 0x05, 0x25, 0x96, 0x80, 0x1f, 0x23, 0x4b,
-    0xaf, 0xff, 0xf1, 0xf5, 0xda, 0xe5, 0xff, 0x85, 0x72, 0xd8, 0x07, 0xb2,
-    0xca, 0x1a, 0x61, 0xe7, 0x08, 0x67, 0x27, 0xbf, 0xe0, 0xfe, 0xd7, 0x97,
-    0x34, 0x35, 0x97, 0xff, 0xfb, 0x0c, 0xbb, 0x85, 0x38, 0x9c, 0x70, 0x5b,
-    0x46, 0x96, 0x5b, 0x3a, 0x89, 0x9d, 0xe7, 0x77, 0xff, 0xff, 0xbd, 0x8d,
-    0xfd, 0xf5, 0x9b, 0xf0, 0x79, 0xc0, 0xbf, 0xde, 0x15, 0xfa, 0xb2, 0xff,
-    0xd9, 0xf7, 0x7b, 0x0d, 0xf6, 0x6c, 0xb2, 0xff, 0xa6, 0x07, 0x8d, 0xb1,
-    0xa6, 0x16, 0x5f, 0xef, 0xf3, 0x59, 0x9d, 0xe2, 0xca, 0xc3, 0xee, 0xf8,
-    0xee, 0x86, 0xba, 0x93, 0x91, 0xab, 0x80, 0xf7, 0xd1, 0xb9, 0x94, 0x33,
-    0x7a, 0x54, 0x2b, 0xd8, 0x90, 0xae, 0xbf, 0xde, 0x79, 0x7f, 0xac, 0xf9,
-    0x65, 0xff, 0xf8, 0xc7, 0xe7, 0x3e, 0xc1, 0x00, 0xda, 0xd3, 0x59, 0x6c,
-    0xf2, 0x21, 0xc8, 0xd6, 0xff, 0xb3, 0xee, 0x0e, 0x1c, 0xb6, 0x59, 0x7f,
-    0xf0, 0x0f, 0x5e, 0xc9, 0xbc, 0x7a, 0xd9, 0x65, 0xff, 0x3c, 0xb9, 0xe8,
-    0xd0, 0x83, 0x59, 0x52, 0x47, 0x06, 0x13, 0xfc, 0x73, 0xd4, 0x6b, 0xff,
-    0xfd, 0xec, 0x01, 0x63, 0x70, 0xb3, 0xa1, 0xfd, 0xaf, 0x25, 0x97, 0xfe,
-    0x2c, 0xf6, 0x4d, 0x23, 0xd4, 0x96, 0x5f, 0xff, 0xff, 0x7f, 0x04, 0x07,
-    0xeb, 0xfd, 0xfe, 0x6f, 0x3e, 0xcb, 0xc7, 0xde, 0x18, 0xd6, 0x5f, 0xf8,
-    0xf7, 0x9f, 0x66, 0x94, 0x17, 0x56, 0x54, 0x93, 0x5d, 0x02, 0xff, 0xc7,
-    0xdd, 0x84, 0x05, 0xff, 0xe7, 0xc9, 0x7b, 0x0c, 0xb3, 0xf9, 0xfc, 0x59,
-    0x79, 0xe4, 0xce, 0x79, 0x6c, 0x98, 0x62, 0x16, 0xb2, 0x84, 0xe8, 0xe1,
-    0x93, 0x92, 0xac, 0xbe, 0x54, 0x33, 0x39, 0x88, 0xf4, 0x64, 0xd8, 0x52,
-    0x7a, 0x10, 0x5f, 0x90, 0x14, 0x6b, 0x7c, 0x9d, 0xfe, 0xec, 0x7e, 0x22,
-    0x47, 0x35, 0xb8, 0x89, 0x73, 0x2f, 0x16, 0x5f, 0xbb, 0x01, 0x65, 0xe2,
-    0xcb, 0xf6, 0x01, 0xe5, 0x8b, 0x2f, 0xf6, 0x0c, 0xcb, 0xb9, 0xe5, 0x97,
-    0xb3, 0xcc, 0xd9, 0x44, 0x4e, 0x60, 0xd7, 0x8a, 0xc8, 0x9a, 0xf1, 0xc3,
-    0xac, 0xbd, 0xd8, 0x1a, 0x4b, 0xff, 0xde, 0x73, 0xec, 0x48, 0xf5, 0xb0,
-    0x7f, 0x49, 0x7b, 0x4c, 0xb6, 0x70, 0x7c, 0xfc, 0x1c, 0xbc, 0xe0, 0x67,
-    0x24, 0x5d, 0x0e, 0x10, 0x36, 0x66, 0x36, 0xdc, 0xfc, 0x11, 0xb3, 0x36,
-    0xb2, 0xb5, 0xec, 0x7b, 0x9b, 0xe3, 0x0d, 0xbf, 0xfc, 0xcd, 0xaf, 0x26,
-    0x79, 0xa0, 0x3b, 0x81, 0x51, 0x30, 0xaf, 0xa0, 0xc4, 0xf2, 0xcb, 0xfc,
-    0x08, 0xfb, 0xa5, 0x12, 0x59, 0x78, 0xc4, 0xf2, 0xcb, 0xff, 0xfb, 0x37,
-    0xb8, 0xfd, 0x0c, 0xfb, 0xec, 0x18, 0x7b, 0xc5, 0x97, 0x64, 0x96, 0x5f,
-    0xfe, 0xd3, 0xfe, 0xcd, 0x8e, 0xc8, 0x58, 0xe4, 0x96, 0x5d, 0x8c, 0xc6,
-    0x99, 0xbe, 0x11, 0x7e, 0x66, 0x43, 0xa1, 0x5f, 0x10, 0x5a, 0xe6, 0xef,
-    0x59, 0x7e, 0x3f, 0x7b, 0x36, 0x59, 0x7a, 0x7b, 0xf0, 0xd6, 0x5f, 0xfc,
-    0xc9, 0xcf, 0xa4, 0x17, 0xe9, 0x44, 0x96, 0x5f, 0x32, 0xbc, 0x93, 0x56,
-    0x5f, 0xa7, 0x99, 0xe6, 0x7a, 0x9f, 0x64, 0x2c, 0xbf, 0x63, 0x67, 0x7d,
-    0xba, 0xb2, 0xfe, 0x86, 0xe7, 0xf1, 0xbd, 0x65, 0x0c, 0xf7, 0x7c, 0x5d,
-    0x7f, 0xb5, 0x80, 0x8f, 0xc4, 0x6a, 0xcb, 0xf7, 0x5f, 0x67, 0xe2, 0xcb,
-    0xe8, 0x69, 0xe9, 0x65, 0xa2, 0x63, 0xc9, 0xd1, 0x45, 0xf4, 0x11, 0xcc,
-    0xb2, 0xff, 0xfd, 0x9b, 0x4e, 0xcc, 0x2e, 0xf9, 0xcf, 0x87, 0xbd, 0x65,
-    0xfb, 0xd0, 0x33, 0x61, 0x65, 0x1a, 0x6d, 0x1a, 0x22, 0x6b, 0xf1, 0x14,
-    0x74, 0x87, 0x71, 0x5e, 0xe6, 0x47, 0x56, 0x5f, 0x4c, 0x62, 0xcc, 0xb2,
-    0xe7, 0xe2, 0xca, 0x69, 0xbb, 0xde, 0x4b, 0x7f, 0xee, 0x0f, 0x44, 0xe2,
-    0xe7, 0xdd, 0x59, 0x7f, 0x85, 0x2c, 0xfb, 0xb9, 0xe5, 0x95, 0x87, 0xe8,
-    0x68, 0x17, 0xfa, 0x1f, 0x6e, 0xb0, 0xfa, 0x59, 0x7e, 0x7d, 0x49, 0xda,
-    0xb2, 0x86, 0x9b, 0x46, 0x2b, 0x7a, 0x12, 0xe4, 0x40, 0x13, 0x4b, 0xfd,
-    0xdf, 0x39, 0xf0, 0xf7, 0xac, 0xb3, 0x21, 0x65, 0x11, 0xe4, 0xcf, 0x9a,
-    0x5f, 0xee, 0x46, 0x10, 0xfd, 0x0b, 0x2f, 0xe8, 0xc2, 0x1f, 0xa1, 0x65,
-    0xe0, 0xea, 0x69, 0xc7, 0xb9, 0xc3, 0x1b, 0xff, 0xda, 0x30, 0xe3, 0x19,
-    0xd0, 0xc7, 0xc3, 0x59, 0x7f, 0xfe, 0x3d, 0x79, 0xe7, 0x0f, 0x25, 0xe8,
-    0xde, 0x38, 0x59, 0x7f, 0xc2, 0x89, 0xe8, 0x07, 0x8e, 0x65, 0x97, 0xc1,
-    0x6e, 0x0d, 0x65, 0xb3, 0xe3, 0xde, 0xdc, 0x3c, 0xbf, 0x6a, 0x25, 0xcc,
-    0x59, 0x7c, 0x7d, 0xcd, 0xeb, 0x2f, 0xf6, 0x0b, 0xd2, 0x7f, 0xf8, 0xb2,
-    0xa0, 0xff, 0xbc, 0x4f, 0xd2, 0x3a, 0xc5, 0x51, 0xe0, 0x84, 0x06, 0x8d,
-    0xfc, 0x96, 0x50, 0xb6, 0xec, 0x2a, 0x6f, 0xff, 0xa0, 0xbb, 0xa8, 0x39,
-    0x16, 0x35, 0xe4, 0xb2, 0xff, 0xf4, 0x03, 0x81, 0xe9, 0xf8, 0xd8, 0xf1,
-    0xac, 0xbf, 0x9b, 0x18, 0x5d, 0x9f, 0x59, 0x6e, 0x2c, 0xbf, 0x46, 0x17,
-    0x67, 0xd6, 0x5e, 0xe3, 0xfd, 0x38, 0xfa, 0x66, 0x2f, 0x68, 0x8d, 0x0d,
-    0x34, 0x36, 0xa6, 0x76, 0x16, 0x77, 0xfd, 0xbb, 0x83, 0xf4, 0x6e, 0x94,
-    0x2c, 0xa3, 0x3f, 0x37, 0x36, 0xbf, 0xed, 0x6c, 0x0f, 0x1f, 0x83, 0xd5,
-    0x95, 0xe3, 0xdb, 0x72, 0x0b, 0xfc, 0x6c, 0x6b, 0x36, 0x8d, 0x96, 0x5f,
-    0xa1, 0xbb, 0xff, 0x92, 0xca, 0xe1, 0xf0, 0x74, 0xd6, 0xee, 0x9a, 0xcb,
-    0x83, 0x8b, 0x2a, 0x47, 0x9c, 0xc1, 0x17, 0xe2, 0xd7, 0xe0, 0x1f, 0x3c,
-    0x6b, 0x2f, 0xec, 0x32, 0xe8, 0x7c, 0xb2, 0xdd, 0xf8, 0xf4, 0xfc, 0x4f,
-    0x7f, 0x6b, 0x0f, 0xd0, 0x35, 0x97, 0xb4, 0x1e, 0x2c, 0xbf, 0xfe, 0xf4,
-    0x16, 0x77, 0xd9, 0xdf, 0x40, 0x59, 0x6b, 0x2f, 0xe3, 0xd4, 0xe7, 0x2f,
-    0xd6, 0x5e, 0xf6, 0x7c, 0xb2, 0xff, 0xff, 0x0b, 0xb9, 0xdc, 0xf4, 0xe2,
-    0xcd, 0x8f, 0x0b, 0xe9, 0x71, 0x65, 0xf8, 0x5e, 0xe7, 0x80, 0xb2, 0xb1,
-    0x12, 0x0e, 0xcf, 0x43, 0x4e, 0x63, 0x0b, 0x0c, 0x77, 0xca, 0x4e, 0x5e,
-    0x50, 0xad, 0xbf, 0xfd, 0xd2, 0x7f, 0xfd, 0x86, 0x30, 0xf7, 0x8b, 0x2f,
-    0xb7, 0xe0, 0xe1, 0x65, 0xff, 0x46, 0xc2, 0x4b, 0xc1, 0x7d, 0x96, 0x54,
-    0x22, 0xa7, 0x12, 0xb4, 0x47, 0x7f, 0xef, 0xa5, 0x3b, 0xce, 0x08, 0x21,
-    0xac, 0xbe, 0x0e, 0xbf, 0x6a, 0xca, 0xc3, 0xe5, 0xe2, 0x0d, 0xf1, 0x61,
-    0xb0, 0xb2, 0xf8, 0xe3, 0xee, 0x2c, 0xbf, 0x09, 0xd2, 0x8f, 0xd6, 0x53,
-    0x4f, 0xb3, 0xa4, 0x3b, 0xc8, 0xaf, 0xbb, 0xdc, 0x15, 0x65, 0xff, 0xe8,
-    0xef, 0xf1, 0x2c, 0xfb, 0xbb, 0x04, 0x55, 0x97, 0xe8, 0x6e, 0x9e, 0x65,
-    0x97, 0xb8, 0xff, 0xac, 0xa8, 0x47, 0x3e, 0x18, 0x99, 0x1f, 0x93, 0xba,
-    0x51, 0x4b, 0x2f, 0xa1, 0xa7, 0x25, 0x97, 0x7a, 0x24, 0x6b, 0x34, 0x17,
-    0x73, 0xc9, 0x65, 0xfa, 0x00, 0x4e, 0xd5, 0x97, 0xfe, 0x89, 0x4e, 0xcf,
-    0x1e, 0xbc, 0xeb, 0x2c, 0x7e, 0x3e, 0x5e, 0x13, 0x50, 0xd1, 0x9d, 0xba,
-    0x59, 0xe7, 0xbb, 0xf4, 0xdc, 0x18, 0x76, 0x59, 0x7f, 0x3f, 0xfa, 0xd1,
-    0xe9, 0x65, 0xee, 0xce, 0xc5, 0x95, 0x07, 0xef, 0xf9, 0x58, 0x85, 0xd7,
-    0xde, 0x0f, 0xdd, 0x59, 0x7f, 0xf7, 0xb2, 0x34, 0x58, 0xd6, 0x86, 0x65,
-    0x97, 0xf7, 0x44, 0xff, 0xf8, 0xf9, 0x65, 0xff, 0x1f, 0x4f, 0x1a, 0x59,
-    0xb2, 0xca, 0x33, 0xe9, 0xf1, 0x95, 0xfd, 0xc3, 0x61, 0xaf, 0xd5, 0x97,
-    0xfe, 0xdf, 0x0c, 0x48, 0xca, 0x35, 0x0b, 0x2f, 0xff, 0xfd, 0xac, 0xdf,
-    0x05, 0xd9, 0xc2, 0x14, 0x79, 0xcf, 0xb1, 0xde, 0x2c, 0xb8, 0x13, 0xda,
-    0xcb, 0xdb, 0x06, 0x4b, 0x2f, 0x16, 0x72, 0x71, 0xba, 0xc1, 0xcb, 0xe7,
-    0xfe, 0x43, 0x59, 0x43, 0x54, 0x70, 0x08, 0x56, 0xfc, 0x42, 0x65, 0xda,
-    0x3f, 0xdf, 0x0a, 0x81, 0x4c, 0xaf, 0xa7, 0x6f, 0xdc, 0xd9, 0x65, 0x0d,
-    0x57, 0xd6, 0x4a, 0x5c, 0x61, 0xce, 0xdb, 0xab, 0x2d, 0xba, 0xb2, 0xf6,
-    0x0f, 0xab, 0x2c, 0xd3, 0x36, 0x1a, 0x14, 0xbb, 0xb8, 0xb2, 0xff, 0x41,
-    0x47, 0xee, 0xfb, 0x8b, 0x2f, 0x69, 0xe4, 0xb2, 0xff, 0x0f, 0xd8, 0x0f,
-    0x46, 0x96, 0x50, 0xd1, 0x07, 0xa3, 0x42, 0x1c, 0xbf, 0x73, 0x3b, 0xa8,
-    0x59, 0x7f, 0xf9, 0x96, 0x50, 0xd7, 0x3f, 0x3f, 0x7d, 0x0b, 0x2a, 0x13,
-    0x3a, 0x38, 0x4c, 0xf0, 0xbc, 0x24, 0xf7, 0x38, 0x16, 0x5f, 0xc7, 0x33,
-    0x83, 0x92, 0x59, 0x40, 0x3c, 0x4f, 0x0b, 0x5f, 0xff, 0xef, 0x19, 0x0f,
-    0x58, 0x0f, 0x47, 0xb3, 0x5a, 0x86, 0x16, 0x5f, 0x83, 0xb8, 0x78, 0xd5,
-    0x97, 0xee, 0xbb, 0x4f, 0xab, 0x29, 0x83, 0xd1, 0x22, 0xab, 0xf7, 0xa3,
-    0x24, 0xeb, 0x2f, 0xfc, 0x7d, 0x0e, 0x9f, 0x93, 0x9b, 0xd5, 0x95, 0x08,
-    0x89, 0x19, 0x13, 0x93, 0x5f, 0xe3, 0xc6, 0x96, 0x6c, 0xeb, 0x2f, 0xf7,
-    0x0f, 0x78, 0xe3, 0xfd, 0x96, 0x56, 0x1f, 0x43, 0x98, 0xdf, 0xa3, 0xbc,
-    0xfc, 0x2b, 0x2f, 0xef, 0x1f, 0x4a, 0x1a, 0xb2, 0xfa, 0x37, 0x94, 0x2c,
-    0xa9, 0x8f, 0x39, 0xa5, 0x94, 0xc8, 0x5c, 0xd5, 0x84, 0x4c, 0x8d, 0x80,
-    0x10, 0x85, 0x98, 0x8b, 0xd1, 0x9d, 0x14, 0x25, 0xba, 0x40, 0x17, 0x7b,
-    0xff, 0xe7, 0x68, 0xfd, 0x1e, 0x86, 0x87, 0xe9, 0x71, 0x65, 0xff, 0xec,
-    0xef, 0x8f, 0x3e, 0xee, 0x6f, 0x8e, 0x2c, 0xb7, 0xbc, 0x89, 0xc2, 0x51,
-    0xbe, 0x7e, 0x77, 0x65, 0x97, 0xff, 0x39, 0x7a, 0x0c, 0x67, 0xcc, 0x92,
-    0xcb, 0xd1, 0xf8, 0x8b, 0x2f, 0xec, 0xdf, 0xe3, 0xfe, 0x65, 0x95, 0x88,
-    0xdb, 0x60, 0xa1, 0xc8, 0xc9, 0x07, 0x83, 0xd7, 0x14, 0x2c, 0xbe, 0xf4,
-    0x72, 0x16, 0x5e, 0x10, 0x78, 0xb2, 0xf3, 0x2f, 0x93, 0xda, 0xca, 0xd8,
-    0xfe, 0x46, 0x2a, 0xe4, 0x3c, 0x1d, 0xbd, 0xc3, 0xe2, 0xcb, 0xe9, 0xcd,
-    0x9c, 0x05, 0x97, 0xb0, 0x03, 0x59, 0x7d, 0xdc, 0x2f, 0xd6, 0x5f, 0xce,
-    0x2c, 0x77, 0x36, 0x59, 0x58, 0x7d, 0x86, 0x38, 0x44, 0x57, 0xdb, 0x08,
-    0x1d, 0x96, 0x5f, 0x4d, 0x28, 0xd9, 0x65, 0x41, 0xe5, 0x61, 0x35, 0xfc,
-    0x7d, 0xfc, 0x42, 0x92, 0xcb, 0xe1, 0x66, 0xe4, 0x2c, 0xbe, 0x38, 0x6e,
-    0x2c, 0xbf, 0x43, 0x19, 0xde, 0x2c, 0xbf, 0xf3, 0xf7, 0x83, 0xd3, 0xf7,
-    0xc1, 0x59, 0x7f, 0xfc, 0x64, 0x19, 0x67, 0x27, 0x74, 0xe7, 0xf3, 0x65,
-    0x95, 0xb2, 0x69, 0xcc, 0x10, 0x7c, 0x5f, 0xa2, 0x4f, 0x10, 0x11, 0x47,
-    0x4f, 0xec, 0xcd, 0x90, 0xe8, 0x17, 0x27, 0xa1, 0x96, 0x49, 0x44, 0xf6,
-    0x44, 0xca, 0xd2, 0x19, 0x54, 0xa2, 0x25, 0x02, 0x0e, 0x3c, 0x1c, 0x96,
-    0x4c, 0x09, 0x4e, 0xff, 0x43, 0x3c, 0xe1, 0x09, 0x34, 0x78, 0x3a, 0x8c,
-    0x09, 0xb0, 0x93, 0xf4, 0x6e, 0x8f, 0x1a, 0x0f, 0xf0, 0xaa, 0x29, 0x65,
-    0x5c, 0x9d, 0x0e, 0xec, 0xa1, 0x00, 0xc3, 0x07, 0x79, 0xe0, 0xa3, 0x93,
-    0xf0, 0x93, 0x12, 0x3c, 0x4b, 0xfd, 0x31, 0xf7, 0x35, 0xd8, 0x59, 0x7f,
-    0xfd, 0xa3, 0xfa, 0x5c, 0x3e, 0xfa, 0x35, 0xd8, 0x59, 0x7f, 0xa3, 0x4f,
-    0x33, 0xf2, 0x4b, 0x2f, 0x3b, 0x81, 0x51, 0x57, 0x2f, 0xe7, 0x13, 0xde,
-    0x76, 0xac, 0xa0, 0x1e, 0xb7, 0x8a, 0x2f, 0xe3, 0xd7, 0x9c, 0x46, 0xac,
-    0xbe, 0x3e, 0xca, 0x16, 0x50, 0xd1, 0xf5, 0xa8, 0x44, 0xf8, 0x8b, 0x79,
-    0x75, 0xf1, 0x6e, 0x71, 0xd6, 0x5b, 0x75, 0x65, 0xff, 0xe8, 0xdb, 0xa6,
-    0x3c, 0x29, 0x1f, 0x82, 0xb2, 0x9a, 0x7b, 0xbe, 0x14, 0xba, 0x1a, 0xb2,
-    0xee, 0x0d, 0x65, 0x68, 0xd6, 0xb8, 0xb5, 0xfe, 0x8d, 0x76, 0x0a, 0x3f,
-    0x59, 0x7f, 0x99, 0xe6, 0x80, 0xee, 0x05, 0x44, 0x78, 0xbf, 0x78, 0xf5,
-    0xe7, 0x59, 0x78, 0xba, 0xeb, 0x2e, 0xc1, 0xe1, 0xe1, 0x70, 0x9e, 0xa4,
-    0x8a, 0xf6, 0xc2, 0x0e, 0xff, 0x4a, 0x35, 0xb4, 0x6b, 0x65, 0x97, 0xfa,
-    0x7d, 0xfd, 0x05, 0x1f, 0xac, 0xbf, 0xfb, 0x68, 0xd0, 0x33, 0x9c, 0xc1,
-    0xe2, 0xca, 0x84, 0x57, 0x61, 0xab, 0x9a, 0xdf, 0xf7, 0x4c, 0x2c, 0xbc,
-    0x96, 0xd3, 0x2c, 0xbf, 0x8b, 0x3b, 0xcc, 0x15, 0x65, 0x41, 0xf6, 0x39,
-    0xfd, 0xfe, 0x01, 0xf3, 0xc7, 0xd3, 0x59, 0x7e, 0xcd, 0x9c, 0xbe, 0x59,
-    0x5f, 0x1e, 0xd1, 0x19, 0x5f, 0xbb, 0xdc, 0x2f, 0xd6, 0x5f, 0xed, 0xc7,
-    0x1c, 0x60, 0xcd, 0x65, 0x99, 0xc2, 0xef, 0xc8, 0xcc, 0xf2, 0x34, 0xa3,
-    0x44, 0x9a, 0x10, 0x3a, 0x4f, 0xf1, 0x03, 0xc3, 0x84, 0xa1, 0xad, 0xc8,
-    0x4c, 0xf5, 0xe8, 0x42, 0x2d, 0xc2, 0x8b, 0xf6, 0x80, 0xee, 0x05, 0x45,
-    0x82, 0xbc, 0xc4, 0x6c, 0xb2, 0xff, 0xfe, 0x20, 0xbe, 0xcd, 0xc9, 0xf0,
-    0xeb, 0x35, 0x21, 0x24, 0xb2, 0xfd, 0x85, 0x9d, 0xe2, 0xcb, 0xfd, 0xa7,
-    0x68, 0x9a, 0x7f, 0x96, 0x59, 0x9e, 0x26, 0x1a, 0xc1, 0xa0, 0x07, 0x9d,
-    0x80, 0x42, 0x6b, 0xfc, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x2c, 0xa5, 0xff,
-    0xb3, 0xb2, 0xcf, 0xe7, 0xf3, 0xc1, 0x59, 0x7e, 0xd0, 0x1d, 0xc0, 0xa8,
-    0xb4, 0xd7, 0xf8, 0x7e, 0x79, 0xbc, 0x6d, 0x59, 0x4b, 0x1c, 0xda, 0x5f,
-    0xe8, 0x6e, 0x0c, 0xa3, 0xe5, 0x97, 0xe0, 0xe6, 0x9f, 0x8b, 0x2c, 0xcc,
-    0x69, 0x8e, 0xe2, 0x13, 0x5a, 0x3c, 0x35, 0xc3, 0x2b, 0xf4, 0xf4, 0xc8,
-    0x9e, 0x33, 0xc6, 0x78, 0xac, 0xbe, 0x9e, 0x2c, 0x86, 0x44, 0xf2, 0xb2,
-    0xa7, 0xa3, 0xfa, 0x65, 0x68, 0x97, 0xfd, 0x3d, 0xf8, 0xc5, 0x1b, 0xb8,
-    0x16, 0x5f, 0x99, 0x5b, 0x27, 0x99, 0x0b, 0x2f, 0xf0, 0x8d, 0xce, 0xf0,
-    0xf8, 0xb2, 0xc6, 0xb2, 0xa7, 0xb3, 0xc4, 0x9f, 0x34, 0xbf, 0xd1, 0xb6,
-    0x9c, 0x7b, 0x3a, 0xcb, 0xff, 0xf7, 0x9c, 0xbb, 0x2c, 0xd6, 0x41, 0x16,
-    0x75, 0x65, 0x49, 0x10, 0xa6, 0x69, 0x7e, 0xde, 0xe3, 0xc6, 0xac, 0xbf,
-    0x4e, 0x7f, 0xe7, 0xf1, 0x65, 0xd9, 0xbd, 0x65, 0xb9, 0x07, 0x8a, 0x45,
-    0xb7, 0xcd, 0x8f, 0xb8, 0xb2, 0xff, 0x1b, 0x4f, 0x72, 0x08, 0xd6, 0x5f,
-    0xa0, 0x81, 0xe8, 0x59, 0x7f, 0xf6, 0x77, 0xc6, 0xdc, 0xef, 0x04, 0xe2,
-    0xcb, 0xff, 0x63, 0xff, 0x12, 0xd4, 0x61, 0x2c, 0xa0, 0x22, 0x04, 0xd1,
-    0x6f, 0x8f, 0x7f, 0xb7, 0xac, 0xbe, 0xe4, 0x14, 0xcb, 0x2f, 0xa3, 0x72,
-    0x6c, 0x59, 0x4e, 0x78, 0xe4, 0x45, 0x7f, 0xb7, 0x0f, 0xf9, 0xcf, 0xe0,
-    0xac, 0xa9, 0x2a, 0x9b, 0xc2, 0x23, 0x6e, 0x98, 0x9b, 0xc4, 0x7f, 0x99,
-    0x94, 0x29, 0xf8, 0x45, 0xd6, 0xdd, 0xc2, 0x0b, 0xfc, 0xd1, 0x1b, 0xfb,
-    0x4f, 0xf5, 0x97, 0xe9, 0xda, 0xd0, 0x7c, 0xb2, 0xfc, 0x6c, 0x41, 0x01,
-    0x65, 0x70, 0xf4, 0xba, 0x57, 0x50, 0x8a, 0xbc, 0x84, 0x4d, 0xe3, 0xcd,
-    0x96, 0x5f, 0xfe, 0x07, 0x8f, 0xc7, 0xa8, 0x98, 0x5c, 0xf2, 0xca, 0xf1,
-    0xf3, 0x90, 0xe5, 0xef, 0xcb, 0x16, 0x5c, 0x58, 0xb2, 0xa7, 0x1b, 0x1f,
-    0xc7, 0x2f, 0xfd, 0xc3, 0x9d, 0xe7, 0xd4, 0x6f, 0x85, 0x97, 0xfc, 0xd7,
-    0x94, 0xf8, 0x7c, 0x7a, 0x59, 0x5b, 0x22, 0x87, 0x44, 0x8d, 0x41, 0xbf,
-    0x3f, 0x3b, 0x03, 0x59, 0x50, 0x7b, 0x01, 0x31, 0xbf, 0xcf, 0xa9, 0x3f,
-    0x5c, 0x0b, 0x2f, 0xff, 0x66, 0x16, 0x7e, 0x59, 0xdf, 0x64, 0x96, 0x54,
-    0x27, 0xcb, 0xe8, 0xd2, 0xc2, 0x43, 0xb8, 0x65, 0x7e, 0x89, 0x71, 0xb2,
-    0x59, 0x7d, 0x02, 0x47, 0x96, 0x5c, 0x7b, 0x2c, 0xbc, 0xee, 0x05, 0x45,
-    0xb8, 0xad, 0x8d, 0xf8, 0x05, 0xef, 0xfc, 0x7a, 0xf3, 0xe6, 0xb6, 0x3d,
-    0x96, 0x5f, 0x4d, 0x03, 0xc5, 0x97, 0xfe, 0xcd, 0x61, 0x4e, 0xf6, 0x7c,
-    0x2a, 0xcb, 0xf1, 0x7e, 0xff, 0x71, 0x65, 0x41, 0xf5, 0x3a, 0x0d, 0x30,
-    0x9c, 0xb7, 0xc5, 0x1a, 0x61, 0xf1, 0x13, 0x9f, 0xf2, 0x11, 0x97, 0xfe,
-    0x71, 0x93, 0xef, 0xf4, 0x4d, 0xc5, 0x97, 0xdb, 0xe0, 0x04, 0xb2, 0xfe,
-    0x2f, 0xe6, 0x28, 0x6a, 0xca, 0x61, 0x12, 0x2d, 0x40, 0x72, 0x3b, 0xcd,
-    0x23, 0x59, 0x62, 0x59, 0x7f, 0xde, 0x0b, 0xf3, 0x30, 0x98, 0x59, 0x7e,
-    0xe3, 0xfc, 0xe3, 0x59, 0x63, 0x19, 0xf0, 0x74, 0xe2, 0xa1, 0x16, 0x58,
-    0x37, 0xe7, 0x0b, 0xfe, 0x87, 0x2f, 0x66, 0x10, 0x16, 0x5f, 0xee, 0xf4,
-    0xf6, 0x6c, 0x12, 0xca, 0x91, 0xf4, 0x61, 0xad, 0xfe, 0x20, 0xb6, 0x39,
-    0xd3, 0x59, 0x7e, 0x8d, 0x6b, 0x37, 0x16, 0x5e, 0xd1, 0xfc, 0xb2, 0xa0,
-    0xfe, 0x48, 0xcb, 0xa5, 0x57, 0xf8, 0x23, 0x2c, 0xde, 0xf2, 0x59, 0x7f,
-    0xfa, 0x36, 0xe9, 0x8f, 0x0a, 0x47, 0xe0, 0xac, 0xbf, 0xe9, 0x1e, 0xfc,
-    0xf3, 0x96, 0xcb, 0x2f, 0x46, 0x69, 0x65, 0xfe, 0xf4, 0x48, 0xe7, 0xf1,
-    0xab, 0x28, 0x67, 0xa1, 0xc1, 0xbb, 0xf4, 0xef, 0xb8, 0x6c, 0x2c, 0xad,
-    0x8f, 0x3b, 0xe2, 0x2a, 0xf9, 0x1f, 0x8f, 0x0d, 0x8b, 0xff, 0x67, 0x8f,
-    0x43, 0xf4, 0x10, 0x16, 0x5f, 0xf8, 0xb3, 0xbc, 0x89, 0xdd, 0xc0, 0x2c,
-    0xa9, 0x1f, 0xe1, 0x9e, 0xdf, 0xef, 0xa5, 0x05, 0xdc, 0xfd, 0x65, 0xf7,
-    0x3f, 0x3e, 0xac, 0xa9, 0x2a, 0x95, 0xf1, 0xa3, 0xc6, 0x8b, 0xc8, 0x52,
-    0x04, 0x84, 0x43, 0x4b, 0xf3, 0xeb, 0xb9, 0xe5, 0x97, 0xfe, 0x3f, 0xe2,
-    0x43, 0xf4, 0x10, 0x16, 0x54, 0x8f, 0x97, 0xa4, 0xf7, 0xf7, 0x65, 0x9a,
-    0xce, 0x2c, 0xa5, 0x97, 0x82, 0xfd, 0x59, 0x70, 0x61, 0x65, 0x48, 0xd9,
-    0x74, 0x72, 0x96, 0x5f, 0x7c, 0x03, 0xd2, 0xcb, 0x9a, 0xcf, 0x11, 0x19,
-    0xf1, 0xeb, 0x48, 0x7a, 0x17, 0x7d, 0x83, 0x21, 0xac, 0xa8, 0x3e, 0xcd,
-    0xe9, 0x77, 0xfc, 0x5d, 0xf3, 0xc8, 0x2e, 0x22, 0xca, 0x84, 0xe8, 0xf0,
-    0x88, 0xe3, 0x25, 0x72, 0x3b, 0xe6, 0x1c, 0xf6, 0x59, 0x63, 0x59, 0x69,
-    0xf5, 0x96, 0x2f, 0xcd, 0x27, 0x44, 0x2f, 0x4e, 0x9e, 0x67, 0x95, 0x97,
-    0xfd, 0x26, 0x79, 0xa0, 0x3b, 0x81, 0x51, 0x43, 0xaa, 0x11, 0xbc, 0x68,
-    0xf3, 0x13, 0xb9, 0x4d, 0xfb, 0xf8, 0x06, 0x35, 0x65, 0xf4, 0x4d, 0x83,
-    0x59, 0x5a, 0x3c, 0xae, 0x14, 0x5f, 0xdc, 0xe3, 0xfb, 0x00, 0xb2, 0xff,
-    0xb2, 0x07, 0xe8, 0xdc, 0x89, 0x96, 0x5f, 0xef, 0xcf, 0xde, 0xcf, 0xdd,
-    0x65, 0x34, 0xfb, 0xff, 0x3b, 0xbf, 0xf1, 0x6e, 0x39, 0x3b, 0x47, 0x83,
-    0x59, 0x50, 0x99, 0x06, 0x11, 0x3c, 0x27, 0x37, 0x08, 0xef, 0xfc, 0xe3,
-    0x81, 0xf8, 0xc8, 0xda, 0xb2, 0xff, 0xdb, 0xdf, 0x5c, 0x7f, 0x72, 0x36,
-    0x59, 0x7f, 0xb8, 0x10, 0x67, 0x4a, 0x16, 0x53, 0x51, 0x5f, 0xe3, 0xce,
-    0xa0, 0xde, 0xee, 0x01, 0x65, 0xd8, 0x05, 0x96, 0xc9, 0xc6, 0xcb, 0xa3,
-    0x97, 0xfe, 0x97, 0x9f, 0x5f, 0x76, 0x0f, 0x65, 0x94, 0x47, 0xd0, 0x12,
-    0x8b, 0xfd, 0x28, 0xd6, 0xd1, 0xad, 0x96, 0x5f, 0xf7, 0x80, 0x7c, 0xc1,
-    0xb8, 0x16, 0x5f, 0x9f, 0x9b, 0xf3, 0x8b, 0x2a, 0x11, 0x2d, 0x86, 0xbf,
-    0x9c, 0x5f, 0xa7, 0x7b, 0x3f, 0x75, 0x97, 0xfb, 0x51, 0xe7, 0x1c, 0x9a,
-    0xb2, 0xff, 0x9a, 0x7d, 0x9f, 0xc2, 0x76, 0x16, 0x5f, 0xd2, 0x7d, 0x67,
-    0xdd, 0x59, 0x7f, 0x0d, 0xdb, 0xe3, 0x15, 0x65, 0x41, 0xee, 0x61, 0x75,
-    0xff, 0x67, 0x78, 0x27, 0x34, 0xfc, 0x59, 0x78, 0x7b, 0x6c, 0xb2, 0xfc,
-    0x7d, 0xe3, 0x9a, 0xcb, 0xfe, 0xd7, 0xfa, 0x72, 0xee, 0x7e, 0xb2, 0xb6,
-    0x4f, 0x34, 0x65, 0x58, 0x67, 0xa8, 0x4b, 0xb4, 0x81, 0xce, 0xbf, 0x1f,
-    0x09, 0x35, 0xe1, 0x35, 0x25, 0x97, 0xf0, 0x9d, 0x0c, 0x66, 0xcb, 0x2f,
-    0xef, 0xfc, 0xe7, 0xe0, 0xac, 0xa9, 0x1f, 0xdc, 0xc3, 0xda, 0x2f, 0xbf,
-    0xf8, 0x05, 0x1d, 0x2c, 0xdf, 0x9a, 0x92, 0xcb, 0xf3, 0xf3, 0x9b, 0x71,
-    0x65, 0xee, 0x35, 0xd6, 0x5f, 0xe2, 0x60, 0x4f, 0x78, 0x3c, 0x59, 0x53,
-    0x1e, 0x90, 0x47, 0x2f, 0xfe, 0x0f, 0x3c, 0xf2, 0x82, 0x1e, 0x79, 0x65,
-    0xff, 0x09, 0x1f, 0xcd, 0x28, 0xd6, 0xcb, 0x2f, 0xe2, 0x7e, 0x89, 0x00,
-    0x59, 0x4d, 0x3e, 0xa2, 0x3d, 0xbe, 0x2f, 0xf6, 0xfd, 0x65, 0xff, 0xfe,
-    0x9b, 0x86, 0x39, 0xd3, 0x19, 0x6f, 0x79, 0x9f, 0xa1, 0x85, 0x95, 0x88,
-    0xac, 0x32, 0x17, 0x25, 0xbf, 0xdc, 0x9d, 0xd9, 0xc3, 0xc2, 0x59, 0x6f,
-    0xd6, 0x58, 0xfe, 0x3c, 0x9d, 0x1b, 0xdf, 0x9f, 0xee, 0x74, 0xd6, 0x54,
-    0x2b, 0x31, 0xc3, 0x06, 0x11, 0x0d, 0xef, 0x44, 0x7e, 0x8d, 0x64, 0x9d,
-    0xb8, 0x51, 0x7e, 0x70, 0xb1, 0x02, 0x2c, 0xbf, 0x4f, 0x79, 0xa8, 0xe2,
-    0xca, 0x98, 0xf5, 0x48, 0xa6, 0xfe, 0xce, 0x98, 0xf1, 0xab, 0x2f, 0x8a,
-    0x46, 0xd5, 0x96, 0x9d, 0x31, 0xe6, 0xb9, 0x65, 0xfc, 0x65, 0xbd, 0xe6,
-    0x65, 0x55, 0x97, 0xf4, 0x4d, 0xf4, 0xb3, 0x7a, 0xca, 0x98, 0xf9, 0xf8,
-    0x6d, 0x43, 0x45, 0xa3, 0xc2, 0x46, 0xff, 0xfc, 0x3f, 0x40, 0x8c, 0xfa,
-    0x4f, 0xff, 0x39, 0x1f, 0xa4, 0xb8, 0x78, 0xb2, 0xfd, 0xb4, 0x6c, 0xfc,
-    0x59, 0x58, 0x89, 0x93, 0x5a, 0x71, 0x6b, 0xfb, 0x71, 0xff, 0x6c, 0x71,
-    0x65, 0xd1, 0xfa, 0xcb, 0x05, 0x60, 0x85, 0xbd, 0x78, 0xfa, 0x7f, 0x48,
-    0xbf, 0xf7, 0x37, 0xbc, 0xdb, 0x39, 0x3c, 0xcb, 0x2f, 0xfd, 0x83, 0x89,
-    0x46, 0x9b, 0xdf, 0x96, 0x5f, 0xcf, 0xfc, 0xc5, 0x03, 0x59, 0x7f, 0xc5,
-    0x9b, 0x0f, 0xd8, 0x5d, 0x59, 0x7b, 0xa7, 0xc5, 0x95, 0x09, 0x93, 0x4c,
-    0x46, 0xd4, 0x2f, 0x1f, 0x91, 0x77, 0x0e, 0x2a, 0x7a, 0x74, 0x3f, 0x93,
-    0xc9, 0x6c, 0xf1, 0x3e, 0x65, 0x1d, 0x62, 0x5a, 0x54, 0xa3, 0x3f, 0x1c,
-    0xa7, 0x2c, 0x8f, 0x71, 0x88, 0x77, 0x82, 0x1c, 0x5f, 0x42, 0x58, 0xe1,
-    0x35, 0x34, 0xac, 0x2d, 0x4a, 0x6c, 0x6c, 0x63, 0xde, 0x8e, 0x95, 0xe1,
-    0xe5, 0xfc, 0x32, 0x8a, 0x16, 0xfc, 0x8f, 0xf3, 0xb3, 0x84, 0x61, 0x86,
-    0x5e, 0xf8, 0xc8, 0xe7, 0xe1, 0x80, 0x24, 0x77, 0x97, 0xff, 0x6b, 0x3e,
-    0x07, 0x8f, 0xbc, 0x7f, 0x96, 0x5f, 0x7e, 0x21, 0x49, 0x65, 0xc0, 0x67,
-    0xf9, 0xf5, 0x75, 0x1a, 0x99, 0xaa, 0x84, 0x0c, 0xa5, 0x3b, 0xe8, 0xd4,
-    0x9a, 0xb2, 0xfb, 0xee, 0x3e, 0xea, 0xcb, 0xf6, 0x0c, 0x3d, 0xe2, 0xcb,
-    0xcf, 0xa6, 0x16, 0x59, 0x9e, 0xc8, 0x8d, 0x32, 0x22, 0x26, 0x14, 0xa2,
-    0xff, 0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x8b, 0xcd, 0x50, 0xfa, 0x9b, 0x92,
-    0x75, 0x1c, 0x72, 0x39, 0x68, 0x30, 0x7e, 0x9f, 0xf3, 0xd4, 0x7c, 0x8d,
-    0x53, 0xf4, 0x6b, 0xc5, 0x69, 0x53, 0x39, 0x0b, 0xbd, 0xe8, 0xb7, 0xf9,
-    0x9e, 0x68, 0x0e, 0xe0, 0x54, 0x52, 0xcb, 0x99, 0x0c, 0xa2, 0xcb, 0xf1,
-    0xb3, 0xe6, 0x1a, 0xcb, 0xf6, 0x80, 0xee, 0x05, 0x45, 0x84, 0xbe, 0xec,
-    0x0f, 0x16, 0x5f, 0xff, 0x61, 0x0e, 0x3d, 0x1f, 0x77, 0x09, 0xda, 0xb2,
-    0xf1, 0x04, 0x0b, 0x2a, 0x0f, 0xa5, 0xd3, 0x6d, 0xc5, 0x97, 0xf0, 0x74,
-    0x7b, 0x3b, 0x56, 0x59, 0x9b, 0x28, 0x9b, 0x28, 0xc8, 0x30, 0xa0, 0xcd,
-    0x1b, 0x08, 0xae, 0x10, 0x4f, 0x88, 0xdf, 0xe6, 0x79, 0xa0, 0x3b, 0x81,
-    0x51, 0x65, 0xad, 0x25, 0x97, 0x69, 0x85, 0x97, 0xcc, 0xd8, 0x65, 0x27,
-    0xa5, 0x94, 0x92, 0xf3, 0x31, 0x1a, 0xb2, 0x80, 0x7b, 0x7c, 0x30, 0x08,
-    0x5d, 0x30, 0x8b, 0x32, 0x11, 0xe3, 0x9d, 0xd1, 0xe5, 0x96, 0xfd, 0x65,
-    0xcc, 0x6c, 0xb2, 0xda, 0x91, 0xab, 0xc1, 0x2a, 0x01, 0xf3, 0xba, 0x0d,
-    0xc7, 0xfa, 0xcb, 0xfe, 0x7f, 0x8b, 0x3e, 0xec, 0x30, 0xb2, 0xff, 0x6d,
-    0xf7, 0x20, 0x7d, 0x35, 0x97, 0xe8, 0xcd, 0xf1, 0xc5, 0x96, 0x87, 0x3d,
-    0xd1, 0x4d, 0x69, 0xd1, 0x7c, 0x50, 0x97, 0xbe, 0x79, 0x48, 0x6b, 0x2f,
-    0xe7, 0xd4, 0x75, 0xfc, 0xb2, 0xf0, 0xa2, 0x8a, 0x92, 0xff, 0xa2, 0x5f,
-    0x77, 0x51, 0x9f, 0x24, 0x66, 0x68, 0x2f, 0xf8, 0x2f, 0xf6, 0x74, 0xfe,
-    0x15, 0x65, 0xd1, 0xc5, 0x94, 0x34, 0xc2, 0xfc, 0x44, 0x49, 0x9c, 0x4c,
-    0xde, 0x77, 0x73, 0x29, 0x3d, 0x2c, 0xbf, 0x8d, 0xf9, 0xff, 0x02, 0xb2,
-    0xff, 0xe3, 0x93, 0xf1, 0xc8, 0x20, 0xce, 0x24, 0xbf, 0xff, 0xbc, 0x7d,
-    0xf6, 0x70, 0xb1, 0xa1, 0xe7, 0x9e, 0x4b, 0x2f, 0xf4, 0x4b, 0xaf, 0xe7,
-    0x1a, 0xcb, 0xe7, 0xeb, 0x1c, 0x59, 0x50, 0x8f, 0x1c, 0x42, 0xd2, 0xd3,
-    0x99, 0x5a, 0x4b, 0x2d, 0x25, 0x96, 0x92, 0xcb, 0xc2, 0x8a, 0x2a, 0xcb,
-    0x01, 0x23, 0x33, 0x41, 0x50, 0x7e, 0xcc, 0x08, 0x98, 0x8f, 0xe6, 0x37,
-    0xf0, 0x79, 0xe7, 0x96, 0x2c, 0xbf, 0xfe, 0xe1, 0x83, 0x0b, 0x50, 0x58,
-    0x3c, 0x61, 0x65, 0x34, 0xfe, 0xba, 0x5b, 0x6f, 0x96, 0x59, 0x85, 0x96,
-    0x0a, 0xca, 0x23, 0x47, 0xc1, 0x2a, 0xc3, 0xf7, 0xe1, 0x17, 0x4d, 0x6e,
-    0xe3, 0x0b, 0x2d, 0x8b, 0x2e, 0x0f, 0xf0, 0x6a, 0x06, 0x31, 0x71, 0xc2,
-    0xcb, 0xf8, 0xa1, 0xa5, 0x18, 0xb2, 0xff, 0xe8, 0x7d, 0x77, 0xd8, 0x30,
-    0xf7, 0x8b, 0x2e, 0x94, 0x2c, 0xbd, 0xc1, 0xb0, 0xb2, 0xb6, 0x47, 0x20,
-    0xcb, 0x66, 0x15, 0xf1, 0x50, 0x51, 0x04, 0x16, 0xbf, 0xfd, 0x9f, 0x74,
-    0x4e, 0x9f, 0x7d, 0x83, 0x35, 0x97, 0xff, 0xff, 0xa3, 0xbc, 0x3e, 0x72,
-    0x3b, 0xe3, 0x8d, 0x7e, 0xd7, 0x94, 0xba, 0xc2, 0xca, 0x61, 0x18, 0x9e,
-    0x4b, 0xb8, 0xfe, 0x59, 0x74, 0x35, 0x65, 0xff, 0xfa, 0x08, 0x32, 0x94,
-    0x77, 0xd8, 0xd1, 0x23, 0xf5, 0x97, 0xff, 0xc6, 0x41, 0x96, 0x73, 0x50,
-    0x72, 0x7e, 0x24, 0xa9, 0x22, 0x8f, 0xaa, 0xd7, 0x01, 0x9c, 0x32, 0x65,
-    0xb6, 0x84, 0xbc, 0x88, 0x47, 0x0d, 0x5c, 0x8c, 0xc5, 0x84, 0xc0, 0x10,
-    0xea, 0x31, 0xf7, 0x85, 0x81, 0x46, 0x5b, 0xc8, 0xce, 0xbb, 0x18, 0xf6,
-    0xf2, 0x49, 0xf1, 0x71, 0x21, 0x73, 0x7f, 0xf9, 0x9b, 0x5e, 0x4c, 0xf3,
-    0x40, 0x77, 0x02, 0xa2, 0x8c, 0x5f, 0x1f, 0x5e, 0x7d, 0x65, 0xfc, 0xfa,
-    0xfd, 0xb1, 0xfa, 0xcb, 0xe8, 0xd4, 0x7e, 0xb2, 0xfe, 0x81, 0xc3, 0x60,
-    0x45, 0x95, 0x32, 0x28, 0xbc, 0x49, 0xbc, 0xbc, 0x42, 0x2b, 0xf8, 0x9f,
-    0xbe, 0x39, 0x96, 0x5f, 0xbd, 0x1b, 0x60, 0xd6, 0x5f, 0x89, 0xff, 0x81,
-    0x16, 0x5f, 0xf8, 0xfe, 0x97, 0x0b, 0x3b, 0xe0, 0xac, 0xbf, 0xe3, 0xd7,
-    0xb3, 0x0a, 0x5c, 0x59, 0x52, 0x3f, 0x60, 0x1f, 0xdf, 0x3e, 0xfc, 0x25,
-    0x95, 0xf1, 0xe2, 0x68, 0x8a, 0xed, 0xdd, 0xc5, 0x97, 0xfe, 0x79, 0x03,
-    0xc6, 0xd8, 0xd3, 0x0b, 0x2c, 0xce, 0x13, 0xf7, 0xc4, 0x19, 0x8b, 0x7c,
-    0x51, 0xd8, 0x71, 0x04, 0x8c, 0x51, 0xda, 0x93, 0x62, 0x43, 0xa8, 0xe9,
-    0x9a, 0xf0, 0xf4, 0xa8, 0xae, 0x46, 0x29, 0xd9, 0x5e, 0x77, 0xff, 0x33,
-    0x79, 0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x88, 0xe5, 0x7f, 0xf9, 0x9b, 0x5e,
-    0x4c, 0xf3, 0x40, 0x77, 0x02, 0xa2, 0x72, 0x5f, 0xe6, 0x79, 0xa0, 0x3b,
-    0x81, 0x51, 0x66, 0x2e, 0xef, 0xeb, 0x2f, 0xd9, 0xe2, 0xcd, 0x2c, 0xbd,
-    0xb4, 0x69, 0x65, 0xfa, 0x5c, 0x76, 0xb3, 0xf1, 0xed, 0x90, 0xc7, 0x09,
-    0xaf, 0xa7, 0x84, 0xf5, 0x3d, 0x4f, 0x05, 0x97, 0xf8, 0x78, 0xd8, 0xfa,
-    0x1a, 0xb2, 0xa7, 0xa3, 0xec, 0x9e, 0x07, 0x37, 0xfb, 0x51, 0xdf, 0x3f,
-    0xd2, 0x59, 0x7f, 0xff, 0xfd, 0x13, 0x7a, 0x3b, 0x02, 0x1e, 0xa6, 0x8f,
-    0x66, 0xfc, 0xf6, 0x0f, 0x7e, 0x2c, 0xaf, 0xd1, 0x6a, 0x46, 0x97, 0xfd,
-    0x9c, 0x7e, 0xfe, 0x21, 0x49, 0x65, 0xbf, 0x59, 0x7f, 0x73, 0x5a, 0xcf,
-    0xb8, 0xb2, 0xa7, 0xa3, 0xc1, 0xc1, 0x2b, 0xda, 0xc6, 0xac, 0xbe, 0x32,
-    0xce, 0x2c, 0xb6, 0x74, 0xde, 0x6e, 0x0e, 0x5f, 0xff, 0xfb, 0xd0, 0x41,
-    0xe7, 0x20, 0x4e, 0x99, 0x06, 0x59, 0xce, 0x9a, 0xcb, 0xee, 0xf4, 0xf4,
-    0xb2, 0xa4, 0x88, 0xdd, 0x35, 0xde, 0x72, 0x02, 0xcb, 0xdc, 0x8e, 0x2c,
-    0xbd, 0xb4, 0xff, 0x16, 0x5d, 0x3d, 0xf9, 0x65, 0x8d, 0x65, 0xfe, 0x8e,
-    0x47, 0x76, 0xc1, 0x56, 0x58, 0xda, 0x78, 0x84, 0x21, 0x7f, 0xe2, 0x1f,
-    0xa3, 0x9c, 0xcd, 0x42, 0xcb, 0xbf, 0x75, 0x97, 0xec, 0xfb, 0xb9, 0x0b,
-    0x2e, 0x9c, 0x22, 0xcb, 0xf0, 0x3c, 0xe6, 0xcb, 0x59, 0x7e, 0x0f, 0x23,
-    0x90, 0xb2, 0xb4, 0x7a, 0x4e, 0x57, 0x7f, 0x17, 0xfe, 0xcf, 0xdd, 0x65,
-    0xf1, 0x46, 0xf0, 0xac, 0xa3, 0x3d, 0x17, 0x2e, 0xbb, 0xe6, 0xac, 0xbf,
-    0xfa, 0x7d, 0xcb, 0xfc, 0xec, 0x11, 0xfe, 0xb2, 0xcc, 0xe7, 0xa5, 0xd7,
-    0x08, 0x87, 0x16, 0xc4, 0x72, 0x7b, 0x1b, 0x16, 0x42, 0xd8, 0x04, 0x7f,
-    0x0d, 0xcc, 0x39, 0xa2, 0x16, 0xb0, 0x39, 0x33, 0x2c, 0xf4, 0x85, 0xf8,
-    0x4e, 0x16, 0xcd, 0xee, 0x53, 0xe4, 0x02, 0x0c, 0x5f, 0xb4, 0x07, 0x70,
-    0x2a, 0x2d, 0xd5, 0xb8, 0xb2, 0xb0, 0xf1, 0x7f, 0x34, 0xbf, 0x33, 0x1f,
-    0xa3, 0x4b, 0x29, 0x99, 0xe6, 0x78, 0x8a, 0xfe, 0x27, 0x67, 0xad, 0xbc,
-    0xb2, 0xf1, 0xfd, 0xfa, 0xcb, 0xf7, 0xd2, 0xf1, 0xfe, 0xb2, 0xff, 0xed,
-    0x38, 0x3f, 0x0f, 0x3b, 0x1f, 0x0a, 0xb2, 0xe2, 0x61, 0x65, 0xf0, 0x1d,
-    0xc0, 0xa8, 0xa4, 0x15, 0x87, 0x8b, 0xa1, 0x7b, 0xfd, 0x2e, 0x98, 0xbc,
-    0xfc, 0xd6, 0x5f, 0xfb, 0x3c, 0x7b, 0xfd, 0x98, 0x40, 0x59, 0x7f, 0x67,
-    0xb3, 0xc6, 0xc2, 0xcb, 0xf7, 0x63, 0x79, 0xef, 0x59, 0x79, 0xe4, 0xce,
-    0x13, 0xa3, 0x19, 0x56, 0x42, 0x37, 0xe2, 0x1e, 0x1a, 0xf4, 0xfb, 0x79,
-    0x6d, 0xfb, 0x33, 0x9e, 0x0a, 0xcb, 0xfc, 0x63, 0x0f, 0x78, 0xd2, 0x59,
-    0x7c, 0x2b, 0x63, 0x8b, 0x2f, 0x39, 0x49, 0x65, 0x99, 0x81, 0x58, 0x3e,
-    0x8c, 0x1b, 0x1e, 0x0f, 0x9f, 0x9c, 0x9c, 0x26, 0x62, 0x91, 0xdf, 0xfc,
-    0xcd, 0xe4, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x25, 0x25, 0x6c, 0xcd, 0x1a,
-    0x99, 0x51, 0xab, 0x4f, 0x09, 0xcf, 0xe7, 0x8a, 0x4a, 0x3b, 0x4e, 0xcb,
-    0x2b, 0xdc, 0x74, 0xbc, 0xcd, 0xc0, 0xb2, 0xfe, 0x32, 0xcf, 0x60, 0x16,
-    0x5f, 0xc6, 0x5d, 0xc3, 0x1a, 0xcb, 0xa5, 0xd5, 0x97, 0x8a, 0x05, 0x59,
-    0x74, 0x33, 0xd1, 0xb3, 0x21, 0x7a, 0x92, 0x22, 0xfa, 0xbd, 0x7b, 0x81,
-    0x6a, 0xcb, 0x32, 0x16, 0x59, 0x9c, 0x93, 0x0b, 0xfa, 0x16, 0xc6, 0x47,
-    0x3e, 0x3b, 0x78, 0x9e, 0x4b, 0x2f, 0xff, 0x1f, 0xdf, 0xeb, 0x07, 0x1a,
-    0x3f, 0xbf, 0x59, 0x7e, 0xd0, 0x1d, 0xc0, 0xa8, 0x9d, 0x97, 0xf6, 0xcf,
-    0xa0, 0x6b, 0x16, 0x5f, 0xfd, 0x9e, 0x27, 0x90, 0x7f, 0x6b, 0xc9, 0x65,
-    0xe7, 0x93, 0x38, 0x47, 0x9e, 0x26, 0xb9, 0xa1, 0x17, 0x5d, 0xb6, 0xea,
-    0xcb, 0xff, 0xf1, 0x8c, 0x2d, 0x8d, 0xc7, 0x19, 0x41, 0x60, 0x16, 0x5f,
-    0xe9, 0x46, 0xb6, 0x8d, 0x6c, 0xb2, 0xff, 0xde, 0x27, 0x90, 0x7f, 0x6b,
-    0xc9, 0x65, 0x41, 0xfa, 0x61, 0xad, 0xff, 0xfb, 0x3e, 0x97, 0xa3, 0x8f,
-    0xa8, 0xdc, 0xf3, 0x81, 0x65, 0x99, 0xe2, 0xab, 0x66, 0xc6, 0x1d, 0xe4,
-    0xc7, 0x1b, 0x28, 0x64, 0xee, 0x10, 0x5f, 0x1e, 0xa3, 0x7a, 0xcb, 0xb3,
-    0xcb, 0x2f, 0xfe, 0x9f, 0x72, 0xff, 0x3b, 0x04, 0x7f, 0xac, 0xb3, 0x3e,
-    0x1f, 0xfc, 0xf9, 0x18, 0x82, 0xd7, 0xff, 0x3b, 0x7d, 0x80, 0x7f, 0x40,
-    0x92, 0x59, 0x78, 0xc6, 0xeb, 0x2f, 0xfe, 0x2c, 0xf3, 0xed, 0x9c, 0x27,
-    0xf9, 0x65, 0xd3, 0xec, 0xc6, 0x8a, 0x2f, 0x22, 0x70, 0x6e, 0xa1, 0x78,
-    0xda, 0x51, 0x94, 0xb6, 0x58, 0x27, 0x21, 0xd7, 0x3f, 0x0d, 0xdb, 0xff,
-    0x72, 0x0b, 0xef, 0xf9, 0xc8, 0xfd, 0x65, 0xff, 0xff, 0xff, 0x78, 0xfa,
-    0xef, 0xf7, 0x39, 0xc8, 0x6c, 0x7b, 0x33, 0x6c, 0x2c, 0xfb, 0xbc, 0x8f,
-    0x96, 0x5f, 0xe8, 0x91, 0xf4, 0xca, 0x4b, 0x2f, 0xff, 0xfc, 0x00, 0xed,
-    0x9b, 0xe3, 0xec, 0x1b, 0xc8, 0x46, 0xf3, 0x1c, 0x6b, 0x2f, 0x86, 0xfd,
-    0x67, 0x89, 0xbb, 0x01, 0x07, 0x50, 0x94, 0xe1, 0x8d, 0xff, 0xd3, 0x7d,
-    0xc3, 0x6c, 0xe1, 0x35, 0x9b, 0x2c, 0xbe, 0x03, 0xb8, 0x15, 0x11, 0x62,
-    0xfe, 0x3d, 0x39, 0x02, 0x16, 0x56, 0x8f, 0x67, 0xc5, 0xd7, 0xfe, 0x79,
-    0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x89, 0x75, 0x7f, 0xff, 0x60, 0xfd, 0x02,
-    0x33, 0xe9, 0x3f, 0xfc, 0xe4, 0x7e, 0x92, 0xcc, 0xe1, 0x37, 0x1c, 0x85,
-    0x23, 0x48, 0xa7, 0xd3, 0x2f, 0xfe, 0x6b, 0xc9, 0x9e, 0x68, 0x0e, 0xe0,
-    0x54, 0x4c, 0x4b, 0xfb, 0xd0, 0x5f, 0x4c, 0xeb, 0x2f, 0xf3, 0x9c, 0xf9,
-    0xff, 0x83, 0x59, 0x7d, 0x80, 0x86, 0x70, 0x7c, 0x7e, 0x2e, 0xa6, 0x68,
-    0xee, 0xf4, 0x2d, 0x6f, 0xda, 0x03, 0xb8, 0x15, 0x15, 0x4a, 0xd8, 0xb2,
-    0xb0, 0xf1, 0x18, 0x34, 0xbf, 0xf0, 0x5f, 0x52, 0x2c, 0x15, 0xff, 0x59,
-    0x7f, 0xf3, 0xf3, 0x46, 0x2f, 0x7c, 0x7a, 0x92, 0xcb, 0xfe, 0xd3, 0xfb,
-    0xe9, 0x67, 0x59, 0x8d, 0x10, 0x9e, 0x3f, 0xa6, 0x68, 0xfa, 0x78, 0x53,
-    0x5f, 0xf9, 0xe4, 0xcf, 0x34, 0x07, 0x70, 0x2a, 0x27, 0x45, 0xf7, 0x0f,
-    0xe1, 0x56, 0x53, 0x4f, 0xc3, 0xf4, 0xcb, 0xe7, 0x2e, 0xf1, 0x65, 0xf6,
-    0xc5, 0x1b, 0x2c, 0xbe, 0x6c, 0x30, 0xcd, 0xa7, 0x88, 0x12, 0x1a, 0x66,
-    0x8a, 0x33, 0x67, 0xbf, 0xc6, 0xfa, 0x89, 0x3e, 0xf5, 0x97, 0xc6, 0x5f,
-    0x9a, 0xcb, 0xf4, 0xd1, 0x34, 0x71, 0x65, 0xfc, 0x2e, 0x1e, 0xfc, 0x25,
-    0x94, 0x67, 0xaf, 0xc2, 0x9b, 0xc7, 0xe8, 0x58, 0xcc, 0xd0, 0xdf, 0xfc,
-    0x1e, 0x76, 0x3e, 0x66, 0x19, 0x8d, 0xab, 0x2a, 0x49, 0x87, 0xb6, 0x13,
-    0x3e, 0x2d, 0xbf, 0xf3, 0xc9, 0x9e, 0x68, 0x0e, 0xe0, 0x54, 0x4e, 0xeb,
-    0xf7, 0x42, 0xed, 0x34, 0x97, 0xfe, 0x28, 0xee, 0x73, 0x33, 0xe9, 0x2c,
-    0xa1, 0xaa, 0x28, 0xc8, 0xd0, 0x9a, 0x6c, 0xe9, 0x9d, 0x27, 0xbf, 0xe1,
-    0xc4, 0xa1, 0x98, 0xbc, 0xfd, 0x65, 0xfb, 0x85, 0x1f, 0xf1, 0x65, 0xe2,
-    0xc1, 0xac, 0xba, 0x19, 0xc1, 0xe1, 0xfe, 0x51, 0x4c, 0xd1, 0xff, 0x8a,
-    0x05, 0x08, 0x0b, 0xf7, 0x19, 0x83, 0xb0, 0xb2, 0xff, 0xf3, 0x36, 0xbc,
-    0x99, 0xe6, 0x80, 0xee, 0x05, 0x45, 0x0a, 0xbf, 0xfe, 0x7e, 0xcb, 0x08,
-    0xc6, 0xcf, 0x9b, 0x46, 0x96, 0x5f, 0x99, 0xec, 0xd7, 0x15, 0x65, 0xff,
-    0xff, 0xc1, 0x6b, 0x5e, 0x4c, 0xc1, 0xe0, 0xf6, 0x0b, 0x36, 0x60, 0x31,
-    0x32, 0xca, 0x92, 0x28, 0xfc, 0x59, 0x7e, 0x0f, 0xdd, 0x30, 0x2c, 0xbf,
-    0x67, 0xf8, 0xe4, 0xb2, 0xfb, 0x86, 0x2f, 0x56, 0x5e, 0x8f, 0xd9, 0xec,
-    0x7e, 0x44, 0x53, 0xd2, 0x6a, 0x34, 0x6c, 0x14, 0x25, 0x6f, 0xf9, 0xaf,
-    0xcc, 0x16, 0x08, 0x6b, 0x2f, 0xfc, 0xf2, 0x67, 0x9a, 0x03, 0xb8, 0x15,
-    0x14, 0x92, 0xff, 0x67, 0x8b, 0x07, 0xe0, 0xac, 0xbd, 0x04, 0x35, 0x96,
-    0x67, 0x88, 0xd1, 0x69, 0xc7, 0x53, 0x05, 0x32, 0xbf, 0xff, 0xec, 0x20,
-    0xf2, 0x30, 0xba, 0x4e, 0xc6, 0x4d, 0x04, 0x35, 0x97, 0x34, 0x96, 0x5f,
-    0xfd, 0x37, 0x9d, 0xbd, 0xf4, 0x74, 0x2d, 0x59, 0x7d, 0x85, 0x1b, 0x2c,
-    0xac, 0x3e, 0x7d, 0x23, 0x5e, 0xce, 0x33, 0x24, 0xc0, 0x78, 0xc6, 0x23,
-    0xed, 0x43, 0x37, 0xef, 0x68, 0xf3, 0x25, 0x19, 0xd0, 0x23, 0x68, 0xd4,
-    0x67, 0x8d, 0x96, 0x96, 0xe6, 0xbf, 0x95, 0x12, 0xd7, 0x63, 0xcc, 0x0c,
-    0x3d, 0xe7, 0xe3, 0x46, 0xbf, 0x68, 0x0e, 0xe0, 0x54, 0x44, 0x8b, 0xff,
-    0xfd, 0xe8, 0xd9, 0x97, 0xa8, 0x9f, 0x67, 0xa3, 0x86, 0xed, 0x82, 0xac,
-    0xb3, 0x3c, 0x45, 0x04, 0xc6, 0x97, 0xb4, 0xfa, 0x59, 0x7f, 0xe7, 0x93,
-    0x3c, 0xd0, 0x1d, 0xc0, 0xa8, 0x97, 0x96, 0x66, 0x67, 0xd0, 0xd1, 0xcb,
-    0xff, 0xa3, 0x7b, 0xcc, 0x7a, 0xfa, 0x51, 0x32, 0xcb, 0xd3, 0xd3, 0x7f,
-    0x59, 0x74, 0xc4, 0xb2, 0xff, 0xf7, 0xa3, 0x82, 0x0e, 0x35, 0x36, 0x17,
-    0xeb, 0x2f, 0xb4, 0x1e, 0xf1, 0x65, 0xfb, 0x5f, 0xb4, 0xf8, 0xb2, 0xf4,
-    0x17, 0xcb, 0x2f, 0xdd, 0x11, 0xa5, 0x0b, 0x2c, 0x7e, 0x3c, 0x42, 0x1c,
-    0xbf, 0xfd, 0xed, 0xf0, 0x5f, 0xee, 0xe0, 0xf3, 0x5f, 0x2c, 0xbf, 0xc7,
-    0xa7, 0x19, 0x93, 0x0b, 0x2e, 0x8e, 0xac, 0xbf, 0xe7, 0xdb, 0x51, 0xf4,
-    0x8d, 0xab, 0x2f, 0xff, 0x04, 0x67, 0xa1, 0x26, 0xdc, 0x0b, 0x94, 0xcb,
-    0x2a, 0x49, 0xa4, 0x19, 0x37, 0x94, 0x3f, 0x32, 0x21, 0x6e, 0x1d, 0x5f,
-    0xdf, 0xfa, 0x34, 0x6d, 0x59, 0x7f, 0xe9, 0xb9, 0x1b, 0xdf, 0xd1, 0xf4,
-    0xcb, 0x2a, 0x0f, 0xc5, 0xcb, 0xaf, 0x8f, 0x70, 0x46, 0xac, 0xbf, 0x66,
-    0xd9, 0xc6, 0xac, 0xbf, 0x9f, 0x67, 0xe3, 0xfe, 0xb2, 0xff, 0xe9, 0xa7,
-    0x08, 0x51, 0xbd, 0xf7, 0xc4, 0xcb, 0x29, 0x65, 0xf7, 0x73, 0x53, 0x2c,
-    0xbd, 0xd7, 0xde, 0xb2, 0xd2, 0xc3, 0xc1, 0x72, 0x3b, 0xf3, 0xf2, 0x37,
-    0xe2, 0xca, 0x98, 0xf3, 0xb7, 0x93, 0x54, 0x26, 0x17, 0x89, 0x8f, 0x09,
-    0xab, 0xb5, 0x0b, 0x2a, 0x4b, 0x9b, 0x83, 0x4c, 0x32, 0x39, 0xa3, 0xb5,
-    0xd4, 0x32, 0x3c, 0x40, 0x44, 0xdd, 0x28, 0xdf, 0x19, 0xce, 0xe1, 0x9d,
-    0xd8, 0x4b, 0x2f, 0xe9, 0xdc, 0xf6, 0x1f, 0x56, 0x50, 0xcf, 0x10, 0xc5,
-    0x6e, 0x1f, 0xcb, 0x2f, 0xe2, 0x0f, 0x66, 0x86, 0x16, 0x5e, 0x65, 0x9e,
-    0x96, 0x53, 0x9e, 0x78, 0x4b, 0xef, 0xfe, 0xc3, 0xfb, 0x9d, 0x8d, 0x9a,
-    0xf2, 0x59, 0x46, 0x7c, 0xda, 0x21, 0xbf, 0xc1, 0xef, 0x8a, 0x33, 0x4b,
-    0x2f, 0xc5, 0x9b, 0x09, 0xbd, 0x65, 0xf6, 0x6c, 0x26, 0xf5, 0x97, 0xe1,
-    0xc7, 0xc3, 0x79, 0xc7, 0xa2, 0x45, 0x77, 0xff, 0xc7, 0xa9, 0xde, 0x83,
-    0xef, 0x02, 0x00, 0xc2, 0xcb, 0xe3, 0xdb, 0xfd, 0xd5, 0x96, 0xf9, 0x65,
-    0xe7, 0x70, 0x2a, 0x29, 0x75, 0x2c, 0xac, 0x3c, 0x50, 0x09, 0x4c, 0x51,
-    0x7c, 0x5d, 0x8d, 0x2c, 0xbf, 0xec, 0xd6, 0xee, 0x0f, 0x35, 0xf2, 0xca,
-    0x33, 0xdd, 0xde, 0x43, 0x7f, 0xe8, 0x97, 0x9c, 0xfe, 0xe4, 0x30, 0xb2,
-    0xb6, 0x54, 0xdd, 0x28, 0x41, 0xb0, 0x81, 0x32, 0x8e, 0x9b, 0x3d, 0x08,
-    0xc2, 0x23, 0xbd, 0x1a, 0xea, 0xcb, 0xf8, 0x7f, 0x46, 0x8f, 0xe5, 0x97,
-    0xdd, 0xdb, 0x05, 0x59, 0x52, 0x3e, 0xf3, 0x1c, 0x22, 0xfb, 0xf1, 0xb1,
-    0xac, 0xe2, 0xcb, 0xff, 0x41, 0x47, 0xa7, 0x04, 0x82, 0x05, 0x97, 0x82,
-    0xfc, 0x59, 0x7d, 0x30, 0x5e, 0x65, 0x97, 0xe8, 0xfd, 0xfe, 0xe2, 0xcb,
-    0xc4, 0x7f, 0xac, 0xbd, 0x9d, 0xe2, 0xca, 0x83, 0x71, 0xc1, 0xca, 0x92,
-    0x65, 0x03, 0x28, 0x98, 0xff, 0xc3, 0x9f, 0x92, 0x75, 0x86, 0xfd, 0xba,
-    0xe4, 0x3d, 0xc5, 0x94, 0xb2, 0xfd, 0xce, 0xea, 0x38, 0xb2, 0xd1, 0xf1,
-    0xb3, 0xe8, 0x5d, 0xff, 0x7f, 0xcd, 0x47, 0xd2, 0x36, 0xac, 0xbd, 0xd7,
-    0xde, 0xb2, 0xfd, 0xb0, 0x66, 0x8d, 0xd5, 0x97, 0xc1, 0x9a, 0x37, 0x56,
-    0x5c, 0xfb, 0x4e, 0x3d, 0x3d, 0x8b, 0x6a, 0x11, 0xba, 0xe7, 0x61, 0x71,
-    0xbf, 0xe8, 0x3f, 0xf9, 0x0d, 0x7e, 0xac, 0xbf, 0xe3, 0xe4, 0xc6, 0x5d,
-    0x8f, 0xd6, 0x5f, 0xfc, 0x5d, 0xdf, 0x1a, 0xe3, 0x94, 0x6e, 0xac, 0xa9,
-    0x23, 0x9b, 0x45, 0xcd, 0x38, 0xe1, 0xcd, 0xfe, 0x8d, 0xde, 0x43, 0x5f,
-    0xab, 0x2e, 0x72, 0x59, 0x7f, 0xd1, 0xfc, 0xef, 0x43, 0x5c, 0x96, 0x57,
-    0xc7, 0x9f, 0xbc, 0x56, 0xff, 0xfb, 0x06, 0x24, 0xdc, 0xef, 0xb0, 0x61,
-    0xef, 0x16, 0x54, 0x91, 0xf9, 0xa8, 0x42, 0x78, 0x96, 0xfe, 0x81, 0x4f,
-    0xc1, 0xdd, 0x59, 0x7f, 0x7d, 0x2e, 0x39, 0x7c, 0xb2, 0xa1, 0x70, 0x62,
-    0x4c, 0x19, 0x1f, 0x51, 0xc6, 0x73, 0xa3, 0x51, 0x0c, 0x6f, 0xfc, 0x53,
-    0x4e, 0xd4, 0x7d, 0x23, 0x6a, 0xcb, 0xff, 0xdb, 0xe0, 0xbb, 0xdf, 0x60,
-    0xc3, 0xde, 0x2c, 0xba, 0x1a, 0xb2, 0xa1, 0x14, 0x98, 0x85, 0xa4, 0xcb,
-    0xfa, 0x0a, 0x6e, 0x9b, 0x0b, 0x2f, 0xfa, 0x59, 0xa9, 0xb0, 0xa1, 0xab,
-    0x2f, 0xdf, 0xc0, 0x31, 0xab, 0x2f, 0xf6, 0x6d, 0xc8, 0x98, 0x3a, 0x59,
-    0x46, 0x89, 0x5d, 0x1c, 0x11, 0x45, 0xd2, 0xc5, 0x97, 0xee, 0x31, 0xa7,
-    0x15, 0x65, 0xe2, 0x86, 0xac, 0xa1, 0x9e, 0x2e, 0x8a, 0xaf, 0xbe, 0xdd,
-    0xc9, 0x2c, 0xbf, 0xcf, 0xa9, 0xb3, 0xbb, 0x9b, 0xd6, 0x5e, 0x8f, 0xf8,
-    0xb2, 0xa1, 0x32, 0x71, 0x97, 0x62, 0xdb, 0x91, 0x04, 0x98, 0x53, 0x9b,
-    0xe7, 0xf3, 0xec, 0xb2, 0xfd, 0xe0, 0xb1, 0x84, 0xb2, 0xff, 0x0a, 0x4f,
-    0xd9, 0x38, 0xd6, 0x5f, 0xba, 0x26, 0xd1, 0xe5, 0x97, 0xfd, 0x1e, 0xe3,
-    0xf6, 0x35, 0xb8, 0xb2, 0xff, 0xcd, 0x71, 0x89, 0x34, 0xa0, 0xbe, 0x59,
-    0x43, 0x3f, 0xc3, 0x3b, 0xbf, 0x83, 0xe8, 0xd6, 0x7e, 0xb2, 0xfb, 0x5f,
-    0x89, 0xbd, 0x65, 0xe3, 0x17, 0xab, 0x2a, 0x47, 0xe5, 0xe2, 0xee, 0x13,
-    0xd6, 0xc9, 0xf2, 0x8c, 0x8b, 0xe2, 0x89, 0x8c, 0xfd, 0x0a, 0x6e, 0xc2,
-    0x4e, 0xff, 0x17, 0x73, 0x86, 0xfe, 0x59, 0x7d, 0xc9, 0x71, 0xd6, 0x5f,
-    0xf7, 0xe7, 0xec, 0xd3, 0xcd, 0xc5, 0x97, 0xff, 0xd2, 0x28, 0xd8, 0x49,
-    0xb9, 0xec, 0xdc, 0xd7, 0xeb, 0x2f, 0x48, 0x7b, 0xd6, 0x54, 0x1f, 0xb3,
-    0xab, 0xdf, 0xd3, 0x9b, 0x9d, 0x7e, 0xac, 0xbf, 0xbc, 0x63, 0x3d, 0x01,
-    0x65, 0x80, 0xb2, 0xdc, 0xc3, 0xed, 0x01, 0x7b, 0x96, 0xde, 0xfa, 0x6e,
-    0x2c, 0xaf, 0x8f, 0x49, 0xcc, 0xef, 0x41, 0x8d, 0x65, 0x42, 0xa1, 0xf1,
-    0x98, 0xfc, 0x44, 0xd8, 0x58, 0x3c, 0x37, 0xf8, 0x45, 0x7f, 0xb0, 0x59,
-    0x1f, 0x02, 0xd5, 0x97, 0x6f, 0xe2, 0xcb, 0xf8, 0x3c, 0x89, 0x83, 0xa5,
-    0x97, 0xec, 0xdb, 0x3d, 0xc5, 0x95, 0x07, 0xe1, 0xe1, 0x92, 0x2f, 0xbd,
-    0x9a, 0xe2, 0xca, 0x01, 0xe4, 0xef, 0x2d, 0xbf, 0xef, 0xe3, 0xf1, 0x37,
-    0xc1, 0x6e, 0x2c, 0xbf, 0xff, 0x6d, 0x1d, 0x8f, 0x1f, 0x64, 0x7a, 0x07,
-    0xa1, 0x65, 0x42, 0x74, 0xd9, 0x0e, 0xd3, 0x24, 0x74, 0x0b, 0xff, 0xfe,
-    0xd7, 0xc0, 0x3f, 0xa7, 0x30, 0xf3, 0xb9, 0xe7, 0x04, 0x10, 0xd6, 0x5f,
-    0xf3, 0xf0, 0x4e, 0xfc, 0x03, 0x6a, 0xcb, 0x7a, 0x11, 0x50, 0x16, 0xdb,
-    0xe3, 0x62, 0x7f, 0x16, 0x5f, 0xc2, 0x76, 0x36, 0x2f, 0x96, 0x5e, 0x23,
-    0x6a, 0xca, 0xd1, 0xf8, 0x7e, 0x4b, 0xd3, 0x0b, 0xfc, 0x50, 0xe5, 0xdc,
-    0x25, 0x97, 0xfa, 0x3e, 0xe6, 0xec, 0x69, 0x85, 0x97, 0xfb, 0xcf, 0x31,
-    0xea, 0x36, 0x59, 0x7f, 0x66, 0xe3, 0x63, 0x3a, 0xb2, 0xec, 0x6a, 0xca,
-    0x1a, 0x75, 0x19, 0x09, 0x86, 0x98, 0x78, 0xbd, 0xce, 0x02, 0x69, 0xbc,
-    0xbe, 0xfd, 0xb8, 0x6d, 0x8e, 0x2c, 0xbf, 0x3e, 0xfc, 0xd7, 0x16, 0x50,
-    0xcf, 0x4d, 0xa5, 0x57, 0xef, 0x39, 0x1b, 0x56, 0x5f, 0x31, 0x37, 0x21,
-    0x65, 0xfd, 0xff, 0xdf, 0xe6, 0xb1, 0x65, 0xfc, 0x08, 0x3e, 0x9c, 0x96,
-    0x5f, 0xcf, 0xfb, 0x63, 0x3a, 0xb2, 0xa1, 0x11, 0x38, 0x60, 0x65, 0x97,
-    0xc3, 0xf3, 0xfc, 0xb2, 0xfe, 0xff, 0x91, 0xe8, 0xe2, 0xca, 0x83, 0xd1,
-    0x72, 0x3b, 0xf7, 0xdd, 0xe6, 0x6c, 0xb2, 0xec, 0xd9, 0x65, 0x39, 0xe0,
-    0x91, 0x55, 0x42, 0x7e, 0x98, 0x44, 0x64, 0xde, 0x85, 0x69, 0x3f, 0x71,
-    0x86, 0xef, 0xc0, 0xb2, 0xdc, 0x59, 0x71, 0xb1, 0xc3, 0x52, 0x11, 0x8b,
-    0xdf, 0xb8, 0x16, 0x5f, 0x0b, 0x37, 0x21, 0x65, 0xf3, 0xed, 0x1d, 0x59,
-    0x7e, 0x72, 0x3d, 0xdd, 0xeb, 0x2d, 0xc2, 0x3c, 0xdd, 0xe4, 0x57, 0xed,
-    0x9f, 0x99, 0x25, 0x97, 0xff, 0xc3, 0xcd, 0xef, 0xa9, 0x84, 0x93, 0xf5,
-    0xda, 0xb2, 0xec, 0xdd, 0x59, 0x50, 0x89, 0x43, 0x28, 0xd2, 0x9d, 0xfc,
-    0xff, 0x7e, 0xd3, 0xe2, 0xcb, 0x30, 0xb2, 0xa1, 0x3b, 0xaf, 0x87, 0x66,
-    0x71, 0xd4, 0x2f, 0x7c, 0x5d, 0xf9, 0x7d, 0xfc, 0x62, 0xbc, 0xd0, 0xd5,
-    0x97, 0xb7, 0x23, 0x8b, 0x2b, 0xa7, 0x9a, 0x12, 0xeb, 0x33, 0x64, 0xba,
-    0x2c, 0x89, 0xe5, 0x22, 0x78, 0x91, 0xc4, 0xe7, 0x9e, 0xd0, 0xe7, 0x91,
-    0x08, 0xe1, 0x9b, 0x92, 0xa3, 0xfe, 0x87, 0x09, 0xc6, 0xab, 0x34, 0xe3,
-    0x96, 0xa3, 0x08, 0x69, 0x77, 0xa3, 0xea, 0x79, 0x47, 0x7f, 0xca, 0x84,
-    0x29, 0x41, 0x1c, 0x95, 0x1f, 0xd9, 0x56, 0x33, 0xf0, 0x82, 0x12, 0x3e,
-    0x7d, 0xc8, 0x56, 0x5f, 0xb4, 0x07, 0x70, 0x2a, 0x29, 0xc5, 0xfd, 0xe3,
-    0x69, 0x3b, 0x0b, 0x2c, 0xcf, 0x0f, 0x84, 0xcd, 0x2f, 0xe8, 0x6e, 0x6e,
-    0x47, 0x56, 0x5f, 0x7a, 0x09, 0x85, 0x94, 0xd3, 0xd1, 0xe9, 0x7d, 0xf6,
-    0x70, 0x49, 0x2c, 0xbf, 0xf1, 0xe9, 0xf9, 0xec, 0xc2, 0x02, 0xcb, 0xf3,
-    0x75, 0xac, 0xe2, 0xcb, 0xff, 0xf7, 0x83, 0xdd, 0x47, 0x79, 0x80, 0xe4,
-    0x68, 0x0b, 0x2f, 0xfb, 0x86, 0xc6, 0x4a, 0x3f, 0xe2, 0xcb, 0xfd, 0x1d,
-    0x30, 0x18, 0xe1, 0x65, 0xff, 0xfb, 0x26, 0x23, 0xe7, 0x60, 0x43, 0xd4,
-    0xd1, 0xe5, 0x95, 0xa4, 0x43, 0xf4, 0xc6, 0xfe, 0xfa, 0x50, 0xd0, 0xcc,
-    0xb2, 0xfe, 0x68, 0xe3, 0x81, 0x25, 0x97, 0xbb, 0xe3, 0x59, 0x50, 0x7f,
-    0x26, 0x60, 0xe5, 0xb7, 0xf3, 0xfd, 0xc9, 0xdc, 0x11, 0x65, 0xfb, 0xbf,
-    0x4a, 0x05, 0x59, 0x7f, 0x38, 0x99, 0xbe, 0x38, 0xb2, 0xb0, 0xf6, 0x42,
-    0x55, 0x7f, 0xe3, 0xfb, 0x85, 0x83, 0xf3, 0x8a, 0xb2, 0xff, 0xfb, 0x36,
-    0xcf, 0xbb, 0xc3, 0x28, 0xfd, 0xda, 0xb2, 0x98, 0x44, 0x7f, 0x0f, 0xef,
-    0xfd, 0x9e, 0x8d, 0x63, 0x31, 0x45, 0x15, 0x25, 0xc6, 0x2a, 0xcb, 0xb6,
-    0x67, 0x0b, 0x88, 0x32, 0x22, 0x19, 0x1e, 0x1e, 0x00, 0xa3, 0xe5, 0x63,
-    0x86, 0x0f, 0xa1, 0x39, 0xf9, 0x61, 0x42, 0x2f, 0xb0, 0xb0, 0x9f, 0x24,
-    0xdc, 0x43, 0xbf, 0x68, 0x0e, 0xe0, 0x54, 0x57, 0x8b, 0xff, 0xfb, 0x07,
-    0xe8, 0x11, 0x9f, 0x49, 0xff, 0xe7, 0x23, 0xf4, 0x96, 0x67, 0x88, 0x93,
-    0x9f, 0x34, 0xbf, 0xf9, 0x9b, 0xc9, 0x9e, 0x68, 0x0e, 0xe0, 0x54, 0x48,
-    0xeb, 0xb1, 0xab, 0x2e, 0xee, 0x2c, 0xa0, 0x1a, 0xcf, 0x85, 0xaf, 0xff,
-    0xfc, 0x4e, 0xcf, 0x7f, 0x60, 0x70, 0x16, 0x5e, 0xa3, 0xa7, 0xfc, 0x49,
-    0x65, 0xe3, 0xfe, 0x16, 0x5e, 0x06, 0x35, 0x23, 0x32, 0xf2, 0xfb, 0x1f,
-    0xef, 0xd6, 0x5f, 0x01, 0xdc, 0x0a, 0x89, 0x21, 0x7f, 0x3e, 0xb3, 0x7f,
-    0xb1, 0x65, 0x6c, 0x7f, 0xfa, 0x23, 0xfc, 0xba, 0xff, 0xfc, 0x7a, 0x3d,
-    0xc8, 0x2d, 0xa3, 0xa7, 0xe7, 0xd9, 0x65, 0xf9, 0xe5, 0xd3, 0xd9, 0x65,
-    0x41, 0xff, 0x9a, 0xbd, 0xff, 0xe7, 0xec, 0xdc, 0xc1, 0x8c, 0x2f, 0xa9,
-    0x2c, 0xbf, 0xfe, 0x7f, 0xb9, 0x9e, 0x72, 0xcd, 0x9a, 0x1f, 0x2c, 0xbf,
-    0xfb, 0xc7, 0xf7, 0x73, 0xee, 0xeb, 0x50, 0xb2, 0xff, 0xe3, 0x86, 0xb8,
-    0xc4, 0xdc, 0x82, 0x92, 0xca, 0xc4, 0x6e, 0x01, 0x43, 0xc8, 0xd7, 0xff,
-    0x8b, 0x3f, 0x9f, 0xcd, 0x46, 0xcf, 0xa0, 0x2c, 0xbf, 0xd9, 0xe7, 0x69,
-    0x47, 0xcb, 0x2e, 0x93, 0x38, 0x56, 0xa3, 0x90, 0xac, 0xf4, 0x2c, 0x3f,
-    0x20, 0xe4, 0x64, 0xfd, 0x2f, 0x11, 0x36, 0xfc, 0x1f, 0x80, 0x7c, 0x59,
-    0x7e, 0xcf, 0x33, 0xc6, 0xac, 0xb3, 0x38, 0x5c, 0xd8, 0x01, 0x13, 0xcb,
-    0xe0, 0xfe, 0x10, 0x9d, 0x29, 0xbf, 0xf9, 0x9b, 0xc9, 0x9e, 0x68, 0x0e,
-    0xe0, 0x54, 0x49, 0x4b, 0xf6, 0x80, 0xee, 0x05, 0x45, 0xe2, 0xbf, 0xe9,
-    0x33, 0xcd, 0x01, 0xdc, 0x0a, 0x89, 0x35, 0x66, 0x78, 0x7f, 0x6e, 0x69,
-    0x7c, 0x0f, 0x19, 0x2c, 0xbf, 0x73, 0x98, 0x58, 0xb2, 0xff, 0xb4, 0x08,
-    0xdb, 0x30, 0xba, 0xb2, 0xfe, 0x8e, 0x1b, 0x62, 0x65, 0x97, 0xce, 0x7f,
-    0x71, 0x65, 0xbc, 0xb2, 0xb1, 0x17, 0xc6, 0x4c, 0xd3, 0x8f, 0x16, 0x8a,
-    0x45, 0x7f, 0x8f, 0xfc, 0x28, 0xfb, 0x8b, 0x2f, 0x6f, 0x89, 0x2c, 0xbf,
-    0x47, 0x79, 0x9d, 0x59, 0x79, 0xc8, 0x78, 0x78, 0xbe, 0x1e, 0xbf, 0xe7,
-    0xd4, 0xb9, 0x81, 0xd6, 0xcb, 0x28, 0xcf, 0xac, 0x26, 0x37, 0xfd, 0x9f,
-    0x8f, 0xd0, 0x50, 0x2a, 0xcb, 0xef, 0xf9, 0x84, 0xb2, 0xa0, 0xf6, 0xcc,
-    0xe6, 0xff, 0xc1, 0x07, 0x38, 0xfa, 0xec, 0x30, 0xb2, 0xfd, 0xee, 0xf3,
-    0x3a, 0xb2, 0x8c, 0xfa, 0x1d, 0x02, 0xff, 0xfd, 0xe7, 0x3f, 0xf9, 0x8c,
-    0x3b, 0x75, 0x18, 0x4b, 0x2e, 0x31, 0xac, 0xa8, 0x3e, 0xaf, 0x2a, 0x5f,
-    0x48, 0x31, 0xf2, 0xcb, 0xfe, 0xd8, 0xf9, 0xc7, 0xff, 0xc1, 0x59, 0x7f,
-    0x1e, 0x86, 0x51, 0xf2, 0xcb, 0xff, 0xe0, 0xbf, 0xd9, 0x8c, 0x30, 0xf2,
-    0xcf, 0xba, 0xb2, 0xfe, 0xf6, 0x67, 0x7d, 0x8b, 0x2f, 0xfa, 0x25, 0xcd,
-    0x69, 0xcb, 0xab, 0x2a, 0x4a, 0x9d, 0x07, 0x08, 0x80, 0x42, 0x2a, 0x62,
-    0x1d, 0x11, 0xf8, 0xef, 0x85, 0xbd, 0x52, 0xde, 0x59, 0x7f, 0x67, 0x7b,
-    0x05, 0xb2, 0xcb, 0xf6, 0x0d, 0x95, 0x96, 0xea, 0xcb, 0xf9, 0xcb, 0xf6,
-    0x56, 0x5b, 0xab, 0x2e, 0x71, 0xef, 0x3e, 0x69, 0xf3, 0x0a, 0xf2, 0x31,
-    0x43, 0x09, 0x3b, 0xce, 0x40, 0x59, 0x7b, 0xd0, 0x22, 0xca, 0xe9, 0xb8,
-    0x14, 0x6e, 0xfe, 0x27, 0xfc, 0x9d, 0xab, 0x2f, 0xe8, 0x1f, 0xb7, 0x4c,
-    0x96, 0x5f, 0xf4, 0x37, 0xd8, 0x31, 0x9f, 0xcb, 0x2b, 0x0f, 0xa0, 0xcb,
-    0xef, 0xb7, 0x0e, 0x18, 0x59, 0x7a, 0x5f, 0x30, 0xb2, 0xfe, 0x6f, 0x7c,
-    0x1e, 0xf1, 0x65, 0xe0, 0x8f, 0xe5, 0x97, 0xff, 0x3f, 0xe0, 0xf1, 0xe8,
-    0x8f, 0xbc, 0x59, 0x7f, 0xb7, 0xe4, 0xbd, 0x04, 0xc2, 0xcb, 0x8b, 0x65,
-    0x95, 0x09, 0x90, 0x8c, 0x97, 0x07, 0xcc, 0xbd, 0xc7, 0xbf, 0x44, 0x10,
-    0xd6, 0xdd, 0x59, 0x76, 0xb1, 0x65, 0xef, 0xc4, 0xd9, 0x65, 0x68, 0xf1,
-    0xff, 0x11, 0x21, 0x6b, 0xb1, 0xab, 0x2f, 0x6b, 0x7f, 0x96, 0x5f, 0xb3,
-    0x4f, 0x03, 0x59, 0x50, 0x7b, 0x6e, 0x2c, 0x43, 0xf7, 0xfe, 0xd0, 0x5b,
-    0xe3, 0x86, 0xb9, 0x2c, 0xbf, 0xee, 0x43, 0x4b, 0x25, 0x04, 0xb2, 0xb4,
-    0x7e, 0x7d, 0x3d, 0xb8, 0xa4, 0xb2, 0xe9, 0xec, 0x55, 0x94, 0x13, 0x67,
-    0x3e, 0x2d, 0x58, 0x7f, 0x3b, 0x8a, 0xb7, 0xff, 0x00, 0x2e, 0x3d, 0xf8,
-    0x36, 0x56, 0x5b, 0xab, 0x2f, 0x8f, 0xd1, 0xbd, 0x65, 0x68, 0xfc, 0xba,
-    0x9f, 0x7f, 0xa3, 0x51, 0xf7, 0xfa, 0x85, 0x97, 0x16, 0xcb, 0x2f, 0x78,
-    0x3b, 0xab, 0x2f, 0xe2, 0x8e, 0xf9, 0xe4, 0xb2, 0xa0, 0xf3, 0x26, 0x20,
-    0xbd, 0xd8, 0xd2, 0xca, 0x84, 0x7b, 0xec, 0x45, 0x31, 0xa3, 0xb1, 0x84,
-    0x8a, 0xe7, 0x02, 0xcb, 0xf8, 0x03, 0x0e, 0xc2, 0x35, 0x65, 0xfd, 0xf7,
-    0x31, 0xaf, 0xc5, 0x97, 0xc3, 0xcf, 0x42, 0xcb, 0xfb, 0x36, 0xd4, 0x7d,
-    0xa5, 0x97, 0xf8, 0x23, 0xc9, 0x47, 0xfc, 0x59, 0x50, 0x8f, 0x9c, 0x16,
-    0x33, 0x17, 0x2e, 0x22, 0x1e, 0x17, 0xdf, 0xc5, 0xd6, 0xcc, 0x43, 0x59,
-    0x7e, 0x9b, 0x9c, 0x36, 0xac, 0xbd, 0xc0, 0xfc, 0xb2, 0xff, 0xfb, 0x61,
-    0x5e, 0x5c, 0xe6, 0x68, 0x58, 0xd3, 0x0b, 0x2c, 0x4b, 0x2f, 0xe7, 0xef,
-    0x36, 0xc1, 0x56, 0x5f, 0xff, 0xc7, 0xc7, 0x97, 0x0f, 0x7f, 0x02, 0xe7,
-    0x23, 0xde, 0xb2, 0xe1, 0x04, 0x59, 0x58, 0x9a, 0x84, 0xc5, 0x2e, 0x3d,
-    0xfa, 0xa1, 0x08, 0x74, 0xbc, 0x45, 0xdb, 0xf6, 0x6b, 0xff, 0xe1, 0x65,
-    0xd3, 0xec, 0xd9, 0x0d, 0x80, 0xf4, 0x43, 0x7e, 0x49, 0x23, 0x87, 0x1e,
-    0x4a, 0xf0, 0x04, 0x6a, 0x5f, 0x30, 0x4c, 0x45, 0xa8, 0x4a, 0x7a, 0x34,
-    0x17, 0x85, 0x57, 0xf0, 0x8a, 0x28, 0xc6, 0x39, 0x1c, 0x6f, 0x63, 0x43,
-    0x9f, 0x52, 0x12, 0x37, 0xed, 0xc6, 0x5b, 0xfc, 0x1d, 0x99, 0xee, 0x6e,
-    0x1b, 0x0b, 0x2a, 0x1f, 0x11, 0x4b, 0x68, 0x49, 0xca, 0xd1, 0x78, 0x8e,
-    0x50, 0xb1, 0xce, 0x5d, 0x4d, 0x1b, 0x7b, 0x4b, 0x7d, 0x3a, 0xb1, 0xd6,
-    0x00, 0xc3, 0x3c, 0x4a, 0xc1, 0x1b, 0x72, 0x35, 0x7a, 0x65, 0x4a, 0x4a,
-    0x42, 0x3c, 0x5a, 0x9b, 0xcd, 0xa7, 0x35, 0xe5, 0x4b, 0x3e, 0x1d, 0x23,
-    0x67, 0x33, 0x4e, 0xbe, 0x62, 0x95, 0x04, 0x0c, 0x54, 0x1b, 0xfd, 0x6a,
-    0xab, 0x8e, 0xb5, 0x1a, 0xdd, 0x94, 0xab, 0x35, 0xf7, 0xa4, 0x6a, 0xfa,
-    0xa9, 0x5b, 0xac, 0x84, 0x9b, 0xd5, 0xd9, 0xab, 0xdf, 0xc7, 0xdf, 0xf5,
-    0x86, 0x7b, 0x2e, 0x5f, 0x79, 0x5b, 0x33, 0xde, 0x5b, 0x6b, 0x1e, 0xe3,
-    0x24, 0x80, 0x37, 0xdc, 0x2b, 0xbe, 0xb1, 0xf5, 0x16, 0x9b, 0x23, 0x3f,
-    0x3d, 0x92, 0x25, 0x3f, 0x5f, 0x72, 0xf1, 0x73, 0x68,
+    0xfb, 0x5d, 0xbb, 0xf6, 0xa8, 0x89, 0x57, 0xbc, 0xda, 0x59, 0x7f, 0xcf,
+    0x2c, 0xd6, 0x7f, 0xa9, 0xd6, 0x5f, 0xf3, 0x0f, 0x0a, 0x4d, 0xe0, 0xac,
+    0xb0, 0xbc, 0x46, 0x1c, 0xc6, 0xc7, 0x1c, 0xf9, 0xd5, 0xdb, 0x59, 0xab,
+    0x2e, 0x00, 0x56, 0x5e, 0x91, 0x6e, 0x2c, 0xbb, 0xaf, 0xac, 0xbf, 0xfe,
+    0x8f, 0x44, 0x89, 0xcd, 0xea, 0x51, 0x9f, 0x59, 0x7f, 0xd8, 0x7e, 0xbe,
+    0xde, 0xcd, 0xd5, 0x96, 0xe2, 0xca, 0x19, 0xe6, 0xb9, 0xe5, 0xf0, 0x77,
+    0x47, 0x0b, 0x2a, 0x48, 0xfa, 0x18, 0xc3, 0x42, 0x73, 0xc4, 0x37, 0xfb,
+    0x0c, 0x28, 0xff, 0x99, 0x65, 0xc0, 0x3a, 0xcb, 0x9d, 0x96, 0x54, 0x1a,
+    0xcf, 0x0b, 0xdf, 0xfe, 0x08, 0xaf, 0x9d, 0xf9, 0xbd, 0x19, 0xa9, 0x2c,
+    0xbf, 0xec, 0xf0, 0x93, 0x71, 0xba, 0x31, 0x65, 0x42, 0x23, 0x09, 0x3e,
+    0xc4, 0xb2, 0xff, 0x48, 0xb3, 0x79, 0x67, 0x16, 0x56, 0x1e, 0x1b, 0x88,
+    0x5f, 0xfc, 0x13, 0xf8, 0xb3, 0xaf, 0x93, 0xf9, 0x65, 0xff, 0xfa, 0x44,
+    0xff, 0x73, 0xf2, 0x07, 0x1e, 0x89, 0x2c, 0xae, 0x22, 0x5c, 0x44, 0x4b,
+    0xb3, 0x8b, 0x2f, 0x3b, 0xf6, 0xa8, 0x8b, 0x55, 0x23, 0xe3, 0xc2, 0x4e,
+    0xc5, 0xaf, 0xff, 0xef, 0x3e, 0x13, 0xff, 0x9c, 0xef, 0xcd, 0xbe, 0x38,
+    0xb2, 0xfb, 0xe4, 0xe6, 0xac, 0xbf, 0x46, 0xb3, 0xaf, 0xac, 0xb3, 0x69,
+    0x14, 0xde, 0x5c, 0x01, 0x15, 0xf9, 0x8d, 0xfe, 0xa1, 0x65, 0xda, 0xe2,
+    0xcb, 0xfe, 0x6f, 0xb9, 0xde, 0x4f, 0xa5, 0x97, 0xb8, 0x27, 0xd6, 0x50,
+    0xd5, 0x5c, 0x6a, 0x31, 0xaf, 0x43, 0x54, 0x8d, 0x78, 0x51, 0xbc, 0x5c,
+    0x43, 0x7b, 0xbf, 0xf5, 0x97, 0xff, 0xc1, 0xff, 0x07, 0xe8, 0xe4, 0x78,
+    0x31, 0xc5, 0x97, 0xff, 0xcf, 0xec, 0x2d, 0x6b, 0x3a, 0x97, 0xd8, 0xeb,
+    0x2a, 0x48, 0xb6, 0x34, 0x5c, 0x2a, 0x17, 0x77, 0x0b, 0x2f, 0x8e, 0xc6,
+    0x71, 0x65, 0xff, 0xe3, 0x5b, 0x5f, 0xeb, 0xb6, 0xc3, 0x25, 0x3a, 0xca,
+    0x39, 0xf9, 0x7c, 0x8e, 0xff, 0x9c, 0x42, 0xc9, 0xb5, 0x06, 0x2c, 0xa6,
+    0x3d, 0xc0, 0x91, 0x5c, 0x46, 0x2c, 0xac, 0x4c, 0x77, 0xd0, 0xe5, 0x30,
+    0x86, 0xfe, 0x3b, 0x75, 0xc8, 0xe9, 0x65, 0xff, 0xd1, 0x85, 0xf0, 0xb8,
+    0xf9, 0x06, 0xac, 0xbf, 0xa0, 0x7d, 0x72, 0x26, 0x59, 0x50, 0x8a, 0x19,
+    0x17, 0xf1, 0x0e, 0xe7, 0xde, 0xb2, 0xfa, 0x3b, 0x38, 0x56, 0x53, 0x1b,
+    0xb2, 0x18, 0xbd, 0xa6, 0xe9, 0x65, 0x0c, 0xde, 0x7c, 0x7e, 0xfd, 0xd0,
+    0xf4, 0xf2, 0x59, 0x7f, 0x82, 0x02, 0xc9, 0xc4, 0x92, 0xcb, 0xfd, 0x1f,
+    0xe1, 0xc3, 0x13, 0xac, 0xa8, 0x44, 0x97, 0x8a, 0x48, 0xd6, 0xff, 0xc5,
+    0xff, 0x64, 0x8c, 0x8e, 0xb8, 0xb2, 0xff, 0xd1, 0xd7, 0x3e, 0xd3, 0xce,
+    0xdf, 0x59, 0x70, 0xe1, 0x65, 0x42, 0x25, 0xf4, 0x80, 0x48, 0x37, 0x98,
+    0x0e, 0xb2, 0xc3, 0x59, 0x7f, 0xb9, 0x1a, 0x9a, 0x66, 0xf2, 0xca, 0x19,
+    0xe3, 0x70, 0x46, 0xfe, 0xd4, 0x1f, 0x08, 0xeb, 0x2f, 0xf1, 0x37, 0x18,
+    0xba, 0x92, 0xca, 0xd1, 0xef, 0x18, 0x59, 0x73, 0x4e, 0xb2, 0xf1, 0xc0,
+    0xcb, 0x2f, 0xed, 0x3f, 0x1f, 0x3c, 0xb2, 0xdf, 0x73, 0xc8, 0x08, 0xe5,
+    0xd1, 0xb8, 0xb2, 0x86, 0x89, 0xf6, 0x5f, 0x39, 0x3d, 0x62, 0x6e, 0x2d,
+    0x08, 0x07, 0x86, 0x15, 0xff, 0x1f, 0x35, 0xa6, 0xde, 0xfd, 0xac, 0xbf,
+    0xfb, 0xbd, 0x41, 0xb0, 0x5f, 0xda, 0x7b, 0x4f, 0x6a, 0x59, 0x78, 0x52,
+    0x43, 0x59, 0x7f, 0x6b, 0x3c, 0xdd, 0x12, 0xcb, 0xe3, 0x41, 0x1f, 0x59,
+    0x6f, 0x41, 0xe8, 0x31, 0x6d, 0xfd, 0xe2, 0x0b, 0x9b, 0xda, 0xcb, 0xfa,
+    0x35, 0x83, 0x79, 0x2c, 0xa1, 0xa2, 0x05, 0x89, 0x84, 0x2f, 0xb8, 0xb8,
+    0xb2, 0xa1, 0x38, 0xe1, 0xab, 0xe4, 0x3c, 0x48, 0xc2, 0xff, 0xbb, 0x13,
+    0xed, 0x23, 0x33, 0xcb, 0x2f, 0xff, 0x7f, 0x99, 0x31, 0x41, 0xf5, 0xa8,
+    0xe9, 0x65, 0xff, 0x04, 0x56, 0x3c, 0xff, 0x33, 0xcb, 0x2d, 0xf8, 0x44,
+    0x43, 0xa5, 0xdf, 0xf7, 0x78, 0x59, 0x3c, 0xe1, 0x25, 0x96, 0xdc, 0x59,
+    0x7d, 0xae, 0x61, 0x8b, 0x2f, 0xc4, 0x51, 0xd0, 0x90, 0x6d, 0xf0, 0x52,
+    0xfe, 0x6e, 0x6b, 0x51, 0x25, 0x97, 0xff, 0xcd, 0xf0, 0xe9, 0xf9, 0xf6,
+    0xdb, 0xc0, 0x42, 0xca, 0xec, 0xff, 0x9c, 0xb6, 0xff, 0xfd, 0x80, 0xe3,
+    0x74, 0x66, 0x77, 0x04, 0x17, 0x92, 0xcb, 0xfe, 0x2f, 0xf3, 0xf9, 0x86,
+    0x71, 0x65, 0xcf, 0xe5, 0x95, 0x87, 0x9f, 0xd1, 0xcd, 0xff, 0xfa, 0x69,
+    0x40, 0x35, 0x9d, 0xc4, 0x9b, 0x4d, 0xc5, 0x95, 0x07, 0xf1, 0x84, 0x57,
+    0xec, 0xf6, 0xd6, 0x2a, 0x0a, 0xb5, 0x95, 0x0a, 0xeb, 0x72, 0x18, 0x9d,
+    0x93, 0xb3, 0x8f, 0xa1, 0x74, 0x44, 0x5f, 0x8c, 0x74, 0xc2, 0x0b, 0xff,
+    0x67, 0xdc, 0x80, 0xe7, 0x3b, 0x2c, 0xbf, 0xff, 0xf0, 0x7d, 0x83, 0xff,
+    0xb0, 0xf9, 0xef, 0x3b, 0x7e, 0x3f, 0xc5, 0x97, 0xcd, 0xcc, 0x25, 0x95,
+    0x24, 0x63, 0xb1, 0xe7, 0x1a, 0xef, 0x1b, 0x9b, 0xab, 0x2e, 0xdd, 0xdd,
+    0x59, 0x76, 0x74, 0x92, 0xd0, 0x92, 0xc0, 0xd1, 0xa7, 0x00, 0xbd, 0xfe,
+    0xfe, 0x68, 0x07, 0x6e, 0x24, 0x16, 0x69, 0xef, 0xe9, 0x79, 0xb7, 0xe4,
+    0xcb, 0x2a, 0x0f, 0xd5, 0xd1, 0x6f, 0xef, 0x37, 0x70, 0x76, 0x59, 0x7f,
+    0xa0, 0x13, 0xbc, 0xa3, 0x71, 0x65, 0x41, 0xf1, 0x91, 0x6d, 0xff, 0xf8,
+    0xb0, 0x0e, 0x40, 0x10, 0xff, 0x0b, 0xcf, 0x0b, 0x28, 0x8f, 0xd7, 0xe4,
+    0x16, 0x17, 0xb5, 0xb6, 0xd3, 0xdb, 0x50, 0xe8, 0xab, 0x17, 0x88, 0xc6,
+    0x67, 0x41, 0x92, 0xf0, 0xe1, 0x59, 0x92, 0xc7, 0x0d, 0x8c, 0xa7, 0xb8,
+    0xd3, 0xba, 0x86, 0xbb, 0x42, 0x9a, 0x68, 0x59, 0xea, 0x18, 0xa7, 0x2e,
+    0xf4, 0x7a, 0x4e, 0x70, 0x51, 0xe4, 0xf2, 0x5f, 0x6f, 0xe3, 0x48, 0x09,
+    0x79, 0x84, 0x1b, 0x70, 0xe0, 0x12, 0x1f, 0x17, 0xff, 0xff, 0x39, 0xc5,
+    0xb6, 0xb4, 0x1d, 0x6a, 0x0b, 0x0d, 0x6f, 0x7b, 0x04, 0x59, 0x7d, 0xa0,
+    0xff, 0x16, 0x5f, 0xfc, 0x69, 0x9b, 0x93, 0x8c, 0x51, 0xb3, 0x67, 0xb6,
+    0xd6, 0x5f, 0xa2, 0x77, 0xd7, 0x6b, 0x2e, 0x6d, 0xeb, 0x2f, 0x47, 0xf8,
+    0xb2, 0xf7, 0x02, 0x7d, 0x1e, 0xe8, 0x0a, 0x48, 0x62, 0xb6, 0x9a, 0x3d,
+    0x5a, 0x16, 0xb7, 0xfb, 0x01, 0xcc, 0xed, 0xc6, 0xb2, 0xfc, 0x4e, 0x67,
+    0x38, 0xb2, 0xb0, 0xf6, 0xf4, 0x67, 0x7d, 0xdb, 0xbf, 0x6a, 0x8a, 0x89,
+    0x78, 0xd8, 0xe2, 0xcb, 0xfb, 0xd1, 0xf8, 0xe8, 0xc5, 0x97, 0xc5, 0x26,
+    0x3a, 0xcb, 0xf4, 0xb0, 0x98, 0x6b, 0x2b, 0x11, 0x26, 0xc3, 0xae, 0x5f,
+    0xf2, 0x1a, 0xd2, 0x3f, 0x4f, 0x0c, 0x3b, 0xef, 0x66, 0xb1, 0x65, 0xe6,
+    0x9b, 0x75, 0x65, 0x41, 0xe0, 0xf8, 0x86, 0xfd, 0xdb, 0xfa, 0x3c, 0xb2,
+    0xff, 0xfe, 0x09, 0x39, 0xbb, 0x3e, 0x6c, 0x14, 0xb3, 0xcc, 0x75, 0x97,
+    0x04, 0x45, 0x97, 0xc3, 0x1c, 0x1d, 0x65, 0xff, 0xf4, 0xa7, 0xda, 0x71,
+    0xb4, 0x4f, 0xde, 0xb6, 0x6c, 0xf6, 0xda, 0xca, 0x84, 0x50, 0xb0, 0xc0,
+    0x08, 0xaf, 0xda, 0x6e, 0xdb, 0x7a, 0xcb, 0xe1, 0xc6, 0x12, 0xcb, 0xf3,
+    0x9b, 0x9e, 0x75, 0x95, 0x87, 0x8e, 0x12, 0x0b, 0xff, 0xf8, 0x24, 0xe6,
+    0xec, 0xf9, 0xb0, 0x52, 0xcf, 0x31, 0xd6, 0x5f, 0x6b, 0x59, 0xb6, 0xb2,
+    0x8e, 0x88, 0x27, 0x5d, 0xbf, 0xff, 0x3c, 0x8a, 0x39, 0x9d, 0x76, 0x4f,
+    0x9d, 0x76, 0xb2, 0xfd, 0x06, 0x67, 0x9d, 0x65, 0xe1, 0xb6, 0xf5, 0x96,
+    0x17, 0x0b, 0xcd, 0x92, 0x8c, 0x5c, 0x70, 0x88, 0xc8, 0xc7, 0xbb, 0x69,
+    0x62, 0x13, 0x94, 0x7a, 0x1f, 0xce, 0x5c, 0x4e, 0x3c, 0x85, 0x1e, 0xf2,
+    0x21, 0x15, 0xb7, 0x49, 0xef, 0xfb, 0x0e, 0x2f, 0x6f, 0x09, 0xbe, 0xb2,
+    0xff, 0xbc, 0xda, 0xf3, 0xf3, 0x04, 0x59, 0x70, 0xc9, 0x65, 0xfc, 0xcf,
+    0x2f, 0xb4, 0xeb, 0x2f, 0x3f, 0xd9, 0x65, 0xd0, 0x2f, 0x11, 0x2f, 0xd1,
+    0xcf, 0x85, 0xb8, 0x5b, 0x43, 0x4c, 0x77, 0x90, 0xd3, 0xbd, 0x86, 0x62,
+    0xcb, 0xc1, 0x89, 0xd6, 0x5f, 0xcf, 0x2e, 0xb9, 0x13, 0xac, 0xbf, 0xe7,
+    0xe8, 0xb3, 0x7e, 0x9b, 0x8b, 0x2f, 0xcd, 0x12, 0x79, 0x2c, 0xa1, 0xa2,
+    0x3c, 0xe5, 0xfe, 0x3a, 0xbf, 0xb2, 0x71, 0xc6, 0x0d, 0x65, 0xf0, 0xfc,
+    0xd3, 0x2c, 0xac, 0x3d, 0x07, 0x2d, 0xbf, 0x13, 0xee, 0xe4, 0xeb, 0x2f,
+    0x18, 0xfe, 0x59, 0x74, 0x0d, 0x65, 0x41, 0xb3, 0xf0, 0xed, 0xff, 0x39,
+    0x7f, 0x9a, 0xc8, 0x3a, 0xcb, 0xf3, 0x11, 0x07, 0x71, 0x65, 0xff, 0x73,
+    0x07, 0x9a, 0x94, 0x69, 0x65, 0x41, 0xf0, 0xe8, 0xa6, 0xd3, 0xac, 0xa8,
+    0x36, 0x78, 0x43, 0x7d, 0xdc, 0x68, 0xd5, 0x97, 0xe9, 0x3f, 0xe4, 0xeb,
+    0x2f, 0xa0, 0x00, 0x85, 0x95, 0x07, 0x90, 0x44, 0xf7, 0xfc, 0x43, 0xcd,
+    0x0d, 0xdc, 0x6b, 0x2c, 0x15, 0x95, 0x07, 0x90, 0xe6, 0xf6, 0x25, 0x97,
+    0xe9, 0xf4, 0xef, 0xf5, 0x94, 0xc6, 0xe1, 0xc4, 0x2f, 0xbc, 0xde, 0x16,
+    0x29, 0x5c, 0x1a, 0x18, 0xe6, 0x42, 0xb0, 0xd8, 0x40, 0x76, 0x41, 0x32,
+    0xe9, 0xc8, 0x3d, 0x0c, 0xbe, 0x0f, 0xfd, 0xb0, 0xc6, 0x8d, 0xb5, 0x8b,
+    0xdc, 0xc2, 0x59, 0x7e, 0xd7, 0x6e, 0xfd, 0xaa, 0x2b, 0xd5, 0xf9, 0xb7,
+    0x7b, 0x0c, 0xeb, 0x2d, 0x25, 0x96, 0x3a, 0xca, 0x83, 0x44, 0xe2, 0x37,
+    0x40, 0x16, 0x5e, 0xf4, 0x74, 0xb2, 0xfe, 0x9c, 0x4d, 0xb7, 0x20, 0x2c,
+    0xbf, 0xf3, 0x90, 0x33, 0xf0, 0x4c, 0x05, 0x95, 0x07, 0xdb, 0xb6, 0x65,
+    0x61, 0x72, 0x4e, 0x0f, 0x06, 0xf4, 0x6c, 0xe9, 0xe0, 0x1f, 0x08, 0xb0,
+    0x90, 0x8a, 0xbf, 0xf8, 0x5b, 0xc8, 0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x12,
+    0x32, 0xff, 0xf0, 0xb3, 0xbc, 0x85, 0xe6, 0xbb, 0x77, 0xed, 0x51, 0x3c,
+    0x2f, 0xff, 0x0b, 0x3b, 0xc8, 0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x13, 0xfa,
+    0xff, 0xf0, 0xb3, 0xbc, 0x85, 0xe6, 0xbb, 0x77, 0xed, 0x51, 0x43, 0x2f,
+    0xfc, 0xf2, 0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x45, 0x10, 0xbf, 0x9f, 0xb1,
+    0x60, 0x69, 0xd6, 0x51, 0xcf, 0xff, 0x7a, 0x75, 0xff, 0xa4, 0x2c, 0x3c,
+    0xd9, 0x1c, 0x89, 0x2c, 0xa1, 0x67, 0xcf, 0x04, 0x97, 0xfe, 0x99, 0xbd,
+    0xd6, 0x7c, 0x78, 0x75, 0x97, 0xff, 0x9c, 0x58, 0xdc, 0x9f, 0xbd, 0x82,
+    0x39, 0xd6, 0x5f, 0xcd, 0xf6, 0xd3, 0x81, 0x65, 0xf6, 0x7f, 0x00, 0xb2,
+    0xfc, 0x41, 0x79, 0x71, 0x65, 0x8e, 0xb2, 0xff, 0xb7, 0xe7, 0x52, 0xd3,
+    0xbc, 0x96, 0x5e, 0x27, 0x17, 0x24, 0x60, 0x11, 0x67, 0xc8, 0x76, 0xc9,
+    0xc4, 0x11, 0xbf, 0xff, 0x7b, 0x0b, 0x0d, 0xf3, 0xcb, 0xc6, 0x38, 0x87,
+    0x59, 0x7d, 0xdb, 0xbf, 0x6a, 0x8a, 0x45, 0x52, 0x44, 0x3e, 0x95, 0xef,
+    0xc1, 0xf9, 0x47, 0x96, 0x5f, 0xfd, 0xed, 0xef, 0xae, 0x3f, 0xb9, 0x13,
+    0xac, 0xbf, 0xf9, 0xfa, 0xe7, 0x8c, 0x80, 0x6c, 0x10, 0xeb, 0x2f, 0xfa,
+    0x25, 0x1a, 0x9e, 0x35, 0x3a, 0xcb, 0xff, 0xc5, 0x9e, 0xf9, 0x40, 0x30,
+    0x9e, 0x4b, 0x2f, 0xf1, 0x41, 0xf8, 0x0f, 0xba, 0xcb, 0xfc, 0xff, 0x3b,
+    0x7f, 0xcc, 0xb2, 0xf3, 0xc8, 0x5e, 0x27, 0x7f, 0x31, 0x1b, 0x93, 0x81,
+    0x1c, 0x92, 0xb8, 0x75, 0xf4, 0x61, 0x0c, 0xaf, 0x85, 0xc6, 0x1d, 0x65,
+    0xff, 0xf8, 0x58, 0x9d, 0xe7, 0xe0, 0xbf, 0xc7, 0x20, 0xe2, 0xca, 0x63,
+    0xfa, 0xde, 0x47, 0x7f, 0xfa, 0x42, 0xf4, 0xe0, 0x7f, 0xb6, 0xb0, 0xeb,
+    0x2f, 0xfd, 0xd7, 0x24, 0xdc, 0xe4, 0x6a, 0x4b, 0x2f, 0xf9, 0xbb, 0x83,
+    0xf3, 0xf1, 0x25, 0x97, 0x7b, 0x16, 0x5d, 0x06, 0x2c, 0xbf, 0x83, 0xa0,
+    0x6c, 0x1c, 0xcb, 0x2c, 0x2e, 0x48, 0x98, 0x19, 0xcf, 0x85, 0xb8, 0x2f,
+    0x4e, 0x98, 0xe8, 0x21, 0xb1, 0x7f, 0x4b, 0x3d, 0xe7, 0x92, 0xcb, 0xff,
+    0xe6, 0x98, 0x5f, 0xfc, 0xce, 0x08, 0x08, 0xae, 0x16, 0x5f, 0xfb, 0xb1,
+    0x63, 0x6d, 0x8e, 0x5d, 0xc2, 0xca, 0xc4, 0x4c, 0x3a, 0xad, 0xff, 0xfd,
+    0x83, 0xf4, 0x08, 0x2f, 0xe4, 0xe0, 0xe7, 0x20, 0x09, 0x2c, 0x2e, 0x17,
+    0xf9, 0xc6, 0x81, 0xdc, 0x61, 0xc7, 0x95, 0x4b, 0xe8, 0x7f, 0x39, 0x18,
+    0x23, 0x68, 0xf9, 0x46, 0xf8, 0x62, 0xed, 0x90, 0xde, 0xe6, 0x71, 0x65,
+    0xf0, 0x77, 0x47, 0x0b, 0x2b, 0xa3, 0xc1, 0xf0, 0xe5, 0xff, 0xf7, 0xa3,
+    0xcc, 0x6f, 0x39, 0x84, 0x0d, 0xbc, 0x59, 0x7d, 0xdb, 0xbf, 0x6a, 0x89,
+    0x41, 0x7f, 0xe8, 0x01, 0xde, 0x5e, 0x87, 0xd2, 0xca, 0x92, 0x2f, 0xf4,
+    0xa4, 0x46, 0x17, 0xf9, 0xcc, 0x2c, 0x04, 0x01, 0x65, 0xfe, 0xc1, 0xe0,
+    0xe0, 0xbe, 0xb2, 0x88, 0xf8, 0xf8, 0x65, 0x7e, 0x91, 0x34, 0x1a, 0xb2,
+    0xff, 0xe7, 0xff, 0x04, 0x20, 0xc8, 0xb0, 0xeb, 0x29, 0xcf, 0xac, 0x89,
+    0xef, 0xfa, 0x25, 0xc0, 0x80, 0xef, 0x25, 0x97, 0xff, 0x67, 0xf9, 0x07,
+    0xcf, 0xb8, 0x45, 0x6b, 0x2f, 0x0f, 0x50, 0xb2, 0xf3, 0x8f, 0x16, 0x56,
+    0x1b, 0x7e, 0x0e, 0x5f, 0xf4, 0xb3, 0xc5, 0x9f, 0xf3, 0x2c, 0xbf, 0xfc,
+    0xf3, 0xb6, 0xb4, 0xdd, 0x4b, 0xef, 0xd2, 0xcb, 0xde, 0xf9, 0xd6, 0x5f,
+    0x0b, 0x79, 0x0b, 0x85, 0x72, 0xf9, 0x0e, 0x29, 0xa1, 0x24, 0x78, 0x46,
+    0x78, 0x80, 0x8e, 0x78, 0xfd, 0xf2, 0x0d, 0xb3, 0x7d, 0xd4, 0xca, 0x9d,
+    0xdc, 0x1a, 0x4a, 0xb6, 0xe3, 0x1c, 0x77, 0x1d, 0xcf, 0x70, 0x34, 0xa0,
+    0x4d, 0xc9, 0xc4, 0x3d, 0x4a, 0x5d, 0x3b, 0x8f, 0x95, 0x80, 0xb8, 0x2b,
+    0x5c, 0xe4, 0x68, 0x41, 0xa4, 0x05, 0x6e, 0xce, 0x47, 0xdf, 0xfe, 0x16,
+    0x77, 0x90, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x27, 0x35, 0xff, 0xe1, 0x67,
+    0x79, 0x0b, 0xcd, 0x76, 0xef, 0xda, 0xa2, 0x89, 0x5f, 0xf0, 0x5f, 0x52,
+    0x15, 0x37, 0x81, 0x96, 0x5e, 0x6e, 0xb8, 0xb2, 0xf1, 0x41, 0xd6, 0x5f,
+    0xf1, 0x3f, 0x5f, 0x7f, 0xc9, 0xd6, 0x5f, 0xde, 0xcc, 0xff, 0xb1, 0x65,
+    0x4e, 0x89, 0xc6, 0x1d, 0x00, 0xdf, 0xce, 0x2e, 0xdf, 0x0b, 0x2f, 0xe1,
+    0xea, 0x37, 0xb6, 0xf5, 0x97, 0xf3, 0x72, 0x69, 0x30, 0x16, 0x5f, 0xd8,
+    0x31, 0x06, 0xe7, 0x59, 0x7f, 0xfe, 0xc2, 0x96, 0xcc, 0x1b, 0x73, 0xaf,
+    0x85, 0xf8, 0xb2, 0xff, 0x44, 0xe2, 0x6d, 0xb9, 0x01, 0x65, 0xd2, 0x16,
+    0x35, 0x49, 0x99, 0x0d, 0xce, 0xcf, 0x58, 0x63, 0xc6, 0x3b, 0xcb, 0x8c,
+    0x2e, 0x11, 0x5e, 0xfe, 0xe1, 0x6c, 0xda, 0xc6, 0xcb, 0x2f, 0xfc, 0x58,
+    0x08, 0x06, 0xb5, 0x06, 0x2c, 0xb0, 0xb8, 0x3f, 0x2e, 0x1a, 0x56, 0x93,
+    0x24, 0x04, 0x3e, 0xeb, 0x4b, 0x8a, 0x3c, 0x5c, 0x0c, 0xbc, 0xcb, 0xf6,
+    0xbb, 0x77, 0xed, 0x51, 0x0e, 0x2f, 0xe0, 0xf7, 0xa6, 0x82, 0x59, 0x7e,
+    0x62, 0xfc, 0x1d, 0x65, 0x85, 0xe2, 0x22, 0x7c, 0x6d, 0xb6, 0x5b, 0x7f,
+    0xe6, 0x1e, 0x1c, 0xb3, 0xaf, 0xba, 0xcb, 0xfd, 0xac, 0xef, 0xd1, 0xd4,
+    0x96, 0x58, 0xc5, 0x95, 0x07, 0x8f, 0x86, 0xb4, 0xb2, 0xff, 0xe2, 0x73,
+    0x7b, 0xf3, 0x6b, 0x50, 0x62, 0xcb, 0xff, 0xbb, 0xf4, 0x1a, 0xdc, 0x15,
+    0x5b, 0x53, 0xf9, 0x65, 0x82, 0xb2, 0xb7, 0x0f, 0x88, 0xea, 0x37, 0x11,
+    0x2c, 0xbe, 0xed, 0xdf, 0xb5, 0x44, 0x5e, 0xbf, 0xd9, 0xd0, 0x38, 0xed,
+    0x3a, 0xcb, 0xf1, 0x38, 0x1f, 0x8b, 0x2f, 0xd9, 0x34, 0x9f, 0x8b, 0x29,
+    0x91, 0xd9, 0x31, 0x2e, 0x85, 0x48, 0xc3, 0xe6, 0x82, 0x13, 0x5f, 0xe9,
+    0xfd, 0x9e, 0xc6, 0x9d, 0x65, 0xe8, 0x33, 0xeb, 0x2c, 0xfa, 0x3d, 0x12,
+    0x34, 0xbe, 0x3f, 0x9b, 0x4b, 0x2f, 0xb7, 0x58, 0xa6, 0x59, 0x7f, 0x60,
+    0xfd, 0x80, 0x75, 0x97, 0xd0, 0x11, 0x5f, 0x16, 0x56, 0x1f, 0xbf, 0x09,
+    0x4c, 0x2c, 0xbf, 0xec, 0x60, 0x70, 0x00, 0x6f, 0xac, 0xb8, 0x4e, 0x2c,
+    0xb4, 0x96, 0x54, 0x1a, 0x97, 0x18, 0xbf, 0xc0, 0xff, 0x3d, 0x8c, 0x35,
+    0x96, 0x9d, 0x65, 0x68, 0xf1, 0x48, 0xce, 0xff, 0xbe, 0x50, 0x71, 0x07,
+    0xe8, 0x59, 0x7e, 0x79, 0x1e, 0x24, 0xb2, 0xc7, 0x59, 0x50, 0x89, 0x26,
+    0x21, 0xf1, 0xcf, 0xc9, 0xef, 0xa6, 0x93, 0xc9, 0x65, 0xdc, 0xe9, 0x65,
+    0xf7, 0xe5, 0x06, 0xa4, 0xbe, 0xc1, 0xff, 0x8b, 0x2b, 0x11, 0x00, 0x72,
+    0x37, 0x18, 0x22, 0x3b, 0xfc, 0x59, 0xd4, 0xb8, 0xc6, 0xac, 0xbf, 0x7b,
+    0x3b, 0x79, 0x2c, 0xbf, 0x3f, 0x41, 0x7f, 0xac, 0xbb, 0x6c, 0x96, 0x5f,
+    0x9e, 0x7f, 0xe7, 0x96, 0x5f, 0xe8, 0x06, 0x10, 0x79, 0x0b, 0x2c, 0x2e,
+    0x17, 0xc6, 0xe7, 0x84, 0x24, 0x88, 0x06, 0x17, 0x91, 0xca, 0x77, 0x0a,
+    0x86, 0x26, 0x9a, 0x13, 0x3a, 0x2f, 0x3b, 0x0f, 0xa1, 0xec, 0x50, 0xbb,
+    0xe1, 0xd7, 0xcd, 0x02, 0x51, 0xbc, 0xa3, 0x6c, 0x64, 0x42, 0x8b, 0xfe,
+    0x7e, 0xc5, 0xcb, 0x35, 0x92, 0x59, 0x7f, 0xff, 0xfc, 0x4e, 0x2f, 0x02,
+    0x2b, 0x63, 0x5b, 0xfe, 0xc6, 0x97, 0x36, 0x61, 0xb1, 0x25, 0x97, 0xec,
+    0xe1, 0xc7, 0x0b, 0x2f, 0xfc, 0xf2, 0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x44,
+    0xc8, 0xb0, 0xb9, 0xd3, 0x34, 0xec, 0xef, 0x50, 0x84, 0x39, 0x3d, 0xef,
+    0xe1, 0xd6, 0x5d, 0xe3, 0xac, 0xbf, 0x6b, 0xb7, 0x7e, 0xd5, 0x16, 0xf2,
+    0xc2, 0xe0, 0xfa, 0x46, 0x39, 0x82, 0xf7, 0x3e, 0xea, 0xcb, 0xfc, 0x08,
+    0x18, 0x5f, 0x52, 0x59, 0x7f, 0xe7, 0x90, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa,
+    0x29, 0x35, 0x85, 0xe2, 0x26, 0x98, 0x64, 0xe6, 0x77, 0x6d, 0x7b, 0x42,
+    0xcb, 0xff, 0x61, 0x67, 0xf4, 0xc6, 0xf8, 0x2b, 0x2c, 0x75, 0x97, 0xfc,
+    0x17, 0xeb, 0x5a, 0x0c, 0xdc, 0x59, 0x52, 0x3c, 0xde, 0x08, 0xdc, 0x7e,
+    0x96, 0x5f, 0xd9, 0xf2, 0x88, 0x3a, 0xcb, 0xfb, 0xa0, 0x09, 0xa7, 0x02,
+    0xcb, 0xbc, 0x2c, 0x52, 0x9a, 0x08, 0xc8, 0x72, 0x11, 0x67, 0x22, 0xf0,
+    0xc3, 0x95, 0xd4, 0x33, 0x45, 0x25, 0x3e, 0xab, 0x92, 0x95, 0xb9, 0x0b,
+    0x6d, 0xf0, 0xcf, 0x12, 0x37, 0x7b, 0xfc, 0x2f, 0x35, 0xdb, 0xbf, 0x6a,
+    0x88, 0x75, 0x7e, 0xd7, 0x6e, 0xfd, 0xaa, 0x25, 0x85, 0xf6, 0x00, 0xec,
+    0xb2, 0xfc, 0x2c, 0xef, 0x21, 0x78, 0x7a, 0xfb, 0x66, 0xd7, 0xf8, 0x5e,
+    0x6b, 0xb7, 0x7e, 0xd5, 0x11, 0x82, 0xf1, 0x90, 0x75, 0x97, 0xa4, 0xc3,
+    0x59, 0x7e, 0x96, 0x71, 0xf8, 0xb2, 0xc2, 0xf0, 0xf8, 0x26, 0x1d, 0x08,
+    0xe5, 0xff, 0xf9, 0xc1, 0xb7, 0x82, 0xc9, 0xff, 0x2c, 0xfe, 0x0d, 0x65,
+    0xff, 0xf9, 0x8e, 0xda, 0x17, 0xfd, 0xbc, 0xf7, 0xe3, 0xa3, 0x16, 0x51,
+    0x23, 0xaf, 0x86, 0xff, 0x58, 0xbe, 0x17, 0x2c, 0xe2, 0xcb, 0xdf, 0x69,
+    0x96, 0x5f, 0xff, 0xff, 0xff, 0x61, 0x82, 0xfa, 0x82, 0x09, 0xf5, 0x1f,
+    0x6e, 0xd8, 0x7e, 0x8e, 0xfd, 0x13, 0x9d, 0xbe, 0xf3, 0x3f, 0xd6, 0x5f,
+    0xff, 0xf4, 0xb8, 0x2f, 0xbf, 0x3c, 0xdd, 0xfb, 0x35, 0xb5, 0x7a, 0x63,
+    0xf1, 0x65, 0xf4, 0x78, 0x3f, 0x59, 0x7e, 0xcf, 0x82, 0x3b, 0x59, 0x7f,
+    0xfa, 0x3e, 0xc0, 0x89, 0x0f, 0xd0, 0x5d, 0xac, 0xbe, 0x62, 0x03, 0x2c,
+    0xbe, 0xed, 0xdf, 0xb5, 0x44, 0x7a, 0xa9, 0x1e, 0x86, 0x88, 0x2f, 0xff,
+    0x6e, 0x14, 0x38, 0xdb, 0x87, 0x81, 0x81, 0x65, 0xf7, 0x1f, 0xad, 0xeb,
+    0x2e, 0x90, 0xbc, 0x44, 0x93, 0x91, 0x7d, 0x2e, 0xff, 0xf0, 0x73, 0xd8,
+    0x40, 0xc2, 0xff, 0xb1, 0x65, 0xe8, 0xd4, 0xcb, 0x2e, 0x71, 0x64, 0x7c,
+    0x9c, 0x47, 0xb0, 0xb8, 0x57, 0x09, 0x38, 0xef, 0x50, 0xb0, 0x67, 0x49,
+    0x88, 0xb4, 0x50, 0xf1, 0x95, 0x94, 0x28, 0x2f, 0xff, 0xe2, 0x73, 0x05,
+    0xf3, 0xe5, 0x1b, 0x00, 0x71, 0x34, 0xeb, 0x2f, 0xda, 0xed, 0xdf, 0xb5,
+    0x45, 0x86, 0xbf, 0xd2, 0x28, 0xce, 0x61, 0x2c, 0xb9, 0xa4, 0xb2, 0xc2,
+    0xf0, 0xff, 0x3a, 0x36, 0x01, 0x85, 0xf0, 0xb0, 0x16, 0x2c, 0xbb, 0xaf,
+    0xac, 0xbf, 0x83, 0x3b, 0x10, 0x4e, 0xb2, 0xa0, 0xf1, 0x88, 0x62, 0xf4,
+    0x14, 0xeb, 0x2d, 0x0b, 0x2f, 0xa0, 0x12, 0x3a, 0xca, 0xf1, 0xb2, 0x21,
+    0x0a, 0x64, 0x47, 0x78, 0x83, 0xe9, 0xd7, 0xff, 0xfd, 0x11, 0xc1, 0x7f,
+    0x1b, 0x1f, 0xa9, 0x73, 0xa9, 0x66, 0xa7, 0x59, 0x42, 0xd1, 0x36, 0x45,
+    0xf6, 0x89, 0xd3, 0xb6, 0xd4, 0x72, 0x57, 0xf8, 0x5e, 0x6b, 0xb7, 0x7e,
+    0xd5, 0x17, 0x3a, 0xf9, 0xb5, 0xa7, 0x59, 0x7d, 0xc8, 0x23, 0x56, 0x56,
+    0x1e, 0x18, 0x84, 0x37, 0x8a, 0x3a, 0x59, 0x7c, 0xfa, 0x90, 0xbe, 0x1b,
+    0xed, 0xd2, 0x2b, 0xff, 0xff, 0xff, 0xa3, 0x69, 0x4a, 0x7e, 0xfd, 0xb3,
+    0x67, 0xb6, 0xc5, 0xce, 0x13, 0x45, 0x5c, 0x0a, 0x7a, 0x9e, 0x7e, 0xcf,
+    0xb3, 0x67, 0xb6, 0xd6, 0x54, 0x32, 0xe5, 0x67, 0x84, 0xd4, 0x91, 0x72,
+    0x38, 0xee, 0xcb, 0xda, 0x5d, 0x46, 0xa1, 0x14, 0x78, 0x6e, 0x7a, 0x3e,
+    0xdf, 0x98, 0x06, 0x18, 0x9b, 0xa7, 0xb7, 0xed, 0x76, 0xef, 0xda, 0xa2,
+    0x1e, 0x5f, 0xfe, 0xf3, 0x41, 0xdc, 0x62, 0x6e, 0xc1, 0x49, 0x65, 0x85,
+    0xe2, 0x20, 0xb8, 0x6d, 0x7f, 0xf6, 0xfd, 0x37, 0x20, 0x6e, 0x4c, 0x75,
+    0x97, 0xbf, 0xd8, 0x16, 0x5f, 0xed, 0x43, 0x7c, 0xa0, 0xeb, 0x2f, 0xf0,
+    0x79, 0xb0, 0x64, 0xfe, 0x59, 0x7f, 0xff, 0xfd, 0xec, 0xd6, 0xa3, 0xa9,
+    0x09, 0xf6, 0x20, 0xcb, 0x38, 0x59, 0x38, 0x92, 0x59, 0x7d, 0xdb, 0xbf,
+    0x6a, 0x88, 0x99, 0x7e, 0xc6, 0xfe, 0x82, 0xb2, 0xfb, 0x73, 0xd0, 0x6a,
+    0xcb, 0xff, 0xfd, 0xa2, 0xc9, 0xf0, 0x78, 0x60, 0x75, 0x9d, 0xfa, 0x37,
+    0xac, 0xbb, 0x27, 0x59, 0x7c, 0x13, 0xe0, 0xd6, 0x54, 0x22, 0x77, 0xa6,
+    0x4d, 0xd1, 0x7b, 0xf7, 0xf9, 0x3e, 0x18, 0xb2, 0xff, 0xbe, 0x13, 0x76,
+    0x7b, 0x00, 0xeb, 0x2b, 0x11, 0x32, 0xe6, 0x61, 0x2a, 0xb0, 0x56, 0x5f,
+    0xef, 0x85, 0xfa, 0xf4, 0x6f, 0x59, 0x5d, 0xaa, 0xa8, 0xd4, 0x20, 0x0e,
+    0x60, 0xe4, 0xe5, 0x1a, 0xe7, 0x0b, 0xbe, 0x23, 0x7f, 0xce, 0xe4, 0x0d,
+    0x34, 0x1a, 0xb2, 0xe0, 0xce, 0xb2, 0xd8, 0xb2, 0xe6, 0x15, 0xac, 0xa2,
+    0x3c, 0x2d, 0xe3, 0x06, 0x08, 0x5f, 0xe2, 0xc3, 0x35, 0x9e, 0xe2, 0xcb,
+    0xf0, 0x39, 0xb3, 0x06, 0xb2, 0xff, 0x31, 0x98, 0x59, 0xd7, 0xd6, 0x53,
+    0x1e, 0xee, 0x8a, 0xae, 0xcd, 0xd5, 0x97, 0xbb, 0x61, 0xac, 0xbc, 0xe4,
+    0x3c, 0x36, 0xcc, 0x33, 0x7e, 0x6d, 0x87, 0xee, 0x65, 0x94, 0xe7, 0xb6,
+    0x45, 0xf7, 0xfd, 0x1e, 0x8d, 0xe7, 0x82, 0x9d, 0x65, 0xff, 0xc1, 0xff,
+    0x08, 0x21, 0xfc, 0xa0, 0xd5, 0x97, 0xb8, 0xe4, 0xb2, 0xff, 0xfd, 0x1a,
+    0x07, 0xa3, 0x7c, 0xd1, 0x07, 0xe6, 0x0d, 0x65, 0xff, 0x7b, 0xd1, 0xbe,
+    0x59, 0xa8, 0x59, 0x5e, 0x44, 0x8b, 0xab, 0xd4, 0xc9, 0xa7, 0x11, 0xd7,
+    0x11, 0xbf, 0x0a, 0xcb, 0xfc, 0x4e, 0x02, 0x79, 0x12, 0xcb, 0xf7, 0xf0,
+    0x11, 0xa5, 0x97, 0x37, 0xe0, 0xf5, 0xd8, 0xc2, 0xfa, 0x7f, 0x06, 0x75,
+    0x95, 0x88, 0xea, 0x78, 0x4d, 0x04, 0xae, 0xfa, 0x73, 0xc6, 0x96, 0x5f,
+    0x76, 0x12, 0x35, 0x65, 0xce, 0xeb, 0x29, 0xcf, 0x70, 0x88, 0xc4, 0x24,
+    0xbf, 0xf3, 0xf5, 0xc9, 0xb7, 0x18, 0xbf, 0xc5, 0x97, 0x0f, 0xcb, 0x2f,
+    0xff, 0x7e, 0x59, 0xad, 0x3c, 0xb0, 0xf1, 0xda, 0xca, 0xc3, 0xe1, 0x71,
+    0x7b, 0xfe, 0xf8, 0x7d, 0x03, 0xf3, 0x01, 0x65, 0xff, 0x44, 0xb1, 0x8b,
+    0x20, 0xd5, 0x97, 0xff, 0xef, 0x46, 0x81, 0xcc, 0x1f, 0xc2, 0xfd, 0xe6,
+    0x96, 0x56, 0xe2, 0x31, 0x66, 0x39, 0xf9, 0xb5, 0xdf, 0x3a, 0xcb, 0xf6,
+    0x1c, 0xf0, 0x35, 0x97, 0xfe, 0x12, 0x7e, 0x43, 0x75, 0xf8, 0x3a, 0xcb,
+    0xff, 0xb8, 0xef, 0xde, 0x77, 0x05, 0x1d, 0xac, 0xb6, 0x4c, 0x8a, 0xcf,
+    0x13, 0xf1, 0x06, 0xf4, 0x6b, 0x8b, 0x2f, 0xff, 0x66, 0xf2, 0xce, 0x77,
+    0xe6, 0xdd, 0x6e, 0x2c, 0xbf, 0xe8, 0x90, 0x99, 0xae, 0x61, 0x8b, 0x2f,
+    0xf4, 0xa0, 0xd6, 0xf3, 0xce, 0xb2, 0xa7, 0x3e, 0xe6, 0x3a, 0xbc, 0x41,
+    0x1a, 0xca, 0xc5, 0x48, 0x7d, 0x1a, 0x7a, 0x18, 0x60, 0x36, 0x21, 0xc0,
+    0xc2, 0xf0, 0x42, 0x2b, 0xf1, 0x3b, 0x10, 0x16, 0x5f, 0x8c, 0x0c, 0x6a,
+    0x75, 0x95, 0xb0, 0xf3, 0xcc, 0x25, 0xbf, 0xf9, 0x9c, 0x1a, 0x82, 0xff,
+    0xb2, 0x4b, 0x29, 0x8f, 0x9f, 0xc4, 0xb7, 0x31, 0xd6, 0x5f, 0x4b, 0xc2,
+    0x71, 0x65, 0xce, 0x22, 0xa2, 0x17, 0x57, 0x47, 0x90, 0x12, 0x4a, 0x99,
+    0x10, 0x3f, 0x5e, 0xbf, 0x7b, 0x27, 0x09, 0x2c, 0xbe, 0x7d, 0x46, 0xf5,
+    0x94, 0x33, 0xcb, 0x01, 0x45, 0xfa, 0x69, 0x63, 0x92, 0xcb, 0xd0, 0x79,
+    0x2c, 0xbc, 0x41, 0x35, 0x65, 0x74, 0x6e, 0x48, 0x72, 0xfb, 0xcd, 0x13,
+    0x2c, 0xb0, 0xb8, 0x67, 0xd4, 0xce, 0x89, 0x21, 0xe1, 0x98, 0xe4, 0xad,
+    0xd3, 0x5c, 0x19, 0xe6, 0x63, 0x1d, 0x42, 0x40, 0xf0, 0xb2, 0xf4, 0xa5,
+    0x87, 0x84, 0x78, 0x0b, 0x8a, 0x14, 0x9c, 0x96, 0x51, 0xf8, 0xc9, 0x83,
+    0x0a, 0x2d, 0xed, 0xfb, 0x64, 0x42, 0x30, 0x6e, 0x90, 0xdf, 0xb3, 0x5c,
+    0x68, 0x59, 0x78, 0x55, 0x0a, 0x82, 0x85, 0x97, 0xfe, 0xd0, 0x67, 0xcf,
+    0x4c, 0x50, 0x35, 0x97, 0xc5, 0x18, 0x6a, 0xcb, 0xfd, 0xff, 0x66, 0x7f,
+    0xd8, 0xb2, 0xfe, 0xf4, 0x3f, 0x43, 0xe9, 0x65, 0xf6, 0x1c, 0x27, 0x59,
+    0x7f, 0xb5, 0x05, 0x83, 0x1c, 0x2c, 0xbf, 0xf3, 0x91, 0xaf, 0xf8, 0xfb,
+    0x81, 0x65, 0xf0, 0xc4, 0x82, 0x59, 0x7f, 0xff, 0x37, 0xc3, 0xa7, 0xe6,
+    0x17, 0xb3, 0x0a, 0x5c, 0x59, 0x50, 0x7f, 0x4e, 0x45, 0x4b, 0x2f, 0xcf,
+    0x9f, 0xc3, 0xac, 0xb8, 0x11, 0x06, 0xc4, 0x82, 0xef, 0xc1, 0xd0, 0x36,
+    0x42, 0xcb, 0xbc, 0xeb, 0x2e, 0x63, 0x56, 0x58, 0x2b, 0x2b, 0x0d, 0xf4,
+    0xc2, 0xdc, 0x17, 0xbe, 0xfc, 0x16, 0xf5, 0x96, 0xfa, 0xca, 0xf1, 0xb4,
+    0xf9, 0x1d, 0xe0, 0x70, 0x5e, 0xd0, 0xae, 0x10, 0x55, 0x93, 0x41, 0x60,
+    0xd0, 0x30, 0x87, 0xb3, 0x26, 0x2f, 0xd1, 0x11, 0xcc, 0x7d, 0x0b, 0x70,
+    0x28, 0xf0, 0xab, 0xed, 0x02, 0x31, 0x5f, 0x86, 0x2f, 0x1b, 0x71, 0x65,
+    0xff, 0xe6, 0x97, 0x05, 0xe7, 0x52, 0x79, 0xc4, 0xed, 0x65, 0x41, 0xfe,
+    0x61, 0x65, 0x42, 0x70, 0x1e, 0x8d, 0x82, 0xff, 0xb6, 0xb1, 0x4e, 0xb3,
+    0xed, 0xe0, 0xac, 0xbe, 0xe3, 0x4e, 0x29, 0x59, 0x7e, 0x09, 0x13, 0x49,
+    0x65, 0x6d, 0x68, 0x8f, 0xda, 0x90, 0xb8, 0x4f, 0x7f, 0xed, 0xac, 0x52,
+    0xd3, 0xc6, 0xce, 0xf9, 0x8b, 0x2e, 0xda, 0x64, 0xb2, 0xf7, 0xb3, 0x4b,
+    0x2b, 0x6b, 0x44, 0x1e, 0xd4, 0x97, 0xe1, 0xcb, 0xff, 0x64, 0x89, 0xcd,
+    0x9b, 0x91, 0xf5, 0x97, 0xdf, 0x6d, 0x62, 0xca, 0xda, 0x47, 0xc1, 0x87,
+    0xf7, 0xfd, 0x9f, 0x12, 0x77, 0xd3, 0x4c, 0xb2, 0xfe, 0x96, 0xd3, 0x9c,
+    0x52, 0x2a, 0xc5, 0x45, 0x97, 0x8b, 0x3c, 0xb2, 0xfe, 0x63, 0xe4, 0x68,
+    0xd5, 0x94, 0x33, 0xc8, 0xec, 0x6e, 0xf0, 0xaa, 0xda, 0x5b, 0x42, 0xcb,
+    0xfd, 0x9c, 0xe6, 0x31, 0x76, 0xb2, 0xb6, 0xa4, 0xdc, 0x85, 0x24, 0xfb,
+    0x41, 0xd8, 0xa2, 0x11, 0xa2, 0xac, 0x8c, 0x8b, 0xaf, 0x69, 0xf8, 0xb2,
+    0xfe, 0xda, 0xc4, 0xf7, 0xb2, 0x75, 0x97, 0x6d, 0xf4, 0xb2, 0xde, 0x59,
+    0x5b, 0x0f, 0xf7, 0x6b, 0x1c, 0xda, 0x46, 0xa1, 0x1b, 0xbf, 0xf6, 0xd6,
+    0x29, 0xe6, 0x11, 0x63, 0xf6, 0xb2, 0xe3, 0x61, 0x65, 0xf0, 0xf0, 0xa6,
+    0x59, 0x73, 0x7d, 0x65, 0xbe, 0xc6, 0xe3, 0xc4, 0x57, 0xfb, 0xaf, 0xf5,
+    0x20, 0x91, 0xab, 0x2f, 0xfd, 0x13, 0x16, 0x6f, 0x73, 0x9d, 0x96, 0x53,
+    0x9f, 0xb0, 0x4d, 0xef, 0xff, 0xfe, 0xf0, 0x46, 0xd9, 0xa9, 0x8b, 0x37,
+    0xfb, 0x07, 0x1c, 0xe4, 0x1a, 0xb2, 0xff, 0xf3, 0x4d, 0x2c, 0xea, 0x5b,
+    0x0e, 0xee, 0x4b, 0x2e, 0x7d, 0xd5, 0x97, 0xff, 0xfb, 0x99, 0xfd, 0x9e,
+    0xce, 0xe0, 0xc2, 0xc1, 0xf9, 0xa6, 0x59, 0x53, 0xaa, 0x49, 0xc4, 0xf3,
+    0x61, 0x39, 0xd9, 0x0f, 0x9d, 0x1d, 0x33, 0xe3, 0x35, 0xb5, 0x2a, 0xfb,
+    0x14, 0xca, 0x8f, 0xbf, 0xdd, 0x47, 0xf3, 0x3a, 0x92, 0xcb, 0xfb, 0x1b,
+    0xe5, 0x1d, 0x2c, 0xb1, 0xab, 0x2b, 0x69, 0x9f, 0x90, 0xab, 0x34, 0xdb,
+    0x2c, 0xba, 0x7f, 0x2c, 0xbd, 0xae, 0x71, 0x65, 0xc5, 0xc5, 0x94, 0x29,
+    0x36, 0x7b, 0xc7, 0x6f, 0x1e, 0x3b, 0x59, 0x42, 0x83, 0xc4, 0xc2, 0x7b,
+    0xfb, 0x68, 0x83, 0x1f, 0xb8, 0x59, 0x7f, 0x0a, 0xbd, 0xa8, 0xb6, 0xe0,
+    0xeb, 0x2b, 0x68, 0x3e, 0xe1, 0x56, 0x67, 0x7f, 0xfe, 0x1e, 0xcc, 0xe1,
+    0x4f, 0x3b, 0xee, 0x6c, 0xd9, 0xed, 0xb5, 0x97, 0xf3, 0x94, 0xfe, 0x8d,
+    0xc5, 0x97, 0xa5, 0x00, 0x59, 0x43, 0x3c, 0xc7, 0x30, 0xbf, 0x79, 0xfe,
+    0xf2, 0x59, 0x7f, 0x36, 0x8b, 0x33, 0x4b, 0x2f, 0x77, 0x3f, 0x96, 0x5f,
+    0xa3, 0x82, 0xab, 0x6b, 0xda, 0xd6, 0x5c, 0x73, 0xac, 0xae, 0x1e, 0x78,
+    0x4e, 0x2f, 0xd1, 0xc0, 0xf9, 0x96, 0x56, 0xc4, 0x5b, 0xc9, 0xbb, 0x84,
+    0x54, 0xb2, 0xfd, 0x27, 0xd3, 0xf6, 0xb2, 0xe6, 0x99, 0x65, 0x41, 0xbf,
+    0xc2, 0x8b, 0xfc, 0x59, 0xd4, 0x89, 0xe7, 0x59, 0x5a, 0x3d, 0x2e, 0x0f,
+    0xdf, 0xb8, 0x17, 0x20, 0x2c, 0xad, 0x87, 0x93, 0xf2, 0x2b, 0xf8, 0xb3,
+    0x79, 0x67, 0x16, 0x51, 0xcf, 0x44, 0x04, 0x97, 0xb8, 0xc0, 0x59, 0x7c,
+    0xc5, 0x1c, 0x59, 0x58, 0x7b, 0xcc, 0x45, 0xe1, 0xcb, 0xc6, 0x18, 0x62,
+    0x4b, 0xf3, 0x97, 0xfd, 0x89, 0x05, 0x9a, 0x0b, 0xff, 0xff, 0xa2, 0x7d,
+    0x9c, 0x0c, 0x75, 0xff, 0x61, 0xf3, 0xe5, 0x00, 0x04, 0x2c, 0xbb, 0x6f,
+    0x16, 0x5f, 0x7e, 0x6c, 0xfa, 0xcb, 0x0d, 0x65, 0x0d, 0x18, 0x38, 0xe8,
+    0xe3, 0x21, 0x23, 0xa8, 0x56, 0x2a, 0x38, 0xe5, 0x00, 0x9a, 0x50, 0xf9,
+    0xbf, 0x78, 0x85, 0x4d, 0xbd, 0xd5, 0x97, 0x3b, 0xac, 0xb7, 0x98, 0xf2,
+    0x1c, 0xce, 0xff, 0xfe, 0x06, 0xa3, 0x66, 0xa3, 0xfd, 0x4a, 0x0d, 0xd3,
+    0x98, 0xb2, 0xf8, 0x4e, 0x38, 0x16, 0x5d, 0x37, 0x96, 0x5f, 0xf8, 0xfb,
+    0x31, 0xb4, 0xc7, 0x83, 0x56, 0x53, 0x1e, 0xc3, 0x8c, 0x5f, 0xf9, 0xa6,
+    0xd9, 0xe8, 0x6d, 0x07, 0x71, 0x65, 0x42, 0x67, 0xfa, 0x60, 0xf3, 0xd8,
+    0x08, 0x2f, 0xff, 0xdd, 0xf8, 0x83, 0xfd, 0x85, 0x9b, 0xbf, 0x6c, 0xdd,
+    0x59, 0x70, 0x7c, 0xb2, 0xfc, 0xdb, 0xba, 0xe7, 0x16, 0x54, 0x22, 0x7c,
+    0xd5, 0xdd, 0x0b, 0xdf, 0xc4, 0x1f, 0xb4, 0xf0, 0xb2, 0xff, 0x41, 0x47,
+    0x21, 0x8e, 0xb2, 0xf3, 0xff, 0x8b, 0x28, 0xd3, 0xcc, 0xd1, 0x85, 0xed,
+    0xd1, 0xc2, 0xca, 0x63, 0xc2, 0x09, 0x1d, 0xef, 0x38, 0xad, 0x65, 0xfb,
+    0x78, 0x65, 0x9c, 0x59, 0x7c, 0x06, 0x20, 0xac, 0xac, 0x3c, 0xb0, 0x95,
+    0x5f, 0x60, 0xf2, 0x75, 0x97, 0xdb, 0x9b, 0x23, 0x6a, 0x59, 0x7f, 0x8a,
+    0x36, 0xf0, 0x98, 0xd5, 0x97, 0xfb, 0xef, 0xd7, 0x1f, 0xa3, 0x16, 0x5a,
+    0x16, 0x5e, 0x68, 0x25, 0x95, 0xa3, 0x55, 0xf1, 0x0a, 0xda, 0x99, 0x51,
+    0xa3, 0x85, 0x86, 0x10, 0xf6, 0x4f, 0xd4, 0x38, 0x9a, 0x5a, 0x3e, 0xe4,
+    0x24, 0x26, 0x8d, 0x97, 0x50, 0xdc, 0x39, 0x87, 0xa1, 0x76, 0x2b, 0x21,
+    0x26, 0xbf, 0x90, 0xef, 0x22, 0xdb, 0x2c, 0x10, 0xd3, 0x75, 0x82, 0xfd,
+    0xac, 0xdf, 0x1d, 0x2c, 0xbc, 0x59, 0xf5, 0x97, 0xff, 0xba, 0x97, 0x39,
+    0x0d, 0xd7, 0xff, 0x07, 0x59, 0x5a, 0x44, 0x89, 0x15, 0x18, 0x37, 0x7f,
+    0xe9, 0xf0, 0xa0, 0xcf, 0x9a, 0xfc, 0x59, 0x7f, 0xb3, 0x7b, 0xb7, 0x78,
+    0x4b, 0x2e, 0x2f, 0xe1, 0xf9, 0x92, 0x05, 0xf4, 0x60, 0xd9, 0x65, 0x31,
+    0xe5, 0x98, 0x57, 0x78, 0x3f, 0xe2, 0xcb, 0xfe, 0xdc, 0x7f, 0xcd, 0x26,
+    0xd4, 0xcb, 0x2f, 0xfa, 0x24, 0x63, 0xeb, 0xf1, 0x8b, 0x2f, 0xff, 0xff,
+    0xfb, 0x9b, 0x3d, 0x93, 0xc1, 0x9d, 0x4b, 0x9b, 0x03, 0xde, 0xb5, 0x1b,
+    0x26, 0x37, 0xad, 0x9b, 0x3d, 0xb6, 0xb2, 0xfe, 0xeb, 0x64, 0xd9, 0x9d,
+    0xac, 0xa8, 0x55, 0x03, 0x90, 0xee, 0xec, 0x89, 0xc7, 0x48, 0xfb, 0xe7,
+    0x01, 0x85, 0x65, 0xfb, 0xd0, 0x08, 0xdc, 0x59, 0x63, 0x16, 0x5f, 0xd2,
+    0x91, 0xe6, 0x8d, 0xd5, 0x96, 0x02, 0xca, 0x63, 0xff, 0x01, 0x51, 0x09,
+    0x04, 0xca, 0xed, 0xb8, 0x59, 0x7a, 0x0d, 0x65, 0x97, 0x41, 0xd6, 0x5d,
+    0x1d, 0x2c, 0xa1, 0x9a, 0xd9, 0x85, 0xa8, 0x91, 0x09, 0xc1, 0x9f, 0xa4,
+    0xdd, 0xb7, 0xb5, 0xac, 0xbf, 0xfc, 0x08, 0x2e, 0xf6, 0x61, 0x06, 0x59,
+    0xc5, 0x97, 0xf9, 0xfa, 0x06, 0x9b, 0xa0, 0x2c, 0xbf, 0xf0, 0x4f, 0x19,
+    0xc2, 0xcd, 0xee, 0xb2, 0xff, 0x01, 0xcb, 0x27, 0x12, 0x4b, 0x2b, 0xa4,
+    0x79, 0x79, 0x2f, 0x86, 0xbf, 0x3e, 0xbd, 0xb2, 0x5d, 0xac, 0xbf, 0xcd,
+    0xb3, 0x8f, 0x1d, 0x49, 0x65, 0xff, 0x73, 0x66, 0x14, 0x04, 0x57, 0xc5,
+    0x95, 0x0a, 0xb3, 0xf2, 0x17, 0xc6, 0x97, 0xb4, 0x62, 0x27, 0x3e, 0xf1,
+    0x01, 0x1a, 0xdf, 0xff, 0xda, 0xd8, 0x59, 0xbf, 0x35, 0x2d, 0x90, 0x37,
+    0x9b, 0x8b, 0x2f, 0xff, 0x6b, 0xc6, 0x38, 0xf6, 0x08, 0x00, 0x36, 0xea,
+    0xcb, 0xff, 0xb0, 0xcd, 0xd3, 0x85, 0x8f, 0x84, 0x05, 0x97, 0xff, 0xfe,
+    0xea, 0x0d, 0x2c, 0x1f, 0x9a, 0x6d, 0x9c, 0xce, 0xa5, 0xac, 0x31, 0x65,
+    0x32, 0x2e, 0x49, 0x1e, 0xb1, 0x38, 0xd7, 0x61, 0x28, 0xc2, 0xef, 0xbe,
+    0x18, 0x9d, 0x65, 0xfd, 0x27, 0xd7, 0x18, 0x6b, 0x2f, 0xec, 0xf6, 0x1e,
+    0x3b, 0x59, 0x50, 0x7b, 0x52, 0x2d, 0xbf, 0x36, 0x9b, 0x7e, 0x2c, 0xa6,
+    0x46, 0x37, 0xdf, 0x77, 0x48, 0x6f, 0xb6, 0xf3, 0x50, 0xb2, 0xfe, 0x8e,
+    0x7a, 0x0b, 0xeb, 0x2f, 0xff, 0xee, 0xa5, 0xc3, 0xe1, 0x6c, 0xdd, 0x6f,
+    0x4e, 0xd9, 0xa5, 0x96, 0xdc, 0x59, 0x7b, 0xf9, 0xc5, 0x95, 0x24, 0x5e,
+    0xe1, 0x67, 0x6c, 0x21, 0x14, 0xbf, 0xff, 0xc5, 0x9d, 0xf9, 0x8b, 0x03,
+    0xd7, 0xf6, 0x39, 0x98, 0x6a, 0xcb, 0xff, 0x67, 0x6f, 0x3f, 0xb3, 0xbc,
+    0x25, 0x96, 0x33, 0x62, 0x28, 0xfc, 0xc9, 0x7f, 0x8d, 0x18, 0x63, 0xc5,
+    0x0b, 0x2f, 0xe9, 0x70, 0xd0, 0xc7, 0x4b, 0x2f, 0xb0, 0x6f, 0x25, 0x95,
+    0xd1, 0xe8, 0x98, 0x61, 0x7d, 0xa8, 0x89, 0xd6, 0x5f, 0x4d, 0x1f, 0x75,
+    0x97, 0xfd, 0x3c, 0x4f, 0xc8, 0x99, 0xb7, 0xac, 0xb9, 0xcc, 0xe2, 0x20,
+    0x42, 0x44, 0x21, 0x15, 0xed, 0xff, 0x11, 0x65, 0x42, 0x76, 0x58, 0x58,
+    0xd0, 0x84, 0x28, 0x52, 0x98, 0x7b, 0x7f, 0xcd, 0xa9, 0xc2, 0x0c, 0x2c,
+    0x59, 0x74, 0xc7, 0x59, 0x7f, 0xa5, 0xcf, 0x87, 0x07, 0xb2, 0x63, 0xd0,
+    0x01, 0xc5, 0xff, 0xf6, 0x0f, 0xc1, 0x33, 0x8d, 0xff, 0x33, 0x81, 0x65,
+    0x74, 0x89, 0xe2, 0x4e, 0xb8, 0xf2, 0x59, 0x7f, 0xfa, 0x35, 0xd9, 0xa0,
+    0xc7, 0x2e, 0xa5, 0xc5, 0x95, 0x23, 0xe3, 0xe0, 0xbd, 0xf6, 0x6a, 0x0e,
+    0xb2, 0xf1, 0x66, 0xfd, 0x87, 0x86, 0x44, 0x55, 0xa4, 0x7f, 0x72, 0x19,
+    0x37, 0xf8, 0x8d, 0x2c, 0x6e, 0xbe, 0xb2, 0xdb, 0xd6, 0x56, 0x1e, 0x37,
+    0x0c, 0xea, 0x11, 0x1e, 0x16, 0xeb, 0xe8, 0xcf, 0x71, 0x65, 0xcd, 0x3a,
+    0xcb, 0x02, 0x63, 0x71, 0xf2, 0x1b, 0xfd, 0xd9, 0x60, 0xfc, 0xfc, 0x59,
+    0x7f, 0x03, 0x08, 0x7e, 0x85, 0x97, 0xf7, 0x98, 0x80, 0x21, 0xd6, 0x53,
+    0x1e, 0xd7, 0xcb, 0x2e, 0x1b, 0x2c, 0xbf, 0xff, 0xbc, 0xd8, 0x58, 0xc3,
+    0xc8, 0x03, 0xf6, 0xfa, 0x59, 0x7f, 0xa7, 0x83, 0x94, 0x74, 0x05, 0x95,
+    0x09, 0xa7, 0xca, 0x11, 0xbd, 0x90, 0xf4, 0x2c, 0xea, 0xf7, 0xef, 0x6c,
+    0x7c, 0xe2, 0xca, 0x83, 0xf9, 0xc5, 0x0b, 0x05, 0x65, 0xfd, 0xf2, 0x89,
+    0x67, 0xd6, 0x5f, 0x11, 0x67, 0xd6, 0x5e, 0x31, 0xf8, 0xb2, 0xf3, 0xea,
+    0x5b, 0x0f, 0xa6, 0x0b, 0x3c, 0x41, 0x50, 0xca, 0x91, 0xc8, 0x7d, 0x74,
+    0x64, 0xd0, 0xe1, 0xd4, 0xa9, 0x2f, 0x4a, 0xcd, 0x75, 0xa2, 0x8f, 0xc3,
+    0x84, 0x01, 0x7a, 0xb6, 0xe2, 0xcb, 0x7d, 0x65, 0xd0, 0x05, 0x97, 0xff,
+    0x98, 0x22, 0xb8, 0xd9, 0xc0, 0x80, 0xf9, 0xf5, 0x95, 0xd1, 0xf3, 0x68,
+    0x5a, 0xff, 0xd1, 0xdf, 0x21, 0xba, 0xfc, 0x1d, 0x65, 0x2c, 0xbd, 0xa0,
+    0xee, 0x2c, 0xa9, 0x1a, 0xbf, 0x85, 0xd1, 0x22, 0x2c, 0x2d, 0x57, 0xc0,
+    0xe4, 0xff, 0x59, 0x7f, 0x3f, 0xa0, 0xa2, 0x4b, 0x2f, 0xff, 0xfd, 0xfc,
+    0x82, 0xce, 0xc9, 0xe7, 0x8d, 0x6a, 0x3f, 0xec, 0x1a, 0xcb, 0xed, 0xe5,
+    0x9c, 0xd8, 0x89, 0x5c, 0x2b, 0xbf, 0xfe, 0xc2, 0xc3, 0x7c, 0xf2, 0xf1,
+    0x8e, 0x21, 0xd6, 0x5f, 0xf9, 0xcd, 0xd9, 0xf7, 0x72, 0xd9, 0x3a, 0xca,
+    0x84, 0xe2, 0x5a, 0x17, 0x3e, 0x3c, 0x25, 0x1b, 0xcf, 0xfe, 0x2c, 0xb8,
+    0x33, 0xac, 0xa9, 0x1b, 0x4d, 0x0e, 0x5f, 0xb2, 0x5e, 0x79, 0x2c, 0xb8,
+    0xbf, 0x31, 0xe4, 0x78, 0x86, 0xff, 0x39, 0x09, 0xef, 0x40, 0xd6, 0x5f,
+    0xff, 0x7f, 0x91, 0x9b, 0x35, 0x1f, 0x6e, 0xd8, 0x6b, 0x2f, 0xdd, 0xec,
+    0x1f, 0x46, 0x2c, 0xae, 0x1f, 0xf8, 0x54, 0x6f, 0xf1, 0x9e, 0xc2, 0xea,
+    0x0d, 0x59, 0x7c, 0x19, 0x9c, 0x6b, 0x2f, 0xd9, 0xfd, 0x61, 0x8b, 0x2d,
+    0xde, 0xc3, 0xcb, 0xf1, 0x1d, 0x42, 0x2a, 0xda, 0x10, 0x17, 0x6a, 0x4b,
+    0x2f, 0xf1, 0xaf, 0xcc, 0xf8, 0x93, 0xac, 0xbe, 0xd9, 0xd9, 0x90, 0xb2,
+    0xa4, 0x7b, 0x87, 0x36, 0xa8, 0x54, 0xd1, 0xd1, 0x73, 0x42, 0xcb, 0x50,
+    0xcd, 0x39, 0x33, 0xb9, 0xdf, 0xc6, 0x8a, 0x34, 0xd0, 0x6a, 0xcb, 0xf0,
+    0xc9, 0xdf, 0xcb, 0x28, 0x8f, 0x67, 0x86, 0x77, 0xec, 0xe7, 0xdf, 0x4b,
+    0x2f, 0xff, 0x73, 0x1c, 0xb6, 0x73, 0xa8, 0x28, 0xe2, 0xcb, 0x4b, 0xc7,
+    0xe3, 0xf2, 0x7b, 0xfa, 0x07, 0x1e, 0x89, 0x2c, 0xbf, 0xd1, 0xfd, 0x8f,
+    0xdb, 0x6f, 0x59, 0x5a, 0x3e, 0x32, 0x2c, 0xbf, 0xff, 0xf3, 0x75, 0xf7,
+    0xf1, 0x60, 0xfc, 0xd3, 0x73, 0xbc, 0x62, 0x99, 0x65, 0xff, 0xf4, 0x7f,
+    0x61, 0x07, 0x77, 0x66, 0x7f, 0x6f, 0x3e, 0xb2, 0xa1, 0x37, 0x26, 0x84,
+    0x5e, 0x88, 0x42, 0xdb, 0x73, 0xfd, 0x65, 0xff, 0xde, 0x83, 0x76, 0x7c,
+    0x9f, 0xf1, 0xf5, 0x97, 0xfb, 0x67, 0x52, 0x6f, 0x04, 0xeb, 0x2b, 0xc8,
+    0x93, 0x00, 0xb1, 0x23, 0x5f, 0x8c, 0x7f, 0x4d, 0xb5, 0xac, 0xbf, 0xec,
+    0x1e, 0xcf, 0x9a, 0xc6, 0x71, 0x65, 0xb3, 0x47, 0xd9, 0xbc, 0xbe, 0xfe,
+    0x7f, 0x1b, 0x1a, 0x75, 0x97, 0xfe, 0xd4, 0xdb, 0x39, 0x0d, 0x3b, 0xfd,
+    0x65, 0x42, 0x66, 0x63, 0x84, 0xd9, 0x14, 0x84, 0xb6, 0xe7, 0x02, 0xcb,
+    0xff, 0xed, 0x85, 0x1c, 0x89, 0xcb, 0x07, 0xe6, 0x99, 0x65, 0xff, 0xff,
+    0xdc, 0xd1, 0x44, 0xdb, 0x04, 0xfb, 0x4b, 0x3a, 0xfe, 0x6f, 0x2c, 0xe2,
+    0xca, 0xd2, 0x32, 0x09, 0x46, 0xbe, 0x98, 0x00, 0x61, 0xbd, 0x4b, 0x29,
+    0x65, 0xfd, 0x0c, 0x4f, 0xa3, 0x56, 0x5d, 0xfd, 0x86, 0x9b, 0x7f, 0x05,
+    0xdd, 0x34, 0x96, 0x54, 0x22, 0x2b, 0xa4, 0x2d, 0x18, 0x5f, 0xfc, 0x5f,
+    0xe6, 0xf6, 0xfc, 0x61, 0x4c, 0xb2, 0xfd, 0xa6, 0xe4, 0x74, 0xb2, 0xb0,
+    0xfb, 0x5d, 0x16, 0xff, 0xfd, 0x2e, 0x00, 0x33, 0x6c, 0xc6, 0xd3, 0x1e,
+    0x0d, 0x59, 0x7f, 0x0a, 0x66, 0x93, 0x7f, 0x8b, 0x2f, 0x70, 0x4e, 0x2c,
+    0xa9, 0xcf, 0x44, 0xe6, 0x77, 0x40, 0x16, 0x5f, 0x8b, 0xfe, 0xcd, 0xd5,
+    0x97, 0xe9, 0xb8, 0xfa, 0x35, 0x65, 0xe7, 0x33, 0x50, 0x7a, 0x98, 0x55,
+    0x7f, 0xc4, 0x6c, 0x4c, 0xc5, 0x07, 0x59, 0x7f, 0x1a, 0xf2, 0x28, 0x3a,
+    0xca, 0x83, 0xe5, 0x63, 0x8a, 0x92, 0xa0, 0xee, 0x88, 0x1a, 0x15, 0x53,
+    0x11, 0xe9, 0xab, 0xd0, 0x97, 0xbe, 0x6e, 0xdf, 0x4b, 0x2f, 0x1d, 0xcc,
+    0x59, 0x6e, 0x48, 0xdf, 0xb9, 0x15, 0xfe, 0x61, 0xe1, 0x4b, 0xd8, 0xb2,
+    0xff, 0xfd, 0xcd, 0x98, 0xc6, 0x6c, 0x2c, 0x01, 0x63, 0xcc, 0xb2, 0xff,
+    0xbc, 0xda, 0x9b, 0xcf, 0x9a, 0x59, 0x7f, 0xff, 0xff, 0x03, 0x85, 0x8f,
+    0xd6, 0xc1, 0xf8, 0x3b, 0x0b, 0x3a, 0x96, 0x06, 0x72, 0xc7, 0xe9, 0x65,
+    0x62, 0x63, 0xfd, 0xac, 0x31, 0xcd, 0xcf, 0xda, 0xa2, 0x98, 0x58, 0xd5,
+    0x94, 0xe6, 0xd8, 0x24, 0x97, 0xe9, 0xdc, 0xfc, 0xdb, 0x59, 0x50, 0xa8,
+    0xa2, 0x72, 0x6c, 0x8d, 0x43, 0xb6, 0x66, 0x20, 0xbf, 0xff, 0xdf, 0xe0,
+    0x9c, 0xd9, 0x92, 0xf4, 0x36, 0x80, 0x77, 0x92, 0xcb, 0xfe, 0x2e, 0xa5,
+    0xcf, 0xc6, 0xa6, 0x59, 0x7f, 0xee, 0xbb, 0x0b, 0xfb, 0x3e, 0xfe, 0x59,
+    0x58, 0x7f, 0x7f, 0x3b, 0xbf, 0xf3, 0xf5, 0x8d, 0xa6, 0x3c, 0x1a, 0xb2,
+    0xf6, 0x30, 0x16, 0x5b, 0x16, 0x5b, 0x00, 0x6a, 0xf7, 0x8d, 0xd2, 0xcb,
+    0xb5, 0x8b, 0x2d, 0xd1, 0x1e, 0x4f, 0x0a, 0x02, 0x17, 0x58, 0x9f, 0x3b,
+    0x43, 0x7f, 0x44, 0x2f, 0x0b, 0x2b, 0xd8, 0x1d, 0x2c, 0xb4, 0xcb, 0x2f,
+    0x83, 0x9d, 0x12, 0xca, 0x9c, 0xda, 0x1c, 0x4a, 0xc6, 0x2c, 0xb9, 0x86,
+    0xb2, 0xb7, 0x0d, 0x47, 0x04, 0xae, 0x1c, 0xcb, 0x2f, 0xfb, 0x58, 0x3f,
+    0x41, 0x87, 0x0a, 0xcb, 0xfb, 0xd8, 0x36, 0x2f, 0xac, 0xb4, 0xeb, 0x2e,
+    0xf7, 0x16, 0x51, 0xa6, 0xa5, 0xc4, 0xaa, 0x13, 0x36, 0xc4, 0xa3, 0x92,
+    0x78, 0x63, 0xe7, 0x46, 0x2a, 0xdf, 0xbc, 0x13, 0x72, 0x75, 0x97, 0xec,
+    0x39, 0xdc, 0xeb, 0x2e, 0x38, 0x16, 0x5d, 0xe7, 0xd8, 0x8b, 0xf1, 0xab,
+    0xe8, 0xa8, 0x04, 0xf7, 0xf6, 0xa3, 0xe4, 0xe0, 0x59, 0x5a, 0x3f, 0x6d,
+    0xd4, 0xab, 0xfd, 0xb3, 0xa9, 0x14, 0x67, 0x16, 0x57, 0x4a, 0xc5, 0x5a,
+    0x55, 0xdb, 0x92, 0xdf, 0xff, 0x80, 0xdc, 0xd9, 0xe7, 0xe7, 0xe2, 0x6e,
+    0x7b, 0x16, 0x52, 0xcb, 0xf8, 0x2c, 0x36, 0x26, 0x59, 0x63, 0x58, 0xdb,
+    0x1c, 0x2e, 0xfc, 0xfc, 0xf3, 0xc9, 0x65, 0xf3, 0xc9, 0x8e, 0xb2, 0xfd,
+    0xdb, 0xeb, 0x3b, 0x59, 0x7f, 0xc1, 0xea, 0x5c, 0xd9, 0xcf, 0xf6, 0xb2,
+    0xfe, 0x2f, 0xcb, 0x01, 0xc5, 0x97, 0x8d, 0x7e, 0x6c, 0x44, 0xae, 0x8a,
+    0x5c, 0xfe, 0xbc, 0x8f, 0x9f, 0xc2, 0xda, 0xb4, 0x9b, 0x7f, 0x89, 0xcc,
+    0x8c, 0x82, 0xfe, 0x6f, 0x3b, 0x4f, 0x0b, 0x2f, 0x4a, 0x3a, 0x59, 0x7f,
+    0x1b, 0xad, 0x67, 0x5c, 0x59, 0x7f, 0xfe, 0x2c, 0xeb, 0xfb, 0x3c, 0xfb,
+    0xf6, 0x0f, 0xc1, 0x9d, 0x65, 0xfb, 0xd1, 0x3e, 0x18, 0xb2, 0xc7, 0x84,
+    0x43, 0x8d, 0x7a, 0xfe, 0xce, 0x49, 0x81, 0x8b, 0x2f, 0x4b, 0x3e, 0xb2,
+    0xa4, 0x79, 0x1f, 0x2c, 0xa8, 0x4f, 0x2b, 0x0e, 0x3a, 0x2c, 0x61, 0xd7,
+    0x85, 0xb8, 0x5c, 0x2f, 0xde, 0x6e, 0x47, 0x4b, 0x2f, 0xdd, 0x76, 0x51,
+    0xbd, 0x65, 0xfc, 0xfa, 0x9a, 0x4d, 0xe5, 0x97, 0xf8, 0x33, 0xf9, 0xb7,
+    0xe4, 0xcb, 0x2f, 0xe1, 0x3d, 0xe8, 0x2e, 0xd6, 0x5f, 0x14, 0x1f, 0x8b,
+    0x2e, 0x7e, 0xb8, 0x7a, 0x1f, 0x2f, 0xa8, 0x4c, 0xdb, 0x0a, 0x1c, 0xaf,
+    0x85, 0xc1, 0x84, 0x3d, 0xdc, 0xe2, 0xcb, 0x62, 0xcb, 0xfe, 0x63, 0x5b,
+    0xe5, 0x9b, 0xbb, 0x34, 0x69, 0xf7, 0x8b, 0xdf, 0xe6, 0x20, 0x61, 0xdf,
+    0xa5, 0x95, 0x32, 0x21, 0xf7, 0xaa, 0xdf, 0xff, 0xe2, 0xce, 0xff, 0xf8,
+    0xff, 0x26, 0x2c, 0x33, 0x64, 0x6d, 0x4b, 0x2f, 0xfd, 0xdc, 0x1f, 0xd9,
+    0xcc, 0x62, 0x59, 0x50, 0x8a, 0x6f, 0x34, 0xdf, 0xb5, 0x1b, 0xe3, 0x4b,
+    0x2f, 0xa3, 0xbc, 0x3a, 0xcb, 0xfd, 0xb3, 0x39, 0xc6, 0xc3, 0x16, 0x59,
+    0xa6, 0x3d, 0x7d, 0x11, 0x5f, 0xce, 0x5b, 0x07, 0x04, 0xb2, 0xa1, 0x3c,
+    0x3c, 0x86, 0x63, 0x11, 0x72, 0x10, 0x01, 0x28, 0xbe, 0xc3, 0xc7, 0x6b,
+    0x2f, 0xee, 0xda, 0x7c, 0xeb, 0xeb, 0x2d, 0x12, 0x3d, 0x23, 0x08, 0xaf,
+    0x46, 0xa4, 0xb2, 0xff, 0xff, 0x68, 0x3d, 0x4b, 0x9b, 0x20, 0x87, 0xe8,
+    0xdb, 0xcd, 0x42, 0xca, 0xda, 0x1d, 0x0b, 0x20, 0xaa, 0x14, 0x87, 0x79,
+    0xe1, 0x5d, 0x28, 0xea, 0xc7, 0x2c, 0x93, 0x21, 0x74, 0x6c, 0xa0, 0x4e,
+    0xe5, 0x03, 0xf5, 0x1a, 0x0b, 0x42, 0xce, 0x69, 0x55, 0x7a, 0x95, 0x96,
+    0x79, 0x47, 0x1e, 0x96, 0xb4, 0x03, 0x82, 0x97, 0x8f, 0xc8, 0xe4, 0x3f,
+    0x2a, 0xfb, 0x7c, 0x29, 0x0c, 0x28, 0xdd, 0x1c, 0xbd, 0x3e, 0x4e, 0xb2,
+    0xff, 0xb4, 0xe6, 0x6c, 0x71, 0xbc, 0xeb, 0x2f, 0x4b, 0xae, 0xd6, 0x5f,
+    0xce, 0x64, 0xc4, 0xc3, 0x59, 0x74, 0x80, 0xb2, 0xe9, 0xce, 0xb2, 0xb6,
+    0x1a, 0xf6, 0x17, 0xbf, 0xff, 0x13, 0x4f, 0xb1, 0xb0, 0xb3, 0xbd, 0xdf,
+    0xe1, 0xd6, 0x5e, 0x3c, 0x76, 0xb2, 0xf7, 0x5e, 0xc9, 0x8f, 0xd8, 0x0b,
+    0x37, 0xff, 0xf6, 0x4e, 0xe5, 0xfe, 0x47, 0x7b, 0x0e, 0x76, 0x2e, 0xd6,
+    0x5f, 0xd2, 0xe4, 0xd2, 0x89, 0x96, 0x50, 0xd1, 0x1d, 0xd2, 0xf5, 0xfc,
+    0x3e, 0x3c, 0x75, 0x25, 0x95, 0x07, 0xa4, 0xe4, 0x97, 0xfa, 0x6f, 0x34,
+    0x1d, 0xc6, 0xb2, 0xff, 0x6c, 0xd6, 0x37, 0xa0, 0x6b, 0x2a, 0x0f, 0x9c,
+    0x8c, 0xeb, 0x15, 0x95, 0x1a, 0x3c, 0xc7, 0x9a, 0x1f, 0xf2, 0xeb, 0xc2,
+    0x60, 0xa3, 0x15, 0x0c, 0x21, 0xef, 0xb0, 0x8d, 0xdc, 0x59, 0x7f, 0xff,
+    0xfe, 0xf3, 0x7f, 0xd9, 0xa8, 0xdf, 0xb0, 0xe1, 0xdd, 0xd9, 0x9d, 0x4b,
+    0x02, 0x40, 0xe2, 0xcb, 0x7d, 0x91, 0x65, 0xc2, 0x5b, 0xff, 0xe2, 0x9b,
+    0xd0, 0xda, 0x63, 0xb6, 0xdc, 0x1d, 0x65, 0xcc, 0x75, 0x94, 0xc7, 0xcf,
+    0x32, 0x8d, 0xff, 0x8e, 0x76, 0x9b, 0xce, 0x51, 0x0b, 0x2f, 0xf3, 0xca,
+    0x6f, 0x37, 0x5f, 0x59, 0x7f, 0xd2, 0x09, 0x7e, 0x37, 0xbf, 0x96, 0x5f,
+    0xfa, 0x3b, 0xd8, 0x4f, 0xc3, 0xc1, 0x2c, 0xbf, 0x41, 0x7f, 0x60, 0xd6,
+    0x5f, 0xbf, 0xb0, 0x1d, 0x01, 0x65, 0x31, 0xea, 0x84, 0xa6, 0xff, 0xf7,
+    0x9b, 0xbf, 0x66, 0xce, 0x07, 0xd1, 0xb8, 0xb2, 0xfe, 0x28, 0xea, 0x4c,
+    0x4b, 0x29, 0x65, 0xfe, 0xcf, 0x16, 0x7f, 0xcc, 0xb2, 0x86, 0x7d, 0x04,
+    0x59, 0xf0, 0xbb, 0xfe, 0xfc, 0x4b, 0x93, 0x4a, 0x27, 0x59, 0x6c, 0xc4,
+    0xc8, 0x7a, 0x85, 0xc7, 0xcb, 0xaf, 0xff, 0xbf, 0xec, 0x06, 0xc3, 0xc6,
+    0x7c, 0x78, 0x4b, 0x2d, 0xa5, 0x96, 0x31, 0x65, 0xfc, 0xe3, 0xd6, 0x83,
+    0x3a, 0xcb, 0xf4, 0x61, 0x7f, 0x6d, 0x65, 0xb6, 0x85, 0x95, 0x88, 0x91,
+    0x34, 0x47, 0xb1, 0x23, 0x97, 0xf0, 0xa6, 0xfb, 0xed, 0xac, 0x59, 0x6e,
+    0xb6, 0x1f, 0x66, 0x25, 0xdb, 0x98, 0x9b, 0xbb, 0xc6, 0x9b, 0x43, 0x5c,
+    0x25, 0x98, 0xd4, 0xe7, 0x5e, 0x84, 0xa1, 0x46, 0x85, 0xf8, 0xec, 0xaf,
+    0xff, 0xff, 0x36, 0x1f, 0x3c, 0xd8, 0x7d, 0x85, 0x9f, 0xf6, 0x4b, 0xcd,
+    0x87, 0x59, 0x7f, 0xff, 0xf4, 0x9b, 0x85, 0x9b, 0xfd, 0x93, 0x7a, 0x0a,
+    0x6d, 0x8f, 0xdb, 0x6f, 0x59, 0x7f, 0xf9, 0xb0, 0xc2, 0xce, 0x67, 0xbc,
+    0xdc, 0x59, 0x6c, 0xe9, 0x18, 0x1f, 0x78, 0xbf, 0xff, 0x9b, 0x0c, 0x2c,
+    0x9f, 0x03, 0xf2, 0x73, 0x5f, 0x8b, 0x2f, 0xfd, 0x9a, 0xf4, 0x6c, 0x7f,
+    0x86, 0x16, 0x5f, 0xff, 0xfe, 0x83, 0x0b, 0x37, 0xfb, 0x35, 0xac, 0xff,
+    0x37, 0x7f, 0x1c, 0xf3, 0x62, 0xca, 0x64, 0x5d, 0x68, 0xfe, 0xff, 0xff,
+    0xb0, 0x8d, 0xd9, 0xa8, 0xde, 0xdf, 0xe6, 0x1a, 0xda, 0x7e, 0x96, 0x57,
+    0x95, 0x7f, 0x94, 0x66, 0xbc, 0x29, 0xfc, 0x62, 0x82, 0x11, 0x53, 0x2b,
+    0xc2, 0x0c, 0xb6, 0xab, 0xff, 0xcc, 0x3d, 0x87, 0x6d, 0x90, 0x37, 0x9b,
+    0x8b, 0x2f, 0xde, 0x6f, 0xe1, 0xd6, 0x5a, 0x4b, 0x28, 0x52, 0x6e, 0x24,
+    0x4f, 0x6d, 0x42, 0x2a, 0xe7, 0x84, 0x35, 0xff, 0xfe, 0x9f, 0xce, 0x53,
+    0x6c, 0xf7, 0x6d, 0xcc, 0x1c, 0xf8, 0x62, 0xcb, 0xf4, 0xa3, 0xa9, 0x71,
+    0x65, 0xff, 0xff, 0xff, 0xb0, 0x8d, 0xd8, 0xde, 0x08, 0xb9, 0x9b, 0xf0,
+    0x72, 0x73, 0x7c, 0xc2, 0xf3, 0xdd, 0x02, 0x06, 0x92, 0xff, 0xff, 0xcc,
+    0x60, 0xc3, 0xad, 0x81, 0x89, 0xf9, 0xdf, 0x83, 0xee, 0x9c, 0xc5, 0x97,
+    0xff, 0xf6, 0x6f, 0x82, 0xd9, 0xc6, 0xd3, 0x81, 0xca, 0x68, 0x59, 0x5d,
+    0xa3, 0x47, 0xce, 0xb6, 0x9f, 0xa4, 0xef, 0xd8, 0xa7, 0x91, 0xb9, 0x56,
+    0x2a, 0x64, 0x0c, 0xa2, 0x6b, 0xf8, 0xd2, 0xcf, 0xf9, 0x96, 0x5c, 0x3c,
+    0x59, 0x50, 0xcc, 0xab, 0xc8, 0x47, 0xb1, 0x17, 0xa9, 0x04, 0x8f, 0x0d,
+    0x62, 0x95, 0x24, 0x12, 0xbd, 0xb2, 0xdb, 0x6e, 0xac, 0xb1, 0xd6, 0x5f,
+    0xe7, 0x96, 0x1d, 0xc8, 0x0b, 0x2f, 0xb3, 0xd1, 0x32, 0xca, 0xda, 0x0f,
+    0x93, 0xc2, 0x2e, 0x63, 0x77, 0x31, 0x65, 0xc7, 0xef, 0x61, 0xe4, 0xb1,
+    0x9d, 0xb7, 0x16, 0x5f, 0xff, 0xfd, 0xd9, 0x66, 0xfd, 0x9c, 0x6c, 0x20,
+    0x6c, 0x2c, 0xde, 0x59, 0xcd, 0xeb, 0x2f, 0x9c, 0xed, 0xc5, 0x97, 0xef,
+    0x39, 0xdb, 0x8b, 0x2b, 0xc7, 0x91, 0xc2, 0x1a, 0xd2, 0x38, 0xca, 0x18,
+    0x37, 0xff, 0xbc, 0x1c, 0x23, 0x76, 0x7f, 0xa9, 0x61, 0x2c, 0xbf, 0xd8,
+    0xe7, 0xd9, 0xb7, 0x07, 0x59, 0x7f, 0xfa, 0x51, 0xcf, 0x07, 0x59, 0xff,
+    0xb1, 0xd6, 0x50, 0xd1, 0x9d, 0xda, 0x6f, 0x46, 0xf7, 0xfe, 0x2c, 0x09,
+    0xba, 0x68, 0x3e, 0x2c, 0xbf, 0xff, 0x06, 0x36, 0x16, 0x0f, 0xcc, 0x68,
+    0xe0, 0xd0, 0x2c, 0xac, 0x4e, 0xf3, 0x50, 0xf5, 0x39, 0x91, 0x1e, 0xdf,
+    0xfe, 0xff, 0xb3, 0x77, 0xf3, 0x66, 0xe3, 0x90, 0x16, 0x5f, 0xe8, 0x3b,
+    0x97, 0x52, 0x85, 0x94, 0x48, 0x82, 0xfa, 0x85, 0xff, 0xd8, 0xc0, 0xd8,
+    0x59, 0xbd, 0xb4, 0xeb, 0x29, 0x8f, 0x9f, 0xe4, 0x57, 0xc6, 0x6c, 0xe4,
+    0xcb, 0x2d, 0xf5, 0x95, 0x06, 0xe1, 0xc9, 0xef, 0xfc, 0x53, 0x96, 0x6f,
+    0xe0, 0x63, 0xa5, 0x97, 0xfd, 0xe8, 0xeb, 0x60, 0xa9, 0xbc, 0x0c, 0xb2,
+    0xfd, 0xfe, 0xa4, 0xdb, 0x6b, 0x28, 0x67, 0xdf, 0xc4, 0x3a, 0x84, 0x69,
+    0x4f, 0x0b, 0x0a, 0x92, 0xea, 0x7b, 0x4a, 0xb3, 0xe4, 0x65, 0x5f, 0x59,
+    0x0c, 0x3c, 0x6f, 0xdb, 0xf7, 0x7f, 0x9e, 0x59, 0x7f, 0xec, 0xe0, 0x60,
+    0xde, 0x46, 0xa6, 0x59, 0x4c, 0x7d, 0xa6, 0x16, 0xdf, 0x6a, 0x4e, 0x35,
+    0x97, 0x3f, 0x6b, 0x2f, 0xda, 0xcd, 0xb6, 0x02, 0xcb, 0xfd, 0xdf, 0x9b,
+    0xc4, 0x19, 0xd6, 0x5f, 0xa3, 0xa0, 0x6a, 0x16, 0x54, 0x8f, 0x77, 0xe6,
+    0xb5, 0x3a, 0x2a, 0x4a, 0x10, 0xf7, 0xbf, 0x82, 0xb5, 0x94, 0x29, 0x4c,
+    0x22, 0x21, 0x81, 0x85, 0x17, 0xfa, 0x33, 0xe0, 0x10, 0xa4, 0xb2, 0xec,
+    0xf2, 0xca, 0x23, 0xc9, 0xdb, 0x33, 0xb8, 0xd8, 0x59, 0x76, 0x0d, 0x65,
+    0x6d, 0x4c, 0x92, 0x99, 0xe1, 0x83, 0x29, 0xd7, 0xfc, 0x86, 0x5b, 0x91,
+    0x72, 0x32, 0xaf, 0xc2, 0x04, 0x24, 0x9b, 0xc5, 0xef, 0xcd, 0xfe, 0x60,
+    0x16, 0x5f, 0xbd, 0x9b, 0xdb, 0x7a, 0xcb, 0xff, 0xff, 0x13, 0xff, 0xd1,
+    0x36, 0xc2, 0xcf, 0x37, 0xf8, 0x1e, 0xc3, 0x0b, 0x2e, 0xc0, 0x2c, 0xbf,
+    0xf8, 0x80, 0x58, 0xd3, 0x7a, 0x08, 0xd5, 0x94, 0xc7, 0xb2, 0xe2, 0xd7,
+    0xf4, 0xb9, 0xf6, 0x8e, 0x96, 0x5f, 0xff, 0xf3, 0xcd, 0xb3, 0x9c, 0xcf,
+    0x6b, 0x58, 0x61, 0x61, 0x8e, 0x05, 0x97, 0xe8, 0x2f, 0x3c, 0x96, 0x5f,
+    0xf7, 0xf2, 0x78, 0xe3, 0x6b, 0x16, 0x5e, 0x81, 0xc2, 0xca, 0x19, 0xfc,
+    0xf4, 0x4c, 0x73, 0x8a, 0x59, 0x4b, 0x2f, 0xfb, 0xf9, 0x3c, 0x71, 0xb5,
+    0x8b, 0x2f, 0x40, 0xe1, 0x65, 0xee, 0x3c, 0xdb, 0x11, 0x33, 0x06, 0x18,
+    0x17, 0xd0, 0x59, 0xce, 0x2d, 0x84, 0x9e, 0xcf, 0xe3, 0x7c, 0xbe, 0xda,
+    0x05, 0x50, 0xa3, 0x68, 0x59, 0x7c, 0xce, 0x43, 0x59, 0x63, 0x36, 0x1e,
+    0xb8, 0xcd, 0xef, 0xd8, 0xfd, 0x4b, 0x8b, 0x2f, 0xe7, 0x9b, 0xf8, 0x5f,
+    0x59, 0x40, 0x3d, 0x53, 0x0a, 0x2a, 0x49, 0x94, 0x34, 0x21, 0x79, 0x08,
+    0x0b, 0xee, 0xfc, 0xdd, 0xac, 0xbe, 0x0f, 0xa0, 0xeb, 0x2f, 0xff, 0x83,
+    0xad, 0x41, 0x61, 0xad, 0xef, 0x60, 0x8b, 0x2a, 0x11, 0x2d, 0x84, 0x9a,
+    0x22, 0xbe, 0xf4, 0x04, 0x96, 0x5f, 0x05, 0xfa, 0xfa, 0xcb, 0x8b, 0xeb,
+    0x2f, 0xff, 0xfe, 0x37, 0x35, 0xa6, 0x3e, 0xc9, 0xa4, 0x13, 0xf5, 0x2e,
+    0x72, 0x35, 0xda, 0xcb, 0xbc, 0xeb, 0x2c, 0xec, 0x89, 0x0d, 0xef, 0x57,
+    0xe8, 0x63, 0x60, 0xeb, 0x2f, 0x69, 0xba, 0x59, 0x78, 0x23, 0x85, 0x97,
+    0xff, 0xcc, 0x36, 0x7f, 0xb3, 0xff, 0x67, 0x1a, 0x65, 0x95, 0x25, 0xf2,
+    0x91, 0x93, 0xe1, 0x59, 0xb0, 0xc7, 0xe8, 0x82, 0x69, 0x65, 0xfa, 0x86,
+    0x81, 0xcb, 0xbc, 0x42, 0xe4, 0x65, 0x0a, 0x6e, 0x14, 0xfc, 0x9f, 0x78,
+    0xee, 0xd8, 0xe5, 0xb7, 0x56, 0x5e, 0x9e, 0x27, 0x59, 0x4b, 0x2f, 0xec,
+    0x38, 0xfd, 0x9c, 0x59, 0x7e, 0x9f, 0x67, 0x6d, 0x3a, 0xcb, 0xfb, 0x9d,
+    0xf6, 0xe4, 0x6a, 0xca, 0xda, 0x68, 0x95, 0x9c, 0x2f, 0x45, 0xbf, 0x2d,
+    0xbf, 0xc5, 0xb3, 0x7f, 0x52, 0xe4, 0xcb, 0x2f, 0xff, 0xf0, 0xfd, 0x9f,
+    0xfb, 0x97, 0x78, 0xda, 0x63, 0xc1, 0xab, 0x2e, 0x9f, 0xa5, 0x97, 0xef,
+    0x3e, 0xe4, 0x01, 0x65, 0x0d, 0x1b, 0xac, 0x74, 0xec, 0x1b, 0xa3, 0x37,
+    0xed, 0x82, 0x4f, 0x13, 0xac, 0xbf, 0x16, 0x79, 0xfe, 0xb2, 0xa4, 0x7a,
+    0x73, 0x16, 0xdf, 0xc6, 0xb7, 0x5c, 0x0f, 0x16, 0x56, 0x8f, 0x4c, 0x88,
+    0xea, 0x15, 0x13, 0x64, 0x64, 0x2d, 0x0e, 0x4b, 0xfd, 0x1b, 0x0b, 0x37,
+    0xe7, 0x96, 0x59, 0x96, 0x5f, 0xf0, 0x4b, 0x64, 0xcd, 0x38, 0x66, 0x59,
+    0x7f, 0x60, 0xe6, 0x94, 0x6e, 0x2c, 0xbf, 0xe3, 0x93, 0x9b, 0xe6, 0x9c,
+    0xeb, 0x2f, 0xf8, 0xfc, 0x79, 0xb7, 0x7d, 0x93, 0xac, 0xa8, 0x3f, 0x8c,
+    0x3a, 0xa9, 0xd3, 0x07, 0xd1, 0xf7, 0xe1, 0x53, 0x76, 0x12, 0xcb, 0xd2,
+    0x80, 0x2c, 0xb6, 0x86, 0x6c, 0x70, 0x56, 0xf8, 0x1c, 0xdc, 0xed, 0x65,
+    0x31, 0xe6, 0x84, 0x9a, 0xfc, 0x0c, 0xf8, 0x93, 0xac, 0xbf, 0xc5, 0x86,
+    0x6e, 0xff, 0x3c, 0xb2, 0xfe, 0xe6, 0x7b, 0xec, 0x6a, 0xcb, 0xfe, 0xe7,
+    0x83, 0x36, 0xc3, 0x37, 0x3a, 0x59, 0x63, 0x26, 0x45, 0x3f, 0x0d, 0xbe,
+    0x5d, 0x6f, 0xac, 0xb7, 0x16, 0x5f, 0x8c, 0xfe, 0x7b, 0x61, 0xa6, 0x8b,
+    0xa1, 0x1b, 0xd3, 0xc8, 0xd5, 0x95, 0x09, 0xc6, 0xe4, 0x34, 0x5d, 0x68,
+    0x28, 0x74, 0x28, 0x5f, 0x16, 0x81, 0x49, 0x4a, 0xd9, 0x34, 0xeb, 0xb3,
+    0x56, 0x8c, 0x5f, 0xd0, 0xb5, 0x28, 0xeb, 0xaf, 0xfe, 0x93, 0xf3, 0x27,
+    0x7f, 0xcf, 0x86, 0x2c, 0xbf, 0xec, 0xf6, 0xc1, 0x1f, 0x73, 0xd8, 0xb2,
+    0xfe, 0xf6, 0x77, 0x28, 0x3a, 0xcb, 0xfd, 0xec, 0x93, 0x96, 0x74, 0xb2,
+    0xb0, 0xf8, 0x3e, 0x5d, 0x7f, 0xff, 0xe9, 0x44, 0xfd, 0x4b, 0x8c, 0x6e,
+    0xce, 0x67, 0x6c, 0x70, 0xea, 0x75, 0x97, 0xfb, 0x0c, 0xd9, 0xe6, 0xc3,
+    0xac, 0xbf, 0xfe, 0x9f, 0x18, 0xbe, 0x59, 0xbf, 0x67, 0x0c, 0x25, 0x97,
+    0x38, 0x27, 0x44, 0x47, 0x0d, 0x6b, 0xa4, 0xca, 0xca, 0x1f, 0x97, 0xf7,
+    0xb0, 0xba, 0x83, 0x56, 0x5f, 0xce, 0x5f, 0x0e, 0xa7, 0x59, 0x4c, 0xaa,
+    0xd4, 0x08, 0xc5, 0x09, 0xef, 0xc6, 0x98, 0x61, 0x48, 0x85, 0xd7, 0x0f,
+    0x75, 0x65, 0xec, 0x69, 0x96, 0x5f, 0xf9, 0xb2, 0x6d, 0x9c, 0x8f, 0x3e,
+    0xe2, 0xcb, 0xfe, 0xc7, 0xeb, 0xd9, 0xf0, 0x3a, 0xcb, 0xff, 0x47, 0xb6,
+    0x6b, 0x27, 0xc7, 0x3a, 0xcb, 0xff, 0xdc, 0x0e, 0x16, 0xc2, 0xcf, 0x79,
+    0xc6, 0xb2, 0xff, 0x64, 0xfb, 0x26, 0x9c, 0x1a, 0x59, 0x52, 0x44, 0x1f,
+    0xd2, 0xaf, 0x8a, 0x35, 0x0b, 0x2f, 0xff, 0xe1, 0xec, 0xe3, 0x6d, 0xc1,
+    0x03, 0xd8, 0x58, 0xde, 0x59, 0x7f, 0xf9, 0xb6, 0xe0, 0x81, 0xec, 0x2c,
+    0x6f, 0x2c, 0xbe, 0x2c, 0x3e, 0xc2, 0x45, 0x37, 0x17, 0x6f, 0xfb, 0xac,
+    0x8e, 0xa6, 0x28, 0x3a, 0xcb, 0xfb, 0xae, 0x7b, 0x1f, 0x4b, 0x2f, 0xff,
+    0xfc, 0xc7, 0xd3, 0x67, 0x44, 0x1f, 0xc7, 0xb6, 0x6f, 0x6f, 0xcd, 0x0b,
+    0x29, 0xd1, 0x3d, 0xf2, 0xeb, 0xff, 0x41, 0x7e, 0x24, 0xc4, 0x6c, 0x2c,
+    0xa9, 0xd5, 0xd9, 0x8c, 0x70, 0xd4, 0x3e, 0xce, 0x3a, 0x86, 0x1b, 0x11,
+    0xcd, 0x0c, 0x6f, 0x1d, 0x7e, 0x1b, 0x1b, 0xc8, 0xaf, 0xff, 0xb1, 0xe7,
+    0xf4, 0x37, 0xf9, 0x13, 0xe7, 0x16, 0x5f, 0xed, 0x4f, 0x0d, 0xac, 0x25,
+    0x97, 0x8d, 0xe4, 0xcb, 0x2b, 0x0f, 0x47, 0xa3, 0x2b, 0x1d, 0x66, 0xc3,
+    0x45, 0x7d, 0x33, 0x64, 0xeb, 0x2f, 0x16, 0x0d, 0x65, 0xfd, 0x80, 0xc0,
+    0xea, 0x75, 0x97, 0xdb, 0x3c, 0xf3, 0x2c, 0xa8, 0x45, 0xa6, 0x11, 0xf4,
+    0x46, 0x43, 0x7c, 0x2e, 0xbf, 0x14, 0x61, 0x93, 0xac, 0xbd, 0xb6, 0x1f,
+    0xac, 0xbf, 0x7f, 0x84, 0xc6, 0xac, 0xa1, 0x41, 0xf8, 0x48, 0xa0, 0xe4,
+    0x17, 0xf7, 0x5c, 0xcc, 0x23, 0x56, 0x5f, 0x1c, 0x48, 0x02, 0xcb, 0xff,
+    0xd3, 0x8f, 0x4f, 0xd9, 0x66, 0xfd, 0x37, 0x16, 0x54, 0x23, 0x47, 0x0c,
+    0xd8, 0xb8, 0x24, 0x77, 0x7f, 0x8b, 0x2f, 0xef, 0xf9, 0xe6, 0x10, 0xeb,
+    0x29, 0x65, 0xbc, 0xb2, 0xbc, 0x5e, 0x38, 0x5d, 0xd9, 0xc5, 0x97, 0x3e,
+    0x96, 0x58, 0x12, 0x35, 0x9a, 0x16, 0xbe, 0x79, 0x08, 0x35, 0x96, 0xfc,
+    0x1e, 0x57, 0x89, 0xe9, 0xd3, 0x08, 0x02, 0x61, 0x42, 0x56, 0xe8, 0x1a,
+    0xcb, 0xb8, 0xcb, 0x2e, 0xe8, 0x0b, 0x2b, 0xc7, 0x88, 0x2b, 0x16, 0x08,
+    0xb5, 0xfd, 0xc8, 0xe8, 0x1a, 0x85, 0x97, 0x0d, 0x96, 0x54, 0x32, 0x86,
+    0xa7, 0x64, 0xc9, 0x79, 0xbd, 0xc2, 0x89, 0xa3, 0x76, 0xd4, 0x71, 0x3e,
+    0x3a, 0x78, 0xc7, 0xc9, 0xe3, 0x86, 0x7b, 0xcb, 0xaf, 0x6f, 0xf6, 0x2c,
+    0xbe, 0x63, 0xc7, 0x96, 0x5f, 0x9f, 0xdb, 0x07, 0x0b, 0x29, 0x8f, 0xa3,
+    0xc3, 0xdf, 0x21, 0xbf, 0xbe, 0x51, 0x2c, 0xfa, 0xcb, 0xec, 0x27, 0x92,
+    0xcb, 0xef, 0xf0, 0x4e, 0x6c, 0x3c, 0xc1, 0x41, 0x65, 0xfe, 0xfb, 0x4f,
+    0x9e, 0x0f, 0xd6, 0x5b, 0x16, 0x5e, 0xe4, 0x1a, 0xb2, 0xbc, 0x6b, 0x7e,
+    0x21, 0x69, 0x96, 0x5f, 0xd8, 0x1c, 0xf7, 0x73, 0xac, 0xa8, 0x3c, 0x1e,
+    0x09, 0x5f, 0xb6, 0x60, 0xf0, 0x96, 0x57, 0x47, 0x92, 0x44, 0x37, 0xbd,
+    0x03, 0x59, 0x50, 0x8e, 0x9c, 0x85, 0x5c, 0xc4, 0x57, 0xff, 0xf0, 0x76,
+    0x77, 0xe6, 0x19, 0x43, 0xcf, 0xdf, 0x9f, 0x4b, 0x2f, 0xec, 0xd0, 0x18,
+    0xbe, 0xb2, 0xee, 0xba, 0x59, 0x63, 0xec, 0x3c, 0x53, 0x96, 0x5f, 0xbe,
+    0xd3, 0x93, 0xac, 0xbf, 0xfb, 0xfc, 0xd9, 0xbb, 0xfc, 0xf7, 0xd8, 0xeb,
+    0x2a, 0x47, 0xe2, 0x44, 0xf7, 0xf7, 0x9e, 0x47, 0xd3, 0x2c, 0xbf, 0xf8,
+    0xd3, 0x5f, 0xfc, 0xf9, 0x47, 0x52, 0x59, 0x7f, 0x66, 0x39, 0x7f, 0x8b,
+    0x2f, 0xc5, 0x12, 0xcf, 0xac, 0xa2, 0x3d, 0x1f, 0x95, 0xd4, 0x22, 0xe6,
+    0x50, 0x98, 0xb9, 0xb8, 0xb2, 0xc7, 0x59, 0x7b, 0x59, 0xd2, 0xcb, 0xd8,
+    0xd3, 0xac, 0xbe, 0x83, 0x9d, 0x96, 0x5b, 0x27, 0x37, 0xbf, 0x1c, 0xa1,
+    0xa2, 0xa3, 0xc2, 0xc0, 0x11, 0x25, 0xab, 0xe9, 0xc3, 0xae, 0xd6, 0x5f,
+    0xf1, 0xb0, 0x52, 0xcf, 0x31, 0xd6, 0x5c, 0xe6, 0xce, 0x7b, 0xbf, 0x25,
+    0xbf, 0x37, 0x39, 0x07, 0x59, 0x4c, 0x8e, 0xf2, 0x84, 0xce, 0xf2, 0xfa,
+    0x85, 0xe7, 0x2c, 0x7a, 0x35, 0x05, 0xa3, 0x4a, 0xd1, 0xa1, 0xe1, 0x48,
+    0xf0, 0x9b, 0x01, 0x09, 0x43, 0x98, 0x31, 0xdf, 0x5f, 0x86, 0xc4, 0xe3,
+    0x59, 0x7b, 0x83, 0xe9, 0x65, 0xc0, 0xed, 0x65, 0xff, 0xec, 0x9b, 0xd0,
+    0x46, 0x96, 0x7f, 0xc1, 0x59, 0x46, 0x9f, 0x17, 0x86, 0x2f, 0xbb, 0x0b,
+    0xc9, 0x65, 0x6c, 0x46, 0x34, 0xa1, 0x01, 0xd1, 0x1d, 0x32, 0x64, 0x9a,
+    0x87, 0x65, 0xfd, 0xaf, 0x66, 0x83, 0x8b, 0x2f, 0xff, 0xec, 0xea, 0x5c,
+    0xff, 0xa0, 0xf0, 0xc3, 0xd9, 0x1b, 0x52, 0xca, 0xc4, 0x47, 0xb1, 0x6d,
+    0xff, 0x68, 0xb2, 0x79, 0xc3, 0xa9, 0xd6, 0x5f, 0xc5, 0xb3, 0xbe, 0x00,
+    0x6b, 0x2a, 0x0f, 0xb5, 0xcf, 0x2f, 0xfc, 0x1e, 0x6c, 0x38, 0x9e, 0x7f,
+    0x42, 0xcb, 0xf6, 0x7c, 0x39, 0xd2, 0xcb, 0xc6, 0xe7, 0x4b, 0x2e, 0x89,
+    0xb6, 0x1e, 0x37, 0xca, 0x28, 0x91, 0x70, 0x18, 0x44, 0x5f, 0xff, 0xc6,
+    0x7f, 0x18, 0xfb, 0x0b, 0x3b, 0x6d, 0x69, 0xa7, 0x59, 0x7f, 0xff, 0xfe,
+    0x09, 0x6c, 0x31, 0xfa, 0x96, 0x9c, 0x1b, 0x38, 0x18, 0xeb, 0xd8, 0xc5,
+    0x86, 0xac, 0xbf, 0xff, 0xff, 0xdd, 0xe7, 0x65, 0x9f, 0xf0, 0x7c, 0xfd,
+    0x4b, 0x9f, 0xd6, 0x19, 0x8c, 0x3f, 0xf1, 0x96, 0x5f, 0xff, 0xef, 0x87,
+    0x0b, 0x63, 0x67, 0xca, 0x01, 0xb3, 0x18, 0x6b, 0x2f, 0xf8, 0xf8, 0x7d,
+    0x87, 0xdc, 0xdf, 0x25, 0x97, 0xff, 0xff, 0xb3, 0x66, 0x84, 0xe4, 0x6c,
+    0xe3, 0x61, 0x4d, 0xcf, 0xb6, 0x4e, 0x50, 0xb2, 0xb4, 0x98, 0xe9, 0xd8,
+    0x7c, 0x83, 0x7f, 0xfd, 0xad, 0x67, 0xf9, 0xe6, 0xcd, 0x9e, 0x04, 0x2c,
+    0xa8, 0x54, 0x60, 0xd1, 0xd7, 0x04, 0xc6, 0xff, 0xfe, 0x8f, 0x60, 0xcd,
+    0x0c, 0x7b, 0x3f, 0x07, 0x7f, 0xac, 0xa8, 0x57, 0x4f, 0x8b, 0xde, 0x95,
+    0x72, 0x13, 0x6b, 0xff, 0xff, 0xe6, 0x9b, 0xd9, 0xcd, 0x67, 0x7b, 0x3c,
+    0xd8, 0x59, 0xbc, 0xb0, 0x61, 0x25, 0x97, 0xec, 0x2e, 0xc4, 0x3a, 0xcb,
+    0xff, 0xbd, 0x90, 0x53, 0x16, 0x7f, 0x8e, 0xb2, 0xd2, 0x24, 0x75, 0x7d,
+    0xff, 0x74, 0xa6, 0xff, 0xdb, 0xbf, 0x8e, 0x4d, 0x27, 0xd4, 0xeb, 0x2f,
+    0x7d, 0x8d, 0x59, 0x76, 0x1f, 0x61, 0xf0, 0x8a, 0x11, 0x2f, 0xfe, 0x69,
+    0xdc, 0xe7, 0x6d, 0x83, 0x6d, 0xeb, 0x28, 0x67, 0xf7, 0xa3, 0x3b, 0xd3,
+    0x36, 0xe2, 0xcb, 0xff, 0xfb, 0xed, 0x3e, 0x0f, 0x61, 0xde, 0x5a, 0x69,
+    0xdc, 0xeb, 0x2f, 0xf4, 0xee, 0x72, 0x8d, 0x4c, 0xb2, 0xff, 0xba, 0xc3,
+    0x40, 0x7c, 0xd9, 0xac, 0x44, 0x93, 0x2f, 0x5f, 0x01, 0xde, 0x65, 0x96,
+    0x85, 0x97, 0xb0, 0xa7, 0xd8, 0x6c, 0xbb, 0x22, 0xbf, 0xfe, 0xc0, 0xeb,
+    0x64, 0xde, 0x09, 0xad, 0x84, 0x6a, 0xcb, 0xf8, 0xe1, 0x06, 0xc3, 0xe9,
+    0x65, 0xff, 0xf3, 0xfe, 0x34, 0x13, 0xb7, 0x36, 0x72, 0x5c, 0x59, 0x7f,
+    0xda, 0x9e, 0x27, 0x9c, 0x3a, 0x9d, 0x65, 0xff, 0xb6, 0x4d, 0xe0, 0x9a,
+    0xd8, 0x46, 0xac, 0xbf, 0xc5, 0xb3, 0x81, 0xdb, 0x0e, 0x96, 0x56, 0x1f,
+    0xe0, 0x50, 0xef, 0xff, 0xfd, 0x1d, 0x6e, 0xfe, 0x0b, 0x27, 0xd9, 0x38,
+    0x75, 0x2f, 0xc4, 0xdc, 0x59, 0x50, 0x9a, 0x87, 0x21, 0x74, 0x12, 0x1b,
+    0xf0, 0xf3, 0xa7, 0x25, 0x97, 0xff, 0x6c, 0xe7, 0x83, 0xb3, 0xfc, 0xe4,
+    0x69, 0x65, 0xff, 0xfd, 0x1a, 0x06, 0xc8, 0xde, 0xfe, 0x8d, 0x6b, 0x3f,
+    0xc5, 0x95, 0x3a, 0x2a, 0x3c, 0x95, 0x7f, 0xe9, 0x47, 0xc3, 0xde, 0xce,
+    0x7d, 0x96, 0x5f, 0xff, 0x7a, 0x27, 0xd8, 0x59, 0xbd, 0xfd, 0xe8, 0xe9,
+    0x65, 0xff, 0xff, 0x75, 0xc6, 0xc3, 0x36, 0x7b, 0x3f, 0xcc, 0x9f, 0x66,
+    0x30, 0xd6, 0x50, 0xd1, 0x81, 0x8a, 0x97, 0xff, 0x67, 0xdb, 0xa9, 0x14,
+    0x6c, 0xdd, 0xed, 0x65, 0xff, 0xf4, 0x75, 0x2e, 0x79, 0xb3, 0xfd, 0x49,
+    0xbc, 0xb2, 0xff, 0x8b, 0x35, 0x9d, 0xe3, 0x0d, 0x65, 0xfd, 0x3f, 0xe6,
+    0x28, 0x3a, 0xcb, 0xf3, 0xc4, 0xd1, 0x32, 0xcb, 0xf6, 0x0f, 0xc1, 0x31,
+    0x65, 0xd1, 0x36, 0xc3, 0xd1, 0x22, 0x8b, 0xff, 0xfb, 0x27, 0xc6, 0x19,
+    0x07, 0xdb, 0x20, 0x6f, 0x37, 0x16, 0x5f, 0xd9, 0xe6, 0xd7, 0x9d, 0x65,
+    0xfb, 0xcd, 0xaf, 0x3a, 0xcb, 0xb0, 0xcd, 0x87, 0xa7, 0x85, 0x95, 0x0b,
+    0x8e, 0xf9, 0x0c, 0xfe, 0x89, 0x1a, 0x30, 0x29, 0x88, 0xb4, 0x95, 0xe5,
+    0x17, 0x37, 0x28, 0x40, 0x70, 0xbf, 0xf0, 0xb0, 0xbe, 0xfe, 0x60, 0xd6,
+    0x54, 0xed, 0x85, 0x28, 0xe1, 0x1c, 0x6c, 0x36, 0x3b, 0x97, 0x9d, 0xd4,
+    0x65, 0xcd, 0x18, 0xa4, 0xc4, 0x5a, 0x85, 0x91, 0xe1, 0x0b, 0xe3, 0x50,
+    0x2a, 0x11, 0x8f, 0x23, 0xa2, 0xfc, 0xe5, 0x66, 0xec, 0x2b, 0x6f, 0xff,
+    0x9b, 0x98, 0x39, 0xf0, 0xcd, 0x84, 0x59, 0xd2, 0xcb, 0xfd, 0xf2, 0xcf,
+    0xfb, 0x27, 0x59, 0x7f, 0x7f, 0x99, 0x13, 0x9d, 0x65, 0xfe, 0xd9, 0xac,
+    0xea, 0x4c, 0x75, 0x95, 0xa3, 0xe4, 0x30, 0xba, 0xff, 0xcf, 0xaf, 0x67,
+    0xe0, 0x98, 0x0b, 0x2d, 0xba, 0xb2, 0xff, 0xf8, 0xb2, 0x7d, 0x80, 0x0f,
+    0xf3, 0x0e, 0x03, 0x16, 0x5f, 0x4b, 0xed, 0x3a, 0xcb, 0xfd, 0xdb, 0x73,
+    0x07, 0xb0, 0x6b, 0x2f, 0xee, 0xa5, 0xcd, 0x9f, 0x65, 0x96, 0xcf, 0x1f,
+    0x39, 0x86, 0xd7, 0xfe, 0x94, 0x60, 0x3d, 0x98, 0x5d, 0xac, 0xbf, 0xfd,
+    0xe6, 0x21, 0xec, 0x13, 0xb2, 0xcf, 0x62, 0xcb, 0xfe, 0x7f, 0xf2, 0x69,
+    0x04, 0xbe, 0xb2, 0xb1, 0x18, 0x73, 0x1e, 0x81, 0x32, 0xff, 0xbc, 0xc7,
+    0x8c, 0x2f, 0xf1, 0x65, 0xff, 0xfe, 0x0f, 0xf4, 0x19, 0xb6, 0x7e, 0x6f,
+    0x04, 0x1f, 0x6c, 0xdd, 0x59, 0x7d, 0x1d, 0xc1, 0xf6, 0x23, 0x47, 0xb3,
+    0x02, 0x37, 0xa8, 0x57, 0xd9, 0x90, 0x97, 0xec, 0x8d, 0x8f, 0x34, 0x28,
+    0xea, 0x65, 0x08, 0xad, 0xd8, 0xef, 0x2f, 0xff, 0xed, 0x63, 0x9f, 0x61,
+    0xaf, 0xd7, 0xb3, 0xde, 0x8f, 0xac, 0xbe, 0xcc, 0x07, 0x16, 0x5f, 0x66,
+    0xa6, 0x92, 0xcb, 0xff, 0x9b, 0xa9, 0x73, 0x60, 0xdb, 0x7c, 0x0d, 0x65,
+    0xee, 0xa3, 0x71, 0x65, 0x1a, 0x7d, 0x2e, 0x93, 0x7d, 0x9e, 0x7d, 0xeb,
+    0x2f, 0xe9, 0x67, 0xb3, 0x7f, 0x16, 0x5b, 0x06, 0x7a, 0x53, 0x11, 0xdf,
+    0xff, 0x78, 0x3c, 0xd9, 0xe6, 0xff, 0xb3, 0x51, 0xbd, 0x65, 0xfb, 0x8d,
+    0x9d, 0x1d, 0x65, 0x0c, 0xff, 0x3e, 0xa9, 0x7f, 0x67, 0x45, 0x98, 0x05,
+    0x95, 0x87, 0x9c, 0x44, 0x57, 0xf1, 0x47, 0x5e, 0xc9, 0xd6, 0x5d, 0x07,
+    0x1a, 0xa6, 0x1c, 0x21, 0x36, 0x11, 0x9a, 0x74, 0x28, 0x79, 0x7c, 0x82,
+    0xff, 0xed, 0x41, 0x9b, 0xa5, 0x06, 0x75, 0x2e, 0x2c, 0xb4, 0x2c, 0xbe,
+    0x6d, 0x3f, 0x4b, 0x2d, 0xf6, 0x36, 0x5c, 0x10, 0xa1, 0xa2, 0x89, 0x9f,
+    0x2f, 0xf9, 0xcb, 0xbf, 0x31, 0xca, 0x16, 0x5f, 0xfc, 0x32, 0x79, 0xa6,
+    0x8f, 0x83, 0x38, 0xb2, 0xff, 0xf8, 0xa2, 0x7f, 0x43, 0x7f, 0x8c, 0x5d,
+    0x49, 0x65, 0xc7, 0x11, 0x65, 0xd1, 0x32, 0xca, 0x83, 0x5e, 0xc3, 0x17,
+    0xff, 0x36, 0xf6, 0x1e, 0xc8, 0x98, 0x6e, 0x62, 0xcb, 0xff, 0xff, 0xc4,
+    0xc6, 0xf9, 0xe6, 0xd8, 0x41, 0xdd, 0xd9, 0x9d, 0x4b, 0x02, 0x40, 0xe2,
+    0xcb, 0xff, 0xe6, 0x97, 0xf9, 0x9b, 0xf5, 0x80, 0xe3, 0xf6, 0xb2, 0xff,
+    0xd8, 0x3c, 0x73, 0x76, 0x18, 0xe6, 0x2c, 0xbf, 0x79, 0xa0, 0xa7, 0x59,
+    0x47, 0x4c, 0xef, 0xd0, 0x80, 0x25, 0x2d, 0xe8, 0x57, 0xff, 0xf0, 0x46,
+    0xe4, 0x0d, 0x9f, 0xcf, 0x47, 0xf5, 0x83, 0x59, 0x7c, 0x76, 0x63, 0x16,
+    0x54, 0x23, 0x0a, 0x48, 0x8e, 0xb9, 0x44, 0xaa, 0x4f, 0x83, 0xff, 0x94,
+    0x8d, 0x7f, 0xb5, 0x13, 0xf9, 0xb0, 0x6b, 0x2f, 0xa2, 0x6e, 0x32, 0xca,
+    0x92, 0xe1, 0xe0, 0xc8, 0xb0, 0xdf, 0xb4, 0x56, 0x96, 0x23, 0xa3, 0x82,
+    0x33, 0xbf, 0xff, 0xa5, 0x1a, 0x34, 0xe4, 0xdd, 0x4b, 0x83, 0xd3, 0x4e,
+    0xb2, 0xff, 0xff, 0x71, 0x82, 0x3d, 0x86, 0x93, 0x8c, 0x39, 0xed, 0x93,
+    0x4c, 0xb2, 0xd9, 0x32, 0x31, 0xb8, 0xbd, 0x7a, 0x26, 0xe2, 0xcb, 0x82,
+    0x35, 0x97, 0xf7, 0x08, 0xb0, 0x1c, 0x59, 0x53, 0x1e, 0x1f, 0xc5, 0xef,
+    0xff, 0xfc, 0xe3, 0xc2, 0x7f, 0xf3, 0x34, 0x00, 0x46, 0x75, 0xfe, 0x32,
+    0xca, 0x87, 0x42, 0xff, 0x95, 0x8a, 0xe7, 0x71, 0x88, 0xb4, 0xe1, 0xf6,
+    0xa1, 0x05, 0xe9, 0x57, 0xef, 0x3a, 0x96, 0x51, 0x99, 0x7c, 0xa4, 0x2c,
+    0x06, 0x11, 0xdf, 0xd1, 0x26, 0x1e, 0x12, 0xcb, 0xe2, 0xfb, 0x6f, 0x59,
+    0x7d, 0x20, 0xbf, 0xd6, 0x5d, 0x1b, 0x8b, 0x2e, 0x0e, 0xe2, 0xcb, 0xd0,
+    0x50, 0xb2, 0xbb, 0x3c, 0xdd, 0x0c, 0x9c, 0x6a, 0xa1, 0x18, 0x58, 0x46,
+    0xcd, 0xf7, 0xdf, 0xe3, 0x81, 0x65, 0xff, 0xde, 0x6d, 0x8d, 0xa0, 0xce,
+    0xfa, 0xed, 0x65, 0xf3, 0x79, 0xe7, 0x59, 0x7e, 0x82, 0x39, 0xa6, 0xac,
+    0xbf, 0xcd, 0xc6, 0x08, 0xac, 0x70, 0xb2, 0xf4, 0x7e, 0x16, 0x50, 0xcf,
+    0xeb, 0xe5, 0x3b, 0xcd, 0xaf, 0xde, 0x3b, 0x17, 0x6b, 0x2f, 0xb3, 0xed,
+    0xc5, 0x95, 0x87, 0x93, 0xc2, 0x8b, 0xd2, 0x83, 0xac, 0xb9, 0xc4, 0x59,
+    0x5e, 0x36, 0x7c, 0x1c, 0xbf, 0xf7, 0xfc, 0xd9, 0x83, 0x2c, 0x31, 0x65,
+    0x61, 0xef, 0x31, 0x0d, 0xff, 0xb9, 0x13, 0x67, 0x9b, 0x5e, 0x75, 0x97,
+    0x67, 0x96, 0x53, 0x1e, 0xa1, 0xcf, 0xaf, 0x69, 0x8d, 0x59, 0x7f, 0xfc,
+    0x1c, 0x6f, 0x67, 0x7e, 0x6d, 0x86, 0x1f, 0xb5, 0x97, 0xbf, 0x86, 0x2c,
+    0xb8, 0x33, 0x91, 0xf8, 0xfd, 0x52, 0xf4, 0xe1, 0xfa, 0xcb, 0xef, 0x33,
+    0x81, 0x65, 0x61, 0xbf, 0xf8, 0xf5, 0x62, 0x23, 0x40, 0xdb, 0x7e, 0x08,
+    0xac, 0x9f, 0xeb, 0x2f, 0xd3, 0xb9, 0x7f, 0x8b, 0x2f, 0xef, 0x3c, 0xfb,
+    0x25, 0xf5, 0x97, 0xe2, 0x04, 0x36, 0xf5, 0x97, 0xe9, 0x84, 0xe4, 0x62,
+    0xca, 0x63, 0xd1, 0x72, 0x8b, 0xf3, 0xe8, 0xba, 0x65, 0x97, 0xa6, 0x8f,
+    0xac, 0xa8, 0x4c, 0xe7, 0x0a, 0xd8, 0xa3, 0xd0, 0x82, 0xf9, 0x00, 0x49,
+    0xef, 0x79, 0xc9, 0x65, 0x4e, 0xbd, 0x98, 0x38, 0x76, 0xe1, 0x69, 0xa4,
+    0x5d, 0xa4, 0x34, 0x27, 0x26, 0x7a, 0x3c, 0x2c, 0xbc, 0xe8, 0xe4, 0x25,
+    0x18, 0xdf, 0xe3, 0x5b, 0x31, 0x6a, 0xe6, 0xe9, 0x65, 0x85, 0x2b, 0x2f,
+    0x7e, 0x0e, 0xb2, 0x85, 0x06, 0xc4, 0x85, 0x6e, 0x94, 0xeb, 0x2e, 0xe8,
+    0xd5, 0x97, 0xf1, 0xde, 0x5a, 0xc3, 0x16, 0x5d, 0x9d, 0x0c, 0xf1, 0xf0,
+    0x66, 0xf8, 0x53, 0xcf, 0xe2, 0xcb, 0xee, 0xf0, 0x80, 0xb2, 0xff, 0xde,
+    0x82, 0x8e, 0xf5, 0x18, 0x4b, 0x29, 0xcf, 0x7b, 0xe4, 0x57, 0xf6, 0x4f,
+    0x06, 0xbf, 0x16, 0x5f, 0xde, 0x61, 0xb6, 0xbb, 0x59, 0x7f, 0xfe, 0x7e,
+    0x87, 0xa2, 0x73, 0x0b, 0x00, 0x0c, 0x02, 0xcb, 0xba, 0xe6, 0xc4, 0x69,
+    0x0c, 0x87, 0xb2, 0xef, 0x97, 0x5f, 0xef, 0x43, 0x13, 0xe8, 0xd5, 0x97,
+    0xf4, 0x31, 0x3e, 0x8d, 0x59, 0x7d, 0xad, 0x36, 0xb6, 0x1e, 0xf7, 0x8c,
+    0xaf, 0xf7, 0x65, 0x93, 0x69, 0xf7, 0xac, 0xb3, 0x80, 0xfc, 0x48, 0xee,
+    0xf1, 0x61, 0xd6, 0x5b, 0xa5, 0x97, 0x3c, 0xa4, 0x6b, 0x78, 0x37, 0x7f,
+    0xff, 0xfb, 0x61, 0xe3, 0x3f, 0xb3, 0x24, 0xdb, 0xcb, 0x39, 0xb2, 0x06,
+    0xf3, 0x71, 0x65, 0xe3, 0x38, 0x05, 0x97, 0xf6, 0x1c, 0x6e, 0xfd, 0xac,
+    0xb8, 0xbb, 0xd8, 0x79, 0x7e, 0x1e, 0xa9, 0x23, 0xe5, 0xe1, 0x93, 0x5d,
+    0xae, 0x84, 0xb2, 0x44, 0xc4, 0x9a, 0x5f, 0x39, 0x6b, 0xc6, 0xac, 0x08,
+    0xc7, 0x09, 0x4c, 0x31, 0x92, 0xde, 0xe7, 0xd9, 0x65, 0xe9, 0x81, 0xd2,
+    0xcb, 0xd0, 0x6e, 0xce, 0xcd, 0xd8, 0x07, 0x2f, 0x80, 0x00, 0xee, 0x2c,
+    0xb0, 0x16, 0x5f, 0xb5, 0x3c, 0x6a, 0x75, 0x97, 0xe6, 0x2f, 0x88, 0x75,
+    0x95, 0x07, 0xa4, 0x02, 0xab, 0xd2, 0xe6, 0x2c, 0xbf, 0x0a, 0x4a, 0x30,
+    0x0b, 0x2b, 0x47, 0x8c, 0x01, 0xcb, 0xff, 0x36, 0x19, 0xc0, 0xcc, 0x50,
+    0x75, 0x97, 0x82, 0xfc, 0x59, 0x52, 0x47, 0x26, 0x33, 0x9c, 0x88, 0x43,
+    0xfb, 0xfc, 0x61, 0xe1, 0xb4, 0x1d, 0xc5, 0x97, 0x10, 0x56, 0x52, 0xcb,
+    0xa3, 0x5b, 0x0d, 0x0f, 0x05, 0xab, 0x11, 0x0c, 0x15, 0x8b, 0xff, 0xf9,
+    0xb5, 0xb3, 0x1b, 0x08, 0xdf, 0x36, 0x1f, 0x3b, 0x59, 0x7f, 0xd9, 0xd4,
+    0xb9, 0xd4, 0x83, 0xa5, 0x97, 0xff, 0xfe, 0x3f, 0x3b, 0xf4, 0x77, 0xd4,
+    0x88, 0x23, 0xd8, 0xc6, 0xb9, 0x01, 0x65, 0xff, 0xfe, 0x9f, 0x50, 0x7e,
+    0x06, 0x36, 0x46, 0xa0, 0x7e, 0x83, 0xac, 0xac, 0x46, 0xab, 0x39, 0x5f,
+    0xf4, 0xb6, 0x46, 0xcf, 0xfb, 0x09, 0x65, 0x62, 0x79, 0x2c, 0xb7, 0xa8,
+    0xc4, 0x5c, 0x86, 0xfc, 0x0e, 0x37, 0x46, 0x2c, 0xbf, 0x75, 0x07, 0x9e,
+    0x16, 0x5f, 0x75, 0x26, 0xf2, 0xcb, 0xda, 0xce, 0xbc, 0x79, 0x9f, 0x29,
+    0xbf, 0xba, 0x79, 0x14, 0x1d, 0x65, 0xff, 0xff, 0x14, 0xde, 0xce, 0xa5,
+    0x04, 0x3d, 0x85, 0x9b, 0xf4, 0xdc, 0x59, 0x7f, 0xc5, 0x37, 0xcb, 0x27,
+    0x72, 0x59, 0x4c, 0x8a, 0x20, 0xb5, 0x5f, 0xff, 0xfe, 0xd6, 0x9a, 0x7d,
+    0x9e, 0xcf, 0x94, 0x4d, 0xec, 0x9e, 0x3a, 0xf8, 0x7b, 0x59, 0x7f, 0xff,
+    0xf4, 0x1b, 0xe8, 0xd8, 0x58, 0x13, 0x76, 0x75, 0x2e, 0x31, 0x09, 0x13,
+    0xac, 0xbf, 0x10, 0x38, 0x41, 0x59, 0x7e, 0xeb, 0x8d, 0x84, 0xb2, 0xb1,
+    0x18, 0xec, 0xf2, 0x12, 0x7b, 0xff, 0xec, 0xdd, 0x2c, 0x3b, 0x97, 0xf9,
+    0xb2, 0x0c, 0x59, 0x50, 0xaa, 0xdf, 0x21, 0x9e, 0xc4, 0x5e, 0x8d, 0x14,
+    0x25, 0xd7, 0xfe, 0xf9, 0xce, 0xf3, 0x6c, 0x2c, 0x31, 0x65, 0xff, 0xda,
+    0x2e, 0xb3, 0x81, 0x98, 0xa0, 0xeb, 0x2f, 0xf9, 0x8d, 0xf4, 0x34, 0xf0,
+    0x6a, 0xca, 0x63, 0xff, 0xe2, 0x2d, 0x6c, 0x47, 0x14, 0xa1, 0x83, 0x7f,
+    0xee, 0x67, 0x52, 0x6d, 0x17, 0x58, 0xb2, 0xff, 0x06, 0x62, 0xcf, 0x3f,
+    0xd6, 0x54, 0xe7, 0xe4, 0x47, 0xf7, 0xff, 0x48, 0x20, 0xe1, 0x67, 0x39,
+    0x06, 0x2c, 0xbe, 0x33, 0x64, 0xec, 0xb2, 0xfe, 0x83, 0x07, 0xe7, 0x3a,
+    0xca, 0xc3, 0xd4, 0xf1, 0x35, 0xff, 0xb2, 0x6f, 0x43, 0x13, 0xe8, 0xd5,
+    0x97, 0xfc, 0x7c, 0xe6, 0xc9, 0x8a, 0x0e, 0xb2, 0xff, 0xfd, 0xc9, 0xdf,
+    0x60, 0xfd, 0x1a, 0xd6, 0x6f, 0x8e, 0x96, 0x50, 0xd1, 0xeb, 0xa2, 0x13,
+    0x9f, 0x7c, 0xee, 0xff, 0xfd, 0x19, 0x3e, 0xc1, 0xe9, 0xa7, 0xfb, 0x61,
+    0x4e, 0xb2, 0xfb, 0x7e, 0x07, 0xb5, 0x97, 0xff, 0xfc, 0xfa, 0xf6, 0x7d,
+    0xb0, 0xa7, 0xe4, 0x61, 0x0f, 0xd0, 0xb2, 0xda, 0x59, 0x7f, 0x66, 0xef,
+    0xd8, 0xa7, 0x59, 0x77, 0xf6, 0x4e, 0x78, 0x24, 0x23, 0x58, 0x8f, 0x9e,
+    0x89, 0x5e, 0x14, 0x97, 0xff, 0xfe, 0xeb, 0x27, 0x0e, 0xee, 0xce, 0xa5,
+    0xf8, 0x33, 0x66, 0x68, 0x00, 0x85, 0x97, 0xfd, 0x93, 0x6d, 0x87, 0xf9,
+    0xd7, 0xd6, 0x5e, 0xcd, 0x0d, 0x65, 0xd1, 0x25, 0x97, 0xff, 0xdc, 0xd9,
+    0xa8, 0xef, 0x0a, 0x69, 0x67, 0xf8, 0xb2, 0xb1, 0x18, 0x67, 0x3e, 0x00,
+    0xe0, 0x45, 0xaf, 0xfe, 0x9d, 0xcb, 0x3d, 0x9f, 0xd6, 0x18, 0xb2, 0xff,
+    0xff, 0xfd, 0x81, 0x34, 0x83, 0xf9, 0xb3, 0xed, 0xd4, 0x8a, 0x0b, 0x3c,
+    0xd9, 0xa9, 0x96, 0x56, 0x23, 0x1f, 0xa4, 0x4b, 0xfe, 0xc3, 0x3d, 0x06,
+    0xe7, 0xf8, 0xb2, 0xff, 0xe7, 0x29, 0xce, 0x16, 0x1b, 0x13, 0x2c, 0xa6,
+    0x3f, 0xc3, 0x0e, 0xaf, 0xe9, 0xba, 0x90, 0x63, 0xeb, 0x2f, 0xf8, 0x3d,
+    0x7b, 0x3f, 0xac, 0x31, 0x65, 0xff, 0xfd, 0x28, 0xd7, 0x52, 0xe6, 0xcf,
+    0x43, 0x13, 0xe8, 0xd5, 0x97, 0xe9, 0x7c, 0xb2, 0x4b, 0x2f, 0xfd, 0xd0,
+    0xfc, 0x17, 0xe1, 0x60, 0xd6, 0x56, 0x1f, 0x30, 0x49, 0xef, 0xf9, 0xff,
+    0xfc, 0x9a, 0x4d, 0xf5, 0x97, 0xf6, 0x1a, 0x6b, 0xff, 0x8b, 0x2f, 0xb3,
+    0xcf, 0xf5, 0x97, 0x39, 0xf6, 0x1e, 0x81, 0x17, 0xd4, 0x22, 0xdf, 0xd0,
+    0x89, 0xb8, 0x06, 0x2c, 0xbe, 0xdb, 0xcd, 0x42, 0xcb, 0x66, 0x8d, 0xe6,
+    0xf1, 0x8a, 0x85, 0x52, 0x58, 0x61, 0xd1, 0xdf, 0xa1, 0x89, 0xc8, 0x6c,
+    0x7d, 0x8e, 0xff, 0xec, 0xff, 0x36, 0x6b, 0x1b, 0xd0, 0x35, 0x97, 0xfd,
+    0xef, 0x47, 0x5b, 0x0c, 0x3f, 0x6b, 0x2f, 0xec, 0xfe, 0xb5, 0x92, 0x59,
+    0x4b, 0x2f, 0xd9, 0xe2, 0xce, 0xd6, 0x50, 0x0d, 0x91, 0x05, 0xd4, 0xc7,
+    0xff, 0xf5, 0xfb, 0xd9, 0xd7, 0xd6, 0x5f, 0xec, 0x1b, 0x6f, 0xfb, 0x69,
+    0x65, 0xd9, 0xcd, 0x87, 0xe9, 0xb8, 0x46, 0xe3, 0xb4, 0xe9, 0xb8, 0x14,
+    0x66, 0x57, 0xfd, 0x87, 0xf4, 0x36, 0x83, 0xb8, 0xb2, 0xfe, 0xfb, 0x4e,
+    0x4e, 0x75, 0x95, 0x3b, 0x66, 0x12, 0x38, 0xfa, 0xf1, 0x04, 0xd7, 0x6e,
+    0xe5, 0x75, 0xf5, 0x19, 0xb3, 0x42, 0x72, 0x62, 0x2d, 0x47, 0x1c, 0x73,
+    0xdf, 0x46, 0xa2, 0xe6, 0x80, 0x8c, 0xec, 0xa3, 0x03, 0xe4, 0x27, 0xff,
+    0x2a, 0xd0, 0x2c, 0x5b, 0xe3, 0xb5, 0x10, 0xa3, 0x74, 0xee, 0xff, 0xa0,
+    0xe5, 0x83, 0xd3, 0x4e, 0xb2, 0xff, 0xff, 0x19, 0xe0, 0xc7, 0x5b, 0x35,
+    0xa8, 0x9c, 0x9d, 0xf4, 0x6a, 0xcb, 0xfc, 0x58, 0x1c, 0x36, 0x40, 0x59,
+    0x4e, 0x89, 0x93, 0x19, 0xaa, 0x48, 0xf4, 0xc8, 0x68, 0xde, 0x36, 0x34,
+    0xb2, 0xff, 0xfa, 0x36, 0x79, 0xf7, 0xec, 0xc3, 0x9e, 0x34, 0x6a, 0xcb,
+    0xf0, 0x0f, 0x99, 0xf5, 0x97, 0xfd, 0x9b, 0x35, 0x9e, 0x2c, 0x99, 0x65,
+    0x61, 0xf0, 0x91, 0x3d, 0xff, 0xfe, 0xf3, 0x83, 0x9b, 0x0b, 0x37, 0x96,
+    0x73, 0x0f, 0x1d, 0xac, 0xbf, 0xff, 0xfe, 0xd0, 0x4e, 0xdc, 0xd9, 0x34,
+    0x82, 0x5f, 0xd9, 0xe8, 0x93, 0x16, 0x1e, 0x16, 0x5b, 0x8b, 0x2f, 0xdf,
+    0xd9, 0xdf, 0xce, 0xb2, 0xa1, 0x17, 0xcf, 0x08, 0x10, 0x88, 0xd4, 0xca,
+    0x92, 0x3c, 0x3a, 0x50, 0xb7, 0xe1, 0x07, 0xe3, 0x21, 0xbf, 0x82, 0x73,
+    0x60, 0xbb, 0x59, 0x5b, 0x5b, 0x74, 0xfb, 0xb4, 0xc9, 0xa2, 0x34, 0x7c,
+    0xac, 0xf3, 0x3a, 0x94, 0x9e, 0xf2, 0x9b, 0xc9, 0x5e, 0xfd, 0xe1, 0x0b,
+    0xa0, 0x2c, 0xbf, 0xed, 0x9b, 0xbf, 0xcf, 0x7d, 0x8e, 0xb2, 0xff, 0xe9,
+    0xdf, 0xfa, 0xc9, 0xdc, 0xbf, 0xc5, 0x95, 0x88, 0xad, 0xec, 0xa9, 0x8f,
+    0xaf, 0xff, 0xe9, 0x7b, 0x1a, 0x5c, 0xc2, 0x0f, 0xcb, 0x01, 0x0b, 0x2c,
+    0xcb, 0x2d, 0xac, 0x3e, 0x80, 0x2c, 0x5f, 0xff, 0x67, 0xfd, 0x83, 0x0f,
+    0xf9, 0x1c, 0x0f, 0x16, 0x5f, 0xd1, 0x85, 0xd8, 0x87, 0x59, 0x7f, 0xbe,
+    0x18, 0xc9, 0xc4, 0x3a, 0xcb, 0xff, 0x7a, 0x08, 0x33, 0x67, 0x39, 0x0b,
+    0x2d, 0xb9, 0xe4, 0x78, 0xfd, 0x40, 0x42, 0xed, 0xd3, 0x5a, 0x84, 0xd8,
+    0x9e, 0x31, 0x8b, 0xfb, 0xd8, 0x5f, 0x00, 0x56, 0x5f, 0xff, 0xf9, 0xb7,
+    0x96, 0x73, 0x67, 0xdb, 0x66, 0x7e, 0x3b, 0x6d, 0xf1, 0xe5, 0x97, 0xf8,
+    0x70, 0x0d, 0x99, 0xd7, 0xd6, 0x5f, 0xff, 0x3e, 0x9f, 0xdd, 0x4b, 0x3f,
+    0xb3, 0xbe, 0x6e, 0x2c, 0xbf, 0x9a, 0x4f, 0xff, 0x32, 0xcb, 0xff, 0xe7,
+    0x38, 0xfd, 0x1a, 0x2c, 0x1f, 0x9c, 0xc5, 0x94, 0x34, 0xc2, 0x3b, 0x36,
+    0xfa, 0xbe, 0xf2, 0xcb, 0xf9, 0xf7, 0x06, 0x59, 0xe5, 0x97, 0x1f, 0x8b,
+    0x2f, 0x3f, 0x19, 0x65, 0x41, 0xb2, 0x00, 0xbd, 0xff, 0x09, 0x3e, 0x13,
+    0x9d, 0xfc, 0xb2, 0xf9, 0xb4, 0x4e, 0xb2, 0xa4, 0xaa, 0x55, 0xa3, 0x7a,
+    0x99, 0x04, 0x98, 0x7e, 0x41, 0xbc, 0xe6, 0xff, 0x73, 0x90, 0xd3, 0xbf,
+    0xd6, 0x5f, 0xf7, 0x1c, 0xcd, 0xd6, 0xc2, 0x1a, 0xcb, 0xfb, 0x3f, 0x8e,
+    0x53, 0x2c, 0xbe, 0xce, 0x46, 0x96, 0x58, 0xdf, 0x1e, 0x69, 0x16, 0x5a,
+    0x50, 0x8e, 0x3c, 0x33, 0x0c, 0x22, 0x2d, 0x25, 0x97, 0x86, 0x10, 0x2c,
+    0xbf, 0xff, 0xa3, 0x73, 0x63, 0x61, 0x67, 0x9b, 0x0b, 0xa9, 0x71, 0x65,
+    0xfe, 0xdd, 0x6c, 0xeb, 0xcd, 0x8b, 0x2c, 0x5d, 0x22, 0x48, 0x0b, 0xb7,
+    0xd0, 0x77, 0x1a, 0xca, 0x84, 0xc2, 0x86, 0x23, 0x90, 0xaf, 0x22, 0x9b,
+    0xfd, 0x93, 0x7b, 0x3f, 0x03, 0x59, 0x7d, 0x07, 0xe1, 0xd6, 0x5f, 0xfb,
+    0x0d, 0xf6, 0x7f, 0x85, 0x12, 0x59, 0x4c, 0x7c, 0x01, 0x22, 0xbe, 0x9f,
+    0xed, 0x3a, 0xcb, 0xf7, 0xdc, 0xed, 0xf5, 0x95, 0x87, 0x96, 0x44, 0x97,
+    0x86, 0xc3, 0x59, 0x7f, 0xff, 0xe0, 0xc6, 0xb6, 0x47, 0xa0, 0x7b, 0x3e,
+    0xd9, 0xbb, 0xd4, 0x9f, 0xa5, 0x97, 0x80, 0xfb, 0x8b, 0x2f, 0xdc, 0x28,
+    0x9b, 0xeb, 0x28, 0x68, 0xd7, 0x21, 0xce, 0x3a, 0x7c, 0x7e, 0xee, 0x0a,
+    0xa5, 0x96, 0x92, 0xca, 0x84, 0xd8, 0x72, 0x1e, 0xee, 0x79, 0xf1, 0xdb,
+    0xc5, 0xdc, 0x2c, 0xbf, 0xff, 0xfe, 0xf6, 0x7f, 0x8f, 0x36, 0xc2, 0xce,
+    0xa5, 0x81, 0x9c, 0xb0, 0x7e, 0x69, 0x96, 0x5f, 0xff, 0x37, 0x22, 0x5f,
+    0xcf, 0x16, 0x7f, 0xcc, 0xb2, 0xe0, 0x9a, 0xb2, 0x99, 0x30, 0x2d, 0x0e,
+    0x7a, 0x10, 0x3f, 0x4d, 0xbc, 0x7f, 0x3a, 0xcb, 0xff, 0x02, 0x6f, 0x30,
+    0x09, 0xfa, 0x92, 0xca, 0x59, 0x6c, 0x73, 0xcb, 0xe2, 0x05, 0xef, 0x1b,
+    0xf5, 0x97, 0xef, 0xff, 0xf8, 0x62, 0xca, 0x83, 0xc7, 0x61, 0xea, 0x84,
+    0x7a, 0x1d, 0x9c, 0x0d, 0xb7, 0x8f, 0x1d, 0xac, 0xbb, 0x58, 0xb2, 0xf6,
+    0x30, 0xd6, 0x5b, 0x8b, 0x2e, 0x2c, 0xec, 0xd6, 0x74, 0x37, 0x79, 0xb0,
+    0x96, 0x5e, 0x68, 0x99, 0x65, 0xff, 0xd8, 0x0d, 0x9e, 0x6f, 0xf0, 0x9a,
+    0x65, 0x97, 0xfe, 0x2c, 0xe6, 0xce, 0x00, 0xf9, 0xc5, 0x95, 0x3a, 0x3a,
+    0x4e, 0x5b, 0xc1, 0xaf, 0x8e, 0x6f, 0x46, 0xad, 0xa1, 0x39, 0x58, 0x1d,
+    0xc8, 0xca, 0xef, 0xfe, 0x20, 0x6d, 0xe7, 0x9a, 0x0e, 0xe3, 0x59, 0x7f,
+    0x6b, 0x24, 0x50, 0x75, 0x97, 0xec, 0x91, 0x41, 0xd6, 0x5c, 0x40, 0xd8,
+    0x7a, 0x5a, 0x2c, 0xbf, 0xff, 0xff, 0x4b, 0x9c, 0x0c, 0x7d, 0x87, 0x85,
+    0x36, 0xc2, 0xcd, 0x41, 0x7f, 0xd9, 0xba, 0xb2, 0xff, 0xd1, 0x8d, 0xff,
+    0x41, 0x47, 0x6b, 0x2f, 0xe3, 0xf5, 0x1e, 0xf4, 0x2c, 0xbd, 0xd4, 0xb9,
+    0x39, 0xf5, 0x61, 0xe5, 0x62, 0x6a, 0x9d, 0x17, 0xea, 0x1e, 0x16, 0xe2,
+    0xca, 0xc5, 0x46, 0x41, 0x8f, 0xac, 0x43, 0x6b, 0x4e, 0xb2, 0xfd, 0x3c,
+    0x7f, 0x00, 0xb2, 0xfe, 0x1b, 0x94, 0x98, 0xeb, 0x2f, 0xda, 0xce, 0xa5,
+    0xc5, 0x97, 0xbb, 0xf6, 0x2c, 0xb6, 0x4e, 0x78, 0xda, 0x29, 0xbf, 0xee,
+    0xa3, 0x53, 0xec, 0xc6, 0x1a, 0xcb, 0xa6, 0x65, 0x95, 0x89, 0x93, 0xb0,
+    0x93, 0x94, 0x13, 0x90, 0x4a, 0x37, 0x9e, 0x5f, 0x7b, 0x68, 0xef, 0x6d,
+    0x65, 0xfd, 0x9d, 0x4a, 0x01, 0x0b, 0x2f, 0xc5, 0x9e, 0x7f, 0xac, 0xae,
+    0x8f, 0x4c, 0xe5, 0xb7, 0xda, 0xc9, 0xa1, 0x65, 0xf3, 0x6f, 0xcd, 0x2c,
+    0xad, 0xa9, 0x1c, 0xf0, 0xfe, 0xc4, 0x7e, 0x22, 0xbe, 0xd9, 0xdc, 0xe6,
+    0x2c, 0xbf, 0x8b, 0x00, 0x78, 0x92, 0xcb, 0xf1, 0x67, 0xfc, 0xcb, 0x28,
+    0x67, 0xa4, 0x61, 0x65, 0xfa, 0x7d, 0x81, 0x89, 0x96, 0x5f, 0xff, 0xf1,
+    0x40, 0x3a, 0x97, 0x03, 0x1f, 0x2c, 0x1b, 0x66, 0xa6, 0x59, 0x50, 0x8b,
+    0x57, 0x23, 0xf9, 0x65, 0x43, 0x69, 0xd5, 0x3c, 0x7f, 0x23, 0x28, 0xc9,
+    0x58, 0x5d, 0x46, 0x86, 0xd1, 0xa1, 0xcc, 0x81, 0xa8, 0x49, 0xfa, 0x3c,
+    0xd7, 0x8d, 0x08, 0x11, 0x9b, 0x14, 0x78, 0x9c, 0x94, 0xd9, 0xf8, 0xd7,
+    0xc3, 0x19, 0xee, 0xf4, 0x01, 0x23, 0x2f, 0xbf, 0x49, 0xb5, 0x9d, 0x2c,
+    0xbd, 0xcf, 0x62, 0xcb, 0xf6, 0x72, 0x7c, 0x31, 0x65, 0xff, 0xde, 0x08,
+    0xfc, 0x1f, 0xf3, 0xc1, 0x99, 0x65, 0x74, 0x8b, 0x59, 0x8a, 0x3c, 0x38,
+    0x45, 0x37, 0xff, 0x9b, 0x4d, 0x9d, 0x6c, 0xfc, 0xc5, 0x07, 0x59, 0x7f,
+    0xf6, 0x3f, 0x5b, 0x07, 0x13, 0xec, 0x34, 0xd5, 0x95, 0xda, 0x26, 0x3a,
+    0x4c, 0xbf, 0xa0, 0xe5, 0x93, 0xe2, 0xcb, 0xdf, 0xe7, 0xb0, 0xf4, 0x7c,
+    0x4b, 0x7f, 0xfe, 0x3f, 0x52, 0xe6, 0xba, 0x8f, 0xf2, 0x3c, 0xdf, 0x59,
+    0x7f, 0xd8, 0x69, 0x67, 0xfc, 0xc6, 0x2c, 0xbf, 0x61, 0x98, 0x33, 0xac,
+    0xbf, 0xfd, 0x1d, 0x79, 0xb0, 0x86, 0xdb, 0xe0, 0x6b, 0x2a, 0x13, 0x36,
+    0x63, 0x3d, 0x2c, 0x78, 0xe4, 0x8a, 0x2e, 0xdc, 0x1a, 0xcb, 0xff, 0xe9,
+    0xf3, 0xb1, 0xf9, 0xb0, 0xdd, 0x86, 0x86, 0x16, 0x5f, 0xd9, 0xad, 0x67,
+    0xf8, 0xb2, 0xfe, 0x27, 0x34, 0xef, 0x25, 0x97, 0xa4, 0xdf, 0xf1, 0xed,
+    0x7c, 0xb6, 0xfd, 0x87, 0x2c, 0xe9, 0x65, 0xfd, 0xf6, 0xdf, 0x05, 0xda,
+    0xca, 0xe1, 0xeb, 0x08, 0x4f, 0x77, 0xb1, 0x65, 0xfa, 0x0e, 0xde, 0x85,
+    0x97, 0x88, 0x4f, 0x2c, 0xbf, 0xd9, 0xff, 0x37, 0xf3, 0xb5, 0x97, 0xd1,
+    0x85, 0xda, 0xca, 0xd8, 0x8d, 0x09, 0x11, 0xe8, 0x59, 0xc9, 0x88, 0x77,
+    0xe6, 0x74, 0x28, 0x54, 0xf2, 0xc3, 0x53, 0x42, 0xbf, 0xd1, 0xac, 0xdf,
+    0xfa, 0x5c, 0xfb, 0xcf, 0xba, 0x59, 0xd2, 0xcb, 0xfb, 0xd1, 0x20, 0xb8,
+    0x8b, 0x2f, 0xc3, 0xf6, 0x17, 0xd6, 0x54, 0x8f, 0x56, 0x62, 0xea, 0xe9,
+    0x17, 0x65, 0x09, 0x8b, 0xfe, 0xd3, 0x61, 0x9f, 0xfb, 0x92, 0xcb, 0xba,
+    0x35, 0x65, 0xcd, 0xd6, 0xc3, 0xd1, 0x19, 0xc5, 0xe6, 0x06, 0x2c, 0xb0,
+    0x16, 0x5b, 0x92, 0x35, 0x9f, 0x1b, 0xbf, 0xfd, 0x86, 0x6e, 0xfb, 0x3f,
+    0x80, 0x3b, 0xcc, 0xb2, 0xa1, 0x34, 0xad, 0x3c, 0xba, 0xe1, 0x13, 0xdf,
+    0xf9, 0xf7, 0x96, 0x7f, 0x00, 0x43, 0x59, 0x60, 0x2c, 0xa6, 0x3c, 0xf9,
+    0x8f, 0xaf, 0xfb, 0xd3, 0xb6, 0x17, 0x52, 0xe2, 0xcb, 0xfe, 0xeb, 0xd9,
+    0xd9, 0x60, 0x77, 0x16, 0x5f, 0xff, 0x19, 0x9d, 0xf3, 0x3f, 0x36, 0x1a,
+    0x58, 0x05, 0x96, 0x94, 0x23, 0x27, 0x0e, 0x98, 0xf6, 0xff, 0xc5, 0x01,
+    0xef, 0xaf, 0xb6, 0x12, 0xcb, 0xf9, 0xba, 0x06, 0x9c, 0x6b, 0x2f, 0x66,
+    0x80, 0xb2, 0xfd, 0xc6, 0xc2, 0x02, 0xcb, 0x63, 0x1e, 0x17, 0x07, 0x2f,
+    0xcc, 0x00, 0x66, 0x96, 0x50, 0xd1, 0xf7, 0xe3, 0xe2, 0x70, 0xe1, 0x35,
+    0xb6, 0xa5, 0x97, 0xe7, 0xc2, 0x63, 0x56, 0x5e, 0xfe, 0x79, 0x65, 0x11,
+    0xe1, 0x6e, 0x93, 0x5c, 0xc7, 0x59, 0x7f, 0xff, 0xee, 0xa4, 0xfd, 0x6c,
+    0x20, 0xee, 0xec, 0xce, 0xa5, 0x81, 0x20, 0x71, 0x65, 0x1d, 0x11, 0x9b,
+    0xa2, 0xd7, 0xfc, 0x28, 0xff, 0xd8, 0xba, 0x97, 0x16, 0x5f, 0x6e, 0x7b,
+    0x37, 0x16, 0x5e, 0xdb, 0x61, 0x5a, 0xca, 0xd8, 0x9f, 0x98, 0xa0, 0xf2,
+    0x75, 0x8c, 0x85, 0x81, 0xa4, 0xce, 0x7d, 0xb6, 0x51, 0x7f, 0xff, 0xfd,
+    0xd7, 0x03, 0x1d, 0x6c, 0xf6, 0x0f, 0x61, 0x60, 0x4d, 0xd9, 0xc0, 0x01,
+    0xbe, 0xb2, 0xff, 0xff, 0xd8, 0x33, 0x9e, 0x3f, 0xcc, 0xff, 0x34, 0xd9,
+    0xd9, 0x60, 0xd6, 0x5f, 0xfe, 0xf8, 0x63, 0x27, 0xd9, 0xc6, 0x26, 0xd2,
+    0xcb, 0x18, 0x48, 0xb6, 0x11, 0xae, 0xa1, 0x36, 0x7c, 0x8c, 0xf6, 0xfd,
+    0x05, 0xd3, 0xce, 0xb2, 0xfe, 0x99, 0x87, 0x87, 0x65, 0x97, 0xff, 0xff,
+    0xfd, 0xdc, 0x7a, 0x0f, 0xfc, 0xe7, 0x23, 0x5a, 0x82, 0xc9, 0xf0, 0x3c,
+    0x0c, 0xc5, 0x07, 0x59, 0x50, 0x8c, 0x1c, 0x2d, 0xbc, 0x1d, 0x1a, 0xb2,
+    0x8e, 0x6f, 0xf6, 0xc8, 0x6f, 0xce, 0x01, 0x1e, 0x75, 0x97, 0xff, 0xff,
+    0x4f, 0xb3, 0xf3, 0xb6, 0x6a, 0x7d, 0x93, 0x49, 0xbd, 0x83, 0xeb, 0x37,
+    0x56, 0x56, 0x23, 0x2d, 0x89, 0x02, 0x53, 0x79, 0x81, 0x0b, 0x2f, 0xf6,
+    0xc2, 0xcd, 0x34, 0x1d, 0x65, 0xff, 0xb4, 0xff, 0xd6, 0x37, 0xa0, 0x6b,
+    0x2f, 0xe1, 0x96, 0x79, 0xfe, 0xb2, 0xfd, 0xfe, 0xa4, 0xda, 0x59, 0x58,
+    0x7a, 0xbc, 0x2c, 0xa9, 0xd3, 0x01, 0x18, 0xde, 0x8c, 0xc1, 0x09, 0x2b,
+    0xda, 0x71, 0x16, 0x5f, 0xa3, 0xe7, 0x6f, 0xac, 0xa7, 0x3c, 0x40, 0x8e,
+    0xdf, 0x17, 0x58, 0x75, 0x95, 0x39, 0xe1, 0x98, 0x43, 0x7f, 0xe8, 0x37,
+    0x74, 0x38, 0x53, 0x08, 0x75, 0x97, 0xfc, 0x66, 0x68, 0x6d, 0x9f, 0xe2,
+    0xcb, 0xfc, 0x0e, 0x66, 0xce, 0xfe, 0x75, 0x97, 0xff, 0xff, 0xf8, 0xd2,
+    0xcd, 0x8d, 0x84, 0xff, 0xf4, 0x4d, 0xb0, 0xb3, 0xcd, 0xfe, 0x07, 0xb0,
+    0xc2, 0xca, 0xc4, 0xda, 0x7a, 0x24, 0x64, 0x47, 0x39, 0x09, 0xbd, 0xff,
+    0xe7, 0x37, 0x08, 0x3f, 0xf6, 0x6f, 0x1c, 0x2c, 0xbf, 0xfb, 0x3f, 0x8d,
+    0x3e, 0x76, 0xd3, 0x71, 0x65, 0xff, 0xb3, 0x01, 0xcd, 0x9a, 0xe0, 0xf8,
+    0xb2, 0xff, 0x6b, 0x3b, 0xf3, 0x6a, 0x65, 0x95, 0xb1, 0x17, 0x63, 0x45,
+    0xc4, 0x1b, 0xff, 0xef, 0x36, 0xcc, 0x9b, 0xa9, 0x73, 0xfe, 0xce, 0x96,
+    0x51, 0x27, 0x19, 0xf8, 0xc1, 0xb7, 0x98, 0xdf, 0x7f, 0x41, 0x3a, 0xcb,
+    0xff, 0xfd, 0x87, 0x3b, 0x75, 0xb0, 0xd3, 0x70, 0xbe, 0x68, 0x63, 0x4b,
+    0x2e, 0xce, 0xd9, 0x11, 0x3a, 0x23, 0xbe, 0xe8, 0xb3, 0x6d, 0x65, 0x62,
+    0x62, 0x8d, 0x0c, 0x17, 0x2e, 0xbf, 0x61, 0xe4, 0x4c, 0xb2, 0xf3, 0x17,
+    0xd6, 0x5f, 0xd2, 0xe3, 0x9c, 0x3c, 0x59, 0x53, 0x9e, 0x4b, 0x8d, 0xdf,
+    0x7b, 0xcf, 0x25, 0x96, 0xe2, 0xca, 0xc3, 0x66, 0xc4, 0x57, 0xf7, 0xdb,
+    0x53, 0xe7, 0x6b, 0x2a, 0x1b, 0x78, 0xd1, 0xca, 0x5d, 0xc9, 0x58, 0x26,
+    0xca, 0x53, 0xee, 0x11, 0x5d, 0x43, 0xad, 0xa5, 0x90, 0xea, 0x3d, 0xa3,
+    0x94, 0x7a, 0x3f, 0x37, 0x8c, 0xbc, 0xa5, 0x1a, 0x72, 0x57, 0x4f, 0xcc,
+    0xc2, 0xdf, 0xb6, 0xab, 0xba, 0x3f, 0x7f, 0x89, 0xcd, 0xcc, 0x23, 0x56,
+    0x5d, 0xde, 0x2c, 0xa3, 0x9e, 0x4b, 0x99, 0x52, 0xcb, 0xff, 0xb6, 0x64,
+    0xdd, 0x4b, 0x9f, 0xf6, 0x74, 0xb2, 0xfb, 0x77, 0xcd, 0xa5, 0x97, 0xfa,
+    0x50, 0x3d, 0x83, 0x69, 0x96, 0x5f, 0xf6, 0xcf, 0x96, 0x19, 0x8d, 0xc5,
+    0x97, 0xff, 0xfe, 0xfb, 0xcc, 0x59, 0x3b, 0xec, 0x2e, 0xb0, 0xc2, 0xc0,
+    0xe1, 0xab, 0x2b, 0x6b, 0x4d, 0x66, 0x70, 0xbe, 0xd2, 0xba, 0x25, 0x98,
+    0xdb, 0x74, 0xea, 0xf7, 0xa0, 0x0b, 0x2f, 0xf7, 0x98, 0x11, 0xf6, 0xde,
+    0xb2, 0xfe, 0x66, 0x83, 0x22, 0x65, 0x97, 0xdf, 0x72, 0x02, 0xcb, 0xff,
+    0xf3, 0x9a, 0x68, 0x1e, 0x6d, 0xd2, 0x83, 0x3a, 0x97, 0x16, 0x58, 0x47,
+    0x3f, 0xe2, 0x21, 0xbe, 0x7d, 0xc8, 0x02, 0xca, 0x14, 0x2b, 0x24, 0x88,
+    0xde, 0xb1, 0x93, 0xb1, 0xc9, 0x8d, 0x1e, 0x15, 0x66, 0x13, 0xde, 0xe7,
+    0xd9, 0x65, 0x2c, 0xbf, 0xb0, 0xf1, 0xe7, 0xf2, 0xcb, 0x69, 0x65, 0x2c,
+    0xb6, 0xcc, 0x2f, 0x26, 0x11, 0xbd, 0xe6, 0x35, 0x65, 0x6c, 0x44, 0x68,
+    0xd2, 0x0d, 0x28, 0xbf, 0xfe, 0xea, 0x45, 0x1b, 0x0e, 0x50, 0x6f, 0xda,
+    0x75, 0x97, 0xff, 0x6c, 0xfe, 0xb0, 0xcc, 0x9c, 0xb0, 0xc5, 0x95, 0xb1,
+    0x38, 0x28, 0x1c, 0xc8, 0x4c, 0x31, 0x9f, 0xd4, 0xef, 0xda, 0xd8, 0x5b,
+    0xcc, 0x59, 0x6e, 0x2c, 0xbc, 0xe0, 0x85, 0x94, 0x73, 0x59, 0xe1, 0x1b,
+    0xcf, 0x34, 0x2c, 0xbd, 0xec, 0xd2, 0xca, 0x84, 0x59, 0x3a, 0xc9, 0x84,
+    0x3b, 0xa3, 0x97, 0xf4, 0xf3, 0x48, 0x51, 0xa9, 0xd6, 0x5f, 0x08, 0x59,
+    0xbd, 0x65, 0xf3, 0x0f, 0x06, 0xb2, 0xba, 0x3c, 0x53, 0x92, 0x5a, 0x65,
+    0x97, 0x41, 0xd6, 0x5b, 0xeb, 0x2b, 0x46, 0x9d, 0xc5, 0xa8, 0x67, 0xb3,
+    0xe3, 0x9b, 0xe8, 0x1b, 0xc9, 0x65, 0xef, 0xe7, 0x16, 0x5f, 0xfb, 0x1f,
+    0xa0, 0x4d, 0x28, 0xd4, 0xeb, 0x2f, 0x6a, 0x26, 0x59, 0x70, 0x4c, 0x59,
+    0x73, 0xf4, 0xb2, 0xb0, 0xd7, 0xf0, 0x62, 0xa7, 0x47, 0x51, 0xa4, 0x3e,
+    0x1c, 0x74, 0x1f, 0xa6, 0x5f, 0x49, 0xcb, 0x6d, 0x65, 0xd3, 0x3a, 0xcb,
+    0xa5, 0x3a, 0xcb, 0xed, 0x9f, 0x89, 0x2c, 0xbf, 0xfe, 0xc8, 0x20, 0x43,
+    0x7f, 0xd8, 0x7c, 0x1a, 0xcb, 0xc2, 0x06, 0x75, 0x97, 0x41, 0xab, 0x2a,
+    0x74, 0x53, 0x48, 0x90, 0xd4, 0xcf, 0x8f, 0xdf, 0xce, 0x64, 0x7f, 0x27,
+    0x59, 0x7f, 0x36, 0xba, 0x91, 0x42, 0xcb, 0xf4, 0x7e, 0x4d, 0xf5, 0x97,
+    0xf7, 0xa3, 0xa9, 0x67, 0xd6, 0x54, 0x8f, 0x54, 0x64, 0xf5, 0xe4, 0x52,
+    0x7e, 0x10, 0x57, 0xfd, 0x3e, 0xb2, 0x69, 0x31, 0x1a, 0xb2, 0xff, 0xa0,
+    0xbf, 0xa6, 0xdf, 0x83, 0x59, 0x4e, 0x7e, 0x9b, 0x67, 0x77, 0x67, 0xd6,
+    0x5a, 0x65, 0x95, 0xe3, 0x50, 0x42, 0xd5, 0xb5, 0xae, 0xb0, 0x43, 0xde,
+    0x3e, 0x34, 0x61, 0x93, 0x25, 0x9c, 0x93, 0xc2, 0xef, 0x0b, 0xe2, 0x3f,
+    0x0c, 0x34, 0xb6, 0xe1, 0x38, 0x22, 0x65, 0xfe, 0x33, 0x24, 0x41, 0x7e,
+    0x2c, 0xbf, 0x74, 0x63, 0x90, 0x16, 0x5c, 0x46, 0xac, 0xb7, 0x18, 0xf0,
+    0x02, 0x53, 0x73, 0xf9, 0x65, 0xff, 0x8f, 0x06, 0xff, 0xd9, 0xf8, 0x02,
+    0xcb, 0xf3, 0x8e, 0x30, 0x96, 0x58, 0xd5, 0x95, 0x3a, 0x23, 0x18, 0x5b,
+    0xc7, 0xe4, 0x4b, 0x7f, 0xfe, 0x39, 0x67, 0x7d, 0x7c, 0x9f, 0xc7, 0x8c,
+    0xfa, 0xcb, 0xff, 0xec, 0x9d, 0xcb, 0xbd, 0x9c, 0x83, 0xbf, 0x5f, 0x59,
+    0x50, 0x8a, 0x8d, 0x2a, 0xdf, 0xed, 0xcf, 0x64, 0xfa, 0xd4, 0x2c, 0xa5,
+    0x97, 0xff, 0x3c, 0xb0, 0x86, 0x51, 0x21, 0xf1, 0x65, 0xb3, 0x0f, 0x37,
+    0x78, 0x5d, 0xdc, 0xda, 0x96, 0x5f, 0xfe, 0x2c, 0x3c, 0x77, 0xb0, 0x49,
+    0xe7, 0x7e, 0x96, 0x5f, 0xc1, 0x39, 0xde, 0x5b, 0x3e, 0x7d, 0x9b, 0xa3,
+    0x97, 0xe0, 0xc8, 0x4d, 0x71, 0x65, 0x9b, 0xc7, 0xe8, 0x49, 0x57, 0xff,
+    0xe8, 0xd4, 0x77, 0x87, 0x8e, 0xe4, 0xdc, 0x09, 0xd6, 0x54, 0x2e, 0x1a,
+    0x4c, 0xe7, 0xa8, 0x59, 0xfa, 0x1c, 0x8e, 0x44, 0x50, 0x84, 0xfc, 0x61,
+    0x1b, 0x64, 0xd7, 0xf6, 0xb2, 0x0d, 0x82, 0x59, 0x73, 0xf9, 0x65, 0xe2,
+    0x73, 0xac, 0xbf, 0xff, 0xfb, 0x37, 0x66, 0x8f, 0x67, 0xca, 0x26, 0xd9,
+    0x85, 0x9d, 0x49, 0xb8, 0xb2, 0xff, 0xfe, 0xf3, 0xcc, 0x70, 0x93, 0x9b,
+    0xcc, 0xef, 0xc1, 0xdc, 0x59, 0x74, 0x7c, 0x08, 0xd7, 0xe3, 0xb5, 0xc0,
+    0x85, 0x97, 0x67, 0x16, 0x5f, 0xf8, 0xf9, 0xd4, 0xb8, 0xf1, 0xd4, 0x96,
+    0x57, 0x67, 0xad, 0xe1, 0x6b, 0x84, 0x9d, 0x65, 0x31, 0xbc, 0x22, 0x3a,
+    0x92, 0xa2, 0x9c, 0x2c, 0x61, 0x6f, 0x43, 0xc8, 0x8b, 0xbf, 0x0a, 0x8a,
+    0xda, 0xe3, 0x1c, 0x97, 0xda, 0xa1, 0x7a, 0x29, 0x94, 0x19, 0xb4, 0x43,
+    0xc4, 0x51, 0x2d, 0x13, 0x69, 0x42, 0x9c, 0x54, 0x3e, 0x15, 0x50, 0x8f,
+    0xda, 0x70, 0x93, 0x8a, 0x55, 0xd4, 0xf3, 0x88, 0x92, 0x97, 0x76, 0x3a,
+    0x64, 0x66, 0x5a, 0x20, 0xd3, 0x67, 0x33, 0xbb, 0xa6, 0xee, 0xf5, 0x49,
+    0xb6, 0x69, 0xfc, 0xe9, 0xa9, 0x00, 0x1a, 0xa6, 0xaf, 0x1e, 0x7e, 0x4f,
+    0xd6, 0x8d, 0x21, 0xe7, 0xe6, 0x41, 0x3b, 0xb4, 0x2b, 0x86, 0x69, 0x57,
+    0x56, 0x7c, 0xad, 0x89, 0xbf, 0x5c, 0xbe, 0x86, 0x72, 0x8b, 0x7c, 0x7e,
+    0xe6, 0x46, 0x03, 0xb7, 0x3b, 0x3e, 0x24, 0xe7, 0xb6, 0xec, 0xab, 0x3b,
+    0xff, 0xf8, 0x3d, 0x8b, 0xeb, 0xfa, 0x8c, 0xe8, 0x50, 0x37, 0x73, 0x56,
+    0x50, 0xb5, 0x6c, 0xad, 0x2c, 0x02, 0xfe, 0x76, 0xff, 0x18, 0x96, 0x5e,
+    0x6d, 0x62, 0xca, 0xdc, 0x3c, 0x6e, 0x15, 0xdf, 0xb5, 0xdb, 0xbf, 0x6a,
+    0x8a, 0x75, 0x76, 0x74, 0xb2, 0xfb, 0xfa, 0x6e, 0x96, 0x5f, 0xfe, 0x08,
+    0x49, 0x8a, 0x3c, 0xc7, 0xce, 0x2c, 0xbb, 0x47, 0x59, 0x61, 0x70, 0x8f,
+    0x3c, 0x25, 0xe8, 0xd9, 0x85, 0xce, 0x46, 0x04, 0x7b, 0xff, 0xf4, 0x85,
+    0xe4, 0xbd, 0x8d, 0x2e, 0x47, 0xe0, 0x6b, 0x2f, 0x66, 0x71, 0x65, 0xfc,
+    0xf3, 0xff, 0x8e, 0x05, 0x97, 0x68, 0x5f, 0x8f, 0x27, 0x6c, 0x6e, 0xa1,
+    0x1a, 0x4d, 0x09, 0xfb, 0xf6, 0xbb, 0x77, 0xed, 0x51, 0x51, 0xaf, 0xfc,
+    0xf2, 0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x44, 0xd0, 0xbf, 0xfc, 0x59, 0x34,
+    0x9f, 0x52, 0x2c, 0xde, 0xeb, 0x2f, 0x8a, 0x33, 0xa5, 0x95, 0x88, 0xef,
+    0x39, 0xb7, 0x13, 0xbe, 0x95, 0x7f, 0x84, 0x7d, 0xe2, 0xfe, 0xd3, 0xac,
+    0xa1, 0x67, 0xeb, 0x07, 0x97, 0xe9, 0xc4, 0x9e, 0x27, 0x59, 0x7d, 0xdb,
+    0xbf, 0x6a, 0x8a, 0xbd, 0x58, 0x7b, 0x9a, 0x2c, 0xbf, 0xfd, 0xe6, 0xff,
+    0x22, 0x5e, 0x83, 0x1c, 0x96, 0x5f, 0xfd, 0xf0, 0x60, 0xfd, 0x83, 0x1b,
+    0x74, 0xb2, 0xfb, 0xfa, 0x6e, 0x96, 0x5f, 0xb7, 0xc1, 0x78, 0x2b, 0x2f,
+    0xfc, 0xfd, 0x4b, 0x99, 0xd8, 0xf3, 0xa5, 0x95, 0x87, 0xd4, 0xe5, 0x37,
+    0xf3, 0x0c, 0x71, 0xa8, 0x59, 0x7e, 0xe1, 0x3c, 0x71, 0x65, 0xff, 0xff,
+    0xb0, 0x98, 0x67, 0x77, 0x2e, 0xc7, 0xe8, 0xc1, 0xb1, 0x4e, 0xb2, 0xa1,
+    0x11, 0xf2, 0x26, 0xbf, 0xf9, 0xfd, 0x33, 0xff, 0xfd, 0x76, 0xc4, 0xb2,
+    0xff, 0xfc, 0x02, 0x09, 0xc4, 0x18, 0xe0, 0x07, 0x8c, 0xfa, 0xcb, 0xf9,
+    0xff, 0xcc, 0xeb, 0xeb, 0x2b, 0xa4, 0x42, 0x12, 0xb5, 0x85, 0xe2, 0xb2,
+    0x6e, 0xc8, 0x7a, 0x49, 0x64, 0x5d, 0x42, 0x37, 0xc4, 0x1f, 0x85, 0xd9,
+    0x84, 0x42, 0x43, 0x2a, 0xfd, 0xae, 0xdd, 0xfb, 0x54, 0x56, 0xcb, 0xfe,
+    0x90, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x24, 0x15, 0xf6, 0x1e, 0x37, 0x16,
+    0x58, 0x5e, 0x22, 0x8d, 0xcd, 0xb8, 0x93, 0x7c, 0x76, 0x28, 0x59, 0x7e,
+    0xd7, 0x6e, 0xfd, 0xaa, 0x24, 0x35, 0xfd, 0xa0, 0xef, 0x83, 0x0e, 0xb2,
+    0xfe, 0x2c, 0xe7, 0xe5, 0x0b, 0x2f, 0x85, 0xbc, 0x85, 0xc2, 0x2c, 0xf0,
+    0x81, 0x8d, 0xb7, 0x98, 0xdf, 0xec, 0xfb, 0x0f, 0x0a, 0x65, 0x97, 0xf9,
+    0xcd, 0x16, 0x69, 0xb9, 0xb8, 0xb2, 0xdc, 0x16, 0x7d, 0xa4, 0x65, 0x79,
+    0xdf, 0xb5, 0xc6, 0x06, 0xa8, 0x3d, 0x2e, 0xca, 0x6d, 0xda, 0xcb, 0x6e,
+    0x2c, 0xac, 0x34, 0xde, 0x12, 0xb8, 0xcf, 0xac, 0xbd, 0xc6, 0x35, 0x65,
+    0x0c, 0xda, 0xf4, 0x31, 0x76, 0xd1, 0x3a, 0xcb, 0xfe, 0xf4, 0x7f, 0x9b,
+    0x57, 0x36, 0x82, 0x59, 0x5b, 0x59, 0xf0, 0x48, 0x76, 0xfb, 0xff, 0xcd,
+    0xd5, 0x96, 0x25, 0x96, 0x65, 0x95, 0xb5, 0x1a, 0x01, 0x56, 0x21, 0x7f,
+    0xf8, 0x55, 0x8a, 0xbd, 0xab, 0xd0, 0x72, 0x7f, 0x36, 0x96, 0x5b, 0xa5,
+    0x97, 0xbf, 0x80, 0x59, 0x73, 0x12, 0xcb, 0xc1, 0xfe, 0x2c, 0xba, 0x26,
+    0x59, 0x7f, 0x1f, 0x3b, 0x27, 0xdc, 0x59, 0x7b, 0x1a, 0x75, 0x96, 0x11,
+    0x65, 0x61, 0xef, 0x68, 0xc0, 0x23, 0x97, 0xe1, 0xc7, 0xdc, 0x6b, 0x2e,
+    0x6d, 0xeb, 0x2a, 0x0d, 0xff, 0xc9, 0xef, 0x7b, 0x38, 0xb2, 0xce, 0xb2,
+    0x86, 0x6b, 0x3e, 0x39, 0x43, 0x4e, 0xbb, 0x70, 0x4a, 0x61, 0xcd, 0x0a,
+    0xf8, 0x73, 0x8e, 0xbf, 0x6d, 0x11, 0x32, 0xfb, 0xfc, 0x6d, 0xeb, 0x2c,
+    0x4b, 0x2f, 0xc3, 0x82, 0x9f, 0x71, 0x65, 0xfe, 0x83, 0x44, 0x00, 0x23,
+    0xa5, 0x95, 0x07, 0xc3, 0x39, 0x5d, 0xf9, 0xfc, 0xc7, 0xc5, 0x95, 0x88,
+    0xb9, 0x27, 0x1d, 0xe4, 0x57, 0xf6, 0x77, 0xe8, 0x89, 0x96, 0x5b, 0x6d,
+    0x65, 0x31, 0xf9, 0x78, 0xc0, 0x25, 0xd7, 0x88, 0x1c, 0x59, 0x7e, 0x79,
+    0xc4, 0xc9, 0x96, 0x56, 0x1e, 0x31, 0x0e, 0x5e, 0xec, 0xb7, 0x16, 0x5f,
+    0xf9, 0xcc, 0xf3, 0x3c, 0xbe, 0xd3, 0xac, 0xa7, 0x3d, 0xf2, 0x20, 0xbf,
+    0xf0, 0x33, 0xae, 0x09, 0xa6, 0x3e, 0x2c, 0xb9, 0xa6, 0x59, 0x6c, 0xe8,
+    0xf5, 0xf4, 0x81, 0x7d, 0x3f, 0x3a, 0x65, 0x97, 0xff, 0xa3, 0xa9, 0x31,
+    0xcc, 0xc2, 0x1f, 0xa1, 0x65, 0x62, 0x71, 0x9a, 0x7f, 0x27, 0x7e, 0x14,
+    0x04, 0x92, 0xfc, 0xe3, 0x12, 0x09, 0x65, 0xfe, 0x60, 0xee, 0x7a, 0x32,
+    0x75, 0x97, 0xfe, 0xd7, 0xc4, 0x27, 0xef, 0x0b, 0xb5, 0x97, 0xd0, 0x76,
+    0xdb, 0x59, 0x74, 0x6e, 0xac, 0xbf, 0xf1, 0x8f, 0x2d, 0x63, 0x7a, 0x06,
+    0xb2, 0xfb, 0xb7, 0x7e, 0xd5, 0x16, 0x22, 0xfd, 0xad, 0x39, 0x7d, 0x65,
+    0xfd, 0xaf, 0x3f, 0x30, 0x45, 0x97, 0x87, 0xe0, 0xac, 0xa6, 0x3c, 0xb7,
+    0x2e, 0xb1, 0x8b, 0x2e, 0xe3, 0x2c, 0xa6, 0x35, 0x00, 0x12, 0xbf, 0xf4,
+    0xb3, 0x9f, 0xf6, 0x36, 0xa4, 0xb2, 0x98, 0xf7, 0x82, 0x41, 0x7f, 0x44,
+    0x74, 0x77, 0x1a, 0xcb, 0xc1, 0x29, 0x2c, 0xbf, 0xdd, 0xc6, 0x68, 0x00,
+    0xfa, 0xca, 0x9d, 0x57, 0xf4, 0x89, 0xf0, 0xdb, 0xb4, 0x0e, 0x89, 0x18,
+    0x67, 0x47, 0xc7, 0x30, 0xf3, 0x91, 0x42, 0x9b, 0x84, 0x3f, 0x2d, 0x08,
+    0xe5, 0xf6, 0xa0, 0x8d, 0x59, 0x7a, 0x51, 0xb8, 0xb2, 0xb0, 0xf0, 0x66,
+    0x22, 0xb3, 0x2c, 0xb3, 0x2c, 0xb4, 0x8d, 0x34, 0x00, 0x10, 0xbf, 0x09,
+    0xb7, 0x9a, 0x85, 0x97, 0x07, 0x4b, 0x2f, 0xbf, 0x05, 0x3a, 0xca, 0x98,
+    0xdc, 0xfc, 0x5e, 0xc4, 0xb2, 0xe8, 0x25, 0x97, 0xf4, 0x70, 0x49, 0xe2,
+    0x75, 0x94, 0x47, 0xab, 0xc1, 0x01, 0x05, 0x6f, 0xb7, 0x3c, 0x1d, 0xc5,
+    0x95, 0x09, 0x99, 0xe3, 0x23, 0x3b, 0x84, 0xbe, 0xff, 0x83, 0x39, 0x60,
+    0xfc, 0x13, 0x56, 0x51, 0xa9, 0xe8, 0xfa, 0x35, 0xb2, 0x3b, 0xbe, 0xf7,
+    0x03, 0x0b, 0x2f, 0xff, 0x67, 0x5d, 0x01, 0xff, 0xc6, 0x2e, 0xa4, 0xb2,
+    0xff, 0xe8, 0xce, 0x61, 0x0d, 0x81, 0x04, 0xb2, 0xf1, 0x44, 0xeb, 0x29,
+    0x91, 0x50, 0x49, 0x81, 0x40, 0xbe, 0x8d, 0x41, 0xd6, 0x54, 0x26, 0x33,
+    0x28, 0x65, 0x70, 0xba, 0xf8, 0x62, 0x6d, 0x52, 0x59, 0x7e, 0x07, 0x7e,
+    0x61, 0x5a, 0xcb, 0xde, 0xc0, 0x2c, 0xbf, 0xba, 0xe7, 0xa1, 0xbe, 0xb2,
+    0xe7, 0xfa, 0xca, 0x63, 0xc4, 0x39, 0x75, 0xef, 0x40, 0x16, 0x5c, 0x1d,
+    0xb5, 0x97, 0xcc, 0x51, 0x3a, 0xcb, 0xff, 0xef, 0xe7, 0x52, 0x20, 0xfd,
+    0xd8, 0xa0, 0x6b, 0x2f, 0xe3, 0x96, 0x46, 0xe4, 0xcb, 0x2c, 0x05, 0x95,
+    0x07, 0x82, 0xc6, 0x17, 0x9e, 0x3a, 0x59, 0x5b, 0x42, 0x7f, 0x38, 0x53,
+    0xd9, 0x6e, 0x98, 0x3c, 0x42, 0x43, 0x9c, 0x1a, 0xf9, 0x0e, 0xdc, 0x23,
+    0xf7, 0x48, 0x2f, 0x3f, 0xf8, 0xb2, 0xff, 0xfb, 0x52, 0x39, 0x46, 0xa0,
+    0x79, 0x34, 0x79, 0x65, 0x31, 0xf5, 0xb8, 0xe5, 0xf6, 0x76, 0xfc, 0x59,
+    0x7d, 0xbc, 0x2f, 0xc5, 0x96, 0x65, 0x97, 0xfd, 0x1f, 0xe7, 0x3f, 0x1d,
+    0x18, 0xb2, 0xfc, 0xda, 0x63, 0x05, 0x6b, 0x2d, 0xd2, 0xca, 0x92, 0x3b,
+    0xf0, 0x81, 0x88, 0xa6, 0x24, 0xd0, 0x87, 0x8e, 0xc4, 0x2c, 0xbf, 0xf3,
+    0x7b, 0xa9, 0x67, 0xf3, 0xaf, 0xac, 0xbf, 0xde, 0xc3, 0xe3, 0xea, 0x75,
+    0x95, 0x23, 0xf3, 0x1a, 0x05, 0xfb, 0xff, 0x79, 0x71, 0x65, 0xec, 0xd4,
+    0x2c, 0xbc, 0x58, 0x75, 0x9b, 0x65, 0xdd, 0xff, 0x83, 0x9d, 0x0f, 0x7f,
+    0xb1, 0xe6, 0x59, 0x5d, 0x22, 0xca, 0x64, 0x3d, 0xe5, 0xb6, 0x92, 0xcb,
+    0xdd, 0x71, 0xd6, 0x5f, 0x66, 0x19, 0xc5, 0x95, 0x07, 0xa1, 0x82, 0x3f,
+    0x1d, 0xb6, 0xf5, 0x97, 0x04, 0x96, 0x58, 0x56, 0xb2, 0xdb, 0xd6, 0x54,
+    0x27, 0xad, 0x90, 0xd4, 0xd4, 0x21, 0x00, 0x5b, 0xc1, 0x3f, 0x8b, 0x6f,
+    0x15, 0xbf, 0xbb, 0x8f, 0xfb, 0x00, 0xb2, 0xfe, 0x13, 0x35, 0x99, 0x32,
+    0xca, 0x23, 0xdc, 0xe1, 0x75, 0xfb, 0xae, 0x46, 0xb8, 0xb2, 0xff, 0x9f,
+    0xfc, 0x18, 0x5f, 0x52, 0x59, 0x7f, 0xa7, 0xea, 0x5c, 0x26, 0x99, 0x65,
+    0xf7, 0xc8, 0x33, 0xac, 0xa8, 0x3d, 0x92, 0x36, 0xa8, 0x47, 0xe6, 0x10,
+    0x91, 0x48, 0x61, 0x25, 0x7f, 0x6a, 0x40, 0xcc, 0x99, 0x65, 0xc1, 0x11,
+    0x65, 0xf3, 0xc3, 0x6d, 0xac, 0xbf, 0x87, 0xe6, 0xdf, 0x04, 0xb2, 0xee,
+    0x4c, 0xb2, 0xf6, 0x84, 0xe2, 0xca, 0xc4, 0x66, 0x9a, 0x5d, 0xa1, 0x82,
+    0x23, 0xf9, 0x76, 0xf1, 0x8b, 0xfe, 0xe1, 0xba, 0x81, 0xfa, 0x37, 0xac,
+    0xbe, 0x90, 0x9e, 0x85, 0x97, 0xb5, 0x12, 0x59, 0x4e, 0x6f, 0xf7, 0x91,
+    0xdf, 0x8f, 0x8d, 0xa9, 0x96, 0x5b, 0x71, 0x65, 0x41, 0xbc, 0x72, 0x8b,
+    0xe1, 0x23, 0x77, 0x8b, 0x2f, 0xfc, 0x44, 0xe7, 0xe6, 0x1e, 0x37, 0x16,
+    0x5f, 0xf9, 0xa7, 0x72, 0xf3, 0xf2, 0x37, 0x16, 0x5e, 0xf4, 0x79, 0x65,
+    0x2c, 0xb6, 0x0c, 0xd3, 0x9c, 0x72, 0xfb, 0x4c, 0x66, 0xe2, 0xca, 0x64,
+    0x79, 0x78, 0xfc, 0x99, 0xf8, 0x4d, 0x7f, 0xfb, 0x4c, 0x78, 0xeb, 0xd0,
+    0x32, 0x7d, 0xc5, 0x94, 0x34, 0xe7, 0xf9, 0x18, 0xc7, 0xce, 0xef, 0xbb,
+    0xf4, 0x69, 0x65, 0xe6, 0xcd, 0x2c, 0xae, 0x8d, 0xf0, 0x84, 0x77, 0xf8,
+    0x01, 0x71, 0x3d, 0x12, 0x59, 0x50, 0xae, 0xef, 0x16, 0x19, 0xef, 0xcb,
+    0xcf, 0x1d, 0xf0, 0x5d, 0x4c, 0x23, 0xba, 0x24, 0xb2, 0xfd, 0xdf, 0xa3,
+    0xad, 0xd5, 0x94, 0x33, 0xc3, 0xe8, 0x5a, 0xc3, 0x59, 0x7e, 0x27, 0x3c,
+    0x79, 0x65, 0x61, 0xb7, 0x61, 0x1b, 0xff, 0xd0, 0x78, 0x90, 0xca, 0x3c,
+    0xf9, 0xa5, 0x97, 0x37, 0x96, 0x52, 0xca, 0x91, 0xf4, 0x7d, 0x1f, 0x6c,
+    0x5a, 0xfc, 0x51, 0xe8, 0xdc, 0x59, 0x7b, 0xf8, 0x05, 0x97, 0xf1, 0xdb,
+    0x9c, 0x61, 0xac, 0xbc, 0xfa, 0x35, 0x65, 0x04, 0xf2, 0x8c, 0x2d, 0xbf,
+    0x8b, 0x37, 0x96, 0x71, 0x65, 0xcd, 0xa5, 0x95, 0xd9, 0xe1, 0xf8, 0xb6,
+    0xff, 0x6e, 0x6c, 0x12, 0x09, 0xcd, 0x59, 0x7f, 0xa4, 0xf8, 0x59, 0xfe,
+    0x2c, 0xbf, 0x87, 0x98, 0x5d, 0x7d, 0x65, 0x62, 0x25, 0xfa, 0x39, 0x01,
+    0x8d, 0xf0, 0xe1, 0xf4, 0xb2, 0xff, 0xd9, 0xd4, 0xbd, 0x1c, 0x37, 0xd0,
+    0xb2, 0xa1, 0x5a, 0x9c, 0x96, 0xba, 0x84, 0x3b, 0x19, 0x4c, 0x53, 0xa6,
+    0x6f, 0x33, 0x14, 0x2e, 0xb8, 0x61, 0xba, 0x43, 0x7d, 0xf7, 0x79, 0xd6,
+    0x5b, 0x6d, 0x65, 0xd2, 0xe2, 0xcb, 0x3c, 0x8d, 0x5f, 0x42, 0x97, 0xdf,
+    0x62, 0x31, 0x25, 0x82, 0xb2, 0xd1, 0x86, 0xcf, 0xc4, 0x57, 0x66, 0x96,
+    0x5f, 0xe2, 0xff, 0x3a, 0xe3, 0xee, 0x2c, 0xbf, 0xb0, 0x7b, 0x99, 0xd6,
+    0xe2, 0xca, 0x73, 0xeb, 0x23, 0x7a, 0xdc, 0x4d, 0xb5, 0xd3, 0x40, 0xb4,
+    0x44, 0xa1, 0x84, 0x0d, 0xe1, 0x3c, 0x15, 0x97, 0xfe, 0x38, 0x66, 0xeb,
+    0x91, 0x33, 0x6f, 0x59, 0x7f, 0x9b, 0x9e, 0x72, 0x88, 0x59, 0x70, 0x7c,
+    0xb2, 0xb4, 0x78, 0xe7, 0x30, 0xbf, 0xfe, 0xcf, 0x75, 0x2e, 0x4d, 0x26,
+    0x2f, 0xc0, 0x16, 0x5f, 0xd0, 0x72, 0x8e, 0xa4, 0xb2, 0x98, 0xff, 0xbc,
+    0xa3, 0x7b, 0x5a, 0xc5, 0x97, 0xba, 0x97, 0x16, 0x5d, 0xe6, 0xe1, 0xba,
+    0x30, 0x72, 0xfb, 0x58, 0xfb, 0xab, 0x2f, 0x41, 0x92, 0x59, 0x7f, 0xd9,
+    0xfe, 0x6b, 0x39, 0x1d, 0x2c, 0xbd, 0x8f, 0xda, 0xca, 0xec, 0xfc, 0x98,
+    0x74, 0x8e, 0x6f, 0xfd, 0x06, 0x09, 0x3f, 0x30, 0xf1, 0xb8, 0xb2, 0xe7,
+    0x31, 0x65, 0x4e, 0xa9, 0x1c, 0x70, 0xa0, 0xed, 0x6f, 0x45, 0xbe, 0x84,
+    0xb7, 0xcb, 0xb7, 0xa2, 0x5d, 0xce, 0x96, 0x5d, 0x9c, 0x59, 0x76, 0xee,
+    0x96, 0x54, 0x2b, 0x8e, 0xc9, 0x5a, 0x4c, 0xe8, 0x20, 0xc6, 0xe8, 0xb5,
+    0xff, 0xda, 0xec, 0x2e, 0x3c, 0x21, 0xf9, 0x96, 0x5f, 0xb3, 0xdd, 0x4b,
+    0x8b, 0x2f, 0xc7, 0x17, 0xde, 0xf3, 0x16, 0x53, 0x1e, 0xc0, 0x85, 0x37,
+    0x1e, 0x16, 0x5e, 0x6d, 0xf8, 0xb2, 0xff, 0xbb, 0x27, 0xe7, 0x03, 0x1d,
+    0xac, 0xac, 0x3e, 0xdf, 0x8b, 0x04, 0x76, 0xff, 0xce, 0xdf, 0x96, 0x1a,
+    0x58, 0x05, 0x97, 0xee, 0xa4, 0x58, 0x35, 0x95, 0xe3, 0xe5, 0x23, 0xdb,
+    0xde, 0xc3, 0x16, 0x5f, 0xcd, 0xcf, 0x34, 0x32, 0xcb, 0xff, 0xf1, 0x66,
+    0x77, 0xe8, 0xdc, 0x2c, 0xfe, 0x30, 0x16, 0x51, 0xd1, 0x00, 0xe5, 0x77,
+    0xfb, 0x0b, 0xa8, 0xe3, 0xee, 0x2c, 0xbf, 0x14, 0xd1, 0xe8, 0x59, 0x4b,
+    0x2e, 0xc1, 0xac, 0xb8, 0x0f, 0xd1, 0xa1, 0xde, 0x17, 0x7e, 0xcf, 0x74,
+    0xfb, 0x8b, 0x2f, 0x81, 0xc8, 0x25, 0x97, 0xfb, 0x5e, 0x76, 0xe3, 0x6f,
+    0x59, 0x71, 0xac, 0xb2, 0xa0, 0xfb, 0x30, 0x85, 0xcd, 0x2f, 0xfd, 0x84,
+    0x4f, 0xfd, 0x92, 0x83, 0xac, 0xb7, 0x6b, 0x2b, 0xc7, 0xa0, 0x13, 0xeb,
+    0xf3, 0xfc, 0x2e, 0x22, 0xca, 0x85, 0xca, 0x71, 0xc2, 0x73, 0x21, 0x1e,
+    0xd0, 0x93, 0xdc, 0x21, 0x3c, 0x27, 0x7c, 0x44, 0xe6, 0xa0, 0x48, 0x22,
+    0xfe, 0x42, 0x5f, 0xef, 0x81, 0x22, 0xbf, 0x8c, 0x8d, 0x69, 0xe6, 0x59,
+    0x7f, 0xc3, 0x8e, 0xc4, 0x00, 0x23, 0xa5, 0x97, 0xb8, 0xfd, 0x2c, 0xbf,
+    0xe7, 0xd6, 0x1d, 0xb6, 0xe0, 0xeb, 0x2b, 0xb4, 0x49, 0xb1, 0xe0, 0x47,
+    0x6f, 0x9f, 0x9b, 0x82, 0x2c, 0xbf, 0x74, 0x31, 0xb7, 0x16, 0x5e, 0xd6,
+    0x71, 0x65, 0x41, 0xe2, 0xe1, 0x4d, 0xf7, 0xe3, 0xa9, 0x2c, 0xbf, 0x98,
+    0x1b, 0x64, 0xc0, 0x59, 0x76, 0x01, 0x65, 0x4e, 0x7d, 0x1a, 0x23, 0x22,
+    0xfb, 0xff, 0xbc, 0xed, 0xfc, 0xd0, 0x0e, 0xf2, 0x59, 0x78, 0x7e, 0x65,
+    0x94, 0xc7, 0xbe, 0x14, 0x3b, 0xfd, 0x31, 0x39, 0x98, 0x40, 0x59, 0x78,
+    0xa2, 0x75, 0x94, 0xe7, 0x9e, 0x46, 0x77, 0xbf, 0x82, 0x2c, 0xa8, 0x56,
+    0x41, 0x90, 0xc2, 0x34, 0xc3, 0xcd, 0x6f, 0x08, 0x8e, 0x42, 0x38, 0x2e,
+    0x1b, 0xa4, 0x17, 0xf1, 0x44, 0xa3, 0x7c, 0x2c, 0xb0, 0x16, 0x5f, 0x8d,
+    0x72, 0x0c, 0xcb, 0x2a, 0x0d, 0xd0, 0x44, 0x6f, 0x82, 0xdb, 0xa7, 0x59,
+    0x7f, 0x6f, 0xd3, 0xc3, 0x6d, 0xac, 0xb9, 0xa7, 0x59, 0x6c, 0x59, 0x4c,
+    0x98, 0x24, 0xcc, 0xfa, 0x20, 0x39, 0x2b, 0x98, 0x90, 0xbd, 0xfb, 0x3d,
+    0xbd, 0xb4, 0xb2, 0xff, 0x14, 0xbc, 0xdb, 0xf0, 0x6b, 0x2d, 0x0b, 0x29,
+    0xcf, 0x10, 0x8d, 0x2f, 0x66, 0xa1, 0x65, 0xf4, 0xc6, 0x41, 0xab, 0x2f,
+    0x8b, 0xfb, 0xb0, 0xb2, 0xfa, 0x7f, 0xe7, 0x6b, 0x2f, 0xf3, 0x9a, 0x27,
+    0xbd, 0x12, 0x59, 0x50, 0x8b, 0xdc, 0x1b, 0x62, 0x57, 0x24, 0xdb, 0x24,
+    0xbf, 0xf7, 0xb0, 0x63, 0x6e, 0xb3, 0xaf, 0xac, 0xbf, 0xb6, 0x0c, 0x47,
+    0xd6, 0x96, 0x54, 0xe7, 0xe2, 0x34, 0x0b, 0xfc, 0x3c, 0xff, 0xa0, 0xbb,
+    0x59, 0x7a, 0x1b, 0x6d, 0x65, 0xf7, 0xf8, 0x21, 0xd6, 0x53, 0x9e, 0x10,
+    0x47, 0xaf, 0xf8, 0x7b, 0x33, 0x91, 0x9a, 0x02, 0xcb, 0xde, 0x13, 0x8b,
+    0x2b, 0x0f, 0x61, 0xce, 0xaf, 0x73, 0xcc, 0xb2, 0xff, 0x30, 0xfe, 0x4f,
+    0xd7, 0x16, 0x52, 0xcb, 0xfb, 0x8d, 0xd6, 0x75, 0xf5, 0x95, 0xd1, 0xba,
+    0xf8, 0x5d, 0xd3, 0xc2, 0xca, 0x84, 0x53, 0x3b, 0x68, 0x48, 0xaf, 0xb3,
+    0x8c, 0x05, 0x95, 0x0a, 0x90, 0xa7, 0x23, 0x1b, 0xaf, 0x9e, 0x40, 0x40,
+    0x50, 0xc2, 0xdb, 0x2e, 0xad, 0xa9, 0xda, 0xdc, 0x0a, 0x55, 0x76, 0x88,
+    0x41, 0x0a, 0x09, 0xf6, 0x92, 0x28, 0xaa, 0x2c, 0x89, 0x41, 0x13, 0xbb,
+    0xca, 0x34, 0xf1, 0xca, 0x00, 0xc9, 0x68, 0xe6, 0xc3, 0xeb, 0xb9, 0x42,
+    0x7d, 0x46, 0xa0, 0xd2, 0x8b, 0xa6, 0x8f, 0xd7, 0x52, 0xab, 0x4f, 0x1e,
+    0x3f, 0xa7, 0x31, 0xde, 0x5f, 0xf8, 0x25, 0x03, 0x0a, 0xd4, 0x4a, 0x5d,
+    0x67, 0x27, 0x3e, 0xff, 0x2f, 0xb0, 0x31, 0xc3, 0xef, 0x56, 0x31, 0xb7,
+    0x6e, 0x1b, 0xa2, 0x4a, 0xfc, 0xbb, 0xb8, 0x59, 0x7c, 0xfd, 0xc6, 0x96,
+    0x51, 0x86, 0xe7, 0x74, 0x5e, 0xe3, 0x31, 0x65, 0xff, 0x9a, 0x3f, 0xe7,
+    0x37, 0x08, 0x0b, 0x2f, 0xff, 0x3e, 0xb6, 0x3f, 0xf6, 0x7f, 0xae, 0xd8,
+    0x96, 0x53, 0x22, 0x8f, 0xc2, 0xfb, 0xcf, 0x6f, 0x6b, 0x24, 0xb2, 0xe6,
+    0x3a, 0xca, 0xf9, 0xb2, 0xdd, 0x1c, 0xbf, 0xb3, 0xf0, 0xc7, 0xe2, 0xcb,
+    0xd0, 0x06, 0x59, 0x7f, 0x44, 0xb3, 0x59, 0xc5, 0x97, 0xef, 0x67, 0xe3,
+    0xcb, 0x28, 0x67, 0xa6, 0xe5, 0x97, 0xff, 0xb5, 0xa0, 0xcb, 0x59, 0x1d,
+    0x49, 0x8e, 0xb2, 0xe9, 0x99, 0x65, 0x61, 0xf1, 0x3a, 0x5d, 0xee, 0x09,
+    0xc5, 0x97, 0xff, 0x4b, 0xe1, 0x9c, 0x5f, 0x9c, 0xed, 0xc5, 0x97, 0xfe,
+    0xf0, 0x7a, 0xe4, 0x1d, 0xfa, 0xfa, 0xcb, 0x67, 0x48, 0x89, 0xfa, 0x45,
+    0xff, 0xbf, 0x07, 0xe4, 0x34, 0xef, 0xf5, 0x97, 0xf3, 0xee, 0x3e, 0x75,
+    0xf5, 0x95, 0xd1, 0xf7, 0x78, 0xfa, 0xff, 0x3e, 0x0d, 0xba, 0x27, 0x59,
+    0x58, 0x7a, 0x81, 0x23, 0xb8, 0x66, 0xac, 0xbe, 0x8f, 0xc9, 0xd6, 0x5f,
+    0x6b, 0x76, 0x09, 0x65, 0x89, 0x65, 0x41, 0xb4, 0x30, 0x92, 0xf7, 0xca,
+    0x16, 0x5d, 0xe1, 0x70, 0xb9, 0xd1, 0x90, 0xc8, 0x66, 0x39, 0x89, 0x34,
+    0x58, 0x76, 0xef, 0x42, 0x0d, 0xc8, 0x0a, 0x14, 0xfc, 0x87, 0x5f, 0xc8,
+    0x77, 0x8c, 0x18, 0xaa, 0x21, 0x0d, 0x0b, 0x64, 0x26, 0xc4, 0xfb, 0x4d,
+    0xfd, 0x9a, 0xed, 0xdf, 0xb5, 0x45, 0x9a, 0xbf, 0xc0, 0x8e, 0x33, 0xf4,
+    0x62, 0xcb, 0xf0, 0x66, 0xf3, 0x0d, 0x65, 0xff, 0xb0, 0x79, 0x86, 0x8c,
+    0x9a, 0x75, 0x97, 0x9f, 0x3e, 0xb2, 0xfb, 0x5e, 0x71, 0x6c, 0x8b, 0x63,
+    0x9a, 0x11, 0x4f, 0x0f, 0xaf, 0xf7, 0xfd, 0x8d, 0x39, 0xe1, 0x65, 0xff,
+    0xa3, 0x40, 0xff, 0x3d, 0x8c, 0x35, 0x97, 0x6d, 0x6e, 0xb2, 0xd3, 0xac,
+    0xbd, 0x28, 0xe9, 0x65, 0xb2, 0x0d, 0x7c, 0xc2, 0x57, 0xcc, 0x4f, 0x3a,
+    0xca, 0xc4, 0xc0, 0xbc, 0x66, 0xe7, 0xc4, 0x95, 0xc2, 0x6b, 0x79, 0x65,
+    0xfb, 0xd1, 0xcf, 0x32, 0xcb, 0xff, 0x37, 0xe0, 0xe4, 0xe6, 0xf9, 0x96,
+    0x5d, 0x1e, 0x59, 0x7f, 0x16, 0x6f, 0xf3, 0xc9, 0x65, 0x85, 0xce, 0x8b,
+    0x9c, 0x11, 0x98, 0x9f, 0xc7, 0xbf, 0x16, 0xa1, 0x69, 0xaa, 0x6e, 0xc6,
+    0x03, 0x7f, 0xfc, 0x17, 0x9f, 0x58, 0x71, 0x7e, 0x89, 0xc8, 0x2b, 0x28,
+    0x5a, 0xe0, 0xeb, 0x43, 0xc5, 0xe5, 0x55, 0x11, 0x7d, 0xf3, 0x1c, 0x4d,
+    0x2c, 0xbd, 0xe6, 0x31, 0x65, 0xf7, 0x0a, 0x0c, 0x59, 0x7b, 0xbc, 0xf2,
+    0xcb, 0xb9, 0x0b, 0x2f, 0xc1, 0xe7, 0xe3, 0x8b, 0x2a, 0x46, 0xfa, 0x61,
+    0x6a, 0x83, 0xfd, 0x65, 0xbb, 0xf8, 0xa0, 0xfc, 0x69, 0xd6, 0x5e, 0x2d,
+    0x05, 0x65, 0x48, 0xf2, 0x58, 0xb6, 0xe3, 0x34, 0xb2, 0xfc, 0x16, 0x15,
+    0x05, 0x3b, 0x52, 0xcb, 0xc1, 0xeb, 0x8b, 0x2f, 0xc2, 0x7c, 0xa0, 0x0b,
+    0x2b, 0x47, 0x8d, 0xbc, 0x7a, 0xfd, 0x38, 0x64, 0x18, 0x59, 0x50, 0x79,
+    0xac, 0x49, 0x7c, 0xc7, 0x6d, 0xd5, 0x97, 0x04, 0x45, 0x97, 0x8b, 0x38,
+    0xb2, 0xa0, 0xf5, 0xe6, 0x24, 0x10, 0x62, 0xfb, 0xcd, 0xd7, 0x16, 0x5d,
+    0x1d, 0x2c, 0xb9, 0xb6, 0xd6, 0x56, 0xe1, 0xe9, 0xcc, 0x46, 0x20, 0xbd,
+    0xda, 0x35, 0x65, 0xc7, 0x17, 0x0a, 0xe4, 0x06, 0x47, 0xd0, 0xeb, 0x42,
+    0x7e, 0x66, 0x9d, 0x10, 0x9c, 0x63, 0xd0, 0xc9, 0x77, 0x70, 0xc2, 0x0c,
+    0x43, 0x4b, 0xb1, 0x96, 0x5d, 0x83, 0x59, 0x7e, 0xd7, 0x6e, 0xfd, 0xaa,
+    0x28, 0x05, 0xfc, 0xfa, 0x6f, 0xf3, 0x16, 0x5e, 0x79, 0x0b, 0xc3, 0xe2,
+    0xe1, 0xb5, 0xfe, 0x63, 0xc6, 0xe7, 0xb2, 0x75, 0x96, 0x17, 0x24, 0x7b,
+    0xe0, 0xa9, 0xde, 0x3c, 0x69, 0x7f, 0x17, 0xf9, 0x03, 0x85, 0x97, 0x48,
+    0xeb, 0x2f, 0xe6, 0xe4, 0xc5, 0x03, 0x59, 0x7b, 0x5d, 0x49, 0x65, 0x0c,
+    0xf2, 0xdc, 0xb6, 0xfd, 0x1d, 0x7d, 0xf4, 0xb2, 0xfd, 0xfe, 0x49, 0x80,
+    0xb2, 0xdb, 0xd6, 0x5b, 0xeb, 0x2a, 0x46, 0x93, 0xb1, 0x3b, 0xf9, 0xbd,
+    0x05, 0x1f, 0x59, 0x78, 0x6e, 0xcb, 0x2a, 0x13, 0x8b, 0x91, 0x66, 0x31,
+    0x31, 0x0b, 0x94, 0x12, 0x67, 0x08, 0x82, 0x57, 0x7a, 0x68, 0x92, 0xcb,
+    0xb5, 0xf5, 0x96, 0x17, 0x86, 0xd3, 0x83, 0xb7, 0xfd, 0x1f, 0xf6, 0x1f,
+    0x35, 0x8b, 0x2f, 0xa6, 0xcc, 0xed, 0x65, 0xfb, 0xe6, 0xbf, 0x05, 0xe8,
+    0xf6, 0x84, 0x37, 0xa9, 0x23, 0x14, 0xc8, 0x41, 0x50, 0xb4, 0xe3, 0xe2,
+    0x36, 0x6b, 0xb9, 0xf5, 0x96, 0x85, 0x96, 0xf2, 0xca, 0x39, 0xa1, 0x08,
+    0x85, 0xf0, 0xa7, 0x7f, 0x5c, 0x59, 0x78, 0x78, 0x75, 0x97, 0xff, 0x7d,
+    0x83, 0xc1, 0x0f, 0xad, 0x31, 0xab, 0x2f, 0xff, 0xdb, 0xe3, 0xcc, 0x3f,
+    0x44, 0xb8, 0xfe, 0x6e, 0x2c, 0xbf, 0xb9, 0x07, 0x28, 0x99, 0x65, 0xbc,
+    0xb2, 0xf0, 0x85, 0x32, 0xcb, 0x7f, 0x0d, 0x78, 0x04, 0x6e, 0xc9, 0xd6,
+    0x56, 0x1b, 0xd2, 0x26, 0xbe, 0x63, 0xc4, 0xcb, 0x2a, 0x74, 0xe4, 0xe4,
+    0x38, 0xc8, 0xe0, 0x56, 0x28, 0x4c, 0xed, 0x8f, 0xdf, 0xfe, 0x0e, 0xa5,
+    0x9c, 0x60, 0x8a, 0xca, 0x0e, 0xb2, 0xdc, 0x59, 0x7c, 0x36, 0x20, 0x2c,
+    0xad, 0x86, 0xc9, 0xc4, 0x6f, 0xff, 0xb5, 0x38, 0xfc, 0xda, 0xe4, 0x6a,
+    0x66, 0xf2, 0xcb, 0xff, 0xb0, 0x1c, 0x27, 0x37, 0x37, 0xb6, 0x96, 0x5e,
+    0x08, 0xf1, 0x65, 0xfd, 0xaf, 0x94, 0x1f, 0x8b, 0x2f, 0xff, 0xda, 0x1b,
+    0x91, 0xbe, 0xcd, 0xcd, 0x31, 0xe0, 0xd5, 0x95, 0x88, 0x86, 0x09, 0x6d,
+    0xb6, 0xd6, 0x54, 0x26, 0xdf, 0x8a, 0x4c, 0x8b, 0xe8, 0x51, 0x00, 0x8a,
+    0xf3, 0xeb, 0x16, 0x5e, 0xe4, 0x01, 0x65, 0xf4, 0x98, 0xb1, 0x65, 0x7c,
+    0xde, 0x18, 0x39, 0x7d, 0xdb, 0xbf, 0x6a, 0x8b, 0x7d, 0x7b, 0x6d, 0xfe,
+    0xb2, 0xff, 0x31, 0x41, 0xc0, 0xff, 0x59, 0x7a, 0x6c, 0x02, 0xcb, 0xf0,
+    0x93, 0xfa, 0x34, 0xb2, 0xbb, 0x4d, 0x01, 0x95, 0xf4, 0x44, 0x73, 0x0f,
+    0x0f, 0xb9, 0x8f, 0xc7, 0x6f, 0xf9, 0xbd, 0x1d, 0x46, 0xe6, 0x74, 0xb2,
+    0xff, 0xff, 0x9e, 0x61, 0xb6, 0xbd, 0x83, 0x28, 0xed, 0xe7, 0x28, 0x3a,
+    0xcb, 0xfe, 0xd0, 0x79, 0xe7, 0x90, 0x19, 0x65, 0x98, 0x08, 0x9f, 0xfb,
+    0x35, 0xf7, 0xf8, 0xff, 0x59, 0x7f, 0xed, 0x66, 0xe4, 0xde, 0x73, 0xb7,
+    0x16, 0x5d, 0x93, 0xe1, 0xf2, 0x68, 0x8a, 0xbc, 0x8b, 0x92, 0x84, 0x65,
+    0x8c, 0x59, 0x7f, 0xce, 0x5d, 0xf2, 0x3c, 0xfb, 0x8b, 0x28, 0xd3, 0xcd,
+    0xf8, 0x95, 0xf6, 0x13, 0x4c, 0xb2, 0xf9, 0xb3, 0x5b, 0xd6, 0x5f, 0x75,
+    0x29, 0xe1, 0x65, 0xe8, 0x33, 0x6d, 0x65, 0x61, 0xe2, 0x68, 0x92, 0xf7,
+    0xa3, 0x4b, 0x2f, 0xde, 0x6d, 0x79, 0xd6, 0x5f, 0xfe, 0xf4, 0x4f, 0xfc,
+    0xf1, 0x67, 0xfc, 0xcb, 0x2f, 0x1f, 0x06, 0xb2, 0xc7, 0x59, 0x7f, 0xa2,
+    0x71, 0xe1, 0x9c, 0x17, 0x08, 0xb9, 0xc1, 0xc9, 0x89, 0xdd, 0x24, 0x41,
+    0xca, 0x92, 0x69, 0xfe, 0x86, 0xd5, 0xf0, 0xcf, 0x9d, 0x2c, 0xbe, 0x97,
+    0x04, 0xe2, 0xca, 0x83, 0xc7, 0xf9, 0x1d, 0xf6, 0x7f, 0x98, 0xb2, 0xfe,
+    0x7e, 0x86, 0xc5, 0x3a, 0xca, 0x83, 0xcf, 0xd1, 0x0d, 0xee, 0x78, 0x6b,
+    0x2f, 0xc2, 0x7c, 0xa0, 0x0b, 0x28, 0xe7, 0x8b, 0xbc, 0x76, 0xe2, 0x85,
+    0x97, 0xff, 0x7f, 0x8d, 0xc8, 0x2c, 0xff, 0x99, 0x65, 0xff, 0x9f, 0x77,
+    0x4c, 0x6e, 0x79, 0xa4, 0xb2, 0xff, 0x80, 0xdf, 0x27, 0xfc, 0x0d, 0x65,
+    0xe2, 0xcf, 0x2c, 0xad, 0x23, 0xa8, 0xe2, 0xbe, 0x42, 0xe2, 0x0e, 0xf3,
+    0x7b, 0xfe, 0x6e, 0x60, 0xe2, 0x66, 0x3a, 0xcb, 0xf0, 0xe3, 0x70, 0x27,
+    0x59, 0x7f, 0xcf, 0xc8, 0xc2, 0x1f, 0xa1, 0x65, 0xfe, 0xf4, 0x0d, 0xb7,
+    0xc0, 0xd6, 0x5f, 0xf6, 0xb3, 0xaf, 0x13, 0xee, 0x4e, 0xb2, 0xd8, 0x33,
+    0xf1, 0x39, 0xa5, 0xdc, 0xe6, 0x91, 0x9c, 0x50, 0xa7, 0xa8, 0x55, 0x7d,
+    0x91, 0x87, 0x76, 0x98, 0xc7, 0x0f, 0x0f, 0x9b, 0xf0, 0x99, 0xe7, 0x3a,
+    0xcb, 0x82, 0x6a, 0xcb, 0xe3, 0xcd, 0x02, 0x2c, 0xba, 0x3c, 0xb2, 0xff,
+    0xdb, 0xae, 0x71, 0x34, 0x03, 0xb7, 0x16, 0x57, 0x68, 0xbd, 0x39, 0x43,
+    0x8c, 0x11, 0x26, 0xe8, 0xb5, 0xe6, 0x2f, 0xac, 0xb8, 0x3d, 0x2c, 0xbf,
+    0xe7, 0x97, 0xf9, 0x86, 0x79, 0x96, 0x5e, 0xe9, 0xfc, 0xb2, 0x9d, 0x11,
+    0x20, 0x1b, 0x21, 0x80, 0x9c, 0xdf, 0xe8, 0xe6, 0x75, 0xf6, 0xd2, 0xcb,
+    0xee, 0x7e, 0x0e, 0xb2, 0xb4, 0x7a, 0xa0, 0x33, 0xbf, 0xde, 0x09, 0x0f,
+    0xcc, 0x62, 0xcb, 0xff, 0xa6, 0x08, 0xdc, 0x81, 0xb1, 0x8f, 0xf5, 0x95,
+    0xe3, 0xfb, 0xf9, 0xa5, 0xed, 0x47, 0xd6, 0x5f, 0xfa, 0x3e, 0x17, 0x9e,
+    0x3d, 0x07, 0x59, 0x7f, 0x4c, 0xe3, 0xf3, 0x1d, 0x65, 0xfd, 0xf6, 0xc1,
+    0xc1, 0xd6, 0x57, 0x48, 0x98, 0xf9, 0xf1, 0x85, 0xd7, 0xcf, 0x38, 0x49,
+    0x65, 0xdc, 0x25, 0x97, 0xf7, 0x5c, 0x8e, 0xf0, 0xeb, 0x2f, 0x8f, 0xde,
+    0x12, 0xca, 0x85, 0x45, 0xd9, 0x09, 0xdd, 0x11, 0x3c, 0x2d, 0x08, 0xcb,
+    0x84, 0x41, 0x16, 0x10, 0xbe, 0x96, 0x5f, 0xa6, 0x82, 0x28, 0x59, 0x77,
+    0x7a, 0x59, 0x73, 0x92, 0xca, 0x83, 0xde, 0x60, 0xbf, 0x93, 0x04, 0x62,
+    0xfc, 0xf3, 0xc7, 0x9d, 0x65, 0xe2, 0x83, 0x56, 0x5f, 0x66, 0xe3, 0xf9,
+    0x65, 0xe2, 0x7f, 0xf6, 0x78, 0x1c, 0x1c, 0xbf, 0xe2, 0xcf, 0xff, 0x26,
+    0x79, 0x96, 0x5e, 0x98, 0x3e, 0x59, 0x70, 0xce, 0xb2, 0xfd, 0x93, 0x4a,
+    0x3a, 0x59, 0x58, 0x7b, 0xc6, 0x8f, 0x10, 0xbd, 0xd0, 0x4b, 0x2b, 0xb4,
+    0xc3, 0x58, 0xcf, 0xd0, 0x97, 0x30, 0xba, 0xf7, 0x8c, 0x75, 0x97, 0xff,
+    0x07, 0x9e, 0x79, 0x8b, 0x00, 0x1e, 0x2c, 0xbf, 0x61, 0x7e, 0x38, 0xb2,
+    0xf3, 0x91, 0xab, 0x2d, 0x25, 0x97, 0xf8, 0x00, 0x0f, 0x37, 0x33, 0xa5,
+    0x95, 0x87, 0x92, 0xe2, 0x37, 0xfe, 0x7e, 0xba, 0xe3, 0x0f, 0x0c, 0xe2,
+    0xca, 0x85, 0x60, 0xd9, 0x1b, 0xa3, 0x22, 0x68, 0x77, 0xc8, 0xae, 0x4c,
+    0x4c, 0xbc, 0x20, 0xbf, 0xfe, 0x7e, 0xb5, 0x99, 0xd1, 0x9e, 0x0c, 0x75,
+    0xc5, 0x97, 0xe7, 0x9f, 0xb7, 0x1a, 0xcb, 0xfd, 0xf6, 0xe3, 0xf6, 0xf3,
+    0xac, 0xbf, 0x39, 0x0f, 0xd0, 0xb2, 0xf8, 0x0c, 0x46, 0xac, 0xa7, 0x3c,
+    0x80, 0x13, 0x50, 0xa5, 0xb8, 0xc5, 0xda, 0x0e, 0x36, 0x91, 0x0c, 0x47,
+    0x7b, 0x3a, 0xfc, 0x9f, 0xc7, 0x1c, 0x8e, 0x47, 0x1a, 0x6b, 0x27, 0x71,
+    0xca, 0x74, 0xe8, 0xc4, 0x7b, 0x84, 0x33, 0x47, 0x6d, 0xa7, 0x03, 0xb8,
+    0x7a, 0x59, 0x23, 0xc6, 0x22, 0x08, 0x6a, 0x94, 0xab, 0xee, 0x43, 0x63,
+    0xf2, 0xd0, 0x02, 0xe9, 0xb6, 0xa6, 0x21, 0x4e, 0xeb, 0xe5, 0xd1, 0x3a,
+    0xcb, 0x9f, 0xeb, 0x2f, 0x3f, 0x42, 0xc6, 0x6b, 0x4e, 0x2f, 0x42, 0xd5,
+    0x0f, 0x14, 0x7d, 0x37, 0xf0, 0xc5, 0xf3, 0xfc, 0xe9, 0x65, 0xee, 0xdf,
+    0xb5, 0x97, 0xff, 0x09, 0xde, 0xc8, 0xd6, 0x98, 0x9f, 0xb5, 0x97, 0xfb,
+    0x6d, 0xc8, 0x1f, 0x89, 0x96, 0x56, 0x22, 0x70, 0xe3, 0xc2, 0x24, 0x5d,
+    0xb5, 0xed, 0x0b, 0x2f, 0x1d, 0xfa, 0x59, 0x78, 0x0f, 0xe5, 0x97, 0xfd,
+    0xf6, 0x3f, 0x3d, 0x86, 0x3a, 0xcb, 0xb7, 0xb2, 0xcb, 0xed, 0x6b, 0x04,
+    0x59, 0x7f, 0xd1, 0x23, 0x1f, 0x5a, 0xc1, 0x16, 0x5e, 0xc3, 0x05, 0xed,
+    0x49, 0x84, 0x41, 0x0e, 0x0e, 0xf4, 0x39, 0x31, 0xcb, 0x8c, 0x11, 0x1d,
+    0xb8, 0x2d, 0x3b, 0x49, 0xe3, 0x38, 0xbf, 0xff, 0xef, 0xb7, 0xf9, 0xe6,
+    0x17, 0xff, 0x33, 0x83, 0x03, 0xa9, 0xd6, 0x54, 0x2b, 0x1e, 0x69, 0x50,
+    0x41, 0x33, 0xbf, 0x4e, 0x2c, 0x01, 0xe9, 0x65, 0xff, 0xfe, 0x6f, 0x85,
+    0xe7, 0x17, 0x92, 0xf4, 0x6b, 0x30, 0x8d, 0x59, 0x5a, 0x44, 0x78, 0xac,
+    0xb6, 0xff, 0xff, 0xee, 0xdf, 0x4f, 0xe9, 0x67, 0xf0, 0x7c, 0x73, 0xe6,
+    0xa7, 0x8e, 0x96, 0x5f, 0xd8, 0x37, 0x3e, 0x12, 0xcb, 0xff, 0xec, 0x08,
+    0xaf, 0x09, 0xdb, 0xcf, 0xff, 0x42, 0xca, 0x64, 0x77, 0x69, 0xcf, 0xc5,
+    0x77, 0xed, 0x76, 0xef, 0xda, 0xa2, 0x94, 0x5f, 0xff, 0x3f, 0xcb, 0x27,
+    0xd4, 0x79, 0xbd, 0x9a, 0x59, 0x77, 0x0c, 0x59, 0x7f, 0xef, 0x40, 0x0e,
+    0xf2, 0xe7, 0x0c, 0x59, 0x79, 0xe4, 0x2e, 0x13, 0x0b, 0xc2, 0xf0, 0x1b,
+    0x71, 0x38, 0x41, 0x8b, 0xff, 0x37, 0x6f, 0xa7, 0x93, 0x70, 0x0b, 0x2f,
+    0xda, 0xed, 0xdf, 0xb5, 0x44, 0x9c, 0xba, 0x42, 0xe0, 0xfd, 0x30, 0xfa,
+    0x8e, 0x8f, 0xf7, 0x86, 0x8d, 0xf7, 0xa2, 0x67, 0x59, 0x7d, 0xd9, 0x04,
+    0xd5, 0x97, 0x68, 0x5e, 0x1e, 0x33, 0x91, 0x50, 0xb4, 0x4d, 0xbb, 0x6d,
+    0x44, 0x76, 0x0d, 0x13, 0xd3, 0xf4, 0xe5, 0x3c, 0xca, 0x3c, 0xc8, 0x2d,
+    0x32, 0x36, 0x63, 0x63, 0x2f, 0xee, 0x38, 0xa6, 0x97, 0x4b, 0xb9, 0x19,
+    0xe4, 0xd0, 0xe9, 0xd4, 0x62, 0xc7, 0xb7, 0xc9, 0xbe, 0x9c, 0x4d, 0x79,
+    0x7b, 0x60, 0x8e, 0xb8, 0xa5, 0xaf, 0x72, 0xbb, 0x0e, 0xfc, 0xb4, 0xa0,
+    0xc3, 0x1b, 0x7c, 0xbb, 0xab, 0xf6, 0xbb, 0x77, 0xed, 0x51, 0x0f, 0xaf,
+    0xfc, 0xf2, 0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x44, 0xa6, 0xb0, 0xbc, 0x44,
+    0x21, 0xcd, 0xaf, 0xf0, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x22, 0x75, 0xf9,
+    0xbf, 0xc0, 0x9d, 0x65, 0xf8, 0x27, 0x27, 0x35, 0x65, 0xef, 0x44, 0xcb,
+    0x2e, 0xea, 0x4b, 0x2a, 0x64, 0x42, 0xe8, 0xa3, 0xc5, 0x01, 0x1d, 0xbf,
+    0xc1, 0xe8, 0x41, 0x87, 0xfc, 0x59, 0x7f, 0xfb, 0x69, 0x9a, 0x66, 0xe4,
+    0xe3, 0x14, 0x6c, 0xd9, 0xed, 0xb5, 0x97, 0xed, 0x76, 0xef, 0xda, 0xa2,
+    0x31, 0x5f, 0xb8, 0xdb, 0xe0, 0xeb, 0x2f, 0x75, 0x29, 0xd6, 0x5b, 0xd0,
+    0x79, 0x18, 0x53, 0x7f, 0x4a, 0x01, 0xe6, 0x31, 0x65, 0xff, 0xfc, 0x12,
+    0x73, 0x76, 0x7c, 0xd8, 0x29, 0x67, 0x98, 0xeb, 0x2f, 0xd3, 0x47, 0x52,
+    0x75, 0x97, 0xd0, 0x7e, 0xc0, 0xb2, 0xff, 0xfa, 0x53, 0xed, 0x38, 0xda,
+    0x27, 0xef, 0x5b, 0x36, 0x7b, 0x6d, 0x65, 0x62, 0x2c, 0xfc, 0x52, 0x02,
+    0x3b, 0xf6, 0x9b, 0xb6, 0xde, 0xb2, 0xfc, 0x1f, 0xc7, 0x52, 0x59, 0x7b,
+    0x3a, 0xfa, 0xcb, 0xfd, 0x85, 0xec, 0xfc, 0x0d, 0x65, 0xd9, 0xf8, 0x3c,
+    0xe6, 0x1d, 0xbf, 0xf7, 0xcd, 0x82, 0x96, 0x79, 0x8e, 0xb2, 0xff, 0x8d,
+    0x82, 0x96, 0x79, 0x8e, 0xb2, 0xf8, 0x24, 0xe6, 0xec, 0x3f, 0x6f, 0x9f,
+    0x5f, 0xb4, 0x06, 0xf4, 0x2c, 0xa3, 0x9f, 0x10, 0x4e, 0xef, 0x75, 0x2d,
+    0xa1, 0x65, 0xfd, 0xef, 0xf3, 0x3a, 0x92, 0xca, 0x63, 0xd2, 0x09, 0x1d,
+    0xfb, 0x64, 0xc5, 0x03, 0x59, 0x78, 0x49, 0x6e, 0x2c, 0xb0, 0xb8, 0x5d,
+    0x6e, 0x9c, 0xfa, 0x46, 0xf8, 0xc9, 0xdb, 0xf4, 0xc4, 0xc7, 0x2e, 0xf4,
+    0x62, 0x0e, 0x5e, 0x02, 0xa2, 0x77, 0xe4, 0x60, 0x7f, 0x74, 0xdb, 0x21,
+    0xdd, 0x2a, 0xbf, 0xfc, 0x2c, 0xef, 0x21, 0x79, 0xae, 0xdd, 0xfb, 0x54,
+    0x4f, 0x2b, 0xdb, 0xe3, 0xcb, 0x2d, 0x0b, 0x2a, 0x0d, 0x76, 0x87, 0xaf,
+    0xa0, 0xa5, 0xc5, 0x97, 0x67, 0x16, 0x5e, 0xfc, 0x1d, 0x65, 0xfb, 0xcc,
+    0x59, 0xbd, 0x65, 0x69, 0x13, 0x60, 0x20, 0x15, 0x90, 0xfc, 0x58, 0x41,
+    0xcb, 0xf7, 0x02, 0x3c, 0x3a, 0xcb, 0xa4, 0x22, 0xcb, 0xe0, 0xbe, 0xa4,
+    0xb2, 0xf7, 0xc4, 0x9d, 0x65, 0xe3, 0x87, 0x71, 0x65, 0xf9, 0xc7, 0xe8,
+    0xe2, 0xcb, 0xfd, 0x9e, 0xf4, 0x74, 0xfb, 0x8b, 0x2c, 0x2e, 0x11, 0xfd,
+    0x22, 0x81, 0x8c, 0x61, 0x10, 0x07, 0xc8, 0x83, 0x84, 0xf4, 0x2d, 0x3b,
+    0x63, 0x23, 0x4d, 0xa8, 0x65, 0x28, 0x4e, 0x55, 0x29, 0xe3, 0x6f, 0x43,
+    0xa3, 0xf2, 0xb6, 0xef, 0xda, 0xed, 0xdf, 0xb5, 0x44, 0x40, 0xbf, 0xf3,
+    0xc8, 0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x12, 0xa2, 0xfe, 0xd0, 0x7d, 0x05,
+    0xda, 0xcb, 0xfb, 0xb6, 0xcd, 0xdf, 0x42, 0xca, 0x83, 0xde, 0xc2, 0xeb,
+    0x0b, 0xc4, 0xc0, 0x8e, 0x6c, 0x50, 0xac, 0xbf, 0x6b, 0xb7, 0x7e, 0xd5,
+    0x11, 0x42, 0xfd, 0xa8, 0x3c, 0x74, 0xb2, 0xfd, 0xe6, 0x38, 0x46, 0xb2,
+    0xf1, 0xc3, 0xb8, 0xb2, 0xff, 0x9e, 0x58, 0x32, 0x77, 0x1a, 0xcb, 0xff,
+    0x05, 0xf4, 0xf2, 0xfb, 0x70, 0x2b, 0x2f, 0xfa, 0x3a, 0x2c, 0xff, 0x20,
+    0xeb, 0x28, 0x8f, 0xd8, 0x27, 0xd7, 0xa0, 0x18, 0xb2, 0xc2, 0xf1, 0x38,
+    0xe6, 0x36, 0x72, 0x80, 0x14, 0x11, 0x07, 0x21, 0x58, 0x21, 0x0d, 0xfe,
+    0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x44, 0x64, 0xbf, 0x6b, 0xb7, 0x7e, 0xd5,
+    0x13, 0x2a, 0xfd, 0x2c, 0xfb, 0xf6, 0xb2, 0xfc, 0x2c, 0xef, 0x21, 0x78,
+    0x7b, 0xdd, 0x1b, 0x5d, 0xd0, 0x56, 0x5f, 0xb5, 0xdb, 0xbf, 0x6a, 0x8a,
+    0x91, 0x62, 0x59, 0x74, 0x8e, 0xb2, 0xf8, 0xf9, 0x9f, 0x59, 0x61, 0x16,
+    0x58, 0x5c, 0x91, 0x51, 0x83, 0x1b, 0x86, 0xda, 0x10, 0x71, 0x70, 0x90,
+    0xdf, 0xe1, 0x79, 0xae, 0xdd, 0xfb, 0x54, 0x57, 0x4b, 0xfc, 0x2f, 0x35,
+    0xdb, 0xbf, 0x6a, 0x8b, 0x15, 0x7f, 0xd1, 0xce, 0x41, 0xff, 0x9d, 0xac,
+    0xbe, 0xed, 0xdf, 0xb5, 0x44, 0xf4, 0xbf, 0x1d, 0xe4, 0x2f, 0x3b, 0x3e,
+    0x9d, 0x1c, 0xde, 0x31, 0xfb, 0x59, 0x7f, 0x7a, 0x1b, 0x4c, 0x2b, 0x59,
+    0x7e, 0x86, 0xdb, 0x6d, 0xd5, 0x97, 0xd1, 0xd3, 0xee, 0xac, 0xb8, 0xc1,
+    0x78, 0x89, 0xfe, 0xc7, 0x9c, 0xc0, 0x8b, 0x2f, 0xff, 0x41, 0x0b, 0xcf,
+    0x3e, 0xc3, 0xc6, 0x7d, 0x65, 0xff, 0xff, 0xe1, 0xe1, 0x82, 0xcb, 0x0d,
+    0x35, 0xff, 0xc6, 0x29, 0xa3, 0xbd, 0x67, 0x4b, 0x2f, 0xff, 0xff, 0xdf,
+    0x7d, 0x48, 0x5e, 0x70, 0x2f, 0xd6, 0x14, 0x18, 0x27, 0xda, 0x59, 0xd7,
+    0xd6, 0x5f, 0xb3, 0xfe, 0x63, 0x16, 0x5f, 0xfb, 0x98, 0x4e, 0x6f, 0x9a,
+    0x09, 0x65, 0xff, 0x66, 0x79, 0xbb, 0xf6, 0x0b, 0x23, 0xe4, 0xf9, 0x45,
+    0xff, 0xfa, 0x62, 0x83, 0x8b, 0xce, 0x31, 0x83, 0x77, 0x35, 0x65, 0xdc,
+    0xfa, 0xcb, 0xb3, 0x8b, 0x2f, 0xfd, 0x9a, 0xea, 0x0f, 0xe7, 0xcd, 0x2c,
+    0xbb, 0x80, 0x59, 0x7e, 0x27, 0x39, 0x42, 0xcb, 0xf8, 0x3c, 0xf3, 0xc8,
+    0x5e, 0xd0, 0x8a, 0x77, 0x17, 0x21, 0x63, 0x0f, 0x84, 0x17, 0xbd, 0x3c,
+    0x6e, 0x2c, 0xbb, 0x5f, 0x59, 0x7e, 0xcf, 0xf1, 0x8e, 0xb2, 0xff, 0xf4,
+    0x75, 0xfc, 0x99, 0xb5, 0xfe, 0x07, 0x71, 0x65, 0xe7, 0xe8, 0x5c, 0x22,
+    0xb5, 0xc8, 0x08, 0x5f, 0xe4, 0xf5, 0x8a, 0x9b, 0xb5, 0x0f, 0xfe, 0x46,
+    0x43, 0x52, 0x5c, 0xad, 0x1a, 0x5f, 0x4f, 0xa5, 0x0e, 0xbf, 0xca, 0xbe,
+    0xa1, 0x6b, 0xc6, 0x11, 0x0e, 0x06, 0x9c, 0xf7, 0xbf, 0xfc, 0x31, 0x7f,
+    0xf8, 0x67, 0x12, 0x6e, 0x07, 0xa5, 0x97, 0xa0, 0x22, 0xb5, 0x97, 0xed,
+    0x77, 0xe6, 0xe2, 0xca, 0x63, 0xc9, 0x09, 0x05, 0xdf, 0x85, 0x95, 0xb5,
+    0x1b, 0x7e, 0x88, 0x6f, 0xf8, 0xb3, 0x79, 0x67, 0x00, 0x75, 0x97, 0xe6,
+    0xf1, 0x3c, 0xcb, 0x2f, 0xd2, 0xc1, 0xec, 0xc5, 0x97, 0xe7, 0x69, 0xf5,
+    0x0b, 0x2f, 0xdf, 0x20, 0xb8, 0xa1, 0x65, 0x6d, 0x48, 0xdb, 0x14, 0x9c,
+    0xc1, 0x3f, 0x8a, 0x44, 0x27, 0xb8, 0xe0, 0x59, 0x7e, 0xcf, 0xb0, 0x78,
+    0xb2, 0xed, 0xa8, 0x55, 0x2c, 0xad, 0xa8, 0xf8, 0x05, 0x50, 0xbe, 0xd3,
+    0x27, 0xbf, 0x0a, 0xbd, 0xab, 0x9a, 0xfa, 0xcb, 0xfc, 0x21, 0x66, 0xb5,
+    0x1d, 0xac, 0xad, 0xa8, 0xfa, 0x05, 0x06, 0x97, 0xda, 0x3f, 0xfa, 0x59,
+    0x7e, 0xda, 0xc5, 0x27, 0xe1, 0xab, 0x2e, 0x6e, 0x2c, 0xad, 0xa8, 0xf2,
+    0x7b, 0x33, 0xbf, 0x6d, 0x62, 0x98, 0x91, 0xd6, 0x5e, 0xf4, 0x6e, 0x2c,
+    0xbf, 0xf6, 0xd3, 0xda, 0x05, 0x02, 0x91, 0x40, 0xa0, 0x54, 0x14, 0x6d,
+    0x4b, 0x2f, 0xfc, 0x2a, 0xc5, 0x02, 0xa0, 0xab, 0x15, 0x62, 0x91, 0x4e,
+    0xd7, 0xb5, 0x2c, 0xbf, 0xf0, 0xa9, 0xb4, 0xc5, 0x58, 0xa8, 0x2a, 0xc5,
+    0x22, 0xa8, 0x55, 0xed, 0x4b, 0x2f, 0xfb, 0xc3, 0x90, 0xb9, 0x70, 0x85,
+    0x8a, 0x53, 0x4a, 0xda, 0x1a, 0x85, 0x53, 0x75, 0x6d, 0x4a, 0x83, 0x45,
+    0x26, 0x22, 0xaa, 0x36, 0x9b, 0xf0, 0xa4, 0xee, 0xe4, 0xb2, 0xfe, 0x86,
+    0xff, 0xe0, 0xeb, 0x2e, 0x1e, 0xe2, 0xca, 0xda, 0xcf, 0xc0, 0x55, 0x95,
+    0x74, 0x59, 0x7b, 0xbc, 0xf2, 0x4b, 0xb9, 0xa5, 0x97, 0x8f, 0x1c, 0x59,
+    0x7f, 0xff, 0xbe, 0x26, 0xa3, 0xd1, 0x9d, 0x8d, 0x8a, 0x73, 0xc4, 0x96,
+    0x5d, 0xa8, 0x59, 0x4c, 0x7f, 0x00, 0x62, 0xbf, 0x46, 0xb4, 0xf2, 0x59,
+    0x7f, 0xf7, 0xa3, 0x8e, 0x27, 0xbc, 0xdd, 0x71, 0x65, 0xff, 0x34, 0x16,
+    0x6f, 0xd4, 0x71, 0x65, 0x76, 0x7f, 0xde, 0x46, 0xbd, 0x33, 0x18, 0xb2,
+    0xec, 0x92, 0xcb, 0x01, 0x8d, 0xa3, 0x8f, 0x5f, 0xf9, 0xb6, 0x79, 0x9e,
+    0x5f, 0x69, 0xd6, 0x56, 0x1f, 0x2f, 0x89, 0x6f, 0xdf, 0x00, 0x85, 0x32,
+    0xcb, 0xff, 0x3f, 0x36, 0x73, 0x99, 0x29, 0x42, 0xcb, 0x71, 0x65, 0xfd,
+    0x1d, 0xb4, 0xee, 0x4b, 0x2f, 0xff, 0xc4, 0xe6, 0xb6, 0xa2, 0x52, 0xce,
+    0x00, 0x10, 0xb2, 0xff, 0x3f, 0xc3, 0x98, 0x46, 0xac, 0xa1, 0xa6, 0x9f,
+    0x84, 0x26, 0x95, 0x4c, 0x81, 0xa1, 0x1f, 0x16, 0x81, 0x52, 0xfe, 0xcf,
+    0xc1, 0x44, 0xcb, 0x2f, 0xfc, 0x58, 0x1e, 0xcb, 0x27, 0x12, 0x4b, 0x2f,
+    0xff, 0x39, 0xc5, 0xc6, 0xb4, 0xdb, 0xbd, 0x86, 0x75, 0x97, 0x69, 0x89,
+    0x12, 0x3b, 0xa8, 0x17, 0xcd, 0xe1, 0x0e, 0xb2, 0xff, 0xf3, 0x1b, 0xb3,
+    0x09, 0xfa, 0xe1, 0xa6, 0xba, 0xca, 0xec, 0xfc, 0x48, 0x8e, 0xff, 0xf3,
+    0xf0, 0xb0, 0x02, 0xfc, 0xdd, 0xbe, 0x96, 0x5c, 0x46, 0x2c, 0xbf, 0x70,
+    0x82, 0xf2, 0x59, 0x7f, 0x7e, 0x69, 0x3e, 0x8d, 0x59, 0x76, 0x76, 0xb2,
+    0xf0, 0xf0, 0xd7, 0x3c, 0x7f, 0x98, 0x5f, 0x7a, 0x0f, 0xda, 0xca, 0x84,
+    0x6d, 0xe0, 0xbb, 0xb7, 0x7c, 0xce, 0xe0, 0x81, 0x65, 0xfb, 0xfe, 0x60,
+    0x8a, 0xd6, 0x54, 0x8f, 0x0f, 0x05, 0xef, 0xb3, 0x08, 0xd5, 0x95, 0xc3,
+    0xc2, 0xf9, 0x0d, 0xe1, 0xe7, 0x96, 0x5e, 0x99, 0x8c, 0x59, 0x61, 0xc8,
+    0xdd, 0x30, 0xe5, 0xff, 0xec, 0xec, 0x6c, 0x42, 0x66, 0xb5, 0x1b, 0xd6,
+    0x5f, 0xfd, 0xb2, 0x20, 0xa0, 0xfb, 0x36, 0x7b, 0x6d, 0x65, 0x42, 0x2f,
+    0x80, 0x4c, 0x49, 0x97, 0xfc, 0x2b, 0x94, 0x61, 0x0e, 0x0e, 0xb2, 0xff,
+    0xde, 0xc9, 0xbc, 0xde, 0x8d, 0x42, 0xcb, 0x9f, 0xa5, 0x97, 0x8a, 0x37,
+    0x16, 0x5f, 0xe7, 0xe3, 0xf8, 0x25, 0x3a, 0xca, 0x23, 0xe8, 0xf8, 0xb8,
+    0x47, 0xab, 0x63, 0x26, 0x7a, 0x71, 0x79, 0x42, 0x50, 0x64, 0x3d, 0x42,
+    0x95, 0xa5, 0x05, 0xcc, 0xcd, 0xa8, 0x5e, 0x9e, 0x14, 0x3e, 0x22, 0x28,
+    0xc9, 0xb9, 0x0b, 0xff, 0xc6, 0x34, 0x12, 0xe1, 0x0e, 0xf7, 0x61, 0x4d,
+    0x77, 0x02, 0xb2, 0xda, 0x59, 0x74, 0x69, 0x65, 0xd9, 0xe5, 0x97, 0xed,
+    0x75, 0x2f, 0xc2, 0xcb, 0xd9, 0xbf, 0x16, 0x56, 0x1e, 0x31, 0x14, 0xd6,
+    0xc4, 0x51, 0xf6, 0x23, 0xb6, 0x2c, 0x22, 0xe5, 0xf6, 0x1d, 0xbe, 0xb2,
+    0xa1, 0x31, 0xfd, 0x42, 0xeb, 0xe8, 0x97, 0xbb, 0x0e, 0x96, 0x5d, 0xa0,
+    0x2c, 0xb9, 0xf1, 0x65, 0x74, 0x6b, 0x34, 0x2f, 0x78, 0x9f, 0xeb, 0x2f,
+    0x13, 0x71, 0x65, 0x8c, 0x14, 0x9b, 0x68, 0x1b, 0xba, 0x3c, 0xb2, 0xfb,
+    0x5b, 0xdc, 0xeb, 0x2f, 0xee, 0xce, 0x51, 0xd0, 0x16, 0x5f, 0xc0, 0xe6,
+    0x66, 0x32, 0xcb, 0xff, 0xcd, 0xb2, 0x26, 0x6f, 0xea, 0x3b, 0x0f, 0x6b,
+    0x2f, 0x01, 0xfa, 0x59, 0x7d, 0x9f, 0x83, 0x16, 0x56, 0x1b, 0xf2, 0x1d,
+    0xbf, 0xfc, 0xdb, 0x3d, 0x93, 0x37, 0x5c, 0xf6, 0x76, 0xb2, 0xe2, 0xe2,
+    0xcb, 0xe2, 0x7f, 0xf1, 0x65, 0x48, 0xdb, 0x9c, 0x5a, 0xf4, 0x66, 0x96,
+    0x5f, 0xfe, 0xed, 0xf4, 0xff, 0x6e, 0x41, 0x40, 0x16, 0x5a, 0x5e, 0x3e,
+    0x31, 0x06, 0xeb, 0xa4, 0x56, 0xea, 0x10, 0x95, 0x0a, 0xe7, 0x67, 0x35,
+    0x1a, 0x56, 0x2c, 0x76, 0x56, 0xc2, 0xd3, 0x12, 0x1c, 0xbc, 0x05, 0x7c,
+    0x84, 0x6f, 0xc7, 0xc3, 0x19, 0x95, 0xf0, 0xce, 0x67, 0x16, 0x5f, 0xf0,
+    0x3b, 0xf3, 0x69, 0xb2, 0x4b, 0x2f, 0x30, 0x87, 0x59, 0x73, 0x0d, 0x65,
+    0x39, 0xb3, 0x10, 0x76, 0xf7, 0xa0, 0x96, 0x5e, 0xe6, 0xee, 0xea, 0xcb,
+    0xed, 0x92, 0x01, 0xd6, 0x5e, 0xd6, 0x0d, 0x65, 0xfe, 0x7f, 0xc4, 0xdc,
+    0x63, 0xac, 0xa3, 0x4f, 0x3f, 0xc3, 0x97, 0xfa, 0x24, 0x59, 0xd7, 0xf1,
+    0x65, 0xfb, 0xb6, 0xea, 0x72, 0x59, 0x7f, 0xf3, 0xf7, 0x04, 0x39, 0xa5,
+    0x1a, 0x9d, 0x65, 0x74, 0x7e, 0x1e, 0x2a, 0xb7, 0x16, 0x53, 0x1b, 0x4e,
+    0x11, 0xdf, 0xc5, 0xa7, 0x77, 0xfa, 0xcb, 0xff, 0xef, 0xf0, 0x7a, 0xc6,
+    0x37, 0xc6, 0x39, 0x4e, 0xb2, 0xf8, 0x87, 0x86, 0xac, 0xbd, 0xe0, 0x9d,
+    0x65, 0xdb, 0xc6, 0xb2, 0xb6, 0x92, 0xb5, 0x18, 0x24, 0x93, 0x60, 0xc8,
+    0x70, 0x6f, 0xa2, 0x36, 0x74, 0xd1, 0x1f, 0xa1, 0xac, 0xe4, 0x1c, 0x2b,
+    0xfa, 0x90, 0x48, 0x8c, 0x1d, 0xbf, 0x61, 0x14, 0x4e, 0xb2, 0xdd, 0x2c,
+    0xd1, 0xa6, 0xbc, 0x12, 0x92, 0xcb, 0xf7, 0x26, 0x82, 0x9d, 0x65, 0x61,
+    0xf3, 0x9a, 0x45, 0xf1, 0xcb, 0xdb, 0x25, 0x3a, 0xcb, 0xf1, 0x1a, 0xd9,
+    0xc5, 0x97, 0xef, 0x37, 0x18, 0x6b, 0x2f, 0x34, 0x1d, 0x65, 0xb5, 0x23,
+    0xc2, 0xf1, 0x3d, 0xf3, 0xfd, 0xfb, 0x59, 0x4c, 0x79, 0x46, 0x14, 0x5f,
+    0x04, 0x57, 0xc9, 0xd6, 0x5f, 0xf8, 0xc7, 0x06, 0x77, 0xe7, 0x07, 0x16,
+    0x54, 0x1f, 0x46, 0x14, 0x5f, 0xfb, 0x8f, 0xd4, 0x13, 0x8f, 0x0d, 0x59,
+    0x4c, 0x9c, 0xdf, 0xa1, 0x66, 0x50, 0x8a, 0xf9, 0x05, 0xff, 0xef, 0xfb,
+    0x0e, 0x07, 0xd6, 0x6f, 0xc1, 0xac, 0xba, 0x3c, 0xb2, 0xc3, 0x59, 0x47,
+    0x34, 0xe4, 0x2d, 0x63, 0x56, 0x5e, 0x20, 0x42, 0xcb, 0x88, 0x7b, 0x0d,
+    0x6f, 0x04, 0xae, 0xcf, 0xac, 0xbf, 0xb3, 0x86, 0x39, 0x4e, 0xb2, 0xa1,
+    0x33, 0x1c, 0x72, 0x74, 0xd0, 0x17, 0x10, 0xb5, 0xfe, 0x27, 0x33, 0x63,
+    0xf7, 0x8b, 0x2f, 0x83, 0xc7, 0xed, 0x65, 0xff, 0x82, 0x3f, 0x34, 0x6f,
+    0xd0, 0x9c, 0x59, 0x5a, 0x3e, 0x52, 0x23, 0xbd, 0xc1, 0xc2, 0xcb, 0xfe,
+    0xe7, 0xf3, 0xb0, 0x81, 0xf1, 0x65, 0x1a, 0x7a, 0xae, 0x39, 0x50, 0x89,
+    0x80, 0xbb, 0x5b, 0x8b, 0x2d, 0x8b, 0x29, 0x8d, 0x0e, 0xe8, 0x8d, 0xf7,
+    0x45, 0x06, 0xac, 0xa3, 0x9e, 0x33, 0x91, 0xdf, 0xf6, 0x13, 0xcb, 0x92,
+    0x32, 0x75, 0x97, 0xd2, 0xe3, 0x12, 0xcb, 0xef, 0x77, 0x1d, 0xac, 0xbf,
+    0xf7, 0x64, 0xfe, 0x7e, 0xb3, 0xaf, 0xac, 0xa9, 0x22, 0xff, 0xa3, 0xa6,
+    0x21, 0x09, 0x25, 0xf6, 0xb1, 0xce, 0xb2, 0xa0, 0xf7, 0x9c, 0xf6, 0xfe,
+    0x8e, 0x47, 0xa3, 0x8b, 0x2f, 0xed, 0x4a, 0x3b, 0x6e, 0xd6, 0x56, 0x8f,
+    0x6d, 0xcb, 0x2e, 0xfe, 0x2c, 0xa8, 0x5f, 0x53, 0x9c, 0xbf, 0x23, 0xbb,
+    0x68, 0xdd, 0xf4, 0x8f, 0xe8, 0xcc, 0x9e, 0x11, 0x25, 0x19, 0xf0, 0x5e,
+    0xc4, 0x21, 0xbf, 0xfc, 0x6b, 0xe7, 0x5f, 0xfc, 0x66, 0xf6, 0xed, 0x65,
+    0xfe, 0x2c, 0xe7, 0xdd, 0xc9, 0x65, 0x1a, 0x7f, 0xbb, 0xd3, 0x6f, 0xb7,
+    0x77, 0x63, 0x71, 0x65, 0xff, 0xf7, 0xd8, 0x83, 0x2c, 0xe0, 0xc2, 0xfa,
+    0x92, 0xcb, 0x46, 0xc3, 0xfa, 0x10, 0xae, 0xff, 0xc7, 0x79, 0x67, 0x9b,
+    0x5e, 0x75, 0x97, 0x36, 0xb4, 0x7c, 0xe0, 0x2a, 0xbf, 0xff, 0x8b, 0x0d,
+    0xc2, 0xd9, 0xcf, 0xfb, 0x0e, 0x24, 0x01, 0x65, 0x42, 0x22, 0xb0, 0xb6,
+    0xff, 0x05, 0xf8, 0xd3, 0x31, 0x8b, 0x29, 0x93, 0xe5, 0xf4, 0x72, 0x04,
+    0x43, 0x7b, 0xd0, 0x4b, 0x2e, 0xf9, 0xd6, 0x5b, 0x6d, 0x65, 0x74, 0x6a,
+    0xfc, 0x2f, 0x5d, 0x9f, 0x43, 0xa3, 0x5f, 0x0f, 0x4c, 0x62, 0xcb, 0xfb,
+    0x32, 0x7c, 0xcf, 0xac, 0xb8, 0xdd, 0xeb, 0x2f, 0x60, 0x46, 0xb2, 0xa7,
+    0x44, 0x28, 0xc8, 0xc8, 0xb3, 0x83, 0x57, 0x98, 0xbe, 0xb2, 0xfa, 0x3b,
+    0xcd, 0x2c, 0xbe, 0xf4, 0x6f, 0xc5, 0x97, 0xf3, 0xef, 0x69, 0x98, 0xc5,
+    0x94, 0x74, 0x48, 0x10, 0xdf, 0xc8, 0x84, 0x23, 0xbf, 0xc1, 0xd4, 0xe7,
+    0x8c, 0xfa, 0xcb, 0xfe, 0xe4, 0x1c, 0x7e, 0x82, 0xed, 0x65, 0xcc, 0x58,
+    0x7d, 0xa6, 0x9a, 0x54, 0x23, 0x58, 0x70, 0xaa, 0xbd, 0x20, 0xf1, 0x65,
+    0xfc, 0x37, 0xd0, 0x36, 0xf1, 0x65, 0xef, 0x09, 0xbd, 0x65, 0xff, 0x41,
+    0xcb, 0x3b, 0xd3, 0x01, 0x65, 0x86, 0xb2, 0xf7, 0x39, 0x8b, 0x2c, 0x38,
+    0x35, 0xae, 0x23, 0x52, 0x45, 0x57, 0x08, 0x02, 0xcb, 0x7f, 0x79, 0xdb,
+    0xbc, 0x25, 0x97, 0xfa, 0x58, 0xdc, 0xe0, 0x61, 0x65, 0xfc, 0x3c, 0x29,
+    0x7b, 0x16, 0x5f, 0xff, 0xfe, 0xce, 0x7b, 0x35, 0x04, 0xfd, 0x4b, 0xd1,
+    0xff, 0xc7, 0x5e, 0x83, 0xac, 0xa8, 0x46, 0xab, 0x19, 0x1c, 0xb2, 0xff,
+    0xdf, 0x83, 0xf5, 0xdb, 0x75, 0x9a, 0x59, 0x7e, 0xf6, 0x69, 0xb8, 0xb2,
+    0xf1, 0x34, 0xba, 0x3e, 0x8f, 0xa0, 0xdf, 0xf6, 0x02, 0x09, 0xc7, 0x86,
+    0xac, 0xbf, 0xa3, 0xf8, 0xc1, 0x15, 0xac, 0xa7, 0x3e, 0x70, 0x1b, 0xdf,
+    0xf6, 0x4f, 0x83, 0xc2, 0x8d, 0xc5, 0x95, 0x0a, 0xa3, 0x27, 0x8c, 0x06,
+    0x50, 0x96, 0x04, 0x26, 0x88, 0x86, 0xff, 0xf1, 0x7f, 0x6f, 0x26, 0x93,
+    0xea, 0x71, 0xc2, 0xcb, 0xff, 0xf8, 0xa5, 0x1f, 0x7f, 0x71, 0x9f, 0xe0,
+    0x10, 0xa4, 0xb2, 0xfb, 0xff, 0xcd, 0xc5, 0x97, 0xfd, 0x19, 0x2f, 0x63,
+    0x4b, 0x8b, 0x2b, 0x87, 0xb9, 0xf2, 0x5b, 0xf0, 0xe6, 0xf0, 0x77, 0x16,
+    0x57, 0x47, 0x9e, 0x44, 0x55, 0x89, 0xba, 0xb2, 0x73, 0xc6, 0x0b, 0x7e,
+    0xd1, 0x36, 0x1a, 0xb2, 0xfd, 0x1e, 0x6e, 0xa4, 0xb2, 0xe3, 0xc9, 0x65,
+    0xff, 0x3e, 0x76, 0x3c, 0xd0, 0x19, 0x65, 0x6c, 0x3f, 0x71, 0x94, 0x78,
+    0x5e, 0xff, 0x75, 0xc1, 0x09, 0xa0, 0x6b, 0x2b, 0x47, 0xca, 0x46, 0x35,
+    0x09, 0x92, 0x34, 0x60, 0x77, 0xfa, 0x5c, 0x28, 0x03, 0x9d, 0x65, 0xf9,
+    0xfa, 0xfc, 0xf0, 0xb2, 0xa0, 0xf6, 0xc8, 0xca, 0xfe, 0xd1, 0xb8, 0x1d,
+    0x4e, 0xb2, 0xfe, 0x6d, 0x4e, 0x10, 0x62, 0xcb, 0xf7, 0xe3, 0x0b, 0xb5,
+    0x97, 0xdd, 0x7e, 0x0e, 0xb2, 0x8d, 0x3c, 0xae, 0x89, 0xef, 0xfa, 0x42,
+    0x7d, 0xbc, 0xc5, 0xf5, 0x97, 0xfe, 0xcd, 0xc1, 0xfa, 0x3d, 0x1f, 0xe2,
+    0xcb, 0xff, 0xd1, 0x9d, 0x7f, 0xd1, 0xf2, 0x80, 0x71, 0x65, 0xd0, 0x05,
+    0x97, 0x78, 0xeb, 0x2f, 0xff, 0xf6, 0x83, 0x26, 0x2c, 0x08, 0x36, 0x67,
+    0x08, 0x2f, 0x3a, 0xca, 0xed, 0x11, 0xfc, 0x16, 0xf8, 0xbd, 0x42, 0xa4,
+    0xf9, 0xcc, 0x19, 0xe1, 0xc9, 0x08, 0xe7, 0xe8, 0x21, 0x86, 0xc5, 0xf8,
+    0x6e, 0x41, 0x3a, 0xcb, 0xff, 0x04, 0x19, 0xde, 0x6b, 0x4f, 0x25, 0x97,
+    0xff, 0x05, 0xe4, 0x70, 0xff, 0xd0, 0x11, 0x5a, 0xcb, 0xa0, 0xeb, 0x2b,
+    0x11, 0x8b, 0xa2, 0x72, 0x3f, 0xe2, 0x4d, 0xe9, 0xdb, 0x4b, 0x2f, 0xfb,
+    0x8d, 0xd7, 0xe6, 0x94, 0x74, 0xb2, 0xfd, 0xcf, 0xf3, 0x3e, 0xb2, 0xb8,
+    0x7c, 0x81, 0x3c, 0xbf, 0x0a, 0xda, 0x66, 0x31, 0x65, 0xfc, 0x51, 0x30,
+    0x5c, 0x45, 0x94, 0x13, 0xdb, 0x10, 0xb6, 0xec, 0xf2, 0xcb, 0xc6, 0x18,
+    0x62, 0x4b, 0xff, 0xdf, 0x6f, 0xf3, 0xcd, 0xb6, 0x26, 0xa2, 0x49, 0x05,
+    0x9a, 0x0a, 0x35, 0x3b, 0x76, 0x84, 0x0b, 0xbe, 0xfc, 0x8c, 0x26, 0xd7,
+    0xfc, 0x2b, 0x6d, 0x4e, 0x10, 0x61, 0x2c, 0xba, 0x66, 0x59, 0x7f, 0xff,
+    0x4a, 0x0b, 0x3f, 0xe6, 0xcf, 0xc1, 0xdb, 0x52, 0x59, 0x5a, 0x3e, 0xff,
+    0x8b, 0xdf, 0xc7, 0x10, 0xb3, 0x7e, 0x2c, 0xbf, 0x67, 0x02, 0x5f, 0x59,
+    0x4c, 0x7f, 0x0e, 0x44, 0x45, 0xf7, 0xff, 0xe8, 0xd4, 0xf1, 0xe7, 0x6d,
+    0x69, 0x8f, 0xb5, 0xed, 0x25, 0x95, 0x26, 0xc7, 0xe4, 0x70, 0x9d, 0xc8,
+    0x53, 0xf7, 0x1d, 0x1f, 0x44, 0xec, 0x3b, 0x34, 0x36, 0xb5, 0x2a, 0xf0,
+    0xf1, 0xe8, 0x7a, 0x35, 0x80, 0x42, 0x0c, 0xa5, 0x37, 0xf2, 0x32, 0xdf,
+    0xc7, 0xe4, 0x14, 0xfd, 0xf1, 0x92, 0x6e, 0x96, 0x5f, 0xf7, 0x52, 0xe7,
+    0x30, 0x6f, 0xf5, 0x97, 0xf6, 0xbf, 0x01, 0x15, 0xf1, 0x65, 0xcd, 0xb6,
+    0xb2, 0xfd, 0x9a, 0xf8, 0x7c, 0xb2, 0xb4, 0x78, 0x22, 0x0c, 0xdb, 0x16,
+    0x5b, 0x16, 0x6e, 0x16, 0x17, 0xda, 0x27, 0xde, 0xb2, 0xf6, 0x39, 0x2c,
+    0xb9, 0xcc, 0x59, 0x50, 0x9a, 0xb0, 0xce, 0xb1, 0xcc, 0xd3, 0x36, 0x22,
+    0xd1, 0x19, 0xc6, 0xaf, 0xff, 0xe2, 0xcf, 0xfb, 0x25, 0xa8, 0xf3, 0xb7,
+    0xe3, 0xcb, 0x2f, 0x03, 0x98, 0xb2, 0xff, 0x3c, 0xa6, 0xf3, 0x75, 0xf5,
+    0x97, 0xd2, 0x82, 0x92, 0xcb, 0x3a, 0xcb, 0xd1, 0xee, 0x2c, 0xae, 0x8d,
+    0x63, 0x08, 0x5f, 0xfa, 0x3b, 0xd9, 0x85, 0x01, 0x15, 0xf1, 0x65, 0xff,
+    0xfc, 0xff, 0x6f, 0x39, 0xf6, 0x67, 0x23, 0x35, 0x84, 0xb2, 0xff, 0xee,
+    0x3f, 0x5c, 0xe6, 0x10, 0x36, 0xf1, 0x65, 0xff, 0xe6, 0xef, 0x91, 0xb7,
+    0x9f, 0x94, 0xb3, 0x8b, 0x28, 0x69, 0xea, 0x4c, 0x6b, 0xa4, 0xd3, 0x90,
+    0x92, 0x27, 0xd6, 0x77, 0xa3, 0xdf, 0x6b, 0xd8, 0x4b, 0x2f, 0xff, 0xc5,
+    0x8d, 0xc6, 0xd4, 0x07, 0xf3, 0x46, 0x0d, 0x65, 0x32, 0x36, 0xdd, 0x9c,
+    0x24, 0x37, 0xe1, 0x24, 0xc0, 0xe2, 0xcb, 0xd9, 0x10, 0xb2, 0xfc, 0x27,
+    0x0c, 0xcf, 0x2c, 0xa9, 0xcf, 0x13, 0x83, 0x54, 0x34, 0x48, 0x69, 0xb6,
+    0xfe, 0x2d, 0x82, 0x72, 0x31, 0x65, 0xf6, 0x9c, 0xec, 0xb2, 0xfb, 0xf1,
+    0xd1, 0x8b, 0x2b, 0x17, 0x1e, 0x3b, 0x58, 0xf4, 0xac, 0xb7, 0x85, 0xf0,
+    0x08, 0xc2, 0x5e, 0x61, 0x0d, 0xff, 0xfb, 0xe1, 0x13, 0xe5, 0x00, 0x7f,
+    0x80, 0x42, 0x92, 0xcb, 0xf7, 0xff, 0x84, 0x75, 0x97, 0xff, 0xfa, 0x33,
+    0x98, 0x5a, 0x89, 0x31, 0xf3, 0xa9, 0x4c, 0x15, 0x94, 0xc8, 0x87, 0x22,
+    0x7b, 0x8c, 0xf2, 0xcb, 0xff, 0xd0, 0x5d, 0x89, 0xa7, 0x03, 0x7f, 0xd0,
+    0xb2, 0xf9, 0xe7, 0x72, 0x59, 0x7e, 0xff, 0xb0, 0x0e, 0xb2, 0xba, 0x3c,
+    0x82, 0x21, 0xbf, 0x8f, 0xb3, 0xd8, 0x07, 0x59, 0x7f, 0x19, 0xcc, 0xc2,
+    0x9d, 0x65, 0x41, 0xff, 0xe1, 0x13, 0x17, 0xdf, 0xda, 0xc2, 0x0c, 0x69,
+    0x65, 0xf4, 0x72, 0x37, 0xac, 0xbf, 0xfa, 0x09, 0xff, 0x28, 0x35, 0xcc,
+    0xfa, 0xca, 0x14, 0x22, 0x4f, 0xc5, 0x81, 0x23, 0xbd, 0xb1, 0xfb, 0x59,
+    0x50, 0xac, 0xea, 0x50, 0xde, 0xec, 0x84, 0x03, 0x1c, 0x8c, 0x47, 0xf0,
+    0xbf, 0xdd, 0x34, 0xbf, 0xa4, 0x21, 0xce, 0xdb, 0x8b, 0x2f, 0xb3, 0x91,
+    0x25, 0x97, 0xda, 0xf3, 0x08, 0xb2, 0xfe, 0x97, 0x3e, 0xd1, 0xd2, 0xcb,
+    0xe3, 0x89, 0x04, 0xb2, 0xf9, 0x87, 0x87, 0x59, 0x7c, 0xee, 0x40, 0x59,
+    0x63, 0x20, 0xf0, 0x4d, 0x21, 0xb8, 0x27, 0x59, 0x7f, 0x8c, 0x79, 0xb2,
+    0x51, 0xb8, 0xb2, 0xfd, 0xba, 0x19, 0x9a, 0x65, 0x94, 0xc8, 0xa4, 0xf1,
+    0x4f, 0x05, 0xc2, 0x6f, 0x7f, 0xcc, 0x7f, 0x74, 0xfb, 0x9f, 0xe2, 0xcb,
+    0xfb, 0xb7, 0xf7, 0xb0, 0x6b, 0x2a, 0x0f, 0xac, 0x27, 0xb7, 0xd0, 0x63,
+    0x98, 0xb2, 0xff, 0x43, 0xeb, 0xc6, 0x38, 0xd2, 0x5c, 0x61, 0x89, 0x28,
+    0x67, 0x98, 0x61, 0x9d, 0xef, 0xb6, 0xe2, 0x41, 0x66, 0x8e, 0xfe, 0xeb,
+    0xb6, 0xe7, 0x99, 0x65, 0xe3, 0xc1, 0xd6, 0x5e, 0x90, 0x7e, 0xb2, 0xa0,
+    0xdc, 0x84, 0x72, 0xa1, 0x5d, 0xf0, 0xcc, 0xb0, 0x87, 0xa2, 0x36, 0x2e,
+    0x9a, 0x30, 0x73, 0xc2, 0x9c, 0x04, 0x3c, 0x84, 0x97, 0xcc, 0x76, 0xda,
+    0x2f, 0x88, 0x7e, 0x75, 0x97, 0xb1, 0xf7, 0x16, 0x5e, 0xd6, 0x0d, 0x65,
+    0x61, 0xed, 0xe8, 0x87, 0x78, 0xf5, 0xef, 0x46, 0x96, 0x5f, 0xd8, 0x02,
+    0x8f, 0xf1, 0x65, 0xc6, 0x71, 0x65, 0xb1, 0x65, 0xba, 0xc3, 0x51, 0xf1,
+    0x8b, 0xee, 0xa4, 0x29, 0xe9, 0x65, 0xbc, 0xb2, 0xff, 0xdc, 0x19, 0x40,
+    0xfd, 0x1f, 0xe2, 0xca, 0x83, 0xcf, 0xe0, 0x8d, 0x42, 0x30, 0x30, 0x9c,
+    0x2f, 0x17, 0xff, 0xfd, 0x86, 0x64, 0xbd, 0x8d, 0x2e, 0x75, 0xc6, 0xfb,
+    0x14, 0xeb, 0x2e, 0xf4, 0xcb, 0x2f, 0xf7, 0x99, 0xe5, 0xf6, 0x9d, 0x65,
+    0xff, 0xbe, 0xda, 0x70, 0x6e, 0xff, 0x3c, 0xb2, 0xff, 0x98, 0xc2, 0xcf,
+    0xb0, 0x40, 0xb2, 0xfe, 0xfc, 0x31, 0x09, 0xc5, 0x97, 0xe3, 0xb4, 0xcc,
+    0x62, 0xca, 0x83, 0xd6, 0x62, 0xdb, 0xf3, 0x68, 0x71, 0x3a, 0xcb, 0xfc,
+    0xfa, 0xff, 0x09, 0x8d, 0x59, 0x7f, 0x75, 0xcc, 0xf8, 0x93, 0xac, 0xbf,
+    0xc6, 0x7f, 0x3c, 0x38, 0x3a, 0xca, 0x83, 0xe5, 0x73, 0x1b, 0xff, 0xdc,
+    0xc3, 0x70, 0x3a, 0x71, 0xc7, 0xa1, 0x65, 0xf0, 0x83, 0xf4, 0x2c, 0xa1,
+    0x4a, 0xe2, 0x5c, 0x0e, 0x4a, 0x31, 0x4c, 0x2e, 0xed, 0x9f, 0xa1, 0x86,
+    0x33, 0xdc, 0x41, 0xd4, 0x23, 0xbc, 0x40, 0xe5, 0x05, 0x09, 0x8e, 0x10,
+    0x05, 0x26, 0xf4, 0xcf, 0xa5, 0x97, 0xfd, 0xff, 0x60, 0x03, 0x1d, 0x08,
+    0xb2, 0xff, 0xff, 0xce, 0xdf, 0x8f, 0x16, 0x7f, 0xcc, 0x24, 0xa3, 0x7b,
+    0x10, 0x16, 0x5f, 0xbb, 0xc3, 0xc7, 0x16, 0x5e, 0x09, 0x0d, 0x65, 0xff,
+    0xef, 0x63, 0x4e, 0x78, 0x76, 0x93, 0xf1, 0x65, 0xff, 0xec, 0xf6, 0x17,
+    0xf9, 0x9b, 0xca, 0x3a, 0x59, 0x50, 0x9c, 0xcf, 0x43, 0xbe, 0x3b, 0x76,
+    0xb0, 0x14, 0x7c, 0x70, 0xc4, 0x8b, 0x9b, 0xa5, 0x97, 0xa0, 0xbe, 0xb2,
+    0xe6, 0xd2, 0xca, 0x9c, 0xd8, 0xe0, 0xdd, 0xfe, 0x93, 0x1f, 0xdd, 0x3e,
+    0xe2, 0xcb, 0xe7, 0xd4, 0x49, 0x65, 0xf7, 0x58, 0x19, 0x96, 0x5f, 0xf8,
+    0x31, 0xa3, 0x5c, 0x4f, 0xb4, 0x96, 0x5f, 0xf3, 0xf5, 0xb3, 0xae, 0x61,
+    0x1a, 0xb2, 0xa7, 0x4c, 0x6b, 0xa2, 0x13, 0x9b, 0xf8, 0x84, 0x89, 0x3e,
+    0x81, 0x7d, 0xed, 0xc6, 0x3a, 0xcb, 0xc5, 0x00, 0x59, 0x5b, 0x0f, 0x03,
+    0x84, 0xb7, 0xf7, 0xdc, 0xe7, 0x83, 0xac, 0xb1, 0xf0, 0xf4, 0x7a, 0x24,
+    0xbf, 0xdd, 0x7b, 0x26, 0xf3, 0x69, 0x65, 0x41, 0xee, 0xe1, 0x45, 0xff,
+    0xa3, 0xaf, 0x41, 0xfb, 0xf3, 0x4c, 0xb2, 0xf9, 0xf9, 0xd3, 0xac, 0xbf,
+    0xe9, 0x73, 0xcf, 0xdc, 0x10, 0xd6, 0x5e, 0x07, 0xfc, 0xb2, 0xa4, 0x7f,
+    0x1d, 0x11, 0x00, 0xe6, 0xff, 0xff, 0xda, 0xc1, 0xf1, 0xf7, 0x1b, 0xaf,
+    0x3b, 0x4a, 0x07, 0xe0, 0x9a, 0xb2, 0xc0, 0x59, 0x4e, 0x8b, 0x1e, 0x18,
+    0x08, 0xe1, 0x7e, 0x6e, 0xf1, 0xce, 0xb2, 0xa1, 0x73, 0xbe, 0x4c, 0xb9,
+    0x1b, 0x13, 0x46, 0x8f, 0xa2, 0x07, 0x8d, 0xa8, 0x8c, 0x2f, 0xe2, 0x1f,
+    0x38, 0xc7, 0x59, 0x7e, 0xed, 0xe7, 0xc3, 0x16, 0x5f, 0xa3, 0x43, 0xc2,
+    0x59, 0x58, 0x7f, 0xa4, 0x5b, 0xf2, 0xab, 0xf4, 0x6d, 0xb7, 0x82, 0xb2,
+    0xfc, 0x12, 0x2c, 0x35, 0x65, 0xed, 0x37, 0x96, 0x57, 0x67, 0x86, 0x44,
+    0xf7, 0xdb, 0xbf, 0x63, 0x56, 0x5d, 0x02, 0x2c, 0xae, 0x1b, 0xdd, 0xb2,
+    0x6b, 0xff, 0xa0, 0x11, 0xe3, 0x93, 0x9b, 0xe6, 0x59, 0x61, 0x42, 0xcb,
+    0xfb, 0xd0, 0x46, 0x3f, 0x4b, 0x2f, 0xfc, 0x53, 0x46, 0x14, 0xf9, 0xd7,
+    0xd6, 0x50, 0xcf, 0xb5, 0xcb, 0xaf, 0xfe, 0x61, 0xfa, 0x3b, 0x80, 0x39,
+    0x01, 0x65, 0xf1, 0x8f, 0x07, 0x59, 0x7e, 0x7e, 0x4e, 0xda, 0x59, 0x7d,
+    0xa6, 0x0c, 0xeb, 0x8b, 0xd5, 0x7b, 0xb0, 0xce, 0xb8, 0xbd, 0x57, 0xfe,
+    0xc6, 0xdf, 0x85, 0x83, 0x79, 0x2e, 0x2f, 0x55, 0xf9, 0xcb, 0xa9, 0x0b,
+    0x1a, 0x29, 0xb8, 0x60, 0x61, 0x65, 0xcf, 0xba, 0xb2, 0x86, 0x99, 0xb9,
+    0xe1, 0x9c, 0x4a, 0x17, 0xe3, 0x7e, 0xee, 0x4b, 0x2f, 0x10, 0x67, 0x59,
+    0x4e, 0x78, 0x9f, 0x27, 0xa6, 0x44, 0xd1, 0x3c, 0xd4, 0x2e, 0x2d, 0x0c,
+    0xb7, 0x1b, 0x59, 0x7f, 0x44, 0x87, 0x43, 0x78, 0x41, 0x70, 0x87, 0xe8,
+    0x61, 0x8f, 0xce, 0xff, 0x13, 0x9f, 0xd1, 0x83, 0x59, 0x76, 0xd5, 0xb4,
+    0x2c, 0xbc, 0xd1, 0xa5, 0x94, 0x28, 0x37, 0x9e, 0x21, 0xbf, 0xfb, 0x4c,
+    0x78, 0xdc, 0x2c, 0x3f, 0x50, 0xb2, 0xa4, 0x7d, 0x73, 0x12, 0xde, 0x27,
+    0x1a, 0xcb, 0xdc, 0x9d, 0xd6, 0x53, 0x1b, 0x81, 0x06, 0xef, 0xf7, 0xdb,
+    0x51, 0xde, 0x6f, 0x59, 0x71, 0xd9, 0x65, 0x41, 0xe5, 0xce, 0x6b, 0x7e,
+    0xc3, 0xe9, 0xfa, 0x59, 0x43, 0x45, 0xb1, 0x36, 0x70, 0x8a, 0xfd, 0x2c,
+    0xdf, 0x12, 0x59, 0x7b, 0x35, 0x0b, 0x2f, 0x6f, 0xc1, 0xac, 0xae, 0xd5,
+    0x3d, 0x75, 0x0d, 0x86, 0x8c, 0x47, 0x45, 0xfe, 0x29, 0x08, 0xdd, 0x8c,
+    0x59, 0x7f, 0x98, 0xc8, 0x61, 0xe1, 0xd6, 0x59, 0xb0, 0xf1, 0x26, 0x12,
+    0xbc, 0xfa, 0x9d, 0x65, 0x2c, 0xb1, 0x76, 0x6a, 0x26, 0x1d, 0xbf, 0xbc,
+    0xf3, 0x6a, 0x27, 0x59, 0x7f, 0x37, 0x5c, 0xf6, 0x76, 0xb2, 0xfb, 0xd8,
+    0xd3, 0x2c, 0xbf, 0xa3, 0x7e, 0x7b, 0xd0, 0xb2, 0xfd, 0x9f, 0xe6, 0x4c,
+    0xb3, 0xc6, 0xba, 0xff, 0xff, 0xfb, 0x3a, 0xe3, 0x61, 0x9b, 0x33, 0xa9,
+    0x71, 0xbf, 0xc6, 0xe8, 0x63, 0x0c, 0xeb, 0x2f, 0xfd, 0x1d, 0x96, 0x4d,
+    0xe0, 0xea, 0x65, 0x94, 0xc8, 0xc5, 0x28, 0x42, 0x5f, 0xff, 0x98, 0x87,
+    0xb0, 0x4f, 0xb7, 0x1d, 0x88, 0x32, 0x59, 0x7c, 0xf3, 0xf9, 0x96, 0x56,
+    0x2a, 0x71, 0x62, 0x89, 0x8b, 0xf4, 0x5e, 0x4a, 0x1f, 0x87, 0xee, 0xf2,
+    0x6d, 0xb5, 0x6b, 0xc1, 0xd4, 0x96, 0x5f, 0xf8, 0xee, 0x3d, 0x47, 0xfd,
+    0x83, 0x59, 0x7f, 0x3f, 0xc0, 0x21, 0x49, 0x65, 0xfa, 0x7e, 0xfd, 0x1a,
+    0x59, 0x7f, 0x9d, 0xcc, 0x03, 0xff, 0x8b, 0x2e, 0x13, 0x8b, 0x28, 0x67,
+    0x97, 0xe3, 0x3b, 0xff, 0x0e, 0x3e, 0xf2, 0xcd, 0xee, 0x35, 0x97, 0xe6,
+    0x9e, 0x76, 0xd2, 0xcb, 0xf4, 0x11, 0x04, 0xeb, 0x2d, 0x2f, 0x9e, 0x78,
+    0x85, 0x35, 0xb1, 0x3d, 0x78, 0x1d, 0x9c, 0xfb, 0x0b, 0x8d, 0x75, 0x39,
+    0x13, 0xc2, 0x3a, 0xfc, 0xc2, 0xcc, 0x30, 0xc4, 0x97, 0xfe, 0x35, 0xfa,
+    0xd9, 0xe7, 0x3b, 0x71, 0x65, 0xa2, 0x47, 0xde, 0x72, 0xdb, 0xb3, 0xcb,
+    0x2e, 0xc1, 0xac, 0xbf, 0x7c, 0x02, 0x14, 0x96, 0x51, 0xa6, 0xfd, 0xc5,
+    0xaf, 0xcf, 0xae, 0xe3, 0xeb, 0x2e, 0x6d, 0x2c, 0xaf, 0x1b, 0xe0, 0x94,
+    0x5b, 0xb5, 0x97, 0x38, 0xd6, 0x5f, 0xda, 0x7e, 0x79, 0xe4, 0xb2, 0xdd,
+    0x2c, 0xb9, 0x8c, 0x59, 0x70, 0x80, 0x59, 0x53, 0x1a, 0xf0, 0x0b, 0xde,
+    0x93, 0x8d, 0x65, 0xc6, 0x18, 0xb2, 0xa4, 0x8d, 0xbc, 0x16, 0xec, 0xb5,
+    0x90, 0x78, 0x44, 0x60, 0xe5, 0xc2, 0x01, 0x20, 0xb3, 0xd7, 0xa7, 0x4d,
+    0xbf, 0xf1, 0xa2, 0x5f, 0xec, 0x3b, 0x0e, 0x70, 0xf1, 0x65, 0xff, 0xfc,
+    0x0d, 0xbc, 0xd4, 0x7d, 0xbb, 0x61, 0xcf, 0x05, 0x0b, 0x2f, 0x67, 0x5f,
+    0x59, 0x6c, 0x23, 0xfa, 0xe2, 0xed, 0x79, 0x1a, 0x9c, 0x85, 0x75, 0xff,
+    0x30, 0xf0, 0xed, 0x33, 0x18, 0xb2, 0xff, 0xff, 0xa5, 0xe8, 0x1c, 0x37,
+    0x40, 0xd6, 0x0e, 0x34, 0xdd, 0x01, 0x65, 0xff, 0xff, 0x47, 0x9d, 0xbf,
+    0x12, 0x08, 0xf0, 0x4c, 0xd7, 0xc3, 0xe5, 0x97, 0xff, 0x9c, 0x79, 0x84,
+    0x6f, 0x39, 0x84, 0x05, 0x97, 0xde, 0x0b, 0x9b, 0x09, 0xa7, 0x61, 0xce,
+    0x99, 0xce, 0xcd, 0x78, 0xa3, 0xcb, 0x2f, 0xff, 0xe9, 0x3f, 0x39, 0x19,
+    0x38, 0x64, 0x3d, 0x13, 0x98, 0xb2, 0xd0, 0x34, 0x65, 0x9a, 0xa8, 0xc3,
+    0x75, 0xc5, 0x4e, 0xdf, 0x94, 0x83, 0x7d, 0x2f, 0x37, 0x16, 0x5f, 0xcf,
+    0x3e, 0x61, 0x1a, 0xb2, 0xfe, 0x63, 0xf7, 0x85, 0xda, 0xcb, 0xe7, 0x9f,
+    0x9e, 0x59, 0x5a, 0x3d, 0x1e, 0x17, 0x56, 0xc5, 0xea, 0x59, 0x2a, 0x8d,
+    0x7f, 0xa8, 0xe4, 0x1a, 0x5b, 0x99, 0x16, 0x70, 0x8b, 0xef, 0xd6, 0xda,
+    0x96, 0x5e, 0x77, 0x3a, 0xcb, 0xde, 0x6f, 0xac, 0xb6, 0xf1, 0x49, 0xe6,
+    0xf8, 0x58, 0x41, 0xbb, 0xfe, 0xcf, 0xfa, 0x35, 0xfc, 0xed, 0x65, 0xc6,
+    0xba, 0xcb, 0xec, 0x20, 0xcc, 0xb2, 0xff, 0xfd, 0xc7, 0xff, 0x0b, 0x39,
+    0x1d, 0x03, 0xf9, 0xc5, 0x95, 0xd1, 0xfb, 0xfc, 0x8a, 0xed, 0x4c, 0xb2,
+    0xed, 0x42, 0xca, 0x83, 0x5d, 0x83, 0x15, 0x0c, 0xfa, 0x39, 0x42, 0xa7,
+    0x25, 0x60, 0x34, 0xa5, 0x2f, 0x43, 0x69, 0xe7, 0xb3, 0x01, 0x0c, 0xf2,
+    0x3c, 0xf9, 0xc8, 0x61, 0x1d, 0xb6, 0xa3, 0x7f, 0xff, 0xff, 0xff, 0xb6,
+    0xf0, 0xef, 0x26, 0xe0, 0x30, 0x1e, 0x76, 0x94, 0x0f, 0xc1, 0x36, 0x18,
+    0x9f, 0xf1, 0x27, 0xdf, 0xe7, 0x92, 0xcb, 0xf7, 0x9b, 0x7e, 0x4e, 0xb2,
+    0x99, 0x1c, 0xfc, 0x85, 0xed, 0xff, 0x78, 0x3f, 0xf6, 0x69, 0xb8, 0xb2,
+    0xf7, 0x1e, 0x65, 0x97, 0xfe, 0x1c, 0x14, 0xc1, 0xf3, 0xfa, 0x16, 0x5f,
+    0x1e, 0x3a, 0x92, 0xcb, 0xff, 0x66, 0xf8, 0x19, 0x67, 0xf0, 0x0b, 0x2e,
+    0xc2, 0x59, 0x6c, 0xe8, 0xf4, 0xf7, 0x9f, 0x5f, 0xbd, 0xf8, 0x91, 0xd6,
+    0x5c, 0x20, 0x16, 0x53, 0x23, 0x83, 0x4e, 0xde, 0x2a, 0x01, 0x45, 0xe6,
+    0x21, 0xac, 0xbf, 0xf9, 0x86, 0xff, 0x6e, 0x64, 0xb3, 0xcb, 0x2e, 0x7d,
+    0xd5, 0x97, 0xb3, 0xaf, 0xac, 0xaf, 0x1f, 0xc7, 0xd0, 0xb7, 0x46, 0x6f,
+    0xec, 0xd4, 0x7f, 0x98, 0xb2, 0xff, 0xf9, 0xfa, 0x94, 0x4b, 0x07, 0xc8,
+    0x94, 0x12, 0xca, 0xc4, 0x56, 0x31, 0x91, 0x16, 0x5f, 0xdc, 0x7f, 0x34,
+    0x01, 0x65, 0xf8, 0xbf, 0xcc, 0x25, 0x97, 0xfe, 0x10, 0xa4, 0x59, 0xff,
+    0xe4, 0xeb, 0x29, 0x8f, 0x94, 0x04, 0xd7, 0xed, 0x3e, 0xfd, 0xd7, 0x59,
+    0x52, 0x5c, 0x21, 0x19, 0x3f, 0x47, 0x2c, 0x3b, 0xa8, 0xc7, 0xbc, 0x78,
+    0x51, 0x9f, 0xf0, 0xb7, 0xf0, 0x91, 0xde, 0x43, 0x7e, 0xda, 0x85, 0x1b,
+    0x5e, 0xdf, 0xd6, 0x5f, 0xe9, 0xfe, 0x7f, 0x60, 0x1d, 0x65, 0xf6, 0x13,
+    0x1a, 0xb2, 0xa4, 0x88, 0xf3, 0x9d, 0x6f, 0x34, 0xbb, 0xbd, 0xd5, 0x97,
+    0xb9, 0x2f, 0x2c, 0xa2, 0x37, 0x1f, 0x1b, 0xbf, 0xff, 0xba, 0xe1, 0x3f,
+    0x3d, 0x92, 0xcf, 0x36, 0xbc, 0xeb, 0x2f, 0xb3, 0xa9, 0xf7, 0xac, 0xbe,
+    0xcf, 0xcc, 0x75, 0x97, 0xfb, 0x83, 0x73, 0xc7, 0xfb, 0x59, 0x7f, 0x87,
+    0x84, 0x19, 0x67, 0x16, 0x57, 0x47, 0xcc, 0x46, 0x97, 0xdd, 0x70, 0x20,
+    0x59, 0x71, 0x76, 0xb2, 0xa0, 0xdd, 0xb9, 0x25, 0xfe, 0x13, 0xe5, 0x93,
+    0xb6, 0x96, 0x5f, 0x8b, 0xb3, 0x47, 0xd2, 0xcb, 0xe7, 0xdd, 0xc2, 0x59,
+    0x79, 0xb8, 0xcb, 0x29, 0xcf, 0xa7, 0x85, 0x7f, 0x23, 0xbf, 0xb3, 0xb8,
+    0xf4, 0x1d, 0x65, 0x42, 0xb0, 0x7c, 0x6a, 0x62, 0x0d, 0x2d, 0x1c, 0x99,
+    0xe1, 0x12, 0x05, 0xd2, 0x1f, 0x0c, 0x27, 0x4c, 0x2e, 0xbf, 0xf4, 0x08,
+    0x00, 0xca, 0x4f, 0xe0, 0xac, 0xbd, 0x98, 0x6a, 0xcb, 0xe9, 0x40, 0x38,
+    0xb2, 0x86, 0x6f, 0xb0, 0x72, 0xa7, 0x44, 0xf7, 0x4f, 0xd7, 0xdf, 0x0b,
+    0x92, 0xcb, 0xfe, 0xf3, 0x0d, 0x85, 0x70, 0x4c, 0xb2, 0xff, 0xf9, 0x8d,
+    0xc6, 0x3e, 0xa0, 0x22, 0xb7, 0xf7, 0x16, 0x5f, 0xe7, 0x96, 0x0f, 0x5c,
+    0xe2, 0xcb, 0xe8, 0xc1, 0x06, 0xb2, 0xff, 0xfe, 0x91, 0x46, 0x73, 0x0b,
+    0xfe, 0xc1, 0x87, 0xfc, 0x59, 0x7e, 0xe7, 0xbd, 0x04, 0xb2, 0xfe, 0x6f,
+    0xbf, 0x8c, 0xdc, 0x59, 0x58, 0x7b, 0x06, 0x93, 0xdf, 0xd1, 0x3e, 0xde,
+    0x6a, 0x16, 0x5f, 0xec, 0x9b, 0xd9, 0xc7, 0x25, 0x97, 0xfe, 0x1e, 0x75,
+    0x2e, 0x7f, 0x8e, 0x05, 0x95, 0xa3, 0xf2, 0x09, 0x95, 0xf7, 0x39, 0x86,
+    0x2c, 0xbf, 0xc6, 0x0f, 0xd9, 0xbf, 0x34, 0xb2, 0xff, 0xe6, 0x3e, 0xce,
+    0xfc, 0xde, 0xed, 0xb8, 0xb2, 0xff, 0x64, 0xb0, 0x22, 0xb7, 0x25, 0x97,
+    0xff, 0x44, 0xbd, 0x1d, 0x7e, 0x3c, 0xfb, 0x8b, 0x2a, 0x11, 0xf5, 0xa3,
+    0x6f, 0x24, 0x11, 0xad, 0xff, 0xfe, 0x62, 0xce, 0xbe, 0x6b, 0xff, 0xd1,
+    0xec, 0xde, 0xf2, 0x59, 0x7b, 0x30, 0x96, 0x54, 0xeb, 0x82, 0x63, 0x53,
+    0xec, 0xcf, 0xa2, 0x26, 0x85, 0x8c, 0xc4, 0x5a, 0x85, 0x17, 0x88, 0xbf,
+    0x18, 0xee, 0xf3, 0xbd, 0xd6, 0x2b, 0x8a, 0x16, 0x5f, 0xc3, 0xe7, 0xa0,
+    0xce, 0x2c, 0xbf, 0xe1, 0xb6, 0xa3, 0x78, 0x39, 0x25, 0x97, 0x41, 0xd6,
+    0x54, 0x1e, 0x8f, 0x8e, 0xeb, 0xc8, 0xb6, 0x71, 0x5f, 0xc2, 0x02, 0xff,
+    0xb8, 0xfe, 0x61, 0xf6, 0xd3, 0xac, 0xbf, 0xcf, 0x2c, 0x1f, 0x39, 0x0b,
+    0x2f, 0xef, 0xfa, 0x0f, 0x31, 0x2c, 0xa8, 0x44, 0xd6, 0x1d, 0x00, 0xca,
+    0xb6, 0xb5, 0xed, 0x38, 0x21, 0xc9, 0xc4, 0xd7, 0x8d, 0xa4, 0x30, 0xce,
+    0xb8, 0xbe, 0xb2, 0xf0, 0x75, 0x3a, 0xcb, 0xdd, 0x86, 0x16, 0x54, 0x1e,
+    0x8c, 0x85, 0x98, 0x7a, 0xfb, 0x03, 0xa9, 0xd6, 0x5f, 0xfb, 0x7b, 0x7c,
+    0x01, 0x2e, 0x30, 0xd6, 0x5f, 0xb3, 0x9e, 0x0c, 0xeb, 0x2d, 0xad, 0x88,
+    0x8c, 0xc2, 0x3f, 0x20, 0x5f, 0xff, 0xe7, 0x90, 0x92, 0xf6, 0x04, 0x57,
+    0x84, 0x69, 0x16, 0x4c, 0xb2, 0xa1, 0x13, 0x87, 0x37, 0xbf, 0xed, 0x83,
+    0x27, 0x34, 0xd7, 0x31, 0x65, 0xf9, 0xb5, 0x29, 0xa1, 0x65, 0xff, 0xde,
+    0xc2, 0x73, 0x7c, 0xdf, 0x93, 0x2c, 0xaf, 0x1f, 0x5f, 0x0a, 0x2b, 0x11,
+    0x94, 0xd0, 0xa8, 0xbf, 0xfe, 0x0f, 0x62, 0x74, 0x07, 0xe3, 0xe9, 0xba,
+    0x02, 0xcb, 0xf4, 0x78, 0xb0, 0xd5, 0x94, 0xc7, 0xf7, 0xe5, 0x4b, 0xf4,
+    0x4d, 0xe6, 0xd2, 0xcb, 0xf8, 0x3f, 0xe4, 0x02, 0x75, 0x97, 0xcf, 0xa8,
+    0x92, 0xcb, 0xff, 0xf9, 0x89, 0xd8, 0x81, 0xa8, 0xf3, 0xb7, 0xe3, 0xcb,
+    0x28, 0x68, 0xa6, 0x22, 0xff, 0x90, 0xdf, 0x7f, 0x81, 0x9d, 0x65, 0xff,
+    0xff, 0x75, 0xa8, 0x0f, 0xc2, 0x7d, 0x3b, 0x80, 0xb3, 0x7b, 0x69, 0x65,
+    0x32, 0x23, 0x1c, 0x92, 0xff, 0xd2, 0x10, 0x6f, 0x3e, 0x1d, 0xf8, 0xb2,
+    0xff, 0xa5, 0x1e, 0x8f, 0xf9, 0xce, 0xb2, 0xa0, 0xfe, 0x02, 0x81, 0x7f,
+    0xf8, 0x98, 0x1f, 0xeb, 0xb6, 0xd0, 0x90, 0x35, 0x97, 0xfd, 0xe1, 0x06,
+    0x1f, 0xf0, 0x10, 0xb2, 0xa1, 0x10, 0xee, 0x99, 0x43, 0x56, 0x19, 0xd9,
+    0x0b, 0x43, 0x38, 0xf0, 0xbb, 0x28, 0x4c, 0xfe, 0x15, 0x17, 0xff, 0xc0,
+    0x3e, 0x1f, 0x09, 0xcf, 0x12, 0x13, 0x8b, 0x2f, 0xe7, 0x03, 0xb0, 0xd9,
+    0x65, 0xf3, 0x9f, 0x8e, 0xb2, 0xf4, 0x1e, 0x16, 0x57, 0x48, 0xb6, 0xd2,
+    0x7f, 0x0a, 0xf7, 0x90, 0xdf, 0xb4, 0x1e, 0xfd, 0x0b, 0x2f, 0xed, 0x4d,
+    0x26, 0xff, 0x16, 0x58, 0xa0, 0xf6, 0x30, 0xa6, 0xfb, 0x35, 0x1c, 0x59,
+    0x7f, 0xa6, 0x79, 0x9f, 0xa9, 0x71, 0x65, 0xfc, 0xf3, 0xb4, 0xcc, 0x62,
+    0xcb, 0xff, 0xfc, 0xe6, 0x7f, 0x3d, 0xb0, 0x79, 0x34, 0x9f, 0x53, 0xf8,
+    0x2b, 0x2a, 0x11, 0xd9, 0x84, 0x2e, 0x6c, 0x45, 0xf7, 0xec, 0x29, 0xf0,
+    0xc5, 0x97, 0xe7, 0x3f, 0x98, 0xc5, 0x95, 0x39, 0xe8, 0x0c, 0xa2, 0xff,
+    0xa2, 0x71, 0x25, 0xe0, 0xbc, 0xeb, 0x2f, 0xf3, 0xff, 0x9d, 0xf6, 0xdd,
+    0x2c, 0xbf, 0xe6, 0xef, 0x26, 0x72, 0x9c, 0x52, 0xb2, 0xb1, 0x1a, 0x7a,
+    0x23, 0x73, 0xc2, 0x36, 0xb0, 0xa1, 0x65, 0xfa, 0x35, 0xac, 0xf2, 0xcb,
+    0xcf, 0x2f, 0xac, 0xbf, 0xfe, 0x83, 0x4c, 0xc6, 0xde, 0x63, 0x8e, 0x30,
+    0xeb, 0x2f, 0xe2, 0x73, 0x60, 0xf0, 0xb2, 0x85, 0x28, 0xd6, 0x90, 0xa9,
+    0xc9, 0xc8, 0x70, 0x2a, 0x57, 0xa7, 0x34, 0xd5, 0x97, 0xb6, 0x9e, 0xe0,
+    0x16, 0x5b, 0x71, 0x65, 0xf4, 0x82, 0x31, 0x7b, 0x41, 0xba, 0x34, 0x9a,
+    0xfe, 0x3b, 0xf5, 0xb5, 0x67, 0x96, 0x5e, 0x31, 0xf8, 0xb2, 0xfe, 0x3c,
+    0x61, 0x7f, 0x8b, 0x2f, 0xd1, 0x3e, 0x49, 0x96, 0x5e, 0x10, 0x62, 0xf1,
+    0x14, 0x7e, 0x33, 0xe0, 0xef, 0xcb, 0x2a, 0x64, 0xcd, 0x7d, 0x0e, 0x4b,
+    0xef, 0x7b, 0x3a, 0x59, 0x7f, 0x38, 0xe0, 0xa0, 0x0b, 0x2f, 0x9b, 0x98,
+    0x38, 0x3c, 0xed, 0xb2, 0x3b, 0xde, 0x71, 0xac, 0xbf, 0xe6, 0x83, 0xec,
+    0xc1, 0xb6, 0xf5, 0x95, 0xe3, 0xd7, 0xe0, 0xe5, 0x42, 0xab, 0xa1, 0xc7,
+    0x1f, 0xdb, 0xc3, 0xc2, 0x46, 0xff, 0xfc, 0xdd, 0xc1, 0xf8, 0xfa, 0xc3,
+    0x87, 0xb7, 0x92, 0xcb, 0xfe, 0x7d, 0x3f, 0xdb, 0x4e, 0x05, 0x97, 0x36,
+    0xf5, 0x97, 0xfa, 0x09, 0xfc, 0x12, 0x9d, 0x65, 0xff, 0x98, 0xd8, 0x1b,
+    0x13, 0xe8, 0xd5, 0x97, 0xff, 0xb3, 0xaf, 0xf5, 0xf6, 0x33, 0x06, 0xf2,
+    0x59, 0x58, 0x88, 0xa0, 0x1f, 0x5b, 0xcb, 0x2f, 0xe6, 0xd0, 0x0e, 0xdc,
+    0x59, 0x52, 0x4f, 0x07, 0xb5, 0x6d, 0xc3, 0x73, 0x8c, 0x14, 0x2f, 0x02,
+    0x45, 0xb6, 0x23, 0x78, 0x70, 0x75, 0x97, 0xf0, 0x32, 0x68, 0xeb, 0x8b,
+    0x2f, 0xfd, 0xec, 0x2e, 0xf6, 0x60, 0xdb, 0x7a, 0xcb, 0xff, 0xfc, 0x4e,
+    0x67, 0xb0, 0xee, 0x67, 0xf9, 0x86, 0x0d, 0x8e, 0xb2, 0xf7, 0xb2, 0x65,
+    0x97, 0xfb, 0xf9, 0xac, 0x9a, 0x0d, 0x59, 0x7f, 0xff, 0xf7, 0x3d, 0x1e,
+    0x86, 0xe8, 0x1a, 0xc1, 0xc7, 0xf8, 0xc5, 0xd4, 0x96, 0x56, 0x27, 0x2c,
+    0xc5, 0xf3, 0x21, 0x79, 0x8b, 0xe3, 0xa6, 0x1a, 0x5e, 0x1b, 0x1d, 0x65,
+    0xfe, 0x34, 0xb2, 0x79, 0xc2, 0x4b, 0x2a, 0x15, 0x2d, 0xe4, 0x76, 0x4c,
+    0xb0, 0x11, 0xcb, 0xfb, 0xcf, 0x28, 0xe4, 0x96, 0x5f, 0xf6, 0x79, 0xba,
+    0xe7, 0x83, 0xc5, 0x97, 0x61, 0x76, 0x7c, 0xe0, 0x2d, 0xbf, 0xff, 0x82,
+    0xfb, 0x9b, 0x36, 0xc3, 0x1b, 0x33, 0x84, 0x17, 0x9d, 0x65, 0xff, 0xba,
+    0x94, 0x7f, 0xf0, 0xe7, 0x9d, 0x65, 0xff, 0xec, 0xf3, 0xb9, 0xc9, 0xf4,
+    0xd1, 0xc5, 0x96, 0xc3, 0xa2, 0x1b, 0x7a, 0x05, 0xfa, 0x7d, 0xd8, 0xeb,
+    0x8b, 0x2f, 0xce, 0x01, 0xe1, 0x2c, 0xac, 0x4d, 0xa3, 0xd0, 0xeb, 0x72,
+    0xa2, 0x2d, 0xbf, 0xdd, 0xc4, 0xbf, 0xe7, 0x1a, 0xcb, 0xf3, 0x6d, 0xe6,
+    0x8d, 0x59, 0x7d, 0xbc, 0xb3, 0x8b, 0x2f, 0xe2, 0x73, 0x4b, 0x00, 0xb2,
+    0x98, 0xf3, 0xce, 0x47, 0x73, 0xc2, 0xcb, 0xfa, 0x3f, 0xcd, 0x9f, 0x92,
+    0xcb, 0x8d, 0x92, 0xcb, 0xf7, 0x9b, 0x7b, 0x76, 0xb2, 0xec, 0xf4, 0x8f,
+    0x0b, 0xb1, 0x8a, 0xc4, 0xe1, 0x0e, 0x68, 0xef, 0x5c, 0x21, 0xf8, 0xae,
+    0xdb, 0x95, 0xe3, 0x0c, 0x31, 0x25, 0xff, 0xb4, 0x41, 0x71, 0x32, 0x68,
+    0x3a, 0xc1, 0x66, 0x82, 0xf4, 0xcc, 0x62, 0xcb, 0xde, 0x08, 0x16, 0x5b,
+    0xcc, 0x6e, 0xe6, 0x1e, 0xb7, 0x6b, 0x2a, 0x11, 0x8b, 0x90, 0x8c, 0xd1,
+    0x3d, 0xfe, 0x81, 0xe4, 0xa0, 0xbb, 0x59, 0x50, 0xdc, 0x53, 0x4f, 0x1a,
+    0xac, 0xa1, 0xd9, 0x92, 0xeb, 0x5a, 0x32, 0x2d, 0xc8, 0x4c, 0x4d, 0x18,
+    0x8e, 0xa3, 0x5c, 0x3c, 0x62, 0x1e, 0x96, 0x0e, 0xf2, 0x82, 0x8a, 0x56,
+    0x5f, 0x21, 0x53, 0xf8, 0xe5, 0x43, 0x1e, 0x21, 0x91, 0x9f, 0x08, 0x67,
+    0x7c, 0xda, 0x70, 0x2c, 0xbf, 0xc3, 0xf4, 0x4e, 0x59, 0xd2, 0xcb, 0xc3,
+    0xf4, 0x2c, 0xa3, 0x9f, 0x88, 0x08, 0x78, 0x69, 0x7d, 0xad, 0x67, 0x96,
+    0x5f, 0xde, 0x6d, 0xdd, 0xd0, 0x9a, 0xb2, 0xa0, 0xf5, 0xfb, 0x22, 0xb0,
+    0xad, 0x65, 0xc5, 0xc5, 0x96, 0x65, 0x97, 0xf6, 0xb9, 0xe8, 0x2f, 0xac,
+    0xba, 0x00, 0xb2, 0xdf, 0x83, 0xc3, 0xe1, 0x6d, 0xff, 0xed, 0x4e, 0x27,
+    0xdb, 0xc1, 0x39, 0xde, 0x4b, 0x2c, 0x2b, 0x59, 0x7f, 0xdf, 0x8d, 0x73,
+    0xd0, 0x5f, 0x59, 0x77, 0x21, 0x65, 0xe3, 0x8e, 0x16, 0x5f, 0xe2, 0xfb,
+    0xcd, 0xc8, 0xfa, 0xca, 0x63, 0xcf, 0x71, 0xcb, 0xe6, 0x7c, 0xed, 0x65,
+    0xff, 0xb3, 0x79, 0x67, 0x26, 0x28, 0x1a, 0xcb, 0xee, 0xc7, 0x13, 0xac,
+    0xb8, 0x10, 0xb2, 0xf7, 0x1b, 0x4b, 0x2b, 0x0f, 0x58, 0x04, 0x9f, 0x16,
+    0xbf, 0xd2, 0xc2, 0x61, 0xe1, 0x2c, 0xbb, 0x82, 0xe1, 0x3e, 0x6c, 0x15,
+    0x98, 0xe3, 0xcc, 0xa0, 0x20, 0x22, 0x1e, 0x42, 0x57, 0xe5, 0xd4, 0xea,
+    0xad, 0xbf, 0x28, 0xce, 0xfb, 0xa1, 0xbc, 0xeb, 0x2e, 0xe4, 0x2c, 0xbc,
+    0x71, 0xc2, 0xcb, 0xfc, 0x5f, 0x79, 0xb9, 0x1f, 0x59, 0x4c, 0x79, 0xee,
+    0x39, 0x7c, 0xcf, 0x9d, 0xac, 0xbf, 0xf6, 0x6f, 0x2c, 0xe4, 0xc5, 0x03,
+    0x59, 0x7d, 0xd8, 0xe2, 0x75, 0x97, 0xf4, 0xc0, 0x6d, 0xc7, 0x99, 0x65,
+    0xe6, 0x07, 0x16, 0x5c, 0x08, 0x59, 0x7b, 0x8d, 0xa5, 0x97, 0x64, 0xcb,
+    0x2b, 0x11, 0x77, 0xd9, 0x27, 0x8c, 0x80, 0x39, 0xf1, 0x61, 0x07, 0x2f,
+    0xec, 0x26, 0x1e, 0x12, 0xcb, 0xf6, 0x11, 0x3f, 0xd6, 0x5f, 0xa7, 0xfe,
+    0x61, 0xd6, 0x54, 0x8f, 0xdf, 0xc5, 0x4e, 0x4b, 0x7f, 0x13, 0x8f, 0x0d,
+    0x17, 0x0b, 0xc8, 0xf2, 0x15, 0x18, 0xb6, 0x29, 0xf7, 0x2b, 0x75, 0x8a,
+    0xe6, 0x24, 0xf3, 0x28, 0x08, 0x08, 0x87, 0x90, 0xfa, 0xfc, 0x33, 0xef,
+    0xfe, 0xd4, 0x75, 0xc2, 0x83, 0xe7, 0x5f, 0x59, 0x7f, 0xfe, 0x71, 0xe6,
+    0x11, 0xa2, 0x14, 0x14, 0xed, 0xa5, 0x97, 0x9f, 0x53, 0xae, 0x41, 0x25,
+    0xf4, 0xb3, 0xa9, 0x2e, 0x41, 0x25, 0xee, 0x30, 0xd7, 0x20, 0x92, 0xe3,
+    0x0c, 0x5c, 0x82, 0x4a, 0xed, 0x15, 0x33, 0x15, 0x7c, 0xc0, 0xc2, 0x9b,
+    0x9f, 0xe9, 0x90, 0x48, 0x16, 0x78, 0x17, 0xff, 0xff, 0x0c, 0xa0, 0x7e,
+    0x8f, 0xf2, 0x3f, 0x03, 0x8f, 0xe1, 0xc0, 0x62, 0xcb, 0xfb, 0x3d, 0x98,
+    0x46, 0xac, 0xbc, 0xe4, 0x0d, 0x8c, 0x99, 0xa8, 0x9e, 0x69, 0xd4, 0x36,
+    0xce, 0x8a, 0x51, 0x9e, 0xf0, 0xdf, 0xee, 0x37, 0xdb, 0x78, 0xfe, 0x59,
+    0x6c, 0xdc, 0x45, 0x78, 0x21, 0x17, 0x69, 0x2c, 0xbf, 0xa4, 0x19, 0xfe,
+    0xd3, 0xa4, 0xbe, 0xd0, 0x1b, 0xeb, 0x2f, 0x6f, 0x8e, 0x2c, 0xbe, 0x71,
+    0xfb, 0x16, 0x5e, 0x1b, 0x1d, 0x65, 0xff, 0xbd, 0x1f, 0x62, 0x83, 0xc7,
+    0x16, 0x5b, 0x71, 0x65, 0x42, 0x33, 0x70, 0x88, 0xd1, 0xe7, 0x21, 0xe0,
+    0xe6, 0xe9, 0xe5, 0x4c, 0x9a, 0xaf, 0xa1, 0xfb, 0x7f, 0xd0, 0x52, 0x28,
+    0x03, 0x9d, 0x65, 0xfd, 0xdb, 0x73, 0xf9, 0xe5, 0x97, 0xe6, 0xfe, 0x82,
+    0x75, 0x97, 0xd1, 0xe0, 0xe9, 0x65, 0xef, 0x3f, 0xd6, 0x54, 0xe7, 0xcd,
+    0x31, 0x47, 0x08, 0xae, 0x8f, 0x2c, 0xb4, 0x2c, 0xf9, 0x6d, 0x7f, 0x9a,
+    0x41, 0x7e, 0x79, 0x96, 0x5f, 0xd9, 0xbd, 0xcf, 0x9e, 0x59, 0x69, 0x24,
+    0xbc, 0xfa, 0x9d, 0x25, 0x24, 0xa8, 0x37, 0x3d, 0x88, 0x9c, 0x76, 0xf4,
+    0x03, 0xb4, 0x82, 0xcd, 0x75, 0x1d, 0x18, 0x85, 0x09, 0x5b, 0xc5, 0x2f,
+    0x2c, 0xbd, 0xd4, 0xb8, 0xb2, 0xa1, 0x35, 0x7c, 0x87, 0xb1, 0xc9, 0xdc,
+    0x72, 0xff, 0x3c, 0xf8, 0x53, 0xb6, 0x96, 0x5f, 0xb4, 0x03, 0xb7, 0x16,
+    0x5f, 0xc2, 0x14, 0xb9, 0xe1, 0xac, 0xc3, 0x51, 0x7f, 0x7f, 0x80, 0x77,
+    0xd2, 0xcb, 0xe8, 0xed, 0xb8, 0xb2, 0xf8, 0x2f, 0xa9, 0x2c, 0xb1, 0xd6,
+    0x5a, 0x43, 0x36, 0x73, 0x11, 0x5f, 0xff, 0xff, 0xe0, 0x00, 0x3c, 0x7f,
+    0xfe, 0x59, 0xef, 0x3c, 0xb6, 0xf3, 0x9c, 0x0f, 0x3f, 0xcc, 0x31, 0x65,
+    0x42, 0x67, 0xd3, 0x96, 0xe2, 0xab, 0x94, 0x5f, 0xfd, 0x9d, 0x7f, 0x8c,
+    0x50, 0x07, 0x3a, 0xcb, 0xd2, 0x8e, 0x96, 0x5d, 0x83, 0x59, 0x7d, 0x93,
+    0x31, 0xd6, 0x54, 0xe8, 0x98, 0x99, 0x0f, 0xe3, 0xa6, 0x0b, 0x5f, 0xa2,
+    0x69, 0x40, 0x12, 0x5c, 0x40, 0x59, 0x7f, 0x7d, 0xb4, 0xd3, 0xc2, 0xca,
+    0xc3, 0xc3, 0x10, 0x5a, 0xff, 0xfd, 0xec, 0x69, 0x73, 0x67, 0xfd, 0x83,
+    0x0f, 0xf8, 0xb2, 0xbb, 0x47, 0x2e, 0x9a, 0xfe, 0x45, 0x7f, 0xc0, 0x72,
+    0xfc, 0xd9, 0xac, 0x59, 0x7f, 0xef, 0xfb, 0x06, 0x1f, 0xf2, 0x68, 0x59,
+    0x66, 0x59, 0x7f, 0xd3, 0x86, 0x43, 0xf0, 0x5c, 0x96, 0x5f, 0xcd, 0x07,
+    0x9f, 0x0c, 0x59, 0x7e, 0xc9, 0xcf, 0x87, 0x59, 0x7b, 0x8d, 0xa5, 0x94,
+    0x47, 0x89, 0xf2, 0x8b, 0xf8, 0x9c, 0x00, 0x0f, 0x16, 0x5e, 0x83, 0x8b,
+    0x1a, 0x61, 0x58, 0x21, 0xa3, 0xae, 0x39, 0x7c, 0x86, 0xe6, 0x37, 0x89,
+    0xd3, 0x89, 0x1a, 0x55, 0x62, 0xb6, 0xc6, 0x8c, 0x95, 0xcc, 0x4a, 0x3d,
+    0xfb, 0xfb, 0xde, 0xc9, 0xff, 0xc5, 0x97, 0xb2, 0x70, 0xac, 0xac, 0x3c,
+    0xc2, 0x2f, 0xbf, 0xec, 0xfe, 0xc2, 0xc0, 0x09, 0xd2, 0xca, 0x86, 0xd9,
+    0x72, 0x54, 0xac, 0xf1, 0x98, 0x64, 0x6c, 0xc6, 0x95, 0x74, 0x6c, 0xd0,
+    0x94, 0xd2, 0x3f, 0xa3, 0x76, 0x74, 0x00, 0x2d, 0x94, 0x6f, 0x9c, 0x9c,
+    0x40, 0xfc, 0x24, 0xf6, 0xc8, 0x2f, 0xff, 0xd3, 0xeb, 0x58, 0x37, 0x3f,
+    0x9f, 0xe5, 0x13, 0x2c, 0xbf, 0xff, 0xfc, 0x1d, 0x06, 0x62, 0x70, 0x73,
+    0x98, 0x6e, 0x07, 0x4e, 0x38, 0xf4, 0x2c, 0xbf, 0xfe, 0xcf, 0xc7, 0xf9,
+    0xa8, 0x2f, 0xfb, 0x24, 0xb2, 0xfe, 0x61, 0x23, 0xa8, 0xe9, 0x65, 0xfc,
+    0x18, 0xd6, 0x9a, 0x75, 0x97, 0xf9, 0x85, 0xb7, 0xf5, 0x92, 0x59, 0x7f,
+    0x79, 0xb7, 0x84, 0x12, 0x59, 0x7f, 0xb9, 0x0d, 0xad, 0x64, 0xeb, 0x2f,
+    0xe9, 0x40, 0x3c, 0xc6, 0x2c, 0xbf, 0x9c, 0x7e, 0x82, 0x0a, 0xcb, 0xfe,
+    0x83, 0x96, 0x0d, 0xbd, 0xc5, 0x97, 0xb1, 0x80, 0xb2, 0xfb, 0xb3, 0x74,
+    0x05, 0x97, 0x9d, 0xc9, 0x65, 0xfd, 0x28, 0x9b, 0x18, 0x0b, 0x2c, 0x2c,
+    0x69, 0xee, 0xe1, 0x71, 0xa6, 0x9d, 0x18, 0x4c, 0x66, 0x72, 0xef, 0x16,
+    0x0a, 0xcd, 0xc8, 0x6f, 0xe4, 0xbb, 0xa3, 0x57, 0x04, 0xc5, 0x97, 0xd1,
+    0xb8, 0x38, 0x59, 0x7d, 0xbb, 0xe0, 0x88, 0xb2, 0xfe, 0x08, 0x9c, 0x6c,
+    0x25, 0x97, 0x64, 0xcb, 0x2e, 0x12, 0x65, 0x94, 0xc6, 0xc1, 0xc5, 0xed,
+    0x13, 0x1f, 0xe7, 0x17, 0x6f, 0x18, 0x61, 0x89, 0x2d, 0x09, 0x05, 0x9a,
+    0x0b, 0xa5, 0x3a, 0xca, 0x91, 0xba, 0x39, 0x15, 0xef, 0x40, 0x16, 0x5f,
+    0xc2, 0x8f, 0x40, 0x23, 0x71, 0x65, 0x7c, 0xf4, 0x04, 0x1c, 0xbb, 0xda,
+    0x59, 0x7b, 0xc2, 0x83, 0x16, 0x5f, 0x4d, 0x99, 0xda, 0xca, 0x85, 0xe2,
+    0x29, 0xd5, 0xa4, 0xf0, 0x34, 0xec, 0x94, 0x18, 0x6c, 0x2a, 0x7b, 0x18,
+    0xe8, 0x92, 0x68, 0x51, 0xea, 0x10, 0x4e, 0xe3, 0xf2, 0x3d, 0xe2, 0xe6,
+    0x11, 0x5f, 0x0f, 0x33, 0x4b, 0x2f, 0xff, 0x7e, 0x6c, 0xd6, 0x9e, 0x6c,
+    0xd6, 0x7d, 0x65, 0x61, 0xf6, 0x31, 0x0d, 0xff, 0xe2, 0x96, 0xc9, 0x37,
+    0xe5, 0x1a, 0x8e, 0xd6, 0x5f, 0xa3, 0x5a, 0xcf, 0x2c, 0xac, 0x3f, 0x33,
+    0x53, 0x2f, 0xe9, 0xe6, 0x90, 0xa3, 0x53, 0xac, 0xbf, 0xfc, 0x03, 0xbc,
+    0xb6, 0x40, 0xe7, 0x3c, 0x69, 0x65, 0xf3, 0x41, 0x7d, 0x65, 0xe9, 0xdc,
+    0x96, 0x56, 0x91, 0x13, 0xe4, 0xdf, 0x90, 0x5f, 0xf8, 0xd0, 0xf2, 0x4d,
+    0xa9, 0xc2, 0x05, 0x97, 0x16, 0x2c, 0xbc, 0x27, 0x44, 0xb2, 0xfc, 0x59,
+    0xd0, 0x38, 0xb2, 0xee, 0x8c, 0x59, 0x7d, 0x9b, 0x90, 0x75, 0x95, 0x87,
+    0xca, 0xe5, 0x1c, 0x19, 0xa3, 0x53, 0x07, 0x64, 0x23, 0x8a, 0xfa, 0x10,
+    0x77, 0x98, 0xf0, 0xb2, 0xf3, 0x41, 0xd6, 0x5c, 0xe3, 0x59, 0x5a, 0x36,
+    0x3f, 0x1b, 0xbf, 0x4f, 0xec, 0x03, 0xac, 0xa9, 0xcf, 0x27, 0x44, 0x37,
+    0xde, 0x1e, 0x12, 0xcb, 0xff, 0xe8, 0x13, 0xe5, 0x00, 0x7f, 0x80, 0x42,
+    0x92, 0xca, 0xda, 0xd5, 0xb1, 0x64, 0x2f, 0xda, 0x33, 0x7d, 0x21, 0xbc,
+    0x25, 0x78, 0x47, 0xf2, 0x1b, 0xe1, 0x07, 0xe6, 0x59, 0x7f, 0xe7, 0xff,
+    0x0c, 0xcf, 0x01, 0xfe, 0xb2, 0xfc, 0x0c, 0x1b, 0xc9, 0x65, 0xf6, 0xf0,
+    0xb9, 0x2c, 0xbf, 0xff, 0xf6, 0x7e, 0x3b, 0x2c, 0xc2, 0x89, 0x7f, 0xce,
+    0x72, 0xcd, 0xeb, 0x2a, 0x74, 0xc5, 0x86, 0x47, 0xa3, 0xf2, 0x27, 0x30,
+    0x8e, 0xf0, 0x83, 0x99, 0x65, 0xe9, 0x31, 0x2c, 0xbf, 0xf9, 0x8e, 0x4e,
+    0x6f, 0x3d, 0x05, 0xf5, 0x97, 0xee, 0x3f, 0x9b, 0x8b, 0x2e, 0x12, 0x4b,
+    0x2f, 0xf4, 0x18, 0x58, 0x00, 0xf1, 0x65, 0x1a, 0x79, 0x7a, 0x18, 0xbf,
+    0xff, 0xfd, 0x2e, 0x79, 0xdb, 0xe1, 0xd3, 0xf3, 0x0a, 0x24, 0x3d, 0x37,
+    0x52, 0x59, 0x78, 0x4d, 0xd3, 0x16, 0x5f, 0xff, 0x03, 0x07, 0xfe, 0x37,
+    0xfd, 0x9b, 0xc7, 0x0b, 0x2e, 0x6e, 0x96, 0x54, 0xe8, 0x8a, 0xd1, 0x17,
+    0xd4, 0x6f, 0xe7, 0x6f, 0xcc, 0xc6, 0x2c, 0xbf, 0xfa, 0x76, 0xd4, 0x0f,
+    0xd0, 0x63, 0xfd, 0x65, 0xa3, 0xc7, 0xe6, 0x45, 0xd7, 0xfe, 0x06, 0x69,
+    0x81, 0x80, 0xd1, 0xd6, 0x5f, 0xfe, 0x36, 0x39, 0xa8, 0xf1, 0x67, 0xe0,
+    0xeb, 0x2e, 0x08, 0x8b, 0x2f, 0xf8, 0x32, 0xce, 0x09, 0x38, 0x49, 0x65,
+    0xfe, 0x2c, 0xde, 0xd3, 0x31, 0x8b, 0x2b, 0xc8, 0x88, 0x21, 0x8e, 0x1d,
+    0xdf, 0xff, 0xc1, 0x79, 0xfb, 0x0c, 0xff, 0xcf, 0x16, 0x7f, 0xcc, 0xb2,
+    0xfd, 0x13, 0x10, 0x78, 0xb2, 0xb1, 0x38, 0x56, 0x86, 0x8f, 0x8b, 0xfe,
+    0xbb, 0x73, 0x12, 0xcb, 0xf9, 0xc8, 0x19, 0xf3, 0x56, 0x54, 0x2e, 0xb7,
+    0xce, 0x99, 0x21, 0xf3, 0x46, 0xe6, 0x43, 0xd3, 0x97, 0x88, 0xde, 0x30,
+    0x12, 0x85, 0x27, 0x09, 0xbf, 0x1e, 0x1e, 0xf4, 0x1d, 0xb1, 0x5b, 0xe2,
+    0xfc, 0x6d, 0xac, 0xbd, 0x05, 0xf5, 0x97, 0xd1, 0xa7, 0xf2, 0xca, 0x19,
+    0xbc, 0xde, 0x37, 0x76, 0x4c, 0xb2, 0xfb, 0xc1, 0x3c, 0x2c, 0xa5, 0x94,
+    0xb2, 0xce, 0x72, 0xdb, 0x81, 0x77, 0x04, 0x56, 0xb2, 0xfb, 0xd8, 0x07,
+    0x59, 0x7d, 0xf6, 0xf0, 0x56, 0x5f, 0xd9, 0xae, 0xa5, 0xf8, 0x59, 0x74,
+    0x6e, 0x0a, 0xa3, 0xd0, 0x10, 0x8a, 0xb6, 0xb4, 0xee, 0x99, 0x82, 0x62,
+    0x37, 0x17, 0x23, 0x80, 0x92, 0xef, 0x1b, 0xdd, 0x71, 0xb0, 0xbd, 0xae,
+    0x18, 0xb2, 0xa2, 0x98, 0xc0, 0xb6, 0x88, 0x59, 0x8a, 0x21, 0x51, 0xb4,
+    0x8a, 0xc5, 0x46, 0xd1, 0x55, 0x28, 0xd7, 0x69, 0xc2, 0xdc, 0x55, 0x9d,
+    0xc5, 0x26, 0xee, 0x79, 0xdd, 0x19, 0x4e, 0x01, 0x8e, 0x91, 0x55, 0x95,
+    0xa8, 0x19, 0xb2, 0xa3, 0x3b, 0x9c, 0xdb, 0xea, 0x5d, 0x6b, 0x4e, 0x1b,
+    0xee, 0x46, 0x0f, 0x34, 0xe3, 0xde, 0xa7, 0xd7, 0x8f, 0x3a, 0x97, 0xea,
+    0xca, 0xc9, 0xe7, 0x73, 0x01, 0x38, 0x6c, 0x2b, 0x8c, 0xc4, 0xa7, 0xbe,
+    0x39, 0x5c, 0xac, 0xfe, 0xb8, 0x15, 0x0c, 0xf9, 0x06, 0xf8, 0xd2, 0x4c,
+    0x84, 0x9e, 0xdc, 0xb8, 0x41, 0x27, 0xbf, 0x77, 0x65, 0x42, 0xdf, 0xfe,
+    0x9c, 0xf1, 0xd0, 0xbd, 0xaf, 0x69, 0xfc, 0x9c, 0x0b, 0x29, 0xd5, 0xb1,
+    0x06, 0x58, 0x4d, 0xf3, 0x10, 0x19, 0x65, 0xe7, 0x3f, 0x16, 0x54, 0x8d,
+    0xe6, 0xf2, 0x0b, 0xf1, 0xf1, 0x9c, 0x0b, 0x2f, 0xbb, 0x77, 0xed, 0x51,
+    0x45, 0x2f, 0xff, 0xce, 0x08, 0xef, 0xcd, 0xcf, 0x37, 0xfd, 0x84, 0xb2,
+    0xb4, 0x88, 0x42, 0x30, 0xbe, 0xfe, 0x9b, 0xa5, 0x97, 0xfe, 0x8f, 0xb0,
+    0x22, 0x5f, 0xe6, 0xd4, 0xb2, 0xfd, 0xdc, 0x14, 0x01, 0x65, 0xf7, 0xcd,
+    0x6e, 0xd6, 0x53, 0x9e, 0x5f, 0x09, 0xef, 0xec, 0x00, 0x9a, 0x70, 0x2c,
+    0xbc, 0xf2, 0x17, 0x09, 0xe6, 0x64, 0x2a, 0x98, 0x8b, 0x44, 0x7e, 0x84,
+    0x77, 0xc8, 0x6f, 0xfe, 0x87, 0xd1, 0x05, 0xfa, 0xcf, 0x3a, 0xcb, 0xff,
+    0xe6, 0x98, 0xa3, 0xfc, 0xff, 0x5d, 0xb1, 0x4e, 0xb2, 0xff, 0xfb, 0x3d,
+    0xf6, 0x31, 0xb2, 0x4d, 0xa7, 0x02, 0xca, 0x1a, 0x28, 0x38, 0xa5, 0x61,
+    0x78, 0xad, 0x98, 0xf1, 0xf7, 0xf9, 0xcb, 0x90, 0xe2, 0xbf, 0xc2, 0xf3,
+    0x5d, 0xbb, 0xf6, 0xa8, 0xba, 0x17, 0xff, 0x0b, 0x79, 0x0b, 0xcd, 0x76,
+    0xef, 0xda, 0xa2, 0x4b, 0x5f, 0xb5, 0xdb, 0xbf, 0x6a, 0x8b, 0xc9, 0x73,
+    0xef, 0x59, 0x61, 0x78, 0x79, 0xdb, 0x66, 0xd5, 0x10, 0xda, 0x7f, 0x9e,
+    0x3c, 0xa9, 0x37, 0xe4, 0x28, 0x7b, 0x87, 0x5c, 0xcc, 0x07, 0x43, 0xf4,
+    0xf6, 0xe3, 0xa0, 0x16, 0x32, 0x72, 0xb9, 0x2f, 0x37, 0xea, 0x21, 0x43,
+    0xdf, 0x0a, 0x4b, 0xff, 0xc2, 0xce, 0xf2, 0x17, 0x9a, 0xed, 0xdf, 0xb5,
+    0x44, 0xb2, 0xbe, 0xda, 0xcd, 0xdb, 0xda, 0xd6, 0x58, 0x50, 0xb2, 0xdb,
+    0xab, 0x2d, 0xe5, 0x95, 0xb5, 0x9b, 0xad, 0xa0, 0x54, 0x22, 0x97, 0xf9,
+    0x87, 0xec, 0x62, 0x35, 0x65, 0xf7, 0x9f, 0xe1, 0x59, 0x7d, 0xe8, 0xdc,
+    0x3a, 0xcb, 0xff, 0x67, 0x9a, 0x45, 0x98, 0x11, 0x5a, 0xcb, 0xff, 0x63,
+    0x6f, 0x62, 0x0c, 0xb3, 0x8b, 0x2f, 0xfa, 0x07, 0xb2, 0x3f, 0xac, 0x1a,
+    0xcb, 0xc1, 0xed, 0xd6, 0x54, 0x93, 0x4e, 0x63, 0x2d, 0xc2, 0x23, 0x92,
+    0x92, 0x07, 0xcf, 0x84, 0x3a, 0xbf, 0x87, 0xf0, 0xbc, 0xb8, 0xb2, 0xff,
+    0x81, 0xb1, 0xbf, 0xc8, 0xd0, 0x16, 0x5f, 0xb8, 0xe6, 0xf9, 0x96, 0x5d,
+    0x13, 0xac, 0xbf, 0xf6, 0x1f, 0x8f, 0x21, 0x39, 0x18, 0xb2, 0xb7, 0x0f,
+    0x57, 0xe2, 0xf5, 0x08, 0xdd, 0xc3, 0xb6, 0x7d, 0xbd, 0xe3, 0x1d, 0x65,
+    0xfc, 0x78, 0x23, 0x72, 0x75, 0x97, 0x39, 0xd6, 0x5f, 0xf9, 0xf5, 0x28,
+    0xff, 0xa0, 0x22, 0xb5, 0x95, 0xb4, 0x22, 0x8f, 0x07, 0x7e, 0x5c, 0x11,
+    0x6b, 0xf0, 0x7e, 0xde, 0x85, 0x97, 0xfe, 0xf4, 0x79, 0x8d, 0xff, 0x1c,
+    0x0b, 0x2f, 0xf9, 0xe5, 0xc0, 0xfe, 0x3f, 0xc5, 0x97, 0xf1, 0x7f, 0x50,
+    0xfd, 0xac, 0xb9, 0xf8, 0xb2, 0xff, 0xfc, 0xef, 0x27, 0xf6, 0xcc, 0x9c,
+    0x3f, 0x6f, 0x42, 0xca, 0x9c, 0xfb, 0x26, 0x16, 0xb8, 0x3a, 0x59, 0x7e,
+    0x97, 0x1f, 0x6f, 0x16, 0x5e, 0x77, 0xed, 0x51, 0x19, 0xaf, 0xf4, 0x75,
+    0x28, 0xd1, 0xe4, 0xb2, 0xff, 0xff, 0xb9, 0xff, 0xb7, 0xba, 0x97, 0x08,
+    0x38, 0x69, 0xac, 0xf2, 0x59, 0x6c, 0x02, 0x27, 0x7e, 0x69, 0x7f, 0xff,
+    0xd2, 0xcd, 0x8f, 0xf0, 0xc6, 0xc1, 0x94, 0x6b, 0x4d, 0x87, 0x59, 0x50,
+    0x9c, 0x07, 0x65, 0x5a, 0x86, 0x33, 0x94, 0x5f, 0xcd, 0x07, 0x9f, 0x0c,
+    0x59, 0x71, 0x49, 0x65, 0x8e, 0xb2, 0xfc, 0xda, 0xf3, 0x8b, 0xd1, 0xea,
+    0x9c, 0xb8, 0x41, 0x6b, 0x79, 0x65, 0xd1, 0xa5, 0x96, 0x6e, 0xcd, 0x3e,
+    0xf1, 0x1b, 0xe6, 0xd3, 0xe9, 0x65, 0xdc, 0xdc, 0x59, 0x67, 0x91, 0xbb,
+    0xf9, 0x0d, 0xff, 0xdc, 0x60, 0xf3, 0x08, 0x32, 0xce, 0x2c, 0xba, 0x3a,
+    0x59, 0x79, 0x8b, 0xb5, 0x95, 0xc3, 0x67, 0xf1, 0x7b, 0xff, 0xe1, 0x5b,
+    0x7f, 0x8d, 0xf2, 0x80, 0xbe, 0x8d, 0x59, 0x53, 0xae, 0xb9, 0xc8, 0x9c,
+    0x67, 0xf8, 0x72, 0xd0, 0x99, 0x98, 0x93, 0x51, 0xcb, 0x9e, 0x12, 0xfe,
+    0x75, 0x26, 0x4e, 0x13, 0x7d, 0xd8, 0x24, 0x37, 0xf9, 0xcc, 0xf3, 0x46,
+    0xa1, 0x65, 0xff, 0xff, 0xf9, 0xc7, 0xcf, 0x61, 0xc9, 0xa7, 0xd8, 0x70,
+    0x93, 0x9b, 0xe2, 0xcf, 0xeb, 0x16, 0x56, 0x91, 0x6c, 0x46, 0x57, 0xff,
+    0xfb, 0xcd, 0xff, 0xb7, 0x04, 0x9e, 0x27, 0x2c, 0x00, 0x78, 0xb2, 0xfd,
+    0xf6, 0x3c, 0x4c, 0xb2, 0xfe, 0xc8, 0xd9, 0x1c, 0x3a, 0xca, 0xc3, 0xd6,
+    0xe1, 0x45, 0xfe, 0x27, 0x33, 0xe4, 0xe6, 0xac, 0xa9, 0x1e, 0xa7, 0xc8,
+    0x6f, 0xb5, 0xa7, 0xe2, 0xcb, 0xf7, 0xb0, 0x9c, 0xeb, 0x2f, 0xba, 0xf4,
+    0x71, 0x65, 0xe9, 0x9c, 0x96, 0x5e, 0x8f, 0xf1, 0x65, 0xff, 0xb0, 0xde,
+    0x46, 0x10, 0xfd, 0x0b, 0x2b, 0x87, 0xb2, 0x11, 0xca, 0xd8, 0x98, 0x14,
+    0x88, 0xb0, 0x9a, 0x62, 0x3e, 0x3a, 0xdf, 0xb7, 0x49, 0xcc, 0x1a, 0xcb,
+    0xfd, 0x1a, 0x9f, 0x58, 0x3c, 0x59, 0x7f, 0xf7, 0xdb, 0x4e, 0x0d, 0x9d,
+    0x4a, 0x0e, 0xb2, 0xfc, 0x51, 0x2e, 0x3a, 0xca, 0x84, 0x65, 0xc8, 0xad,
+    0x8c, 0xf7, 0xa3, 0xdf, 0xf7, 0x7e, 0x83, 0xee, 0xe3, 0xcc, 0xb2, 0xde,
+    0x59, 0x7f, 0xff, 0xf7, 0xd8, 0xfa, 0x6c, 0xe8, 0x83, 0xf8, 0xf6, 0xcd,
+    0xed, 0xf9, 0xa1, 0x65, 0x62, 0x21, 0xfe, 0x23, 0x7f, 0xd0, 0x7f, 0x3f,
+    0xdc, 0x80, 0xb2, 0xfc, 0xe4, 0x24, 0x01, 0x65, 0x42, 0x68, 0x99, 0x0c,
+    0x46, 0x22, 0xd1, 0xbd, 0xfd, 0x2e, 0x71, 0xca, 0x4b, 0x2f, 0x4f, 0xce,
+    0x2c, 0xbf, 0x17, 0xf8, 0x1d, 0x2c, 0xa7, 0x3f, 0x32, 0x2d, 0x08, 0xf5,
+    0xce, 0x35, 0x97, 0xe9, 0x39, 0x07, 0xb5, 0x95, 0xd9, 0xbe, 0xe8, 0x5a,
+    0xe7, 0xed, 0x65, 0xd1, 0xb8, 0xb2, 0xa7, 0x36, 0x02, 0xb1, 0x7b, 0xff,
+    0x7d, 0xc8, 0x1b, 0x04, 0xce, 0x8c, 0x59, 0x7d, 0xff, 0xc1, 0xd6, 0x5f,
+    0x4b, 0xed, 0x3a, 0xca, 0xc4, 0x44, 0x1a, 0x86, 0xe4, 0x57, 0x8b, 0x3b,
+    0x59, 0x7f, 0xee, 0xdb, 0xec, 0x79, 0xb8, 0xc4, 0xb2, 0xff, 0xd0, 0xda,
+    0xff, 0xf2, 0x34, 0x05, 0x96, 0xfc, 0x1f, 0xe4, 0xc7, 0xf7, 0xf8, 0xf9,
+    0xa0, 0x10, 0x40, 0xb2, 0xd2, 0x59, 0x58, 0x98, 0x23, 0x42, 0x61, 0xca,
+    0x04, 0x33, 0xbf, 0x02, 0x3f, 0x03, 0x59, 0x50, 0xaa, 0x73, 0x14, 0xda,
+    0x15, 0xcf, 0x19, 0x98, 0x50, 0x6f, 0xff, 0x83, 0xfe, 0x75, 0x28, 0x20,
+    0x73, 0x60, 0x49, 0x65, 0xe8, 0xfc, 0x2c, 0xa1, 0x9f, 0x76, 0xf5, 0x3b,
+    0xe3, 0x87, 0xe1, 0x59, 0x7b, 0xd8, 0x4b, 0x29, 0x8f, 0x8b, 0xc4, 0x81,
+    0x23, 0xbb, 0xd3, 0x2c, 0xbe, 0xc9, 0xb2, 0x65, 0x97, 0xed, 0x07, 0xf9,
+    0x3a, 0xcb, 0xec, 0xd0, 0xe1, 0x65, 0xb9, 0xb0, 0xfb, 0x60, 0x8c, 0x8a,
+    0x6d, 0xe5, 0x95, 0xd1, 0xe3, 0x39, 0xad, 0xf4, 0x4b, 0x09, 0x65, 0x32,
+    0x61, 0xaf, 0x0c, 0xb0, 0x11, 0x5e, 0xcc, 0xed, 0x65, 0xff, 0x7f, 0x99,
+    0xa0, 0x10, 0x40, 0xb2, 0xff, 0xe8, 0xff, 0x3d, 0x0d, 0xfe, 0x44, 0xeb,
+    0x2f, 0xd9, 0xa8, 0x9b, 0x8b, 0x2b, 0x47, 0xd9, 0xe4, 0x4b, 0xef, 0xbf,
+    0xa1, 0x65, 0xf7, 0xfc, 0x1d, 0xb5, 0x97, 0xfb, 0x23, 0x4f, 0x26, 0xf2,
+    0xcb, 0xfc, 0xc6, 0x72, 0x3c, 0xfb, 0x8b, 0x2b, 0x47, 0xcf, 0xf3, 0x1b,
+    0xf7, 0xfd, 0xd6, 0x6e, 0xac, 0xa1, 0xa6, 0x3d, 0xd1, 0x13, 0x10, 0x9e,
+    0x11, 0xbe, 0x22, 0xbf, 0x71, 0xcd, 0xf3, 0x2c, 0xbf, 0xed, 0xc1, 0xf8,
+    0x3c, 0xea, 0x4e, 0xb2, 0xe6, 0xf6, 0x1f, 0x30, 0x4a, 0x2a, 0x15, 0x52,
+    0xe4, 0x78, 0x6f, 0x0b, 0x6b, 0xfc, 0xd2, 0x89, 0x41, 0xe4, 0xb2, 0xf0,
+    0x98, 0x28, 0x59, 0x7f, 0xfa, 0x35, 0x00, 0xf3, 0x46, 0x80, 0x79, 0x2c,
+    0xbf, 0xfc, 0x10, 0x1d, 0x8b, 0x00, 0x58, 0xf3, 0x2c, 0xbf, 0xcd, 0xe6,
+    0x82, 0x98, 0x2b, 0x2f, 0x47, 0x85, 0x2b, 0x2f, 0xf3, 0x6b, 0x30, 0xba,
+    0xfa, 0xca, 0x84, 0x42, 0x31, 0x93, 0x90, 0x5f, 0xf8, 0x23, 0xd6, 0x07,
+    0xd0, 0x7c, 0x59, 0x7f, 0xfd, 0x9b, 0xf3, 0x60, 0x9f, 0x6d, 0x34, 0xee,
+    0x75, 0x97, 0xff, 0xfd, 0x80, 0xdb, 0xcd, 0x85, 0x93, 0x89, 0x2d, 0x9c,
+    0xe3, 0x19, 0xc5, 0x95, 0xe4, 0x62, 0x12, 0xa5, 0x42, 0xab, 0x9c, 0x32,
+    0x62, 0x1d, 0x24, 0xfa, 0x19, 0x9c, 0x2d, 0xfc, 0x60, 0x57, 0xff, 0xc5,
+    0xa8, 0xf3, 0xb7, 0xe3, 0xc5, 0xd3, 0x2c, 0xbf, 0xf7, 0xa3, 0x40, 0xd6,
+    0xa0, 0xfc, 0x59, 0x7e, 0x7e, 0x13, 0x42, 0xcb, 0xff, 0x9b, 0x43, 0xf0,
+    0x75, 0x9d, 0xfb, 0x16, 0x5f, 0x9b, 0x4f, 0xba, 0xcb, 0x2a, 0x47, 0xdd,
+    0xda, 0x2d, 0xfd, 0x3b, 0xce, 0x41, 0xfa, 0xcb, 0xef, 0x85, 0xfe, 0xb2,
+    0xf0, 0x5f, 0xeb, 0x2b, 0x61, 0xbe, 0xf9, 0x15, 0xed, 0xf9, 0xa5, 0x95,
+    0x07, 0x83, 0x84, 0x77, 0x37, 0x16, 0x54, 0x2a, 0x26, 0xc4, 0xd3, 0x4f,
+    0xfa, 0x84, 0x9b, 0x11, 0x94, 0x2b, 0xb6, 0xc8, 0x2f, 0x04, 0x23, 0x59,
+    0x7f, 0x4c, 0xde, 0xd6, 0x1d, 0x65, 0xcc, 0x62, 0xcb, 0xb7, 0x71, 0x65,
+    0x39, 0xef, 0x70, 0xbb, 0xe2, 0xf7, 0xf7, 0x23, 0xfc, 0xf3, 0x2c, 0xbf,
+    0x16, 0x1f, 0x58, 0xb2, 0xfb, 0x5b, 0xf0, 0x6b, 0x2b, 0x0f, 0xdc, 0xe5,
+    0xa1, 0x26, 0xbf, 0x7a, 0x34, 0x79, 0x2c, 0xbc, 0x3c, 0xfa, 0xcb, 0xfd,
+    0x85, 0xb3, 0xd1, 0x9b, 0x8b, 0x2f, 0xfc, 0xdf, 0xe6, 0x0e, 0x62, 0x81,
+    0xac, 0xbe, 0x03, 0x75, 0x25, 0x97, 0xfa, 0x0b, 0xed, 0x39, 0x42, 0xcb,
+    0xff, 0xcd, 0xa6, 0x9e, 0x0b, 0x3d, 0xa0, 0xef, 0x59, 0x52, 0x4d, 0x5c,
+    0x65, 0x07, 0x1c, 0xf1, 0xb0, 0x0f, 0x88, 0x8f, 0xe6, 0x37, 0xff, 0xa0,
+    0xbb, 0x7f, 0xb9, 0xa2, 0x4f, 0x13, 0xac, 0xbf, 0xf3, 0x0c, 0x3f, 0xe3,
+    0xfd, 0xcd, 0x59, 0x7f, 0x61, 0x9d, 0x4b, 0x9b, 0x0d, 0x44, 0x63, 0xa6,
+    0xdf, 0xff, 0xd8, 0x58, 0x6f, 0x9e, 0x6f, 0x39, 0xb9, 0xac, 0xfa, 0xcb,
+    0xff, 0x84, 0x8e, 0x84, 0x22, 0xc6, 0xeb, 0xeb, 0x29, 0x91, 0xd7, 0xe4,
+    0xa7, 0x5b, 0xad, 0xad, 0xd2, 0x00, 0x6d, 0x0d, 0x71, 0x1c, 0x34, 0xec,
+    0xf2, 0x8c, 0x2c, 0x70, 0xd0, 0xc9, 0xdb, 0x43, 0x63, 0x7a, 0xec, 0x8b,
+    0xa8, 0xc3, 0x5a, 0x32, 0x49, 0xa3, 0x18, 0xd4, 0x70, 0x27, 0x85, 0x9f,
+    0xa5, 0x83, 0xbc, 0x64, 0x60, 0x8c, 0xec, 0x56, 0x68, 0x52, 0xb0, 0x79,
+    0x2b, 0xcf, 0xf2, 0xa5, 0x02, 0xe3, 0xbd, 0xef, 0x6e, 0x14, 0xa2, 0x47,
+    0x0b, 0xbb, 0x1e, 0xdd, 0xff, 0x7e, 0x07, 0xad, 0x41, 0xf8, 0xb2, 0xe3,
+    0x7b, 0x59, 0x7f, 0x1e, 0x51, 0x1c, 0x65, 0x97, 0x38, 0x16, 0x54, 0x1e,
+    0x13, 0x96, 0x5f, 0x0d, 0xdf, 0xa5, 0x97, 0xf3, 0x74, 0xdd, 0xc0, 0x8b,
+    0x29, 0xcf, 0x44, 0x88, 0xaf, 0x30, 0x87, 0x59, 0x7f, 0x16, 0x7b, 0xa7,
+    0xdc, 0x59, 0x7b, 0xb7, 0xde, 0xb2, 0xef, 0x8b, 0x84, 0xe4, 0x4e, 0x73,
+    0xe5, 0xb7, 0x71, 0x01, 0x07, 0x07, 0x7e, 0x61, 0x7f, 0xff, 0xf0, 0x7a,
+    0x90, 0xb7, 0x2f, 0xe1, 0xf8, 0x3f, 0x46, 0x86, 0xee, 0x62, 0xcb, 0xff,
+    0xa0, 0xc1, 0x78, 0x50, 0x66, 0xa0, 0xeb, 0x28, 0x5a, 0xe5, 0x56, 0x4b,
+    0x7e, 0x27, 0x1f, 0xba, 0xdf, 0xfe, 0x16, 0x77, 0x90, 0xbc, 0xd7, 0x6e,
+    0xfd, 0xaa, 0x26, 0x95, 0xff, 0xe1, 0x67, 0x79, 0x0b, 0xcd, 0x76, 0xef,
+    0xda, 0xa2, 0x71, 0x5e, 0x01, 0x42, 0xcb, 0xf4, 0x98, 0x80, 0xcb, 0x2f,
+    0xd2, 0xcf, 0xca, 0x4b, 0x2f, 0xf6, 0xf8, 0xf6, 0xc2, 0x89, 0x2c, 0xbf,
+    0xf3, 0xc8, 0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x14, 0x0a, 0xff, 0xf3, 0x41,
+    0xdc, 0x7a, 0x8f, 0xfb, 0x06, 0xb2, 0xfb, 0x85, 0xd4, 0x96, 0x58, 0x5c,
+    0x26, 0xb1, 0x83, 0x7d, 0x13, 0x31, 0x41, 0xcd, 0xbc, 0x9d, 0xf4, 0x8b,
+    0xb6, 0xb1, 0x42, 0xcb, 0xee, 0xdd, 0xfb, 0x54, 0x5c, 0x0b, 0xfc, 0x3f,
+    0x46, 0xde, 0x6a, 0x16, 0x56, 0x8f, 0x94, 0x8c, 0x2e, 0xeb, 0x8b, 0x2f,
+    0x8d, 0xed, 0xc6, 0xb2, 0xe8, 0x11, 0x65, 0xfc, 0x59, 0xfe, 0xdb, 0x8b,
+    0x2e, 0x86, 0x59, 0x7d, 0xe0, 0xbc, 0x96, 0x5f, 0xe2, 0x94, 0x30, 0xf0,
+    0xeb, 0x28, 0x50, 0x9c, 0x76, 0x42, 0x17, 0xa2, 0x16, 0x18, 0xd1, 0x21,
+    0xc5, 0xfc, 0x5b, 0xf1, 0x50, 0x91, 0x5f, 0xa4, 0x2c, 0xd1, 0x49, 0xab,
+    0x28, 0x5a, 0x2e, 0x22, 0x10, 0xf7, 0xfb, 0x6a, 0xda, 0xc5, 0x32, 0x04,
+    0x99, 0x65, 0xfc, 0x78, 0xf8, 0x66, 0x75, 0x97, 0x38, 0x16, 0x5f, 0xa6,
+    0x94, 0x14, 0x96, 0x52, 0xca, 0xc3, 0x66, 0x45, 0x17, 0xf4, 0xb0, 0xd2,
+    0xc0, 0x2c, 0xbc, 0x0c, 0x31, 0x65, 0xf1, 0x46, 0x79, 0x65, 0x41, 0xbd,
+    0x9c, 0x76, 0xe6, 0x16, 0x2a, 0x26, 0xc7, 0x08, 0x5a, 0x2e, 0x24, 0x9f,
+    0x8f, 0x88, 0xd5, 0x7f, 0xe2, 0xcf, 0xf5, 0xdb, 0x73, 0xcc, 0xb2, 0xfd,
+    0xae, 0xdd, 0xfb, 0x54, 0x49, 0x2b, 0xa4, 0x2e, 0x0f, 0xd7, 0x0f, 0xec,
+    0x2f, 0xc9, 0x86, 0x3c, 0x37, 0xaf, 0xd8, 0x60, 0x03, 0xc5, 0x97, 0x18,
+    0x05, 0x97, 0xfe, 0xef, 0xd1, 0xac, 0xf9, 0x41, 0xd6, 0x5f, 0xe7, 0xf9,
+    0x64, 0xee, 0x4b, 0x2f, 0xd1, 0x31, 0x40, 0xd6, 0x5c, 0x69, 0x8b, 0x2f,
+    0xe9, 0x3e, 0xa7, 0x1c, 0x2c, 0xbf, 0xb0, 0x9f, 0xa9, 0x71, 0x65, 0xff,
+    0xf8, 0x24, 0xe6, 0xfc, 0xd8, 0x29, 0x67, 0x98, 0xeb, 0x2f, 0xff, 0xd9,
+    0xdc, 0x7a, 0x0f, 0xdf, 0x9b, 0xf9, 0x87, 0x59, 0x7e, 0x3e, 0xb0, 0x7f,
+    0x59, 0x7f, 0xa3, 0xa1, 0x3e, 0x50, 0x05, 0x95, 0x07, 0xb8, 0x12, 0x8b,
+    0xf6, 0xef, 0xa0, 0x8d, 0x59, 0x61, 0xac, 0xbf, 0xa7, 0x2c, 0xde, 0x18,
+    0x59, 0x53, 0x9e, 0x03, 0x88, 0xdc, 0xe2, 0xe7, 0x55, 0xfe, 0x32, 0x9c,
+    0x18, 0x34, 0xfb, 0xb3, 0x1e, 0x89, 0xe6, 0x19, 0xd1, 0x71, 0xcb, 0x49,
+    0x57, 0x90, 0xb1, 0xf9, 0x0e, 0xdb, 0x5d, 0x4e, 0xed, 0x28, 0x65, 0x6a,
+    0x41, 0xbb, 0x47, 0x99, 0x70, 0x11, 0xda, 0x72, 0x55, 0x8f, 0xe5, 0x4c,
+    0x6f, 0x96, 0x5f, 0x7e, 0xd7, 0xc8, 0x3f, 0x59, 0x7f, 0xe3, 0x5c, 0x5e,
+    0x6b, 0xb7, 0x7e, 0xd5, 0x16, 0xa2, 0xfb, 0x91, 0xfe, 0x2c, 0xbf, 0xf3,
+    0xc8, 0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x12, 0xaa, 0xe6, 0x31, 0x65, 0x2c,
+    0xb0, 0xbc, 0x4c, 0x24, 0xd2, 0x8e, 0x93, 0xce, 0x45, 0xf4, 0xed, 0xd1,
+    0x7b, 0xfb, 0x35, 0xdb, 0xbf, 0x6a, 0x88, 0xa5, 0x7f, 0xe7, 0x73, 0xe6,
+    0x80, 0x41, 0x02, 0xcb, 0xff, 0x47, 0xf9, 0x9a, 0x01, 0x04, 0x0b, 0x2f,
+    0x9b, 0x90, 0xeb, 0x2f, 0xf1, 0x38, 0x39, 0xfc, 0xed, 0x65, 0xc7, 0x17,
+    0xe4, 0x67, 0x11, 0xef, 0x0f, 0xbe, 0x41, 0x42, 0xd3, 0x53, 0x78, 0xc2,
+    0x6f, 0xda, 0xed, 0xdf, 0xb5, 0x44, 0x68, 0xbf, 0x89, 0x87, 0xa6, 0x9d,
+    0x65, 0x85, 0xe1, 0xf1, 0xb1, 0xb5, 0xe1, 0x57, 0xb7, 0xb5, 0xac, 0xbe,
+    0xda, 0xb6, 0x90, 0xab, 0x15, 0x6b, 0x2e, 0x0f, 0x96, 0x5f, 0xf8, 0x78,
+    0x76, 0xd6, 0x72, 0x68, 0x59, 0x7f, 0xbf, 0xf6, 0x7d, 0xf1, 0xf5, 0x97,
+    0xff, 0xf8, 0x3c, 0xf6, 0x0c, 0x41, 0x38, 0xc2, 0x7d, 0xb9, 0x30, 0x8b,
+    0x2a, 0x11, 0x36, 0xe6, 0x97, 0xff, 0xa6, 0x66, 0xf4, 0xd9, 0xf8, 0xfc,
+    0x0d, 0x65, 0xe6, 0x73, 0x12, 0x5f, 0xfa, 0x23, 0x7c, 0x14, 0x4d, 0x13,
+    0x2c, 0xbf, 0x4d, 0xc7, 0xcf, 0xac, 0xbf, 0xda, 0xd4, 0x75, 0xcf, 0x0d,
+    0x65, 0xbd, 0x07, 0xba, 0xc5, 0x17, 0xff, 0xd1, 0xe8, 0x9b, 0x81, 0xf8,
+    0x43, 0x34, 0x6f, 0x59, 0x4c, 0xa9, 0xdb, 0x72, 0x1b, 0x33, 0x10, 0x9d,
+    0x28, 0x87, 0x3f, 0x09, 0xcd, 0xe4, 0xd7, 0xdd, 0xbb, 0xf6, 0xa8, 0xa7,
+    0xd7, 0xff, 0x9b, 0x5e, 0x7f, 0xf1, 0xfa, 0x72, 0x02, 0xcb, 0xbf, 0x0b,
+    0x2b, 0x48, 0x8f, 0xf1, 0x87, 0xd2, 0x6f, 0x8c, 0xee, 0x61, 0x4a, 0xcb,
+    0xff, 0xef, 0x37, 0xf9, 0x9b, 0xfc, 0xdb, 0x79, 0xa3, 0x56, 0x5f, 0xe6,
+    0xfb, 0x7f, 0xc1, 0xfa, 0xcb, 0xe8, 0x3e, 0x9d, 0x65, 0xfe, 0x8f, 0xf9,
+    0xe6, 0xd9, 0x8b, 0x2e, 0x6e, 0x96, 0x54, 0xc7, 0x99, 0xa3, 0x5a, 0xd2,
+    0x30, 0xc8, 0xcf, 0xed, 0xb7, 0xfc, 0xf2, 0x61, 0xfa, 0x25, 0xc5, 0x97,
+    0xe0, 0xff, 0xf1, 0xbd, 0x65, 0xff, 0xd1, 0x34, 0xcc, 0x08, 0x9a, 0x6c,
+    0x02, 0xcb, 0xde, 0x68, 0xd1, 0xf8, 0x91, 0x55, 0xde, 0x0a, 0xca, 0xc3,
+    0xc8, 0x09, 0x8d, 0xfb, 0x3c, 0xc5, 0xf5, 0x97, 0xff, 0x1c, 0x83, 0xe6,
+    0xd6, 0x72, 0x68, 0x59, 0x7f, 0xff, 0xfe, 0x8f, 0xb1, 0x3f, 0x39, 0x9f,
+    0xf3, 0x9f, 0xd8, 0x51, 0x1c, 0x70, 0xef, 0x59, 0x7c, 0xf3, 0x37, 0x96,
+    0x5f, 0xfe, 0xd6, 0x34, 0xdc, 0x0c, 0x74, 0x51, 0xf5, 0x97, 0xed, 0xe1,
+    0xdc, 0x80, 0x2c, 0xa9, 0x27, 0x06, 0xc4, 0xda, 0x44, 0x3c, 0x20, 0x3e,
+    0x44, 0x14, 0xab, 0xee, 0xbe, 0x1d, 0x2c, 0xbf, 0xf7, 0xf4, 0x19, 0xb9,
+    0xdb, 0xcd, 0xc5, 0x95, 0x87, 0xce, 0x12, 0x4b, 0xfc, 0xe5, 0x1f, 0x28,
+    0xfa, 0xcb, 0xff, 0x47, 0xfa, 0xcf, 0xc4, 0xcd, 0xc5, 0x97, 0xfe, 0x98,
+    0x25, 0x3f, 0x3b, 0x79, 0xb8, 0xb2, 0xa1, 0x10, 0x58, 0x7f, 0x73, 0xf1,
+    0x65, 0xf8, 0x33, 0x4c, 0xe6, 0xac, 0xbf, 0xef, 0xc7, 0x4f, 0x36, 0xa3,
+    0x7a, 0xca, 0xdc, 0x3f, 0xde, 0x0b, 0x7c, 0xae, 0xf8, 0x3e, 0x6d, 0x2c,
+    0xb6, 0x2c, 0xb0, 0xbd, 0xad, 0x95, 0x87, 0xb5, 0x15, 0xed, 0x07, 0x51,
+    0x2a, 0x37, 0x23, 0x03, 0x34, 0xc3, 0xb2, 0xa6, 0x8c, 0x60, 0xe5, 0xfe,
+    0x87, 0x8b, 0xc7, 0x48, 0x50, 0xc3, 0xe1, 0x0f, 0xe1, 0x64, 0x18, 0x4f,
+    0x6d, 0x99, 0x6e, 0x91, 0x5f, 0xfe, 0x16, 0x77, 0x90, 0xbc, 0xd7, 0x6e,
+    0xfd, 0xaa, 0x26, 0xa5, 0xfd, 0x9a, 0xed, 0xdf, 0xb5, 0x45, 0x76, 0xbf,
+    0xfd, 0x9b, 0xad, 0xf6, 0x96, 0xc2, 0x8f, 0xf1, 0x65, 0x2c, 0xb8, 0xc1,
+    0x7e, 0x3d, 0x83, 0x13, 0x68, 0x5a, 0x31, 0x5a, 0x12, 0x77, 0x01, 0x96,
+    0x58, 0x6b, 0x2e, 0x83, 0xac, 0xaf, 0x1a, 0x7e, 0x08, 0xdb, 0x6d, 0x65,
+    0x89, 0x65, 0x4e, 0x69, 0x0e, 0x29, 0x74, 0xf0, 0xb2, 0xfb, 0xb7, 0x7e,
+    0xd5, 0x15, 0xf2, 0xf1, 0x86, 0x18, 0x92, 0xc4, 0x90, 0x59, 0xa0, 0xad,
+    0x1f, 0x91, 0xd4, 0x2f, 0xf7, 0xb0, 0xd7, 0x8e, 0xb7, 0x56, 0x5e, 0x94,
+    0x74, 0xb2, 0xfb, 0x3f, 0xe6, 0x59, 0x70, 0x78, 0xb2, 0xec, 0xf2, 0xca,
+    0x19, 0xad, 0x98, 0x5e, 0xe7, 0xde, 0xb2, 0xff, 0x18, 0xff, 0xe4, 0x64,
+    0xeb, 0x2f, 0x72, 0x00, 0xb2, 0xbc, 0x7a, 0x1f, 0x34, 0xbe, 0x27, 0xeb,
+    0x8b, 0x2b, 0x0f, 0x13, 0xe4, 0x57, 0x8c, 0xcd, 0x2c, 0xb7, 0xd6, 0x5f,
+    0xf3, 0x6b, 0x27, 0x69, 0x60, 0xd6, 0x5f, 0xed, 0x03, 0xfc, 0x70, 0x62,
+    0xca, 0x64, 0x4c, 0xe8, 0x75, 0xc4, 0x42, 0x71, 0x7b, 0xc4, 0x05, 0x97,
+    0xdb, 0xbe, 0x08, 0x8b, 0x2f, 0x4d, 0x93, 0x2c, 0xb3, 0x2c, 0xae, 0x8f,
+    0x56, 0x62, 0x73, 0x8f, 0x5b, 0x4b, 0x29, 0x65, 0x31, 0x79, 0xa1, 0x1a,
+    0x59, 0x66, 0x59, 0x69, 0xcd, 0x2e, 0xfc, 0x17, 0x6d, 0xeb, 0x2b, 0xc7,
+    0xea, 0xe7, 0x41, 0x28, 0xbe, 0xc2, 0x89, 0x2c, 0xb0, 0xb1, 0x51, 0x74,
+    0xd6, 0x0f, 0x67, 0x45, 0x91, 0x16, 0x42, 0x27, 0xb2, 0x29, 0x8d, 0xf4,
+    0x3a, 0xe9, 0xc0, 0x22, 0x28, 0x56, 0x72, 0x17, 0x5f, 0x3b, 0x0b, 0x8e,
+    0xdc, 0x30, 0x84, 0x2e, 0xbf, 0xfc, 0x2c, 0xef, 0x21, 0x79, 0xae, 0xdd,
+    0xfb, 0x54, 0x4f, 0x6b, 0x0a, 0xd6, 0x5f, 0xf0, 0xdf, 0xb8, 0xec, 0x24,
+    0x35, 0x97, 0xff, 0xcd, 0x2e, 0x6e, 0x78, 0x3d, 0xe4, 0xfb, 0x07, 0xa5,
+    0x97, 0xd1, 0xba, 0xfd, 0x2c, 0xbc, 0xc4, 0x05, 0x95, 0x3a, 0x34, 0xa4,
+    0x75, 0xe5, 0x8d, 0xe4, 0xb7, 0xff, 0x07, 0x53, 0x69, 0xa7, 0x73, 0xb7,
+    0x16, 0x5f, 0x98, 0x71, 0xae, 0x2c, 0xbf, 0x6b, 0xb7, 0x7e, 0xd5, 0x17,
+    0x0a, 0xf8, 0xe1, 0xff, 0x16, 0x5f, 0xef, 0x34, 0x82, 0x08, 0x99, 0x65,
+    0xfd, 0x0d, 0xad, 0x31, 0x8b, 0x2c, 0x2c, 0x52, 0xa9, 0x3a, 0x21, 0xcf,
+    0x3a, 0x04, 0x91, 0xb0, 0x9c, 0xd3, 0x66, 0x23, 0x39, 0xa5, 0xff, 0xc2,
+    0xde, 0x42, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0x93, 0xd7, 0xfe, 0x69, 0x85,
+    0xc0, 0x63, 0xf0, 0x05, 0x97, 0xf8, 0xd1, 0x73, 0x7a, 0x08, 0xd5, 0x95,
+    0x0d, 0xce, 0xdc, 0xf1, 0xdb, 0xca, 0x11, 0xc6, 0xd2, 0xba, 0xfb, 0x8c,
+    0xc6, 0x68, 0xc8, 0x75, 0x3a, 0xbd, 0xe8, 0xc0, 0x39, 0x2a, 0xab, 0x7c,
+    0x20, 0xcc, 0x56, 0x11, 0x02, 0xff, 0x0b, 0xcd, 0x76, 0xef, 0xda, 0xa2,
+    0x2a, 0x5f, 0xb5, 0xdb, 0xbf, 0x6a, 0x8a, 0x65, 0x7f, 0x37, 0xb1, 0xfa,
+    0x02, 0xcb, 0x0b, 0xc3, 0xe3, 0xdb, 0x36, 0xbf, 0xfc, 0x2c, 0xef, 0x21,
+    0x79, 0xae, 0xdd, 0xfb, 0x54, 0x4c, 0xeb, 0xff, 0xc2, 0xce, 0xf2, 0x17,
+    0x9a, 0xed, 0xdf, 0xb5, 0x45, 0x1a, 0xa9, 0xd3, 0x8a, 0x1c, 0x29, 0x8d,
+    0x2c, 0xfa, 0xe5, 0xff, 0x9e, 0x42, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0x8e,
+    0x97, 0xf1, 0x67, 0xf9, 0x07, 0x59, 0x7a, 0x3f, 0xc5, 0x97, 0xb5, 0x38,
+    0xbe, 0x1e, 0x40, 0x85, 0x97, 0xff, 0xfb, 0x52, 0x17, 0x84, 0x1f, 0x84,
+    0xdf, 0xf5, 0xdb, 0x6b, 0x8b, 0x28, 0x5a, 0x66, 0xb1, 0x09, 0x66, 0x38,
+    0xb8, 0x3e, 0x59, 0x7e, 0x14, 0x0a, 0x75, 0xce, 0x2c, 0xbe, 0xef, 0xb0,
+    0xf6, 0xb2, 0xfb, 0x81, 0x3b, 0x2c, 0xb8, 0xcf, 0x2c, 0xa6, 0x37, 0x46,
+    0x11, 0x5f, 0xb0, 0x87, 0x93, 0xac, 0xbf, 0xe6, 0xd7, 0x0b, 0x07, 0xe8,
+    0x59, 0x7f, 0xa2, 0x3b, 0xcd, 0x6b, 0x16, 0x53, 0x22, 0x43, 0xc4, 0xe4,
+    0x6f, 0x7e, 0xcd, 0x76, 0x13, 0x56, 0x5f, 0xf7, 0x70, 0x7c, 0x63, 0xc6,
+    0xe2, 0xcb, 0xe6, 0xd3, 0xb2, 0xcb, 0xff, 0x16, 0x1a, 0xf3, 0x73, 0xd0,
+    0x35, 0x97, 0xa6, 0x7f, 0xac, 0xbe, 0xed, 0xdf, 0xb5, 0x45, 0x34, 0xbf,
+    0x67, 0x46, 0x3f, 0x96, 0x5f, 0xfd, 0xcc, 0x21, 0xc6, 0xc1, 0x53, 0x78,
+    0x19, 0x65, 0x0d, 0x38, 0x6c, 0x2a, 0x34, 0xed, 0x88, 0x26, 0x3f, 0xd0,
+    0xe9, 0x18, 0x70, 0xa6, 0xfb, 0x4e, 0x36, 0x59, 0x7f, 0xfb, 0xb7, 0xd7,
+    0x3c, 0xed, 0xce, 0x67, 0x16, 0x5f, 0xff, 0xf6, 0x17, 0xf8, 0xdd, 0xe1,
+    0x73, 0xbf, 0x37, 0xbb, 0x12, 0x75, 0x97, 0xfd, 0xc7, 0xeb, 0x26, 0x8f,
+    0x71, 0x65, 0x9b, 0xc8, 0xee, 0x24, 0xaf, 0xb5, 0x5f, 0xed, 0x4f, 0xcd,
+    0x6a, 0x0c, 0x59, 0x7f, 0x64, 0xf9, 0xde, 0x0d, 0x65, 0x79, 0x13, 0x0e,
+    0x68, 0x46, 0xd7, 0xfe, 0xf3, 0x14, 0xfc, 0x0c, 0x6a, 0x65, 0x97, 0xff,
+    0xec, 0x9e, 0x38, 0xda, 0xcd, 0x98, 0xc5, 0x07, 0x59, 0x52, 0x44, 0xa7,
+    0xd0, 0x2f, 0x48, 0xf2, 0x59, 0x7d, 0xfe, 0x38, 0x16, 0x5e, 0x07, 0xd9,
+    0x65, 0xfe, 0xe7, 0x6d, 0xad, 0x34, 0xeb, 0x2a, 0x0f, 0xcd, 0xc8, 0xb8,
+    0x39, 0x7f, 0xff, 0x4e, 0x1d, 0x4d, 0xc9, 0xe2, 0x6e, 0x7b, 0x06, 0xdb,
+    0xd6, 0x5f, 0xff, 0xef, 0x39, 0xa5, 0x92, 0xf4, 0x4b, 0x3c, 0x58, 0xf3,
+    0xac, 0xbf, 0xec, 0xd3, 0xc3, 0x14, 0x1d, 0x65, 0xff, 0xff, 0xf4, 0x75,
+    0xdf, 0xb3, 0x67, 0xb3, 0xbf, 0x37, 0xb0, 0x9c, 0xdc, 0xdf, 0x1d, 0x2c,
+    0xbf, 0x4f, 0xb3, 0xc0, 0xde, 0xb2, 0xa7, 0x4e, 0x9c, 0x6c, 0x5c, 0x5f,
+    0xde, 0x6a, 0x24, 0x20, 0xef, 0xfb, 0x7f, 0x7e, 0x60, 0x79, 0x8e, 0xb2,
+    0xff, 0x4b, 0x64, 0x11, 0xbe, 0x65, 0x95, 0x88, 0xc5, 0x65, 0x47, 0x3c,
+    0xbb, 0x41, 0x59, 0x7d, 0x9e, 0x13, 0x4b, 0x28, 0xe6, 0xe8, 0x85, 0xee,
+    0x3e, 0xda, 0xcb, 0xf9, 0xcb, 0xbd, 0x93, 0xf1, 0x65, 0x00, 0xf2, 0xc2,
+    0x35, 0x7f, 0x41, 0x7f, 0x6f, 0x3e, 0xb2, 0xff, 0xd1, 0xe8, 0x3c, 0x17,
+    0xfc, 0xcb, 0x2f, 0xf3, 0x81, 0xff, 0xfc, 0xf2, 0xca, 0x92, 0x27, 0x7b,
+    0x2f, 0x30, 0xf2, 0xfb, 0xcd, 0x9a, 0x59, 0x77, 0x82, 0xb2, 0xd2, 0x59,
+    0x58, 0x7f, 0x6c, 0x64, 0x02, 0x1d, 0xe2, 0xf7, 0xbc, 0x60, 0x16, 0x5b,
+    0xeb, 0x29, 0x8d, 0x7f, 0x87, 0xae, 0x1c, 0x2c, 0xbf, 0xff, 0x7f, 0x82,
+    0x73, 0x50, 0x3c, 0xf7, 0x78, 0x53, 0xac, 0xa8, 0x3e, 0xec, 0x16, 0xbf,
+    0xa1, 0x80, 0xff, 0x0a, 0xcb, 0xff, 0x60, 0x33, 0x26, 0x98, 0xa0, 0x6b,
+    0x2b, 0x13, 0x18, 0x3c, 0x23, 0xbc, 0x40, 0x45, 0x97, 0xbf, 0x12, 0x59,
+    0x7f, 0xc1, 0xff, 0xb2, 0x69, 0x47, 0x4b, 0x2f, 0xff, 0x13, 0xff, 0x3f,
+    0xcc, 0xf6, 0x6e, 0x7d, 0x65, 0x79, 0x14, 0x44, 0x39, 0xbc, 0xee, 0xd3,
+    0x2c, 0xb9, 0xfc, 0xb2, 0xfd, 0x9e, 0x72, 0x1a, 0xca, 0x9c, 0xf3, 0xa4,
+    0x24, 0x01, 0x6b, 0xa0, 0xd5, 0x97, 0xf3, 0x83, 0x9b, 0x4f, 0x69, 0xed,
+    0x35, 0x97, 0xf3, 0x41, 0xe7, 0xc3, 0x16, 0x5f, 0xff, 0x67, 0xfd, 0x92,
+    0xd3, 0x97, 0xfc, 0xf2, 0x59, 0x74, 0x01, 0x65, 0xfe, 0x7e, 0xa3, 0xb6,
+    0xec, 0x5e, 0x91, 0x24, 0x45, 0xc2, 0x27, 0x56, 0x27, 0xe8, 0xcf, 0xfe,
+    0x30, 0x21, 0x7e, 0x43, 0x4a, 0xf3, 0xcd, 0xc5, 0x97, 0xe2, 0xe7, 0xb3,
+    0x71, 0x65, 0xb4, 0xb2, 0xb0, 0xdd, 0x88, 0x55, 0x7e, 0x07, 0xa2, 0x5c,
+    0x59, 0x78, 0x82, 0x6a, 0xcb, 0xc6, 0x3c, 0xeb, 0x2f, 0xfa, 0x00, 0xff,
+    0x00, 0x85, 0x25, 0x95, 0xe3, 0xd7, 0x21, 0xea, 0x84, 0x5e, 0x91, 0x47,
+    0xdd, 0x2c, 0x2f, 0x68, 0x6c, 0x52, 0x85, 0x50, 0xbc, 0x18, 0xc9, 0x80,
+    0x70, 0xb1, 0xc8, 0xed, 0x0d, 0x71, 0xee, 0x3a, 0x7e, 0xa1, 0x84, 0xc4,
+    0x7a, 0x84, 0x87, 0xa5, 0x4c, 0xbb, 0x38, 0x1a, 0xca, 0x33, 0xae, 0x47,
+    0x07, 0xf9, 0x5a, 0xe1, 0x4d, 0xdb, 0x58, 0x12, 0x1b, 0xd7, 0x4f, 0xb6,
+    0xb2, 0xf9, 0x88, 0x0c, 0xb2, 0xfb, 0xb7, 0x7e, 0xd5, 0x15, 0x52, 0xa4,
+    0x7a, 0x1a, 0x20, 0xbf, 0x6b, 0xb7, 0x7e, 0xd5, 0x13, 0x6a, 0xfb, 0xfa,
+    0x6e, 0x96, 0x5e, 0x79, 0x0b, 0xc3, 0xd9, 0x63, 0x6b, 0x0b, 0x9d, 0x31,
+    0x9c, 0x6b, 0x3b, 0xdd, 0xfe, 0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x45, 0x7e,
+    0xbf, 0x6b, 0xb7, 0x7e, 0xd5, 0x16, 0x32, 0xed, 0xd9, 0x2c, 0xb0, 0xbc,
+    0x3d, 0x09, 0x8d, 0xaf, 0xdc, 0xef, 0xd0, 0x6a, 0xcb, 0xfe, 0x9e, 0x38,
+    0xe0, 0xe3, 0x0d, 0x65, 0xfc, 0x19, 0x67, 0x1f, 0xeb, 0x2f, 0xf0, 0x73,
+    0x5d, 0xf9, 0xb8, 0xb2, 0xb4, 0x89, 0xa2, 0x39, 0xe1, 0x6d, 0xfe, 0xd4,
+    0x19, 0xb6, 0x27, 0x9d, 0x65, 0xf8, 0x7b, 0x46, 0xd0, 0x46, 0xac, 0xbe,
+    0xff, 0x1f, 0xa5, 0x95, 0xb5, 0x9e, 0xb4, 0x19, 0xdf, 0xf1, 0x06, 0x79,
+    0xa5, 0x1a, 0x9d, 0x65, 0xda, 0xfa, 0xcb, 0xe7, 0x96, 0x0d, 0x65, 0xfd,
+    0xfc, 0xd0, 0xf0, 0x96, 0x5b, 0x06, 0x79, 0xbf, 0x21, 0xba, 0x58, 0xb2,
+    0xfe, 0x77, 0xff, 0xf3, 0xcb, 0x2f, 0xff, 0x61, 0xc9, 0xcd, 0x2c, 0x06,
+    0xc3, 0x05, 0x0b, 0x28, 0xd4, 0x49, 0x68, 0x58, 0x8b, 0x2f, 0xf1, 0x90,
+    0x63, 0x97, 0x5f, 0x59, 0x7e, 0xd7, 0xfd, 0x93, 0xac, 0xa8, 0x3d, 0xec,
+    0x35, 0xbf, 0xbe, 0xc7, 0xea, 0x5c, 0x59, 0x61, 0x78, 0xac, 0x67, 0x45,
+    0xe7, 0x84, 0x77, 0x89, 0x9c, 0xf0, 0x99, 0x39, 0x0b, 0x91, 0x21, 0x1d,
+    0xba, 0x41, 0x66, 0x16, 0xb8, 0xeb, 0xa9, 0x7b, 0xb7, 0xed, 0x76, 0xef,
+    0xda, 0xa2, 0xd5, 0x5f, 0xb5, 0xdb, 0xbf, 0x6a, 0x8a, 0x09, 0x74, 0xfe,
+    0x59, 0x79, 0xe4, 0x2f, 0x0f, 0x38, 0x06, 0xd7, 0xe8, 0x33, 0x6f, 0x34,
+    0xb2, 0xc2, 0xf1, 0x1c, 0x67, 0x84, 0x20, 0x86, 0x97, 0xdf, 0xd3, 0xf9,
+    0x65, 0xfd, 0xe6, 0x9e, 0x70, 0xf1, 0x65, 0xfd, 0x83, 0xd4, 0x7f, 0x8b,
+    0x2f, 0xe8, 0x3b, 0xf5, 0xf9, 0x2c, 0xac, 0x45, 0x6f, 0x64, 0x44, 0x61,
+    0xc2, 0xdb, 0xfb, 0x3c, 0x2d, 0xf5, 0xf5, 0x97, 0x39, 0x82, 0xcf, 0xaf,
+    0xe7, 0x97, 0xf0, 0xaa, 0xda, 0xbf, 0xb7, 0x9e, 0x59, 0x7f, 0xa0, 0x81,
+    0x1b, 0x8e, 0x75, 0x97, 0xff, 0xa6, 0x8d, 0xef, 0xae, 0x71, 0xb5, 0x86,
+    0xac, 0xbf, 0xcd, 0x34, 0x6f, 0x7d, 0x71, 0x65, 0xb8, 0xb2, 0xa0, 0xf1,
+    0x88, 0xd6, 0xff, 0xe8, 0x00, 0x7f, 0xc2, 0x8d, 0xd8, 0x9d, 0x65, 0xda,
+    0x85, 0x95, 0x24, 0xd1, 0x18, 0xd3, 0xd0, 0x93, 0xde, 0x41, 0xba, 0x8f,
+    0x7c, 0xde, 0x7e, 0x2c, 0xbe, 0xed, 0xdf, 0xb5, 0x45, 0xc4, 0xbf, 0x82,
+    0xfd, 0x0f, 0x34, 0xb2, 0xb4, 0x7b, 0xdc, 0x30, 0xbf, 0xff, 0x48, 0x4f,
+    0x49, 0xfe, 0xe0, 0x09, 0x3e, 0xf1, 0xac, 0xb8, 0x49, 0x96, 0x5f, 0xf7,
+    0x31, 0x80, 0x27, 0xdf, 0xcb, 0x2f, 0xdd, 0xb7, 0x3c, 0xcb, 0x2e, 0x6e,
+    0x96, 0x57, 0x46, 0xff, 0x45, 0x15, 0x3a, 0x2c, 0xfc, 0x33, 0xf7, 0x8b,
+    0xff, 0xe9, 0x47, 0xc1, 0xb3, 0x3d, 0xac, 0x00, 0x66, 0x59, 0x76, 0x1a,
+    0xb2, 0xff, 0x6f, 0xcf, 0xf3, 0x7c, 0x79, 0x65, 0x48, 0xf3, 0xbc, 0x2f,
+    0x58, 0x8c, 0x36, 0x85, 0x0d, 0xff, 0xbe, 0x4e, 0x0e, 0x7a, 0x0b, 0xeb,
+    0x2f, 0xd8, 0x76, 0xdd, 0x1a, 0xcb, 0xa0, 0xeb, 0x2a, 0x0f, 0xf7, 0x70,
+    0xf7, 0x45, 0x57, 0xf0, 0x49, 0xcd, 0x90, 0x16, 0x5f, 0x3e, 0xeb, 0x4e,
+    0xb2, 0xfd, 0xe0, 0x9b, 0x84, 0xb2, 0xfc, 0x3c, 0xdc, 0x8f, 0x2c, 0xbd,
+    0xba, 0xdd, 0xac, 0xa1, 0x9f, 0x96, 0x8a, 0x37, 0x4a, 0xaf, 0xf1, 0xde,
+    0x5c, 0x61, 0xe2, 0xcb, 0xc6, 0xc7, 0x16, 0x5f, 0xe9, 0x44, 0xcf, 0xe8,
+    0xdc, 0x59, 0x7f, 0xe9, 0x83, 0x21, 0x37, 0xc7, 0x9f, 0x7a, 0xca, 0x84,
+    0x4c, 0x60, 0xeb, 0x9b, 0x5b, 0x8b, 0x2f, 0xfb, 0x3d, 0xf2, 0x80, 0x6c,
+    0x65, 0x97, 0xe2, 0xf9, 0x39, 0xab, 0x29, 0x65, 0x61, 0xb2, 0xdb, 0x27,
+    0xa7, 0x44, 0xf9, 0x08, 0xf1, 0xae, 0xfe, 0x3b, 0xef, 0x8d, 0x6e, 0xac,
+    0xbf, 0xf3, 0x0f, 0x37, 0x9f, 0x25, 0xd4, 0x96, 0x5f, 0x9f, 0x8e, 0x40,
+    0x59, 0x7f, 0x36, 0xf9, 0x1e, 0x26, 0x59, 0x7f, 0xe8, 0xc2, 0x3c, 0x7b,
+    0x75, 0xf7, 0x56, 0x54, 0x8f, 0xcb, 0x46, 0x17, 0xfd, 0x87, 0xcd, 0x64,
+    0xf8, 0x62, 0xca, 0x84, 0xd9, 0xb0, 0xc8, 0xd4, 0x16, 0x84, 0xc7, 0x88,
+    0xad, 0xb5, 0xac, 0xbf, 0xb3, 0x4f, 0xf0, 0xc2, 0xcb, 0xff, 0xe7, 0x28,
+    0x6d, 0xde, 0x37, 0x33, 0xd9, 0xb6, 0xb2, 0x86, 0x7f, 0xdb, 0xcb, 0x2f,
+    0xfe, 0x62, 0x0c, 0xb3, 0x9c, 0x61, 0xe2, 0xca, 0x98, 0xf9, 0xbe, 0x49,
+    0x61, 0x62, 0xa3, 0x2b, 0x52, 0x23, 0x80, 0x92, 0xa6, 0x3f, 0xf4, 0x44,
+    0xd1, 0x85, 0xcd, 0x0f, 0x4d, 0x42, 0x8c, 0xe6, 0x3e, 0x2e, 0x78, 0x4b,
+    0x80, 0xc8, 0xa1, 0x95, 0xc8, 0x66, 0x7e, 0x39, 0x4d, 0xb4, 0xe1, 0x21,
+    0xf5, 0x7f, 0x6d, 0x5b, 0x56, 0x9d, 0xe4, 0xb2, 0xff, 0x6d, 0x65, 0xb4,
+    0x7f, 0x6f, 0x68, 0x1a, 0xcb, 0xfd, 0xb5, 0x60, 0x44, 0xf4, 0x1a, 0xb2,
+    0xe7, 0x14, 0xac, 0xa1, 0x49, 0xea, 0x11, 0xd5, 0xf8, 0x51, 0xb4, 0x80,
+    0x6c, 0x2c, 0xbf, 0xf3, 0x75, 0xb4, 0xf9, 0xad, 0x9b, 0x3d, 0xb6, 0xb2,
+    0xfb, 0xd1, 0xfe, 0xd6, 0x50, 0xaa, 0x3f, 0x11, 0xa7, 0x5f, 0xf4, 0x69,
+    0xfe, 0x01, 0x0a, 0x4b, 0x2f, 0xfe, 0x34, 0xcd, 0xc9, 0xc6, 0x28, 0xd9,
+    0xb3, 0xdb, 0x6b, 0x2f, 0xa3, 0x35, 0x25, 0x95, 0xb4, 0xcf, 0xe4, 0x96,
+    0x2f, 0xdc, 0xe3, 0xef, 0xc5, 0x97, 0xdd, 0xbb, 0xf6, 0xa8, 0xba, 0x57,
+    0xe2, 0x0f, 0xe3, 0x8b, 0x2b, 0x47, 0xaf, 0xe3, 0x0b, 0xfc, 0xe3, 0x12,
+    0x4c, 0x0e, 0x2c, 0xbe, 0x27, 0x1c, 0x2c, 0xbf, 0xd1, 0xbd, 0xca, 0x37,
+    0xf1, 0x65, 0x41, 0xea, 0xf8, 0x82, 0xff, 0xed, 0xaf, 0x9c, 0x9a, 0x42,
+    0xbd, 0x9b, 0x3d, 0xb6, 0xb2, 0xfe, 0x94, 0x74, 0xfc, 0x92, 0xcb, 0xfe,
+    0x29, 0xb5, 0x1d, 0x49, 0x8e, 0xb2, 0xff, 0xdb, 0xe0, 0xbf, 0xc0, 0xff,
+    0x34, 0xb2, 0xa0, 0xfe, 0xb0, 0xea, 0xfa, 0x5b, 0xb9, 0xf5, 0x97, 0xdc,
+    0x8d, 0xde, 0x2c, 0xa8, 0x3c, 0xad, 0xd2, 0x5b, 0xd1, 0xfd, 0xd5, 0x97,
+    0xf6, 0x49, 0xa2, 0x5b, 0x8b, 0x2f, 0x0f, 0x06, 0xb2, 0x86, 0x79, 0x78,
+    0x5f, 0x7f, 0xa7, 0x82, 0xec, 0x62, 0x71, 0x65, 0xff, 0x36, 0x17, 0xb3,
+    0xf0, 0x35, 0x97, 0xfe, 0x62, 0xd4, 0x7d, 0xbb, 0x61, 0xac, 0xa9, 0xd1,
+    0x53, 0xf3, 0x6d, 0xe6, 0xd7, 0xfb, 0x7c, 0x7f, 0x81, 0xec, 0x56, 0xb2,
+    0xb0, 0xfb, 0x9c, 0xce, 0xff, 0xc3, 0xf3, 0x19, 0xfe, 0xbb, 0x6f, 0x2c,
+    0xb9, 0xc4, 0x59, 0x7f, 0xef, 0xec, 0xe3, 0x97, 0x7e, 0x6d, 0x2c, 0xb7,
+    0x27, 0x3d, 0x8c, 0x17, 0xbf, 0xd1, 0xf7, 0x9c, 0x2d, 0x25, 0x97, 0x09,
+    0xe5, 0x94, 0x47, 0x96, 0x21, 0x9d, 0xff, 0xf9, 0xe4, 0x51, 0xcc, 0xeb,
+    0xb2, 0x7c, 0xeb, 0xb5, 0x97, 0xfc, 0xde, 0xce, 0x81, 0x21, 0xe2, 0xcb,
+    0x0b, 0xda, 0xd9, 0x1e, 0xbb, 0x51, 0xbe, 0xd1, 0x09, 0xad, 0xa6, 0x4b,
+    0x10, 0xa4, 0x9c, 0xa2, 0x50, 0xb2, 0x19, 0x3e, 0x42, 0x03, 0xb2, 0x26,
+    0x84, 0x4e, 0xe1, 0x0c, 0xcb, 0x1a, 0x85, 0x41, 0xda, 0xbc, 0x48, 0xed,
+    0x45, 0x19, 0xc7, 0x08, 0x3f, 0x09, 0xa0, 0xb9, 0xef, 0x22, 0xdb, 0x56,
+    0xba, 0x36, 0xd6, 0x5f, 0xfe, 0x2f, 0xb1, 0xfd, 0x0c, 0x4f, 0xa3, 0x56,
+    0x5f, 0xcf, 0xf8, 0x3c, 0x12, 0xca, 0xc3, 0xf3, 0xd2, 0x45, 0xff, 0x8f,
+    0xc0, 0xfe, 0x4d, 0xbf, 0xcc, 0xb2, 0xfe, 0xcc, 0xe7, 0x7f, 0x85, 0x97,
+    0xf4, 0xf1, 0xf7, 0x34, 0x2b, 0x29, 0x65, 0xff, 0xd1, 0xa0, 0x6c, 0xe7,
+    0xa0, 0xee, 0x4b, 0x2f, 0xf4, 0x68, 0x4f, 0x7b, 0x00, 0xb2, 0xa4, 0x7f,
+    0x3e, 0x45, 0xbf, 0xa4, 0xf2, 0x72, 0xed, 0x65, 0xc5, 0x0b, 0x2d, 0xc5,
+    0x95, 0x06, 0x9b, 0xe2, 0xb7, 0xff, 0xb3, 0xf0, 0x60, 0x93, 0xf3, 0x0f,
+    0x1b, 0x8b, 0x2c, 0x75, 0x97, 0xf3, 0xcb, 0x4c, 0x63, 0x2c, 0xbe, 0x28,
+    0x1e, 0x96, 0x5f, 0xf9, 0xa4, 0xda, 0xea, 0x0a, 0x38, 0xb2, 0xa7, 0x3d,
+    0xef, 0x90, 0xd8, 0x5e, 0xd6, 0xa8, 0x9f, 0x21, 0x09, 0x31, 0x17, 0x94,
+    0xc8, 0x83, 0xe9, 0xfb, 0x62, 0x22, 0x42, 0x2e, 0xb4, 0xab, 0x8c, 0xf2,
+    0x95, 0xaf, 0xb0, 0xcd, 0xac, 0xeb, 0x2f, 0xe2, 0x8e, 0x8e, 0xff, 0x59,
+    0x7f, 0xf8, 0xc7, 0x1f, 0xa3, 0xaf, 0xc7, 0x9f, 0x71, 0x65, 0x9b, 0x47,
+    0xf7, 0xe2, 0xdb, 0xff, 0xfe, 0x0e, 0xa5, 0xcf, 0x3b, 0x6b, 0x5a, 0x0f,
+    0x4d, 0xa7, 0xe2, 0xcb, 0xff, 0xb5, 0xdc, 0x67, 0xa3, 0xe5, 0x1f, 0x59,
+    0x78, 0x3e, 0xe2, 0xcb, 0xff, 0x39, 0xbd, 0xf9, 0xa6, 0xd4, 0x18, 0xb2,
+    0xf4, 0x67, 0x5d, 0x9e, 0xf9, 0x0e, 0xdf, 0xfc, 0xe7, 0xe7, 0xc9, 0xc1,
+    0xd7, 0xf6, 0x9a, 0xcb, 0x7f, 0x47, 0xfc, 0x13, 0x3b, 0xff, 0x13, 0x99,
+    0xfc, 0xf3, 0xcc, 0xeb, 0x2f, 0xff, 0xc0, 0x04, 0x6c, 0xf4, 0x7c, 0x3d,
+    0xfa, 0x09, 0xd6, 0x5f, 0xff, 0x88, 0x2f, 0xb9, 0x92, 0xf6, 0x1b, 0x83,
+    0x98, 0x2b, 0x2b, 0x11, 0x61, 0xe5, 0x7b, 0xbb, 0xc5, 0x97, 0xf4, 0x49,
+    0xba, 0xfe, 0x2c, 0xbf, 0xfe, 0x7e, 0xa5, 0xce, 0xbe, 0x4f, 0xec, 0xeb,
+    0xeb, 0x2a, 0x11, 0x70, 0x69, 0x16, 0x85, 0xdc, 0xb6, 0xfb, 0x5c, 0x6d,
+    0x2c, 0xbf, 0xff, 0xfe, 0xfc, 0x34, 0x9f, 0x9c, 0x8e, 0x67, 0x98, 0xa0,
+    0xfa, 0x81, 0x1c, 0x96, 0x5f, 0xb9, 0x1e, 0x12, 0x65, 0x94, 0xc8, 0xa3,
+    0xfb, 0xcd, 0x42, 0x39, 0xde, 0x18, 0xb7, 0xa5, 0x07, 0x59, 0x6d, 0xa1,
+    0x65, 0xdc, 0x92, 0xcb, 0xff, 0xf7, 0xb0, 0x61, 0xff, 0x3b, 0xf3, 0x70,
+    0x2f, 0xd2, 0xca, 0x34, 0xfb, 0xfe, 0x2f, 0x7f, 0xb5, 0xa7, 0x94, 0xf8,
+    0x62, 0xca, 0x59, 0x74, 0xc1, 0x59, 0x58, 0x7b, 0x1e, 0x35, 0x30, 0x2e,
+    0xff, 0xbc, 0x27, 0xdb, 0x4d, 0x3c, 0x2c, 0xbe, 0xd4, 0x19, 0xc5, 0x97,
+    0xbd, 0x93, 0x2c, 0xbf, 0xfe, 0x09, 0x7f, 0x98, 0xc7, 0xc1, 0xc4, 0xa3,
+    0x0f, 0x03, 0xe4, 0x75, 0x24, 0xc3, 0x30, 0xbf, 0x8f, 0x57, 0xff, 0x60,
+    0xe2, 0x51, 0xa8, 0x11, 0xc9, 0x65, 0xff, 0xb7, 0xe4, 0x8e, 0x36, 0xdf,
+    0x03, 0x59, 0x7f, 0xfc, 0xde, 0x09, 0xce, 0xf2, 0xf3, 0x9d, 0xb8, 0xb2,
+    0x8e, 0x8d, 0x37, 0x42, 0xfa, 0x15, 0xce, 0x2e, 0x75, 0xff, 0x9c, 0x68,
+    0xea, 0x32, 0x09, 0x8a, 0x35, 0x1d, 0x37, 0xa3, 0x23, 0x72, 0x62, 0x1c,
+    0xe4, 0x21, 0x7f, 0x1c, 0x38, 0x91, 0x81, 0xd7, 0x99, 0x1d, 0x85, 0x48,
+    0x20, 0xbf, 0xd2, 0xcf, 0xfa, 0x04, 0x25, 0x97, 0xfe, 0xfb, 0x76, 0xc3,
+    0x72, 0x36, 0x16, 0x5f, 0xf4, 0x75, 0xe7, 0xe7, 0xe0, 0xc5, 0x95, 0x07,
+    0xf1, 0xa3, 0xeb, 0xfc, 0xff, 0x20, 0xcf, 0xd6, 0xe2, 0xcb, 0x0a, 0x56,
+    0x5c, 0x1f, 0x2c, 0xbf, 0x16, 0x79, 0xfe, 0xb2, 0xfe, 0x93, 0xe6, 0xf8,
+    0x1a, 0xca, 0x14, 0x9e, 0xa0, 0xa8, 0x4d, 0x7e, 0x14, 0x0a, 0x75, 0xce,
+    0x2c, 0xbe, 0x60, 0xca, 0x16, 0x5f, 0x67, 0x50, 0x75, 0x97, 0xcc, 0x50,
+    0x05, 0x97, 0xe8, 0xde, 0xf9, 0xa5, 0x97, 0xb7, 0x47, 0x0b, 0x2b, 0xc7,
+    0x8e, 0x12, 0x8b, 0xf3, 0xcd, 0x26, 0xfa, 0xcb, 0xfc, 0x1d, 0xd6, 0xdf,
+    0xfc, 0xf2, 0xcb, 0xff, 0x40, 0xf5, 0x12, 0x6e, 0xbf, 0x8b, 0x2f, 0xff,
+    0x9f, 0xd1, 0x21, 0xfa, 0x3a, 0xfb, 0x1f, 0x8b, 0x2a, 0x49, 0xdd, 0x1a,
+    0x43, 0xd9, 0x17, 0x99, 0xc0, 0x44, 0x45, 0x1f, 0x38, 0xde, 0x7d, 0x7f,
+    0xda, 0xe7, 0x9b, 0xbe, 0xc3, 0x3a, 0xcb, 0xf8, 0xcc, 0xde, 0x41, 0x92,
+    0xcb, 0xf8, 0x26, 0xe1, 0x6e, 0xe2, 0xcb, 0xff, 0xff, 0xb5, 0x2e, 0xfc,
+    0xc7, 0x3b, 0x19, 0xce, 0xbb, 0x6c, 0xd0, 0xe3, 0xa5, 0x95, 0x09, 0x8a,
+    0x61, 0xe9, 0x18, 0x04, 0xc2, 0xff, 0xff, 0xa0, 0x7e, 0xce, 0xbe, 0x4f,
+    0xe0, 0x3f, 0x38, 0xfa, 0xed, 0x65, 0xf4, 0xfb, 0x6e, 0x6a, 0xcb, 0xfd,
+    0x99, 0x86, 0x9a, 0xf2, 0x59, 0x46, 0xa3, 0x07, 0xcc, 0xff, 0x27, 0xbf,
+    0x67, 0x3b, 0xfc, 0x2c, 0xbf, 0xfc, 0xc6, 0x73, 0xbf, 0x37, 0x5f, 0xd6,
+    0xa1, 0x65, 0xff, 0xb5, 0xf7, 0x97, 0x37, 0x87, 0x4c, 0xb2, 0xff, 0xe7,
+    0xe1, 0x39, 0xa3, 0xf0, 0x5f, 0x8b, 0x2a, 0x11, 0x0a, 0x14, 0x1b, 0xff,
+    0xfe, 0x73, 0x04, 0xcd, 0x13, 0xf5, 0x2e, 0xe3, 0xfc, 0xce, 0xbe, 0xb2,
+    0xfc, 0x58, 0x08, 0x02, 0xcb, 0xfa, 0x71, 0x33, 0xcf, 0xd2, 0xcb, 0xfd,
+    0x26, 0x29, 0xa4, 0xde, 0x59, 0x68, 0x92, 0x22, 0x70, 0x9a, 0x63, 0x0a,
+    0xc5, 0x48, 0x9a, 0x28, 0xf4, 0x34, 0x9c, 0x88, 0xa1, 0xe7, 0x7e, 0xde,
+    0xda, 0xc1, 0xac, 0xbf, 0xfe, 0xe7, 0x9b, 0x9f, 0xf6, 0x0d, 0xb9, 0x84,
+    0xb2, 0xf7, 0xa0, 0xb0, 0xfd, 0xc2, 0x53, 0x7e, 0x7f, 0x48, 0xbb, 0x59,
+    0x7f, 0xa0, 0xf8, 0xc7, 0x8d, 0xc5, 0x97, 0xfa, 0x47, 0xe3, 0x17, 0x52,
+    0x59, 0x5d, 0x9f, 0x44, 0xc6, 0x97, 0xf9, 0xb4, 0xe4, 0x0c, 0x25, 0x97,
+    0xfb, 0xec, 0x59, 0xd4, 0xa1, 0x65, 0xff, 0xda, 0xd3, 0xcb, 0x85, 0x87,
+    0x13, 0xa5, 0x95, 0x07, 0xf1, 0x86, 0x57, 0xfc, 0xd2, 0x2c, 0xf1, 0x3c,
+    0x96, 0x5f, 0xff, 0xa5, 0x84, 0x3f, 0x46, 0x14, 0x00, 0xef, 0x25, 0x94,
+    0x48, 0x88, 0x10, 0xda, 0xf3, 0xbf, 0x6a, 0x89, 0x31, 0x7b, 0x75, 0xb8,
+    0xb2, 0xa4, 0x7d, 0x7d, 0x91, 0xee, 0x94, 0xdf, 0xbb, 0xda, 0x62, 0x8d,
+    0xac, 0x52, 0xb2, 0xff, 0xff, 0xf6, 0x77, 0x01, 0xef, 0xd1, 0xad, 0x98,
+    0x4d, 0xd7, 0x04, 0x9c, 0xb0, 0x6b, 0x2f, 0xf6, 0xf7, 0x3e, 0x1b, 0x1c,
+    0x59, 0x7b, 0xa9, 0x73, 0x62, 0x2c, 0x71, 0xf2, 0xff, 0x67, 0x5f, 0xfb,
+    0xcb, 0x8b, 0x2a, 0x13, 0x59, 0xc8, 0x77, 0x68, 0xde, 0xff, 0x13, 0xff,
+    0x9d, 0x84, 0x96, 0x5f, 0xff, 0x01, 0x80, 0x66, 0x36, 0xf2, 0xcf, 0xf9,
+    0x96, 0x5e, 0x9f, 0xec, 0xb2, 0xff, 0xe2, 0x73, 0x38, 0x63, 0x8e, 0x3a,
+    0xe2, 0xcb, 0x62, 0xca, 0xd1, 0xeb, 0x7d, 0x1a, 0xfd, 0xc7, 0x79, 0x71,
+    0x65, 0xfc, 0xf2, 0xe6, 0x10, 0x16, 0x59, 0xf6, 0x23, 0xa0, 0x6e, 0x7d,
+    0x11, 0x7c, 0x9e, 0xda, 0xc4, 0xdf, 0x7d, 0x19, 0xc5, 0xff, 0xfc, 0xf3,
+    0x94, 0x75, 0xd7, 0x61, 0x7d, 0x03, 0x3a, 0xfa, 0xca, 0xc5, 0x47, 0xcd,
+    0x1d, 0x81, 0x17, 0xdf, 0xf3, 0xcb, 0x98, 0x51, 0xd7, 0x16, 0x5f, 0x72,
+    0x4c, 0x05, 0x97, 0xff, 0xdf, 0x35, 0xf9, 0xad, 0x64, 0xe0, 0x3c, 0x49,
+    0x65, 0x48, 0xfd, 0x0c, 0x22, 0xbf, 0xff, 0xf7, 0xb2, 0x5e, 0xc1, 0x94,
+    0x76, 0x24, 0x19, 0x9c, 0xe3, 0x9a, 0xb2, 0xa1, 0x12, 0x3f, 0x23, 0xbf,
+    0xf1, 0x98, 0x37, 0x97, 0xf8, 0xe0, 0x59, 0x7f, 0xf8, 0xa0, 0xc1, 0x3e,
+    0x50, 0x0c, 0xeb, 0xeb, 0x2f, 0xf6, 0x6b, 0xc5, 0x1d, 0x49, 0x65, 0xcf,
+    0xd6, 0x1f, 0xf0, 0x89, 0x74, 0xc8, 0xeb, 0x0c, 0x2f, 0x6f, 0xfe, 0x6e,
+    0x8c, 0xff, 0x9a, 0x0b, 0x3b, 0x59, 0x7f, 0xf0, 0xc9, 0xce, 0x06, 0xd3,
+    0x74, 0x05, 0x97, 0xfc, 0xc6, 0xc0, 0xe7, 0x3c, 0x69, 0x65, 0x49, 0x94,
+    0x0e, 0x33, 0x1c, 0x84, 0x81, 0xa4, 0x9d, 0xc2, 0xa3, 0x51, 0x89, 0x9e,
+    0x38, 0xcf, 0x4a, 0x72, 0x01, 0xa9, 0x46, 0x7b, 0xc8, 0xc3, 0x7e, 0x4e,
+    0x14, 0x5d, 0xe8, 0x97, 0xf0, 0xc0, 0x29, 0xe0, 0x36, 0xd6, 0x5e, 0xdd,
+    0xdd, 0x85, 0x97, 0xff, 0x87, 0x86, 0x79, 0xff, 0xc8, 0xf0, 0x93, 0x2c,
+    0xbd, 0xc6, 0x1a, 0xcb, 0xf8, 0xa3, 0xa3, 0xbf, 0xd6, 0x5f, 0xf4, 0x77,
+    0xf0, 0xfb, 0x50, 0x62, 0xcb, 0xfe, 0x6c, 0x33, 0xbf, 0x43, 0x6d, 0xac,
+    0xbf, 0xfd, 0x05, 0x2c, 0x0e, 0xa7, 0x06, 0x60, 0xd6, 0x5f, 0xee, 0xdb,
+    0x5c, 0x9a, 0x1d, 0x65, 0xfe, 0x6f, 0x82, 0x3c, 0x27, 0x16, 0x5f, 0x3c,
+    0xa0, 0x96, 0x5f, 0x83, 0xcf, 0x3c, 0xa4, 0x7a, 0x9e, 0x34, 0xbf, 0x9c,
+    0x18, 0x43, 0x92, 0xcb, 0xff, 0x9f, 0xaf, 0xfb, 0x18, 0x70, 0x5d, 0xac,
+    0xa3, 0x53, 0x80, 0xe9, 0x27, 0x50, 0x88, 0x23, 0xfe, 0x16, 0x59, 0x86,
+    0xab, 0x7a, 0x64, 0xdd, 0x0e, 0x1c, 0xb4, 0x56, 0x77, 0xf8, 0xef, 0x2f,
+    0xc3, 0x8e, 0x7d, 0x96, 0x5f, 0xb2, 0x73, 0xb4, 0xcb, 0x2a, 0x15, 0xdc,
+    0xfa, 0x58, 0x03, 0xb4, 0x91, 0x3d, 0xf7, 0xd8, 0xee, 0xb2, 0xf8, 0xcf,
+    0x07, 0xb5, 0x96, 0x35, 0x65, 0xfd, 0xee, 0x47, 0xe0, 0x6b, 0x2a, 0x0f,
+    0x93, 0x09, 0x58, 0x4a, 0xb1, 0x16, 0x3f, 0x84, 0x2d, 0xff, 0xe0, 0xbf,
+    0x9c, 0x72, 0x3f, 0xa0, 0x42, 0x59, 0x7f, 0x79, 0xb9, 0xe8, 0xd2, 0xcb,
+    0xfe, 0x8f, 0x7d, 0xa7, 0x3c, 0x76, 0xb2, 0xff, 0xfc, 0xfd, 0xea, 0x3c,
+    0x59, 0xfc, 0x16, 0x61, 0x86, 0x24, 0xa9, 0x26, 0x65, 0xd9, 0x3b, 0xa5,
+    0x70, 0xb7, 0xe7, 0x57, 0xee, 0xc3, 0xd9, 0x42, 0xcb, 0xf7, 0x26, 0xf4,
+    0x7d, 0x65, 0xed, 0x37, 0x4b, 0x2b, 0xb3, 0xef, 0x98, 0xa7, 0xe5, 0x37,
+    0xff, 0x75, 0x22, 0x89, 0x6a, 0x3e, 0xff, 0x59, 0x7f, 0xc3, 0x12, 0x3a,
+    0xdb, 0xcd, 0x42, 0xcb, 0xa2, 0x4b, 0x2b, 0x11, 0x2e, 0xe8, 0x84, 0x7b,
+    0x7c, 0x1d, 0xc8, 0x92, 0xcb, 0xff, 0x3f, 0xe3, 0x5c, 0xf4, 0x17, 0xd6,
+    0x5f, 0xb2, 0x4c, 0xfb, 0xd6, 0x57, 0x91, 0x14, 0x44, 0xbc, 0x3d, 0xa9,
+    0x23, 0x98, 0x30, 0xb7, 0xbc, 0x77, 0xf2, 0xcb, 0xff, 0xc5, 0x12, 0xd6,
+    0x83, 0xd3, 0x69, 0xf8, 0xb2, 0xff, 0xfb, 0x98, 0x69, 0x67, 0xf9, 0x92,
+    0x27, 0x31, 0x65, 0x9b, 0xc8, 0x99, 0xfa, 0x55, 0x32, 0x37, 0x77, 0xc2,
+    0xd6, 0xfb, 0x76, 0x3d, 0xc5, 0x97, 0xfd, 0x07, 0xff, 0xb0, 0xa0, 0x0b,
+    0x2f, 0xc7, 0x89, 0x6e, 0x76, 0xb2, 0xfc, 0x50, 0x1f, 0xf1, 0x65, 0x00,
+    0xf4, 0xfe, 0x59, 0x7f, 0xdc, 0x93, 0x7c, 0x02, 0x14, 0x96, 0x54, 0xe7,
+    0xb9, 0xd1, 0x15, 0xfe, 0x3f, 0xf2, 0x69, 0x39, 0x2c, 0xac, 0x3d, 0x76,
+    0x24, 0xa8, 0x4e, 0xaf, 0x0a, 0x58, 0x97, 0x51, 0x9e, 0xdf, 0xff, 0xf7,
+    0x5d, 0xf9, 0x8e, 0x4d, 0x3c, 0x7f, 0x82, 0x7f, 0xd8, 0x35, 0x97, 0xfc,
+    0x6e, 0xc1, 0x33, 0x5b, 0x6e, 0x6a, 0xcb, 0x0a, 0xd6, 0x54, 0x1e, 0xb3,
+    0xa0, 0xdf, 0xff, 0xc4, 0xe6, 0xfa, 0x1a, 0x4c, 0x5f, 0x96, 0x6b, 0x16,
+    0x54, 0x26, 0x70, 0x50, 0xc0, 0x09, 0x05, 0xff, 0xe0, 0x67, 0x5f, 0xc2,
+    0x0f, 0xc1, 0x12, 0x59, 0x7e, 0x0f, 0xbf, 0x13, 0x2c, 0xbf, 0xfe, 0xfc,
+    0x76, 0xdf, 0x63, 0xec, 0xe3, 0x8c, 0x6b, 0x2f, 0xf7, 0x9c, 0xe3, 0xcd,
+    0x87, 0x59, 0x70, 0x21, 0x65, 0x0c, 0xf2, 0xc0, 0x6b, 0x7f, 0xef, 0x36,
+    0xfc, 0xdc, 0x19, 0x3e, 0x96, 0x5f, 0x06, 0x7e, 0xb7, 0x16, 0x57, 0x67,
+    0xd4, 0x48, 0x54, 0xc9, 0xa5, 0xf2, 0x13, 0xbf, 0x84, 0x65, 0xff, 0xe8,
+    0x9c, 0xb3, 0x27, 0xf9, 0xb0, 0x52, 0x59, 0x7f, 0xe7, 0x29, 0xfc, 0xe7,
+    0x6e, 0x32, 0xca, 0xc5, 0x4f, 0xfe, 0x4a, 0x78, 0xdd, 0x08, 0xe8, 0xc4,
+    0xab, 0xff, 0x83, 0xb9, 0xec, 0xc1, 0x96, 0x4f, 0x0b, 0x2f, 0xfb, 0xed,
+    0xc6, 0x08, 0xac, 0x70, 0xb2, 0xf1, 0x86, 0x18, 0x92, 0xfa, 0x73, 0xb7,
+    0x12, 0x0b, 0x34, 0x17, 0x40, 0xd6, 0x53, 0x9e, 0x59, 0x1a, 0xdf, 0xf3,
+    0x72, 0x25, 0x37, 0x98, 0x0b, 0x2f, 0xf6, 0x75, 0xac, 0xdb, 0x60, 0x2c,
+    0xa1, 0xa6, 0xf8, 0xc8, 0xda, 0x85, 0x3f, 0x88, 0x08, 0xe6, 0xe1, 0x3c,
+    0xb2, 0xfd, 0x18, 0x4e, 0x75, 0x97, 0xfe, 0x79, 0x79, 0xba, 0x06, 0x9c,
+    0x6b, 0x2e, 0x19, 0x8b, 0x2f, 0xff, 0xd9, 0xbe, 0x0b, 0xe7, 0x8c, 0x21,
+    0xe7, 0x5f, 0x59, 0x79, 0xcb, 0xb9, 0xcf, 0xb7, 0x43, 0x14, 0xc9, 0x8e,
+    0x80, 0x60, 0x89, 0x43, 0x0a, 0xcb, 0xf6, 0xa7, 0x8d, 0x4e, 0xb2, 0xfc,
+    0xc5, 0xf1, 0x0e, 0xb2, 0xd2, 0x83, 0xd2, 0x01, 0x55, 0xff, 0x7a, 0x0f,
+    0x05, 0xff, 0x32, 0xcb, 0xff, 0xb3, 0x9c, 0xc3, 0x8d, 0xb7, 0xc0, 0xd6,
+    0x54, 0x1f, 0xe7, 0x8d, 0xef, 0xe8, 0x3c, 0xde, 0x6d, 0x2c, 0xbf, 0xb3,
+    0x98, 0x77, 0xe9, 0x65, 0xfb, 0x8d, 0x84, 0x05, 0x95, 0xa3, 0xd3, 0xe1,
+    0x6d, 0xed, 0x66, 0xe2, 0xcb, 0xff, 0xc1, 0xe7, 0x9b, 0x26, 0x69, 0xf3,
+    0xaf, 0xac, 0xbf, 0xe3, 0x04, 0x9f, 0x98, 0x78, 0xdc, 0x59, 0x7f, 0xf8,
+    0x3d, 0x66, 0x84, 0xff, 0x30, 0xd6, 0xd2, 0xcb, 0xff, 0xcd, 0xde, 0x10,
+    0xf4, 0xfd, 0xe7, 0x5f, 0x59, 0x50, 0x8d, 0x7f, 0x1f, 0xf1, 0x36, 0xff,
+    0xcc, 0x42, 0x64, 0xdc, 0x6e, 0x8c, 0x59, 0x7c, 0xe0, 0xf8, 0xad, 0x65,
+    0x76, 0xaa, 0x72, 0x62, 0x1d, 0x42, 0x04, 0xe4, 0x44, 0x3f, 0xf8, 0xc8,
+    0xf7, 0x97, 0x98, 0x83, 0x7e, 0xce, 0xbf, 0xe8, 0x59, 0x7e, 0x6d, 0xff,
+    0x8c, 0x59, 0x5e, 0x3d, 0x0e, 0x14, 0x54, 0x2e, 0x19, 0xe4, 0xb3, 0xf7,
+    0x86, 0x95, 0xff, 0xf9, 0xb9, 0xc8, 0xd4, 0xb5, 0x1f, 0xe0, 0x85, 0x25,
+    0x97, 0xf0, 0x99, 0xad, 0xb7, 0x35, 0x65, 0xfb, 0x35, 0xb6, 0xe6, 0xac,
+    0xbb, 0x39, 0xb0, 0xf7, 0x44, 0x32, 0xbf, 0xfd, 0x31, 0x47, 0xf9, 0xfe,
+    0xbb, 0x62, 0x9d, 0x65, 0xff, 0xb0, 0xbf, 0xa7, 0x7e, 0xa5, 0xc5, 0x97,
+    0xfc, 0xe6, 0xec, 0xf4, 0x02, 0x37, 0x16, 0x56, 0x23, 0xe5, 0x8c, 0x3c,
+    0x9a, 0xe7, 0xd7, 0xff, 0xfe, 0x00, 0x85, 0x9a, 0xd6, 0x19, 0x9b, 0x98,
+    0x50, 0x03, 0xbc, 0x96, 0x5f, 0xff, 0xff, 0xf1, 0x67, 0x01, 0xde, 0x13,
+    0x75, 0xc2, 0xcf, 0xf3, 0x24, 0x4e, 0x67, 0x5f, 0x0b, 0xf1, 0x65, 0x98,
+    0x93, 0x02, 0xde, 0xdd, 0x7f, 0xff, 0x7f, 0x81, 0x1f, 0x9b, 0x26, 0x76,
+    0xdc, 0x6e, 0xa4, 0xb2, 0xff, 0xfe, 0x2c, 0x03, 0x90, 0x35, 0xac, 0x33,
+    0x00, 0xfd, 0x2c, 0xa2, 0x45, 0xcf, 0xd7, 0xef, 0xcd, 0xf9, 0xf0, 0xc5,
+    0x97, 0xfd, 0x1d, 0xf8, 0x83, 0xf8, 0xe2, 0xcb, 0xff, 0x6e, 0xc7, 0x70,
+    0x7c, 0x1b, 0x9d, 0x65, 0xfb, 0x70, 0x42, 0x8e, 0xd6, 0x53, 0x1f, 0x6b,
+    0xa0, 0xdf, 0xfd, 0x2e, 0x64, 0x0d, 0x89, 0xf4, 0x6a, 0xcb, 0xf6, 0xa3,
+    0x06, 0xcb, 0x2f, 0xef, 0x30, 0xc7, 0x86, 0x2c, 0xbf, 0x6b, 0x37, 0xfb,
+    0x36, 0x1e, 0xa7, 0x64, 0xd5, 0x08, 0xda, 0x78, 0x4b, 0xdf, 0xff, 0xff,
+    0x03, 0x99, 0x2f, 0x43, 0x68, 0x00, 0x8d, 0x60, 0x4d, 0x1b, 0x69, 0xf8,
+    0xb2, 0xff, 0xfb, 0xd9, 0x2d, 0x9d, 0xf9, 0xbf, 0xd7, 0x6d, 0xa5, 0x95,
+    0x08, 0xd2, 0xfb, 0xed, 0x49, 0x5f, 0x43, 0x43, 0x8f, 0x44, 0x47, 0x29,
+    0xf4, 0x29, 0x81, 0x0f, 0xa2, 0x87, 0xc5, 0xff, 0xef, 0xc1, 0xfb, 0x71,
+    0xe1, 0x82, 0x6a, 0x4b, 0x2f, 0x8a, 0x7d, 0xe3, 0x59, 0x7f, 0xe7, 0xd6,
+    0xc2, 0x7f, 0xc9, 0xc6, 0xb2, 0xff, 0xfe, 0x62, 0x1e, 0xb3, 0xbf, 0x47,
+    0xb3, 0x5a, 0x83, 0x56, 0x54, 0x91, 0x35, 0xe3, 0xfb, 0xf9, 0xdf, 0xfb,
+    0x6d, 0xda, 0xcb, 0xfe, 0x3b, 0x8c, 0x4d, 0xd8, 0x29, 0x2c, 0xbf, 0xee,
+    0xc3, 0xb9, 0xc6, 0x33, 0x34, 0xb2, 0xa0, 0xfe, 0xbb, 0x3c, 0xbf, 0xff,
+    0xef, 0x87, 0x4f, 0xce, 0xfc, 0xd3, 0x13, 0x99, 0xfc, 0xf1, 0xd6, 0x5f,
+    0xfe, 0xe6, 0x6b, 0x67, 0x7e, 0x6d, 0xec, 0x43, 0x59, 0x4c, 0x8b, 0x7e,
+    0x34, 0xd3, 0x23, 0xed, 0xe1, 0xb3, 0x7f, 0xe6, 0x18, 0x7f, 0xc8, 0x26,
+    0xc5, 0x97, 0xfc, 0x78, 0xd6, 0xfc, 0xd4, 0x4c, 0xb2, 0xff, 0xff, 0x67,
+    0xfc, 0x1e, 0xbf, 0xc7, 0xeb, 0xbd, 0xbc, 0xe7, 0x31, 0x65, 0xff, 0xb5,
+    0xd9, 0xe3, 0xae, 0x66, 0xfc, 0x59, 0x73, 0xee, 0x2c, 0xa5, 0x97, 0x68,
+    0xd5, 0x94, 0x69, 0xa3, 0x70, 0xbb, 0xff, 0xfa, 0x62, 0x81, 0xe7, 0x5f,
+    0xc9, 0x41, 0x4e, 0x7c, 0x59, 0x7f, 0x03, 0x6f, 0x07, 0x87, 0x59, 0x5a,
+    0x45, 0x67, 0x88, 0x49, 0x6e, 0xfb, 0xef, 0xae, 0x2c, 0xbf, 0x6c, 0xdb,
+    0xcd, 0x42, 0xca, 0x9c, 0xf3, 0x88, 0x8a, 0xa1, 0x3c, 0x99, 0xd0, 0xb2,
+    0x1d, 0x0e, 0xfb, 0x7f, 0xd2, 0x6f, 0xf3, 0xb8, 0xff, 0x16, 0x5f, 0xc0,
+    0xd9, 0x83, 0x79, 0x2c, 0xa9, 0x8f, 0xa5, 0xce, 0xac, 0x6a, 0xcb, 0xff,
+    0xb3, 0xbf, 0x47, 0xb3, 0x5a, 0x83, 0x56, 0x5f, 0xb3, 0x5a, 0x83, 0x56,
+    0x5f, 0x13, 0x03, 0x90, 0x7f, 0xfa, 0x12, 0xf2, 0x2d, 0xff, 0x79, 0xc0,
+    0x77, 0x93, 0xf1, 0x65, 0xfe, 0x79, 0x4a, 0x25, 0xdf, 0x16, 0x56, 0x1f,
+    0x60, 0x4e, 0x2f, 0xff, 0xfe, 0x6f, 0xfb, 0x07, 0x26, 0xfe, 0x1f, 0x8f,
+    0x2d, 0xbc, 0xe7, 0x31, 0x65, 0x62, 0x7c, 0xad, 0x0a, 0x1f, 0x42, 0xc3,
+    0x84, 0x37, 0xff, 0x9e, 0x7f, 0x34, 0x16, 0x4c, 0xda, 0x65, 0x95, 0x26,
+    0xc0, 0x18, 0x71, 0xd6, 0x64, 0xe9, 0x27, 0x4f, 0x0c, 0x9b, 0x34, 0x2f,
+    0xf4, 0x47, 0xe8, 0xe9, 0x5c, 0x98, 0x07, 0x84, 0x77, 0xc9, 0x46, 0x1f,
+    0x95, 0x1e, 0x62, 0x35, 0xff, 0xfb, 0x09, 0x87, 0xcf, 0x3f, 0x18, 0x8a,
+    0x3a, 0x59, 0x7e, 0x2c, 0xf3, 0xfd, 0x65, 0xff, 0xa5, 0x05, 0x38, 0x9a,
+    0x20, 0xc9, 0x65, 0xee, 0x66, 0x96, 0x5f, 0xc4, 0xe3, 0x07, 0x40, 0x59,
+    0x5b, 0x88, 0xb0, 0x98, 0x9b, 0xc8, 0x1c, 0x1c, 0xbf, 0xf9, 0xca, 0x5a,
+    0x7e, 0xbd, 0x19, 0xc5, 0x97, 0xff, 0x76, 0xda, 0xf6, 0x4d, 0xe6, 0xd4,
+    0xeb, 0x2f, 0xbf, 0x3e, 0x0d, 0x65, 0xff, 0x31, 0xa2, 0x68, 0x07, 0x6e,
+    0x2c, 0xa9, 0x8f, 0x7b, 0x6c, 0x8e, 0xff, 0xcd, 0xd7, 0x00, 0xe4, 0x39,
+    0x82, 0xb2, 0xf1, 0x86, 0x18, 0xb2, 0xff, 0xe2, 0x80, 0x60, 0xf9, 0x87,
+    0x8e, 0xd2, 0x0b, 0x34, 0x14, 0x04, 0x5a, 0xfd, 0x82, 0xff, 0x79, 0xb0,
+    0x70, 0x5f, 0x59, 0x47, 0x3d, 0x4d, 0xe4, 0x77, 0xfe, 0x70, 0x77, 0xe6,
+    0x98, 0xa0, 0x0b, 0x2b, 0x0f, 0x8d, 0x89, 0x2f, 0xed, 0x66, 0xef, 0x9c,
+    0x6b, 0x2f, 0xfd, 0x9d, 0x6c, 0x2c, 0xdf, 0xa6, 0xe2, 0xcb, 0xfb, 0xbf,
+    0x34, 0x17, 0x6b, 0x2a, 0x0f, 0xc3, 0x10, 0xaf, 0xf6, 0xa3, 0xed, 0xdb,
+    0x0d, 0x65, 0xfa, 0x53, 0x66, 0x76, 0xb2, 0xff, 0x06, 0x78, 0x61, 0xe1,
+    0xd6, 0x5b, 0x4b, 0x2b, 0x6a, 0x45, 0x04, 0x19, 0x91, 0x48, 0x86, 0x77,
+    0xe3, 0x30, 0xef, 0xd2, 0xcb, 0xe0, 0x63, 0xee, 0x2c, 0xa8, 0x3c, 0xd6,
+    0x29, 0xb9, 0xb8, 0xb2, 0xa4, 0xbc, 0x03, 0x91, 0x81, 0x1a, 0x83, 0xd2,
+    0x1b, 0x42, 0x97, 0xd1, 0xc9, 0x39, 0x01, 0x42, 0x83, 0x90, 0xc0, 0xfc,
+    0x23, 0xb6, 0xc8, 0x2f, 0x8a, 0x78, 0xf2, 0xcb, 0xf7, 0xbf, 0xc0, 0xee,
+    0x2c, 0xb8, 0xcd, 0xa9, 0x65, 0x41, 0xe4, 0xf4, 0x59, 0x7e, 0xff, 0xd8,
+    0xfc, 0x59, 0x73, 0xb2, 0xcb, 0xf7, 0x5f, 0xdf, 0x84, 0xb2, 0xfc, 0xff,
+    0x93, 0x8d, 0x65, 0x8d, 0xc3, 0xd1, 0x22, 0xab, 0xa5, 0xe5, 0x94, 0xc8,
+    0xcc, 0xf1, 0x43, 0xb3, 0x7c, 0x9e, 0xcc, 0xb2, 0xff, 0xff, 0x19, 0x05,
+    0x06, 0x94, 0x1a, 0x26, 0xdc, 0x6a, 0x3b, 0x85, 0x97, 0xf7, 0xa3, 0x67,
+    0x6d, 0x3a, 0xcb, 0xff, 0x39, 0xf3, 0x46, 0x9a, 0x12, 0xfa, 0xcb, 0xfd,
+    0x1f, 0xe7, 0x18, 0xa6, 0x59, 0x5e, 0x3f, 0x32, 0x40, 0xbf, 0xf1, 0x8e,
+    0x52, 0xf0, 0x63, 0xae, 0x2c, 0xbf, 0xff, 0x9c, 0xfa, 0xcd, 0xf0, 0x5f,
+    0xcf, 0x36, 0xbc, 0xeb, 0x2f, 0xf9, 0xff, 0xcf, 0xfd, 0xe5, 0xc5, 0x95,
+    0x32, 0x3d, 0x34, 0x43, 0xe4, 0x02, 0x5a, 0xbf, 0xf9, 0xf4, 0xf2, 0xce,
+    0x3f, 0xf2, 0x65, 0x97, 0xfd, 0xfd, 0x46, 0x75, 0xb1, 0xf8, 0xb2, 0xfe,
+    0xd3, 0xe8, 0xa2, 0x4b, 0x2f, 0xff, 0xf7, 0xff, 0x12, 0x27, 0xf4, 0x1f,
+    0xd8, 0x37, 0xe8, 0x96, 0x5f, 0xfe, 0xff, 0xb3, 0x7f, 0x9b, 0x67, 0x38,
+    0xc7, 0x59, 0x58, 0x8a, 0xd7, 0x5f, 0xbf, 0xe9, 0x36, 0xba, 0x82, 0x8e,
+    0x2c, 0xbf, 0xe8, 0xc9, 0xf5, 0x1f, 0x7f, 0xac, 0xa6, 0x3f, 0x00, 0x9c,
+    0x56, 0xd2, 0x5c, 0x53, 0x81, 0x01, 0xb2, 0xe4, 0x73, 0x1d, 0x9e, 0xf4,
+    0x87, 0xa3, 0xb2, 0x86, 0xcf, 0xe1, 0x23, 0x7f, 0x4a, 0x26, 0xc6, 0x02,
+    0xcb, 0x0b, 0xda, 0x9f, 0x24, 0xe3, 0x68, 0x15, 0x14, 0x35, 0x8a, 0xa2,
+    0xb8, 0x8f, 0xae, 0x78, 0xe2, 0x65, 0x0f, 0xc1, 0xca, 0x75, 0xca, 0x56,
+    0x89, 0xb0, 0xee, 0xee, 0x5f, 0x7f, 0x52, 0x89, 0x9a, 0x17, 0x53, 0x47,
+    0x5d, 0xa9, 0x56, 0x07, 0x8d, 0xe7, 0xd2, 0xac, 0xde, 0x3c, 0xc0, 0x46,
+    0xd6, 0x53, 0x98, 0xdc, 0xac, 0x10, 0xbf, 0x3d, 0xd6, 0x18, 0x5e, 0x18,
+    0xd7, 0xb7, 0x0e, 0xe1, 0x27, 0x23, 0xb7, 0x61, 0x2d, 0x7e, 0x97, 0x50,
+    0x43, 0x59, 0x52, 0x54, 0x96, 0x52, 0x88, 0xef, 0xff, 0x6b, 0x0c, 0x1f,
+    0xb2, 0x62, 0xcd, 0x49, 0x65, 0xed, 0x66, 0xe2, 0xcb, 0xff, 0x41, 0x82,
+    0x4f, 0xcc, 0x3c, 0x6e, 0x2c, 0xad, 0x22, 0xb8, 0xe9, 0x7f, 0x1f, 0xbf,
+    0xfe, 0x73, 0xc6, 0xbb, 0xd0, 0x4d, 0xd0, 0x5f, 0x8b, 0x2b, 0x11, 0x04,
+    0x13, 0x0b, 0xfd, 0xae, 0xc2, 0xe3, 0x3c, 0x2c, 0xbf, 0xfa, 0x34, 0x27,
+    0xdb, 0xfe, 0xc1, 0xb2, 0xcb, 0xfc, 0x5d, 0x03, 0x38, 0xfb, 0x8b, 0x2f,
+    0xf8, 0xa2, 0x71, 0x3d, 0xe7, 0xdc, 0x59, 0x7d, 0x18, 0x3e, 0x96, 0x56,
+    0x22, 0x57, 0xc6, 0xdb, 0xcf, 0x6f, 0xe7, 0x7f, 0xed, 0xb7, 0x6b, 0x2e,
+    0xdf, 0xba, 0xb2, 0xff, 0xff, 0x98, 0x98, 0x1c, 0xd6, 0x77, 0xe8, 0xf6,
+    0x6b, 0x50, 0x6a, 0xca, 0x84, 0xfc, 0x27, 0x34, 0xc8, 0x6c, 0xe8, 0xc4,
+    0x06, 0x1f, 0x1c, 0xbc, 0x2a, 0x6d, 0x52, 0x59, 0x79, 0xf5, 0x3a, 0xcb,
+    0xfd, 0x9f, 0xe3, 0x77, 0x84, 0xb2, 0xe3, 0x0c, 0x59, 0x79, 0xfb, 0x17,
+    0xd9, 0xf4, 0x10, 0xe9, 0x86, 0x57, 0xed, 0x3c, 0x9b, 0xcb, 0x2f, 0xfe,
+    0xd7, 0x3c, 0xc6, 0x79, 0xa7, 0x72, 0x59, 0x50, 0x7d, 0x8e, 0x4f, 0x7e,
+    0xc3, 0xf9, 0xc6, 0xb2, 0xc2, 0xf6, 0xa7, 0xdf, 0xbe, 0x88, 0x46, 0x48,
+    0x84, 0x68, 0x39, 0x2c, 0x40, 0xd2, 0xce, 0xe9, 0x31, 0xf3, 0x17, 0xea,
+    0x15, 0x7e, 0x21, 0x7b, 0xcb, 0xbb, 0x28, 0xd6, 0xf9, 0x28, 0x4b, 0xeb,
+    0x9b, 0xe1, 0x1e, 0x64, 0x2c, 0x37, 0x48, 0x2a, 0x50, 0x93, 0x70, 0x1d,
+    0x63, 0x01, 0xd4, 0xa7, 0xad, 0x1c, 0x9e, 0x12, 0x7e, 0x9c, 0x9f, 0x04,
+    0x62, 0xe5, 0x1a, 0xaf, 0x29, 0x60, 0x9f, 0xa5, 0x0e, 0x86, 0xf8, 0x50,
+    0xaf, 0xd8, 0x3f, 0x41, 0x8b, 0x2f, 0xee, 0x44, 0xd2, 0x69, 0x96, 0x5f,
+    0xf7, 0xe0, 0x98, 0x19, 0xd7, 0xd6, 0x5f, 0x6d, 0xb9, 0x01, 0x65, 0xd1,
+    0x3e, 0x1e, 0xe0, 0x87, 0x14, 0x48, 0xe1, 0xe1, 0x40, 0x90, 0x8b, 0xbf,
+    0xcf, 0xae, 0xc5, 0xcb, 0x3a, 0x59, 0x7f, 0xfa, 0x4f, 0xc1, 0x65, 0x19,
+    0xf8, 0xea, 0x4b, 0x2f, 0x1a, 0xda, 0x59, 0x74, 0x01, 0x65, 0xf7, 0xff,
+    0x07, 0x59, 0x79, 0x86, 0x2d, 0x8f, 0x57, 0xc3, 0xa2, 0x0b, 0x5f, 0xfa,
+    0x24, 0x2c, 0x48, 0x30, 0x49, 0xb8, 0xb2, 0xcd, 0xda, 0x21, 0xc0, 0x85,
+    0x42, 0xd3, 0xbc, 0x9c, 0xd5, 0x8d, 0xff, 0x19, 0x3d, 0xff, 0x9f, 0xb1,
+    0x61, 0x03, 0x4b, 0x24, 0xb2, 0xfd, 0xae, 0xdd, 0xfb, 0x54, 0x46, 0xab,
+    0xff, 0xef, 0x31, 0x8e, 0x5d, 0xea, 0x1a, 0x4f, 0xc5, 0x97, 0xdf, 0xd3,
+    0x74, 0xb2, 0xfc, 0x1f, 0x86, 0x68, 0x59, 0x7e, 0x61, 0xbe, 0x7d, 0x65,
+    0xe3, 0x7a, 0xe2, 0xcb, 0x0b, 0x9d, 0x35, 0x7c, 0x41, 0xec, 0xd9, 0x93,
+    0xfc, 0x46, 0xe5, 0x3f, 0x26, 0xbf, 0xff, 0xdb, 0xe0, 0xbe, 0x2d, 0xf7,
+    0xb8, 0xf0, 0x6e, 0x77, 0x1a, 0xcb, 0xf6, 0xbb, 0x77, 0xed, 0x51, 0x52,
+    0xad, 0xda, 0xa2, 0x1a, 0x52, 0xca, 0x73, 0x54, 0x01, 0xfb, 0x0b, 0xc4,
+    0x40, 0x3b, 0x05, 0xf7, 0xdf, 0xa0, 0x2c, 0xbf, 0xfd, 0x9e, 0x61, 0x3e,
+    0xc4, 0x19, 0x67, 0x16, 0x5f, 0xec, 0xf1, 0x3f, 0xff, 0x0b, 0x2f, 0x13,
+    0x8b, 0x74, 0x4e, 0xfc, 0x8c, 0x44, 0x9b, 0xdb, 0x5e, 0xd2, 0x14, 0x2c,
+    0xbf, 0x39, 0xe7, 0x7d, 0xc5, 0x97, 0xdd, 0xbb, 0xf6, 0xa8, 0x8f, 0x97,
+    0x0e, 0x16, 0x56, 0x8f, 0x18, 0xe6, 0x17, 0xfb, 0x8d, 0xe3, 0x1f, 0x52,
+    0x59, 0x78, 0x7e, 0x0a, 0xcb, 0xba, 0xe2, 0xcb, 0x1a, 0xb2, 0xb0, 0xd5,
+    0x6d, 0x8c, 0x5f, 0xfc, 0x1d, 0x03, 0xbf, 0x34, 0xc5, 0x00, 0x59, 0x7f,
+    0xa5, 0x9b, 0x8e, 0x40, 0x14, 0x2c, 0xbd, 0xf8, 0xc5, 0x97, 0xff, 0x7e,
+    0x50, 0x6e, 0xc8, 0xff, 0x20, 0x0b, 0x2c, 0x58, 0x7c, 0x4e, 0x37, 0x74,
+    0x85, 0xed, 0x6a, 0x98, 0xe7, 0x2c, 0xc7, 0x1e, 0x88, 0x9c, 0xd0, 0x08,
+    0xfc, 0x23, 0xfa, 0x30, 0x90, 0x9b, 0xae, 0xd5, 0x9f, 0x3c, 0xaa, 0x5b,
+    0xf8, 0x5f, 0x1e, 0x3a, 0x92, 0xcb, 0xf7, 0xfd, 0x04, 0x6a, 0xcb, 0xfb,
+    0x4e, 0x07, 0xcd, 0x2c, 0xbe, 0xf0, 0x4a, 0x75, 0x97, 0xfe, 0x79, 0xe3,
+    0xcd, 0xa6, 0x83, 0xac, 0xbf, 0xd1, 0xac, 0x2f, 0xe7, 0x96, 0x5d, 0x82,
+    0xe1, 0x1c, 0xa3, 0x28, 0xf1, 0x66, 0xd9, 0x18, 0x87, 0xb4, 0x6a, 0x6d,
+    0xe7, 0x8c, 0x56, 0x85, 0xa7, 0x8d, 0x11, 0xcd, 0xdf, 0xff, 0xe0, 0xe8,
+    0xd7, 0xe6, 0x0e, 0x3a, 0xe0, 0x9f, 0x35, 0x8d, 0x59, 0x7d, 0x1c, 0x7e,
+    0x2c, 0xa9, 0x22, 0x1e, 0x66, 0x6b, 0xc6, 0x1b, 0xda, 0xcb, 0xf7, 0x5d,
+    0x4b, 0x3e, 0xb2, 0xb8, 0x79, 0x41, 0x20, 0xbf, 0xfd, 0xb4, 0xcd, 0x33,
+    0x72, 0x71, 0x8a, 0x36, 0x6c, 0xf6, 0xda, 0xcb, 0xff, 0x05, 0xf5, 0x22,
+    0xce, 0x46, 0x96, 0x5f, 0x76, 0xef, 0xda, 0xa2, 0xc7, 0x5f, 0xa3, 0xc4,
+    0xe2, 0x2c, 0xad, 0x1e, 0xb9, 0xcc, 0x2f, 0xf6, 0x31, 0x4f, 0xfc, 0xf2,
+    0xcb, 0x9f, 0x8b, 0x2f, 0xe9, 0xc4, 0xd6, 0xb3, 0x4b, 0x2f, 0x1f, 0x90,
+    0xb2, 0xa4, 0x7c, 0x4e, 0x2c, 0x13, 0x0b, 0xfe, 0x27, 0x37, 0xcd, 0x05,
+    0x3a, 0xcb, 0xf8, 0xbf, 0xa0, 0xc1, 0xd6, 0x5f, 0xff, 0x89, 0xcd, 0xd9,
+    0xf3, 0x60, 0xa5, 0x9e, 0x63, 0xac, 0xa7, 0x44, 0x20, 0x4b, 0x6f, 0xe0,
+    0x3f, 0xf9, 0x06, 0xac, 0xbb, 0x7e, 0x2c, 0xbf, 0xcd, 0xf8, 0xd1, 0xbe,
+    0x65, 0x97, 0xff, 0xd2, 0x9f, 0x69, 0xc6, 0xd1, 0x3f, 0x7a, 0xd9, 0xb3,
+    0xdb, 0x6b, 0x2f, 0xfb, 0x37, 0xc4, 0xba, 0x96, 0x7d, 0x65, 0x62, 0x63,
+    0x6c, 0x5c, 0xe3, 0x00, 0x33, 0x26, 0x7b, 0x9a, 0x4b, 0x2f, 0xf6, 0x17,
+    0xb3, 0xf0, 0x35, 0x97, 0xec, 0xdf, 0xe7, 0x92, 0xcb, 0x7d, 0x8f, 0x68,
+    0x8c, 0x68, 0x68, 0x96, 0xc7, 0x0b, 0xfe, 0x93, 0x7c, 0x4d, 0x47, 0xa1,
+    0x65, 0xf9, 0xbf, 0xf6, 0xfa, 0xcb, 0xff, 0xf0, 0x49, 0xcd, 0xf9, 0xb0,
+    0x52, 0xcf, 0x31, 0xd6, 0x5f, 0x6b, 0x59, 0xb6, 0xb2, 0xfd, 0xa0, 0x37,
+    0xa1, 0x65, 0x6c, 0x4c, 0x07, 0x0e, 0x4e, 0x4e, 0xea, 0xa1, 0x25, 0xbf,
+    0x66, 0xb3, 0x26, 0x59, 0x61, 0x70, 0xbd, 0xaf, 0x3b, 0x74, 0x88, 0x86,
+    0xc9, 0x90, 0x94, 0x34, 0x89, 0xa1, 0x29, 0x31, 0x71, 0xe1, 0x79, 0xe8,
+    0xcf, 0x4a, 0x1b, 0xbc, 0x8c, 0x8c, 0x44, 0xbb, 0xdd, 0x7f, 0x16, 0x5e,
+    0x6d, 0x4c, 0xb2, 0xfa, 0x5f, 0x08, 0xd6, 0x51, 0xa7, 0x81, 0xd0, 0xed,
+    0xff, 0xff, 0xfb, 0xd8, 0xed, 0xcf, 0x60, 0x36, 0x73, 0x07, 0x87, 0x6e,
+    0xa4, 0x50, 0x68, 0x16, 0x5f, 0xc4, 0xe6, 0x7f, 0x3c, 0xb2, 0xb6, 0xa4,
+    0x58, 0xcd, 0x08, 0x4b, 0x8e, 0x6a, 0xca, 0x14, 0x9e, 0x36, 0xd3, 0x2e,
+    0xbf, 0x16, 0x79, 0xfe, 0xb2, 0xf0, 0xab, 0xda, 0x80, 0xb2, 0x85, 0x27,
+    0x9d, 0xb4, 0xc9, 0xaf, 0xfd, 0xb5, 0x6d, 0x62, 0x90, 0xe6, 0x8a, 0x00,
+    0xb2, 0xfe, 0xce, 0xe3, 0xed, 0xbd, 0x65, 0xff, 0xb0, 0xce, 0x63, 0x73,
+    0xf9, 0xb8, 0xb2, 0xbc, 0x7e, 0x04, 0x5f, 0x7b, 0xc1, 0x1a, 0xcb, 0xf8,
+    0x78, 0x7d, 0xaf, 0x69, 0x6d, 0x6b, 0x2f, 0xfa, 0x26, 0x6f, 0xf1, 0x8a,
+    0x65, 0x97, 0xff, 0xbb, 0x80, 0x7b, 0x71, 0x8f, 0xfe, 0x3f, 0x4b, 0x2f,
+    0x6e, 0x8e, 0x16, 0x53, 0x1f, 0x70, 0x53, 0xef, 0xf3, 0x83, 0x8f, 0xff,
+    0xba, 0xcb, 0x8f, 0xda, 0xcb, 0xfe, 0x71, 0xb7, 0x52, 0xfb, 0x69, 0x65,
+    0xff, 0xa3, 0x40, 0x2c, 0x9a, 0x4d, 0x32, 0xca, 0x1a, 0xa0, 0x6c, 0x21,
+    0x61, 0xdd, 0x1f, 0x7a, 0x14, 0xe4, 0x43, 0xf3, 0x2d, 0xe3, 0x1b, 0xa7,
+    0x37, 0xfc, 0x66, 0xb0, 0x9f, 0xa9, 0x71, 0x65, 0xc4, 0x6a, 0xcb, 0xb0,
+    0x6b, 0x2b, 0x0f, 0x9d, 0xce, 0xb7, 0x8b, 0xdf, 0xbc, 0xe7, 0x82, 0x59,
+    0x7d, 0xcf, 0x31, 0x8b, 0x2f, 0xfe, 0x9b, 0x71, 0xa7, 0xf6, 0x4c, 0x58,
+    0x62, 0xcb, 0xfb, 0xb7, 0xd6, 0xdb, 0xf9, 0x65, 0xde, 0xf2, 0xcb, 0xf4,
+    0x19, 0xfc, 0xf2, 0xcb, 0x84, 0xc5, 0x97, 0xc3, 0xce, 0xbe, 0xb2, 0xa0,
+    0xdd, 0x30, 0xbd, 0x6c, 0x4d, 0x73, 0x09, 0x8d, 0x23, 0x64, 0xa1, 0x59,
+    0x89, 0x0b, 0xf1, 0x8a, 0xfe, 0x28, 0x04, 0xbb, 0x9d, 0x65, 0xff, 0xd1,
+    0x1b, 0xbe, 0xc7, 0x1e, 0x61, 0xd6, 0x5d, 0xfe, 0x4c, 0x7e, 0x7e, 0x2f,
+    0xb7, 0x6b, 0x2f, 0x03, 0x6b, 0xf2, 0xca, 0xda, 0x46, 0xd3, 0x82, 0x57,
+    0xc1, 0xe7, 0xb1, 0x65, 0x68, 0xf2, 0x48, 0x9e, 0xff, 0xf6, 0x6e, 0xe7,
+    0x7f, 0xea, 0x58, 0x40, 0x75, 0x97, 0xff, 0xff, 0x31, 0x6f, 0xc1, 0x93,
+    0xbe, 0xfc, 0xdc, 0xfe, 0xe3, 0x7c, 0xa0, 0x0b, 0x2f, 0x30, 0x40, 0xb2,
+    0xdd, 0x6e, 0x22, 0x4e, 0x67, 0x7b, 0xc7, 0x6d, 0x2c, 0xac, 0x3c, 0xa0,
+    0x17, 0x5e, 0xc7, 0x25, 0x97, 0xbd, 0x13, 0x2c, 0xb9, 0xbe, 0xc6, 0xdd,
+    0xc6, 0xae, 0x90, 0xd6, 0x5f, 0xfd, 0x86, 0x70, 0xb2, 0x69, 0x04, 0xbe,
+    0xb2, 0xfa, 0x5b, 0x8c, 0x75, 0x97, 0xdc, 0x77, 0xdc, 0x59, 0x7e, 0xcf,
+    0x6e, 0x31, 0x39, 0xe4, 0xfc, 0x96, 0xd8, 0x48, 0xcd, 0xdf, 0x08, 0xeb,
+    0xff, 0xde, 0x8e, 0xb2, 0x72, 0x08, 0x7f, 0x1e, 0x59, 0x7f, 0xcd, 0xdf,
+    0x9b, 0xfc, 0x7e, 0x96, 0x5f, 0x8b, 0x07, 0x9e, 0xed, 0x10, 0xbe, 0x4b,
+    0xbf, 0xdd, 0xb1, 0x99, 0x33, 0xee, 0x2c, 0xad, 0x1f, 0xbf, 0x8f, 0xef,
+    0xff, 0xfc, 0x58, 0x72, 0x08, 0x0d, 0xdc, 0x62, 0x1e, 0x4e, 0x60, 0x5e,
+    0x75, 0x95, 0x08, 0x93, 0xc2, 0x2b, 0xff, 0xfd, 0x06, 0x7b, 0x34, 0xe7,
+    0xcf, 0xfb, 0x30, 0xf9, 0xda, 0xcb, 0xff, 0xe9, 0xb3, 0x74, 0xb3, 0x79,
+    0x60, 0x0f, 0x12, 0x59, 0x50, 0x8b, 0x3c, 0x60, 0xbf, 0xe7, 0xe8, 0xb3,
+    0xfc, 0xc3, 0x16, 0x54, 0x2f, 0x24, 0x64, 0x2b, 0x3b, 0x21, 0x68, 0xca,
+    0xb7, 0x16, 0x26, 0x2a, 0xd4, 0x39, 0x3d, 0x1d, 0xe9, 0x43, 0x50, 0x24,
+    0x37, 0xef, 0x36, 0x83, 0x25, 0x97, 0xfd, 0x3b, 0x7a, 0x67, 0x93, 0x79,
+    0x65, 0xfb, 0x40, 0xdb, 0x0f, 0xd6, 0x5f, 0xed, 0xfe, 0x61, 0xfb, 0x38,
+    0xb2, 0xff, 0xff, 0x82, 0x1e, 0x8b, 0x37, 0xec, 0x1e, 0x7e, 0x59, 0xef,
+    0x3c, 0x96, 0x5f, 0xf1, 0xf9, 0xec, 0xf9, 0x41, 0xd6, 0x5e, 0x2c, 0xe1,
+    0x22, 0x8f, 0x6d, 0xae, 0x9d, 0x30, 0xdd, 0xf0, 0xd8, 0xbf, 0xfd, 0xad,
+    0x44, 0xf8, 0x67, 0x52, 0xf8, 0x46, 0xb2, 0xfb, 0x30, 0x8d, 0x59, 0x7f,
+    0xe6, 0x37, 0x24, 0xcf, 0xbf, 0xcc, 0xb2, 0xd0, 0xc8, 0xae, 0xd2, 0x77,
+    0x88, 0x6a, 0x15, 0x22, 0xb4, 0x67, 0x3e, 0x86, 0xc5, 0xfe, 0x2f, 0x8a,
+    0x1f, 0xe1, 0x85, 0x97, 0xf4, 0x8b, 0x3a, 0xfb, 0xac, 0xbf, 0x87, 0xf3,
+    0x58, 0x86, 0xb2, 0xa1, 0x12, 0x2e, 0x6c, 0x12, 0xdb, 0xc3, 0xc2, 0x59,
+    0x7f, 0x9e, 0x7f, 0xf1, 0xdf, 0x71, 0x65, 0x4e, 0x7a, 0x3b, 0xc6, 0xef,
+    0xfc, 0xda, 0xef, 0xcd, 0x33, 0xbc, 0x96, 0x5f, 0xfd, 0xe8, 0x3f, 0x7e,
+    0x6f, 0xe6, 0x1d, 0x65, 0xf6, 0xa7, 0x83, 0x56, 0x59, 0x96, 0x5c, 0xe6,
+    0xe1, 0xb4, 0xf9, 0x25, 0x42, 0x29, 0x09, 0xe2, 0xff, 0xf1, 0x67, 0x84,
+    0xe7, 0x02, 0x7e, 0x3f, 0x4b, 0x2f, 0x81, 0x8c, 0xeb, 0x2f, 0x01, 0x84,
+    0x59, 0x7f, 0xff, 0xfa, 0x0b, 0xfc, 0x6f, 0x31, 0xc7, 0x1e, 0xcd, 0xfb,
+    0x8c, 0x43, 0xc9, 0xd6, 0x57, 0x69, 0x81, 0xba, 0x60, 0x08, 0x3e, 0x3b,
+    0x7f, 0xcf, 0xa9, 0xfc, 0xd9, 0xa9, 0x96, 0x5f, 0xfc, 0xee, 0x40, 0xe6,
+    0x6e, 0x4c, 0xee, 0xb2, 0xff, 0xff, 0xff, 0x63, 0x7b, 0x71, 0x8b, 0x3f,
+    0xf8, 0x9c, 0x65, 0x10, 0x0f, 0xcb, 0x08, 0x9e, 0x4b, 0x2b, 0xb4, 0xc2,
+    0xe6, 0x3a, 0xfa, 0x2d, 0xfa, 0x5c, 0x9f, 0x0c, 0x59, 0x7b, 0x35, 0x3a,
+    0xcb, 0xce, 0x53, 0x2c, 0xaf, 0x1b, 0x97, 0x1d, 0xbc, 0xef, 0xda, 0xa2,
+    0xd0, 0x5f, 0xff, 0xec, 0x1c, 0x76, 0xc5, 0x3f, 0x3b, 0xf3, 0x0c, 0x78,
+    0x4b, 0x2f, 0xcf, 0xa9, 0xf0, 0xc5, 0x97, 0x9c, 0xcd, 0xdd, 0x88, 0x8a,
+    0xed, 0x86, 0xfe, 0x04, 0x14, 0x7f, 0x8b, 0x2a, 0x13, 0x9d, 0x1b, 0x1f,
+    0x64, 0x1a, 0x85, 0x98, 0x0e, 0xef, 0x49, 0x80, 0xb2, 0xff, 0xba, 0xfc,
+    0x1b, 0xb8, 0xc1, 0x1a, 0xcb, 0xf9, 0xbf, 0xe7, 0x23, 0x56, 0x54, 0xc8,
+    0x87, 0x71, 0xce, 0x1f, 0x5e, 0x08, 0x74, 0xb2, 0xf1, 0x46, 0x96, 0x5d,
+    0xa9, 0xa6, 0x37, 0x1c, 0x1d, 0xbf, 0xff, 0xdc, 0x72, 0xf4, 0x6f, 0xf6,
+    0x7f, 0x1c, 0xbb, 0xc1, 0xac, 0xbf, 0xff, 0xcd, 0x1f, 0x6f, 0x47, 0x3d,
+    0x9c, 0xd6, 0x77, 0x9f, 0x59, 0x7f, 0xf4, 0x03, 0x85, 0x9b, 0x83, 0x8f,
+    0xf1, 0x65, 0x9c, 0x91, 0x4b, 0xc5, 0xfb, 0x6a, 0x13, 0x2c, 0xf4, 0x60,
+    0xb7, 0xf4, 0xfb, 0x26, 0x94, 0x4e, 0xb2, 0xb1, 0x3b, 0xd6, 0x8d, 0x6d,
+    0xcb, 0xef, 0xc3, 0x89, 0x98, 0xeb, 0x2f, 0xe3, 0x0b, 0x27, 0x12, 0x4b,
+    0x2f, 0xc3, 0xc0, 0x3c, 0x2c, 0xbf, 0xff, 0xf3, 0xea, 0x5c, 0x61, 0xe6,
+    0xa7, 0x6e, 0x79, 0xc1, 0xcc, 0x25, 0x95, 0x88, 0x91, 0xe1, 0x35, 0x32,
+    0x38, 0xc3, 0x0c, 0x1b, 0xf4, 0xe7, 0x77, 0x25, 0x97, 0xfc, 0xe0, 0xc6,
+    0xe7, 0x20, 0x0b, 0x2a, 0x0f, 0x7b, 0x84, 0xf7, 0xfe, 0x1e, 0xde, 0x70,
+    0x7e, 0x6d, 0x4e, 0xb2, 0xff, 0xfb, 0x0c, 0xf9, 0xe3, 0x3f, 0xec, 0xc2,
+    0xed, 0x65, 0x42, 0x24, 0xbc, 0x87, 0x7b, 0x6a, 0x14, 0xed, 0x0b, 0x2f,
+    0xb0, 0xa4, 0xcb, 0x2f, 0xfe, 0xcd, 0x69, 0xe4, 0x21, 0x3f, 0xf8, 0xb2,
+    0xa0, 0xf9, 0x24, 0x41, 0x66, 0xd2, 0x2c, 0x3f, 0x08, 0xfb, 0xfd, 0x37,
+    0xa3, 0xfe, 0x89, 0x96, 0x54, 0x33, 0xf7, 0xa7, 0x28, 0x94, 0xa7, 0xf1,
+    0xc3, 0x33, 0x1f, 0xcd, 0x25, 0xee, 0x1c, 0x6d, 0x19, 0x26, 0xe4, 0x69,
+    0x3a, 0x8f, 0x40, 0xf0, 0xd7, 0xf4, 0xa2, 0x57, 0x34, 0x28, 0xc2, 0xf9,
+    0x08, 0x5f, 0xc2, 0xcf, 0x7c, 0x34, 0x84, 0x2d, 0xbf, 0xff, 0x37, 0x52,
+    0x28, 0x71, 0xb7, 0x79, 0xe7, 0xfa, 0xcb, 0x01, 0x65, 0xe1, 0xfa, 0x16,
+    0x5f, 0x67, 0x5f, 0x75, 0x96, 0xe6, 0xc3, 0x7c, 0x43, 0x96, 0x0e, 0x8f,
+    0xdf, 0xe9, 0xf6, 0xc5, 0x97, 0xff, 0x87, 0xe8, 0x86, 0xff, 0x18, 0xba,
+    0x92, 0xcb, 0x04, 0x67, 0xb2, 0x42, 0x17, 0x61, 0xd6, 0x5f, 0xff, 0x1a,
+    0xda, 0xce, 0xbf, 0xe6, 0x12, 0x07, 0x0b, 0x2f, 0xfd, 0xd6, 0xff, 0x6e,
+    0x37, 0xca, 0x0e, 0xb2, 0xb1, 0x12, 0xae, 0xa3, 0x7a, 0x27, 0x65, 0x95,
+    0x8a, 0x96, 0xcd, 0x86, 0x5b, 0x42, 0x07, 0x44, 0xef, 0x0a, 0xb2, 0x21,
+    0xbf, 0xff, 0xed, 0x60, 0xc9, 0xdf, 0x7f, 0x33, 0x73, 0xe5, 0x99, 0xa9,
+    0x96, 0x5f, 0x8b, 0xfb, 0x0f, 0x3a, 0xcb, 0xe0, 0x9d, 0xfe, 0xb2, 0xff,
+    0xfc, 0xd3, 0x96, 0x6f, 0xf3, 0x7f, 0xa9, 0x41, 0x4c, 0xb2, 0xa1, 0x14,
+    0xa3, 0x2b, 0xf1, 0x15, 0xff, 0xff, 0x9b, 0x4d, 0x9b, 0xf2, 0x7c, 0x6f,
+    0xc1, 0xc9, 0xcd, 0xf3, 0x2c, 0xbf, 0xfa, 0x50, 0xf2, 0xd8, 0xd3, 0x36,
+    0x12, 0xcb, 0xfe, 0x98, 0xa0, 0xfe, 0x8d, 0xe7, 0x59, 0x7f, 0xfa, 0x4d,
+    0xa0, 0x3f, 0xf2, 0x69, 0x37, 0xd6, 0x5f, 0xbe, 0xdb, 0x79, 0x3a, 0xcb,
+    0xdb, 0x56, 0xd7, 0xb5, 0x2c, 0xbf, 0xdc, 0xcf, 0x37, 0x03, 0x3a, 0xcb,
+    0xe6, 0xdb, 0xc9, 0xd6, 0x5c, 0xfd, 0x6c, 0x45, 0x86, 0xd3, 0x2b, 0xe1,
+    0x67, 0xcd, 0x2e, 0x7e, 0x96, 0x56, 0x27, 0x3b, 0xd1, 0xdf, 0x21, 0xf5,
+    0xf5, 0x1b, 0x30, 0xd5, 0x5f, 0x76, 0x5f, 0xd3, 0x5f, 0xe3, 0xe1, 0xbf,
+    0xef, 0x37, 0xf8, 0xfd, 0x00, 0xc5, 0x97, 0x86, 0xf3, 0xac, 0xbb, 0x53,
+    0xf6, 0x7b, 0x02, 0x1d, 0xdf, 0xff, 0x06, 0x7d, 0x37, 0xe7, 0x0e, 0xa5,
+    0xcd, 0xc6, 0x59, 0x4c, 0xb9, 0xef, 0xe9, 0x79, 0x8f, 0x0a, 0x42, 0x31,
+    0xbf, 0xb3, 0xf8, 0x4f, 0x32, 0xcb, 0xfb, 0x4d, 0xd9, 0x47, 0x96, 0x5f,
+    0xf0, 0x5f, 0xef, 0x27, 0xea, 0x4b, 0x2f, 0xce, 0x26, 0x75, 0xf5, 0x97,
+    0x6b, 0x8b, 0x2a, 0x48, 0xd2, 0xc2, 0xce, 0xcb, 0x78, 0x73, 0xb6, 0x53,
+    0x7f, 0x98, 0x78, 0x7d, 0x98, 0x35, 0x97, 0x3f, 0x16, 0x5f, 0x98, 0xcd,
+    0xac, 0x53, 0xb5, 0xac, 0xbf, 0xfe, 0x0e, 0xb5, 0x05, 0x86, 0xb7, 0xbd,
+    0x82, 0x2c, 0xb0, 0xad, 0x65, 0x68, 0xf9, 0x42, 0xa1, 0x7d, 0x1a, 0x89,
+    0x96, 0x5e, 0x28, 0x3a, 0xcb, 0x42, 0xca, 0x98, 0xd5, 0x9c, 0x6e, 0xff,
+    0x1c, 0x25, 0xfe, 0x07, 0x4b, 0x2a, 0x49, 0xd5, 0x8c, 0xd0, 0xd1, 0x6d,
+    0x42, 0x70, 0xe4, 0x44, 0x9b, 0xb6, 0x45, 0x6d, 0x2c, 0xbd, 0xac, 0xc5,
+    0x94, 0x03, 0x59, 0xba, 0x23, 0x7f, 0xff, 0x75, 0xc8, 0x96, 0xb2, 0x78,
+    0xd6, 0x7d, 0xba, 0x31, 0x65, 0x8d, 0x59, 0x53, 0x9f, 0x81, 0x2f, 0x5f,
+    0xba, 0x96, 0xb9, 0xc5, 0x95, 0x07, 0x99, 0x84, 0x57, 0xff, 0x6e, 0x84,
+    0xfe, 0x83, 0xcd, 0xb8, 0xc3, 0x59, 0x7f, 0xba, 0xf6, 0x4d, 0x33, 0xf1,
+    0x65, 0x32, 0x20, 0x9d, 0x32, 0xfe, 0x2e, 0xa5, 0xf0, 0x8d, 0x65, 0xfb,
+    0x73, 0x08, 0xec, 0xb2, 0xa0, 0xf6, 0x1c, 0xbe, 0xf8, 0xa3, 0x0c, 0x59,
+    0x78, 0xb0, 0x0b, 0x2f, 0xff, 0x9b, 0x66, 0xe3, 0x4f, 0xb3, 0xd9, 0x31,
+    0x61, 0x8b, 0x2f, 0xa6, 0xcc, 0x9d, 0x65, 0xfb, 0x8d, 0xf2, 0x85, 0x97,
+    0x67, 0xb8, 0x79, 0x3f, 0x23, 0xb1, 0x82, 0x94, 0xc2, 0xb4, 0x43, 0xe1,
+    0xbf, 0xc2, 0x86, 0xfe, 0x33, 0xe5, 0x07, 0xe2, 0xca, 0x73, 0xfc, 0x0a,
+    0x75, 0xfa, 0x6f, 0x60, 0x1d, 0x65, 0x42, 0xbe, 0xa9, 0x43, 0x83, 0x21,
+    0x45, 0xe7, 0x92, 0x8e, 0x9b, 0x79, 0x0d, 0xff, 0xff, 0x7b, 0x3f, 0xf7,
+    0x9f, 0x3e, 0x76, 0x09, 0x4c, 0x58, 0x62, 0xcb, 0xff, 0x3e, 0xbf, 0x9d,
+    0x01, 0xde, 0x65, 0x97, 0xff, 0xfc, 0x4e, 0x0e, 0x77, 0xe6, 0x2c, 0x69,
+    0x7a, 0x3c, 0xc6, 0xac, 0xa1, 0xa6, 0x17, 0x33, 0x3f, 0xcf, 0xef, 0xef,
+    0xfb, 0x25, 0x20, 0x2c, 0xa8, 0x3e, 0x02, 0x32, 0xbf, 0xc4, 0xef, 0xbe,
+    0x5b, 0xc0, 0xb2, 0xff, 0xfb, 0x91, 0x37, 0xa3, 0x79, 0x60, 0xfd, 0x1c,
+    0x59, 0x43, 0x44, 0x3f, 0xcd, 0xaf, 0xbb, 0x80, 0x71, 0x65, 0xfd, 0xe6,
+    0x33, 0x6e, 0x00, 0xb2, 0xff, 0xf1, 0xdb, 0xa9, 0x70, 0xb3, 0xbf, 0x84,
+    0x96, 0x5f, 0xee, 0x66, 0xe0, 0x1d, 0xe6, 0x59, 0x58, 0x8f, 0x8e, 0xc8,
+    0xe6, 0x23, 0x39, 0x8f, 0x92, 0xef, 0xfe, 0xff, 0xb3, 0x7e, 0xe3, 0x04,
+    0x78, 0x35, 0x97, 0xfc, 0xff, 0x2c, 0x1f, 0xb3, 0xeb, 0x2f, 0xe0, 0x34,
+    0xb8, 0xc3, 0x59, 0x50, 0xaa, 0x5f, 0x23, 0x9f, 0x64, 0xb7, 0x49, 0x09,
+    0xbd, 0xf8, 0xbb, 0x7e, 0x32, 0xcb, 0xff, 0xfb, 0x45, 0x11, 0xd6, 0xce,
+    0x7c, 0xa0, 0x7e, 0x8f, 0xac, 0xb9, 0xbc, 0xb2, 0xfa, 0x44, 0xe2, 0x2c,
+    0xbf, 0xc3, 0x70, 0x6b, 0x4e, 0x05, 0x97, 0xda, 0xef, 0x70, 0xc5, 0x97,
+    0xc6, 0x8a, 0x5c, 0xc5, 0x95, 0x87, 0xa0, 0xe5, 0x14, 0xc8, 0xa3, 0x28,
+    0x41, 0xd4, 0x27, 0x09, 0x84, 0xfb, 0x8b, 0x8e, 0x2c, 0x18, 0x62, 0xdf,
+    0xfd, 0xa2, 0xcd, 0xfa, 0xc6, 0xf4, 0x0d, 0x65, 0xe7, 0xdc, 0x65, 0x97,
+    0xfe, 0x13, 0xe6, 0xb1, 0xb1, 0x85, 0x0b, 0x2d, 0xd2, 0xcb, 0xff, 0xcc,
+    0xef, 0x37, 0xfd, 0x92, 0xf3, 0x6f, 0x59, 0x7f, 0xfd, 0x9f, 0xe6, 0x19,
+    0x9e, 0x6d, 0x06, 0x00, 0xb2, 0xa1, 0x15, 0x9b, 0x82, 0x44, 0x97, 0x7e,
+    0x13, 0xe5, 0x00, 0x59, 0x50, 0x9d, 0x37, 0x48, 0x9a, 0x1e, 0x3c, 0x3a,
+    0xf7, 0x98, 0xdf, 0xa3, 0xf9, 0xe8, 0x59, 0x7f, 0xe0, 0x94, 0xde, 0xc2,
+    0xc6, 0x1a, 0xcb, 0xd3, 0xcd, 0x8b, 0x2f, 0xff, 0xb7, 0xe7, 0x7a, 0x77,
+    0xea, 0x5c, 0xdc, 0x62, 0x59, 0x50, 0x7e, 0x6e, 0x3d, 0x7f, 0xf6, 0xe3,
+    0x67, 0xa3, 0x7f, 0x3d, 0x1d, 0x2c, 0xa6, 0x4c, 0x67, 0xd0, 0xb0, 0xe1,
+    0x05, 0xf4, 0x7f, 0x0e, 0xb2, 0xff, 0xdc, 0xf6, 0x19, 0xe6, 0x30, 0xb1,
+    0x65, 0x00, 0xf8, 0x37, 0x90, 0xdf, 0xba, 0x91, 0x41, 0xd6, 0x5f, 0xff,
+    0xff, 0xe3, 0xee, 0x37, 0x81, 0x8e, 0x5d, 0xe7, 0x52, 0xe3, 0x7f, 0x8d,
+    0xd4, 0x8a, 0x3d, 0x0b, 0x2f, 0xec, 0xf3, 0x66, 0xa6, 0x59, 0x7f, 0xec,
+    0xea, 0x5c, 0x6f, 0xb9, 0x62, 0xcb, 0xfd, 0x87, 0xf6, 0x4c, 0xf3, 0x2c,
+    0xbf, 0x34, 0xfe, 0x88, 0xd8, 0x7e, 0x3f, 0x3d, 0xad, 0x88, 0xde, 0xc8,
+    0x4f, 0x5f, 0xfe, 0xf4, 0x75, 0x9a, 0x8f, 0xb7, 0x6c, 0x35, 0x97, 0x83,
+    0xa9, 0x96, 0x5f, 0x64, 0xd9, 0xf1, 0x9f, 0x47, 0x12, 0xac, 0xc3, 0x46,
+    0x57, 0xa1, 0x23, 0x50, 0xaa, 0x3b, 0x0a, 0x3d, 0x28, 0xe6, 0xff, 0xff,
+    0xcc, 0x59, 0xf8, 0x39, 0x81, 0x79, 0xf6, 0x67, 0x9b, 0x5e, 0x75, 0x97,
+    0xe3, 0x4d, 0x7f, 0xf1, 0x65, 0xff, 0xf6, 0x4e, 0xe3, 0x60, 0xf7, 0xa6,
+    0x32, 0x66, 0x59, 0x50, 0x8e, 0x9c, 0x6d, 0xd1, 0x55, 0xcf, 0xba, 0xb2,
+    0xf7, 0x98, 0xc5, 0x97, 0xee, 0xa5, 0xc2, 0xc3, 0x9b, 0x6f, 0x8c, 0xdf,
+    0xfb, 0x3a, 0x97, 0x26, 0xd3, 0xff, 0x8b, 0x2f, 0xc5, 0x1d, 0xc8, 0xeb,
+    0x2f, 0xff, 0x66, 0xe7, 0x83, 0x37, 0xb2, 0x69, 0x47, 0x4b, 0x2f, 0xfe,
+    0xe6, 0x4d, 0xe8, 0xdf, 0x9e, 0xf4, 0x2c, 0xa1, 0xa2, 0xfb, 0x45, 0x1f,
+    0x50, 0xbf, 0xce, 0x0e, 0x1d, 0xfa, 0xfa, 0xca, 0x59, 0x7f, 0xdc, 0x20,
+    0x87, 0xf2, 0x83, 0x56, 0x57, 0x47, 0x8b, 0xf0, 0xba, 0xc4, 0x66, 0x39,
+    0x80, 0x5e, 0x6f, 0xfd, 0x93, 0xea, 0x23, 0xed, 0xe8, 0x59, 0x7f, 0xe6,
+    0x9b, 0x84, 0xee, 0x3f, 0x32, 0xcb, 0xf8, 0xb3, 0x9e, 0x81, 0xac, 0xa8,
+    0x3e, 0x9c, 0x3d, 0xa2, 0x46, 0x37, 0x21, 0x4d, 0x7f, 0xfa, 0x4c, 0x6b,
+    0x7c, 0xb2, 0x5a, 0xe7, 0x16, 0x5f, 0xfd, 0x87, 0x0c, 0x9c, 0x7b, 0x3e,
+    0x70, 0x2c, 0xbf, 0xa2, 0x6c, 0xde, 0xda, 0x59, 0x7f, 0xfa, 0x5e, 0x79,
+    0x76, 0x4f, 0xbb, 0xbb, 0xba, 0xcb, 0x2a, 0x11, 0x05, 0x85, 0xf7, 0xcd,
+    0xac, 0x25, 0x95, 0x09, 0xaa, 0x79, 0x28, 0xa1, 0x93, 0xc2, 0x1b, 0xff,
+    0xcc, 0x11, 0xe1, 0x06, 0x4c, 0x3c, 0x02, 0xcb, 0xff, 0x82, 0xe7, 0xf9,
+    0x64, 0xe5, 0x9d, 0x2c, 0xbf, 0xec, 0xee, 0x3c, 0xd0, 0x43, 0x59, 0x7f,
+    0xf7, 0xb0, 0xc0, 0xe3, 0x7b, 0x91, 0x3a, 0xcb, 0x98, 0x33, 0x9f, 0xe7,
+    0x46, 0xf5, 0x3b, 0x2f, 0xe8, 0x71, 0x9f, 0xe4, 0x25, 0x7b, 0x95, 0x65,
+    0xa8, 0xc8, 0x1d, 0x90, 0x07, 0xc5, 0x1e, 0x5f, 0x21, 0xe9, 0xf8, 0xde,
+    0xf7, 0xa0, 0x98, 0x91, 0xbb, 0x0c, 0x0b, 0xe9, 0xa4, 0xd3, 0x2c, 0xb8,
+    0xa7, 0x59, 0x7c, 0x0d, 0x3e, 0xda, 0xca, 0xd8, 0x7c, 0x1b, 0x41, 0x27,
+    0x42, 0xf7, 0xfe, 0x63, 0x37, 0x1a, 0x7e, 0x44, 0x4c, 0xb2, 0xdb, 0xab,
+    0x2e, 0xf6, 0xea, 0xcb, 0xff, 0xd9, 0xbf, 0xcf, 0x20, 0x3f, 0x40, 0x6e,
+    0x96, 0x5b, 0xf0, 0x7c, 0xfe, 0x1a, 0xbf, 0xfe, 0xd4, 0xf1, 0xb9, 0xc2,
+    0xcf, 0xfd, 0xb5, 0xda, 0xcb, 0xfb, 0x27, 0xe1, 0x66, 0xf5, 0x95, 0x24,
+    0xc9, 0x59, 0xed, 0xc9, 0xfe, 0xa9, 0x63, 0x56, 0x54, 0x33, 0xe0, 0xb2,
+    0x98, 0x98, 0xd1, 0xa4, 0xee, 0x1b, 0xbc, 0x6d, 0x02, 0x1e, 0x5f, 0xff,
+    0xa5, 0x9c, 0x72, 0x07, 0xb2, 0x3f, 0xc8, 0x02, 0xcb, 0xe7, 0x3b, 0xc9,
+    0x65, 0xff, 0xde, 0x6d, 0x98, 0x58, 0xda, 0x7d, 0xeb, 0x2f, 0xfe, 0x62,
+    0x71, 0x96, 0x0f, 0xd1, 0xc5, 0x97, 0x84, 0x8d, 0x2c, 0xbf, 0xe9, 0xcf,
+    0x1a, 0xf9, 0x44, 0xeb, 0x2f, 0xbb, 0xe8, 0xde, 0xd6, 0x5e, 0x12, 0x00,
+    0xb2, 0x98, 0xf1, 0x00, 0x4f, 0x7d, 0xbe, 0x0b, 0xb5, 0x97, 0xff, 0xf4,
+    0x16, 0x03, 0x98, 0x3f, 0x44, 0xe7, 0x09, 0x0d, 0x65, 0x31, 0xff, 0x78,
+    0x92, 0xfc, 0xdf, 0xfc, 0x49, 0x65, 0xd1, 0xd2, 0xca, 0x92, 0xa9, 0x31,
+    0xa9, 0x9a, 0x43, 0xda, 0x2e, 0x90, 0x5c, 0x74, 0x9f, 0xbf, 0x09, 0xfd,
+    0xe4, 0x3b, 0x64, 0xf7, 0xf1, 0x7e, 0x39, 0xf6, 0x59, 0x7f, 0xff, 0x44,
+    0xd8, 0x3f, 0x46, 0xff, 0x67, 0xca, 0x20, 0xeb, 0x2f, 0xee, 0x86, 0x3c,
+    0x79, 0xd6, 0x5f, 0xff, 0xbc, 0xdb, 0xcb, 0x0c, 0xc6, 0xfb, 0x69, 0xc0,
+    0xb2, 0xf1, 0x40, 0xd6, 0x5f, 0x4b, 0x3d, 0x8b, 0x2f, 0x4e, 0x12, 0x59,
+    0x77, 0x5c, 0x84, 0x6e, 0xf6, 0x5f, 0x32, 0xab, 0x8d, 0x88, 0x43, 0x7f,
+    0x79, 0xa6, 0x77, 0x9d, 0x65, 0xe8, 0xc0, 0x2c, 0xb4, 0x76, 0x79, 0x33,
+    0x17, 0x54, 0x2a, 0x2e, 0x39, 0x63, 0xc6, 0x70, 0x08, 0x50, 0xdf, 0x34,
+    0xe7, 0x85, 0x97, 0xf4, 0x6a, 0x78, 0xd4, 0xeb, 0x2f, 0xff, 0x13, 0x99,
+    0xe8, 0x93, 0x16, 0x1e, 0x16, 0x5f, 0xfd, 0x9d, 0x7e, 0x33, 0x5a, 0x88,
+    0xdd, 0x59, 0x63, 0x26, 0x44, 0x69, 0x23, 0xd4, 0x91, 0xcd, 0x90, 0xbc,
+    0xbf, 0xed, 0xee, 0x40, 0xf6, 0x01, 0xd6, 0x5f, 0x98, 0xdf, 0xb4, 0xeb,
+    0x2f, 0xff, 0x66, 0x00, 0xf1, 0x37, 0x07, 0xe7, 0x9d, 0x65, 0x32, 0x2b,
+    0x7c, 0x72, 0x45, 0x37, 0xff, 0xa3, 0xd0, 0x79, 0x8b, 0x0c, 0xfe, 0x79,
+    0x65, 0xf3, 0xf9, 0x89, 0x65, 0xf6, 0x02, 0x09, 0x65, 0x8a, 0x73, 0xc0,
+    0xf1, 0x05, 0x2c, 0xbf, 0x4b, 0x51, 0x83, 0x59, 0x73, 0x07, 0xa3, 0x64,
+    0x41, 0x77, 0xff, 0xfb, 0x25, 0xdf, 0x9b, 0xd1, 0x9a, 0x97, 0xca, 0x0f,
+    0xc5, 0x97, 0xfe, 0xd3, 0xce, 0x18, 0xc2, 0x0c, 0xeb, 0x2b, 0xc8, 0x9f,
+    0xe3, 0x05, 0xff, 0xd1, 0xc2, 0xc3, 0x5b, 0xde, 0xcd, 0xc5, 0x97, 0xfc,
+    0x1f, 0xee, 0x73, 0x18, 0x86, 0xb2, 0xf8, 0x31, 0xd0, 0xd6, 0x5f, 0xec,
+    0x3e, 0x4d, 0x26, 0xc5, 0x94, 0x35, 0x5a, 0xdd, 0x97, 0x3c, 0x22, 0xb8,
+    0xb5, 0xf8, 0x65, 0x84, 0x8f, 0x7a, 0x31, 0x87, 0x62, 0x11, 0xdc, 0x33,
+    0xac, 0xbe, 0xdd, 0x8d, 0x4e, 0xb2, 0xf0, 0x7f, 0xc5, 0x97, 0xb7, 0x58,
+    0xc5, 0x95, 0x0b, 0x96, 0x59, 0x2e, 0xaa, 0x68, 0x47, 0x38, 0xb8, 0x49,
+    0xb7, 0x47, 0x6f, 0xf6, 0xbb, 0x9b, 0x1b, 0xc1, 0x59, 0x7f, 0xfe, 0x6f,
+    0xf1, 0xbb, 0x7d, 0x77, 0xe6, 0xde, 0xe7, 0x59, 0x7f, 0xff, 0xce, 0x6f,
+    0x06, 0xd9, 0xd7, 0x6c, 0x4f, 0xd1, 0xe2, 0x38, 0xb2, 0xff, 0x44, 0xbe,
+    0x6b, 0x76, 0xcb, 0x2b, 0xc8, 0x9b, 0x26, 0x7b, 0xc3, 0xc9, 0x2c, 0xbd,
+    0xb8, 0xc6, 0x2c, 0xbc, 0x6b, 0x76, 0xb2, 0xfc, 0xdb, 0xcb, 0x39, 0xb0,
+    0xf6, 0xbc, 0x39, 0xf2, 0x0b, 0xfe, 0xdf, 0x83, 0x9b, 0x30, 0x8d, 0x59,
+    0x7f, 0xfa, 0x51, 0xcf, 0x41, 0x7f, 0xdb, 0x8c, 0x75, 0x94, 0x48, 0x87,
+    0xf9, 0xdd, 0xfe, 0xff, 0xb7, 0x1b, 0xcf, 0x32, 0xcb, 0xfa, 0x3b, 0x27,
+    0xeb, 0xeb, 0x2f, 0xf7, 0x35, 0x13, 0xbe, 0xbb, 0x59, 0x7d, 0x3e, 0xdc,
+    0x1d, 0x65, 0x31, 0xed, 0x88, 0x6b, 0x52, 0x4f, 0x65, 0xa1, 0xab, 0xb8,
+    0x44, 0x73, 0x7f, 0xc2, 0x26, 0xfd, 0x1f, 0x9f, 0x0c, 0x59, 0x7f, 0xee,
+    0xbb, 0x27, 0x9d, 0xe4, 0xde, 0x59, 0x5a, 0x3e, 0x90, 0x94, 0xdf, 0x63,
+    0x03, 0x8b, 0x2f, 0xfe, 0xe3, 0xf5, 0xff, 0xe7, 0x63, 0x0c, 0xeb, 0x2d,
+    0x9d, 0x9f, 0x4f, 0xc8, 0x6f, 0xc3, 0xec, 0x39, 0xb8, 0xb2, 0xff, 0xc5,
+    0x1d, 0x7a, 0x18, 0x9c, 0x6b, 0x2a, 0x63, 0xe8, 0x39, 0x65, 0xf7, 0x30,
+    0x8d, 0x59, 0x7d, 0x19, 0x27, 0x59, 0x5d, 0x1e, 0x17, 0x88, 0xaf, 0xda,
+    0x06, 0xd0, 0x29, 0xda, 0x96, 0x54, 0x22, 0xfc, 0x6c, 0xae, 0x47, 0x7f,
+    0x87, 0xbe, 0x0b, 0xf8, 0x05, 0x97, 0xe8, 0xff, 0xa3, 0xeb, 0x2e, 0x20,
+    0x2c, 0xa9, 0xcf, 0xc7, 0x46, 0x8e, 0x4f, 0x7f, 0xff, 0xf8, 0x3a, 0xf6,
+    0x4d, 0x33, 0xea, 0x6f, 0xf8, 0x20, 0xe6, 0x36, 0xf1, 0xc2, 0xcb, 0xfe,
+    0x6f, 0x73, 0x4c, 0x50, 0x75, 0x97, 0xf4, 0x73, 0x71, 0xba, 0xfa, 0xcb,
+    0xfa, 0x39, 0x31, 0x64, 0xcb, 0x29, 0x93, 0x13, 0xdc, 0x7d, 0xd1, 0xbf,
+    0x8c, 0x6f, 0xdf, 0xf3, 0x91, 0xab, 0x2f, 0xf6, 0xe9, 0x04, 0x3d, 0xb1,
+    0xab, 0x2d, 0xf5, 0x94, 0xb2, 0xf9, 0x8c, 0x3b, 0xf4, 0x5e, 0x7c, 0x46,
+    0xff, 0x06, 0x71, 0xfb, 0x0a, 0x16, 0x54, 0x22, 0xff, 0xb5, 0x42, 0x38,
+    0xbf, 0xfe, 0x83, 0xee, 0x34, 0x41, 0x6b, 0x18, 0xf8, 0xb2, 0xff, 0xec,
+    0x1f, 0xa0, 0xce, 0xa5, 0xf0, 0x8d, 0x65, 0xff, 0xc0, 0xf3, 0x07, 0xfc,
+    0xf0, 0x73, 0xeb, 0x2e, 0xce, 0x2c, 0xb9, 0xfe, 0xb2, 0xd2, 0xd1, 0xac,
+    0xf0, 0xb5, 0xb8, 0xe8, 0x98, 0x0b, 0x8d, 0xb0, 0x6a, 0xaa, 0xf1, 0x03,
+    0xb8, 0x73, 0xcc, 0x5e, 0x49, 0xdf, 0x86, 0xfd, 0xff, 0xec, 0xd0, 0xa3,
+    0x9f, 0x26, 0xeb, 0x9b, 0x3e, 0xb2, 0xff, 0xf6, 0x41, 0x67, 0x65, 0x9f,
+    0x0b, 0x98, 0xb2, 0xff, 0xf4, 0x17, 0xb2, 0x3a, 0x76, 0xe0, 0x86, 0xac,
+    0xbf, 0xec, 0x06, 0xde, 0x38, 0xf3, 0x8b, 0x2f, 0xfe, 0x6f, 0xfb, 0x1a,
+    0x5c, 0xce, 0xbe, 0xb2, 0x86, 0x98, 0x86, 0x24, 0x12, 0x57, 0x0e, 0xaf,
+    0xf8, 0x05, 0x9f, 0xe3, 0xb9, 0x2c, 0xbf, 0xf8, 0x39, 0x36, 0x37, 0x65,
+    0x9e, 0xc5, 0x96, 0x07, 0x67, 0xf2, 0x46, 0xd7, 0x8e, 0xfd, 0x2c, 0xbf,
+    0xff, 0xa4, 0xc3, 0xcf, 0x64, 0xf1, 0x26, 0xe7, 0x33, 0x71, 0x65, 0x69,
+    0x14, 0x40, 0x28, 0xf8, 0xed, 0xc1, 0x35, 0x65, 0xfe, 0xcf, 0x0f, 0xd0,
+    0x53, 0xac, 0xb0, 0xfc, 0x79, 0x66, 0x0c, 0x5f, 0x7b, 0x06, 0xcb, 0x2a,
+    0x0f, 0x2b, 0x85, 0x35, 0x0c, 0xea, 0x99, 0x1a, 0x8e, 0x1e, 0x79, 0x29,
+    0x55, 0xa1, 0x81, 0xa8, 0x45, 0xfa, 0x34, 0xf7, 0x84, 0xf9, 0x4b, 0xed,
+    0xe3, 0x47, 0xe3, 0x61, 0x0c, 0x6a, 0xe2, 0x43, 0x16, 0xff, 0x60, 0xe7,
+    0xd0, 0x60, 0x0b, 0x2f, 0xff, 0x80, 0xfe, 0xc0, 0x01, 0xf5, 0x9b, 0xfd,
+    0x8b, 0x2f, 0xff, 0xdf, 0xe1, 0x04, 0x3d, 0x4b, 0x83, 0xf6, 0x37, 0xd6,
+    0x5a, 0x34, 0x8d, 0xb3, 0x9a, 0x12, 0x85, 0xff, 0xe2, 0x61, 0x8e, 0x3f,
+    0xc1, 0xfa, 0x09, 0x65, 0x8e, 0xb2, 0xfc, 0x06, 0x29, 0x71, 0x65, 0x74,
+    0x6e, 0x3e, 0x23, 0x58, 0x8a, 0x26, 0x84, 0x05, 0xfd, 0xe9, 0x9b, 0xcc,
+    0x75, 0x97, 0x03, 0x8b, 0x2f, 0xbb, 0x20, 0xf1, 0x65, 0xff, 0x0f, 0x0e,
+    0x59, 0xff, 0x32, 0xcb, 0xf0, 0x74, 0x0d, 0xaf, 0x69, 0x2c, 0xac, 0x44,
+    0x73, 0x11, 0xf0, 0xde, 0xb1, 0x30, 0x16, 0x2e, 0xf4, 0x29, 0x6f, 0xda,
+    0xe1, 0x44, 0xeb, 0x2f, 0xff, 0xdb, 0xa5, 0x9b, 0xdf, 0x8d, 0x85, 0xed,
+    0xc6, 0x3a, 0xcb, 0x4b, 0x11, 0x04, 0xc5, 0x17, 0xda, 0x8c, 0x25, 0x97,
+    0xc6, 0xea, 0x0e, 0xb2, 0xf4, 0xf8, 0x62, 0xcb, 0xb2, 0x75, 0x95, 0xb0,
+    0xfe, 0x20, 0x80, 0xc2, 0x3d, 0xb1, 0xeb, 0xfc, 0xc5, 0xf9, 0x66, 0xb1,
+    0x65, 0xfd, 0x1d, 0xe9, 0xa0, 0xeb, 0x2a, 0x47, 0xbc, 0x46, 0x37, 0xff,
+    0x8e, 0x07, 0xd6, 0x6f, 0xc6, 0x1f, 0x99, 0x65, 0xff, 0x9c, 0x1a, 0x82,
+    0xff, 0xb2, 0x4b, 0x2f, 0xff, 0x03, 0x18, 0xbf, 0x87, 0x7f, 0x81, 0xd6,
+    0x54, 0x23, 0xbf, 0x08, 0x59, 0x28, 0x27, 0xb7, 0xb3, 0xce, 0xb2, 0xf0,
+    0x42, 0x4b, 0x2f, 0xcd, 0xef, 0x60, 0xd6, 0x5a, 0x65, 0x83, 0x3c, 0x3e,
+    0x0e, 0x50, 0xd1, 0x1c, 0xeb, 0xd7, 0xfe, 0xc9, 0x79, 0xe5, 0xb3, 0xf2,
+    0x65, 0x97, 0xe2, 0xc0, 0x07, 0x8b, 0x2f, 0xf4, 0x7f, 0xd8, 0xc4, 0xeb,
+    0x2a, 0x73, 0xd7, 0xd1, 0x3d, 0xfe, 0x06, 0xde, 0x38, 0xf3, 0x8b, 0x2f,
+    0x6e, 0x31, 0xd6, 0x5f, 0xff, 0x38, 0x39, 0x00, 0xfe, 0x30, 0xf0, 0xa6,
+    0x59, 0xe2, 0xfe, 0xa1, 0x1a, 0x98, 0x46, 0xea, 0x97, 0xfa, 0x5f, 0xf6,
+    0x6a, 0x3e, 0xb2, 0xfe, 0x33, 0x3b, 0xef, 0x0c, 0x59, 0x77, 0x7b, 0xd6,
+    0x58, 0x0b, 0x2f, 0xff, 0x4b, 0x99, 0xa8, 0xe1, 0x60, 0x03, 0xc5, 0x95,
+    0x87, 0xb4, 0xe2, 0x35, 0x08, 0x94, 0xf3, 0xa5, 0x62, 0x39, 0xff, 0x0c,
+    0x5b, 0xff, 0xd9, 0xba, 0x03, 0xc4, 0xdf, 0x60, 0xeb, 0x8b, 0x2f, 0xf1,
+    0xf3, 0x0b, 0xfb, 0x78, 0xb2, 0xff, 0xee, 0x7e, 0x23, 0x40, 0x98, 0xb0,
+    0xc5, 0x97, 0xde, 0x6c, 0xe9, 0x65, 0x74, 0x89, 0xb7, 0x34, 0x02, 0x2d,
+    0xe3, 0x64, 0x15, 0x97, 0xef, 0x46, 0xa7, 0x3a, 0xcb, 0xfc, 0x17, 0x2f,
+    0x63, 0xcc, 0xb2, 0xdd, 0x4c, 0x7b, 0x66, 0x14, 0xd3, 0x22, 0x91, 0xde,
+    0x6a, 0x15, 0x8f, 0xe4, 0x63, 0x4c, 0x4e, 0xf0, 0xe9, 0x28, 0x6a, 0x54,
+    0x32, 0xb6, 0x25, 0x0d, 0x6c, 0x8c, 0x9f, 0xa8, 0x5b, 0x34, 0x27, 0xfd,
+    0x1c, 0x73, 0xc3, 0x20, 0x04, 0x45, 0x1b, 0x5f, 0x25, 0xa6, 0x5c, 0x12,
+    0x59, 0x7d, 0xd7, 0x23, 0xa5, 0x94, 0x2b, 0x37, 0x44, 0x2d, 0x7e, 0x99,
+    0xa7, 0xce, 0x96, 0x5e, 0xd0, 0x64, 0xb2, 0xba, 0x3c, 0x7f, 0x95, 0x5f,
+    0xdb, 0x3e, 0x50, 0x7e, 0x2c, 0xa6, 0x3d, 0x27, 0x23, 0xbf, 0xf3, 0xeb,
+    0x58, 0x26, 0x0d, 0xe4, 0xb2, 0xf1, 0x60, 0x16, 0x5a, 0x16, 0x50, 0x0d,
+    0x5f, 0xc6, 0xee, 0x7f, 0xac, 0xad, 0x1b, 0x7f, 0x10, 0xdf, 0x1e, 0x35,
+    0xc5, 0x97, 0xfa, 0x0e, 0x58, 0x00, 0xf1, 0x65, 0xff, 0x6b, 0x3d, 0x93,
+    0xec, 0x6e, 0x2c, 0xac, 0x45, 0x83, 0x10, 0x91, 0x10, 0x4c, 0xaf, 0xf4,
+    0x9b, 0x9c, 0x8d, 0x49, 0x65, 0xf3, 0x9e, 0x19, 0x65, 0xef, 0xb1, 0x8b,
+    0x28, 0x67, 0xe1, 0x31, 0x99, 0x84, 0x17, 0xf3, 0x10, 0x65, 0x9c, 0x59,
+    0x7f, 0xfe, 0x93, 0x7f, 0x9d, 0xf9, 0xbf, 0xd4, 0x9b, 0xfc, 0x59, 0x7f,
+    0xd0, 0x03, 0xbc, 0xb5, 0x93, 0xac, 0xbd, 0x3e, 0x6e, 0xac, 0xbf, 0xa3,
+    0x3f, 0xc7, 0xe9, 0x65, 0xff, 0x7e, 0x3a, 0x03, 0xfb, 0xcc, 0xb2, 0xf9,
+    0xb6, 0xf2, 0x75, 0x95, 0x87, 0xbd, 0xf3, 0x9b, 0x1d, 0x65, 0xfc, 0xc4,
+    0x19, 0x67, 0x36, 0x1b, 0x2d, 0xe4, 0x35, 0x0a, 0x84, 0x4d, 0x31, 0x98,
+    0xb3, 0xcb, 0x04, 0x73, 0xc2, 0x0f, 0xc2, 0xf6, 0xfb, 0xc1, 0xcf, 0xac,
+    0xbf, 0xf0, 0x7a, 0x97, 0x3d, 0x93, 0x84, 0x96, 0x5f, 0x89, 0xfe, 0xe7,
+    0x59, 0x4c, 0x88, 0x9d, 0x11, 0x08, 0x83, 0x61, 0x7b, 0x5b, 0xfa, 0xdd,
+    0xed, 0x4b, 0xbb, 0x44, 0x63, 0x62, 0x87, 0xa1, 0x50, 0xb2, 0x25, 0x61,
+    0x4f, 0x0e, 0xe9, 0x47, 0x16, 0x39, 0xf2, 0x4c, 0xac, 0x22, 0x0d, 0x97,
+    0x35, 0xdc, 0xea, 0xe7, 0x51, 0x8d, 0xb4, 0x7f, 0x13, 0x4e, 0x41, 0xea,
+    0x71, 0xa8, 0xf1, 0xe9, 0x7a, 0xb1, 0x78, 0x79, 0x60, 0x60, 0x95, 0x8a,
+    0x2b, 0x48, 0x29, 0xdb, 0xae, 0x53, 0xc4, 0x3f, 0x4c, 0x9e, 0x0c, 0x3c,
+    0xb7, 0xc2, 0xf4, 0xc2, 0x0d, 0xb8, 0xd4, 0x04, 0x95, 0x77, 0xbb, 0x0f,
+    0x4b, 0xfb, 0x42, 0xc7, 0xbd, 0xa1, 0x65, 0xfd, 0xba, 0xc3, 0x28, 0x99,
+    0x65, 0xe8, 0x72, 0x59, 0x7d, 0x9e, 0x7f, 0xac, 0xb0, 0xa7, 0x0f, 0xaf,
+    0xc6, 0x04, 0x35, 0x7f, 0x0a, 0x9b, 0x43, 0xff, 0x37, 0x56, 0x5f, 0xfd,
+    0x07, 0x28, 0xd9, 0x34, 0xa3, 0x53, 0xac, 0xbf, 0xfd, 0x1a, 0x0c, 0xd3,
+    0x37, 0x98, 0xee, 0x35, 0x97, 0xf1, 0x3f, 0xf9, 0x1b, 0x8b, 0x2f, 0xef,
+    0x09, 0xbb, 0x04, 0x05, 0x97, 0xff, 0xfe, 0x2f, 0xf2, 0x1a, 0x59, 0xba,
+    0x5f, 0x8f, 0x41, 0xa1, 0x8d, 0xd5, 0x97, 0xb7, 0x47, 0x0b, 0x29, 0xd1,
+    0x1e, 0x17, 0x0b, 0xf0, 0x7f, 0x34, 0x1a, 0xb2, 0xff, 0xa2, 0x7e, 0x4c,
+    0xc7, 0x79, 0x96, 0x50, 0xd5, 0x04, 0x76, 0x8e, 0xc9, 0x73, 0x17, 0xfa,
+    0x18, 0x04, 0x45, 0xba, 0x55, 0x7f, 0xff, 0xf6, 0x6e, 0x93, 0xf7, 0xba,
+    0x2f, 0x8c, 0x61, 0x67, 0x36, 0x3f, 0xc3, 0x0b, 0x2e, 0x03, 0x2c, 0xad,
+    0x22, 0x47, 0x8f, 0x77, 0xf7, 0x6f, 0xa9, 0xf0, 0xc5, 0x95, 0x87, 0xa6,
+    0xc4, 0x77, 0xff, 0xef, 0x61, 0x61, 0xbe, 0x79, 0x78, 0xc7, 0x10, 0xeb,
+    0x2d, 0xd2, 0xcb, 0xfe, 0x86, 0xe6, 0x37, 0xa3, 0xeb, 0x2a, 0x47, 0x91,
+    0xe1, 0x2b, 0xee, 0xdd, 0xfb, 0x54, 0x5a, 0xcb, 0xff, 0x9b, 0x5e, 0x7e,
+    0x3f, 0xc9, 0xc0, 0xb2, 0xf9, 0xb5, 0xb8, 0x35, 0x95, 0x24, 0xd6, 0x1a,
+    0x13, 0xfa, 0x22, 0xf1, 0x86, 0xf4, 0x2b, 0xf6, 0x49, 0xbc, 0x15, 0x97,
+    0xfd, 0x20, 0xb7, 0xa7, 0x72, 0x1a, 0xcb, 0xff, 0x13, 0xea, 0x26, 0xd9,
+    0x9a, 0x65, 0x97, 0xf3, 0x1d, 0xe6, 0xcf, 0x2c, 0xa6, 0x3e, 0xc3, 0x9f,
+    0xdf, 0x81, 0x9b, 0xa5, 0xf5, 0x97, 0xf8, 0x25, 0x9b, 0xac, 0x63, 0x2c,
+    0xbe, 0xe3, 0x97, 0x6b, 0x2b, 0xc7, 0xaf, 0xba, 0x6b, 0x50, 0x8a, 0x6c,
+    0x84, 0x0d, 0xed, 0x41, 0xd6, 0x5f, 0xde, 0xce, 0x44, 0xfb, 0xab, 0x2f,
+    0xff, 0x0e, 0x0e, 0x51, 0xb2, 0x69, 0x46, 0xa7, 0x59, 0x70, 0x06, 0xb2,
+    0xfd, 0xae, 0xdd, 0xfb, 0x54, 0x50, 0x6b, 0xec, 0xef, 0x3a, 0x59, 0x74,
+    0x85, 0xc2, 0x2f, 0x46, 0x9b, 0x82, 0xfe, 0x36, 0xac, 0x4c, 0xdd, 0xe1,
+    0xdd, 0x7f, 0xde, 0xdd, 0x70, 0x0b, 0x8e, 0x18, 0xb2, 0xf4, 0xd1, 0xf5,
+    0x95, 0x07, 0xb9, 0x87, 0xf6, 0xed, 0x65, 0xfd, 0xec, 0xff, 0x9c, 0xeb,
+    0x2f, 0xf6, 0xcf, 0xc1, 0xdb, 0x53, 0x2c, 0xac, 0x3e, 0x30, 0x16, 0xdf,
+    0xd8, 0x5d, 0xb9, 0x01, 0x65, 0x6c, 0x46, 0x11, 0x3a, 0xf0, 0x86, 0xff,
+    0x4a, 0x35, 0x3c, 0x6a, 0x75, 0x97, 0xfb, 0xa9, 0x46, 0x7f, 0x66, 0x2c,
+    0xbd, 0xdc, 0x76, 0xb2, 0xa1, 0x11, 0x18, 0x6a, 0xe6, 0xb7, 0xe3, 0xe6,
+    0xe9, 0x01, 0x65, 0xec, 0x3b, 0x2c, 0xbe, 0xd3, 0x1a, 0x75, 0x97, 0xbf,
+    0x9e, 0x59, 0x7f, 0xa0, 0xbf, 0x1a, 0x63, 0xac, 0xbb, 0xec, 0xb2, 0xff,
+    0xfb, 0x00, 0xfa, 0xcd, 0xf8, 0x3c, 0x3c, 0x76, 0xb2, 0xa1, 0x31, 0xb1,
+    0x95, 0x60, 0xd9, 0xa4, 0x7e, 0x1c, 0x73, 0x12, 0x16, 0xb8, 0xf3, 0x2c,
+    0xbe, 0x00, 0x4a, 0x65, 0x97, 0x37, 0x6b, 0x2a, 0x0d, 0xd6, 0xd9, 0x1d,
+    0xbd, 0xb0, 0xfd, 0x45, 0xa9, 0x5f, 0x9f, 0x87, 0x80, 0x2c, 0xbf, 0x4c,
+    0x07, 0x29, 0x96, 0x5c, 0x4c, 0xb2, 0xa0, 0xdf, 0x76, 0x53, 0x7c, 0xe0,
+    0xcd, 0x2c, 0xbe, 0x81, 0x63, 0x1a, 0xcb, 0xfd, 0x81, 0xef, 0xd1, 0xac,
+    0x59, 0x7f, 0xda, 0x83, 0x0b, 0x06, 0xda, 0x59, 0x7f, 0xfd, 0x9e, 0xf3,
+    0xb7, 0xe0, 0xb3, 0xd9, 0xda, 0xca, 0xc4, 0xeb, 0xcd, 0x2c, 0x66, 0x5f,
+    0x10, 0x91, 0x0f, 0x09, 0x02, 0x67, 0xb6, 0x71, 0x7f, 0xa6, 0x6f, 0x86,
+    0x66, 0xfa, 0xcb, 0xff, 0x9f, 0x77, 0x99, 0xba, 0x4f, 0xfc, 0xdd, 0x59,
+    0x7f, 0xff, 0xf6, 0x80, 0xe3, 0x8d, 0x6e, 0xf3, 0x37, 0x48, 0x11, 0x30,
+    0x9b, 0xa1, 0x3a, 0xcb, 0xff, 0xf9, 0xff, 0x87, 0xc6, 0x9a, 0x5e, 0xc1,
+    0x87, 0xfc, 0x59, 0x7f, 0xfd, 0xc6, 0x9d, 0xf8, 0xe4, 0xff, 0xf4, 0x4c,
+    0xb2, 0xff, 0xce, 0x40, 0xcf, 0xc1, 0x30, 0x16, 0x54, 0x26, 0xc4, 0x37,
+    0xdf, 0xad, 0xed, 0xa7, 0xd8, 0x58, 0xa1, 0xb1, 0x21, 0xda, 0x46, 0xf1,
+    0x29, 0x0a, 0x51, 0xa9, 0x64, 0x6f, 0x06, 0xa8, 0xf4, 0x4e, 0xd0, 0xa5,
+    0x9a, 0x18, 0xfa, 0x26, 0x3c, 0x6a, 0x7e, 0x84, 0x1b, 0xc3, 0x88, 0xa1,
+    0x73, 0xc8, 0xd2, 0x3f, 0x2a, 0x18, 0x2e, 0x66, 0x1a, 0x89, 0x1d, 0x6d,
+    0xfe, 0x34, 0x5b, 0xfb, 0xd9, 0x3a, 0xcb, 0xff, 0xc2, 0xce, 0xf2, 0x17,
+    0x9a, 0xed, 0xdf, 0xb5, 0x45, 0x16, 0xbf, 0xc2, 0xf3, 0x5d, 0xbb, 0xf6,
+    0xa8, 0xba, 0x95, 0x10, 0x9d, 0x34, 0x94, 0x73, 0xb8, 0xd9, 0xdc, 0x39,
+    0x1a, 0x77, 0x28, 0xf3, 0xf1, 0x3e, 0xbf, 0x69, 0x87, 0x94, 0xda, 0x0a,
+    0xc6, 0xf4, 0xa3, 0x5c, 0xe1, 0xbf, 0xd7, 0x2f, 0xda, 0xed, 0xdf, 0xb5,
+    0x44, 0x42, 0xb4, 0xeb, 0x2f, 0x79, 0x89, 0x65, 0xd8, 0x35, 0x96, 0xed,
+    0x65, 0x76, 0x78, 0x7e, 0x1b, 0x21, 0x6b, 0xec, 0xde, 0xda, 0x59, 0x7c,
+    0xda, 0xce, 0x96, 0x56, 0x23, 0xfc, 0xd3, 0x6e, 0x95, 0x77, 0x0b, 0xf6,
+    0xc8, 0xef, 0x8a, 0x01, 0xc5, 0x97, 0xf6, 0x83, 0xed, 0xf8, 0x35, 0x97,
+    0xb3, 0x06, 0xb2, 0xef, 0x8b, 0x98, 0xfb, 0x34, 0x42, 0x46, 0x14, 0x2d,
+    0x1f, 0x59, 0x0b, 0xdb, 0xff, 0x85, 0x8a, 0xe0, 0xbe, 0x21, 0xcb, 0x27,
+    0x59, 0x6d, 0xb5, 0x97, 0xd1, 0xe8, 0x3a, 0xcb, 0xee, 0xdd, 0xfb, 0x54,
+    0x46, 0xca, 0xec, 0xf4, 0x74, 0x43, 0x61, 0x63, 0x44, 0x46, 0x32, 0xdf,
+    0xe1, 0x79, 0xae, 0xdd, 0xfb, 0x54, 0x53, 0x6b, 0x9e, 0x4b, 0x2f, 0xbb,
+    0x77, 0xed, 0x51, 0x50, 0x28, 0x67, 0x8d, 0xa1, 0x6b, 0xd9, 0xd1, 0x8b,
+    0x2c, 0x2f, 0x0f, 0x03, 0xc4, 0x57, 0xf8, 0x5e, 0x6b, 0xb7, 0x7e, 0xd5,
+    0x15, 0x32, 0xe0, 0x32, 0xcb, 0xc1, 0x6d, 0x2c, 0xbe, 0xed, 0xdf, 0xb5,
+    0x45, 0x60, 0xbe, 0xfc, 0x75, 0x25, 0x95, 0xa3, 0xd3, 0x39, 0x85, 0xf9,
+    0x8c, 0x18, 0x74, 0xb2, 0xd3, 0xac, 0xb8, 0x49, 0x2c, 0xbc, 0xe5, 0xda,
+    0xca, 0x83, 0xc6, 0x00, 0x97, 0xc6, 0x2e, 0xe1, 0x2c, 0xb8, 0x66, 0xac,
+    0xbd, 0x00, 0x65, 0x97, 0x1f, 0x8b, 0x2f, 0xcf, 0x2f, 0xb4, 0xeb, 0x2f,
+    0xdc, 0xe1, 0x60, 0x16, 0x53, 0x1e, 0x7b, 0x94, 0x5c, 0xdb, 0x6b, 0x2d,
+    0xa5, 0x97, 0x9b, 0x6d, 0xe0, 0xd5, 0x04, 0x66, 0xff, 0x0b, 0xcd, 0x76,
+    0xef, 0xda, 0xa2, 0x3f, 0x5c, 0x1e, 0x2c, 0xbc, 0x50, 0x35, 0x95, 0x08,
+    0xa8, 0x91, 0x98, 0xd0, 0xd8, 0x5e, 0xfb, 0x30, 0xa4, 0xb2, 0xd0, 0xb2,
+    0xd3, 0xac, 0xbf, 0x37, 0x3e, 0x17, 0x59, 0x50, 0x6e, 0x46, 0x25, 0x52,
+    0x3e, 0x9c, 0x49, 0xbd, 0x30, 0x74, 0xb2, 0xe1, 0x92, 0xca, 0x83, 0x69,
+    0xe1, 0xeb, 0xfb, 0xa9, 0x3c, 0x98, 0x96, 0x5e, 0x82, 0x99, 0x65, 0xf4,
+    0xd2, 0x8e, 0x96, 0x5f, 0x47, 0x1a, 0x65, 0x95, 0x88, 0x8f, 0x34, 0xb5,
+    0x87, 0x34, 0x49, 0x78, 0xd7, 0xfa, 0xcb, 0x9f, 0xeb, 0x2e, 0x3e, 0xea,
+    0xcb, 0xbf, 0xf5, 0x96, 0x16, 0x2a, 0x2e, 0xa6, 0x8c, 0x5b, 0x1b, 0xfb,
+    0x22, 0xe9, 0xbd, 0x8b, 0xb7, 0x05, 0xb4, 0x30, 0x71, 0xbf, 0x33, 0x3c,
+    0x3c, 0x80, 0x76, 0x50, 0x89, 0xe2, 0xaf, 0xe1, 0x5e, 0x13, 0xcd, 0xb1,
+    0xd1, 0x05, 0xb7, 0x46, 0xaf, 0xff, 0x0b, 0x3b, 0xc8, 0x5e, 0x6b, 0xb7,
+    0x7e, 0xd5, 0x13, 0x7a, 0xff, 0xe3, 0xbc, 0x85, 0xe6, 0xbb, 0x77, 0xed,
+    0x51, 0x3f, 0x2f, 0x6d, 0x5b, 0x5e, 0xd4, 0xb2, 0xff, 0xff, 0xbc, 0x1f,
+    0x93, 0x9b, 0xd7, 0xf5, 0x19, 0xd3, 0xb7, 0x4e, 0xb2, 0xdb, 0x56, 0xd4,
+    0x89, 0x4c, 0x2c, 0xbf, 0x9c, 0xf0, 0x78, 0x11, 0x65, 0xff, 0xb6, 0xb1,
+    0x4b, 0xcb, 0xcd, 0xbf, 0x27, 0x59, 0x73, 0xc9, 0x65, 0xcc, 0x75, 0x95,
+    0xb5, 0xa3, 0x57, 0x6a, 0x32, 0x14, 0x96, 0xed, 0x24, 0xad, 0x0b, 0x5f,
+    0xfb, 0x6a, 0x81, 0xe6, 0xf2, 0x08, 0x90, 0xb2, 0xfb, 0x6a, 0x9f, 0x80,
+    0x59, 0x7e, 0x79, 0xfe, 0x13, 0x56, 0x5f, 0xbb, 0xd1, 0x44, 0x96, 0x50,
+    0xab, 0x3f, 0xbd, 0x14, 0xb9, 0x55, 0xc2, 0x1d, 0x65, 0xfd, 0x86, 0xb7,
+    0xca, 0x16, 0x57, 0x67, 0x89, 0xb6, 0x31, 0x74, 0x8e, 0xb2, 0xfe, 0xe3,
+    0x9f, 0x51, 0xc5, 0x97, 0xed, 0x47, 0x83, 0x0b, 0x2f, 0xde, 0xcf, 0xc0,
+    0xd6, 0x56, 0xd6, 0x9f, 0x86, 0xd5, 0x0c, 0x01, 0x4b, 0xc6, 0xd3, 0x26,
+    0x15, 0x62, 0xec, 0x5a, 0xe4, 0xf7, 0xed, 0xaa, 0x3f, 0x03, 0x59, 0x7b,
+    0x98, 0x4b, 0x2f, 0xe1, 0x46, 0xd0, 0x78, 0xcf, 0xac, 0xbf, 0xc2, 0xaf,
+    0x6a, 0x6d, 0xbf, 0x30, 0xad, 0x65, 0xc5, 0xda, 0xcb, 0xee, 0x4c, 0x7e,
+    0x2c, 0xbf, 0x17, 0xfc, 0xc7, 0x59, 0x7d, 0x30, 0x5c, 0x45, 0x95, 0x07,
+    0x96, 0xe4, 0xf7, 0x8f, 0x1c, 0x59, 0x77, 0x7d, 0xac, 0xbf, 0xdd, 0xf9,
+    0xbf, 0x98, 0x75, 0x97, 0x6f, 0xed, 0x71, 0x81, 0x2b, 0x6b, 0x4f, 0xdc,
+    0x50, 0x59, 0xb4, 0xc6, 0xc5, 0x59, 0xb4, 0x22, 0xb0, 0xbc, 0xcd, 0xfa,
+    0x20, 0x00, 0xe7, 0x06, 0x7e, 0x67, 0x7e, 0xda, 0xc5, 0x3b, 0x79, 0xd2,
+    0xcb, 0xfb, 0x6a, 0x79, 0xfc, 0xdb, 0x8b, 0x2f, 0xfb, 0x67, 0xfd, 0x87,
+    0xcd, 0x62, 0xcb, 0xf8, 0x55, 0x6d, 0x7b, 0x58, 0xa7, 0x90, 0xb2, 0xfd,
+    0xb4, 0x1a, 0x6e, 0x6e, 0x2c, 0xbf, 0xbe, 0xc4, 0x66, 0x12, 0xcb, 0xb7,
+    0xf6, 0xb8, 0xc0, 0x56, 0xf2, 0xcb, 0x80, 0x05, 0x95, 0xb5, 0x27, 0x28,
+    0x29, 0x35, 0x14, 0x1b, 0x6d, 0x23, 0xa1, 0x56, 0x85, 0x86, 0x5f, 0x2c,
+    0x09, 0x38, 0x82, 0x37, 0xd2, 0x71, 0xb2, 0xcb, 0xfb, 0xcd, 0xf2, 0x89,
+    0x96, 0x5c, 0xf8, 0xb2, 0xbb, 0x3c, 0x2d, 0x16, 0xdf, 0x38, 0xf0, 0xeb,
+    0x2f, 0x77, 0x04, 0xb2, 0xff, 0xdb, 0xe3, 0xcd, 0x13, 0x4d, 0x1d, 0xac,
+    0xa1, 0x4a, 0x60, 0xbb, 0x43, 0x18, 0xa8, 0x47, 0x84, 0x2c, 0x39, 0x7c,
+    0x28, 0x9c, 0xfc, 0x59, 0x7f, 0x64, 0xd0, 0x4d, 0xd2, 0xcb, 0xf8, 0x98,
+    0xdf, 0x3c, 0x96, 0x5f, 0xff, 0x3f, 0xe0, 0xbb, 0x63, 0x8c, 0x2f, 0xa9,
+    0x2c, 0xa3, 0x9f, 0xe1, 0x16, 0xdf, 0x8c, 0xff, 0xe0, 0xeb, 0x2b, 0x68,
+    0x3c, 0xa9, 0xc8, 0x6f, 0xf9, 0xfc, 0xdb, 0xc5, 0x98, 0x61, 0x89, 0x2f,
+    0xf7, 0x9f, 0xff, 0x77, 0x31, 0x65, 0xd0, 0x35, 0x97, 0xec, 0xed, 0xf8,
+    0xcb, 0x28, 0x50, 0x9f, 0x9e, 0xd2, 0x28, 0x15, 0x21, 0xe6, 0x2a, 0x8a,
+    0x05, 0x5a, 0x07, 0x46, 0x7e, 0x16, 0xbf, 0xff, 0xde, 0x6e, 0x44, 0xb3,
+    0xcd, 0xaf, 0x3e, 0x07, 0x3c, 0xb2, 0xff, 0xfb, 0x50, 0xdf, 0xf6, 0x0d,
+    0xb9, 0x84, 0x05, 0x96, 0x14, 0xba, 0x2a, 0xf8, 0xbd, 0x77, 0x21, 0x65,
+    0x6d, 0x67, 0x85, 0x22, 0xcb, 0xfb, 0x72, 0x34, 0xef, 0x25, 0x97, 0xef,
+    0x33, 0x80, 0x55, 0xac, 0xbd, 0x1d, 0x49, 0x65, 0x6d, 0x48, 0xa0, 0xda,
+    0x64, 0xff, 0x2f, 0xdd, 0x2d, 0xbf, 0xf6, 0xd1, 0xb5, 0x4c, 0x50, 0x3c,
+    0xeb, 0xeb, 0x2f, 0xb0, 0x6f, 0x25, 0x97, 0xfb, 0x04, 0x3e, 0x16, 0x6e,
+    0x2c, 0xbd, 0xa0, 0xee, 0xac, 0xad, 0xa1, 0x18, 0x02, 0xa2, 0x50, 0xaa,
+    0x21, 0x09, 0xad, 0xff, 0xfb, 0x6a, 0x27, 0xfc, 0x61, 0x48, 0xf1, 0x84,
+    0x35, 0x97, 0xc5, 0x8c, 0x05, 0x97, 0xdb, 0x48, 0x06, 0xc2, 0xcb, 0xf3,
+    0x68, 0x00, 0x85, 0x97, 0x34, 0xeb, 0x2b, 0x6b, 0x46, 0xe8, 0xa5, 0x58,
+    0x50, 0x41, 0x22, 0x9f, 0x93, 0xde, 0x7c, 0xf2, 0xcb, 0xfe, 0x7f, 0xf5,
+    0x2f, 0xe6, 0x8d, 0x59, 0x73, 0x01, 0x65, 0x6d, 0x47, 0xd8, 0x2a, 0xc6,
+    0xc8, 0xee, 0xf8, 0x54, 0xda, 0x05, 0x7b, 0x52, 0xcb, 0xff, 0x44, 0x44,
+    0x44, 0x47, 0x5c, 0x59, 0x7a, 0x68, 0xfa, 0xcb, 0xa2, 0x20, 0xf6, 0x26,
+    0x3b, 0xbf, 0xfd, 0xe8, 0x9b, 0xae, 0x67, 0x5b, 0x91, 0x04, 0xb2, 0xf3,
+    0x75, 0x8b, 0x2f, 0xda, 0x69, 0xdc, 0xe9, 0x2e, 0x30, 0xc4, 0x95, 0x87,
+    0x82, 0x61, 0x45, 0x82, 0x90, 0x59, 0xa2, 0xbd, 0xec, 0xed, 0x65, 0x42,
+    0x67, 0x3e, 0x2c, 0x02, 0x77, 0x1f, 0xc4, 0x23, 0xbf, 0x07, 0x6e, 0x03,
+    0xd2, 0xcb, 0xff, 0x47, 0xb0, 0x18, 0x3f, 0x3c, 0x96, 0x5f, 0x39, 0x46,
+    0xea, 0xcb, 0xfa, 0x50, 0x78, 0xd6, 0x96, 0x56, 0x22, 0xe7, 0x45, 0x8e,
+    0x7a, 0x12, 0x3b, 0xff, 0xfb, 0xec, 0x7c, 0x2f, 0xf2, 0x0d, 0xe0, 0x47,
+    0xe6, 0x59, 0x7f, 0xba, 0x96, 0xce, 0x30, 0x74, 0xb2, 0xff, 0xf3, 0xb1,
+    0x60, 0x36, 0x46, 0xa7, 0x8f, 0xac, 0xbf, 0xf6, 0xeb, 0x6e, 0x7a, 0x68,
+    0xdc, 0x73, 0xac, 0xbf, 0xf6, 0x1e, 0x39, 0xcc, 0x96, 0xde, 0x2c, 0xa1,
+    0xa3, 0x4b, 0xc9, 0x44, 0x91, 0x7e, 0x3b, 0x9f, 0x06, 0xb2, 0xff, 0xbf,
+    0xdf, 0x98, 0x8a, 0x3a, 0x59, 0x50, 0x7c, 0x0e, 0x4f, 0x7f, 0xe8, 0x9e,
+    0x38, 0xdb, 0x79, 0xa8, 0x59, 0x5b, 0x15, 0x29, 0xe2, 0xdb, 0x46, 0x13,
+    0xe8, 0x47, 0x91, 0x05, 0xff, 0x14, 0x6c, 0x9a, 0x51, 0xa9, 0xd6, 0x5f,
+    0xec, 0x1b, 0x6f, 0xe0, 0x3b, 0x59, 0x7f, 0xff, 0xec, 0xde, 0xdf, 0x96,
+    0x03, 0x85, 0x80, 0xd4, 0x4e, 0xfa, 0xed, 0x65, 0xd1, 0x27, 0x45, 0x27,
+    0x0d, 0xaf, 0xef, 0xf3, 0x32, 0x78, 0x59, 0x47, 0x4c, 0xeb, 0xd0, 0xe0,
+    0x22, 0xdb, 0xee, 0x0f, 0xe1, 0x59, 0x7f, 0xff, 0xf6, 0xf8, 0xd6, 0x0c,
+    0x9f, 0x46, 0xbf, 0xc3, 0xf6, 0xff, 0x3c, 0xcb, 0x2f, 0xf6, 0x82, 0x41,
+    0xf8, 0x7e, 0xb2, 0xf7, 0xa0, 0x96, 0x53, 0x1e, 0x7f, 0xcd, 0x2f, 0xb4,
+    0x27, 0xf8, 0xb2, 0xa0, 0xf1, 0x70, 0x86, 0xff, 0x44, 0xc5, 0x07, 0x0c,
+    0xeb, 0x2f, 0xcf, 0xc6, 0x38, 0x56, 0x51, 0xcf, 0x6f, 0xc6, 0x97, 0x1a,
+    0x62, 0xcb, 0xff, 0xf4, 0xa0, 0x8a, 0x27, 0x31, 0xe7, 0xf3, 0x41, 0x2c,
+    0xa8, 0x54, 0xd3, 0xd9, 0xab, 0x11, 0xfa, 0x30, 0x77, 0x7b, 0xf9, 0x10,
+    0x46, 0x6f, 0x9a, 0x77, 0x3a, 0xcb, 0xc4, 0xd0, 0xb2, 0xfd, 0x02, 0x1f,
+    0xcc, 0xb2, 0x86, 0x7c, 0x9a, 0x22, 0x21, 0xab, 0xed, 0xf2, 0x3c, 0x2c,
+    0xbf, 0x3c, 0xf0, 0xfd, 0xac, 0xbe, 0x8e, 0x41, 0xd6, 0x5f, 0xe8, 0x9c,
+    0x83, 0x9d, 0x7d, 0x65, 0x84, 0xd8, 0x7a, 0xbe, 0x21, 0xac, 0x46, 0x67,
+    0x89, 0x1d, 0xf6, 0xfe, 0x97, 0x3f, 0x84, 0x6a, 0xcb, 0xee, 0x3c, 0xb7,
+    0x16, 0x5f, 0xfa, 0x5c, 0x89, 0x40, 0x39, 0x9b, 0xd6, 0x5e, 0x81, 0xb2,
+    0xcb, 0xfd, 0xa1, 0x3f, 0xc9, 0xf0, 0xc5, 0x97, 0xff, 0x47, 0x79, 0xac,
+    0xf3, 0x6b, 0xce, 0xb2, 0xff, 0xf3, 0x73, 0x07, 0xa8, 0x0f, 0xc9, 0xb7,
+    0xac, 0xb9, 0xcc, 0x59, 0x5d, 0x9f, 0x09, 0x89, 0x57, 0xff, 0x46, 0xa5,
+    0xdf, 0x9a, 0x62, 0x73, 0x16, 0x5f, 0xfd, 0xa7, 0x9c, 0x7e, 0x8e, 0x7c,
+    0x3e, 0x59, 0x5c, 0x44, 0x67, 0xd1, 0xaf, 0x7d, 0xa6, 0x59, 0x63, 0xc9,
+    0x3e, 0x6c, 0x1b, 0xd1, 0xbf, 0xa1, 0x49, 0xc8, 0x58, 0x7c, 0x8e, 0xfa,
+    0x0f, 0x1e, 0x59, 0x7e, 0x83, 0x07, 0x87, 0x59, 0x66, 0x91, 0xe4, 0x88,
+    0x43, 0x50, 0xab, 0xfb, 0x25, 0x13, 0x7a, 0x16, 0x17, 0xf3, 0x81, 0xfb,
+    0x7d, 0x2c, 0xbf, 0xfe, 0x09, 0x14, 0x1a, 0x7f, 0x47, 0x5f, 0x8f, 0x2c,
+    0xbf, 0xff, 0x8b, 0xfc, 0x0c, 0x7a, 0x0e, 0x58, 0x03, 0xc4, 0x96, 0x5e,
+    0x1b, 0xf9, 0x65, 0xff, 0x47, 0xa3, 0xa9, 0x4a, 0x27, 0x59, 0x7d, 0xdf,
+    0x9b, 0x4b, 0x2f, 0xed, 0xc2, 0xc9, 0xf0, 0xc5, 0x95, 0x09, 0x81, 0xe2,
+    0xce, 0x87, 0x1c, 0xe8, 0x24, 0x77, 0xff, 0xbc, 0xc7, 0x1c, 0x6c, 0xdb,
+    0x0f, 0x9b, 0x4b, 0x2f, 0xef, 0xc7, 0x8a, 0x24, 0xb2, 0xb6, 0x1f, 0xdb,
+    0x27, 0xd2, 0xcb, 0xf8, 0x9c, 0xd6, 0xd4, 0x48, 0xd7, 0x78, 0x8e, 0xf9,
+    0xff, 0xa8, 0x59, 0x7e, 0x8d, 0x69, 0xe6, 0x59, 0x73, 0x74, 0xb2, 0xff,
+    0x00, 0x38, 0x03, 0xbc, 0x96, 0x5d, 0x90, 0xb2, 0xa4, 0x7b, 0xfd, 0x0b,
+    0x9c, 0xce, 0xa7, 0x45, 0xbb, 0xc2, 0x1e, 0xff, 0xff, 0x79, 0xba, 0x82,
+    0x8e, 0x0f, 0xd1, 0xc6, 0x2e, 0xa4, 0xb2, 0xff, 0xff, 0xbc, 0xe3, 0xf3,
+    0x13, 0xfe, 0x26, 0x63, 0x58, 0xb3, 0x7a, 0xcb, 0xfe, 0x6f, 0xe6, 0xb4,
+    0x19, 0xf7, 0xac, 0xbf, 0xee, 0x67, 0xc7, 0x98, 0x0e, 0x2c, 0xaf, 0x1f,
+    0xa7, 0xcf, 0x2f, 0xf9, 0xbf, 0x9a, 0xd0, 0x67, 0xde, 0xb2, 0xe0, 0x96,
+    0xc3, 0xde, 0xf1, 0x15, 0x42, 0x78, 0xf8, 0xc1, 0xc8, 0xce, 0x2a, 0x4c,
+    0x90, 0xe1, 0xcb, 0x23, 0xc3, 0xce, 0xcb, 0x75, 0x1a, 0x9f, 0xa1, 0xe2,
+    0x04, 0x22, 0x86, 0xc7, 0x23, 0xef, 0xbe, 0x3b, 0x0e, 0x16, 0x5f, 0xcd,
+    0xed, 0x69, 0xa7, 0x59, 0x50, 0x79, 0xfe, 0x21, 0xb8, 0xcf, 0xac, 0xbf,
+    0xf9, 0x9b, 0xd3, 0x67, 0xe3, 0xf0, 0x35, 0x97, 0xc2, 0x1a, 0x21, 0xab,
+    0x2d, 0x0b, 0x2f, 0xff, 0xa3, 0xa9, 0x39, 0x03, 0x60, 0x1b, 0x4c, 0x6a,
+    0xca, 0x84, 0x72, 0x4c, 0x30, 0x62, 0x1e, 0xd9, 0x3e, 0xe8, 0x85, 0xfe,
+    0x8e, 0xa6, 0xf4, 0x11, 0xab, 0x2e, 0x29, 0x96, 0x5e, 0xe7, 0x99, 0x65,
+    0x1c, 0xd9, 0xfc, 0x5e, 0xfa, 0x73, 0xb4, 0x96, 0x5f, 0x40, 0x04, 0x3a,
+    0xcb, 0xe2, 0x0b, 0xc9, 0x65, 0x76, 0x78, 0x9c, 0x23, 0xbf, 0xa0, 0xe2,
+    0xc0, 0x08, 0x59, 0x78, 0x57, 0x1f, 0x59, 0x7f, 0x1e, 0x30, 0xbf, 0xc5,
+    0x95, 0xe3, 0xfb, 0x09, 0x7e, 0xe9, 0x05, 0x42, 0x66, 0xf8, 0xce, 0xd0,
+    0x9e, 0xbf, 0x37, 0xbf, 0x9d, 0xac, 0xbd, 0x84, 0x05, 0x95, 0x31, 0xe1,
+    0xee, 0x94, 0x54, 0x2a, 0x5c, 0xc6, 0x8d, 0x46, 0xb0, 0xee, 0xd7, 0xf8,
+    0x62, 0x46, 0xe7, 0x83, 0xc5, 0x97, 0xed, 0xd6, 0x3e, 0x7d, 0x65, 0xfb,
+    0xf9, 0xf2, 0x85, 0x95, 0xd2, 0x22, 0x0e, 0x70, 0x45, 0x57, 0x82, 0xfc,
+    0x59, 0x74, 0x18, 0xb2, 0xb4, 0x6c, 0xf8, 0x39, 0x73, 0xf9, 0x65, 0xd3,
+    0x42, 0xcb, 0xa3, 0xeb, 0x2a, 0x0d, 0x69, 0xa2, 0xf7, 0xc3, 0xc2, 0x92,
+    0xcb, 0xf6, 0x34, 0xbd, 0x0b, 0x2e, 0x9b, 0xec, 0x78, 0xfe, 0x21, 0xbf,
+    0xff, 0x0f, 0xd1, 0xa6, 0x04, 0x09, 0x13, 0x14, 0x1d, 0x65, 0xfe, 0x36,
+    0x0b, 0xfc, 0x7f, 0x2c, 0xa8, 0x45, 0xb3, 0x17, 0x3a, 0xad, 0xf8, 0xb1,
+    0xca, 0x75, 0x95, 0x0a, 0x8e, 0x31, 0x8d, 0x88, 0x5d, 0x0c, 0xa3, 0x1e,
+    0xe1, 0x6d, 0xe7, 0xcd, 0x2c, 0xbf, 0xec, 0xe4, 0x0f, 0x90, 0xc3, 0x59,
+    0x7f, 0x44, 0xfa, 0x8c, 0x1a, 0xcb, 0xff, 0x61, 0xf9, 0xe8, 0xeb, 0xf1,
+    0xe5, 0x97, 0xf7, 0xa3, 0xff, 0x83, 0xac, 0xbf, 0xff, 0xb5, 0x83, 0xe1,
+    0x07, 0x24, 0x17, 0x1f, 0x33, 0x4b, 0x28, 0x68, 0x87, 0x62, 0xda, 0xd2,
+    0x6c, 0xe7, 0x1b, 0xf1, 0xbf, 0xcb, 0x44, 0x86, 0x35, 0xf1, 0x41, 0xf8,
+    0xb2, 0xf1, 0xdf, 0xa5, 0x9f, 0x34, 0x37, 0x7f, 0xb5, 0x97, 0xcd, 0xa0,
+    0x71, 0x65, 0x61, 0xf3, 0xe8, 0xb7, 0xe3, 0x17, 0xf1, 0x46, 0xc0, 0x02,
+    0x16, 0x5f, 0x38, 0x22, 0x4b, 0x2f, 0xe9, 0x78, 0x1b, 0xc5, 0x3b, 0x52,
+    0xcb, 0xf9, 0xca, 0x3d, 0xe8, 0x59, 0x7f, 0xa3, 0x4f, 0x12, 0x89, 0x2c,
+    0xb8, 0x24, 0xb2, 0xec, 0xed, 0x65, 0xd1, 0x2f, 0x1a, 0xdf, 0x8b, 0x57,
+    0x48, 0xef, 0x98, 0xeb, 0x45, 0x64, 0xbd, 0x7f, 0xfc, 0x59, 0xbf, 0xb7,
+    0xd4, 0xef, 0xf7, 0xe8, 0x0b, 0x2f, 0xf6, 0x0d, 0xb8, 0x63, 0xe9, 0x65,
+    0x42, 0xb0, 0x91, 0xc3, 0x67, 0x0b, 0xbb, 0x2e, 0x68, 0xc4, 0x1c, 0xfb,
+    0xea, 0x77, 0xf8, 0x9e, 0x7e, 0xa5, 0x1b, 0xab, 0x2f, 0xf7, 0x3c, 0xe2,
+    0x7a, 0x24, 0xb2, 0xa7, 0x3e, 0xbe, 0x8d, 0xee, 0xc9, 0x96, 0x5f, 0xf9,
+    0xfa, 0xf4, 0x30, 0x1f, 0xe1, 0x59, 0x7f, 0xff, 0xa1, 0xa4, 0xfc, 0xe4,
+    0x61, 0x44, 0xb0, 0xef, 0xd2, 0xcb, 0x61, 0xd1, 0x37, 0xf3, 0xea, 0xc4,
+    0x6d, 0x72, 0x16, 0x57, 0xec, 0x9f, 0x3a, 0x92, 0xcb, 0xff, 0xef, 0x41,
+    0xdb, 0x4d, 0xbb, 0x02, 0x4f, 0x86, 0x2c, 0xbf, 0xf6, 0x0e, 0x04, 0x39,
+    0x47, 0x52, 0x59, 0x7f, 0x60, 0x7b, 0x13, 0x3a, 0x59, 0x43, 0x47, 0x64,
+    0xc5, 0x3c, 0x54, 0xde, 0x7f, 0x7f, 0xe6, 0xd4, 0x70, 0x42, 0x28, 0xd2,
+    0xcb, 0xfe, 0x89, 0x13, 0xfe, 0x4d, 0xbd, 0x65, 0xe1, 0x20, 0x0b, 0x2b,
+    0xc7, 0xad, 0xc3, 0x9b, 0x6e, 0x2c, 0xbf, 0xec, 0x98, 0xa2, 0x7e, 0x47,
+    0x6b, 0x2e, 0x96, 0x2c, 0xaf, 0x1e, 0x87, 0xce, 0xae, 0xe6, 0x2c, 0xbf,
+    0x44, 0xcd, 0x1c, 0x59, 0x7f, 0xf7, 0x23, 0x5d, 0xfc, 0xb2, 0x77, 0x25,
+    0x97, 0xfe, 0xff, 0xb3, 0x7b, 0x90, 0xf0, 0x0b, 0x2d, 0xe5, 0x95, 0x0a,
+    0x93, 0x27, 0x40, 0xc8, 0x49, 0xb1, 0x13, 0xb2, 0x00, 0x88, 0x85, 0xbe,
+    0x4e, 0x14, 0x43, 0x0f, 0xee, 0xf9, 0xd6, 0x5f, 0xcf, 0x9a, 0x00, 0x21,
+    0x65, 0xfb, 0x3c, 0xcf, 0x25, 0x97, 0xdc, 0xe8, 0xb4, 0xb2, 0xff, 0x6b,
+    0x3c, 0xc5, 0x07, 0x59, 0x7f, 0xfd, 0x8c, 0x59, 0x34, 0x4e, 0xf3, 0x9d,
+    0xa7, 0x59, 0x50, 0x88, 0x1e, 0x18, 0xd4, 0x26, 0x5e, 0xe2, 0xfc, 0x2c,
+    0xf9, 0x30, 0x61, 0x49, 0x7f, 0xdf, 0x7e, 0x67, 0xbc, 0xc7, 0x59, 0x77,
+    0xb8, 0xb2, 0xff, 0xb3, 0x98, 0xc3, 0x76, 0x9d, 0x65, 0xff, 0x89, 0xc1,
+    0x85, 0xfe, 0x3c, 0x96, 0x54, 0x23, 0x08, 0xd3, 0x8d, 0x0b, 0xfc, 0xde,
+    0xfc, 0x51, 0x3c, 0x4e, 0xb2, 0x86, 0x7c, 0xb3, 0x1e, 0xdf, 0xc3, 0x87,
+    0xd0, 0x02, 0xb2, 0xec, 0xf2, 0xca, 0x9c, 0xf0, 0xf7, 0x96, 0xdf, 0xd8,
+    0x30, 0x31, 0x7d, 0x65, 0xff, 0xf6, 0x31, 0xd8, 0x0f, 0xf2, 0xc9, 0xf5,
+    0x0b, 0x2f, 0x7b, 0xec, 0xb2, 0xfe, 0xdc, 0xcd, 0xe5, 0x92, 0x59, 0x73,
+    0x4c, 0xb2, 0x98, 0xf2, 0x3e, 0x63, 0x7b, 0xde, 0x85, 0x97, 0xf1, 0xaf,
+    0x2e, 0x30, 0xd6, 0x56, 0x1e, 0x53, 0x0e, 0x54, 0x27, 0xe7, 0x8c, 0xda,
+    0x25, 0xf1, 0x63, 0xa6, 0xf1, 0x93, 0xed, 0x77, 0x06, 0x4b, 0x2f, 0xef,
+    0x36, 0xb5, 0x9f, 0x59, 0x7f, 0xc4, 0xdb, 0xe0, 0x8b, 0x3e, 0xb2, 0xa7,
+    0x3f, 0xbe, 0xc5, 0xfe, 0x5b, 0x7f, 0x9b, 0x9e, 0x73, 0xc6, 0xe2, 0xcb,
+    0xff, 0xd3, 0x49, 0xb7, 0xc6, 0xb1, 0xa4, 0x1d, 0x2c, 0xad, 0x22, 0x05,
+    0xcd, 0x6e, 0x79, 0x2c, 0xbf, 0x17, 0xf6, 0xe0, 0xeb, 0x29, 0xcf, 0x00,
+    0x22, 0xd7, 0xdb, 0x8c, 0x67, 0x6b, 0x2e, 0x69, 0x2c, 0xa8, 0x37, 0xbf,
+    0x27, 0xbf, 0xec, 0x3f, 0x1b, 0x6f, 0x35, 0x0b, 0x2b, 0x69, 0x3a, 0xdf,
+    0x48, 0x8f, 0x1e, 0x78, 0xc1, 0x25, 0x2a, 0x38, 0x72, 0xfe, 0x72, 0x19,
+    0xdd, 0xc3, 0xeb, 0xa2, 0xe6, 0xa4, 0x9e, 0x6e, 0x43, 0xb6, 0x68, 0xc1,
+    0x75, 0x2a, 0xb4, 0xf2, 0xc0, 0xbd, 0x39, 0x94, 0xf0, 0xd9, 0x04, 0x3f,
+    0x8a, 0x5a, 0xff, 0x23, 0xbe, 0xfc, 0xb6, 0x80, 0xc3, 0x77, 0x7c, 0x2c,
+    0xb6, 0xd8, 0x84, 0x5e, 0xdd, 0x20, 0xb3, 0x2c, 0xbb, 0x60, 0x16, 0x56,
+    0xc3, 0x53, 0xc1, 0x0b, 0x8d, 0xfa, 0xcb, 0xff, 0xfe, 0x15, 0x05, 0x11,
+    0x82, 0xab, 0x42, 0x8d, 0xa7, 0xbf, 0x70, 0x55, 0x87, 0x66, 0xcf, 0x6d,
+    0xac, 0xbf, 0xe9, 0x40, 0x39, 0x31, 0x40, 0xd6, 0x5c, 0xd0, 0xb2, 0xf4,
+    0xc2, 0x1d, 0x65, 0xff, 0x67, 0xf9, 0x9f, 0xf6, 0x01, 0x65, 0xfe, 0xd9,
+    0x1b, 0x0e, 0xc5, 0xf5, 0x97, 0xf9, 0x8d, 0x72, 0xfe, 0x12, 0xcb, 0xfc,
+    0xe6, 0xb7, 0x38, 0xec, 0xb2, 0xb1, 0x33, 0xe3, 0x4e, 0x5c, 0x54, 0x87,
+    0xf8, 0x71, 0xf3, 0x6d, 0xe6, 0x37, 0x39, 0x2c, 0xad, 0x1f, 0xd1, 0xd9,
+    0x6f, 0xa3, 0xf8, 0x75, 0x97, 0xef, 0xc1, 0x30, 0x16, 0x5d, 0xd7, 0x4b,
+    0x2f, 0xda, 0x0e, 0xf0, 0x18, 0xb2, 0xe2, 0xe2, 0xcb, 0xfb, 0x0c, 0x70,
+    0x1f, 0x16, 0x5f, 0xc5, 0x9f, 0x0b, 0x98, 0xb2, 0xb6, 0x23, 0xf3, 0x08,
+    0x7a, 0x26, 0xf0, 0xc8, 0x0b, 0x08, 0x5b, 0x79, 0x6d, 0xff, 0xa0, 0xed,
+    0xd7, 0x03, 0x30, 0x4d, 0x59, 0x7e, 0x2f, 0xfb, 0x24, 0xb2, 0xee, 0x62,
+    0xca, 0x63, 0x7a, 0xe4, 0xf7, 0xf8, 0xa0, 0xcd, 0xbc, 0xd4, 0x2c, 0xbf,
+    0xf0, 0x5b, 0xde, 0xcd, 0x69, 0x8e, 0xb2, 0xf8, 0x87, 0x1b, 0xab, 0x2c,
+    0x66, 0xc4, 0xcd, 0x64, 0xfe, 0x31, 0xf3, 0x9a, 0xb9, 0xf5, 0xf4, 0xf1,
+    0xfe, 0x2c, 0xbd, 0x00, 0xe2, 0xca, 0xd1, 0xbf, 0x22, 0x3b, 0xe7, 0xd3,
+    0xc9, 0x65, 0xb5, 0x87, 0x82, 0x44, 0x17, 0x8c, 0x30, 0xc5, 0x97, 0xd3,
+    0x93, 0x42, 0x41, 0x66, 0x82, 0xf0, 0x4b, 0xeb, 0x2f, 0xe7, 0x29, 0x0e,
+    0x27, 0x59, 0x6d, 0xcc, 0x3c, 0x9f, 0x0e, 0x5f, 0x3f, 0xe0, 0x6b, 0x2f,
+    0x61, 0x76, 0xb2, 0xee, 0xa4, 0xb2, 0xff, 0x1b, 0x1f, 0xe7, 0x9c, 0x2b,
+    0x2f, 0xcd, 0x3e, 0x75, 0xf5, 0x97, 0xf9, 0xfc, 0x59, 0xbd, 0xfb, 0x59,
+    0x60, 0x2c, 0xb7, 0x6b, 0x2b, 0x0d, 0x1b, 0x08, 0xd4, 0x23, 0xac, 0xd1,
+    0x83, 0x9a, 0x11, 0x4f, 0xd5, 0xef, 0xfa, 0x5d, 0x71, 0xb5, 0xdf, 0xb1,
+    0x65, 0xf8, 0xd7, 0xe6, 0xf9, 0x2c, 0xae, 0x91, 0x5f, 0xa4, 0x9f, 0x9d,
+    0xdf, 0x9c, 0xa4, 0xc7, 0x59, 0x7b, 0x03, 0xb6, 0xb2, 0xb6, 0x32, 0x53,
+    0x45, 0x24, 0x7b, 0x4c, 0x62, 0x25, 0x26, 0x0e, 0x31, 0xec, 0x8e, 0x71,
+    0xa1, 0xa7, 0xe4, 0x67, 0x7c, 0x22, 0xae, 0x10, 0x86, 0x3b, 0x6d, 0xe6,
+    0x3b, 0x64, 0xd7, 0xb6, 0xad, 0xa5, 0xb5, 0xac, 0xbf, 0xef, 0x3c, 0xc5,
+    0x19, 0xa9, 0x2c, 0xbf, 0xf3, 0x90, 0x93, 0x71, 0x8b, 0xa9, 0x2c, 0xbf,
+    0xf1, 0x99, 0xc2, 0x68, 0xd6, 0x4e, 0xb2, 0xb7, 0x11, 0x6c, 0x13, 0x8d,
+    0xe8, 0x17, 0xc1, 0x9e, 0x26, 0x59, 0x7f, 0xff, 0xff, 0xdb, 0x3d, 0x9d,
+    0x4b, 0xc7, 0xd9, 0xdf, 0x83, 0xff, 0xe1, 0x7b, 0x3f, 0x03, 0xd9, 0xb3,
+    0xdb, 0x6b, 0x2a, 0x11, 0x8f, 0xb8, 0x49, 0x7e, 0x28, 0xd3, 0xf1, 0x65,
+    0xff, 0x0f, 0x02, 0x2b, 0x6f, 0x39, 0xd6, 0x5f, 0xa0, 0xe5, 0x93, 0x2c,
+    0xc3, 0x79, 0x7e, 0xe6, 0x79, 0xbc, 0xb2, 0xf6, 0xa3, 0x7a, 0xcb, 0xdb,
+    0xf0, 0x6b, 0x2f, 0xef, 0x34, 0x10, 0x61, 0x65, 0xfe, 0x8d, 0xc3, 0x73,
+    0x8f, 0xb8, 0xb2, 0x8d, 0x3e, 0x4f, 0x15, 0xdf, 0xb0, 0x62, 0x03, 0x8b,
+    0x2f, 0xb8, 0xe5, 0x25, 0x95, 0xb1, 0x30, 0xdf, 0x0f, 0x3c, 0x20, 0x88,
+    0x8f, 0x85, 0x37, 0xde, 0x81, 0x3c, 0xb2, 0xfc, 0xf3, 0x72, 0x3a, 0x59,
+    0x5b, 0x15, 0x34, 0x0d, 0x88, 0x06, 0xdc, 0x8c, 0xd3, 0xea, 0x1b, 0xc8,
+    0xef, 0xe8, 0x97, 0xa3, 0x7b, 0x2c, 0xbf, 0x61, 0xe7, 0x7d, 0xc5, 0x97,
+    0xbc, 0x27, 0x16, 0x5f, 0xe6, 0x94, 0x03, 0xd2, 0x85, 0x97, 0xc1, 0x28,
+    0x3a, 0xcb, 0xce, 0xe7, 0x59, 0x47, 0x37, 0x9e, 0x21, 0xb0, 0xd6, 0x5c,
+    0xfc, 0x59, 0x6d, 0x1c, 0xd3, 0x84, 0x46, 0xa0, 0xfb, 0xdd, 0x22, 0xe9,
+    0x7d, 0x65, 0xf4, 0xd1, 0xf7, 0x59, 0x7c, 0x10, 0x61, 0x76, 0x6e, 0x42,
+    0x2f, 0x69, 0x2c, 0xa9, 0xcf, 0x27, 0xc7, 0x17, 0xff, 0x47, 0x84, 0x1f,
+    0xdb, 0x26, 0x83, 0xac, 0xbf, 0xfb, 0xb2, 0x7f, 0xc6, 0x18, 0xe4, 0xeb,
+    0x2f, 0x41, 0x1a, 0xb2, 0xff, 0xdf, 0x63, 0x3b, 0xf3, 0x6f, 0x61, 0xac,
+    0xbf, 0xda, 0x97, 0xb3, 0x7c, 0x1d, 0x65, 0xf0, 0x45, 0x7c, 0xc5, 0x95,
+    0x08, 0xfb, 0xed, 0x0b, 0xa1, 0xc6, 0x42, 0x73, 0x5b, 0xf3, 0xcb, 0x8d,
+    0xbd, 0x65, 0xf6, 0x6a, 0x06, 0xb2, 0xfa, 0x6f, 0x64, 0xcb, 0x2f, 0x66,
+    0xb3, 0x61, 0xe2, 0xb9, 0x0d, 0xe3, 0x87, 0x7a, 0xcb, 0xfb, 0x25, 0xd4,
+    0xb3, 0xeb, 0x2d, 0xf9, 0x22, 0x03, 0x0c, 0xfc, 0x3f, 0x73, 0x76, 0xb2,
+    0xfc, 0x71, 0x46, 0xee, 0xe0, 0xd6, 0x50, 0x0f, 0x28, 0x22, 0xf7, 0xbe,
+    0x13, 0xac, 0xbe, 0xea, 0x5e, 0x65, 0x95, 0x07, 0x80, 0xe3, 0xb7, 0xf7,
+    0xe3, 0x7b, 0x10, 0x16, 0x52, 0xa2, 0x0e, 0x5f, 0xcf, 0x38, 0x1c, 0x86,
+    0x8a, 0xc1, 0xab, 0x73, 0x11, 0x03, 0xd9, 0x76, 0xd8, 0xc5, 0x1d, 0x1b,
+    0x5f, 0x85, 0x0d, 0xff, 0x36, 0x7f, 0x9a, 0xc1, 0xe2, 0xcb, 0xfb, 0xce,
+    0x72, 0x8e, 0x96, 0x5f, 0x1f, 0x8f, 0x2f, 0x1f, 0x20, 0x86, 0xf7, 0xf0,
+    0x3c, 0x59, 0xfe, 0x2c, 0xbf, 0x8b, 0x37, 0x96, 0x71, 0x65, 0xa3, 0x47,
+    0xb5, 0xf2, 0xda, 0x84, 0xd1, 0xf2, 0x11, 0x9c, 0x84, 0xa5, 0xb8, 0xb2,
+    0xfd, 0xe8, 0xdc, 0x0c, 0x96, 0x54, 0x1b, 0xc7, 0x11, 0xbe, 0x7f, 0xe1,
+    0x8b, 0x2a, 0x4c, 0x84, 0x81, 0x97, 0x61, 0x59, 0xa3, 0xdd, 0xc3, 0x77,
+    0x50, 0xa2, 0x39, 0x1f, 0xa3, 0x40, 0x02, 0x49, 0x43, 0xbb, 0x8f, 0xff,
+    0x95, 0x07, 0xbd, 0xd7, 0x6c, 0x7e, 0xfe, 0x91, 0x67, 0x5f, 0xc5, 0x97,
+    0xa5, 0xf9, 0xd6, 0x5f, 0xfe, 0x2c, 0xf6, 0x3f, 0x7e, 0x82, 0x08, 0xd6,
+    0x5f, 0xfe, 0x04, 0x75, 0x93, 0x8d, 0xdf, 0xb7, 0x1a, 0xcb, 0x09, 0xda,
+    0x24, 0xc0, 0x91, 0x50, 0x98, 0x48, 0xcb, 0x75, 0x0b, 0x1b, 0xf8, 0xbf,
+    0x2c, 0xd6, 0x2c, 0xbb, 0x6d, 0xd6, 0x53, 0x9e, 0x28, 0x85, 0x97, 0xfb,
+    0x53, 0xf1, 0xfb, 0xd6, 0x2c, 0xbf, 0xde, 0xce, 0xdf, 0xd1, 0xe5, 0x97,
+    0xff, 0x3b, 0x7e, 0x0b, 0xbc, 0xff, 0x99, 0x65, 0xfc, 0x4c, 0x0e, 0x79,
+    0x96, 0x5d, 0xa1, 0xac, 0xb8, 0xc3, 0x16, 0x54, 0x8d, 0x81, 0x82, 0xf7,
+    0xa1, 0xb7, 0xa4, 0x16, 0x68, 0xaf, 0xf9, 0x89, 0x81, 0xcc, 0xf3, 0xac,
+    0xbf, 0x8b, 0x0c, 0xc2, 0x1a, 0xca, 0xc4, 0xe1, 0x3c, 0x66, 0xe8, 0x5c,
+    0x7e, 0xf9, 0x78, 0x86, 0xd7, 0xf4, 0x17, 0xfd, 0x92, 0x59, 0x70, 0x38,
+    0xb2, 0xfe, 0x6f, 0x31, 0xa6, 0xc2, 0xcb, 0x08, 0x33, 0xc5, 0xf8, 0xbd,
+    0x69, 0x13, 0x5c, 0x71, 0xbe, 0x20, 0xb8, 0x8b, 0x2a, 0x15, 0x77, 0xb4,
+    0x77, 0x22, 0x43, 0xc7, 0x74, 0x8e, 0xee, 0x7d, 0x65, 0xe6, 0x27, 0x59,
+    0x69, 0xd6, 0x5b, 0x24, 0x6b, 0x08, 0x6a, 0xff, 0xa0, 0xfb, 0x33, 0x53,
+    0xb4, 0xeb, 0x2b, 0xb4, 0x52, 0x6e, 0x21, 0x91, 0x2d, 0xef, 0x44, 0x2c,
+    0xbf, 0x8f, 0x83, 0x82, 0xed, 0x65, 0x1c, 0xf2, 0x04, 0x1b, 0xbc, 0x61,
+    0x86, 0x24, 0xa4, 0x82, 0xcd, 0x05, 0xf3, 0x18, 0xd3, 0x24, 0xae, 0xcf,
+    0x01, 0x87, 0x6f, 0xb5, 0x1b, 0xf1, 0x65, 0xe9, 0xb3, 0xcb, 0x2b, 0x0f,
+    0x01, 0xc8, 0xef, 0xb3, 0xe1, 0x75, 0x97, 0x60, 0xad, 0x65, 0x6d, 0x0d,
+    0xa9, 0xd4, 0x43, 0x8e, 0x78, 0x7e, 0x64, 0xa8, 0xd6, 0xa4, 0x55, 0xea,
+    0x3e, 0xd3, 0xbd, 0x7a, 0x58, 0x8b, 0xc3, 0xc0, 0x0f, 0x65, 0x08, 0x3e,
+    0x31, 0x7c, 0x80, 0xc2, 0x1b, 0xf1, 0x3c, 0xb0, 0x6b, 0x2f, 0xb5, 0x20,
+    0xe2, 0xcb, 0xfe, 0xf7, 0x6d, 0x00, 0x3c, 0x49, 0x65, 0xfc, 0x58, 0x00,
+    0x60, 0x16, 0x5f, 0xff, 0xf7, 0xf9, 0x9b, 0xca, 0x3a, 0xc3, 0xbf, 0x33,
+    0x4f, 0xd1, 0x8b, 0x2f, 0xdf, 0x13, 0xce, 0x05, 0x95, 0x3a, 0x24, 0xba,
+    0x69, 0xae, 0x91, 0xc6, 0x50, 0xbe, 0xbc, 0x4d, 0xc5, 0x97, 0x9f, 0x3b,
+    0x59, 0x79, 0xb2, 0x75, 0x97, 0xff, 0xb5, 0xe3, 0x1c, 0x7b, 0x04, 0x00,
+    0x1b, 0x75, 0x65, 0xf0, 0xdc, 0x80, 0xb2, 0xff, 0x9c, 0xed, 0xee, 0xb9,
+    0x03, 0x59, 0x7f, 0xf4, 0x10, 0x0a, 0x3a, 0x9a, 0x08, 0x0b, 0x2b, 0x62,
+    0xa8, 0x6c, 0x8c, 0x71, 0x8a, 0x34, 0x37, 0xe1, 0xc7, 0x1c, 0x02, 0x91,
+    0x10, 0xf0, 0xe6, 0xfa, 0x40, 0x91, 0x2c, 0xbf, 0x4d, 0xb6, 0x0d, 0xbc,
+    0x59, 0x7b, 0xef, 0xe5, 0x97, 0xef, 0x94, 0x1f, 0x8b, 0x2a, 0x0f, 0x0f,
+    0xa1, 0xcb, 0xff, 0x0f, 0x27, 0x3e, 0x75, 0xf8, 0x3a, 0xcb, 0xf6, 0xb3,
+    0x7b, 0xf9, 0x65, 0x99, 0x65, 0xff, 0x39, 0xbd, 0xf9, 0x86, 0xf2, 0x59,
+    0x7d, 0xd7, 0x6d, 0xa5, 0x97, 0xd3, 0xce, 0xfd, 0x2c, 0xb7, 0x19, 0x12,
+    0x64, 0x21, 0xf3, 0xa1, 0x09, 0x2f, 0xff, 0xf7, 0xa0, 0xa0, 0x3d, 0xfd,
+    0xfd, 0x87, 0x6f, 0x80, 0x2b, 0x28, 0xd4, 0xd7, 0x81, 0x0b, 0xcf, 0xa1,
+    0x5f, 0xfe, 0x35, 0xbe, 0x59, 0x2d, 0x9d, 0x9c, 0x10, 0xb2, 0xfb, 0x35,
+    0xe6, 0x59, 0x7f, 0xf9, 0xe4, 0x59, 0xbd, 0xe6, 0x8c, 0xff, 0x16, 0x54,
+    0x1f, 0x5b, 0x90, 0xdb, 0x6d, 0x65, 0xf0, 0xdd, 0x86, 0xb2, 0xb6, 0x83,
+    0x6b, 0x82, 0x97, 0xb7, 0xe1, 0x2c, 0xbd, 0xf0, 0x05, 0x65, 0xff, 0x31,
+    0x93, 0x6c, 0x8d, 0x6b, 0x16, 0x54, 0x1f, 0xb3, 0x0e, 0xcc, 0x3b, 0x7f,
+    0xb2, 0x71, 0x3d, 0xec, 0xdc, 0x59, 0x7f, 0xf0, 0x3d, 0x99, 0x3b, 0x66,
+    0xf8, 0xe9, 0x65, 0x41, 0xff, 0x18, 0x71, 0x7f, 0xf4, 0x1f, 0x5a, 0x89,
+    0xfe, 0xee, 0x6a, 0xcb, 0xa0, 0xc5, 0x94, 0x03, 0xdc, 0x24, 0x5b, 0xff,
+    0xe0, 0x8a, 0xf9, 0xce, 0xfc, 0xdd, 0x7f, 0x5a, 0x85, 0x97, 0xb9, 0xec,
+    0x59, 0x50, 0x7e, 0x61, 0x57, 0xbc, 0x78, 0xed, 0x65, 0xff, 0x3c, 0xb8,
+    0x07, 0xdf, 0x83, 0x59, 0x76, 0x7b, 0x0f, 0x5f, 0xc3, 0xb7, 0xff, 0xe6,
+    0xd7, 0x83, 0xe7, 0x6f, 0xc4, 0x82, 0x3c, 0x59, 0x7e, 0xd3, 0x4e, 0xe7,
+    0x59, 0x71, 0x86, 0x2c, 0xac, 0x3c, 0x13, 0x0a, 0x2c, 0x14, 0x82, 0xcd,
+    0x15, 0x1d, 0x1b, 0x5e, 0x85, 0xbd, 0xff, 0xed, 0xfe, 0x6c, 0x2e, 0xfc,
+    0xc7, 0x8e, 0xd6, 0x5f, 0xce, 0x0e, 0xa5, 0x9f, 0x59, 0x58, 0x7f, 0x4c,
+    0x99, 0x7a, 0x42, 0x1d, 0x65, 0xf3, 0xf4, 0x31, 0xac, 0xbd, 0x00, 0xe2,
+    0xca, 0x92, 0xa2, 0x56, 0x8c, 0x1b, 0xd0, 0xa2, 0x72, 0x0e, 0x0f, 0x04,
+    0x8e, 0xf6, 0x1f, 0x71, 0x65, 0xff, 0x9f, 0x7e, 0x08, 0x51, 0xe6, 0x9d,
+    0x65, 0xfe, 0xce, 0x16, 0x7f, 0xcc, 0xb2, 0x86, 0x89, 0x0d, 0x0f, 0x92,
+    0x05, 0xfc, 0xde, 0x72, 0x63, 0xac, 0xa1, 0xb2, 0x49, 0x32, 0x39, 0xe6,
+    0x37, 0x9a, 0x17, 0x1a, 0x55, 0x3c, 0x26, 0xfd, 0x0a, 0xc0, 0x3f, 0x14,
+    0x25, 0x3f, 0x2a, 0x77, 0x7c, 0x3c, 0xb7, 0x4b, 0xe9, 0x65, 0xfd, 0x1c,
+    0x6f, 0x94, 0x2c, 0xa8, 0x36, 0xde, 0x0b, 0xbe, 0xcf, 0x31, 0x8b, 0x2f,
+    0xa4, 0x0c, 0x02, 0xcb, 0xe7, 0xc1, 0x31, 0x65, 0xfd, 0xfc, 0x98, 0xa0,
+    0xeb, 0x88, 0x09, 0x7c, 0x43, 0xf4, 0x2a, 0x20, 0x20, 0xb3, 0x75, 0x53,
+    0xa3, 0x7f, 0xa2, 0x2f, 0x11, 0x3a, 0xdd, 0xff, 0xba, 0x91, 0x34, 0xff,
+    0x79, 0x71, 0x65, 0xff, 0x70, 0x78, 0x50, 0x41, 0x85, 0x96, 0x63, 0x4f,
+    0xdb, 0xa4, 0x0b, 0xff, 0xfb, 0xd1, 0xee, 0xdb, 0x98, 0x32, 0xc9, 0xa6,
+    0x89, 0xd6, 0x5f, 0x8e, 0x0d, 0x67, 0x4b, 0x28, 0x68, 0x86, 0xc5, 0xdb,
+    0xf6, 0x98, 0x22, 0xb8, 0x59, 0x7f, 0xb5, 0x9d, 0x70, 0x0f, 0xf5, 0x97,
+    0xd3, 0x19, 0x1d, 0x2c, 0xa8, 0x44, 0x21, 0xa5, 0x7c, 0x34, 0xb0, 0x67,
+    0x46, 0xb7, 0x70, 0xa6, 0xbf, 0x44, 0x9f, 0xa3, 0x16, 0x5f, 0xf6, 0xcd,
+    0x6b, 0x3d, 0xd4, 0xb8, 0xb2, 0xff, 0xff, 0x67, 0x02, 0xfd, 0x66, 0x11,
+    0xbc, 0xe6, 0x17, 0xf8, 0xb2, 0xff, 0xa4, 0xc5, 0xff, 0x64, 0xb6, 0xd6,
+    0x57, 0x68, 0xd8, 0xe8, 0xf4, 0xec, 0x17, 0x1b, 0xbd, 0x65, 0xff, 0x7f,
+    0x51, 0x9d, 0x6d, 0x21, 0x53, 0x68, 0x59, 0x7f, 0xdf, 0x0c, 0x64, 0xfb,
+    0x48, 0x54, 0xda, 0x16, 0x5c, 0xe6, 0x0d, 0x15, 0xdd, 0x0d, 0x08, 0x95,
+    0x58, 0xaf, 0x51, 0xa3, 0x85, 0xd1, 0x83, 0xc6, 0x02, 0x50, 0xe0, 0xbe,
+    0xff, 0x03, 0x25, 0x97, 0xe0, 0xed, 0xe6, 0x80, 0xb2, 0xfd, 0xa0, 0x1d,
+    0xe4, 0xb2, 0x9c, 0xfd, 0xb8, 0x46, 0x21, 0x5d, 0xa7, 0x59, 0x7e, 0xd9,
+    0x93, 0x31, 0xd6, 0x5f, 0xfa, 0x3a, 0xfe, 0x49, 0x88, 0x0c, 0xb2, 0xff,
+    0xf0, 0x63, 0x66, 0xef, 0xdb, 0x9e, 0xe9, 0xcc, 0x59, 0x53, 0xa2, 0xe1,
+    0x8a, 0xb8, 0x7b, 0x7f, 0xec, 0x1f, 0x9c, 0x5c, 0x7a, 0x3a, 0x59, 0x7f,
+    0xde, 0x7e, 0x31, 0x14, 0x74, 0xb2, 0x96, 0x0a, 0x53, 0x71, 0xd4, 0x32,
+    0x8e, 0x61, 0xc4, 0x0b, 0xfe, 0x23, 0x74, 0x4d, 0xd8, 0x49, 0x65, 0xfb,
+    0xf1, 0x85, 0x0b, 0x29, 0x8f, 0x78, 0x8e, 0x6f, 0x08, 0x5f, 0x59, 0x79,
+    0x8e, 0xeb, 0x2f, 0xf8, 0x78, 0xc6, 0xb0, 0xdc, 0xeb, 0x2a, 0x73, 0xf0,
+    0x34, 0x74, 0xe3, 0x77, 0xfe, 0x86, 0xe4, 0x7f, 0x91, 0xe8, 0x59, 0x7f,
+    0xd9, 0x39, 0x41, 0xb9, 0xd7, 0xd6, 0x51, 0xa7, 0xec, 0x21, 0xe5, 0xfb,
+    0xbc, 0x6e, 0x1d, 0x65, 0xff, 0xdc, 0x82, 0xf8, 0x93, 0x79, 0xbf, 0xc5,
+    0x97, 0xd9, 0xa8, 0xde, 0xb2, 0xba, 0x3e, 0x9f, 0xa3, 0x5f, 0xff, 0xee,
+    0xc0, 0x78, 0x96, 0x76, 0x36, 0x2c, 0xd7, 0x71, 0x8b, 0x2b, 0xa4, 0x42,
+    0x11, 0x1d, 0x1d, 0x33, 0x87, 0x8c, 0x56, 0xa1, 0x5b, 0x46, 0x42, 0xb1,
+    0xa1, 0x20, 0xf0, 0xa7, 0x0c, 0x6b, 0x97, 0xb7, 0x63, 0xa5, 0x97, 0xf8,
+    0xb0, 0x1c, 0x11, 0xfe, 0xb2, 0xf4, 0x61, 0xd6, 0x5c, 0xd8, 0xb2, 0xfe,
+    0xcd, 0x69, 0xa6, 0xe2, 0xca, 0x91, 0xe1, 0xfc, 0x56, 0xf1, 0xe7, 0x85,
+    0x97, 0xfb, 0x0a, 0x3a, 0xe3, 0xf6, 0xb2, 0x8d, 0x3f, 0x2e, 0xc8, 0x8c,
+    0x1d, 0xbe, 0xce, 0x4b, 0xb5, 0x97, 0x80, 0x7f, 0xac, 0xa9, 0x27, 0x2a,
+    0xc4, 0x07, 0x33, 0x78, 0x68, 0x00, 0xc8, 0x88, 0xef, 0xfd, 0x87, 0x8e,
+    0xdb, 0xfa, 0x09, 0xd6, 0x5f, 0xbc, 0xf3, 0x8f, 0x7a, 0xcb, 0xff, 0x69,
+    0xa7, 0xd4, 0x34, 0x9f, 0x8b, 0x2f, 0xfc, 0xf9, 0x84, 0x68, 0x9f, 0x08,
+    0xd6, 0x5e, 0x99, 0xc6, 0xb2, 0xd3, 0xe9, 0x13, 0x5e, 0x3e, 0x09, 0xfd,
+    0xe6, 0xeb, 0x8b, 0x2f, 0xfe, 0xe4, 0x4f, 0x9a, 0x98, 0xa0, 0x1c, 0x59,
+    0x7f, 0x9b, 0xd9, 0xad, 0x67, 0x4b, 0x2f, 0xd3, 0x14, 0x6a, 0x4b, 0x2d,
+    0x12, 0x3d, 0xbc, 0x33, 0xa9, 0x2a, 0x1e, 0xec, 0xfd, 0xe1, 0x8a, 0x03,
+    0x7f, 0x8e, 0x99, 0x0a, 0x0b, 0xed, 0x3c, 0xa6, 0x59, 0x7f, 0xee, 0xbf,
+    0x85, 0x00, 0xc2, 0x02, 0xcb, 0xee, 0x40, 0x36, 0xa5, 0x95, 0x87, 0xc9,
+    0xc3, 0xda, 0x35, 0x15, 0x06, 0x42, 0x1e, 0xfb, 0xd8, 0x07, 0x59, 0x50,
+    0x9a, 0xbb, 0xc6, 0x19, 0xc2, 0xab, 0xfd, 0xa9, 0xb8, 0xc5, 0xf6, 0x59,
+    0x7f, 0xe9, 0x31, 0xcc, 0xc2, 0x1f, 0xa1, 0x65, 0xfe, 0x37, 0x34, 0x03,
+    0xb7, 0x16, 0x57, 0x47, 0xe4, 0x47, 0xd7, 0xfb, 0xcd, 0xd0, 0x34, 0xe3,
+    0x59, 0x69, 0x96, 0x5f, 0x74, 0x0d, 0x42, 0x4b, 0x8c, 0x31, 0x25, 0x41,
+    0xbc, 0x30, 0x8e, 0xcc, 0x90, 0x59, 0xa1, 0xaf, 0x22, 0x44, 0x9b, 0xef,
+    0xff, 0xfe, 0x21, 0x79, 0x9b, 0xb1, 0x33, 0x1e, 0x26, 0xd8, 0x5d, 0x4b,
+    0xc1, 0x02, 0xcb, 0x9b, 0xb5, 0x96, 0xdd, 0x59, 0x7c, 0xfb, 0x04, 0x3a,
+    0xca, 0xde, 0x6e, 0x4c, 0x14, 0xbf, 0x86, 0xdb, 0xfd, 0x9b, 0xab, 0x2d,
+    0x32, 0xca, 0xc3, 0xc4, 0x63, 0x2a, 0x59, 0x76, 0xa5, 0xb1, 0x52, 0x24,
+    0xa1, 0x8b, 0xd1, 0x16, 0x9e, 0xbc, 0xa0, 0xed, 0x00, 0x20, 0xa8, 0x55,
+    0xbe, 0xf2, 0x99, 0xaf, 0xc5, 0x2e, 0xc3, 0x3a, 0xcb, 0xd1, 0xa9, 0x96,
+    0x53, 0x9e, 0x38, 0x4a, 0xaf, 0xe1, 0x0e, 0x4f, 0xfe, 0x2c, 0xad, 0x8e,
+    0x8f, 0x33, 0x68, 0x26, 0x89, 0x55, 0x13, 0xc2, 0x12, 0x44, 0x43, 0x72,
+    0xca, 0x4a, 0x37, 0x51, 0x84, 0x34, 0x3f, 0xf5, 0x39, 0x10, 0x78, 0x67,
+    0xfa, 0x74, 0x21, 0xe3, 0xf2, 0x29, 0x79, 0xff, 0x35, 0x0c, 0xb8, 0x43,
+    0x1c, 0x44, 0x21, 0xbd, 0xf6, 0x31, 0x65, 0x8d, 0x59, 0x7f, 0x4f, 0xb6,
+    0x1f, 0x36, 0x96, 0x5f, 0xe2, 0x97, 0x07, 0xe6, 0x31, 0x65, 0xe9, 0xdc,
+    0xeb, 0x2e, 0xe8, 0x96, 0x5f, 0xba, 0x97, 0x84, 0xe2, 0xcb, 0x3e, 0x1e,
+    0x11, 0x0b, 0xdc, 0xc3, 0x59, 0x69, 0x96, 0x5c, 0x78, 0x59, 0x7b, 0xec,
+    0x62, 0xe3, 0x08, 0x5c, 0xe2, 0x2a, 0x20, 0x77, 0x46, 0xaa, 0xb6, 0x22,
+    0x1d, 0x84, 0x82, 0x81, 0x52, 0x47, 0x9f, 0x89, 0x7f, 0x09, 0xda, 0xd8,
+    0x9f, 0xfc, 0x09, 0x31, 0x93, 0x9a, 0x06, 0x35, 0x2b, 0xf8, 0x18, 0x51,
+    0x3c, 0x2c, 0xbb, 0x42, 0xb5, 0x95, 0xa3, 0xc7, 0x22, 0xcb, 0xfb, 0x08,
+    0x19, 0x83, 0x59, 0x7f, 0x8d, 0x76, 0xeb, 0x8c, 0xeb, 0x2f, 0xff, 0xfd,
+    0x2e, 0xfc, 0xda, 0x9c, 0xf1, 0xdf, 0xa1, 0x87, 0x1e, 0x89, 0x2c, 0xbd,
+    0xe8, 0x35, 0x65, 0x74, 0x88, 0xbd, 0xed, 0xd7, 0xf0, 0x35, 0xa6, 0xe8,
+    0x0b, 0x2f, 0xfe, 0x94, 0x10, 0x33, 0x40, 0x3b, 0x71, 0x65, 0xfe, 0xce,
+    0xe2, 0x72, 0x8e, 0xd6, 0x5f, 0xbb, 0x28, 0xea, 0x4b, 0x2c, 0x05, 0x96,
+    0xdc, 0xd8, 0x7d, 0xd8, 0x68, 0xc5, 0x37, 0xec, 0xff, 0x1f, 0xa5, 0x97,
+    0x40, 0x56, 0x5f, 0x82, 0x40, 0x12, 0x4b, 0x2f, 0xf7, 0xa0, 0x07, 0x79,
+    0x6c, 0xc3, 0x7f, 0xc1, 0x6a, 0x1a, 0x2c, 0x44, 0x67, 0xbf, 0xd0, 0x09,
+    0xa4, 0xc1, 0x15, 0xac, 0xbc, 0x59, 0xcd, 0x87, 0xb8, 0x21, 0x25, 0x1a,
+    0xac, 0xf9, 0xe1, 0x7c, 0x44, 0xdf, 0x2f, 0x0c, 0x2c, 0x77, 0xc6, 0x8b,
+    0x7f, 0xf6, 0x9b, 0xa1, 0x3f, 0x8d, 0x27, 0xe2, 0xcb, 0xfe, 0x0c, 0xf1,
+    0xb2, 0x3f, 0x03, 0x59, 0x5a, 0x44, 0x07, 0x91, 0x6f, 0xe8, 0xd9, 0xbb,
+    0xbb, 0x1b, 0x8b, 0x2f, 0xc7, 0x79, 0x00, 0xeb, 0x2d, 0xad, 0x1f, 0x00,
+    0x0e, 0x2f, 0x3e, 0xa7, 0x59, 0x71, 0x86, 0x2c, 0xbf, 0xda, 0x6c, 0xde,
+    0x24, 0x85, 0xf6, 0x6d, 0x8c, 0x1d, 0xbe, 0x27, 0xe8, 0x0b, 0x2f, 0xfc,
+    0xc6, 0xec, 0xe0, 0x40, 0x78, 0x92, 0xcb, 0xfd, 0xcc, 0xfb, 0x9f, 0x09,
+    0x65, 0x0d, 0x3c, 0x66, 0x84, 0x1e, 0x97, 0x8e, 0xa1, 0xe2, 0x2f, 0xa1,
+    0x5f, 0xfb, 0x98, 0x59, 0xec, 0xef, 0x09, 0x65, 0xff, 0xe6, 0xe6, 0x16,
+    0xc1, 0x35, 0x36, 0x61, 0x8b, 0x2f, 0xb4, 0xd0, 0x75, 0x97, 0xfb, 0x9f,
+    0xf6, 0x1f, 0x24, 0xb2, 0xe8, 0xe2, 0xca, 0x91, 0xe4, 0x80, 0xce, 0xf8,
+    0xc7, 0x10, 0xeb, 0x2f, 0x3f, 0x50, 0xb2, 0xfd, 0x86, 0xf9, 0xe5, 0xe3,
+    0xc0, 0x10, 0x92, 0xa4, 0x9c, 0xa8, 0xcf, 0x0d, 0x4d, 0x66, 0xa2, 0x62,
+    0xa8, 0x54, 0x77, 0x91, 0xf8, 0xdf, 0xed, 0xe6, 0x61, 0x0f, 0xd0, 0xb2,
+    0xfe, 0x61, 0xeb, 0x0f, 0x8b, 0x2f, 0xfb, 0xfc, 0x13, 0x51, 0xf8, 0x92,
+    0xcb, 0xee, 0xdd, 0xfb, 0x54, 0x43, 0x0b, 0xfc, 0xd1, 0xa9, 0x06, 0x31,
+    0x65, 0x6c, 0x44, 0xde, 0x8e, 0x88, 0xc2, 0xf8, 0xe7, 0x79, 0x6c, 0x47,
+    0xc6, 0x43, 0x1e, 0xff, 0xff, 0x8b, 0x3b, 0xf4, 0x75, 0x2d, 0xbc, 0xf7,
+    0x6d, 0x84, 0xe6, 0xac, 0xbb, 0xb0, 0x2c, 0xb9, 0xf9, 0x88, 0x82, 0x3b,
+    0x55, 0x62, 0x3b, 0xc3, 0x0c, 0x2b, 0xfd, 0xcf, 0xbf, 0x5b, 0x6c, 0x6a,
+    0xcb, 0xf6, 0x4d, 0x04, 0x35, 0x95, 0x07, 0xbf, 0xa3, 0x8a, 0x86, 0x5b,
+    0x0c, 0x88, 0x5a, 0x5b, 0x4f, 0xa7, 0x3a, 0xdc, 0xa4, 0xa5, 0x0e, 0x06,
+    0x10, 0xd7, 0xe2, 0x80, 0x74, 0x05, 0x97, 0xec, 0x94, 0x68, 0x0b, 0x2e,
+    0x81, 0x16, 0x5f, 0x9e, 0x72, 0x89, 0x24, 0xa9, 0x8d, 0xf7, 0x85, 0xef,
+    0xf3, 0xb7, 0xe3, 0x50, 0x05, 0x97, 0xfe, 0xf9, 0x40, 0x06, 0x4d, 0xd7,
+    0xd6, 0x5b, 0xfe, 0x3e, 0xf1, 0x0c, 0x6f, 0xde, 0x72, 0x12, 0x75, 0x95,
+    0x24, 0xdc, 0x0d, 0x28, 0x3b, 0x29, 0x42, 0x44, 0xc2, 0x9b, 0xff, 0x37,
+    0x71, 0xc7, 0xd6, 0x98, 0xc5, 0x97, 0xfd, 0x3c, 0x8f, 0x1e, 0x76, 0x35,
+    0x65, 0xff, 0xbe, 0xc5, 0x3e, 0x75, 0xff, 0x3a, 0xcb, 0xff, 0x9b, 0x46,
+    0xf7, 0xe6, 0xf1, 0x06, 0x75, 0x95, 0x88, 0x86, 0x01, 0xfd, 0xff, 0xfc,
+    0x3d, 0x13, 0x99, 0xb1, 0xb5, 0x05, 0x9e, 0xce, 0xd6, 0x51, 0x26, 0x7d,
+    0xc8, 0x60, 0x18, 0x45, 0x7c, 0x1c, 0xe3, 0x2c, 0xbb, 0x81, 0x59, 0x7f,
+    0x4b, 0xce, 0xe5, 0x0b, 0x2d, 0x1d, 0x9e, 0x17, 0x42, 0xf7, 0xff, 0x67,
+    0xe3, 0xcd, 0x86, 0x9b, 0x12, 0x59, 0x7e, 0xd7, 0x6e, 0xfd, 0xaa, 0x20,
+    0xa5, 0xef, 0x41, 0xd6, 0x5f, 0xfa, 0x27, 0x7f, 0xeb, 0x25, 0xb7, 0x8b,
+    0x2f, 0x4e, 0xda, 0x59, 0x43, 0x47, 0xa6, 0x22, 0x31, 0xb1, 0x0e, 0x71,
+    0x06, 0xfd, 0xe8, 0x38, 0x7a, 0x59, 0x7b, 0x91, 0xd2, 0xcb, 0xef, 0xf2,
+    0x00, 0x92, 0xf3, 0xea, 0x74, 0x97, 0xc1, 0x27, 0x35, 0x25, 0xfe, 0x69,
+    0xf3, 0xfc, 0x80, 0x24, 0xa4, 0x97, 0xf6, 0x77, 0x1e, 0x83, 0xa4, 0xb8,
+    0xc3, 0x12, 0x5f, 0xc5, 0x05, 0x3b, 0x69, 0x25, 0x62, 0x62, 0x3d, 0x91,
+    0x1c, 0x77, 0xc4, 0x40, 0x33, 0x20, 0xb3, 0x0b, 0x44, 0x19, 0xb6, 0x92,
+    0x0b, 0x3f, 0x3a, 0x59, 0x5d, 0x27, 0xa0, 0xd1, 0xd0, 0x88, 0x49, 0x52,
+    0x54, 0xf1, 0x32, 0x3f, 0xa3, 0xf9, 0xbf, 0xfe, 0x33, 0x85, 0x9d, 0x7d,
+    0xca, 0x7c, 0xeb, 0xeb, 0x2f, 0xed, 0xfb, 0x1e, 0x52, 0xc5, 0x95, 0x08,
+    0x83, 0xc5, 0x2b, 0xff, 0xf1, 0x67, 0xc2, 0x03, 0xbc, 0x84, 0x3e, 0xdb,
+    0x1a, 0xb2, 0xe7, 0xd2, 0xcb, 0xf4, 0xf8, 0x38, 0x3a, 0xcb, 0xf3, 0x7b,
+    0xb8, 0x39, 0x86, 0xf8, 0x41, 0x6a, 0x1a, 0x36, 0x3f, 0x09, 0x8a, 0x85,
+    0xfd, 0x9c, 0x51, 0x68, 0xdf, 0x74, 0x6d, 0xe6, 0x37, 0x97, 0x2a, 0x50,
+    0xbc, 0x0c, 0x3e, 0x6f, 0xff, 0xe7, 0x97, 0xca, 0x33, 0xac, 0xee, 0x3f,
+    0xe6, 0xde, 0xb2, 0xe7, 0x1a, 0xca, 0x34, 0xfc, 0x8e, 0xb9, 0x7f, 0xff,
+    0xc5, 0x9f, 0xfc, 0x75, 0x2d, 0x9e, 0x83, 0x87, 0xae, 0x7a, 0x16, 0x5f,
+    0xd8, 0x5c, 0x62, 0xc5, 0x97, 0xf1, 0xf0, 0x7e, 0xc9, 0xd6, 0x5f, 0xfe,
+    0x27, 0x37, 0x80, 0xff, 0xfa, 0xfe, 0x76, 0xb2, 0xfd, 0xfd, 0x9f, 0xd4,
+    0x2c, 0xa8, 0x45, 0x29, 0xa5, 0xdd, 0x26, 0xde, 0xf0, 0x4e, 0xb2, 0x8d,
+    0x4e, 0xab, 0x70, 0x8f, 0xcd, 0x45, 0x0c, 0xfd, 0xd3, 0x1b, 0xf8, 0xb3,
+    0x9a, 0x8e, 0x2c, 0xbc, 0x19, 0x62, 0xca, 0x73, 0xc8, 0x01, 0x65, 0xfb,
+    0x09, 0xff, 0xc5, 0x97, 0xde, 0x82, 0x92, 0xcb, 0xf6, 0x78, 0x9e, 0x65,
+    0x94, 0x33, 0xee, 0xc2, 0x62, 0x21, 0xa9, 0x22, 0xf3, 0x90, 0x8f, 0xbe,
+    0x79, 0xb3, 0xcb, 0x2f, 0xfa, 0x18, 0x9f, 0xf3, 0x31, 0x8b, 0x2f, 0xfd,
+    0x98, 0x67, 0x3a, 0x82, 0x8e, 0x2c, 0xb6, 0xb6, 0x22, 0x63, 0x84, 0x5f,
+    0x38, 0xa8, 0x47, 0xc3, 0x43, 0x02, 0xfe, 0x3b, 0x8f, 0xd0, 0x4b, 0x2f,
+    0xda, 0xea, 0x59, 0xf5, 0x97, 0xf9, 0x9f, 0xf9, 0xdc, 0x01, 0x65, 0xff,
+    0xf3, 0xb0, 0x39, 0x86, 0xb9, 0xf5, 0x18, 0x4b, 0x2f, 0x76, 0x20, 0x16,
+    0x5f, 0xff, 0xdf, 0xe7, 0xb3, 0x75, 0xc8, 0xd1, 0xe3, 0x6b, 0x50, 0xb2,
+    0xa0, 0xff, 0x1c, 0x7e, 0xfb, 0xd1, 0xd7, 0x16, 0x5f, 0x36, 0x75, 0xf5,
+    0x95, 0x87, 0x8b, 0xf2, 0x3b, 0xff, 0xfe, 0xf3, 0x6b, 0x06, 0xe7, 0xc2,
+    0xf9, 0x41, 0x99, 0xfe, 0x2c, 0xb4, 0x2c, 0xbe, 0x8d, 0xe3, 0x8e, 0xcf,
+    0xd0, 0x0c, 0x97, 0xfe, 0x79, 0x79, 0xff, 0xcc, 0x29, 0x2c, 0xaf, 0x1f,
+    0xc7, 0xce, 0xea, 0x4a, 0xb9, 0x34, 0x58, 0x72, 0x9f, 0x19, 0x14, 0x32,
+    0x78, 0xcb, 0xf8, 0xc3, 0x6f, 0xff, 0x66, 0x81, 0xfd, 0x64, 0xff, 0x8c,
+    0xe2, 0xcb, 0xdd, 0xe1, 0xd6, 0x5f, 0xff, 0xd9, 0xdc, 0x07, 0xbf, 0x46,
+    0xbc, 0xe3, 0xf3, 0xe9, 0x65, 0xfc, 0x37, 0xff, 0x03, 0x25, 0x97, 0x4b,
+    0x6e, 0x11, 0x4f, 0x83, 0xa2, 0x2e, 0x5f, 0xcf, 0xa8, 0xfb, 0x6f, 0x59,
+    0x5d, 0x1f, 0x61, 0x1f, 0x5f, 0xff, 0xfb, 0x5a, 0x8e, 0xa5, 0xd7, 0x1b,
+    0x5d, 0xfb, 0x04, 0xd3, 0x40, 0xd6, 0x5f, 0x88, 0xd1, 0x33, 0xa5, 0x97,
+    0xfc, 0xfa, 0xce, 0xa5, 0x00, 0x85, 0x95, 0x08, 0xf4, 0xc2, 0x26, 0x70,
+    0x09, 0x55, 0xff, 0x75, 0x2f, 0xe7, 0x3f, 0x9b, 0x8b, 0x2f, 0xff, 0xdd,
+    0x9a, 0xfc, 0xcd, 0x49, 0xbc, 0xe5, 0xd4, 0x96, 0x5f, 0xfb, 0xb8, 0xff,
+    0x33, 0xed, 0xd1, 0x8b, 0x2b, 0x11, 0x30, 0x6a, 0xbd, 0x42, 0x3e, 0x1e,
+    0x1a, 0xb5, 0x0b, 0x83, 0x23, 0x70, 0xf4, 0xa5, 0x12, 0x8c, 0xca, 0xfd,
+    0xc2, 0x0e, 0xf9, 0x2c, 0xbf, 0x61, 0x7b, 0x09, 0x65, 0xe9, 0xc4, 0xed,
+    0x65, 0xf1, 0x34, 0xdb, 0x8b, 0x2a, 0x11, 0x29, 0xe2, 0xa7, 0x25, 0xe1,
+    0x05, 0xce, 0x05, 0x95, 0x23, 0xd1, 0xf9, 0xdd, 0xff, 0x4b, 0x3e, 0x78,
+    0xc2, 0x1a, 0xcb, 0xff, 0xf3, 0xbc, 0x9f, 0xdb, 0x32, 0x70, 0xfc, 0x2e,
+    0x22, 0xa2, 0xfb, 0x5e, 0xde, 0x1f, 0xac, 0xba, 0x06, 0xb2, 0xa0, 0xda,
+    0x80, 0x7e, 0xfe, 0x7e, 0xe0, 0xa0, 0x0b, 0x2f, 0xfd, 0xc6, 0x2e, 0xa5,
+    0xa0, 0xc7, 0x16, 0x5f, 0xb3, 0x58, 0x38, 0x59, 0x5d, 0x27, 0x05, 0x31,
+    0xbe, 0xa1, 0x35, 0xe2, 0x0f, 0x96, 0x6f, 0x3f, 0xbf, 0x7b, 0x26, 0x8d,
+    0xc5, 0x97, 0xe1, 0xeb, 0x58, 0x62, 0xca, 0x9c, 0xf5, 0x08, 0xae, 0xfe,
+    0x62, 0xcf, 0xc4, 0xcb, 0x2f, 0xf7, 0xa0, 0x3d, 0x49, 0xb6, 0xd6, 0x5f,
+    0xfd, 0x2e, 0x41, 0xf3, 0xb2, 0x7c, 0xed, 0x65, 0xf4, 0x11, 0xa3, 0x59,
+    0x79, 0xc1, 0x0b, 0x2f, 0xff, 0x0d, 0x8f, 0xd4, 0xb8, 0x59, 0xa1, 0x3e,
+    0xb2, 0xa1, 0x35, 0x29, 0x11, 0x76, 0x59, 0xd1, 0xbf, 0x91, 0x38, 0x45,
+    0xf1, 0xbb, 0xa5, 0xc5, 0x97, 0xe9, 0x37, 0x6f, 0xa5, 0x97, 0xff, 0x9c,
+    0xb3, 0xf0, 0xda, 0x63, 0x4d, 0x85, 0x95, 0xc3, 0xf0, 0x10, 0xa2, 0xdd,
+    0xac, 0xbf, 0xff, 0xc0, 0x6d, 0x1b, 0xe8, 0x3c, 0xd2, 0x62, 0xf4, 0x6a,
+    0x16, 0x5b, 0xf8, 0x7e, 0x7c, 0x12, 0xbc, 0xda, 0xc5, 0x97, 0x8b, 0x24,
+    0xb2, 0xbb, 0x36, 0xdf, 0x1b, 0xbc, 0x50, 0x75, 0x95, 0x08, 0x9a, 0x65,
+    0xde, 0x11, 0x5f, 0xf3, 0x4b, 0xfe, 0xcd, 0x37, 0x16, 0x5f, 0xff, 0xa5,
+    0x84, 0x3f, 0x46, 0x14, 0x00, 0xef, 0x25, 0x94, 0x48, 0x8a, 0x10, 0xe2,
+    0xff, 0x67, 0xba, 0x97, 0xe0, 0xeb, 0x2f, 0xd2, 0x2c, 0xc9, 0xd6, 0x5d,
+    0xa9, 0xd6, 0x5f, 0xf4, 0xc2, 0x9f, 0xb0, 0xc7, 0x84, 0xb2, 0xa0, 0xff,
+    0x30, 0x9d, 0x86, 0x2f, 0xf3, 0x8e, 0x01, 0x06, 0x71, 0x65, 0x62, 0x61,
+    0xfe, 0x85, 0x83, 0x96, 0x5f, 0xdb, 0x62, 0xab, 0x66, 0xcf, 0x6d, 0xae,
+    0x20, 0x15, 0xfe, 0xf8, 0x04, 0x29, 0x7b, 0x17, 0x10, 0x0a, 0xf3, 0xea,
+    0x4b, 0x88, 0x05, 0x58, 0x7d, 0x41, 0x41, 0xb9, 0xe4, 0xb8, 0x80, 0x57,
+    0xce, 0x5d, 0x49, 0x71, 0x00, 0xaf, 0xf3, 0x77, 0xec, 0x00, 0x21, 0x71,
+    0x00, 0xaf, 0x31, 0x0d, 0x71, 0x00, 0xa8, 0x68, 0xba, 0x39, 0x1f, 0x8b,
+    0xf7, 0xa0, 0x58, 0xd5, 0xc4, 0x02, 0xbd, 0xa8, 0xfa, 0xe2, 0x01, 0x52,
+    0xe2, 0x01, 0x5e, 0xdb, 0x60, 0x2e, 0x20, 0x15, 0xd0, 0x75, 0xc4, 0x02,
+    0xa1, 0x9f, 0x3e, 0x0c, 0x31, 0x65, 0xf3, 0x1c, 0x70, 0xb8, 0x80, 0x57,
+    0xbe, 0xfd, 0xae, 0x20, 0x15, 0xff, 0x89, 0xe4, 0x2f, 0xcd, 0xdb, 0xe9,
+    0x71, 0x00, 0xaf, 0xfe, 0x7f, 0x86, 0x76, 0x2f, 0xf9, 0xe4, 0xb8, 0x80,
+    0x57, 0x38, 0xd7, 0x10, 0x0a, 0xff, 0x13, 0x99, 0xce, 0x40, 0x17, 0x10,
+    0x0a, 0xfc, 0xc6, 0xb9, 0x01, 0x71, 0x00, 0xae, 0x6e, 0x2e, 0x20, 0x15,
+    0x68, 0xf5, 0xfe, 0x69, 0x7f, 0xfb, 0xcd, 0xff, 0xe7, 0x36, 0x69, 0xa0,
+    0xeb, 0x88, 0x05, 0x7e, 0xf9, 0x47, 0x52, 0x54, 0x40, 0x2b, 0x81, 0x0b,
+    0x88, 0x04, 0x2c, 0xda, 0xd2, 0xe2, 0x01, 0x5f, 0x41, 0xdc, 0x6b, 0x88,
+    0x05, 0x43, 0x3c, 0x66, 0x18, 0xbe, 0x0b, 0x97, 0x6b, 0x88, 0x05, 0x7a,
+    0x35, 0xda, 0xe2, 0x01, 0x5f, 0xfb, 0x3a, 0xe0, 0xe3, 0x08, 0x1c, 0x5c,
+    0x40, 0x2b, 0xf0, 0x5e, 0x52, 0x85, 0xc4, 0x02, 0xbf, 0x3f, 0x7e, 0x8e,
+    0x97, 0x10, 0x0a, 0xb1, 0x16, 0xbe, 0x4b, 0x09, 0xa5, 0xda, 0x02, 0xe2,
+    0x01, 0x54, 0x95, 0xb3, 0x0c, 0x8f, 0x21, 0x2f, 0xd9, 0x13, 0x42, 0x37,
+    0xcf, 0x60, 0x21, 0xe1, 0x7f, 0xe1, 0xbe, 0x12, 0xfb, 0xf6, 0x7f, 0x8f,
+    0xd2, 0xe2, 0x01, 0x5f, 0xe1, 0xc7, 0x73, 0x6a, 0x3e, 0xb8, 0x80, 0x43,
+    0x36, 0xb7, 0xb5, 0x06, 0x2e, 0x20, 0x15, 0x76, 0x7f, 0x9a, 0x52, 0xbf,
+    0xc1, 0x79, 0x4a, 0x04, 0x3a, 0xe2, 0x01, 0x5f, 0x31, 0x4b, 0x8b, 0x88,
+    0x05, 0x7f, 0x3c, 0xd2, 0xce, 0xa4, 0xb8, 0x80, 0x55, 0x88, 0xce, 0xf1,
+    0x18, 0x10, 0x42, 0x5d, 0x7f, 0xde, 0x8e, 0x0b, 0xe0, 0x74, 0x05, 0xc4,
+    0x02, 0xb3, 0x2e, 0x20, 0x15, 0xcf, 0x38, 0xcf, 0x9b, 0xc9, 0x37, 0x68,
+    0x0b, 0x88, 0x05, 0x7e, 0x7f, 0xf1, 0xba, 0x5c, 0x40, 0x2b, 0xf9, 0x88,
+    0x32, 0xce, 0x2e, 0x20, 0x15, 0x42, 0x24, 0x88, 0x93, 0xe6, 0xb5, 0x0c,
+    0xab, 0x21, 0xc2, 0xdb, 0x21, 0xb6, 0xc7, 0xf3, 0x0f, 0xea, 0x12, 0x1e,
+    0x2d, 0x72, 0xe0, 0x15, 0x12, 0x6f, 0x25, 0xdb, 0xfe, 0x50, 0xd6, 0xdc,
+    0x28, 0x84, 0x86, 0x05, 0xef, 0xb1, 0x8b, 0x8c, 0x25, 0x79, 0xdf, 0xb5,
+    0x44, 0x02, 0x16, 0x98, 0xa7, 0x50, 0xea, 0xbd, 0x06, 0x71, 0x65, 0xbe,
+    0xb2, 0xf1, 0x67, 0x7d, 0x9a, 0xe6, 0x1d, 0xb8, 0x67, 0x59, 0x7f, 0xfc,
+    0x40, 0xff, 0xb3, 0xb8, 0x3f, 0x27, 0x94, 0xeb, 0x2f, 0xf0, 0x7f, 0x9c,
+    0xfe, 0x76, 0xb2, 0xb6, 0x92, 0x27, 0x9c, 0x5c, 0x0a, 0x77, 0xf7, 0xcb,
+    0x01, 0xb7, 0x8b, 0x28, 0x69, 0x9a, 0x1b, 0x0d, 0x03, 0x9a, 0xdf, 0xe9,
+    0x37, 0xcd, 0x37, 0x37, 0x16, 0x5f, 0x47, 0xe0, 0x6b, 0x2d, 0x3a, 0xca,
+    0x91, 0xb3, 0xde, 0x43, 0x7f, 0x4f, 0x1a, 0xf3, 0xee, 0x2c, 0xb7, 0x16,
+    0x5f, 0x14, 0x0f, 0xcb, 0x2b, 0xc6, 0xcb, 0x78, 0x8d, 0x42, 0x2a, 0x70,
+    0x8d, 0x98, 0xef, 0xfc, 0x59, 0xdf, 0x98, 0x00, 0x0c, 0xcb, 0x2f, 0xf8,
+    0x78, 0x69, 0x67, 0xe0, 0xc5, 0x97, 0xf6, 0x6b, 0x25, 0x28, 0x59, 0x52,
+    0x45, 0x28, 0x10, 0x08, 0xe6, 0xfd, 0xfc, 0x1b, 0xf9, 0x65, 0xc0, 0x84,
+    0x96, 0x35, 0x25, 0xef, 0x44, 0xeb, 0x2e, 0x30, 0xc4, 0x94, 0xc7, 0xbd,
+    0xb8, 0x2d, 0x30, 0x91, 0x83, 0xb6, 0xe2, 0x41, 0x67, 0x81, 0x58, 0x8e,
+    0x96, 0x86, 0x2d, 0xff, 0xd8, 0x09, 0x37, 0xe0, 0xf0, 0x43, 0x59, 0x47,
+    0x3e, 0x87, 0x26, 0xbf, 0xb0, 0x7e, 0x82, 0x1a, 0xcb, 0xfb, 0xfc, 0xc3,
+    0x3c, 0xcb, 0x2d, 0xf5, 0x95, 0xf3, 0x7e, 0x12, 0xeb, 0xf4, 0x4f, 0xc3,
+    0xc9, 0x65, 0x31, 0xe5, 0x7c, 0x86, 0xff, 0xfd, 0xd4, 0xb8, 0x5d, 0x41,
+    0xbc, 0x8e, 0xa4, 0xc7, 0x59, 0x7f, 0xfb, 0xfc, 0xc3, 0x5b, 0x42, 0x00,
+    0x11, 0xd2, 0xca, 0x14, 0x36, 0xd1, 0x11, 0x08, 0x79, 0xe3, 0x30, 0x94,
+    0x2e, 0x07, 0x19, 0x97, 0x74, 0xbf, 0xa6, 0x8e, 0xce, 0x63, 0x7d, 0x46,
+    0x28, 0xf0, 0xd2, 0x04, 0x70, 0x04, 0x43, 0xf8, 0x5a, 0x84, 0x84, 0x45,
+    0x9b, 0xfe, 0xc9, 0x30, 0xdf, 0xbe, 0x49, 0x65, 0xfe, 0x62, 0xed, 0xb4,
+    0xc0, 0x59, 0x7b, 0x30, 0x0b, 0x28, 0xe7, 0x9a, 0x46, 0x55, 0xda, 0x29,
+    0xfd, 0x08, 0x6b, 0xfb, 0xe3, 0xf0, 0x5c, 0x96, 0x5e, 0xef, 0xc4, 0xb2,
+    0xff, 0xef, 0xed, 0xe4, 0xd2, 0x7d, 0x4e, 0x38, 0x59, 0x5d, 0x22, 0x4c,
+    0xe5, 0xa4, 0x3b, 0x7f, 0xfb, 0xcd, 0xbd, 0xbb, 0xd4, 0x4e, 0xfa, 0xed,
+    0x65, 0xfd, 0x1d, 0x41, 0x3f, 0xd6, 0x5c, 0x40, 0x59, 0x74, 0x71, 0x65,
+    0x31, 0xac, 0xde, 0x2d, 0x5e, 0x3f, 0xad, 0xeb, 0x16, 0xff, 0x68, 0xec,
+    0x12, 0x19, 0x17, 0xfb, 0x3a, 0xff, 0xde, 0x5c, 0x59, 0x7f, 0x84, 0x83,
+    0x35, 0x18, 0x4b, 0x2f, 0x48, 0x57, 0x25, 0x97, 0x75, 0x25, 0xc6, 0x00,
+    0xbf, 0xfd, 0x86, 0x47, 0xf2, 0x69, 0x37, 0xf8, 0xeb, 0x2f, 0xa6, 0xd4,
+    0x7d, 0x65, 0x49, 0x1c, 0xdd, 0x19, 0x91, 0x0f, 0x09, 0x7e, 0x95, 0x7f,
+    0xfe, 0x8c, 0xf7, 0x09, 0xfe, 0x1f, 0x8f, 0xcc, 0x6a, 0xcb, 0xfe, 0x6e,
+    0xb9, 0xf2, 0x83, 0xf1, 0x65, 0xff, 0xff, 0xff, 0xfc, 0x1d, 0xc2, 0x7c,
+    0xf3, 0x88, 0x59, 0xbf, 0x09, 0xcd, 0x9a, 0x41, 0xe7, 0x0c, 0x71, 0xf9,
+    0x8c, 0xe6, 0x38, 0xd6, 0x51, 0xa8, 0xf5, 0xe1, 0xcd, 0x42, 0xe6, 0xd6,
+    0x42, 0xf1, 0xa3, 0x1c, 0xd1, 0x83, 0xc6, 0x34, 0x49, 0x5f, 0x8d, 0x2a,
+    0xff, 0xfc, 0x44, 0x1e, 0xb3, 0xaf, 0x8f, 0x4f, 0xd6, 0x4e, 0xb2, 0xfd,
+    0x9f, 0xd4, 0x71, 0x65, 0x31, 0xff, 0x92, 0xc5, 0xe0, 0x44, 0x96, 0x5a,
+    0x75, 0x94, 0xb2, 0xf4, 0xd2, 0x8d, 0x17, 0xa0, 0x12, 0xbe, 0x83, 0x60,
+    0xeb, 0x2a, 0x48, 0xad, 0xe8, 0x83, 0x47, 0x27, 0x32, 0xbf, 0xf4, 0xb9,
+    0xb0, 0xb0, 0xf1, 0xa3, 0x56, 0x5f, 0xff, 0xf4, 0xa0, 0xe2, 0x67, 0x9c,
+    0xf8, 0x76, 0xfe, 0x1a, 0xda, 0x59, 0x7e, 0xd9, 0xb3, 0x3c, 0xeb, 0x2f,
+    0xfb, 0xce, 0xdf, 0x97, 0x82, 0x6a, 0xcb, 0xcf, 0xee, 0x2c, 0xae, 0x1e,
+    0xb1, 0x87, 0x57, 0xf4, 0xa3, 0x40, 0x10, 0xeb, 0x2f, 0xfe, 0x63, 0x4d,
+    0x62, 0xef, 0x64, 0xfe, 0x35, 0x65, 0xff, 0xdb, 0xcb, 0x39, 0xfc, 0x29,
+    0x67, 0x16, 0x5f, 0x1e, 0x03, 0xf5, 0x95, 0x87, 0xcc, 0xe8, 0x97, 0xdf,
+    0xfb, 0xe9, 0x65, 0xfb, 0x26, 0xf4, 0x4e, 0xb2, 0x9c, 0xf2, 0xc8, 0x8a,
+    0xff, 0xc4, 0xff, 0xe3, 0x74, 0x50, 0x62, 0xcb, 0xdf, 0x72, 0x59, 0x67,
+    0xd8, 0x9f, 0x3e, 0x11, 0xf8, 0xbc, 0xa1, 0x63, 0xc6, 0xb1, 0x08, 0x37,
+    0x4f, 0xab, 0x62, 0xad, 0xbf, 0x4a, 0x68, 0xbf, 0xe8, 0xdc, 0x1f, 0xa2,
+    0x77, 0x25, 0x97, 0xff, 0xd0, 0x71, 0x0b, 0xfe, 0x0b, 0xcb, 0xc1, 0xe2,
+    0xcb, 0xfe, 0x8e, 0xe0, 0xec, 0x70, 0x32, 0xca, 0xe9, 0x70, 0xcf, 0x52,
+    0xd0, 0x7c, 0x5c, 0x47, 0x7b, 0xaa, 0x37, 0xf0, 0x86, 0x69, 0xb3, 0xc9,
+    0x2f, 0xf3, 0xfe, 0x24, 0x11, 0xe2, 0xcb, 0xef, 0x46, 0x4e, 0xb2, 0x88,
+    0xf5, 0x38, 0x65, 0x7d, 0xc6, 0x80, 0x2c, 0xbe, 0x9b, 0x30, 0xc5, 0x97,
+    0xd2, 0x6d, 0x71, 0x65, 0xf3, 0x7e, 0x34, 0xb2, 0xff, 0x9b, 0x3a, 0xfc,
+    0xd2, 0x7d, 0x2c, 0xb0, 0x3c, 0x7b, 0x64, 0x43, 0x7d, 0x37, 0x9e, 0x65,
+    0x97, 0xdd, 0xbe, 0xa7, 0x59, 0x7a, 0x67, 0xfa, 0xcb, 0xf6, 0x4d, 0x28,
+    0xe9, 0x65, 0xcd, 0x32, 0xcb, 0xcd, 0x04, 0xb2, 0xfd, 0x9a, 0x1f, 0xb1,
+    0x65, 0x0c, 0xf0, 0x78, 0x35, 0x5e, 0x3f, 0xae, 0x2c, 0x5e, 0x72, 0x02,
+    0xcb, 0xc5, 0x12, 0x49, 0x7f, 0xe2, 0x03, 0x6e, 0xee, 0x86, 0x51, 0xb8,
+    0xb2, 0xc7, 0x59, 0x5b, 0x11, 0x1d, 0x83, 0x6e, 0x36, 0x22, 0x3d, 0x6c,
+    0x55, 0xff, 0x04, 0x23, 0x21, 0xc2, 0x3e, 0x9f, 0x74, 0x4f, 0xe2, 0x47,
+    0x24, 0x21, 0xdf, 0xc2, 0x8f, 0x76, 0x16, 0x15, 0x0c, 0x93, 0x1c, 0x3e,
+    0x69, 0xc7, 0x4f, 0x2b, 0xbc, 0xb8, 0x2b, 0xf7, 0x35, 0xa8, 0xfa, 0xcb,
+    0xfd, 0x9e, 0x7c, 0x00, 0x9f, 0x59, 0x7b, 0xed, 0x3a, 0xca, 0xe8, 0xfe,
+    0x37, 0x0a, 0x0e, 0x67, 0x7e, 0xe1, 0xba, 0x7e, 0xd6, 0x5d, 0xc9, 0x2c,
+    0xa9, 0x1e, 0x0e, 0xf2, 0xab, 0xc5, 0xfe, 0x2c, 0xbf, 0xdd, 0xf9, 0x87,
+    0x05, 0xf5, 0x97, 0x34, 0x96, 0x57, 0x47, 0x92, 0x46, 0x77, 0x10, 0x16,
+    0x5f, 0xb5, 0xe7, 0x73, 0xac, 0xbe, 0x09, 0x07, 0xb5, 0x94, 0xe7, 0x95,
+    0xc2, 0x7b, 0xfb, 0xf3, 0x4b, 0x3a, 0x92, 0xca, 0x84, 0xd7, 0x18, 0x91,
+    0xd9, 0x7e, 0x44, 0x16, 0x01, 0x08, 0x6f, 0xf8, 0x4c, 0xc0, 0xfb, 0x37,
+    0xc2, 0xcb, 0xff, 0x19, 0x1a, 0xe6, 0x18, 0xfa, 0x35, 0x65, 0xec, 0xe0,
+    0x56, 0x5f, 0xff, 0xbd, 0x9d, 0x90, 0x46, 0x50, 0x26, 0x9a, 0x09, 0x65,
+    0x62, 0x3a, 0xfc, 0x74, 0x48, 0x3f, 0x1c, 0xbf, 0xc6, 0x67, 0x5f, 0xfc,
+    0x1d, 0x65, 0xf8, 0xb0, 0x01, 0xe2, 0xcb, 0xfe, 0xed, 0xb0, 0xb3, 0x7b,
+    0xf1, 0x65, 0x4e, 0x7c, 0x1e, 0x27, 0xa7, 0x45, 0xc7, 0x21, 0x2b, 0x7c,
+    0x31, 0xe1, 0xd6, 0x5c, 0x08, 0x49, 0x71, 0x86, 0x24, 0xa6, 0x35, 0xe6,
+    0x0b, 0x5f, 0x86, 0x17, 0xd4, 0x92, 0x0b, 0x34, 0x35, 0x88, 0xac, 0x35,
+    0xca, 0xff, 0xf7, 0xfa, 0xed, 0xbd, 0xb7, 0x1f, 0xf0, 0x9c, 0x59, 0x61,
+    0x51, 0x65, 0xfe, 0x89, 0x37, 0xe5, 0x1f, 0x59, 0x70, 0xaf, 0x8b, 0x05,
+    0x59, 0xe4, 0x68, 0x5a, 0xff, 0xbc, 0xff, 0xe7, 0x65, 0x93, 0xac, 0xbd,
+    0xb4, 0x85, 0x02, 0x85, 0x97, 0x76, 0xcb, 0x2f, 0x89, 0xba, 0x92, 0xcb,
+    0xfe, 0x6e, 0xbd, 0x83, 0xd3, 0xf6, 0xb2, 0xa0, 0xf7, 0x34, 0x45, 0x7d,
+    0x9b, 0xf0, 0x96, 0x5f, 0xee, 0x63, 0x7c, 0xd6, 0xf2, 0xcb, 0xfe, 0xf4,
+    0x6a, 0x3b, 0x62, 0xed, 0x65, 0xe3, 0x5f, 0x9b, 0x49, 0x34, 0xde, 0xca,
+    0xf4, 0xe7, 0xe2, 0x1f, 0x91, 0x6e, 0x99, 0xd6, 0x27, 0xf7, 0xf8, 0xe1,
+    0xea, 0x4b, 0x9c, 0xbd, 0x43, 0xcf, 0x50, 0xd3, 0x39, 0x18, 0x61, 0x32,
+    0x64, 0xa3, 0xab, 0xf7, 0x9b, 0x81, 0x9d, 0x65, 0xfc, 0x61, 0xaf, 0xf2,
+    0x85, 0x97, 0x8e, 0x1d, 0x2c, 0xbd, 0xdb, 0x71, 0x65, 0xf0, 0x4f, 0x83,
+    0x59, 0x5d, 0x22, 0x29, 0x8b, 0xbc, 0x3b, 0xba, 0x3b, 0x7f, 0xff, 0x6a,
+    0x41, 0x8c, 0xf7, 0x6d, 0xcc, 0x1c, 0xf8, 0x62, 0xcb, 0xff, 0x7b, 0x37,
+    0x5c, 0x8d, 0xce, 0xbe, 0xb2, 0xfe, 0xf3, 0x0f, 0xc1, 0x35, 0x65, 0xf8,
+    0xa2, 0x66, 0xe9, 0x65, 0xb3, 0xb3, 0xd7, 0x62, 0xfb, 0xdf, 0xce, 0xd6,
+    0x51, 0xcf, 0x13, 0x84, 0xf7, 0xa4, 0x70, 0x2c, 0xbf, 0x7c, 0xb3, 0x50,
+    0xb2, 0xa1, 0x39, 0xf3, 0x57, 0x41, 0x0d, 0xdf, 0x91, 0x18, 0x3b, 0x7d,
+    0x84, 0xc6, 0xac, 0xbf, 0xe3, 0x5f, 0x64, 0x1c, 0x98, 0xd5, 0x97, 0xfe,
+    0x7e, 0x1e, 0x1b, 0x5a, 0x63, 0x16, 0x5f, 0xa7, 0xc1, 0xc1, 0xd6, 0x5b,
+    0x86, 0xa2, 0x87, 0xc7, 0x62, 0x1f, 0x5f, 0xff, 0xfd, 0xe8, 0xe6, 0x02,
+    0x3f, 0xcd, 0x64, 0xf1, 0xae, 0x7b, 0xb6, 0xe2, 0xcb, 0xd2, 0x7d, 0x2c,
+    0xa1, 0xa2, 0x3d, 0xdc, 0xef, 0xe3, 0xeb, 0x4d, 0xd0, 0x16, 0x5f, 0x7d,
+    0xfd, 0x32, 0xcb, 0xf8, 0xa3, 0xbf, 0x36, 0xea, 0xcb, 0xc6, 0xc7, 0x16,
+    0x5f, 0xf6, 0x7f, 0xec, 0x6f, 0xf3, 0xb5, 0x97, 0xf4, 0x75, 0xcc, 0xeb,
+    0xeb, 0x2e, 0xd4, 0x2c, 0xa1, 0x9e, 0x2f, 0xcb, 0xef, 0xc1, 0x21, 0xed,
+    0x1b, 0x42, 0xcb, 0xff, 0xef, 0xea, 0x33, 0xad, 0xb2, 0x38, 0x7e, 0x07,
+    0x59, 0x7f, 0xbe, 0xdd, 0xb0, 0xe3, 0xeb, 0x2f, 0xdc, 0x8e, 0xf0, 0xeb,
+    0x2a, 0x0f, 0x6f, 0x86, 0x76, 0xe6, 0xc5, 0x42, 0x50, 0x47, 0x23, 0x01,
+    0x8e, 0xe3, 0xff, 0x64, 0x5d, 0x19, 0x6a, 0x15, 0xd5, 0x25, 0xc6, 0xce,
+    0xa1, 0x84, 0x78, 0x63, 0xb9, 0x17, 0xe5, 0x20, 0xdf, 0xf7, 0xda, 0x78,
+    0xe8, 0x1a, 0x85, 0x97, 0x7a, 0x75, 0x97, 0xb9, 0xfc, 0x59, 0x76, 0x73,
+    0x61, 0xf7, 0x76, 0x74, 0x20, 0xc5, 0xf9, 0xc1, 0xb6, 0xc7, 0x59, 0x7f,
+    0x76, 0xdc, 0x0c, 0x99, 0x65, 0xe2, 0x0f, 0x16, 0x57, 0x8f, 0x2b, 0x79,
+    0x75, 0xff, 0xd9, 0xf6, 0xea, 0x45, 0x02, 0x81, 0x53, 0x6d, 0x65, 0xff,
+    0x3b, 0x7d, 0x8b, 0xe1, 0xf2, 0xcb, 0xde, 0x6d, 0xeb, 0x2e, 0x0c, 0xbc,
+    0x7a, 0xa2, 0x1b, 0xdf, 0xff, 0xec, 0xde, 0x38, 0xff, 0x03, 0xa2, 0xc1,
+    0xfa, 0x0c, 0x85, 0x97, 0xf8, 0xdf, 0xf5, 0xdb, 0x6b, 0x8b, 0x2f, 0xd9,
+    0xf0, 0x3f, 0xd6, 0x54, 0x27, 0x71, 0x22, 0x4d, 0x42, 0x97, 0xc5, 0xe1,
+    0x62, 0xdb, 0x37, 0xbf, 0xff, 0x47, 0x9f, 0x0a, 0x34, 0x68, 0xc2, 0xfa,
+    0x92, 0xca, 0x92, 0xb1, 0xde, 0x1f, 0x7e, 0x51, 0x66, 0xea, 0xfd, 0x43,
+    0x2f, 0xcc, 0x6e, 0x59, 0x0b, 0x36, 0x8f, 0x7d, 0xe7, 0x2f, 0x43, 0x2f,
+    0xa6, 0xf3, 0x3c, 0x96, 0x5b, 0x6d, 0x65, 0x78, 0xd7, 0xed, 0x8d, 0xdf,
+    0xec, 0x29, 0x67, 0x04, 0x3a, 0xcb, 0xf1, 0xf8, 0x07, 0x75, 0x95, 0xf3,
+    0xda, 0x10, 0xce, 0xff, 0x61, 0x6c, 0xf6, 0x74, 0x62, 0xcb, 0xfa, 0x3c,
+    0xdb, 0xf2, 0x65, 0x95, 0xa3, 0xe5, 0x01, 0xb5, 0xff, 0x48, 0x82, 0x0d,
+    0x9d, 0x9c, 0x0b, 0x2a, 0x74, 0xd9, 0x64, 0xfd, 0x90, 0x88, 0xe8, 0x8a,
+    0xff, 0xb3, 0xa9, 0x7b, 0x77, 0x76, 0x37, 0x16, 0x5f, 0xfb, 0xdc, 0x69,
+    0x37, 0xe3, 0xfc, 0x59, 0x7f, 0xf8, 0x04, 0x1e, 0x7f, 0x91, 0xac, 0xeb,
+    0xeb, 0x29, 0xd1, 0x12, 0x47, 0xd7, 0xff, 0x36, 0xb6, 0x3c, 0x4a, 0x08,
+    0x32, 0x59, 0x7d, 0x1a, 0xcd, 0xeb, 0x2f, 0xde, 0x6d, 0xb7, 0x9d, 0x65,
+    0x49, 0x12, 0x5c, 0x44, 0xf9, 0x1d, 0xfe, 0x07, 0x30, 0xb3, 0x81, 0x59,
+    0x58, 0x7c, 0x4e, 0x61, 0x69, 0x2c, 0xbf, 0xd1, 0x9d, 0x7f, 0x35, 0x0b,
+    0x2b, 0x47, 0x86, 0x42, 0x37, 0xfe, 0x8f, 0x09, 0xc2, 0xcf, 0xfb, 0x16,
+    0x5f, 0xfd, 0xe0, 0xf3, 0x91, 0xae, 0xf0, 0x4c, 0x59, 0x7b, 0x00, 0xeb,
+    0x2d, 0xbd, 0x8f, 0x87, 0xc8, 0xd7, 0xa0, 0x18, 0xb2, 0xff, 0xe9, 0x1a,
+    0xe2, 0x7d, 0xb5, 0x01, 0x15, 0xac, 0xaf, 0x1f, 0x2b, 0x8d, 0xd6, 0x22,
+    0xbc, 0x30, 0x8e, 0xbf, 0xe7, 0xe8, 0x33, 0xc1, 0x47, 0x4b, 0x2a, 0x17,
+    0x16, 0x31, 0x11, 0xa1, 0x99, 0xe8, 0xc5, 0x5d, 0x8c, 0x04, 0x25, 0x1a,
+    0x70, 0x49, 0xef, 0xff, 0xc6, 0xb7, 0xcb, 0x25, 0xd7, 0xc9, 0xa7, 0xe0,
+    0x56, 0x5f, 0x6f, 0x18, 0xe1, 0x65, 0xff, 0xd9, 0xad, 0x99, 0xe7, 0x34,
+    0x83, 0xc5, 0x94, 0xc8, 0xc1, 0x75, 0x70, 0x92, 0x5f, 0xff, 0xda, 0x96,
+    0xc1, 0xfa, 0x36, 0x16, 0x75, 0xf8, 0xc3, 0x16, 0x5d, 0xce, 0x2c, 0xbf,
+    0x46, 0x7f, 0x8e, 0xb2, 0xf1, 0x86, 0x18, 0xb2, 0xe0, 0x3a, 0x41, 0x66,
+    0x82, 0xff, 0x6a, 0x37, 0xe6, 0x1c, 0x6b, 0x29, 0x93, 0x19, 0xd3, 0x01,
+    0xc5, 0xf8, 0x8c, 0x12, 0x8b, 0xff, 0x67, 0x09, 0xcd, 0x98, 0x9a, 0x65,
+    0x97, 0xf0, 0x22, 0x5e, 0x13, 0x8b, 0x2f, 0xf9, 0x80, 0x26, 0x6f, 0x20,
+    0xf1, 0x65, 0xfb, 0x81, 0x06, 0x12, 0xcb, 0xf9, 0x88, 0x1d, 0xf6, 0xcb,
+    0x2f, 0x38, 0x31, 0x25, 0x49, 0x55, 0x51, 0xe3, 0x47, 0xf2, 0x50, 0x0f,
+    0xc8, 0xbf, 0xe7, 0x7b, 0xc9, 0xf6, 0xcb, 0xaf, 0xa0, 0x6c, 0x35, 0x97,
+    0xf7, 0x3c, 0xdd, 0xbe, 0x96, 0x5f, 0x87, 0xa6, 0x0c, 0xeb, 0x2f, 0xd9,
+    0xfe, 0x3f, 0x4b, 0x2f, 0xf1, 0x98, 0x59, 0xbd, 0xb4, 0xb2, 0xfe, 0x2c,
+    0xe8, 0x02, 0x49, 0x65, 0xff, 0xf7, 0x3f, 0x9e, 0x10, 0xf9, 0xdc, 0x7a,
+    0x0e, 0xb2, 0xdc, 0x59, 0x58, 0x9a, 0x24, 0xc5, 0xda, 0x29, 0x22, 0x8f,
+    0x9a, 0x04, 0xbc, 0xc5, 0x1b, 0xf6, 0x67, 0xfd, 0x8b, 0x2e, 0x73, 0xac,
+    0xbf, 0xff, 0xb0, 0x8a, 0x25, 0xa8, 0xe1, 0x66, 0xf6, 0xf0, 0x56, 0x5f,
+    0xf0, 0x79, 0xf8, 0x98, 0x3d, 0x71, 0x65, 0xf3, 0x6b, 0x50, 0xb2, 0xff,
+    0x66, 0xfc, 0x16, 0x61, 0x86, 0x24, 0xbc, 0x66, 0x79, 0x65, 0xfa, 0x68,
+    0xcf, 0x71, 0x65, 0x6c, 0x46, 0xe7, 0x8f, 0x08, 0x87, 0xe7, 0x42, 0x0e,
+    0xdf, 0xe1, 0x5c, 0x07, 0xbf, 0x36, 0x96, 0x5e, 0x3b, 0xfd, 0x65, 0xfc,
+    0x51, 0x30, 0x5c, 0x45, 0x95, 0x32, 0xa1, 0x93, 0x8b, 0x7a, 0x33, 0x50,
+    0xa6, 0x6f, 0x38, 0x10, 0x72, 0xff, 0xfb, 0x06, 0xec, 0x4f, 0xf6, 0x29,
+    0x73, 0x16, 0x5f, 0xde, 0x7d, 0x36, 0x69, 0x65, 0x41, 0xfb, 0xba, 0x5d,
+    0x2c, 0xbe, 0xeb, 0xb6, 0xd2, 0xcb, 0x03, 0x6b, 0x35, 0xff, 0x0b, 0xbf,
+    0xdb, 0xfc, 0xd9, 0x27, 0xde, 0xb2, 0xfd, 0xbd, 0xce, 0xc7, 0x59, 0x50,
+    0x88, 0xbc, 0x2c, 0x23, 0x6b, 0xf6, 0x4d, 0x28, 0x92, 0xcb, 0xe8, 0x11,
+    0x80, 0xb2, 0xff, 0x8e, 0xf2, 0xc9, 0x40, 0x38, 0xb2, 0xff, 0xf9, 0xbf,
+    0xcf, 0x30, 0xcf, 0xf2, 0x8c, 0xe9, 0x65, 0x4e, 0x8a, 0x90, 0x11, 0x7c,
+    0xe2, 0xfe, 0x9c, 0x71, 0x84, 0x35, 0x95, 0x0b, 0xf2, 0xd2, 0x7d, 0x68,
+    0xd9, 0x7c, 0xca, 0xf2, 0x8f, 0xca, 0x1b, 0x5c, 0x86, 0xd7, 0xcb, 0x43,
+    0x0d, 0x11, 0x0c, 0x6f, 0x38, 0x19, 0x65, 0xff, 0xb3, 0x7c, 0x47, 0xa2,
+    0x78, 0xe9, 0x65, 0xff, 0x0c, 0x83, 0xcc, 0x9f, 0x27, 0x59, 0x7a, 0x34,
+    0x4b, 0x2f, 0xf6, 0x0c, 0x9f, 0x8c, 0x35, 0x96, 0xf2, 0xcb, 0xc1, 0x79,
+    0xc8, 0xf0, 0xb8, 0x63, 0x5a, 0x44, 0x87, 0xd7, 0x6f, 0x8f, 0xcc, 0x3a,
+    0xca, 0x63, 0xc5, 0x72, 0x3b, 0xfa, 0x35, 0xff, 0xe6, 0xe2, 0xcb, 0xa3,
+    0x7a, 0xca, 0x3a, 0x7a, 0x5e, 0x1b, 0x74, 0x01, 0x5c, 0x61, 0xe4, 0x41,
+    0xba, 0x61, 0x7f, 0x08, 0x32, 0x8c, 0x9d, 0x65, 0x89, 0x65, 0xf4, 0x4f,
+    0x12, 0x59, 0x43, 0x3e, 0x07, 0x2e, 0x21, 0x0b, 0xfb, 0xcd, 0xf2, 0x83,
+    0xac, 0xbf, 0xfd, 0x83, 0x73, 0xe7, 0x52, 0xc0, 0x60, 0xd6, 0x5d, 0xe7,
+    0x59, 0x74, 0xdc, 0x59, 0x7e, 0xcd, 0xec, 0x43, 0xc3, 0x5c, 0x20, 0xb5,
+    0xfd, 0xb3, 0xf9, 0xce, 0x42, 0xcb, 0xec, 0xeb, 0xf0, 0xb2, 0xff, 0xe7,
+    0xd6, 0x1a, 0xda, 0xcd, 0xef, 0xa5, 0x95, 0xe3, 0xe7, 0xde, 0x45, 0x7f,
+    0xe2, 0xcd, 0x69, 0x8f, 0x9d, 0x7d, 0x65, 0xfb, 0x75, 0xe7, 0x12, 0x4b,
+    0x2b, 0x62, 0x7b, 0x42, 0xdd, 0xe0, 0xfb, 0x21, 0x2d, 0xc2, 0x40, 0x9f,
+    0x5d, 0xe7, 0x59, 0x7f, 0xef, 0x33, 0x83, 0x0a, 0x3a, 0xe2, 0xcb, 0x0f,
+    0x0f, 0x4f, 0xe2, 0xd7, 0xfc, 0x52, 0xf6, 0x11, 0x41, 0x8b, 0x2f, 0xff,
+    0x3c, 0xf1, 0xad, 0x3c, 0xb6, 0x00, 0x78, 0xb2, 0xb1, 0x10, 0x64, 0x6f,
+    0x7f, 0xe2, 0xcf, 0xf9, 0xa3, 0x70, 0xf8, 0xb2, 0xff, 0xb5, 0xa7, 0x96,
+    0xcd, 0xf1, 0xb8, 0xb2, 0xa0, 0xff, 0xf0, 0xfe, 0xa1, 0x18, 0x12, 0x85,
+    0x05, 0x69, 0x52, 0x19, 0x42, 0xcb, 0xf1, 0xb5, 0x5f, 0xb0, 0x9f, 0xfc,
+    0x59, 0x7f, 0x73, 0xd8, 0x4d, 0xc5, 0x97, 0xf7, 0x66, 0x39, 0x14, 0x2c,
+    0xa9, 0x1f, 0xfe, 0x89, 0x88, 0xb2, 0xfa, 0x6f, 0x36, 0x96, 0x5f, 0x38,
+    0xc4, 0x3a, 0xcb, 0xb3, 0x82, 0x93, 0xc6, 0x91, 0x1d, 0x42, 0xee, 0xb6,
+    0x16, 0xb4, 0xe2, 0x4b, 0xc2, 0xec, 0x9d, 0x2f, 0xfb, 0x07, 0x85, 0x04,
+    0x18, 0x59, 0x63, 0x16, 0x5f, 0xfe, 0x06, 0x75, 0xf8, 0xea, 0x5f, 0x04,
+    0x49, 0x65, 0xfe, 0xf9, 0x37, 0x5c, 0x10, 0xeb, 0x28, 0x91, 0x03, 0xc4,
+    0xcb, 0xf3, 0xbf, 0x52, 0xe2, 0xca, 0x84, 0x6e, 0xb4, 0x24, 0xf4, 0x45,
+    0x51, 0x08, 0x26, 0x79, 0xe5, 0x0e, 0x4a, 0x97, 0xf0, 0x3a, 0x4e, 0x46,
+    0x4a, 0xa2, 0x36, 0x52, 0x97, 0x73, 0xe4, 0x7d, 0x46, 0x60, 0xd1, 0xd2,
+    0x4d, 0x28, 0x1f, 0x55, 0xb7, 0x71, 0xe7, 0xa4, 0x7d, 0x4a, 0xd6, 0x78,
+    0x68, 0x82, 0x3d, 0x02, 0xac, 0x86, 0x79, 0x3c, 0xbb, 0xfa, 0x5c, 0x08,
+    0x65, 0x3c, 0xef, 0x9e, 0x99, 0x11, 0x57, 0x76, 0x31, 0x2b, 0xfd, 0xa2,
+    0x8f, 0xcb, 0x3c, 0xb2, 0xf7, 0x20, 0x0b, 0x2b, 0x0f, 0x3b, 0xe6, 0x57,
+    0xfe, 0xf6, 0x0f, 0xd8, 0xe5, 0x9b, 0x8b, 0x2f, 0xe9, 0x16, 0x76, 0xdf,
+    0x59, 0x7f, 0xf1, 0x76, 0x6b, 0xf3, 0x25, 0x05, 0xda, 0xcb, 0xec, 0x1b,
+    0xc9, 0x65, 0xcd, 0x3a, 0xca, 0x01, 0xb8, 0xf9, 0x0d, 0x62, 0x61, 0x5d,
+    0x1f, 0xb1, 0x69, 0x3e, 0xdf, 0xf7, 0xf9, 0xe6, 0x83, 0xb8, 0xd6, 0x5f,
+    0x0f, 0x4f, 0x25, 0x97, 0x84, 0x80, 0x2c, 0xbe, 0xf0, 0x63, 0x8b, 0x2f,
+    0x3b, 0x81, 0x65, 0xef, 0x47, 0x20, 0xde, 0xe8, 0x8a, 0xff, 0xde, 0x62,
+    0x8e, 0xb8, 0xc7, 0x85, 0x97, 0xb9, 0x1a, 0x59, 0x77, 0xf8, 0x34, 0x45,
+    0x76, 0x63, 0xd1, 0xed, 0x42, 0x6f, 0x86, 0x9c, 0x39, 0x10, 0x61, 0xc9,
+    0x7a, 0x5f, 0x3a, 0xcb, 0xf8, 0xb2, 0x52, 0x7e, 0x2c, 0xbf, 0xa0, 0x4e,
+    0x0f, 0xa3, 0xac, 0xae, 0xcf, 0x70, 0x8b, 0x2f, 0xe7, 0x33, 0x00, 0x27,
+    0xd6, 0x5c, 0x36, 0x59, 0x7d, 0xd7, 0x23, 0xa5, 0x97, 0x3c, 0xb6, 0x1b,
+    0xa6, 0x16, 0xbc, 0x6f, 0x99, 0x65, 0xff, 0xd3, 0x6a, 0x37, 0xfa, 0x1b,
+    0x4d, 0x32, 0xca, 0x91, 0xf2, 0x74, 0x3b, 0x7f, 0x0f, 0xd9, 0xfe, 0x3a,
+    0xcb, 0xfd, 0xc2, 0xc3, 0xbb, 0xce, 0xb2, 0x9c, 0xf7, 0xc2, 0x5b, 0x7f,
+    0x73, 0x06, 0xdc, 0x9d, 0x65, 0xe9, 0x40, 0x16, 0x5f, 0x84, 0x9a, 0x51,
+    0xb8, 0x92, 0xa1, 0x77, 0x53, 0x23, 0x2b, 0x36, 0x3b, 0x8e, 0xd0, 0x99,
+    0xe7, 0x44, 0x5e, 0x69, 0x78, 0x48, 0x94, 0x20, 0xb8, 0x43, 0xf2, 0xe1,
+    0x07, 0x2f, 0xe1, 0xe9, 0xfb, 0x7e, 0xd6, 0x5f, 0xff, 0xf0, 0xaa, 0x9e,
+    0x36, 0x83, 0xc0, 0xaa, 0x14, 0x0a, 0xbf, 0xce, 0x0d, 0x9b, 0x3d, 0xb6,
+    0xb2, 0xdd, 0xac, 0xbf, 0xf1, 0x05, 0xc4, 0xce, 0x34, 0x12, 0xcb, 0xf4,
+    0xb9, 0xfd, 0xe0, 0x59, 0x46, 0x9f, 0x3f, 0x47, 0x97, 0xb6, 0xd8, 0x6b,
+    0x2b, 0x47, 0x86, 0x72, 0x4b, 0xfb, 0x61, 0x66, 0xf7, 0xd2, 0xcb, 0xd0,
+    0xfa, 0x59, 0x7f, 0x6f, 0x13, 0xff, 0x0f, 0x96, 0x5f, 0xc7, 0xff, 0xa3,
+    0x7c, 0x2c, 0xbe, 0xc2, 0xec, 0x0b, 0x2f, 0xf7, 0xe5, 0x1f, 0xf3, 0xc9,
+    0x65, 0xff, 0xbe, 0x13, 0xfa, 0x18, 0x9c, 0x6b, 0x2f, 0xa5, 0x27, 0xfa,
+    0xca, 0x9d, 0x12, 0x5d, 0x19, 0xb9, 0xed, 0xf1, 0xba, 0x73, 0x16, 0x5d,
+    0xde, 0xf5, 0x96, 0x11, 0x51, 0x02, 0xad, 0xf5, 0x50, 0x28, 0xad, 0x1e,
+    0xbf, 0xc6, 0x8c, 0x1f, 0xac, 0x45, 0x5b, 0x3d, 0xdf, 0xdd, 0xb4, 0xff,
+    0x71, 0xac, 0xbf, 0x98, 0x57, 0xdf, 0xa0, 0xc5, 0x97, 0xfb, 0xcc, 0x20,
+    0xb0, 0x02, 0x12, 0x56, 0x8f, 0xa7, 0x6c, 0xce, 0xfd, 0x87, 0x77, 0x9d,
+    0x65, 0xfa, 0x3b, 0xf4, 0x69, 0x65, 0xef, 0x04, 0xd5, 0x97, 0xb7, 0x45,
+    0x7c, 0x59, 0x5e, 0x3c, 0x22, 0x1e, 0xa9, 0xd3, 0x6f, 0x68, 0x4c, 0x11,
+    0x2f, 0xc9, 0xc4, 0x6a, 0xbf, 0x8f, 0xe8, 0x0f, 0x4c, 0xb2, 0xff, 0x88,
+    0x03, 0xf3, 0x89, 0x93, 0xac, 0xbf, 0x60, 0x45, 0x79, 0xc5, 0x94, 0xc7,
+    0xcb, 0xe3, 0xab, 0xff, 0xc4, 0x6b, 0xb9, 0x00, 0x82, 0xfd, 0x6d, 0x4b,
+    0x2f, 0xf7, 0xf8, 0x1e, 0xbe, 0xc6, 0x2c, 0xac, 0x44, 0x21, 0x27, 0x5f,
+    0xff, 0xb0, 0xc8, 0x38, 0x5c, 0x7f, 0xeb, 0xb6, 0x23, 0x16, 0x5f, 0xfb,
+    0xaf, 0xf7, 0xe6, 0x1f, 0xb2, 0x75, 0x97, 0xf3, 0x75, 0xcf, 0x31, 0x8b,
+    0x2c, 0x2b, 0x59, 0x40, 0x3c, 0x42, 0x2f, 0xac, 0x45, 0x3e, 0xa1, 0x0d,
+    0x7f, 0x3f, 0x33, 0x08, 0xd5, 0x95, 0x87, 0xa6, 0x12, 0x7b, 0xce, 0xe6,
+    0x2c, 0xa8, 0x4e, 0xc0, 0x64, 0x3e, 0x8d, 0x48, 0x88, 0x6f, 0xf7, 0xf9,
+    0xb3, 0x0e, 0xc3, 0x59, 0x7f, 0xcf, 0xa9, 0x8a, 0x01, 0xc0, 0xac, 0xa8,
+    0x3e, 0xe1, 0x9a, 0xdf, 0xbf, 0x81, 0x2f, 0xac, 0xbf, 0x4b, 0x82, 0x46,
+    0xe2, 0xcb, 0x46, 0x1e, 0x9b, 0x93, 0xdf, 0xfb, 0x61, 0x39, 0xbb, 0x38,
+    0x00, 0x42, 0xcb, 0xff, 0xd3, 0x84, 0x1c, 0x93, 0x73, 0x91, 0xa9, 0x2c,
+    0xb3, 0x1a, 0x88, 0xfd, 0x21, 0xdf, 0xe7, 0xf7, 0x5c, 0x82, 0xfa, 0xca,
+    0x92, 0x62, 0x1c, 0x85, 0xa7, 0xca, 0x6f, 0xff, 0xf0, 0xfd, 0x1d, 0xf9,
+    0xa6, 0x77, 0x91, 0xae, 0x23, 0xee, 0x2c, 0xbf, 0xff, 0xf7, 0x9d, 0xb8,
+    0xd2, 0xc1, 0xff, 0xd0, 0xda, 0xd3, 0x14, 0xeb, 0x2f, 0x8b, 0x37, 0xe2,
+    0xca, 0x9d, 0x1e, 0x47, 0x66, 0x31, 0xaa, 0xff, 0x79, 0xa6, 0x94, 0x14,
+    0x96, 0x5f, 0xff, 0xd1, 0xfe, 0x08, 0x5f, 0xf0, 0x5e, 0x5f, 0xe6, 0x18,
+    0xb2, 0xff, 0xd1, 0x3e, 0x7e, 0x58, 0x4c, 0x35, 0x97, 0xfe, 0x73, 0x3f,
+    0x9e, 0xfb, 0x46, 0xe2, 0xcb, 0xff, 0x41, 0x9c, 0x14, 0xbf, 0x79, 0xd7,
+    0xd6, 0x54, 0x27, 0x0b, 0xd9, 0x96, 0x8c, 0xfc, 0xba, 0x47, 0xbf, 0x41,
+    0xbe, 0x97, 0xb2, 0x75, 0x97, 0xcd, 0x3f, 0x72, 0x59, 0x7f, 0xd1, 0xd1,
+    0xdf, 0xf9, 0xd7, 0xd6, 0x5c, 0xf3, 0xac, 0xae, 0x91, 0x31, 0xa2, 0x32,
+    0x24, 0x30, 0xea, 0xf7, 0x9f, 0x8b, 0x2d, 0xd2, 0xca, 0x83, 0x5c, 0x31,
+    0xcb, 0xfc, 0x77, 0xe1, 0x46, 0x1a, 0xb2, 0xc1, 0x59, 0x7f, 0xc1, 0x0f,
+    0x9b, 0xfe, 0x79, 0x2c, 0xbd, 0x2c, 0xfa, 0xcb, 0xe7, 0xf6, 0x69, 0x65,
+    0x78, 0xde, 0xef, 0x1c, 0xbf, 0x07, 0xda, 0x83, 0x16, 0x5d, 0xb6, 0xeb,
+    0x2e, 0x8e, 0xf6, 0x26, 0x7d, 0x84, 0x06, 0x99, 0x1c, 0x45, 0xdd, 0xbe,
+    0x46, 0x21, 0x4d, 0xe2, 0x15, 0xf1, 0x65, 0xf4, 0xbc, 0xdb, 0xd6, 0x5e,
+    0x82, 0xfe, 0xc3, 0xc4, 0x62, 0x0b, 0xb4, 0xeb, 0x2f, 0xfe, 0xde, 0xdc,
+    0xe6, 0x17, 0x6e, 0x40, 0x59, 0x7f, 0xbc, 0xc3, 0x1e, 0x19, 0x32, 0xcb,
+    0xcd, 0xd7, 0x16, 0x5f, 0xb3, 0x7e, 0x48, 0x56, 0xb2, 0x8d, 0x3c, 0xaf,
+    0x0e, 0xd8, 0x18, 0x8e, 0x7e, 0xd1, 0x7e, 0xff, 0x7c, 0x27, 0x9f, 0xeb,
+    0x2d, 0x1a, 0x3d, 0x93, 0x9b, 0x53, 0x27, 0x61, 0xa3, 0x3f, 0x46, 0xad,
+    0x7f, 0xe7, 0xeb, 0x99, 0xf6, 0x3b, 0xc9, 0x65, 0xbe, 0xb2, 0x80, 0x79,
+    0xe2, 0x1f, 0x5f, 0xff, 0x13, 0xe7, 0x9b, 0x5e, 0x70, 0xfb, 0x0e, 0xb2,
+    0xff, 0xde, 0x6e, 0xfd, 0x9f, 0xc3, 0x64, 0xb2, 0x86, 0x88, 0xdc, 0x4d,
+    0xbf, 0xff, 0xf3, 0xe8, 0xd1, 0xfa, 0x39, 0xec, 0xea, 0x5f, 0x69, 0xa3,
+    0x81, 0x59, 0x58, 0x89, 0x17, 0x22, 0xbe, 0x2d, 0x9d, 0xcc, 0xb2, 0xff,
+    0xff, 0x4c, 0x50, 0x7d, 0x47, 0x79, 0xac, 0xf3, 0x6b, 0xce, 0xb2, 0xff,
+    0xf9, 0xf4, 0x0d, 0xbc, 0xd4, 0x49, 0xba, 0xfe, 0x2c, 0xbf, 0xff, 0xf8,
+    0x3c, 0xf3, 0xcb, 0x92, 0x6f, 0x89, 0xa8, 0xf4, 0x7f, 0x8f, 0xd2, 0xcb,
+    0xff, 0xce, 0x0c, 0x28, 0x94, 0x6c, 0x83, 0x9d, 0x65, 0xfa, 0x30, 0xbf,
+    0xb6, 0xb2, 0xfe, 0x6e, 0x81, 0xa7, 0x1a, 0xcb, 0xff, 0xdb, 0xcb, 0x39,
+    0xb3, 0x08, 0x32, 0xce, 0x2c, 0xa5, 0x95, 0x87, 0xae, 0x74, 0xca, 0x3a,
+    0x33, 0xfc, 0x52, 0x50, 0x85, 0xbf, 0x7a, 0x35, 0xc6, 0x59, 0x76, 0xb7,
+    0x16, 0x5e, 0x90, 0x46, 0xb2, 0xe7, 0xeb, 0x62, 0x24, 0x86, 0x69, 0x31,
+    0x3b, 0x8d, 0x5f, 0xe7, 0x21, 0x1e, 0x58, 0x35, 0x95, 0x0a, 0xdc, 0xf0,
+    0x99, 0x98, 0x34, 0xa4, 0x4e, 0x9c, 0x8e, 0xa8, 0x29, 0x77, 0xf3, 0x68,
+    0x51, 0xcf, 0xb2, 0xcb, 0xff, 0xfb, 0x0a, 0x7e, 0x72, 0x01, 0x9e, 0x6d,
+    0x39, 0x9f, 0x59, 0x7f, 0x0f, 0x08, 0xdd, 0x42, 0xcb, 0xb6, 0xfa, 0x59,
+    0x52, 0x6c, 0xb3, 0x07, 0x29, 0x57, 0xb8, 0x58, 0x75, 0x1c, 0x24, 0xd2,
+    0xab, 0x75, 0x0e, 0xf3, 0xc7, 0x55, 0xe9, 0x4c, 0xe0, 0x84, 0x29, 0x46,
+    0x83, 0xf9, 0x72, 0x9b, 0xda, 0x0c, 0x31, 0xdb, 0x5b, 0x10, 0xb6, 0xf9,
+    0xe7, 0x09, 0x8b, 0x2e, 0x15, 0xee, 0xac, 0xbc, 0xc7, 0xc5, 0x97, 0x41,
+    0xab, 0x2a, 0x47, 0xe9, 0xd1, 0x26, 0x87, 0x8c, 0x1b, 0xb7, 0x6b, 0x2f,
+    0xff, 0xec, 0x1f, 0xa0, 0xc2, 0xc6, 0x9f, 0x6c, 0x3e, 0x6d, 0x2c, 0xad,
+    0xc3, 0xf0, 0x21, 0x2a, 0x86, 0xd8, 0x33, 0x14, 0x1a, 0xb3, 0x5f, 0x78,
+    0xe2, 0xc3, 0x0a, 0xeb, 0xe8, 0xed, 0xbb, 0x59, 0x7b, 0x4c, 0x62, 0xcb,
+    0xfd, 0xcc, 0xd0, 0xc9, 0xe4, 0xb2, 0x86, 0x79, 0xfc, 0x1d, 0xbf, 0xcf,
+    0xb0, 0xb0, 0x01, 0xe2, 0xcb, 0xde, 0xc0, 0x2c, 0xb4, 0x2c, 0xbf, 0xfe,
+    0x99, 0xde, 0x5c, 0x83, 0x8f, 0xd0, 0x5d, 0xac, 0xa8, 0x3e, 0x06, 0x10,
+    0xbf, 0xe0, 0xf7, 0x9a, 0x9e, 0x70, 0xce, 0xb2, 0xff, 0xb2, 0x69, 0x47,
+    0x59, 0xd7, 0xd6, 0x56, 0xc4, 0xd2, 0x60, 0xd3, 0x1f, 0x0e, 0x40, 0x47,
+    0xd7, 0xa7, 0x6e, 0x96, 0x5d, 0xe1, 0xac, 0xa9, 0xcf, 0xfd, 0x92, 0xb8,
+    0x3d, 0x52, 0x55, 0x16, 0x37, 0x2d, 0x47, 0xd5, 0x7c, 0x3f, 0x06, 0x75,
+    0x97, 0xf3, 0xcb, 0x27, 0x09, 0x2c, 0xbb, 0x06, 0xb2, 0x86, 0x78, 0x7d,
+    0x96, 0xdf, 0xfb, 0x59, 0xb9, 0x37, 0x9c, 0xed, 0xc5, 0x97, 0xfd, 0x9f,
+    0xfb, 0x18, 0x76, 0xfa, 0xcb, 0x4f, 0x09, 0x82, 0xe3, 0x3e, 0x88, 0xfc,
+    0x85, 0x66, 0x59, 0x70, 0xaf, 0x16, 0x56, 0x1f, 0x6e, 0x90, 0xdc, 0x42,
+    0xff, 0xdb, 0xdb, 0xf2, 0x8d, 0x9f, 0x80, 0xac, 0xb4, 0xcb, 0x2f, 0x6f,
+    0xc1, 0xac, 0xbf, 0x6d, 0x87, 0xd9, 0xda, 0xcb, 0x8f, 0xc5, 0x95, 0x88,
+    0xb5, 0x99, 0x08, 0xe2, 0x5f, 0x1e, 0x09, 0x65, 0xfd, 0x1f, 0x60, 0x44,
+    0x96, 0x5d, 0x27, 0x59, 0x5a, 0x3c, 0x27, 0x2c, 0xbf, 0xba, 0x9d, 0xe5,
+    0x1b, 0x8b, 0x2e, 0x29, 0x2c, 0xa8, 0x3c, 0x89, 0xcc, 0xae, 0x32, 0x16,
+    0x56, 0xc7, 0x44, 0x2f, 0xb5, 0x17, 0x8a, 0x61, 0x1b, 0x10, 0xbc, 0x9c,
+    0x8a, 0x46, 0x18, 0x36, 0x69, 0x97, 0x65, 0xed, 0x0b, 0x43, 0xc3, 0x73,
+    0xd5, 0xbc, 0xe3, 0xca, 0xeb, 0x28, 0xea, 0xb9, 0x0e, 0x2f, 0xc2, 0x30,
+    0x2d, 0x3b, 0x64, 0x57, 0xfe, 0x14, 0x89, 0x07, 0xef, 0xcf, 0xd0, 0x16,
+    0x5f, 0xe9, 0x4d, 0x84, 0xfe, 0xc5, 0x97, 0xdd, 0x4a, 0x0e, 0xb2, 0xff,
+    0xa0, 0xa7, 0xe6, 0x1e, 0x37, 0x16, 0x5f, 0xff, 0x4f, 0xfc, 0xe7, 0x83,
+    0xc8, 0x9c, 0x25, 0x0b, 0x2e, 0x8f, 0x2c, 0xbf, 0x9e, 0x61, 0xc1, 0x4e,
+    0xb2, 0xa7, 0x47, 0x98, 0xc8, 0xf0, 0xec, 0x94, 0x77, 0x8b, 0x5f, 0xef,
+    0x3f, 0xf8, 0x66, 0x79, 0x65, 0xf4, 0x4c, 0xde, 0x59, 0x7f, 0xa3, 0xe5,
+    0x93, 0xb6, 0x96, 0x5e, 0xdd, 0x83, 0xac, 0xac, 0x45, 0x3b, 0x9a, 0x70,
+    0x8b, 0x74, 0xca, 0xfc, 0x43, 0xf4, 0x49, 0x65, 0xe2, 0x8e, 0xd6, 0x5f,
+    0x44, 0xb3, 0x8b, 0x2f, 0xf9, 0xcc, 0x10, 0x8b, 0x3a, 0x92, 0xca, 0xc3,
+    0xf7, 0xf0, 0xe3, 0x90, 0xdf, 0x6e, 0xc1, 0x76, 0xb2, 0xfe, 0xf6, 0x1a,
+    0xf1, 0x3a, 0xcb, 0xe8, 0x9b, 0x50, 0xb2, 0xd0, 0xb2, 0xd8, 0xb2, 0xb4,
+    0x68, 0x0e, 0x21, 0x47, 0x3e, 0x3f, 0x21, 0x5f, 0x40, 0x45, 0x6c, 0xb2,
+    0xfb, 0x85, 0x06, 0x2c, 0xbf, 0x0f, 0xd8, 0x52, 0x59, 0x58, 0x79, 0x2e,
+    0x45, 0x7a, 0x4c, 0x05, 0x97, 0xff, 0xf6, 0x7f, 0x82, 0x73, 0xfe, 0x72,
+    0x37, 0x37, 0xc1, 0x8b, 0x2f, 0xb9, 0xf6, 0x99, 0x65, 0x1d, 0x10, 0x4e,
+    0xbf, 0x7f, 0x9b, 0x51, 0x3b, 0xeb, 0xb5, 0x97, 0x77, 0x32, 0xcb, 0x7f,
+    0x62, 0xb7, 0xc8, 0x3e, 0x1c, 0x27, 0xb0, 0xb7, 0xb2, 0x56, 0x84, 0x8e,
+    0x88, 0xbc, 0xdc, 0xe4, 0x1c, 0x84, 0xf7, 0xc8, 0xb6, 0xcd, 0x2f, 0xff,
+    0x6b, 0xb2, 0xcd, 0xe5, 0x91, 0xa8, 0xe2, 0xcb, 0xff, 0x1d, 0xb3, 0xac,
+    0x61, 0xc6, 0xea, 0xcb, 0xfc, 0xf3, 0x7b, 0x0f, 0x9c, 0x59, 0x58, 0x8b,
+    0xdd, 0x25, 0x6f, 0x40, 0xbd, 0xb7, 0x1f, 0x59, 0x7d, 0x1b, 0xdb, 0x7a,
+    0xcb, 0xb0, 0xeb, 0x2c, 0x6e, 0xc3, 0x76, 0xc4, 0xb5, 0x3a, 0x20, 0xc9,
+    0x6a, 0xfc, 0x6f, 0xf3, 0x0e, 0xb2, 0xff, 0xd2, 0x93, 0x77, 0x07, 0x9b,
+    0x90, 0xb2, 0xff, 0xf4, 0xe2, 0x79, 0xa0, 0xa7, 0x01, 0xe2, 0x4b, 0x2b,
+    0x11, 0xae, 0xc4, 0x6e, 0x50, 0x14, 0x0b, 0xff, 0x8b, 0x0d, 0x35, 0xff,
+    0xc6, 0x29, 0x96, 0x5e, 0xc9, 0x32, 0xca, 0x98, 0xf8, 0x34, 0x8b, 0x7b,
+    0x27, 0x25, 0x97, 0xb0, 0x3d, 0x2c, 0xaf, 0x1b, 0x92, 0x1c, 0xbf, 0x60,
+    0xdb, 0x5c, 0x59, 0x7e, 0x12, 0x4c, 0x0e, 0x2c, 0xbc, 0x17, 0xd2, 0xcb,
+    0xee, 0xe3, 0x27, 0x59, 0x4c, 0x6f, 0xf4, 0x39, 0x7b, 0xff, 0xe9, 0x65,
+    0xff, 0xdd, 0x76, 0xde, 0xd9, 0xbb, 0x9e, 0x63, 0xac, 0xa0, 0x1f, 0x4f,
+    0xc7, 0xae, 0x0e, 0x96, 0x56, 0x23, 0x0b, 0x90, 0x89, 0xdb, 0x22, 0xa9,
+    0xd3, 0x88, 0x39, 0x39, 0x91, 0x95, 0x5f, 0x09, 0xec, 0xed, 0x65, 0xfb,
+    0x9f, 0x77, 0x25, 0x95, 0xd1, 0xe5, 0x18, 0x49, 0x50, 0x8a, 0x76, 0x84,
+    0x1d, 0x43, 0x2b, 0x7f, 0x27, 0x1b, 0x9a, 0x37, 0xbf, 0x47, 0x16, 0xf0,
+    0x9a, 0xe2, 0xe7, 0xe5, 0x27, 0xdf, 0xf8, 0x98, 0x4e, 0xb3, 0x7f, 0x50,
+    0x22, 0xcb, 0x49, 0x65, 0xff, 0xe6, 0xcd, 0x0e, 0x0c, 0xcf, 0x47, 0x5c,
+    0x59, 0x7c, 0x24, 0x68, 0x0b, 0x2f, 0xfd, 0x1d, 0x7b, 0xd1, 0x3c, 0x04,
+    0xeb, 0x2f, 0xfe, 0xd6, 0x9c, 0x19, 0xe6, 0xd7, 0x9d, 0x65, 0xa4, 0xb2,
+    0xb8, 0x7a, 0x82, 0x21, 0xdc, 0xfa, 0x59, 0x7f, 0xfe, 0x37, 0x3e, 0xdc,
+    0xf0, 0x73, 0xe0, 0x71, 0xc2, 0xcb, 0xfb, 0xed, 0x39, 0xe3, 0xb5, 0x94,
+    0x34, 0x4d, 0x68, 0x5b, 0xca, 0xb7, 0xd2, 0x6d, 0x49, 0x65, 0xfc, 0x09,
+    0xa4, 0xda, 0x92, 0xc9, 0x8d, 0x15, 0xfe, 0xf6, 0x7b, 0x3b, 0x7e, 0xd6,
+    0x5c, 0xd3, 0xac, 0xae, 0xcf, 0x2f, 0xe6, 0x95, 0xd2, 0x2b, 0xb5, 0x08,
+    0xbb, 0xfd, 0xdc, 0xcc, 0x70, 0xbf, 0x16, 0x5f, 0x60, 0x75, 0x3a, 0xcb,
+    0xa3, 0x71, 0x65, 0x74, 0x7e, 0x27, 0x35, 0xf1, 0x1d, 0xf6, 0xa0, 0x3b,
+    0x8b, 0x2f, 0x40, 0xc6, 0xb2, 0xec, 0xdd, 0x59, 0x7c, 0x01, 0x0a, 0x4b,
+    0x2c, 0xe4, 0x6f, 0x3e, 0x33, 0x7e, 0xe7, 0x30, 0x80, 0xb2, 0x80, 0x79,
+    0x84, 0x4b, 0x50, 0xaa, 0xd1, 0xa3, 0x00, 0x78, 0x4d, 0x70, 0xc3, 0xe4,
+    0xa1, 0x85, 0x25, 0xa6, 0x59, 0x7f, 0xc1, 0x71, 0x26, 0x96, 0x75, 0x25,
+    0x95, 0xd1, 0xe7, 0x10, 0x95, 0xf1, 0x3f, 0x5c, 0x59, 0x7d, 0xf0, 0x1f,
+    0x16, 0x57, 0xcf, 0x10, 0x42, 0x2a, 0x3a, 0x22, 0x40, 0xcd, 0x74, 0x71,
+    0x65, 0xf4, 0x7a, 0x06, 0xb2, 0xbb, 0x36, 0xf3, 0x0b, 0x5f, 0xf1, 0xa3,
+    0xf4, 0x68, 0xa2, 0x4b, 0x2f, 0xde, 0x62, 0x79, 0xd6, 0x5f, 0xf4, 0x9f,
+    0x5f, 0x28, 0x3f, 0x16, 0x5f, 0xe8, 0x1c, 0x68, 0x30, 0x05, 0x97, 0x8b,
+    0x3a, 0x59, 0x6e, 0x76, 0x8a, 0xd9, 0x89, 0xce, 0x70, 0x46, 0x55, 0x09,
+    0x95, 0x1e, 0x1c, 0xd7, 0xff, 0xd1, 0x9d, 0x7f, 0xd8, 0xd2, 0x63, 0x4d,
+    0xc5, 0x97, 0xe2, 0x8d, 0xd2, 0x85, 0x97, 0xff, 0x9d, 0xf5, 0x3f, 0x9f,
+    0xfe, 0x6d, 0x49, 0x65, 0xfb, 0x43, 0xf3, 0x4c, 0xb2, 0xe7, 0x30, 0x67,
+    0xe7, 0x89, 0x57, 0xfc, 0xe5, 0x9f, 0xfb, 0x19, 0xf5, 0x97, 0xff, 0xff,
+    0x4d, 0x26, 0x2f, 0xc0, 0x37, 0x7e, 0xc6, 0xeb, 0x23, 0xa9, 0x31, 0xd6,
+    0x54, 0x22, 0xb8, 0x8e, 0x2a, 0x15, 0xdb, 0x62, 0xd3, 0x46, 0x9b, 0xa2,
+    0x87, 0x50, 0x28, 0x4d, 0x86, 0x1b, 0x74, 0x28, 0x6d, 0xbe, 0x21, 0x1a,
+    0x54, 0xc0, 0x4c, 0x84, 0x21, 0xa8, 0x7d, 0x88, 0xcc, 0x95, 0xe2, 0x30,
+    0x42, 0x53, 0x92, 0xdc, 0x7f, 0x39, 0xe7, 0x7e, 0x61, 0x02, 0xfc, 0x59,
+    0x7f, 0xf7, 0xfa, 0x96, 0x7d, 0xb7, 0xc1, 0x76, 0xb2, 0xfe, 0x80, 0xf4,
+    0xdd, 0x6e, 0xac, 0xbf, 0x61, 0x99, 0xd7, 0xd6, 0x56, 0xc3, 0xdb, 0x63,
+    0x2b, 0xfd, 0xd4, 0xb0, 0x7e, 0xc9, 0xd6, 0x50, 0xd3, 0x22, 0xe8, 0xa3,
+    0x50, 0xa2, 0x22, 0x3b, 0xf4, 0x6b, 0xa9, 0x71, 0x65, 0xff, 0xff, 0x6a,
+    0x67, 0xf3, 0x72, 0x26, 0x6f, 0xff, 0x3c, 0x06, 0xde, 0xb2, 0xa7, 0x44,
+    0x90, 0x4a, 0x6f, 0x6b, 0x38, 0xb2, 0xfc, 0xc5, 0xbf, 0x24, 0xb2, 0xf6,
+    0x34, 0xeb, 0x28, 0xd3, 0xe0, 0x38, 0xe7, 0x8a, 0x2f, 0xe8, 0x9f, 0x3f,
+    0x87, 0x59, 0x7e, 0x13, 0x67, 0xb9, 0x8b, 0x2f, 0xfe, 0xc2, 0x0f, 0x7e,
+    0xc3, 0xcc, 0xfd, 0xac, 0xa6, 0x46, 0x76, 0x8c, 0x00, 0x5b, 0xc2, 0xbb,
+    0xe3, 0xb4, 0x0d, 0x65, 0xfe, 0x23, 0x7d, 0x07, 0x39, 0x2c, 0xbf, 0xb7,
+    0x1a, 0x37, 0x43, 0xf5, 0x97, 0xe8, 0x9b, 0x33, 0xb5, 0x97, 0x8b, 0x37,
+    0x56, 0x54, 0x23, 0x37, 0x08, 0x58, 0xcf, 0xc6, 0x61, 0x28, 0xbc, 0x77,
+    0xfa, 0xcb, 0xe3, 0xbc, 0x74, 0xb2, 0x88, 0xdf, 0x18, 0x39, 0x7f, 0xbf,
+    0xc6, 0xdf, 0xa6, 0xe2, 0xcb, 0xfe, 0x32, 0x4d, 0xa1, 0x0a, 0x50, 0xb2,
+    0xe6, 0x92, 0xca, 0xc4, 0x42, 0xb1, 0xa9, 0x1d, 0x5e, 0x36, 0x3b, 0x59,
+    0x7f, 0xef, 0x64, 0xcd, 0x30, 0x77, 0x43, 0xc5, 0x97, 0x9b, 0x46, 0xac,
+    0xbe, 0xfb, 0x47, 0x4b, 0x2a, 0x11, 0x42, 0xc3, 0xc4, 0x89, 0xc1, 0xdb,
+    0xfe, 0x89, 0xa3, 0xfe, 0xcd, 0x76, 0xb2, 0xf7, 0xa2, 0x65, 0x96, 0x8e,
+    0x8f, 0x5f, 0x74, 0xea, 0xa4, 0x8b, 0xce, 0x42, 0x46, 0xf1, 0x33, 0x2c,
+    0xb9, 0xe7, 0x59, 0x7f, 0x39, 0xf3, 0x7b, 0xe9, 0x65, 0x4e, 0x78, 0xa7,
+    0x17, 0xbf, 0xf4, 0xcd, 0xe8, 0xea, 0x51, 0x34, 0x2c, 0xa6, 0x3e, 0x30,
+    0x91, 0xdf, 0x1e, 0x3e, 0x75, 0x97, 0xfd, 0xc0, 0xcf, 0x13, 0x6c, 0x07,
+    0xd6, 0x5f, 0x86, 0xe5, 0x1e, 0x59, 0x7f, 0x4a, 0x3a, 0xfe, 0x79, 0x65,
+    0xff, 0xef, 0xf1, 0x81, 0x12, 0xe6, 0x67, 0x5f, 0x59, 0x53, 0x1f, 0xc7,
+    0x0b, 0xab, 0xa4, 0x7f, 0xf8, 0xf8, 0xc8, 0x4f, 0x5f, 0xe3, 0xc4, 0xc7,
+    0x81, 0xc2, 0xcb, 0xf4, 0xd8, 0xdb, 0xa3, 0x59, 0x6f, 0x31, 0xef, 0x39,
+    0x9d, 0x42, 0x7b, 0x8d, 0x19, 0x0f, 0x21, 0x2b, 0x7e, 0xce, 0xa5, 0xe6,
+    0x59, 0x7d, 0xba, 0x41, 0x9d, 0x65, 0x6c, 0x3c, 0xe3, 0x94, 0x5f, 0xcd,
+    0xe6, 0x99, 0xa7, 0x59, 0x68, 0x59, 0x5c, 0x37, 0xdf, 0x2e, 0xbf, 0x7d,
+    0x8a, 0x50, 0xb2, 0xfe, 0xea, 0x58, 0x1d, 0x4e, 0xb2, 0xff, 0xf6, 0xb5,
+    0x05, 0x86, 0xb7, 0xbd, 0x82, 0x2c, 0xac, 0x45, 0x03, 0x13, 0x04, 0xc2,
+    0xa1, 0x35, 0x1c, 0x62, 0xd4, 0x30, 0x6f, 0xe6, 0x35, 0xbe, 0xfe, 0x59,
+    0x7b, 0xbf, 0x42, 0xcb, 0xb5, 0x0b, 0x2a, 0x47, 0xc1, 0xd1, 0x6c, 0xc3,
+    0xb7, 0xe8, 0x6f, 0xed, 0x42, 0xad, 0x65, 0xf9, 0xd8, 0x70, 0x4b, 0x2e,
+    0x80, 0xac, 0xa8, 0x44, 0xf7, 0x8c, 0x48, 0xcb, 0x84, 0xb7, 0x6e, 0xc2,
+    0xcb, 0x8b, 0xb5, 0x95, 0x06, 0xc1, 0x86, 0x6f, 0xf0, 0x58, 0xb3, 0x9c,
+    0xc5, 0x95, 0x39, 0xe8, 0x1c, 0x7e, 0xfb, 0xc0, 0x7f, 0xac, 0xb7, 0x96,
+    0x53, 0x9b, 0x30, 0x91, 0x5f, 0xe2, 0xcf, 0xc4, 0x83, 0xa5, 0x95, 0xbc,
+    0xf4, 0xb7, 0x48, 0x2f, 0xfe, 0x63, 0xb7, 0x3d, 0x0d, 0xa0, 0xee, 0x2c,
+    0xa8, 0x4c, 0x55, 0xa1, 0x50, 0xe4, 0xf7, 0xf1, 0x71, 0xb7, 0xc0, 0xd6,
+    0x5f, 0xf0, 0x18, 0xbf, 0x1c, 0x0f, 0x96, 0x5f, 0xed, 0x4e, 0xdd, 0xb6,
+    0xb1, 0x65, 0xe2, 0x63, 0x56, 0x5f, 0x9f, 0x5a, 0x89, 0xd6, 0x5f, 0xdf,
+    0x6d, 0x37, 0xc2, 0xb2, 0xb6, 0x23, 0x77, 0x0e, 0x0e, 0x69, 0xf1, 0xc1,
+    0x0a, 0x2f, 0x71, 0xc0, 0xb2, 0xa0, 0xfa, 0x3e, 0x99, 0x7e, 0x13, 0xd9,
+    0xd7, 0x16, 0x5c, 0xfb, 0x8b, 0x28, 0x27, 0x86, 0x21, 0x55, 0xff, 0xff,
+    0xf4, 0x7c, 0x9f, 0xb6, 0xe4, 0xcd, 0xae, 0xe3, 0x9f, 0x8e, 0xa0, 0x4c,
+    0xe2, 0xcb, 0xfd, 0xcc, 0xd4, 0x6f, 0x8d, 0xc5, 0x95, 0xa4, 0x5b, 0x7d,
+    0xfe, 0xff, 0x7b, 0x3a, 0x8d, 0x31, 0xd6, 0x5f, 0x7e, 0x0f, 0x0b, 0x2f,
+    0xfd, 0x1b, 0x0e, 0x4e, 0x6b, 0x78, 0x2b, 0x2f, 0xff, 0xff, 0xfb, 0x99,
+    0xff, 0x39, 0xf9, 0xad, 0x37, 0x5f, 0x77, 0x37, 0x32, 0x60, 0xfe, 0x0c,
+    0xea, 0x16, 0x5f, 0x83, 0x36, 0x6d, 0xe2, 0xcb, 0xbc, 0xeb, 0x2b, 0x88,
+    0xd8, 0xfc, 0x25, 0xf7, 0x95, 0xdf, 0xf7, 0x5c, 0x26, 0x3f, 0xf3, 0x71,
+    0x65, 0xd9, 0xa5, 0x95, 0x07, 0xa5, 0xe3, 0xcb, 0xfb, 0xe4, 0xe0, 0xc2,
+    0x59, 0x74, 0x1a, 0xb2, 0xf9, 0xc1, 0x84, 0xb2, 0xa6, 0x36, 0xe4, 0x2f,
+    0x5b, 0x11, 0x07, 0xf6, 0x2a, 0x85, 0x5c, 0x23, 0x23, 0xc3, 0x3e, 0xc8,
+    0x5e, 0x31, 0x8f, 0xc2, 0x24, 0x30, 0xa4, 0xbf, 0xd2, 0x7e, 0x9b, 0x75,
+    0x86, 0xb2, 0xff, 0xdf, 0x6e, 0x13, 0xfe, 0x67, 0x1a, 0xcb, 0xe0, 0x3f,
+    0x5c, 0x59, 0x71, 0x86, 0x2c, 0xae, 0x1b, 0xc3, 0x08, 0xef, 0xbc, 0xf9,
+    0xe4, 0x82, 0xcd, 0x15, 0xff, 0xf8, 0x46, 0x38, 0x79, 0x02, 0x31, 0xe2,
+    0x68, 0x31, 0x65, 0xcd, 0x3a, 0xca, 0x84, 0xdd, 0x30, 0xd9, 0xa1, 0x38,
+    0xe6, 0x7b, 0xd6, 0x2f, 0xc2, 0x61, 0xdb, 0x4b, 0x2f, 0xcd, 0xaf, 0xe7,
+    0x6b, 0x2f, 0xdd, 0xb7, 0x3c, 0xcb, 0x2f, 0xee, 0x9a, 0x73, 0xb7, 0x16,
+    0x5c, 0x77, 0x59, 0x7f, 0xbf, 0x05, 0xde, 0xd0, 0x03, 0xac, 0xa8, 0x3f,
+    0xef, 0x17, 0x84, 0x5a, 0xe6, 0xe9, 0x65, 0xef, 0x40, 0x16, 0x5e, 0xdd,
+    0xdd, 0x85, 0x97, 0xfc, 0x3f, 0x36, 0x9b, 0xa9, 0xa1, 0x65, 0x39, 0xee,
+    0x04, 0x8a, 0xed, 0xaf, 0x7a, 0xca, 0xc4, 0xfc, 0x8d, 0x28, 0xe8, 0xa1,
+    0xa1, 0x4d, 0xa2, 0xe7, 0x17, 0x27, 0x8f, 0x90, 0xde, 0xf6, 0xcd, 0xc5,
+    0x97, 0x8b, 0xb6, 0x59, 0x7e, 0xf4, 0x16, 0x4e, 0xb2, 0xa0, 0xf9, 0x58,
+    0x89, 0xc7, 0x2f, 0xcd, 0x3b, 0x84, 0x96, 0x5f, 0xd1, 0xf0, 0x9c, 0x3f,
+    0x59, 0x7f, 0xa0, 0xbc, 0xe0, 0x0c, 0xcb, 0x2b, 0xc7, 0xc3, 0xba, 0x5d,
+    0x50, 0xdc, 0xa3, 0x4f, 0x0d, 0x59, 0x46, 0xa4, 0x38, 0xc2, 0x72, 0x10,
+    0xa6, 0xc2, 0x9b, 0xa8, 0xe2, 0x98, 0xa3, 0x72, 0x18, 0x53, 0x47, 0xfb,
+    0xa8, 0xf6, 0x4f, 0x19, 0x97, 0xa3, 0xd0, 0x73, 0x30, 0x46, 0xe6, 0x2b,
+    0x64, 0x29, 0x77, 0x5c, 0x8f, 0xa3, 0xf2, 0x90, 0x37, 0xc3, 0x68, 0x42,
+    0xcd, 0xd8, 0x44, 0x5f, 0x6b, 0x3f, 0x8b, 0x2f, 0xf7, 0x7e, 0x6f, 0xf1,
+    0xfa, 0x59, 0x7b, 0x35, 0xbd, 0x65, 0xed, 0x09, 0x32, 0xcb, 0x8f, 0xe5,
+    0x94, 0xc6, 0xdb, 0x83, 0xf7, 0xfe, 0x20, 0x1d, 0xe4, 0x51, 0xfe, 0x2c,
+    0xbb, 0x31, 0x65, 0xf7, 0x7e, 0x61, 0x16, 0x56, 0x26, 0x80, 0x69, 0x0b,
+    0x1a, 0xf9, 0x51, 0xc8, 0x05, 0x67, 0xa2, 0x0a, 0xdf, 0xa6, 0x89, 0xbd,
+    0x0b, 0x2f, 0xff, 0x17, 0xf8, 0x27, 0xd8, 0x83, 0x2c, 0xe2, 0xcb, 0x84,
+    0x85, 0x97, 0xf7, 0xb2, 0x67, 0x29, 0xd6, 0x5e, 0x30, 0xc3, 0x12, 0x5f,
+    0x4b, 0xf9, 0xda, 0x41, 0x66, 0x82, 0xfd, 0x83, 0x60, 0x71, 0x77, 0x7f,
+    0x2b, 0x62, 0x2d, 0xf4, 0x9c, 0x46, 0xb7, 0x72, 0x4b, 0x2f, 0x71, 0xc0,
+    0xb2, 0xa0, 0xd9, 0xf4, 0x2f, 0x7b, 0x0f, 0xb6, 0xb2, 0xa1, 0x3e, 0x5c,
+    0x29, 0xd2, 0x53, 0xc3, 0x38, 0x0c, 0x84, 0x43, 0x7c, 0x71, 0xe1, 0x2c,
+    0xbb, 0xfc, 0x59, 0x7f, 0xf8, 0x79, 0x86, 0xec, 0xcf, 0xb7, 0x3c, 0xcb,
+    0x2f, 0xf7, 0xfd, 0x1f, 0xe7, 0x99, 0x65, 0xcf, 0x25, 0x97, 0xed, 0x99,
+    0x33, 0x4e, 0xb2, 0xb6, 0x1f, 0xa1, 0xcc, 0xf8, 0x2d, 0x6e, 0x2c, 0xbf,
+    0xdf, 0xea, 0x5e, 0x82, 0x9d, 0x25, 0xff, 0xb3, 0xa9, 0x36, 0x11, 0x60,
+    0xd6, 0x5f, 0x1c, 0x3d, 0x7d, 0x65, 0xf6, 0x7a, 0x37, 0xac, 0xa9, 0xcf,
+    0x1f, 0x84, 0x95, 0x09, 0xf9, 0xce, 0x2f, 0xd4, 0x2f, 0xf4, 0x62, 0x42,
+    0x3c, 0x35, 0xfc, 0x20, 0xef, 0xf7, 0x7e, 0x61, 0xc3, 0xe9, 0x65, 0xe6,
+    0xe3, 0x2c, 0xb3, 0x2c, 0xbe, 0x71, 0x1c, 0x6b, 0x2f, 0x46, 0x8d, 0x59,
+    0x69, 0x78, 0xfa, 0x9c, 0x6c, 0x22, 0x06, 0x11, 0x5f, 0xff, 0xe1, 0xfb,
+    0x3f, 0xf7, 0x2e, 0xf9, 0x1a, 0x79, 0x9b, 0xcb, 0x28, 0x69, 0xa0, 0x75,
+    0x09, 0xd6, 0x42, 0xbf, 0xe2, 0x83, 0x38, 0xc5, 0xd4, 0x96, 0x5f, 0xff,
+    0xfb, 0x80, 0x6d, 0x0f, 0x0b, 0xcd, 0xdf, 0x9b, 0xe6, 0xc1, 0x49, 0x65,
+    0xd1, 0xda, 0xca, 0x24, 0x5e, 0x7c, 0xe7, 0x7b, 0x65, 0xe1, 0x23, 0x71,
+    0x65, 0xde, 0x65, 0x96, 0x02, 0xca, 0x34, 0xd3, 0x90, 0xb5, 0x4e, 0x7d,
+    0x0c, 0x8f, 0x7f, 0xdf, 0xf3, 0x40, 0x27, 0xe1, 0xab, 0x2f, 0xc5, 0x06,
+    0x61, 0x2c, 0xbf, 0xef, 0x75, 0x06, 0xcd, 0x28, 0xdc, 0x59, 0x6e, 0x0c,
+    0xf9, 0x70, 0x9a, 0xb4, 0x8e, 0x92, 0x22, 0xfc, 0x28, 0x29, 0x65, 0xfa,
+    0x5a, 0x68, 0x3a, 0xcb, 0xc2, 0x74, 0x62, 0xca, 0x9c, 0xf4, 0xba, 0x0b,
+    0xe1, 0x3d, 0x42, 0xe6, 0xd6, 0x47, 0x5e, 0xd0, 0xf2, 0x78, 0xe0, 0x83,
+    0x08, 0x6b, 0xcc, 0x08, 0x59, 0x7d, 0x2c, 0xfb, 0x2c, 0xad, 0x86, 0xf3,
+    0xa1, 0xbb, 0xfd, 0x2f, 0x47, 0x5f, 0x8f, 0x2c, 0xbf, 0xfd, 0x2f, 0x87,
+    0xda, 0x83, 0x24, 0xc0, 0xc5, 0x97, 0x39, 0xd6, 0x57, 0x68, 0xb9, 0xe8,
+    0x90, 0x8d, 0x37, 0xa5, 0xdf, 0xff, 0xbe, 0xfa, 0xc6, 0x07, 0x33, 0xcd,
+    0xaf, 0x3a, 0xcb, 0xfe, 0xf3, 0x6a, 0x62, 0x88, 0xe9, 0x65, 0xe8, 0x21,
+    0xac, 0xbf, 0x75, 0xc9, 0xb3, 0xeb, 0x2b, 0x13, 0x11, 0xe9, 0x01, 0x94,
+    0xfc, 0x72, 0x43, 0x77, 0xf3, 0x7c, 0x9c, 0x1c, 0x59, 0x7e, 0x83, 0xff,
+    0x3c, 0xb2, 0xf8, 0x48, 0x29, 0x96, 0x5f, 0x71, 0xa3, 0xb5, 0x97, 0xff,
+    0x4d, 0x9a, 0xc7, 0x3c, 0x79, 0x86, 0xb2, 0xb0, 0xf9, 0x7e, 0x45, 0x7f,
+    0x04, 0xf9, 0xee, 0x9d, 0x65, 0x1a, 0x99, 0x57, 0x65, 0x9e, 0x27, 0x28,
+    0x44, 0x70, 0x86, 0xff, 0xf3, 0x0c, 0x9f, 0xa2, 0xcf, 0xe3, 0x01, 0x65,
+    0xf4, 0xf3, 0xbe, 0xe2, 0xcb, 0xee, 0xc6, 0x19, 0xd6, 0x5e, 0x97, 0x02,
+    0xb2, 0xfe, 0x2f, 0xb7, 0xa4, 0x4b, 0x2f, 0xff, 0xff, 0xde, 0x8c, 0x9e,
+    0x4d, 0xfe, 0x46, 0xb0, 0x5b, 0x02, 0x23, 0x7c, 0x41, 0x76, 0xb2, 0xdf,
+    0xc4, 0x79, 0x78, 0x95, 0xc7, 0x78, 0x59, 0x78, 0xc3, 0x0c, 0x59, 0x7f,
+    0xfc, 0x7c, 0xeb, 0xe5, 0x93, 0x9f, 0x0f, 0x84, 0x90, 0x59, 0xa0, 0xa8,
+    0x46, 0x13, 0x30, 0xdf, 0x4f, 0x9e, 0x75, 0x97, 0xfb, 0x44, 0xe6, 0x67,
+    0x9d, 0x65, 0xff, 0xbf, 0x1f, 0xe6, 0x3e, 0xbd, 0x8b, 0x2f, 0xde, 0x7d,
+    0x66, 0x96, 0x5f, 0xfd, 0x39, 0x06, 0x70, 0xf3, 0xfc, 0xc3, 0x16, 0x5f,
+    0xba, 0xed, 0x8a, 0x75, 0x97, 0xfb, 0xd1, 0x29, 0xa4, 0xe4, 0xb2, 0xbe,
+    0x7b, 0xa2, 0x15, 0x54, 0x23, 0x21, 0xe1, 0x4b, 0x70, 0x5d, 0x65, 0x0d,
+    0x39, 0xac, 0x32, 0xec, 0xf7, 0xd0, 0xef, 0x22, 0x6b, 0xfe, 0x01, 0x67,
+    0x6d, 0x9f, 0xe2, 0xcb, 0xdf, 0x81, 0xac, 0xbe, 0x97, 0xc2, 0x35, 0x97,
+    0xe8, 0x69, 0x3f, 0x16, 0x54, 0x1f, 0x2f, 0x43, 0x9a, 0x23, 0xbf, 0xb3,
+    0xfe, 0x0c, 0x74, 0xb2, 0xfb, 0xed, 0xac, 0x59, 0x7d, 0xd7, 0x18, 0xd1,
+    0x9e, 0x7e, 0x17, 0x54, 0xe9, 0xd2, 0x69, 0x3c, 0xa1, 0x3b, 0xf7, 0xeb,
+    0xfd, 0x9c, 0x2c, 0xdf, 0xe6, 0x59, 0x7f, 0xe3, 0xc7, 0x45, 0x80, 0xe4,
+    0x6e, 0x2c, 0xad, 0x1f, 0xa1, 0xcc, 0xef, 0xf0, 0xcb, 0x37, 0xb6, 0x9d,
+    0x65, 0x0a, 0x17, 0x1b, 0x22, 0x5b, 0x03, 0x42, 0xdc, 0x24, 0x57, 0xe9,
+    0xf7, 0x1b, 0x3a, 0x59, 0x7e, 0x6e, 0x44, 0xe7, 0x5d, 0x9f, 0xab, 0xf4,
+    0x3e, 0x80, 0x15, 0xd9, 0xfa, 0xb9, 0xe4, 0xbb, 0x3f, 0x57, 0xc1, 0x96,
+    0x71, 0x76, 0x7e, 0xa8, 0x67, 0xa4, 0x44, 0x77, 0xe8, 0xce, 0x61, 0x2e,
+    0xcf, 0xd5, 0x2e, 0xcf, 0xd5, 0xcf, 0xf5, 0xd9, 0xfa, 0x39, 0x71, 0x69,
+    0x11, 0xfe, 0x05, 0x2a, 0xfb, 0x36, 0xd8, 0x0b, 0xb3, 0xf5, 0x4b, 0xb3,
+    0xf5, 0x70, 0x21, 0x76, 0x7e, 0xaf, 0xfb, 0x00, 0xfa, 0xcd, 0xf8, 0x35,
+    0xd9, 0xfa, 0xbf, 0xb3, 0xcd, 0xc0, 0xce, 0xbb, 0x3f, 0x54, 0x04, 0x52,
+    0x11, 0x1f, 0x11, 0xaf, 0xb5, 0x3c, 0x7d, 0x76, 0x7e, 0xa9, 0x76, 0x7e,
+    0xb0, 0xd8, 0x5c, 0x61, 0x8b, 0xb3, 0xf5, 0x52, 0x56, 0x30, 0x33, 0x5c,
+    0x84, 0x37, 0x50, 0x9d, 0xd1, 0x39, 0xcc, 0x79, 0x0b, 0xcf, 0xaf, 0x98,
+    0x4f, 0x74, 0x1a, 0x9b, 0x3f, 0x41, 0x68, 0x90, 0xbf, 0xe9, 0xe3, 0x7e,
+    0x36, 0xb2, 0x75, 0x97, 0xff, 0x3f, 0xbb, 0xf3, 0x13, 0xe9, 0xe4, 0xb2,
+    0xa4, 0x8b, 0x7d, 0x1c, 0xfc, 0xee, 0xfe, 0x8c, 0x12, 0x25, 0x25, 0x97,
+    0xfb, 0x99, 0x29, 0x47, 0xfa, 0x59, 0x7f, 0xd1, 0xa0, 0x7d, 0x9c, 0xd9,
+    0x2c, 0xac, 0x46, 0x51, 0x18, 0x70, 0xb4, 0x43, 0x4b, 0xff, 0x67, 0x63,
+    0xcd, 0x18, 0xfe, 0x99, 0x65, 0x2c, 0xbf, 0xf1, 0x64, 0xd1, 0x38, 0x1f,
+    0xae, 0x2c, 0xa8, 0x3c, 0xbe, 0x05, 0xdd, 0x29, 0xd2, 0x5f, 0x4c, 0xef,
+    0xa5, 0x95, 0x3a, 0x64, 0x7d, 0x1e, 0x7a, 0x11, 0x84, 0x43, 0xba, 0x31,
+    0x7c, 0x51, 0x37, 0x16, 0x5c, 0xd3, 0xac, 0xad, 0x2f, 0x82, 0xbc, 0xf3,
+    0xc1, 0x2a, 0x7c, 0x8a, 0xed, 0xb3, 0x56, 0x5f, 0xdc, 0x28, 0xf0, 0x74,
+    0xb2, 0xfe, 0xe1, 0x67, 0xf0, 0x0b, 0x2b, 0xa3, 0xd9, 0x39, 0x6d, 0xff,
+    0x4c, 0x59, 0xbf, 0xdd, 0x3e, 0xe2, 0xcb, 0xfb, 0xf9, 0xe8, 0xd0, 0x16,
+    0x5f, 0x69, 0xb3, 0x7a, 0xcb, 0xf6, 0x73, 0x3a, 0xfa, 0xcb, 0xe3, 0xc1,
+    0x1b, 0xb0, 0xf2, 0xdc, 0x8e, 0xff, 0xb4, 0xc7, 0xe0, 0x91, 0x93, 0x2c,
+    0xbf, 0xee, 0xe0, 0x03, 0x0b, 0xea, 0x4b, 0x2f, 0xfc, 0xef, 0x3e, 0x1d,
+    0xcb, 0xa9, 0x2c, 0xbc, 0xe6, 0xf3, 0x0f, 0xe2, 0x63, 0xab, 0xfd, 0xff,
+    0x61, 0xc4, 0x80, 0x2c, 0xbf, 0x6d, 0x46, 0xe9, 0xfb, 0x59, 0x6f, 0x6c,
+    0x3e, 0x3d, 0xa6, 0x69, 0x7f, 0xfa, 0x39, 0x87, 0x8e, 0xdf, 0x06, 0xdb,
+    0xd6, 0x56, 0x1f, 0xd1, 0x18, 0x58, 0xcd, 0x8a, 0xa5, 0x71, 0xe3, 0x47,
+    0x45, 0x0b, 0x2f, 0xc6, 0x23, 0x5b, 0x15, 0xe4, 0xc3, 0xa6, 0x11, 0xbc,
+    0xad, 0x4b, 0xe6, 0x35, 0x8c, 0x59, 0x7d, 0xff, 0x64, 0xeb, 0x28, 0xe7,
+    0x8c, 0x44, 0x77, 0x0c, 0xc5, 0x97, 0xf8, 0x62, 0x6f, 0x77, 0x2e, 0xd6,
+    0x54, 0x1f, 0x7e, 0x10, 0xb0, 0xc5, 0xe3, 0x83, 0x4b, 0x2e, 0xf9, 0x2c,
+    0xbf, 0x3f, 0xf6, 0xf3, 0x8b, 0x2f, 0x10, 0x3b, 0x59, 0x43, 0x3d, 0xdf,
+    0x0b, 0x70, 0xaa, 0xff, 0xf7, 0x5f, 0xf3, 0x08, 0x3c, 0xc2, 0xe3, 0x2c,
+    0xbf, 0xff, 0x4b, 0x51, 0xbd, 0xe6, 0x81, 0xfa, 0x0e, 0xf3, 0x2c, 0xbf,
+    0xdb, 0xaf, 0xc6, 0xe4, 0xd8, 0xb2, 0xff, 0xf4, 0x68, 0x19, 0xbd, 0xbf,
+    0x18, 0x52, 0x59, 0x5b, 0x13, 0xca, 0x16, 0xf5, 0x85, 0xfd, 0x25, 0x69,
+    0x60, 0x43, 0x6b, 0x7d, 0x65, 0xfb, 0x39, 0xc3, 0xf4, 0xb2, 0xe8, 0xeb,
+    0x61, 0xba, 0x81, 0x1b, 0xcc, 0x52, 0x59, 0x50, 0xe8, 0x54, 0x67, 0x59,
+    0x94, 0xf7, 0x76, 0x4a, 0x65, 0x68, 0xdc, 0xf7, 0x14, 0x66, 0x47, 0xd4,
+    0x7b, 0x7e, 0x9c, 0x8d, 0x79, 0xf5, 0x32, 0x9c, 0x0f, 0xe4, 0x3e, 0x83,
+    0x1f, 0xb1, 0x90, 0x97, 0xdd, 0x2e, 0xbf, 0x78, 0xf1, 0xb4, 0x62, 0xcb,
+    0xfd, 0xdc, 0x7f, 0xd1, 0xbf, 0x16, 0x5d, 0x3e, 0x2c, 0xb7, 0x78, 0x79,
+    0x80, 0x35, 0xa5, 0x96, 0x7d, 0x1b, 0x33, 0x94, 0x5f, 0xd8, 0x79, 0x9d,
+    0xe4, 0xb2, 0xff, 0xfe, 0x7f, 0x44, 0x85, 0xe0, 0x22, 0x5c, 0x1f, 0xa3,
+    0x4b, 0x2c, 0xc3, 0x44, 0x4f, 0x8b, 0x6f, 0xfc, 0x6c, 0x74, 0x51, 0xef,
+    0x07, 0xb5, 0x97, 0xff, 0x6a, 0x30, 0xb2, 0x4d, 0xec, 0xde, 0xb2, 0xfb,
+    0x34, 0xc6, 0xac, 0xbf, 0x79, 0xb9, 0x12, 0x59, 0x7f, 0xf9, 0xcd, 0xe6,
+    0x6f, 0x8e, 0xbf, 0xc0, 0x9d, 0x65, 0x39, 0xfa, 0x91, 0x3d, 0x0d, 0x1f,
+    0x47, 0x43, 0x28, 0x4b, 0xdf, 0xfc, 0x58, 0x77, 0x96, 0xd8, 0x46, 0xde,
+    0x59, 0x7f, 0x8a, 0x3f, 0xd4, 0xce, 0x75, 0x97, 0xef, 0x87, 0xf8, 0x35,
+    0x96, 0xc5, 0x94, 0xe6, 0xe3, 0x79, 0x45, 0xff, 0xde, 0xce, 0x73, 0x36,
+    0x75, 0x2c, 0xfa, 0xca, 0x92, 0x63, 0x67, 0x46, 0x26, 0xcf, 0x91, 0x5f,
+    0xb4, 0x07, 0xc0, 0x2c, 0xbf, 0xb3, 0x75, 0xbe, 0xd2, 0x59, 0x7d, 0xe8,
+    0x9f, 0x98, 0x7a, 0xde, 0x27, 0xbf, 0x89, 0xcd, 0xf3, 0xc9, 0x65, 0xff,
+    0x8e, 0x59, 0xf2, 0x8e, 0xda, 0x4b, 0x2f, 0xff, 0xef, 0xc7, 0x8b, 0x3f,
+    0xe6, 0xd8, 0x7c, 0xfb, 0xfd, 0x65, 0x2c, 0xa6, 0x3e, 0x6d, 0x2d, 0xd3,
+    0x23, 0x11, 0xe1, 0x47, 0x7e, 0xef, 0x0f, 0x1c, 0x59, 0x78, 0xc3, 0x0c,
+    0x49, 0x78, 0x48, 0x02, 0x41, 0x66, 0x82, 0xff, 0x9e, 0x42, 0x6b, 0x37,
+    0xbe, 0x96, 0x5b, 0x4b, 0x2f, 0xf1, 0x44, 0x8d, 0xd6, 0x71, 0x65, 0xff,
+    0x88, 0xb2, 0x79, 0xa5, 0x1a, 0x9d, 0x65, 0xef, 0x64, 0xa1, 0x10, 0x98,
+    0x22, 0x21, 0x9d, 0x12, 0x3f, 0xff, 0x0b, 0xfb, 0xfc, 0x52, 0x63, 0xe7,
+    0x5f, 0x59, 0x7d, 0xd7, 0x6c, 0x4b, 0x29, 0xcf, 0x5b, 0xe6, 0x74, 0xb2,
+    0xe0, 0x44, 0x8d, 0x60, 0xac, 0x86, 0xfd, 0xb2, 0x3b, 0xcd, 0x2c, 0xbf,
+    0xff, 0xe6, 0xff, 0x9e, 0x42, 0xf3, 0xcf, 0xd0, 0x3e, 0x50, 0x7e, 0x2c,
+    0xbf, 0xf6, 0xc8, 0x20, 0x9e, 0x0c, 0x8e, 0x2c, 0xb6, 0x0d, 0x1a, 0x5e,
+    0x2a, 0x26, 0x8b, 0xfe, 0xfb, 0x96, 0x73, 0x51, 0xc5, 0x97, 0xd2, 0x80,
+    0x74, 0xb2, 0xff, 0xff, 0x3b, 0x7e, 0x24, 0xda, 0x9c, 0x20, 0xdb, 0xdb,
+    0xc1, 0xb2, 0xcb, 0xff, 0xfe, 0x7d, 0xed, 0xbc, 0x83, 0xc1, 0x0a, 0x07,
+    0xe7, 0x96, 0x71, 0x65, 0xfc, 0x08, 0x2c, 0xeb, 0xeb, 0x2e, 0x70, 0x6c,
+    0x4c, 0x7f, 0xc4, 0x64, 0xcc, 0x23, 0x4d, 0xff, 0xe1, 0x0a, 0x63, 0x5c,
+    0x7e, 0xce, 0xf3, 0x4b, 0x29, 0x95, 0x92, 0x7a, 0x30, 0x27, 0x34, 0x28,
+    0xd5, 0xb8, 0x97, 0x7b, 0xf2, 0x65, 0x97, 0xb7, 0xc6, 0x96, 0x5e, 0x0e,
+    0x79, 0x65, 0x4e, 0xcb, 0x32, 0x94, 0x2b, 0xc6, 0x51, 0x91, 0x9d, 0xb4,
+    0x69, 0xf3, 0x42, 0x4c, 0xe7, 0x3e, 0x87, 0x8b, 0x93, 0x01, 0x20, 0xa3,
+    0x2e, 0xfc, 0xbc, 0xd0, 0xaa, 0xef, 0x1c, 0x30, 0x7a, 0xe6, 0x9d, 0x65,
+    0xfe, 0x2e, 0xc6, 0xdb, 0xe0, 0x6b, 0x28, 0x67, 0x98, 0x11, 0x7b, 0xff,
+    0xec, 0x6d, 0x7a, 0x1b, 0xfc, 0x62, 0xea, 0x4b, 0x2f, 0xec, 0xef, 0xfb,
+    0x79, 0xe5, 0x94, 0xb2, 0xbc, 0x6f, 0x00, 0x63, 0x7f, 0xf4, 0xde, 0x89,
+    0xc4, 0xff, 0x82, 0xf2, 0x59, 0x7e, 0x34, 0x32, 0x71, 0xac, 0xbf, 0xd1,
+    0xb9, 0xb3, 0xcf, 0x9a, 0x59, 0x7b, 0x35, 0x0b, 0x2f, 0xbd, 0xec, 0xe9,
+    0x65, 0xd8, 0x7d, 0xb3, 0x7c, 0x20, 0xdd, 0x62, 0x29, 0x49, 0xd6, 0xdb,
+    0x8b, 0x2d, 0x32, 0xcb, 0x1d, 0x65, 0x31, 0xa3, 0x71, 0x2a, 0x34, 0xf5,
+    0x8e, 0x6f, 0x7e, 0xc0, 0x72, 0x24, 0xb2, 0xfc, 0xc7, 0x18, 0xf1, 0x65,
+    0x80, 0x47, 0x9d, 0xb6, 0x4f, 0x7f, 0xdf, 0xf6, 0x73, 0x67, 0xda, 0x75,
+    0x97, 0xf6, 0x4d, 0x9a, 0x1b, 0x2c, 0xa8, 0x44, 0x9b, 0x15, 0x11, 0xe5,
+    0xff, 0x13, 0x04, 0x57, 0xcd, 0xb8, 0xfa, 0xcb, 0xfc, 0x0d, 0x36, 0x78,
+    0x3c, 0x59, 0x7b, 0x3a, 0x3a, 0xcb, 0xfb, 0x01, 0xbb, 0xf6, 0x3a, 0xca,
+    0x84, 0x40, 0x11, 0x9f, 0xc7, 0x6f, 0xfe, 0x7f, 0xe8, 0x26, 0xe7, 0xd8,
+    0x1c, 0x59, 0x79, 0xf4, 0x05, 0x95, 0x3a, 0xe5, 0xbc, 0xa1, 0x14, 0x32,
+    0x16, 0x48, 0x9a, 0x19, 0xc7, 0x77, 0xf4, 0x60, 0x84, 0x5b, 0xf8, 0x5f,
+    0x98, 0x5d, 0xb6, 0x8b, 0x7d, 0x9f, 0x12, 0x75, 0x97, 0xe2, 0x86, 0xea,
+    0x4b, 0x2f, 0x18, 0x61, 0x89, 0x88, 0x40, 0xbe, 0xed, 0xdf, 0xb4, 0xc4,
+    0x20, 0x0b, 0x35, 0xd7, 0xcf, 0xac, 0x31, 0x65, 0x68, 0xf9, 0x77, 0xa1,
+    0xde, 0x30, 0xc3, 0x13, 0x10, 0x79, 0x49, 0x88, 0x3c, 0x16, 0x6b, 0xaf,
+    0xef, 0xb9, 0xcf, 0x07, 0x59, 0x7e, 0x7f, 0xb9, 0x01, 0x65, 0xfd, 0x9f,
+    0xf0, 0x5e, 0x4b, 0x2f, 0x18, 0x61, 0x8b, 0x2f, 0x72, 0x0d, 0x48, 0x2c,
+    0xd0, 0x54, 0x2a, 0x06, 0xc8, 0x5d, 0x76, 0xa5, 0xd1, 0x5f, 0x8b, 0x48,
+    0x9b, 0xe9, 0xb5, 0xb8, 0xaa, 0x50, 0xf2, 0x8a, 0xaf, 0x19, 0x04, 0xb2,
+    0xff, 0xff, 0xe8, 0x29, 0xf9, 0xe7, 0x39, 0xde, 0x42, 0x16, 0xfc, 0x1e,
+    0x75, 0xf5, 0x97, 0xff, 0x7a, 0x24, 0xdf, 0xcf, 0x77, 0x07, 0x59, 0x50,
+    0x98, 0x23, 0x97, 0xf0, 0x73, 0x7b, 0xad, 0xff, 0xbc, 0xd3, 0x13, 0x99,
+    0xfc, 0xf2, 0xcb, 0xa3, 0x8b, 0x2b, 0xb3, 0xd5, 0xf9, 0xfd, 0xff, 0xbc,
+    0xc3, 0x82, 0xfe, 0x75, 0xf5, 0x97, 0xf8, 0xa0, 0xfc, 0xe0, 0x49, 0x65,
+    0x76, 0x7e, 0x1c, 0x3e, 0xbf, 0xfb, 0xcd, 0xaf, 0x3e, 0x71, 0x9e, 0x75,
+    0x97, 0xfe, 0x8f, 0xe6, 0xb3, 0x99, 0xd7, 0xd6, 0x56, 0x22, 0x04, 0x90,
+    0xef, 0xfd, 0x39, 0xf0, 0xf8, 0x5f, 0xce, 0xd6, 0x5f, 0x47, 0xe0, 0xeb,
+    0x2f, 0xf6, 0x13, 0x1b, 0xb3, 0xbf, 0x2c, 0xa1, 0x42, 0x7d, 0xdd, 0x42,
+    0x4c, 0xf0, 0xa4, 0x22, 0x1f, 0x9f, 0x98, 0x43, 0x7f, 0xde, 0x82, 0xef,
+    0xae, 0x3e, 0xe2, 0xcb, 0xdb, 0xb1, 0x3a, 0xcb, 0xe2, 0x0c, 0xe4, 0xb2,
+    0xf3, 0x75, 0x25, 0x95, 0x23, 0x7e, 0x02, 0x2b, 0xf8, 0x7c, 0xc3, 0xc6,
+    0xe2, 0xcb, 0xc1, 0x71, 0x16, 0x5d, 0x3f, 0x4b, 0x2c, 0xe3, 0x36, 0xc0,
+    0x1d, 0xa9, 0x26, 0x92, 0x33, 0xde, 0x97, 0xdc, 0x84, 0xc6, 0x6b, 0xfd,
+    0xcf, 0x67, 0x3f, 0x9d, 0xac, 0xbf, 0x17, 0xfd, 0x92, 0x59, 0x79, 0xa0,
+    0xd5, 0x94, 0xc7, 0xee, 0xe6, 0x84, 0x4f, 0x7f, 0xd8, 0x51, 0xef, 0x41,
+    0x8c, 0xb2, 0xfb, 0xbf, 0x31, 0x8b, 0x2f, 0x09, 0x00, 0x59, 0x7f, 0xff,
+    0xff, 0xdb, 0x0b, 0x0d, 0x6f, 0x7b, 0x37, 0x36, 0x47, 0x6e, 0x26, 0xcc,
+    0x29, 0xdb, 0x4c, 0x11, 0x5e, 0x2c, 0xa9, 0xd3, 0x45, 0x34, 0xb3, 0xa3,
+    0x73, 0x92, 0x18, 0x3b, 0x7e, 0xee, 0x3d, 0x07, 0x49, 0x7e, 0x27, 0x22,
+    0xc4, 0x97, 0x67, 0x69, 0x2e, 0x30, 0xc4, 0x95, 0x87, 0xf9, 0xc2, 0x8f,
+    0x92, 0x18, 0x2f, 0x7f, 0x88, 0x48, 0x07, 0xb3, 0x75, 0x20, 0xb3, 0x79,
+    0x7f, 0xfa, 0x71, 0xe9, 0xfb, 0x2c, 0xdf, 0xa6, 0xe2, 0xca, 0x85, 0xd5,
+    0x4c, 0x8e, 0xc1, 0xa5, 0x04, 0x3c, 0x60, 0xe1, 0x48, 0xbf, 0xfb, 0xd0,
+    0x0f, 0xfb, 0x25, 0xe6, 0xde, 0xb2, 0xff, 0xe8, 0x07, 0x33, 0x06, 0xe4,
+    0xe6, 0xac, 0xbf, 0xef, 0xf1, 0xfa, 0x68, 0xeb, 0xeb, 0x2f, 0xf8, 0x81,
+    0xe7, 0xff, 0xd8, 0x0b, 0x2f, 0xff, 0xde, 0x6d, 0xec, 0x43, 0xe4, 0x69,
+    0xb3, 0xae, 0x2c, 0xbf, 0xd9, 0xbe, 0x0b, 0xf2, 0x15, 0xac, 0xbf, 0xdd,
+    0xb7, 0x30, 0x72, 0x15, 0xac, 0xbf, 0xd9, 0x85, 0x12, 0x90, 0xad, 0x65,
+    0xfc, 0x51, 0x9a, 0x70, 0x2c, 0xbf, 0xf4, 0x6b, 0xd0, 0xde, 0x82, 0x65,
+    0x97, 0x4b, 0x98, 0x9c, 0xcf, 0x67, 0x1a, 0x56, 0xf1, 0xc1, 0x1c, 0x7c,
+    0xd4, 0xc2, 0xbb, 0xfd, 0x05, 0x87, 0x6e, 0xa4, 0xb2, 0xff, 0x7a, 0x32,
+    0x51, 0x80, 0x59, 0x7f, 0xf8, 0xb3, 0xa0, 0x3f, 0x1f, 0x4d, 0xd0, 0x16,
+    0x50, 0xcf, 0xef, 0x86, 0x35, 0x25, 0x62, 0x7d, 0x47, 0xa7, 0xf7, 0x13,
+    0x21, 0x5b, 0x7f, 0xbf, 0xe7, 0x91, 0x41, 0xd6, 0x5f, 0x7f, 0x81, 0xe2,
+    0xca, 0x92, 0xe1, 0xe7, 0x91, 0x9e, 0x5a, 0xa9, 0x26, 0x70, 0xca, 0xf6,
+    0xf1, 0x0e, 0xb2, 0xfb, 0xd3, 0xe1, 0x8b, 0x2f, 0x86, 0x12, 0x92, 0xcb,
+    0x71, 0xcf, 0x18, 0x42, 0x4b, 0xf7, 0x63, 0xc7, 0x02, 0xcb, 0x0a, 0xb5,
+    0x97, 0xfe, 0xce, 0x7e, 0x58, 0x69, 0x60, 0x16, 0x5e, 0x1e, 0x12, 0xca,
+    0x14, 0x9f, 0x83, 0x8b, 0xee, 0x9f, 0x53, 0x23, 0x34, 0x30, 0x98, 0xbe,
+    0x6f, 0x1d, 0xd6, 0x5f, 0xf8, 0xc1, 0xea, 0x3c, 0xe3, 0x91, 0xd6, 0x5f,
+    0xff, 0xbf, 0xce, 0xb6, 0x0f, 0x07, 0x0f, 0xac, 0x20, 0x2c, 0xbf, 0xff,
+    0xf6, 0xcf, 0xcb, 0x01, 0xb7, 0x9b, 0x07, 0x83, 0x87, 0xd6, 0x10, 0x10,
+    0x85, 0xff, 0xd9, 0xfd, 0x9d, 0xf9, 0xbd, 0xe6, 0x02, 0xa1, 0x0b, 0x54,
+    0x91, 0x93, 0xc7, 0x5b, 0xd1, 0x38, 0xbe, 0x26, 0x87, 0xf8, 0xc8, 0x2f,
+    0xb3, 0xb7, 0xed, 0x65, 0xf8, 0xfc, 0x31, 0xfa, 0x59, 0x43, 0x44, 0x5f,
+    0xcf, 0x84, 0x23, 0xa8, 0x54, 0xc1, 0xd1, 0x0f, 0x25, 0x07, 0x5f, 0xd9,
+    0x34, 0x9b, 0x5c, 0x59, 0x7e, 0x9e, 0x3e, 0xd3, 0x2c, 0xbe, 0x13, 0x91,
+    0x8b, 0x2b, 0xb3, 0xcb, 0xe8, 0xa6, 0xfb, 0x9b, 0x35, 0x8b, 0x2f, 0xbd,
+    0xdb, 0x71, 0x65, 0x41, 0xf5, 0xb9, 0x27, 0xc9, 0x2f, 0xff, 0xf8, 0x41,
+    0xfa, 0x25, 0xfc, 0xc3, 0x38, 0x59, 0xff, 0xb4, 0xeb, 0x2d, 0x8b, 0x2c,
+    0xf3, 0x9f, 0xc6, 0xf6, 0x8b, 0xcc, 0x58, 0xb2, 0xfd, 0xad, 0x38, 0x21,
+    0x65, 0x48, 0xf0, 0x5c, 0x6a, 0x85, 0x2e, 0xa4, 0xda, 0x29, 0x7b, 0xa3,
+    0x8d, 0x17, 0x27, 0x36, 0x5a, 0x71, 0x33, 0x53, 0xfa, 0xaf, 0x39, 0x30,
+    0x05, 0x21, 0x5b, 0x31, 0x43, 0xd7, 0x92, 0xa1, 0xfe, 0x72, 0x18, 0x72,
+    0x19, 0x0a, 0x51, 0x1a, 0xee, 0xda, 0xf6, 0x85, 0x97, 0x8c, 0x30, 0xc4,
+    0x97, 0x9c, 0x86, 0x90, 0x59, 0xa0, 0xbe, 0xcd, 0x67, 0xd6, 0x50, 0x0f,
+    0x3b, 0x85, 0xb7, 0xde, 0x67, 0x92, 0xcb, 0xfc, 0x59, 0xef, 0x94, 0x01,
+    0x65, 0xff, 0xe1, 0x08, 0xb2, 0x78, 0xea, 0x52, 0x83, 0xac, 0xbc, 0x51,
+    0x25, 0x97, 0xda, 0xd3, 0x1d, 0x65, 0xb8, 0x33, 0x7a, 0xc3, 0x75, 0x24,
+    0x57, 0x7e, 0x11, 0x17, 0x8f, 0x38, 0xd6, 0x54, 0xe9, 0x92, 0x94, 0x37,
+    0xfe, 0x51, 0x7e, 0xd6, 0x77, 0x1e, 0x59, 0x7b, 0x61, 0xbb, 0x6b, 0x2f,
+    0x7d, 0xc6, 0xb2, 0xb4, 0x6f, 0xf8, 0x47, 0x7f, 0xa3, 0xbf, 0x41, 0x64,
+    0xcb, 0x2f, 0xf1, 0xbd, 0x7f, 0x51, 0x9d, 0x2c, 0xbe, 0x03, 0x68, 0xd4,
+    0x97, 0xda, 0xd3, 0x4e, 0xb2, 0xdd, 0xc1, 0xe3, 0x39, 0x1d, 0xfc, 0x26,
+    0x6b, 0x32, 0x65, 0x97, 0xe7, 0xf6, 0xc1, 0xc2, 0xca, 0x92, 0xb5, 0x31,
+    0x91, 0x64, 0x68, 0xc6, 0x9b, 0x33, 0x3e, 0x88, 0x5c, 0xcc, 0x9f, 0x38,
+    0x4f, 0xf2, 0xeb, 0xf3, 0xeb, 0x59, 0xd2, 0xcb, 0xff, 0xdf, 0xf3, 0x38,
+    0x33, 0x43, 0x82, 0x92, 0xcb, 0xff, 0xdd, 0x6c, 0xe8, 0x10, 0x5d, 0xbc,
+    0xe4, 0xeb, 0x2a, 0x11, 0x7d, 0x85, 0x04, 0x91, 0x7e, 0x8e, 0x08, 0x52,
+    0x59, 0x7b, 0xb6, 0x92, 0xcb, 0xfd, 0x1f, 0x7d, 0x6b, 0x3a, 0x59, 0x5b,
+    0x0f, 0x43, 0xc3, 0xb7, 0xfe, 0xef, 0x35, 0x8d, 0xcf, 0x46, 0xf5, 0x97,
+    0xfe, 0x7e, 0x9c, 0x6f, 0xd6, 0x98, 0xd5, 0x97, 0xe8, 0xdd, 0x9f, 0x0c,
+    0x59, 0x7f, 0xff, 0xf3, 0xb7, 0xdb, 0xdd, 0xb6, 0xc9, 0x37, 0x9c, 0xbf,
+    0x2c, 0xd6, 0x2c, 0xbb, 0x3c, 0xb2, 0xec, 0xdd, 0x59, 0x53, 0x1a, 0xff,
+    0x0b, 0x57, 0x91, 0x84, 0xf0, 0xa0, 0xbf, 0x30, 0x1c, 0x80, 0xb2, 0xff,
+    0x47, 0x5c, 0x8f, 0xc0, 0xd6, 0x50, 0x0f, 0x64, 0x89, 0xaf, 0x70, 0x4e,
+    0x6c, 0x45, 0x0e, 0x42, 0x02, 0x86, 0xa9, 0xbf, 0xa2, 0x43, 0xa0, 0x79,
+    0x03, 0xf1, 0xc7, 0xdd, 0xc9, 0x2c, 0xbf, 0xed, 0x44, 0x9b, 0xec, 0x52,
+    0x59, 0x7f, 0xff, 0xff, 0xd1, 0xc8, 0xfc, 0xf8, 0x66, 0xb3, 0xce, 0x27,
+    0x30, 0xd7, 0x20, 0x41, 0x44, 0xde, 0x85, 0x97, 0xfa, 0x4d, 0xbc, 0x43,
+    0xe4, 0xeb, 0x2f, 0xdc, 0xf3, 0xf7, 0x0b, 0x2f, 0xcf, 0x39, 0x8f, 0x25,
+    0x95, 0x09, 0xa9, 0x91, 0xbf, 0xe1, 0x28, 0x61, 0xb8, 0x85, 0x17, 0xfd,
+    0xcf, 0x43, 0xeb, 0x59, 0xd2, 0xcb, 0xff, 0xff, 0x1b, 0xd4, 0xbf, 0x85,
+    0xfe, 0x6c, 0xe7, 0x33, 0x58, 0x4f, 0x25, 0x95, 0x88, 0xa8, 0x63, 0x9b,
+    0xe0, 0x7f, 0x27, 0x59, 0x63, 0xac, 0xa8, 0x36, 0x87, 0x23, 0xbf, 0xf8,
+    0x58, 0xca, 0x03, 0xde, 0x1a, 0xda, 0x59, 0x7b, 0x4f, 0xc5, 0x97, 0x61,
+    0x8b, 0x2a, 0x0f, 0xe8, 0x68, 0xfc, 0x1c, 0xbe, 0x87, 0xd7, 0x16, 0x5e,
+    0xff, 0xa1, 0x65, 0x61, 0xf5, 0xf8, 0xb9, 0xc8, 0x6f, 0xde, 0x82, 0x7f,
+    0x2c, 0xbf, 0xa7, 0xf3, 0xff, 0x50, 0xb2, 0xf4, 0xb3, 0x8b, 0x2f, 0x47,
+    0x5c, 0x59, 0x7f, 0x87, 0xe8, 0x99, 0xdf, 0xa5, 0x97, 0xee, 0xb8, 0x12,
+    0x92, 0xcb, 0xde, 0x06, 0xf5, 0x95, 0x3a, 0x2d, 0x46, 0x39, 0xa1, 0xd2,
+    0x34, 0xdd, 0x29, 0xb9, 0xa7, 0x59, 0x7b, 0xa7, 0xdc, 0x59, 0x5a, 0x36,
+    0xfe, 0x17, 0xbe, 0x8d, 0xb6, 0x35, 0x65, 0x49, 0x50, 0x00, 0xcb, 0x74,
+    0x4c, 0xf0, 0xe3, 0x28, 0x42, 0x7c, 0x86, 0xff, 0xfe, 0x37, 0xfe, 0x67,
+    0x06, 0x14, 0x75, 0xcc, 0xeb, 0xeb, 0x2f, 0xfe, 0xcd, 0x00, 0xed, 0xc1,
+    0x39, 0x18, 0xb2, 0xf4, 0x75, 0xb8, 0xb2, 0xfb, 0x84, 0xc6, 0xac, 0xad,
+    0x1e, 0x17, 0xc8, 0x2f, 0xb0, 0x6f, 0x25, 0x94, 0x33, 0xc3, 0x34, 0x8a,
+    0xff, 0xe3, 0x4c, 0x8d, 0x7a, 0x19, 0xff, 0xc5, 0x97, 0xc7, 0x28, 0x99,
+    0x65, 0xff, 0xf7, 0x9a, 0x4d, 0xa7, 0x07, 0xca, 0x0f, 0xc5, 0x97, 0xdf,
+    0x8d, 0x02, 0x0f, 0xc3, 0xb2, 0x2b, 0xb7, 0x38, 0xb2, 0xff, 0xb9, 0xdf,
+    0x9c, 0x7b, 0x58, 0xa4, 0x50, 0xb2, 0x8d, 0x44, 0xdb, 0x9c, 0xfc, 0x6a,
+    0xa1, 0x56, 0x44, 0x97, 0x32, 0x19, 0x2c, 0x46, 0xf1, 0xa8, 0x5e, 0xda,
+    0x88, 0x0b, 0x2f, 0xd0, 0x21, 0x3c, 0x96, 0x5f, 0xfe, 0xd3, 0x97, 0xf0,
+    0x1b, 0x70, 0x31, 0xc2, 0xcb, 0xff, 0x8a, 0x00, 0x30, 0xc4, 0xf1, 0xd4,
+    0x96, 0x5f, 0xd2, 0xd4, 0x49, 0xf4, 0xb2, 0xec, 0x3a, 0xcb, 0xdf, 0x83,
+    0x16, 0x5e, 0xf0, 0x9a, 0x59, 0x52, 0x37, 0x7f, 0x1d, 0xbf, 0xe0, 0xe8,
+    0xd7, 0x6e, 0x36, 0xf5, 0x97, 0xed, 0x00, 0xed, 0xc5, 0x97, 0xd8, 0x40,
+    0xd9, 0xb6, 0x7c, 0x62, 0x1d, 0xdf, 0x3f, 0x65, 0x8b, 0x2f, 0xe6, 0xf3,
+    0x67, 0x5f, 0x59, 0x43, 0x4d, 0x87, 0xa5, 0x13, 0xc2, 0x10, 0x8f, 0xbe,
+    0x43, 0x4b, 0x2f, 0x81, 0xfc, 0x02, 0xcb, 0xee, 0x71, 0xb7, 0xac, 0xbf,
+    0xff, 0x61, 0x1a, 0xfc, 0xf3, 0xb0, 0x0f, 0x1d, 0x49, 0x65, 0x41, 0xfc,
+    0xf6, 0x49, 0x7c, 0x72, 0x28, 0x59, 0x7f, 0xcc, 0x3f, 0x44, 0xb3, 0xaf,
+    0xac, 0xbf, 0xee, 0xe3, 0x7c, 0x71, 0x81, 0xd2, 0xcb, 0x9c, 0xd8, 0x44,
+    0xa8, 0xc8, 0x30, 0xe6, 0xfd, 0xf7, 0xf8, 0x61, 0x65, 0xff, 0xfd, 0xe6,
+    0xff, 0x9e, 0x42, 0x0d, 0xe7, 0x1f, 0x98, 0xeb, 0x2f, 0xfc, 0xdf, 0x96,
+    0x03, 0x85, 0x80, 0x59, 0x43, 0x5c, 0xed, 0xc2, 0x73, 0x52, 0xfa, 0x45,
+    0x68, 0xe3, 0xa6, 0x50, 0xd0, 0x5f, 0xa1, 0x36, 0x50, 0xb7, 0xe1, 0xd0,
+    0x49, 0xf7, 0xae, 0xde, 0xdb, 0xea, 0x16, 0x5f, 0xef, 0x14, 0x74, 0xd1,
+    0xe5, 0x97, 0xf3, 0xfc, 0x02, 0x14, 0x96, 0x57, 0x67, 0xc1, 0xe3, 0x2a,
+    0xda, 0xdb, 0x83, 0xa8, 0x97, 0xc5, 0x28, 0xd3, 0x86, 0x5b, 0x92, 0xb9,
+    0xcd, 0x53, 0x68, 0xda, 0xb5, 0x0f, 0x83, 0xaa, 0xbc, 0xb0, 0x52, 0x96,
+    0x53, 0xc5, 0x30, 0xce, 0x87, 0x6d, 0xc2, 0xe8, 0x48, 0x40, 0x5f, 0xf9,
+    0xd8, 0x61, 0xff, 0x27, 0xc3, 0x16, 0x5d, 0xb5, 0x12, 0xcb, 0xf7, 0x30,
+    0xd8, 0xe2, 0xcb, 0xf6, 0xde, 0x13, 0x9a, 0xb2, 0xfd, 0xd1, 0xdc, 0x80,
+    0xb2, 0xb6, 0x1e, 0x94, 0x15, 0x5f, 0xdb, 0x9c, 0x62, 0xea, 0x4b, 0x2f,
+    0xfc, 0xfa, 0xdb, 0x6f, 0x63, 0xf4, 0x05, 0x97, 0xf0, 0x04, 0x2f, 0x67,
+    0x4b, 0x2f, 0xff, 0xcd, 0xf8, 0x3e, 0x75, 0xf8, 0x38, 0x9a, 0x70, 0x2c,
+    0xbe, 0x62, 0x71, 0xac, 0xbf, 0xee, 0x46, 0xbf, 0x02, 0xc6, 0xcb, 0x2a,
+    0x48, 0xb0, 0x1a, 0xb7, 0x08, 0x2f, 0xff, 0xec, 0xf6, 0xcc, 0x3b, 0x7a,
+    0x36, 0x73, 0x98, 0x40, 0x59, 0x7f, 0xf3, 0x6a, 0x25, 0xe8, 0x98, 0x82,
+    0x6a, 0xca, 0xf2, 0x28, 0xb8, 0xbb, 0x7f, 0xe9, 0xe2, 0x62, 0x8e, 0x64,
+    0x49, 0x65, 0xdd, 0xed, 0xac, 0xbf, 0x8d, 0xfc, 0x7a, 0x38, 0xb2, 0xff,
+    0xb8, 0x59, 0xfe, 0x46, 0xa7, 0x59, 0x7f, 0x79, 0xba, 0xe3, 0xf4, 0xb2,
+    0xff, 0x60, 0xf3, 0x52, 0x8d, 0x2c, 0xbd, 0xe6, 0xfa, 0xca, 0x84, 0xcf,
+    0x64, 0x7c, 0xc3, 0x73, 0x17, 0x00, 0xe7, 0x85, 0xe2, 0x19, 0x5f, 0x9f,
+    0xd9, 0xd7, 0xd6, 0x5f, 0xf9, 0xff, 0xc8, 0xc2, 0x1f, 0xa1, 0x65, 0xf7,
+    0x7e, 0x80, 0xac, 0xaf, 0x1e, 0xff, 0xcf, 0x2f, 0xfc, 0xe5, 0x39, 0x98,
+    0x43, 0xf4, 0x2c, 0xb9, 0xa7, 0x59, 0x58, 0x7a, 0xa4, 0x7d, 0x7f, 0x83,
+    0xd4, 0xb8, 0x24, 0x6e, 0x2c, 0xbd, 0xdc, 0x6e, 0x2c, 0xbf, 0xd3, 0x79,
+    0xf5, 0xa6, 0x1a, 0xca, 0xc3, 0xd4, 0x72, 0x0b, 0xfc, 0xfd, 0x09, 0xa6,
+    0x3e, 0x2c, 0xbf, 0x9c, 0xa7, 0x3b, 0xfd, 0x65, 0x11, 0xf0, 0xf0, 0xd2,
+    0xf9, 0xbc, 0xe7, 0x59, 0x7f, 0xc4, 0x59, 0x3f, 0xff, 0x07, 0x59, 0x52,
+    0x55, 0x4d, 0x90, 0x87, 0x99, 0xdf, 0x44, 0x05, 0x08, 0xde, 0x42, 0x07,
+    0xe4, 0x22, 0x10, 0xdf, 0xb5, 0x9c, 0x63, 0x16, 0x5f, 0x1e, 0x35, 0xc5,
+    0x97, 0xff, 0xa0, 0x7e, 0x09, 0xa2, 0x40, 0xfc, 0x1e, 0x2c, 0xb6, 0xe0,
+    0xcf, 0xbc, 0x42, 0x2b, 0xb2, 0x75, 0x95, 0x07, 0x87, 0x85, 0x97, 0xfe,
+    0x20, 0xc8, 0x1e, 0x86, 0x29, 0xd6, 0x5c, 0x2a, 0x3a, 0xcb, 0xff, 0xff,
+    0xef, 0xc1, 0x77, 0x85, 0x06, 0x7c, 0xd7, 0xe0, 0xe1, 0xf5, 0xe3, 0x1c,
+    0x6b, 0x2f, 0xb0, 0xf1, 0xb8, 0xb2, 0xff, 0xfc, 0xe3, 0x09, 0xa1, 0x10,
+    0x2e, 0x24, 0xdb, 0x01, 0xf5, 0x95, 0x09, 0x8d, 0x30, 0xdf, 0x1f, 0x82,
+    0x49, 0x7f, 0x09, 0x01, 0xec, 0x27, 0x59, 0x73, 0x12, 0xcb, 0xe9, 0x41,
+    0x76, 0xb2, 0x86, 0x6d, 0xf0, 0x56, 0xd3, 0x2c, 0xbe, 0x14, 0xbc, 0x74,
+    0xb2, 0xd0, 0x46, 0xe3, 0xe2, 0x55, 0xb0, 0xff, 0x59, 0x62, 0xfa, 0x01,
+    0x84, 0xb2, 0xa4, 0xcb, 0x62, 0x1b, 0xd6, 0x11, 0xf6, 0x63, 0xd2, 0x0b,
+    0x43, 0x7e, 0x68, 0x69, 0x6a, 0x36, 0x03, 0xcb, 0x0b, 0x78, 0x41, 0x02,
+    0x1b, 0x44, 0x41, 0xc8, 0xd6, 0x02, 0x78, 0x64, 0x39, 0x36, 0xc8, 0xef,
+    0x8f, 0xb4, 0xc5, 0x4d, 0xa1, 0x65, 0xdf, 0xe2, 0xca, 0x63, 0xca, 0x98,
+    0xce, 0xf8, 0x48, 0x33, 0x8b, 0x2e, 0x07, 0xd6, 0x5c, 0x0f, 0x2c, 0xbe,
+    0xd6, 0xb3, 0x8b, 0x2e, 0xc9, 0x96, 0x5a, 0x5b, 0x11, 0x17, 0x39, 0x21,
+    0xc5, 0xdc, 0x5c, 0x42, 0x2b, 0xef, 0xb9, 0x62, 0xcb, 0xed, 0xd8, 0x29,
+    0x2c, 0xa6, 0x3c, 0x41, 0x08, 0x2f, 0x89, 0xff, 0xc5, 0x97, 0xed, 0x0f,
+    0x30, 0x96, 0x5f, 0x1b, 0xa7, 0x31, 0x65, 0xff, 0x9b, 0x3d, 0x1b, 0xf9,
+    0xe8, 0xe9, 0x65, 0x61, 0xf2, 0x6e, 0x12, 0x5f, 0xdd, 0x68, 0x3d, 0x7e,
+    0x4b, 0x2f, 0xf9, 0xfa, 0x33, 0x08, 0x7e, 0x85, 0x97, 0x44, 0xeb, 0x2b,
+    0x13, 0x50, 0x72, 0x1e, 0x42, 0x28, 0x24, 0x86, 0x18, 0x88, 0x73, 0x7e,
+    0x33, 0xff, 0xc9, 0xd6, 0x5f, 0xcf, 0x00, 0xce, 0xa4, 0xb2, 0x96, 0x5f,
+    0xe2, 0xd6, 0x73, 0x1b, 0xcb, 0x28, 0x52, 0x6f, 0x30, 0x2e, 0xff, 0xfa,
+    0x5f, 0x2c, 0x7f, 0x96, 0x7f, 0xf8, 0x62, 0xcb, 0xfb, 0x4d, 0xff, 0x64,
+    0x96, 0x5e, 0xf4, 0x6f, 0x59, 0x5a, 0x3c, 0xbf, 0x96, 0xdc, 0xfb, 0xab,
+    0x2f, 0xf7, 0xf3, 0x53, 0xc7, 0xf8, 0xb2, 0xa4, 0x79, 0xae, 0x33, 0x7f,
+    0xfd, 0x83, 0x6f, 0xe1, 0xfd, 0x11, 0xd9, 0xdd, 0x65, 0xd9, 0xbd, 0x65,
+    0xff, 0x77, 0xec, 0x19, 0xdb, 0x58, 0xb2, 0xfe, 0x8e, 0x7a, 0x08, 0xd5,
+    0x95, 0x08, 0xcc, 0x9d, 0x3b, 0x06, 0x34, 0x73, 0x7b, 0x6f, 0x0d, 0x59,
+    0x7f, 0x44, 0x6b, 0xd1, 0xbd, 0x65, 0xf3, 0x14, 0xdb, 0x8b, 0x2f, 0x8a,
+    0x3a, 0x92, 0xca, 0x01, 0xe3, 0xfc, 0x96, 0xfe, 0x8d, 0xf9, 0xef, 0x42,
+    0xcb, 0xef, 0xf3, 0x26, 0x59, 0xe3, 0x5d, 0x7f, 0x78, 0x6d, 0xbe, 0x06,
+    0xb2, 0xb0, 0xf8, 0x9c, 0xce, 0xfb, 0x4c, 0xf3, 0xac, 0xbc, 0xd8, 0x05,
+    0x95, 0x86, 0xf7, 0x84, 0x57, 0xf9, 0x83, 0xaf, 0x66, 0xfe, 0x2c, 0xbf,
+    0xff, 0xd9, 0xf6, 0xea, 0x45, 0x1b, 0x3e, 0xd9, 0xba, 0x3f, 0x62, 0xcb,
+    0xec, 0xfb, 0x71, 0x65, 0xfd, 0xb5, 0x4c, 0x5b, 0x44, 0xe1, 0x59, 0x5b,
+    0x88, 0xf4, 0x98, 0xd7, 0x8c, 0x9f, 0x21, 0xbf, 0xf0, 0x5c, 0xfc, 0x62,
+    0x7d, 0x1a, 0xb2, 0xa4, 0xbf, 0xdc, 0x38, 0xdc, 0xb1, 0x74, 0xd2, 0xae,
+    0xda, 0x7a, 0x24, 0x68, 0x4c, 0xcc, 0xdf, 0xa8, 0x76, 0x9c, 0xf3, 0xc4,
+    0x00, 0x75, 0x28, 0x59, 0x71, 0x77, 0xf1, 0x8a, 0x18, 0x83, 0x7d, 0xff,
+    0xb4, 0x96, 0x5f, 0xd8, 0x61, 0x6f, 0xd4, 0x96, 0x5f, 0xff, 0xbe, 0xdc,
+    0x9f, 0x0c, 0xe3, 0x4e, 0x4f, 0xd7, 0xd6, 0x5f, 0xf4, 0xb3, 0xf8, 0x36,
+    0x20, 0x2c, 0xbc, 0x66, 0x79, 0x65, 0xfd, 0x9a, 0xd0, 0x4d, 0xd2, 0xcb,
+    0xf8, 0xa4, 0x63, 0xfb, 0x8b, 0x2f, 0xc6, 0xf9, 0xc9, 0x96, 0x5b, 0x98,
+    0x7a, 0xac, 0x5d, 0x7d, 0xa1, 0x20, 0xc5, 0x97, 0xc3, 0x27, 0x35, 0x65,
+    0xff, 0xcd, 0x27, 0xd6, 0x6f, 0xeb, 0xb6, 0xe9, 0x65, 0x42, 0x23, 0xa7,
+    0x24, 0xf9, 0x15, 0xf3, 0x73, 0x07, 0x0a, 0x99, 0xa7, 0x22, 0xc3, 0x0e,
+    0x96, 0x1c, 0xdc, 0x87, 0x7f, 0x08, 0x41, 0x21, 0x69, 0x7f, 0x80, 0x1e,
+    0x31, 0x75, 0x25, 0x97, 0xf0, 0x1b, 0x4d, 0xd0, 0x16, 0x59, 0xf7, 0x0f,
+    0x8a, 0x63, 0x4b, 0x01, 0x65, 0xfe, 0x1e, 0x13, 0x19, 0xe0, 0xac, 0xbf,
+    0xfe, 0xf3, 0x47, 0xd8, 0x11, 0x21, 0x66, 0x18, 0x62, 0x4b, 0xff, 0x9a,
+    0x3e, 0x08, 0x90, 0xb3, 0x0c, 0x31, 0x25, 0x62, 0x27, 0x7c, 0xa9, 0x53,
+    0xa3, 0xcb, 0xf0, 0xd0, 0xbf, 0xde, 0x0b, 0x9c, 0x6e, 0x75, 0x94, 0x47,
+    0xb9, 0xf2, 0x9b, 0xd9, 0x86, 0xa4, 0xbe, 0xe6, 0x40, 0x16, 0x50, 0xcd,
+    0xef, 0xc7, 0x2f, 0x01, 0xfe, 0xb2, 0xfb, 0xfc, 0x0e, 0xe2, 0xca, 0x73,
+    0xc2, 0x08, 0xe5, 0xff, 0x69, 0xfb, 0xd9, 0xe8, 0x10, 0x96, 0x5e, 0x0c,
+    0x69, 0x65, 0xdf, 0xe0, 0xcf, 0x62, 0x63, 0xcb, 0xe3, 0x42, 0x0e, 0x2c,
+    0xb8, 0x82, 0xa8, 0x86, 0x57, 0xf4, 0x1e, 0x39, 0xac, 0x59, 0x52, 0x3c,
+    0xf9, 0x88, 0xef, 0x7a, 0x27, 0x59, 0x7e, 0xfc, 0x48, 0xd3, 0xac, 0xbf,
+    0xc1, 0x2e, 0xfd, 0x1d, 0x6e, 0xac, 0xbc, 0x61, 0x86, 0x24, 0xbd, 0x85,
+    0xda, 0x41, 0x66, 0x82, 0xff, 0xd9, 0x3e, 0x0d, 0xe4, 0x51, 0x3a, 0xca,
+    0x84, 0x76, 0xb1, 0x48, 0x16, 0x08, 0xba, 0xff, 0xf6, 0x6b, 0xff, 0xce,
+    0x14, 0x66, 0xa4, 0xb2, 0xfc, 0xde, 0xf6, 0x7d, 0x65, 0xa3, 0x61, 0xf7,
+    0xf1, 0x22, 0xfb, 0xce, 0x46, 0xac, 0xa1, 0x9e, 0x5f, 0xca, 0x6f, 0xee,
+    0xa5, 0xc2, 0x7e, 0xd6, 0x5f, 0x3e, 0xe7, 0xf8, 0xb2, 0xf1, 0x0a, 0xa1,
+    0x42, 0xca, 0xc3, 0xfa, 0xe8, 0xbd, 0xc9, 0x6e, 0x15, 0x42, 0xa9, 0x65,
+    0xfa, 0x5d, 0xe7, 0x5f, 0x59, 0x7e, 0xcf, 0xfc, 0x33, 0xac, 0xbf, 0xf3,
+    0x4f, 0xe6, 0x79, 0x7d, 0xa7, 0x59, 0x69, 0x0a, 0xa4, 0x5a, 0xc8, 0x8c,
+    0x8a, 0xbe, 0x53, 0x7e, 0xe6, 0x0d, 0xfc, 0xb2, 0xf8, 0x7e, 0xce, 0xd6,
+    0x5e, 0x7d, 0xc8, 0x59, 0x7e, 0xc1, 0xf9, 0xf7, 0x16, 0x5f, 0x8b, 0x07,
+    0x07, 0x59, 0x5b, 0x42, 0xfe, 0xdc, 0x46, 0xbf, 0x3a, 0xf0, 0xd8, 0xf1,
+    0xe4, 0xd2, 0xfe, 0x9c, 0xe6, 0x23, 0xd4, 0x61, 0x47, 0x87, 0xa7, 0xa1,
+    0x38, 0xf0, 0xe3, 0x02, 0x41, 0x13, 0x84, 0x8f, 0x78, 0xf1, 0x85, 0x57,
+    0xf1, 0xf1, 0xb5, 0x34, 0x96, 0x5f, 0xff, 0x1a, 0x23, 0x97, 0x9e, 0x5c,
+    0xc3, 0xc6, 0xe2, 0xca, 0x84, 0x40, 0xb1, 0x75, 0xf4, 0x7c, 0x22, 0x2c,
+    0xbd, 0xf6, 0x85, 0x97, 0x61, 0x2c, 0xa6, 0x36, 0x01, 0x1b, 0xbf, 0x14,
+    0x75, 0x1c, 0x59, 0x7f, 0xec, 0x62, 0x7f, 0xf0, 0xc8, 0x25, 0x97, 0xbc,
+    0xfa, 0x83, 0xe3, 0xe1, 0x3d, 0xf3, 0x6a, 0x3e, 0xb2, 0xfb, 0x99, 0x12,
+    0x59, 0x43, 0x3c, 0x22, 0x21, 0xbd, 0xec, 0xe9, 0x65, 0xf8, 0x7a, 0x68,
+    0x3a, 0xcb, 0x44, 0x8f, 0x10, 0x87, 0x6f, 0xa4, 0xd1, 0xda, 0xcb, 0xba,
+    0x02, 0xcb, 0xf8, 0xf1, 0xc0, 0x37, 0x6b, 0x2f, 0x72, 0x0d, 0x01, 0xe3,
+    0x70, 0x62, 0xfe, 0x2c, 0xdd, 0x68, 0x99, 0x65, 0xfd, 0x9a, 0x00, 0x18,
+    0x96, 0x53, 0x9e, 0xd8, 0x4b, 0xef, 0xe2, 0xfb, 0x4e, 0x50, 0xb2, 0xdc,
+    0x59, 0x76, 0xd1, 0x3a, 0xca, 0x83, 0xda, 0x91, 0x63, 0x88, 0xdf, 0xe6,
+    0x1e, 0xb0, 0x6e, 0x75, 0x97, 0xd3, 0x72, 0x38, 0xb2, 0xd8, 0x73, 0xd5,
+    0x01, 0x95, 0xf6, 0x1c, 0x41, 0xac, 0xbf, 0x1b, 0x34, 0x17, 0xd6, 0x57,
+    0x8f, 0xcc, 0x89, 0xc2, 0x47, 0x7f, 0xff, 0xdb, 0xe0, 0x6c, 0x4f, 0xa3,
+    0x49, 0xd8, 0xb0, 0x01, 0xe2, 0xcb, 0xff, 0x78, 0x4e, 0x66, 0xbb, 0x77,
+    0xed, 0x51, 0x06, 0x2f, 0xfe, 0x9e, 0x0d, 0xcd, 0x7f, 0xf1, 0x9c, 0x59,
+    0x43, 0x44, 0x99, 0x27, 0x54, 0x26, 0x34, 0xd0, 0xf8, 0xbf, 0xf7, 0x82,
+    0xe6, 0xe7, 0xff, 0x9e, 0x59, 0x7f, 0xb7, 0xc1, 0x60, 0x98, 0x75, 0x97,
+    0xfb, 0xd0, 0x5f, 0x03, 0xfd, 0x65, 0xff, 0xe9, 0x6a, 0x25, 0xdf, 0x9b,
+    0xc4, 0xe7, 0x59, 0x5c, 0x3f, 0xc0, 0x99, 0x5f, 0xff, 0xc7, 0x82, 0xed,
+    0xc8, 0x18, 0x3e, 0x10, 0x5e, 0x4b, 0x2f, 0xfb, 0xb6, 0x39, 0xdb, 0x67,
+    0x02, 0xb2, 0xff, 0xdc, 0x03, 0xf5, 0xc1, 0x35, 0xe7, 0x59, 0x7f, 0x3f,
+    0xb0, 0x8f, 0x8b, 0x2f, 0x83, 0xec, 0xed, 0x65, 0x49, 0x52, 0xe0, 0xc9,
+    0xd8, 0xff, 0x50, 0xb0, 0x39, 0x11, 0x2c, 0xfc, 0xf3, 0x7a, 0x0e, 0xd9,
+    0x5d, 0xff, 0xdf, 0xe4, 0xf0, 0x21, 0x47, 0x9a, 0x75, 0x97, 0xfb, 0x91,
+    0xa9, 0x76, 0xd3, 0xac, 0xbe, 0xf3, 0x38, 0x16, 0x51, 0x22, 0x73, 0x88,
+    0xdf, 0x35, 0xbf, 0xff, 0xed, 0x69, 0xe5, 0xc1, 0xfb, 0x3b, 0xcd, 0x73,
+    0xaf, 0x88, 0x75, 0x97, 0xf0, 0x4d, 0x2c, 0x9c, 0x2b, 0x2a, 0x11, 0x93,
+    0x85, 0xfe, 0x6b, 0xbf, 0xff, 0x17, 0xc3, 0xe1, 0x3e, 0xc4, 0xfd, 0x7c,
+    0x30, 0xb2, 0xf7, 0x83, 0xb8, 0xb2, 0xff, 0xcc, 0x5f, 0xe3, 0x0c, 0x1d,
+    0x01, 0x65, 0xff, 0xcf, 0xbf, 0x0b, 0xbf, 0x30, 0x04, 0xfa, 0xca, 0x9d,
+    0x10, 0xda, 0x3f, 0xa8, 0x56, 0x77, 0x28, 0xfb, 0x58, 0xb8, 0x56, 0xac,
+    0x18, 0x53, 0x5e, 0xc2, 0x35, 0x65, 0xfe, 0x71, 0xfb, 0x33, 0xaf, 0xac,
+    0xac, 0x3c, 0xf3, 0x47, 0x2b, 0xa6, 0x4d, 0x47, 0xa1, 0x1e, 0x4f, 0x7c,
+    0x87, 0xaf, 0xe7, 0xb7, 0xf7, 0x61, 0x51, 0x78, 0xa0, 0xc5, 0x97, 0xcd,
+    0xdb, 0x0d, 0x65, 0x61, 0xbe, 0xf8, 0xe5, 0xff, 0xee, 0xbf, 0x0c, 0x5f,
+    0xd4, 0x7d, 0xfe, 0xb2, 0xfa, 0x3e, 0xd3, 0x2c, 0xbf, 0x82, 0xe2, 0x05,
+    0xc4, 0x59, 0x53, 0x1e, 0x8e, 0x88, 0xae, 0xdf, 0x8b, 0x2b, 0x0d, 0xdb,
+    0x91, 0xdf, 0xfc, 0xf2, 0xd9, 0x9f, 0xcf, 0x46, 0x80, 0xb2, 0xe0, 0x01,
+    0x65, 0xff, 0x77, 0xe6, 0xd1, 0x37, 0xf8, 0xb2, 0xa4, 0x89, 0x53, 0xa2,
+    0x80, 0x5e, 0xff, 0x01, 0xbd, 0xec, 0x03, 0xac, 0xbf, 0xdc, 0x6c, 0x2c,
+    0xe8, 0xc5, 0x97, 0xff, 0xfb, 0x3f, 0xf7, 0xd1, 0x47, 0x52, 0x13, 0x40,
+    0x3b, 0x71, 0x65, 0x6e, 0x22, 0x54, 0xe6, 0x77, 0xe0, 0xf5, 0xde, 0x1d,
+    0x65, 0xfe, 0x63, 0x30, 0x87, 0xe8, 0x59, 0x7c, 0xfd, 0x10, 0xd6, 0x51,
+    0xcf, 0x50, 0x06, 0x57, 0xff, 0xa3, 0xfc, 0x0f, 0x7b, 0x3c, 0xe5, 0x10,
+    0xb2, 0xef, 0x05, 0x65, 0xff, 0xfa, 0x4c, 0x43, 0xf6, 0x74, 0x23, 0x97,
+    0xc8, 0x6b, 0x2f, 0xff, 0xe6, 0x33, 0xcf, 0xdc, 0x10, 0xf3, 0xaf, 0xf9,
+    0xc6, 0xb2, 0xff, 0xa7, 0xfc, 0xb3, 0x71, 0xc8, 0x0b, 0x2f, 0xf9, 0xf7,
+    0x3c, 0x26, 0xa5, 0x1b, 0x8b, 0x2f, 0xa6, 0xf3, 0xfd, 0x65, 0x62, 0x27,
+    0xfa, 0x3c, 0x64, 0x0b, 0xfd, 0x83, 0xf6, 0x75, 0x9c, 0x59, 0x79, 0x8c,
+    0xdc, 0x59, 0x7f, 0xb3, 0x7f, 0x3f, 0xf8, 0x3a, 0xca, 0xd1, 0xea, 0xf8,
+    0x82, 0xa1, 0x5a, 0x88, 0xc9, 0xb1, 0xf8, 0xd2, 0x26, 0x4b, 0x98, 0x5f,
+    0x4a, 0xbe, 0x87, 0xd9, 0x17, 0xf2, 0x11, 0x17, 0xfe, 0x93, 0x14, 0x84,
+    0xf7, 0xa0, 0x6b, 0x2e, 0x31, 0x96, 0x5f, 0x8f, 0xde, 0x17, 0x6b, 0x2a,
+    0x0f, 0x01, 0x85, 0xef, 0xfb, 0x06, 0x6b, 0xcd, 0xe8, 0x9d, 0x65, 0xf8,
+    0x3f, 0x9f, 0x86, 0xac, 0xbf, 0xf9, 0xe7, 0xe3, 0x8e, 0x27, 0x89, 0x42,
+    0xcb, 0xfb, 0x39, 0xb7, 0x9a, 0x85, 0x95, 0xd2, 0x6f, 0x1a, 0x7f, 0xf1,
+    0x01, 0x1d, 0xf0, 0xaf, 0x6d, 0x12, 0xf9, 0xa0, 0xa6, 0x59, 0x53, 0xb6,
+    0xa2, 0x52, 0x53, 0x1c, 0x20, 0xf1, 0xd3, 0xb6, 0x5e, 0x89, 0x9a, 0x94,
+    0x21, 0x34, 0x2c, 0xf4, 0x40, 0x78, 0x6a, 0xbc, 0x2d, 0x00, 0x61, 0xc9,
+    0xc1, 0x8f, 0xca, 0x0d, 0x31, 0x6e, 0xff, 0x73, 0x98, 0x40, 0xdb, 0xc5,
+    0x97, 0xc4, 0xdb, 0xb0, 0xb2, 0xe0, 0x42, 0xcb, 0xc5, 0x9c, 0x59, 0x44,
+    0x6c, 0x44, 0x16, 0xb4, 0xcb, 0x2f, 0xee, 0x61, 0x03, 0x6f, 0x16, 0x56,
+    0xc4, 0x75, 0xe1, 0xab, 0xaa, 0x00, 0x87, 0x82, 0x57, 0xdf, 0x77, 0x25,
+    0x95, 0xbc, 0xfa, 0x8c, 0x4a, 0xbf, 0xc0, 0x70, 0x46, 0xe4, 0x49, 0x65,
+    0xff, 0xd2, 0x6c, 0xf3, 0xfb, 0xd1, 0xd7, 0x16, 0x5f, 0xef, 0x60, 0xca,
+    0x30, 0x96, 0x54, 0x91, 0x53, 0xd1, 0xa8, 0x11, 0x2f, 0x0f, 0x09, 0x65,
+    0xf8, 0x27, 0x8c, 0xfa, 0xcb, 0xec, 0x04, 0x01, 0x65, 0x00, 0xf2, 0x08,
+    0x9e, 0xa7, 0x44, 0x27, 0xd8, 0xe9, 0xd1, 0xb2, 0x18, 0x5a, 0xdf, 0xfe,
+    0x29, 0xf6, 0x4c, 0xc5, 0x83, 0xc2, 0x35, 0x65, 0xff, 0x04, 0x22, 0x13,
+    0x6c, 0x07, 0xd6, 0x5f, 0xfb, 0x37, 0xc7, 0x5b, 0x71, 0xac, 0x25, 0x97,
+    0xf3, 0x75, 0xbb, 0xe8, 0xfa, 0xcb, 0xf0, 0x78, 0xcd, 0xd2, 0xcb, 0xf1,
+    0x67, 0xfc, 0xcb, 0x2f, 0x09, 0x90, 0xb2, 0xe0, 0x9a, 0xb2, 0xfd, 0x04,
+    0x41, 0x3a, 0xca, 0xf1, 0xbe, 0x10, 0x62, 0xf7, 0xe0, 0x45, 0x97, 0xfb,
+    0x07, 0xa7, 0xef, 0xe0, 0x59, 0x7e, 0xc2, 0x1f, 0xa1, 0x65, 0x61, 0xfb,
+    0xf8, 0x74, 0xc3, 0x4b, 0xd2, 0xce, 0x2c, 0xa8, 0x55, 0x0f, 0x3a, 0x61,
+    0xa7, 0x9b, 0x88, 0x53, 0x18, 0xe8, 0xa1, 0xc9, 0x89, 0x6b, 0x90, 0x99,
+    0xf9, 0x7d, 0xf0, 0xf4, 0xf2, 0x59, 0x7f, 0xff, 0xb0, 0x9f, 0xfc, 0xcd,
+    0x00, 0x11, 0x9d, 0x7f, 0x8c, 0xb2, 0xe9, 0x42, 0xcb, 0x6d, 0xac, 0xad,
+    0x86, 0xab, 0x05, 0xa8, 0x68, 0xab, 0xfc, 0x22, 0x6a, 0x11, 0xea, 0xf0,
+    0xcd, 0xbd, 0x1a, 0x99, 0x65, 0xe1, 0xc1, 0x2c, 0xad, 0x8f, 0x83, 0xdf,
+    0xb5, 0xa0, 0x45, 0x2d, 0xf6, 0x78, 0xd5, 0x87, 0x0a, 0xdc, 0xa4, 0x42,
+    0xf7, 0x2d, 0x7f, 0xa8, 0x7a, 0x35, 0x20, 0x1b, 0xd1, 0xc6, 0xbd, 0x6a,
+    0x66, 0x09, 0x4a, 0x85, 0x1d, 0x38, 0x65, 0x57, 0x19, 0x1c, 0x56, 0xd9,
+    0x30, 0x83, 0xb7, 0xba, 0x9f, 0x7a, 0xcb, 0xfd, 0xdf, 0x9c, 0xa0, 0x3d,
+    0x2c, 0xbf, 0x77, 0xe8, 0xeb, 0x75, 0x65, 0xc1, 0x15, 0xac, 0xbf, 0x79,
+    0xf4, 0x76, 0x59, 0x78, 0x48, 0xdc, 0x59, 0x7f, 0x09, 0xdf, 0xa3, 0xad,
+    0xd5, 0x95, 0xb1, 0x18, 0x72, 0x2d, 0xec, 0x6f, 0x84, 0xe1, 0x20, 0xbc,
+    0xc5, 0x8b, 0x2f, 0xef, 0x30, 0xaf, 0xd1, 0x3a, 0xcb, 0x0e, 0x47, 0x99,
+    0xd8, 0xd5, 0xc0, 0x31, 0x65, 0xfd, 0xe8, 0x6d, 0xc3, 0xb2, 0xca, 0xd8,
+    0x78, 0xfd, 0x8c, 0x50, 0xd5, 0x12, 0xf5, 0x0f, 0x76, 0x84, 0xcf, 0xdc,
+    0x2f, 0xec, 0x33, 0x30, 0x8d, 0x59, 0x73, 0x4e, 0xb2, 0xe8, 0x11, 0x65,
+    0xe7, 0xce, 0x2c, 0xbf, 0x3c, 0xec, 0x19, 0x2c, 0xbc, 0x00, 0x42, 0xca,
+    0x91, 0xfb, 0x1c, 0x5f, 0xc3, 0x64, 0x51, 0x7b, 0x08, 0xd5, 0x94, 0xc9,
+    0x88, 0x9c, 0xb5, 0xe1, 0x1b, 0xba, 0x77, 0x7f, 0xee, 0x6a, 0x3e, 0x4e,
+    0x73, 0xb2, 0xcb, 0xff, 0xd1, 0xce, 0x41, 0xf3, 0xed, 0xcf, 0x3a, 0xcb,
+    0xcc, 0x5f, 0x59, 0x5d, 0x9f, 0x1f, 0x92, 0x2f, 0xfd, 0xe6, 0xf4, 0x66,
+    0xa5, 0xa9, 0x2c, 0xbf, 0xf8, 0xf1, 0xfe, 0x3e, 0x68, 0x07, 0xc5, 0x97,
+    0xf1, 0x44, 0x8f, 0x0c, 0xb2, 0x80, 0x7d, 0xc4, 0x87, 0x7e, 0xf4, 0x4f,
+    0x1e, 0x59, 0x7e, 0xd3, 0x9e, 0x3b, 0x59, 0x7e, 0xcd, 0xe5, 0x9c, 0x59,
+    0x7f, 0xbe, 0xdb, 0xdb, 0xf2, 0x84, 0x96, 0x3a, 0xcb, 0xfb, 0x08, 0xdd,
+    0x40, 0xb6, 0x3c, 0x51, 0x0d, 0x2e, 0xc3, 0x56, 0x56, 0xc5, 0x55, 0x59,
+    0x0a, 0x0e, 0xc8, 0xda, 0x15, 0x93, 0x10, 0xb9, 0x41, 0x14, 0x71, 0xb7,
+    0x6d, 0x1a, 0xff, 0xf3, 0xef, 0x8c, 0x1b, 0xcb, 0x3c, 0xc6, 0x2c, 0xbc,
+    0x1e, 0xa4, 0xb2, 0xf6, 0x9f, 0x7a, 0xcb, 0xf0, 0xf5, 0xac, 0xe2, 0xca,
+    0x91, 0xe3, 0x38, 0xf5, 0x49, 0x19, 0xfa, 0x4a, 0x26, 0x4b, 0xfc, 0x52,
+    0x2c, 0x3c, 0x76, 0xb2, 0xf4, 0xcf, 0xf5, 0x97, 0x8a, 0x0e, 0xb2, 0xa0,
+    0xdc, 0x4c, 0x3b, 0x7e, 0x6f, 0x14, 0x49, 0x65, 0xf6, 0x9d, 0xa7, 0x59,
+    0x77, 0x19, 0x65, 0x31, 0xb8, 0x72, 0x2b, 0x62, 0xcb, 0xd9, 0x86, 0xac,
+    0xb1, 0xc6, 0x6b, 0x37, 0x44, 0x2f, 0xfd, 0xc1, 0x35, 0xf9, 0x31, 0x7f,
+    0x8b, 0x2a, 0x13, 0xcd, 0xc2, 0xf6, 0x6a, 0xd1, 0x0f, 0x97, 0x9d, 0x2c,
+    0x25, 0x57, 0xfc, 0xdb, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0xc3, 0x57, 0xb6,
+    0xc3, 0xf5, 0x97, 0x36, 0xf5, 0x97, 0xfe, 0xef, 0xd0, 0x4f, 0xfe, 0x64,
+    0xeb, 0x2f, 0x69, 0xc4, 0x59, 0x58, 0x7b, 0x8e, 0x7f, 0x76, 0x1a, 0xb2,
+    0xff, 0xe8, 0x3b, 0x0f, 0x08, 0xdf, 0x41, 0xd6, 0x57, 0x8f, 0x6b, 0xe2,
+    0xf7, 0xd8, 0x78, 0x11, 0x65, 0x0d, 0x39, 0xae, 0xd2, 0x0e, 0x41, 0xc7,
+    0x4f, 0xbd, 0x6f, 0x22, 0xb8, 0x4f, 0x2c, 0xbf, 0x13, 0x98, 0x21, 0xd6,
+    0x5f, 0x3f, 0x5f, 0xc5, 0x96, 0x69, 0x8f, 0x2f, 0x85, 0x34, 0x6a, 0x22,
+    0xfc, 0xc7, 0x7f, 0xfc, 0xdf, 0xf4, 0x72, 0x3d, 0x0d, 0x3c, 0x1a, 0xb2,
+    0xff, 0x7a, 0x26, 0x93, 0x6a, 0x4b, 0x2f, 0xc5, 0x31, 0x41, 0xd6, 0x5f,
+    0xef, 0xb1, 0x93, 0x13, 0x98, 0xb2, 0xef, 0x32, 0xcb, 0xfe, 0xcd, 0xf0,
+    0x3f, 0x63, 0x7d, 0x65, 0xee, 0x38, 0x16, 0x51, 0x1e, 0xaf, 0xce, 0x6b,
+    0x71, 0x11, 0x9f, 0x6b, 0xbf, 0x82, 0x20, 0x01, 0x1d, 0x2c, 0xbe, 0x3f,
+    0xf3, 0xb5, 0x97, 0xd3, 0xc7, 0x50, 0xb2, 0xa0, 0xf1, 0x98, 0x8e, 0xe3,
+    0x3e, 0xb2, 0xfd, 0x12, 0x01, 0x62, 0xcb, 0x9a, 0x75, 0x95, 0x0a, 0x9f,
+    0x06, 0x9f, 0x86, 0x9d, 0x13, 0xb4, 0x30, 0x66, 0x26, 0xf3, 0xb3, 0x90,
+    0x10, 0xc7, 0xc9, 0xaf, 0xcf, 0xfd, 0x46, 0xf5, 0x97, 0xd1, 0xd0, 0x77,
+    0x16, 0x5f, 0xff, 0xbb, 0x0f, 0x8d, 0x62, 0x8f, 0x41, 0x90, 0x58, 0xb2,
+    0xa6, 0x3f, 0xb2, 0x26, 0xbe, 0x61, 0xee, 0xb2, 0xca, 0x84, 0x75, 0x3c,
+    0x29, 0x0c, 0x22, 0xbf, 0xef, 0x44, 0x98, 0xb0, 0xf0, 0xb2, 0xf9, 0xc7,
+    0x29, 0xd6, 0x5f, 0xf6, 0x7f, 0xd8, 0x72, 0x7f, 0xac, 0xbf, 0xb7, 0xb6,
+    0xba, 0x8d, 0xc5, 0x94, 0x33, 0xea, 0xc3, 0x7a, 0xf2, 0x2b, 0x8a, 0x11,
+    0xb7, 0x10, 0x16, 0x5f, 0x8f, 0x1d, 0xce, 0x35, 0x97, 0xd2, 0x83, 0xba,
+    0xcb, 0xf6, 0x80, 0x76, 0xe2, 0xcb, 0xbf, 0xc1, 0x4a, 0x22, 0x70, 0x59,
+    0xca, 0x84, 0x21, 0xa8, 0x47, 0xe0, 0x61, 0x61, 0x6e, 0x2c, 0xbf, 0xa2,
+    0x7c, 0x26, 0x35, 0x65, 0x68, 0xdf, 0x70, 0x46, 0xff, 0xc4, 0xfe, 0x80,
+    0x0b, 0xd7, 0x38, 0x92, 0xf7, 0xb0, 0x6b, 0x2a, 0x0f, 0x71, 0x90, 0x2f,
+    0xa3, 0xf2, 0x75, 0x97, 0xf0, 0x04, 0x29, 0x7b, 0x16, 0x5d, 0x3c, 0xeb,
+    0x2f, 0x67, 0x70, 0xb2, 0xa7, 0x56, 0xcc, 0x38, 0xf8, 0x31, 0x94, 0xef,
+    0xbe, 0x20, 0xf9, 0x08, 0x4b, 0xb7, 0x8c, 0xde, 0x3c, 0x76, 0xb2, 0xfc,
+    0xf3, 0x36, 0x71, 0x65, 0xf7, 0x23, 0x52, 0x59, 0x61, 0xec, 0x3c, 0x9e,
+    0x13, 0xd4, 0x22, 0x41, 0xd9, 0xaf, 0xf8, 0x87, 0xe8, 0xff, 0xe0, 0xeb,
+    0x2e, 0x0c, 0xeb, 0x2f, 0xa0, 0x4d, 0xd1, 0xac, 0xbe, 0xe3, 0x7e, 0x16,
+    0x5d, 0xd4, 0xa7, 0x3c, 0x7e, 0x89, 0xaf, 0x37, 0x5c, 0x59, 0x58, 0x79,
+    0xcc, 0x63, 0x58, 0x98, 0x2b, 0x1c, 0x7a, 0x15, 0xb7, 0x67, 0x6b, 0x2d,
+    0xc5, 0x9f, 0x2d, 0xef, 0xc3, 0x83, 0xb8, 0xd6, 0x56, 0x1e, 0x3b, 0x10,
+    0x5e, 0xfe, 0x79, 0x65, 0xf4, 0xff, 0x63, 0x56, 0x56, 0x8f, 0x80, 0x24,
+    0x02, 0x0e, 0x5f, 0xfe, 0xd8, 0xed, 0x9c, 0x89, 0xf0, 0x98, 0xd5, 0x97,
+    0x6f, 0x85, 0x94, 0x33, 0xe2, 0x3a, 0x55, 0xfe, 0xd1, 0xe3, 0xaf, 0xbf,
+    0x6b, 0x2f, 0xff, 0xe2, 0xcf, 0xfb, 0x25, 0x9d, 0xc7, 0x7f, 0x27, 0x3a,
+    0xca, 0xc4, 0x58, 0xb1, 0x17, 0x0d, 0x6f, 0xf9, 0xa4, 0xdc, 0xea, 0x4c,
+    0x4b, 0x2f, 0xf0, 0x1a, 0x5a, 0xd3, 0x18, 0xb2, 0xb4, 0x7d, 0x84, 0x71,
+    0x7c, 0xc7, 0x89, 0x96, 0x5f, 0xfd, 0xc6, 0xe8, 0xb2, 0x6d, 0x47, 0xf8,
+    0xb2, 0xfb, 0x27, 0x0c, 0x96, 0x5f, 0x36, 0xa2, 0x75, 0x94, 0xc8, 0xcd,
+    0x98, 0x84, 0x04, 0x46, 0x22, 0x88, 0x47, 0x7f, 0x4d, 0xcf, 0x66, 0xfe,
+    0x2c, 0xbd, 0x3b, 0x9d, 0x65, 0xee, 0x44, 0xa0, 0xf3, 0x9c, 0xc6, 0xf9,
+    0xf4, 0xfd, 0x2c, 0xbf, 0x81, 0x3b, 0xca, 0x37, 0x16, 0x5f, 0xb6, 0x44,
+    0xd0, 0x62, 0xcb, 0xc3, 0x1c, 0x2c, 0xb9, 0x89, 0x65, 0x1a, 0x8a, 0xfe,
+    0x88, 0x8e, 0x62, 0x12, 0xb1, 0x07, 0x2a, 0x13, 0xc7, 0x68, 0x4d, 0x3c,
+    0x38, 0x2f, 0xb5, 0x18, 0x75, 0x97, 0x61, 0x8b, 0x29, 0x38, 0x86, 0x17,
+    0xf7, 0x04, 0x8d, 0x41, 0xd3, 0x88, 0x61, 0x49, 0xc4, 0x30, 0xa4, 0xe2,
+    0x18, 0x52, 0x71, 0x0c, 0x29, 0x38, 0x86, 0x15, 0x24, 0x5c, 0xb0, 0xc8,
+    0x0f, 0x02, 0x33, 0xb6, 0x33, 0xba, 0x33, 0x77, 0xb1, 0x38, 0x86, 0x17,
+    0xf3, 0xbf, 0xe6, 0x83, 0xa7, 0x10, 0xc3, 0x61, 0xa4, 0xb0, 0xad, 0x38,
+    0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e, 0x21, 0x85, 0x48, 0xd9, 0x30, 0xcd,
+    0x27, 0x10, 0xc2, 0x93, 0x88, 0x61, 0x49, 0xc4, 0x30, 0xa4, 0xe2, 0x18,
+    0x52, 0x71, 0x0c, 0x29, 0x38, 0x86, 0x15, 0x3a, 0x25, 0x86, 0x32, 0xc3,
+    0x20, 0x19, 0xe0, 0xce, 0xf1, 0x9a, 0x4e, 0x21, 0x85, 0x27, 0x10, 0xc2,
+    0xa4, 0x6c, 0xb8, 0x33, 0x49, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71,
+    0x0c, 0x29, 0x38, 0x86, 0x15, 0x23, 0xe4, 0x00, 0xcf, 0xc6, 0x77, 0x46,
+    0x69, 0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e, 0x21, 0x85, 0x27, 0x10,
+    0xc2, 0xa7, 0x3e, 0x43, 0x46, 0x74, 0x33, 0xe1, 0x9b, 0x1a, 0x9c, 0x43,
+    0x0a, 0x4e, 0x21, 0x85, 0x27, 0x10, 0xc2, 0x93, 0x88, 0x61, 0x49, 0xc4,
+    0x30, 0xa1, 0x9f, 0x27, 0x43, 0x20, 0x19, 0x08, 0xcd, 0x27, 0x10, 0xc2,
+    0x93, 0x88, 0x61, 0x49, 0xc4, 0x30, 0xbf, 0x7a, 0x01, 0xcc, 0x4e, 0x21,
+    0x85, 0x27, 0x10, 0xc2, 0xa4, 0x89, 0x9e, 0xc6, 0x7c, 0x32, 0xe3, 0x20,
+    0x35, 0xb7, 0x69, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29,
+    0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x91, 0xf2, 0x74, 0x32, 0xc3, 0x3b,
+    0xc6, 0x69, 0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e, 0x21, 0x85, 0x27,
+    0x10, 0xc2, 0xa4, 0x7c, 0x83, 0x19, 0xf0, 0xc9, 0x0c, 0xdb, 0xc9, 0xc4,
+    0x30, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x2d, 0x24, 0xe2, 0x18, 0x52,
+    0x71, 0x0c, 0x3a, 0x2f, 0xe9, 0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e,
+    0x21, 0x85, 0x27, 0x10, 0xc2, 0xa7, 0x46, 0xf4, 0x86, 0x4d, 0x38, 0xec,
+    0xa6, 0x61, 0x90, 0x0c, 0xfc, 0x66, 0xd8, 0x9c, 0x43, 0x0a, 0x4e, 0x21,
+    0x85, 0x27, 0x10, 0xc2, 0xd2, 0x4e, 0x21, 0x85, 0x27, 0x10, 0xc3, 0xa2,
+    0xfe, 0x93, 0x88, 0x61, 0x49, 0xc4, 0x30, 0xa8, 0x45, 0x64, 0x86, 0x58,
+    0xe3, 0x45, 0x27, 0x19, 0xa4, 0xe2, 0x18, 0x52, 0x71, 0x0c, 0x29, 0x38,
+    0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e, 0x21, 0x85, 0x41, 0xfe, 0xf4, 0x33,
+    0xa1, 0x93, 0x8c, 0x90, 0xcd, 0x27, 0x10, 0xc2, 0x93, 0x88, 0x61, 0x49,
+    0xc4, 0x30, 0xad, 0x1e, 0x5f, 0x06, 0x7e, 0x33, 0x49, 0xc4, 0x30, 0xa4,
+    0xe2, 0x18, 0x52, 0x71, 0x0c, 0x28, 0xe7, 0x96, 0x43, 0x3f, 0x19, 0xb1,
+    0xd3, 0x88, 0x61, 0x49, 0xc4, 0x30, 0xa4, 0xe2, 0x18, 0x50, 0x0d, 0x90,
+    0x46, 0x69, 0x38, 0x86, 0x14, 0x9c, 0x43, 0x0a, 0x4e, 0x21, 0x85, 0x27,
+    0x10, 0xc2, 0xa0, 0xf9, 0x26, 0x19, 0xf0, 0xc8, 0x46, 0x6a, 0x19, 0x81,
+    0xf3, 0xc2, 0x02, 0x49, 0xa3, 0x55, 0xc8, 0x5b, 0x77, 0x08, 0xbe, 0xa1,
+    0x0a, 0xd0, 0xa3, 0xdc, 0x3e, 0x9a, 0x10, 0x9a, 0x86, 0xb1, 0xd2, 0xbd,
+    0x08, 0x47, 0x85, 0x10, 0x0e, 0xca, 0x1f, 0xbc, 0x68, 0xfc, 0x32, 0x83,
+    0x0c, 0x5d, 0xf0, 0x93, 0x31, 0xeb, 0x6c, 0xb8, 0x45, 0x1d, 0xd8, 0x42,
+    0xdf, 0xa4, 0x51, 0x9c, 0x4e, 0x21, 0x80, 0xb4, 0xe5, 0xef, 0x34, 0x1d,
+    0x38, 0x86, 0x17, 0xcd, 0xdb, 0xe9, 0x78, 0x86, 0x2f, 0x30, 0xf1, 0x78,
+    0x86, 0x2c, 0x2f, 0xa4, 0x64, 0xe9, 0x27, 0xc5, 0x3f, 0x2f, 0xb4, 0x6f,
+    0x67, 0xc2, 0x89, 0x4f, 0x3f, 0xbc, 0xc5, 0x3a, 0xcb, 0xf9, 0x8c, 0x1e,
+    0xa2, 0x75, 0x95, 0x23, 0xcb, 0xf0, 0xe5, 0xdb, 0xe1, 0x65, 0xcf, 0xd2,
+    0xcb, 0xe9, 0x37, 0x82, 0xb2, 0xfa, 0x36, 0xe3, 0xeb, 0x2f, 0x36, 0xf1,
+    0x5a, 0xcb, 0x9b, 0x75, 0x65, 0x76, 0xd8, 0x7d, 0xf5, 0x4f, 0xa6, 0x9a,
+    0x10, 0x67, 0x22, 0xf0, 0xc3, 0x8b, 0x91, 0x17, 0xc9, 0x37, 0x48, 0xaf,
+    0x78, 0x72, 0x59, 0x7a, 0x67, 0x11, 0x65, 0x0c, 0xdd, 0xe0, 0xed, 0xf9,
+    0x88, 0x2f, 0xf5, 0x97, 0xff, 0xfe, 0xcc, 0x20, 0xfd, 0xbc, 0x41, 0x34,
+    0xb3, 0xaf, 0xc6, 0x69, 0x65, 0x62, 0x2c, 0x38, 0x41, 0xb6, 0x4d, 0x7b,
+    0xc1, 0xed, 0x65, 0xf7, 0xb3, 0x7e, 0x2c, 0xaf, 0x1e, 0x0f, 0xc7, 0xaf,
+    0x00, 0x3c, 0x59, 0x7f, 0x9c, 0x84, 0x9a, 0x4c, 0x4b, 0x2e, 0x04, 0x2c,
+    0xbf, 0xb4, 0xe4, 0x24, 0x01, 0x65, 0xcf, 0xa5, 0x96, 0x65, 0x9d, 0x96,
+    0xd6, 0xed, 0x65, 0x8e, 0xb2, 0xc2, 0xd9, 0x13, 0x9a, 0x16, 0xf2, 0x1b,
+    0x90, 0x08, 0x25, 0x7f, 0x75, 0x2f, 0x41, 0x4e, 0xb2, 0x8e, 0x9a, 0x7e,
+    0xdc, 0x33, 0xf7, 0x54, 0x6f, 0xff, 0xfd, 0x92, 0xf4, 0x79, 0x8d, 0x76,
+    0x28, 0xf3, 0xb4, 0x98, 0x6b, 0x2e, 0x96, 0x2c, 0xbf, 0x88, 0x3f, 0xf6,
+    0x6f, 0x59, 0x7b, 0x4d, 0x3a, 0xcb, 0xfd, 0x07, 0xc9, 0xa0, 0xa7, 0x59,
+    0x4b, 0x2e, 0x1e, 0xf5, 0x95, 0x88, 0xa3, 0xd1, 0x7f, 0x87, 0x40, 0x66,
+    0x41, 0x77, 0xec, 0x3f, 0xa0, 0x0b, 0x2f, 0xfe, 0xd8, 0xfd, 0x8f, 0xd0,
+    0x0c, 0x20, 0x2c, 0xb8, 0x10, 0xb2, 0xb0, 0xf7, 0x00, 0x8d, 0x50, 0xaf,
+    0x5e, 0x44, 0x59, 0x1b, 0x63, 0x1e, 0x4c, 0xd0, 0x08, 0x5c, 0xfd, 0x20,
+    0x30, 0x83, 0xbe, 0x89, 0x72, 0x16, 0x5f, 0xfc, 0x45, 0x13, 0x96, 0x36,
+    0xf8, 0xdb, 0x59, 0x7a, 0x3a, 0xe2, 0xca, 0x3a, 0x21, 0x1c, 0x87, 0x88,
+    0xd7, 0x9f, 0x50, 0xb2, 0xfc, 0xdb, 0x6e, 0x40, 0x59, 0x7e, 0x6e, 0xb8,
+    0xfd, 0x2c, 0xa9, 0x1f, 0x69, 0xc6, 0xf8, 0x53, 0x7d, 0xbc, 0xf0, 0xcb,
+    0x2f, 0xd3, 0x31, 0xde, 0x65, 0x97, 0xfc, 0x23, 0x8f, 0x98, 0x78, 0xdc,
+    0x59, 0x7b, 0x3a, 0x31, 0x65, 0x68, 0xf6, 0x88, 0xf2, 0xff, 0x66, 0x14,
+    0x84, 0x21, 0xac, 0xb0, 0x30, 0xf4, 0xe6, 0x21, 0xbf, 0xfc, 0xdb, 0x81,
+    0x35, 0xba, 0xe6, 0x4d, 0x1f, 0x59, 0x6d, 0xc5, 0x95, 0xd2, 0x22, 0xce,
+    0x50, 0xe9, 0xf7, 0x06, 0x16, 0x5e, 0xcd, 0x49, 0x65, 0x0c, 0xd9, 0x6f,
+    0x16, 0xbc, 0x37, 0x25, 0x94, 0xc6, 0xf9, 0xc8, 0xef, 0xbb, 0x72, 0x35,
+    0x65, 0xff, 0xff, 0xb5, 0xfc, 0x28, 0xec, 0xa0, 0xfc, 0xe6, 0x4b, 0xcc,
+    0x40, 0x59, 0x50, 0x88, 0xd7, 0x23, 0xbf, 0xf9, 0xf5, 0xa7, 0x04, 0x0b,
+    0x30, 0xc3, 0x16, 0x5e, 0x93, 0x01, 0x65, 0xff, 0x8d, 0xce, 0xbe, 0xdf,
+    0xd0, 0x4e, 0xb2, 0xb6, 0x22, 0x99, 0xd2, 0x7e, 0x39, 0x74, 0x49, 0x65,
+    0x41, 0xe3, 0x80, 0xc6, 0xa1, 0x70, 0xbb, 0x0b, 0xd8, 0x8d, 0xe3, 0x61,
+    0xe4, 0x28, 0x3f, 0x0a, 0xc0, 0xc6, 0x1d, 0x7c, 0xe3, 0xcf, 0xac, 0xbf,
+    0xf8, 0xb1, 0xbd, 0x1d, 0x03, 0x3f, 0xc5, 0x97, 0xff, 0x04, 0x49, 0xb6,
+    0x40, 0x8f, 0xdc, 0x79, 0x65, 0xc4, 0x6a, 0xcb, 0xff, 0x80, 0xf2, 0xe6,
+    0x4b, 0xd0, 0x46, 0xac, 0xbf, 0x8f, 0xcc, 0x3c, 0x6e, 0x2c, 0xa8, 0x3f,
+    0x46, 0x44, 0xbf, 0xcc, 0x6f, 0x18, 0xba, 0x92, 0xcb, 0x46, 0x8f, 0x53,
+    0xc4, 0x14, 0xc9, 0x83, 0x6e, 0xc3, 0x7e, 0x85, 0x2e, 0xec, 0x0e, 0x25,
+    0x23, 0x4f, 0x1a, 0xd4, 0xa5, 0x77, 0x0e, 0x59, 0x4e, 0x47, 0xf6, 0x6c,
+    0x39, 0xbb, 0x95, 0x41, 0xd4, 0x6f, 0x2d, 0x2e, 0x6b, 0x72, 0x30, 0xb9,
+    0xa3, 0x26, 0xd4, 0x3c, 0x8f, 0x1a, 0x1f, 0xa5, 0x97, 0x3d, 0x62, 0x66,
+    0x08, 0xe0, 0x0a, 0x71, 0x2b, 0x91, 0x82, 0xfe, 0x73, 0x2b, 0x7b, 0xce,
+    0xd9, 0x08, 0x88, 0x7b, 0xb1, 0xa8, 0x5e, 0x04, 0xf8, 0xb2, 0xf1, 0xf9,
+    0xda, 0xcb, 0xc5, 0xdc, 0x2c, 0xbe, 0xcf, 0xbf, 0x4b, 0x2b, 0x61, 0xee,
+    0x30, 0xf6, 0x87, 0x2f, 0xfb, 0x86, 0xb9, 0x46, 0x4f, 0x0b, 0x2f, 0xa5,
+    0x9a, 0x85, 0x97, 0xf1, 0x8f, 0xad, 0x3f, 0x4b, 0x2f, 0xff, 0xdc, 0xd6,
+    0x9a, 0x6e, 0x6a, 0x3e, 0xdd, 0xb0, 0xd6, 0x51, 0xd3, 0x0f, 0x73, 0x00,
+    0x1c, 0x11, 0x09, 0x85, 0xf7, 0xbf, 0x1c, 0x59, 0x62, 0x59, 0x7e, 0x1e,
+    0x60, 0x38, 0xb2, 0xc0, 0xdb, 0x36, 0xe2, 0x08, 0x51, 0xcf, 0xf8, 0x94,
+    0xef, 0x4e, 0xc3, 0x59, 0x60, 0xac, 0xb0, 0x18, 0xd7, 0x10, 0xed, 0x85,
+    0x2b, 0x2f, 0xb4, 0xc4, 0x6a, 0xcb, 0xf0, 0x7b, 0xf3, 0x69, 0x65, 0xd8,
+    0x6a, 0xcb, 0x7e, 0x0f, 0x03, 0x85, 0x37, 0xf6, 0x77, 0xe8, 0xea, 0x4b,
+    0x2f, 0xe3, 0xf1, 0x8d, 0xf9, 0x8b, 0x2f, 0xd1, 0xd7, 0xa2, 0x4b, 0x28,
+    0x50, 0x99, 0x2e, 0x85, 0x49, 0x8b, 0xe4, 0xe2, 0x17, 0xee, 0x98, 0x5f,
+    0xb3, 0xff, 0xc9, 0xd6, 0x5f, 0xf4, 0x73, 0x99, 0xfe, 0x64, 0xeb, 0x2d,
+    0xd1, 0x1f, 0x08, 0x85, 0x17, 0xf4, 0x75, 0x2c, 0xdd, 0x92, 0xca, 0xc3,
+    0xda, 0x39, 0x4d, 0xdd, 0x7d, 0x65, 0xfb, 0x0a, 0x76, 0xd2, 0xcb, 0xf7,
+    0xdc, 0x83, 0x8b, 0x2f, 0xf7, 0x30, 0xed, 0xff, 0x3a, 0xca, 0xc4, 0x4b,
+    0xe8, 0x60, 0x89, 0xfe, 0x4d, 0x7f, 0x40, 0x7f, 0xe7, 0x02, 0xcb, 0xde,
+    0x81, 0xac, 0xad, 0x1e, 0x4f, 0x0b, 0x6f, 0xa5, 0xa2, 0x0a, 0xca, 0x91,
+    0xe2, 0x74, 0x45, 0x50, 0x8e, 0xb7, 0x86, 0x45, 0xed, 0x87, 0x65, 0x97,
+    0xf6, 0x4d, 0xa8, 0xff, 0x16, 0x5c, 0x47, 0x59, 0x52, 0x3e, 0x22, 0x1e,
+    0xe1, 0x75, 0xed, 0xdd, 0x42, 0xcb, 0xff, 0x14, 0x3c, 0xfc, 0xcd, 0xf0,
+    0x62, 0xcb, 0xfe, 0xf3, 0x6b, 0xce, 0x29, 0x30, 0xc5, 0x97, 0xfd, 0xfd,
+    0x46, 0x74, 0x2a, 0x85, 0x02, 0x95, 0x97, 0xff, 0x89, 0xcc, 0xe1, 0x67,
+    0x52, 0xf8, 0x67, 0x59, 0x7f, 0xb4, 0xd3, 0x16, 0x6f, 0x75, 0x97, 0xfb,
+    0x0a, 0x59, 0xc7, 0xf2, 0xcb, 0xff, 0xda, 0x34, 0xc7, 0x9c, 0xb3, 0x7e,
+    0x9b, 0x8b, 0x2d, 0xcd, 0x8a, 0x84, 0xe0, 0xb8, 0x63, 0xf8, 0x81, 0xd1,
+    0xfc, 0xc9, 0x1a, 0x4c, 0xf9, 0xa0, 0x86, 0x37, 0xfb, 0x45, 0x83, 0xf6,
+    0x12, 0xcb, 0xe7, 0x20, 0xe2, 0xcb, 0xf0, 0xf9, 0xc8, 0x3a, 0xca, 0xe9,
+    0x30, 0x27, 0x84, 0x48, 0x0c, 0x48, 0x82, 0xff, 0x8a, 0x1e, 0x7f, 0x46,
+    0x80, 0xb2, 0xff, 0x36, 0x8b, 0xff, 0xc9, 0xd6, 0x5f, 0x7e, 0x7c, 0x31,
+    0x65, 0xcf, 0xbd, 0x65, 0xfd, 0x22, 0x69, 0x7b, 0x16, 0x5f, 0xa7, 0x6d,
+    0x44, 0x96, 0x51, 0xa8, 0xc3, 0xe8, 0xce, 0x62, 0x4d, 0x0c, 0x11, 0x65,
+    0xef, 0xb1, 0xab, 0x2f, 0xc1, 0xfe, 0xde, 0x7d, 0x65, 0xe1, 0xb1, 0xab,
+    0x2a, 0x0f, 0x23, 0x0a, 0xef, 0xe7, 0xf0, 0x9a, 0x70, 0x2c, 0xbd, 0xa0,
+    0x08, 0xb2, 0xff, 0xe6, 0xfc, 0x7f, 0x9e, 0x76, 0xf0, 0x56, 0x54, 0x1f,
+    0x0b, 0x8f, 0x5f, 0x11, 0x06, 0x4b, 0x2f, 0x71, 0x8c, 0x59, 0x7f, 0x88,
+    0x3c, 0xc3, 0xc7, 0x6b, 0x2f, 0xfd, 0xe8, 0xd0, 0x0b, 0x0c, 0x70, 0x2c,
+    0xbd, 0x99, 0x32, 0xca, 0x35, 0x11, 0xbe, 0x33, 0x01, 0xf5, 0xf7, 0xc1,
+    0x12, 0x59, 0x58, 0x7a, 0x61, 0x31, 0xbd, 0x1d, 0x18, 0xb2, 0xfd, 0xa0,
+    0x9d, 0xc9, 0x65, 0x7c, 0xf1, 0x42, 0x3d, 0x7c, 0x78, 0xc9, 0xd6, 0x5f,
+    0xb3, 0x79, 0x47, 0x4b, 0x29, 0x8f, 0x2f, 0x84, 0x57, 0xd0, 0x5f, 0xed,
+    0x65, 0xfb, 0x46, 0xce, 0xfb, 0x8b, 0x28, 0x6b, 0x9b, 0x99, 0x0f, 0xb6,
+    0x4c, 0xd3, 0x29, 0xc8, 0x3d, 0x08, 0xf7, 0x20, 0x01, 0x09, 0x43, 0xf7,
+    0x8c, 0xdf, 0x6d, 0xdb, 0x21, 0x10, 0x8a, 0xfd, 0xb7, 0xec, 0x03, 0xac,
+    0xbf, 0xc0, 0x13, 0x08, 0x7e, 0x85, 0x95, 0x09, 0x90, 0x9e, 0x18, 0x8e,
+    0x55, 0x7f, 0x73, 0x0e, 0xde, 0x85, 0x97, 0xba, 0x97, 0x16, 0x57, 0x47,
+    0x95, 0xa2, 0xcb, 0xdc, 0x01, 0x8b, 0x2f, 0xba, 0xe4, 0x74, 0xb2, 0xfd,
+    0x2f, 0xf2, 0x0d, 0x59, 0x7f, 0xf4, 0x6a, 0x26, 0x27, 0x33, 0xf9, 0xe5,
+    0x94, 0xe7, 0xda, 0x45, 0x36, 0x93, 0x22, 0xc4, 0xf0, 0x91, 0xa8, 0x4c,
+    0x7f, 0x08, 0xde, 0x19, 0xf7, 0xfc, 0x61, 0x66, 0xb9, 0xec, 0xed, 0x65,
+    0xff, 0xc5, 0x9c, 0xc1, 0xcd, 0x28, 0xd4, 0xeb, 0x29, 0x8f, 0xff, 0xe7,
+    0x57, 0xf1, 0xbf, 0x28, 0x3f, 0x16, 0x5f, 0x60, 0xd8, 0x96, 0x5f, 0x05,
+    0xf5, 0x25, 0x97, 0xd0, 0x11, 0x5f, 0x12, 0x5f, 0xa4, 0x2c, 0xc3, 0x0c,
+    0x59, 0x44, 0x7a, 0x81, 0x26, 0xbf, 0x6d, 0xbc, 0xfe, 0x65, 0x97, 0xff,
+    0xde, 0x63, 0x4d, 0x8f, 0xf2, 0x08, 0xb3, 0xeb, 0x2f, 0x8b, 0x0f, 0x0b,
+    0x2f, 0xf4, 0x7d, 0xc0, 0xf9, 0xa5, 0x97, 0x67, 0xd6, 0x5f, 0xff, 0xdf,
+    0x2c, 0x03, 0x90, 0x3e, 0x4e, 0x03, 0x33, 0xcb, 0x2e, 0x2e, 0xf6, 0x26,
+    0x75, 0xd9, 0x5b, 0x27, 0x9c, 0x83, 0xc6, 0x22, 0x0b, 0x5e, 0xf9, 0xfe,
+    0xb2, 0xfc, 0x16, 0x26, 0xe2, 0xca, 0x73, 0xc3, 0xe0, 0xed, 0xfb, 0x9a,
+    0x87, 0xed, 0x65, 0xfa, 0x0b, 0xb8, 0xde, 0xb2, 0xb0, 0xf4, 0x7c, 0x51,
+    0x5b, 0x15, 0x97, 0x0c, 0x83, 0x1d, 0x9e, 0x35, 0xb0, 0x42, 0xab, 0xee,
+    0x57, 0xf8, 0x05, 0x9b, 0xf4, 0xdc, 0x59, 0x7f, 0x84, 0x22, 0x73, 0x1f,
+    0xcb, 0x28, 0x52, 0xdb, 0x8c, 0xc4, 0x71, 0x19, 0x0c, 0x8e, 0x93, 0xda,
+    0x34, 0xad, 0x46, 0x34, 0x78, 0xe8, 0xde, 0x5c, 0xe8, 0x27, 0x8f, 0xca,
+    0x39, 0xde, 0x42, 0xcb, 0xe4, 0x21, 0x96, 0xb9, 0xbd, 0x90, 0xc3, 0x4b,
+    0xe0, 0x09, 0x00, 0x59, 0x7b, 0x6b, 0x15, 0x05, 0x2b, 0x2f, 0x48, 0x9d,
+    0x65, 0xfe, 0xfc, 0x1f, 0xa9, 0x67, 0xd6, 0x5f, 0xfd, 0x3b, 0xee, 0x77,
+    0xe6, 0xee, 0x3f, 0xc5, 0x95, 0xb5, 0xa3, 0x12, 0x0a, 0xf0, 0x6f, 0x86,
+    0x95, 0x09, 0x93, 0xf5, 0x0e, 0x7b, 0xf6, 0xec, 0x4b, 0x50, 0xb2, 0xf7,
+    0x98, 0xeb, 0x2e, 0x70, 0x2c, 0xa7, 0x36, 0x5f, 0x1c, 0xbf, 0x6a, 0x78,
+    0xd4, 0xeb, 0x2f, 0xec, 0xff, 0x02, 0x5f, 0x59, 0x7e, 0x62, 0xf8, 0x87,
+    0x59, 0x79, 0xf5, 0xc5, 0x95, 0x08, 0x9b, 0xc2, 0xa0, 0x16, 0xfc, 0xa2,
+    0xff, 0xd0, 0x5f, 0xf0, 0x5e, 0x52, 0x85, 0x97, 0xb4, 0x1d, 0xc5, 0x97,
+    0x34, 0xcb, 0x29, 0x8d, 0xb9, 0x10, 0x5a, 0x75, 0x97, 0xed, 0x47, 0x98,
+    0xd5, 0x97, 0xfd, 0x21, 0x3e, 0xc5, 0x1d, 0x49, 0x65, 0x4e, 0x89, 0x33,
+    0x47, 0xfb, 0x12, 0xd1, 0x45, 0xf8, 0x20, 0xc2, 0xed, 0x65, 0xed, 0x44,
+    0xcb, 0x2f, 0x13, 0xcc, 0xb2, 0xfd, 0xc3, 0x1f, 0xae, 0x2c, 0xa6, 0x3c,
+    0x67, 0x1c, 0xbe, 0xe7, 0xe0, 0xeb, 0x2f, 0xfc, 0x50, 0x6f, 0x9f, 0xe2,
+    0x60, 0x16, 0x5e, 0xe6, 0xb1, 0x65, 0xe2, 0xc9, 0x2c, 0xbf, 0x68, 0x04,
+    0x10, 0x2c, 0xa8, 0x3c, 0x3c, 0x1b, 0xa6, 0x3f, 0xfe, 0x2f, 0xdb, 0x71,
+    0x65, 0xfd, 0x82, 0x44, 0xcd, 0xc5, 0x94, 0x47, 0x85, 0xf1, 0x4a, 0x85,
+    0xca, 0x89, 0xd7, 0x25, 0x0b, 0xb1, 0x9d, 0xe4, 0x60, 0xfa, 0x40, 0x39,
+    0x47, 0x98, 0xc0, 0x40, 0x44, 0x5f, 0x85, 0xf6, 0xf6, 0x3b, 0xfe, 0x86,
+    0xf4, 0x1e, 0x7c, 0x31, 0x65, 0xff, 0xb9, 0x0c, 0x32, 0x89, 0x30, 0x16,
+    0x5f, 0xbc, 0xd3, 0xb9, 0x2c, 0xb8, 0x6c, 0xb2, 0xfc, 0x13, 0x5c, 0x80,
+    0xb2, 0xef, 0x32, 0xca, 0x83, 0xfb, 0xc2, 0x7f, 0x0b, 0x6e, 0x94, 0x5f,
+    0xf4, 0xe5, 0x92, 0xf6, 0x03, 0x8b, 0x2f, 0xe3, 0x78, 0xc5, 0xd4, 0x96,
+    0x5f, 0xf4, 0x17, 0x7b, 0x06, 0x4e, 0x62, 0xcb, 0xff, 0x61, 0x75, 0x2e,
+    0x68, 0x30, 0x05, 0x97, 0xb9, 0x86, 0xac, 0xb9, 0xce, 0xb2, 0xbe, 0x6c,
+    0xf7, 0x8e, 0xdf, 0xfb, 0xe1, 0xfc, 0xc1, 0x9c, 0xed, 0xf5, 0x95, 0x87,
+    0xca, 0xc4, 0x77, 0xdd, 0x9c, 0x10, 0xb2, 0xfe, 0x96, 0x73, 0x8c, 0x35,
+    0x96, 0x96, 0xc3, 0xd0, 0xf9, 0x1d, 0x42, 0x7b, 0x73, 0x97, 0xb1, 0xd9,
+    0xe1, 0xae, 0x23, 0x85, 0xff, 0xb5, 0xe3, 0x1c, 0x7b, 0xff, 0x9d, 0xac,
+    0xbe, 0xc3, 0xc7, 0x6b, 0x2f, 0x7b, 0x37, 0x56, 0x5f, 0xef, 0x36, 0x8b,
+    0x3f, 0xc5, 0x97, 0xd2, 0x7f, 0xf1, 0x65, 0xbf, 0xb0, 0xfc, 0xfb, 0x1f,
+    0x98, 0xca, 0x9d, 0x31, 0x10, 0x21, 0x94, 0x25, 0x6f, 0x0e, 0x37, 0xac,
+    0xbf, 0x61, 0xb8, 0x52, 0x59, 0x74, 0x4c, 0xb2, 0xff, 0xe2, 0x83, 0x06,
+    0x51, 0xd4, 0x98, 0x96, 0x56, 0x8f, 0x68, 0x85, 0xef, 0xc7, 0xcf, 0x3e,
+    0xea, 0xca, 0xc3, 0xcb, 0x62, 0x1b, 0xf7, 0x5d, 0xb7, 0xf8, 0xb2, 0xff,
+    0xd3, 0x4a, 0x35, 0x3e, 0xc3, 0x33, 0xcb, 0x2f, 0xf7, 0x9b, 0xc5, 0x19,
+    0xa5, 0x97, 0xe8, 0xdf, 0xa1, 0x38, 0xb2, 0xb6, 0x22, 0x83, 0xb4, 0x4f,
+    0x18, 0xd4, 0x23, 0xf5, 0xe1, 0x95, 0x50, 0xa9, 0x84, 0x66, 0x9a, 0x1e,
+    0xf4, 0x33, 0x0a, 0x31, 0xdb, 0xfd, 0xec, 0xfe, 0x07, 0x53, 0xac, 0xbe,
+    0x20, 0xbf, 0xd6, 0x5f, 0x75, 0xdb, 0x74, 0xb2, 0x8e, 0x7f, 0x40, 0x34,
+    0xe1, 0x0d, 0xfe, 0x28, 0x94, 0xde, 0x89, 0xd6, 0x5d, 0xdb, 0x2c, 0xbf,
+    0xe6, 0x29, 0xa3, 0xbd, 0x67, 0x4b, 0x29, 0xcf, 0x47, 0x82, 0xf4, 0x34,
+    0x53, 0x7e, 0x10, 0xb7, 0xe1, 0x9a, 0x68, 0x7a, 0x59, 0x63, 0x5c, 0xf5,
+    0x02, 0x51, 0x7f, 0xd1, 0xfc, 0xd7, 0x6e, 0xfd, 0xaa, 0x2f, 0x85, 0xfc,
+    0xec, 0x38, 0xff, 0x16, 0x5f, 0xff, 0xef, 0xb6, 0x74, 0x3f, 0x07, 0x99,
+    0xde, 0xcf, 0x36, 0x1d, 0x65, 0xfb, 0x35, 0x1d, 0x49, 0x65, 0xd0, 0x7e,
+    0xd1, 0xfd, 0xe4, 0x6e, 0x16, 0x7d, 0x92, 0xff, 0x9c, 0xde, 0x37, 0x1b,
+    0xaf, 0xac, 0xaf, 0x22, 0x0c, 0x92, 0x6f, 0xff, 0xc5, 0xde, 0xcf, 0x43,
+    0x69, 0x8e, 0xdb, 0x70, 0x75, 0x97, 0x9f, 0x53, 0xaa, 0x2f, 0xf5, 0xff,
+    0xd8, 0x40, 0x33, 0x3a, 0xff, 0xe0, 0xeb, 0x2f, 0xfc, 0x5f, 0xd6, 0x47,
+    0x52, 0x63, 0xac, 0xbd, 0x93, 0xee, 0xac, 0xa8, 0x4d, 0x23, 0x08, 0xbb,
+    0x59, 0xf1, 0x53, 0xa2, 0x91, 0xf5, 0xef, 0xb1, 0x8b, 0x2f, 0xe7, 0x9c,
+    0x41, 0xbe, 0xe2, 0xca, 0xf9, 0xe7, 0x84, 0x76, 0xff, 0x6b, 0x59, 0x31,
+    0xe3, 0x8b, 0x2f, 0xf9, 0xff, 0xc6, 0x2e, 0xa4, 0x75, 0x97, 0xfc, 0xda,
+    0x9c, 0x20, 0x04, 0x7d, 0x65, 0xff, 0x46, 0x6b, 0x64, 0x9b, 0xa9, 0x2c,
+    0xa9, 0x26, 0x09, 0x84, 0x40, 0x34, 0xe1, 0xcf, 0xce, 0xaf, 0xff, 0xf7,
+    0x9f, 0x8d, 0x1c, 0xd9, 0xff, 0x61, 0xf3, 0xb7, 0xd2, 0xcb, 0xa3, 0x75,
+    0x65, 0xf7, 0x38, 0xe7, 0x59, 0x5e, 0x44, 0xe8, 0x18, 0xbe, 0x33, 0x7f,
+    0xba, 0xf8, 0x9e, 0xf6, 0x6e, 0x2c, 0xbf, 0x63, 0x4f, 0x06, 0xac, 0xac,
+    0x3e, 0x1f, 0x1c, 0xdf, 0x81, 0xcd, 0xb8, 0xfa, 0xcb, 0xec, 0xd0, 0x93,
+    0x2c, 0xa9, 0xcf, 0xc3, 0x08, 0x74, 0x57, 0x7d, 0x38, 0xda, 0x65, 0x97,
+    0xdd, 0x4b, 0xee, 0xb2, 0xff, 0xf7, 0x7e, 0x62, 0xcd, 0xef, 0x2e, 0x30,
+    0xd6, 0x5f, 0xe9, 0x16, 0x1c, 0xef, 0x25, 0x97, 0xcd, 0xdb, 0x0d, 0x65,
+    0xda, 0x86, 0x3d, 0x4f, 0x99, 0x50, 0xd1, 0x97, 0xa8, 0x4f, 0xdf, 0xdc,
+    0xf9, 0x46, 0x74, 0xb2, 0xa1, 0x36, 0x7c, 0x24, 0x78, 0x77, 0x04, 0xa2,
+    0xff, 0xf6, 0x73, 0xce, 0xdf, 0x83, 0x93, 0x9a, 0xb2, 0xfc, 0x0e, 0x7f,
+    0x3c, 0xb2, 0xf8, 0x7e, 0x8e, 0x96, 0x5f, 0x67, 0xa5, 0x8b, 0x2c, 0x63,
+    0x1e, 0x27, 0xc8, 0xed, 0x8b, 0x2a, 0x11, 0x48, 0xed, 0x9f, 0x28, 0xa8,
+    0x55, 0xe1, 0x28, 0xe5, 0xb1, 0x00, 0xa1, 0xd9, 0x7f, 0xe0, 0x1d, 0xb3,
+    0xaf, 0x8e, 0x06, 0xb2, 0xfe, 0xd8, 0x3c, 0xc0, 0x71, 0x65, 0xff, 0xfb,
+    0xf9, 0xa9, 0xdb, 0x8d, 0xbf, 0xcd, 0x9d, 0x7d, 0x65, 0x1d, 0x10, 0xe4,
+    0x5f, 0x7f, 0x8b, 0xfc, 0x08, 0xfc, 0xcb, 0x2a, 0x0f, 0x57, 0x08, 0xae,
+    0x7e, 0x96, 0x5f, 0x6c, 0x30, 0xbe, 0xb2, 0xee, 0x61, 0xcd, 0xe1, 0x0b,
+    0xde, 0x3e, 0xa7, 0x59, 0x58, 0x79, 0x2c, 0x57, 0x7f, 0xef, 0xc7, 0x39,
+    0x0d, 0x3b, 0xfd, 0x65, 0xff, 0x36, 0x10, 0xcd, 0x6c, 0xd2, 0xca, 0x85,
+    0x4a, 0xad, 0x18, 0xde, 0xa1, 0x4b, 0xf2, 0x0d, 0xd3, 0xeb, 0xfe, 0xe6,
+    0x4f, 0xc6, 0x27, 0x9d, 0x65, 0xff, 0xb3, 0xa9, 0x31, 0x1e, 0x07, 0x0b,
+    0x2e, 0xce, 0x96, 0x56, 0x22, 0x35, 0x8e, 0x7e, 0x7b, 0x7f, 0x3e, 0xba,
+    0x96, 0x7d, 0x65, 0xff, 0xbf, 0xc6, 0xd7, 0xc8, 0x2f, 0x25, 0x97, 0xff,
+    0xe6, 0xe6, 0x0f, 0xd9, 0xf6, 0xce, 0x4f, 0x86, 0x2c, 0xbf, 0xfe, 0x2f,
+    0xf7, 0xe6, 0x33, 0x85, 0x80, 0x0f, 0x16, 0x5f, 0xb1, 0xb6, 0xd8, 0x6b,
+    0x2f, 0xfe, 0x8d, 0xbc, 0x09, 0x66, 0x6f, 0x8e, 0x96, 0x54, 0x23, 0x04,
+    0x6a, 0x27, 0x29, 0xbf, 0xf4, 0x66, 0xb3, 0x40, 0x3b, 0x71, 0x65, 0xf7,
+    0xf8, 0x0e, 0xd6, 0x5e, 0x7e, 0xb7, 0x56, 0x5f, 0xcf, 0xfe, 0x46, 0x4e,
+    0xb2, 0xa1, 0x52, 0xfe, 0x17, 0x76, 0x7c, 0xd1, 0x8b, 0x11, 0x78, 0x4f,
+    0x77, 0x92, 0x18, 0x41, 0x7e, 0x03, 0xf5, 0x2c, 0x59, 0x7f, 0x75, 0xc6,
+    0x2e, 0xa4, 0xb2, 0xfe, 0x2f, 0xe4, 0xd1, 0xb8, 0xb2, 0xa0, 0xf7, 0xf0,
+    0xbe, 0xff, 0xec, 0x00, 0xdd, 0xfb, 0xf1, 0xe0, 0x6b, 0x2a, 0x11, 0xd6,
+    0x78, 0x43, 0x80, 0x82, 0xff, 0x83, 0x07, 0xe6, 0x1e, 0x37, 0x16, 0x5f,
+    0xfb, 0x53, 0xe0, 0xf3, 0xde, 0xcd, 0xc5, 0x96, 0x35, 0x65, 0xfe, 0xff,
+    0x04, 0xdf, 0x19, 0xd2, 0xca, 0x83, 0xc9, 0x21, 0x2b, 0xff, 0x6b, 0x87,
+    0x13, 0x34, 0xd1, 0x32, 0xca, 0xc3, 0xe0, 0x09, 0x05, 0xf9, 0xca, 0x7e,
+    0x0d, 0x65, 0x62, 0x66, 0x9c, 0x87, 0x59, 0x84, 0x37, 0xdf, 0xf6, 0x12,
+    0xcb, 0xfb, 0x8f, 0x22, 0x83, 0xac, 0xbc, 0x51, 0xb8, 0xb2, 0xff, 0xfa,
+    0x51, 0xa9, 0xfe, 0xc6, 0xf3, 0x8e, 0x52, 0x59, 0x7f, 0x4f, 0xcc, 0x3c,
+    0x6e, 0x2c, 0xa9, 0x91, 0x04, 0x22, 0x8d, 0x62, 0x62, 0x5a, 0x21, 0xe1,
+    0x61, 0x90, 0xa0, 0xbc, 0xde, 0x65, 0x97, 0xef, 0x0f, 0xf9, 0xbd, 0x65,
+    0xc3, 0x92, 0xcb, 0xfd, 0x83, 0x0f, 0xf9, 0x21, 0x5a, 0xcb, 0xb2, 0x4b,
+    0x2b, 0xc7, 0x9c, 0x47, 0x16, 0x94, 0x22, 0xc3, 0x45, 0x5f, 0x65, 0xbe,
+    0x3f, 0xda, 0x75, 0x95, 0x87, 0xb0, 0xc6, 0xb7, 0xff, 0x6f, 0xf9, 0xb0,
+    0x52, 0xcf, 0x31, 0xd6, 0x5d, 0x3f, 0xd6, 0x5f, 0xed, 0xfe, 0x79, 0x46,
+    0x12, 0xca, 0x83, 0xcb, 0xc1, 0x8b, 0xe9, 0x3e, 0xa4, 0xb2, 0xff, 0xf4,
+    0x69, 0xfe, 0x1f, 0xb7, 0xf9, 0xe6, 0x59, 0x69, 0x4c, 0x7d, 0x7e, 0x22,
+    0xbf, 0xb0, 0xc1, 0x3c, 0xff, 0x59, 0x7f, 0x48, 0xff, 0x20, 0xcc, 0xb2,
+    0xff, 0xf8, 0x49, 0x46, 0xf6, 0x20, 0x69, 0xa0, 0xf8, 0x92, 0xb4, 0x7f,
+    0xff, 0x2f, 0xbe, 0xf0, 0x9d, 0x7d, 0x65, 0xfb, 0x0f, 0x8d, 0xbd, 0x65,
+    0xe9, 0xe6, 0xdc, 0x59, 0x63, 0x16, 0x54, 0x26, 0xf5, 0x39, 0x4e, 0x42,
+    0xbb, 0xb2, 0x26, 0x25, 0x09, 0x46, 0xd9, 0x15, 0xdf, 0xc5, 0x97, 0xed,
+    0x34, 0xee, 0x75, 0x4c, 0x26, 0xbe, 0xf8, 0x61, 0xd5, 0x30, 0x9a, 0xe0,
+    0x42, 0xa8, 0x13, 0x5f, 0xe2, 0x73, 0x7f, 0x1a, 0x02, 0xa8, 0x13, 0x5f,
+    0xee, 0x67, 0x9b, 0x81, 0x9d, 0x53, 0x09, 0xae, 0xc1, 0xaa, 0x61, 0x35,
+    0xc6, 0x18, 0xb9, 0x84, 0xd5, 0x89, 0xa8, 0x74, 0x6a, 0xc5, 0xc7, 0x23,
+    0xe2, 0x06, 0xf4, 0x13, 0x08, 0xed, 0xf4, 0xcc, 0x26, 0x0b, 0x3e, 0x7a,
+    0xe9, 0x3f, 0xf3, 0x23, 0xcd, 0xbe, 0xc1, 0x84, 0x96, 0x53, 0x1e, 0x6b,
+    0x96, 0x5f, 0xff, 0x80, 0x77, 0x97, 0x3d, 0x1b, 0xf0, 0x41, 0xbc, 0x96,
+    0x54, 0x2f, 0xa6, 0x32, 0x1f, 0xa3, 0x23, 0x72, 0x02, 0x84, 0x8f, 0x25,
+    0x02, 0xfe, 0x55, 0xc0, 0x48, 0x2f, 0xff, 0xb0, 0xcf, 0x3b, 0x7e, 0x3e,
+    0x10, 0x61, 0x2c, 0xbf, 0xf4, 0x89, 0xcd, 0x9a, 0x4d, 0xa9, 0x2c, 0xbf,
+    0xe7, 0x34, 0xb2, 0x69, 0x47, 0x4b, 0x2b, 0x47, 0xf4, 0x48, 0x17, 0xff,
+    0xf1, 0x0f, 0x0a, 0x0c, 0xf9, 0xaf, 0xcc, 0xc2, 0x35, 0x65, 0xf3, 0xef,
+    0xc3, 0x16, 0x5b, 0x6a, 0x59, 0x7f, 0xfc, 0xf2, 0xf4, 0x43, 0x7f, 0x8c,
+    0x5d, 0x49, 0x65, 0x48, 0xf9, 0x3c, 0x2d, 0x7a, 0x68, 0xe2, 0xcb, 0xc4,
+    0x03, 0xac, 0xbf, 0xe8, 0x0f, 0xc9, 0xb7, 0x88, 0x75, 0x97, 0xfd, 0x9f,
+    0x6c, 0xe4, 0xf8, 0x62, 0xcb, 0xa0, 0xeb, 0x2e, 0xce, 0x42, 0x30, 0xf0,
+    0x77, 0x43, 0x9e, 0x3b, 0xdb, 0x39, 0xbf, 0xfc, 0xf2, 0xf4, 0x6f, 0x10,
+    0xee, 0xfa, 0xed, 0x65, 0x42, 0xb5, 0x3c, 0x86, 0x43, 0x10, 0xe9, 0x69,
+    0xe1, 0x10, 0x50, 0xe5, 0x0a, 0xb5, 0xfe, 0x6d, 0xfb, 0x3c, 0xfc, 0xdc,
+    0x59, 0x7f, 0x7c, 0x2f, 0xce, 0x7d, 0x65, 0xfb, 0x91, 0x80, 0x85, 0x97,
+    0xc0, 0xf1, 0x67, 0x47, 0xa9, 0xf2, 0xeb, 0xfe, 0xf4, 0x08, 0x7c, 0xde,
+    0xdd, 0xac, 0xac, 0x4c, 0x0d, 0xe1, 0x1d, 0xc3, 0x9b, 0xcd, 0xa3, 0x56,
+    0x5d, 0xa0, 0x2c, 0xac, 0x36, 0x8c, 0x3b, 0x74, 0xfa, 0x59, 0x70, 0x26,
+    0x59, 0x7f, 0xf1, 0xe6, 0x93, 0x94, 0xe3, 0x82, 0x9d, 0x65, 0x41, 0xfb,
+    0x0c, 0x63, 0x06, 0x2f, 0x67, 0x24, 0xb2, 0xf9, 0xbc, 0xe7, 0x59, 0x7d,
+    0xa8, 0xe4, 0xeb, 0x2b, 0x47, 0xc1, 0xf1, 0xc1, 0x08, 0x6a, 0x1d, 0x4f,
+    0x8c, 0xf2, 0x85, 0x07, 0x2f, 0x0b, 0x21, 0x9e, 0x6c, 0x65, 0x3d, 0xca,
+    0xf1, 0xea, 0x3a, 0x86, 0x87, 0x3c, 0xd2, 0xfc, 0x75, 0x2a, 0x70, 0xf0,
+    0xe5, 0xf4, 0xa8, 0xd0, 0x46, 0xc8, 0x46, 0x9c, 0x8d, 0xbf, 0xf4, 0x89,
+    0x4d, 0xf2, 0xf7, 0x0c, 0x8d, 0xcf, 0x6d, 0xa0, 0x48, 0x4a, 0xee, 0xc2,
+    0x36, 0xfa, 0x73, 0xff, 0x8b, 0x2e, 0xc2, 0x59, 0x77, 0xf8, 0xb2, 0xa0,
+    0xd6, 0x10, 0xad, 0xff, 0xd9, 0xec, 0xff, 0x5d, 0xb6, 0xbd, 0x8b, 0x2e,
+    0xce, 0x2c, 0xa9, 0x1f, 0xd0, 0xc7, 0xc0, 0x8b, 0x7f, 0x4a, 0x69, 0x41,
+    0x7d, 0x65, 0xfd, 0x92, 0x20, 0xbf, 0x16, 0x5f, 0x75, 0xc6, 0x85, 0x97,
+    0xfb, 0x0b, 0x77, 0xec, 0x46, 0xac, 0xae, 0x91, 0x63, 0xa2, 0xef, 0x16,
+    0x00, 0x8a, 0xfb, 0x34, 0xc6, 0xac, 0xbc, 0x64, 0xe7, 0x59, 0x7f, 0xfd,
+    0xbf, 0x59, 0x3e, 0xc0, 0xc6, 0x7e, 0x3a, 0x92, 0xcb, 0xfe, 0xf4, 0x1c,
+    0x9e, 0x59, 0xe5, 0x95, 0x09, 0x85, 0x8c, 0xfb, 0x08, 0x9c, 0x7f, 0x8a,
+    0xb7, 0xf7, 0xa0, 0x42, 0xe8, 0x0b, 0x2e, 0xcd, 0xd5, 0x97, 0x09, 0xc5,
+    0x97, 0xef, 0x99, 0x85, 0x3a, 0xcb, 0x47, 0x8f, 0x04, 0x86, 0x2b, 0x68,
+    0x44, 0x04, 0x96, 0xaf, 0x66, 0x18, 0xb2, 0xe6, 0x35, 0x65, 0x4e, 0x6c,
+    0xd8, 0x72, 0xfd, 0xfc, 0x99, 0x8e, 0xb2, 0xfd, 0x1d, 0x00, 0x10, 0xb2,
+    0xa0, 0xf4, 0x08, 0xa2, 0xfd, 0x1b, 0xe0, 0xbe, 0xb2, 0xfc, 0xdb, 0xfe,
+    0xd3, 0xac, 0xbf, 0x7f, 0xd1, 0xa9, 0x2c, 0xbf, 0xf6, 0x1e, 0x0a, 0x00,
+    0x77, 0x92, 0xcb, 0xff, 0x1c, 0x98, 0xd8, 0xff, 0x1b, 0x4b, 0x2f, 0xa5,
+    0xfc, 0xed, 0x65, 0x61, 0xf0, 0xb9, 0xf5, 0xc5, 0x0b, 0x2f, 0xfb, 0xcf,
+    0x28, 0x98, 0xa0, 0xeb, 0x2f, 0xe1, 0xbf, 0xfc, 0xc6, 0x2c, 0xbf, 0x16,
+    0x09, 0x93, 0x2c, 0xbf, 0xff, 0x67, 0x60, 0x83, 0xe7, 0xdb, 0x99, 0x84,
+    0x6a, 0xcb, 0xf8, 0xed, 0x07, 0x72, 0x59, 0x5e, 0x3f, 0xf0, 0x2a, 0x5f,
+    0xfc, 0xc7, 0x18, 0x5f, 0x52, 0xce, 0xbe, 0xb2, 0xc5, 0x87, 0xcf, 0xd9,
+    0x15, 0xff, 0x9c, 0x81, 0xd7, 0xf5, 0x18, 0x62, 0xcb, 0xff, 0x73, 0xcd,
+    0xb3, 0xa9, 0x46, 0x4e, 0xb2, 0xff, 0x60, 0xf5, 0xa6, 0x9b, 0x8b, 0x2e,
+    0xd9, 0xba, 0xb2, 0xd9, 0xb8, 0x8d, 0x10, 0x1f, 0xfd, 0x0b, 0x79, 0xa5,
+    0xec, 0x1e, 0xda, 0xcb, 0xfe, 0xf3, 0x9f, 0xcd, 0x1d, 0x49, 0x65, 0xfe,
+    0xc3, 0x8d, 0x80, 0x19, 0x2c, 0xbe, 0xf3, 0xb9, 0xd6, 0x5f, 0x3f, 0xbc,
+    0xcb, 0x28, 0x8f, 0x0b, 0x79, 0x0d, 0xf8, 0xa5, 0xb6, 0xf3, 0xac, 0xa8,
+    0x3c, 0xe1, 0x08, 0xea, 0x15, 0x3e, 0x4a, 0x1f, 0x06, 0xa3, 0xb0, 0xff,
+    0x8e, 0x41, 0x0c, 0x3b, 0xff, 0xfc, 0xdb, 0xc8, 0x3c, 0xd8, 0x21, 0x40,
+    0xfc, 0xf2, 0xce, 0x2c, 0xb8, 0xd6, 0x59, 0x53, 0xaf, 0x1c, 0x8c, 0x83,
+    0xb2, 0x8e, 0x8a, 0xb7, 0x0a, 0x35, 0x09, 0xd3, 0x90, 0x78, 0x55, 0xce,
+    0x08, 0xbb, 0xf2, 0xe2, 0xb7, 0xb1, 0x6d, 0xb2, 0x5f, 0xef, 0x75, 0x2e,
+    0x7b, 0x27, 0x59, 0x7f, 0xcf, 0xe9, 0x98, 0xbd, 0x9d, 0x2c, 0xa8, 0x3e,
+    0xfc, 0x36, 0xbc, 0x1e, 0xa7, 0x59, 0x7e, 0x9a, 0x51, 0xfe, 0x2c, 0xbb,
+    0x80, 0x59, 0x5e, 0x3d, 0xf0, 0x0f, 0xed, 0x94, 0xdf, 0xff, 0xff, 0x7b,
+    0x08, 0x18, 0x5f, 0xf6, 0x7a, 0x32, 0x66, 0xd4, 0xde, 0x6e, 0xbe, 0xb2,
+    0xfe, 0xd3, 0x77, 0xec, 0x99, 0x65, 0xff, 0xf1, 0x64, 0xce, 0x0c, 0xfc,
+    0x6f, 0x62, 0x02, 0xca, 0x39, 0xff, 0x7c, 0xbe, 0xb1, 0x31, 0xd7, 0x87,
+    0xdd, 0xf1, 0x46, 0x18, 0xb2, 0xf7, 0x5c, 0x75, 0x97, 0xdc, 0x8d, 0x42,
+    0xca, 0x83, 0x7d, 0xf1, 0xda, 0x87, 0x77, 0xa1, 0x3c, 0x2e, 0x24, 0x72,
+    0x38, 0x5b, 0xe5, 0xaa, 0x2e, 0xee, 0x39, 0xce, 0xa1, 0x94, 0xd1, 0xf5,
+    0xee, 0x24, 0x4d, 0x0a, 0xfd, 0x2d, 0xbc, 0xf5, 0x51, 0x46, 0x73, 0xf7,
+    0xf0, 0xc6, 0x9f, 0xbc, 0x9c, 0x45, 0xfb, 0xdc, 0xe7, 0x16, 0x5f, 0xff,
+    0x31, 0x61, 0xe0, 0x42, 0x0c, 0x8b, 0x0e, 0xb2, 0xfc, 0x41, 0x96, 0x71,
+    0x65, 0xff, 0x60, 0xfd, 0x1f, 0xf4, 0x71, 0x65, 0xc3, 0x6c, 0x3d, 0xf2,
+    0x27, 0xbf, 0xfc, 0xd1, 0xff, 0x05, 0xcf, 0x34, 0xa2, 0x75, 0x97, 0xf1,
+    0x66, 0xb5, 0x9d, 0x2c, 0xaf, 0x1f, 0xc7, 0x12, 0xef, 0xfb, 0x5a, 0x8e,
+    0xfd, 0xd3, 0xee, 0x2c, 0xbc, 0x51, 0xc5, 0x97, 0xd8, 0x58, 0x75, 0x94,
+    0xb2, 0xa0, 0xf1, 0xa4, 0x36, 0x12, 0x0b, 0xfb, 0xb0, 0xb8, 0xcf, 0x0b,
+    0x2f, 0xfb, 0xcd, 0x2f, 0x3c, 0x98, 0xeb, 0x2f, 0x8a, 0x05, 0x56, 0xd2,
+    0x59, 0x7f, 0xee, 0x31, 0x75, 0x2f, 0xb7, 0x19, 0x65, 0x62, 0x28, 0xdc,
+    0xe3, 0xe5, 0xb7, 0xcc, 0x4d, 0x32, 0xcb, 0xf7, 0xfd, 0x01, 0x15, 0xac,
+    0xbb, 0xce, 0xb2, 0x9c, 0xf0, 0xbe, 0x59, 0x7f, 0xe6, 0x3e, 0x0f, 0xcd,
+    0xc2, 0xc5, 0x97, 0xc7, 0x81, 0xc2, 0xca, 0x23, 0xdd, 0xe1, 0xe5, 0x49,
+    0x70, 0x93, 0x21, 0x59, 0xdc, 0x28, 0xd8, 0x8a, 0x68, 0x42, 0x68, 0xb8,
+    0xf0, 0xd1, 0xf1, 0x71, 0x31, 0xfd, 0xfa, 0xfb, 0xd8, 0x07, 0x59, 0x7c,
+    0x51, 0xa9, 0x2c, 0xbf, 0xef, 0x44, 0x98, 0x88, 0x3d, 0x2c, 0xbf, 0xe8,
+    0x93, 0x7e, 0x50, 0x40, 0x59, 0x7f, 0xd1, 0x9f, 0x10, 0x00, 0x8e, 0x96,
+    0x5e, 0xc2, 0x35, 0x65, 0xb5, 0x08, 0xe6, 0xc2, 0x1d, 0x1c, 0x1c, 0xdc,
+    0x56, 0x75, 0x62, 0x59, 0x7f, 0xd1, 0xb8, 0x4f, 0xf9, 0x36, 0xf5, 0x97,
+    0xbd, 0x03, 0x59, 0x7f, 0x14, 0x77, 0xa8, 0x92, 0xcb, 0xff, 0xce, 0xdf,
+    0x90, 0x4b, 0xfc, 0xf3, 0xc9, 0x60, 0x86, 0xb6, 0xe8, 0xf2, 0xca, 0x64,
+    0x5c, 0xf9, 0x27, 0x7a, 0xd5, 0xff, 0xb8, 0x27, 0xd8, 0x83, 0x2c, 0xe2,
+    0xcb, 0x87, 0xc5, 0x95, 0x24, 0xdf, 0x37, 0x21, 0xeb, 0xe3, 0x12, 0x3f,
+    0xbf, 0xff, 0xb3, 0xac, 0xe3, 0x97, 0x9a, 0x3f, 0xe0, 0xb9, 0xd6, 0x56,
+    0xc5, 0x70, 0x71, 0x18, 0x3b, 0x29, 0x3c, 0x71, 0x84, 0x8b, 0x78, 0xed,
+    0x8b, 0x2f, 0x71, 0xfb, 0x59, 0x6c, 0x59, 0x7e, 0x09, 0xdb, 0xd0, 0xb2,
+    0xfd, 0x9a, 0xee, 0x31, 0x65, 0x4e, 0x7b, 0xc4, 0x20, 0x21, 0x3d, 0xff,
+    0x61, 0xf3, 0x4d, 0x3b, 0x9d, 0x65, 0xff, 0x41, 0x77, 0xb1, 0xb5, 0x9d,
+    0xac, 0xbf, 0xfd, 0xb3, 0xfe, 0xc3, 0xe7, 0x71, 0xe8, 0x3a, 0xcb, 0xce,
+    0x7e, 0x2c, 0xac, 0x3e, 0x87, 0x4c, 0xa0, 0x23, 0x0f, 0xf0, 0xa3, 0xbb,
+    0x27, 0x59, 0x7f, 0xf4, 0x78, 0x41, 0xeb, 0x59, 0xff, 0x32, 0xcb, 0xfe,
+    0x28, 0xeb, 0x6c, 0xdf, 0xe7, 0x96, 0x5d, 0xfd, 0xb5, 0x96, 0x73, 0x9e,
+    0xb9, 0x1e, 0xde, 0xdb, 0x60, 0x2c, 0xbf, 0xfe, 0x2f, 0xbb, 0xf8, 0xa3,
+    0xfc, 0x33, 0x3c, 0xb2, 0x98, 0xfb, 0x5c, 0x7e, 0xff, 0xd8, 0x7c, 0xdd,
+    0xcc, 0x08, 0xaf, 0x8b, 0x2f, 0xe1, 0x06, 0xfa, 0xc3, 0xac, 0xbe, 0xdf,
+    0x05, 0x25, 0x96, 0xd6, 0xc3, 0xd1, 0xc2, 0xea, 0xfa, 0x2f, 0x84, 0x84,
+    0xad, 0xff, 0xc7, 0xe3, 0xcb, 0x51, 0xc8, 0x29, 0xd6, 0x5f, 0xf4, 0x7f,
+    0xd8, 0x7c, 0xd6, 0x2c, 0xbf, 0x7f, 0xcd, 0x1c, 0x59, 0x7a, 0x77, 0x2d,
+    0x1e, 0xf7, 0x0d, 0xef, 0xff, 0xe6, 0xfc, 0x7f, 0x85, 0x9e, 0x68, 0xff,
+    0x9e, 0x4b, 0x2f, 0xfa, 0x01, 0xc1, 0x85, 0xf5, 0x25, 0x97, 0xb5, 0xce,
+    0x2e, 0x20, 0x35, 0xf7, 0x6e, 0xfd, 0xaa, 0x20, 0x30, 0xb3, 0x55, 0x6c,
+    0x92, 0x29, 0x74, 0xc7, 0x7f, 0xc7, 0x7e, 0x9e, 0x5c, 0x69, 0x2c, 0xbf,
+    0xe8, 0xf7, 0x6d, 0xc7, 0x69, 0xd6, 0x5a, 0x36, 0x22, 0x6b, 0x0a, 0x34,
+    0x73, 0x78, 0xef, 0x25, 0x95, 0xe3, 0xd2, 0x01, 0xb5, 0xc5, 0x8b, 0x2e,
+    0x70, 0x2c, 0xa8, 0x3c, 0xd2, 0x22, 0xf8, 0xad, 0xbb, 0x59, 0x5a, 0x37,
+    0xe4, 0x5b, 0x58, 0xad, 0xa9, 0xe1, 0x45, 0xc3, 0x31, 0x25, 0x3a, 0xd0,
+    0xd7, 0xc9, 0x3a, 0x87, 0xde, 0x8a, 0x0e, 0x2f, 0xe8, 0x4e, 0x02, 0x12,
+    0x65, 0x0d, 0xef, 0xcb, 0x93, 0xbe, 0x1f, 0xa3, 0x6d, 0x65, 0xff, 0xe3,
+    0xbf, 0xf8, 0x19, 0x79, 0xd8, 0x9d, 0x65, 0xff, 0xfc, 0xc3, 0x2c, 0xe4,
+    0x6b, 0x67, 0x3c, 0xe3, 0x81, 0xac, 0xbd, 0xbe, 0x3c, 0xb2, 0xa1, 0x92,
+    0xbf, 0x21, 0xbc, 0x7b, 0x69, 0xf5, 0x47, 0x84, 0x78, 0x09, 0x78, 0x90,
+    0x22, 0xdd, 0xf9, 0xbe, 0xfb, 0x78, 0xb2, 0xfd, 0x9a, 0x90, 0x92, 0x59,
+    0x7f, 0xa7, 0xe4, 0x1d, 0xfa, 0xfa, 0xca, 0x9c, 0xf7, 0x88, 0xa6, 0xe7,
+    0xe9, 0x65, 0xfc, 0xdb, 0xdd, 0xcb, 0xb5, 0x97, 0xbc, 0xfb, 0x8b, 0x2f,
+    0xa0, 0x1b, 0x78, 0xb2, 0xf8, 0xe7, 0x7f, 0xac, 0xa9, 0x26, 0xa7, 0x90,
+    0x87, 0x39, 0x17, 0x85, 0xc0, 0x5d, 0xf1, 0xf1, 0x09, 0x2f, 0xec, 0xdd,
+    0x77, 0xf7, 0x16, 0x5f, 0xfd, 0x9c, 0xfb, 0xf4, 0x26, 0xec, 0x14, 0x96,
+    0x5b, 0x16, 0x5f, 0xfd, 0x84, 0xf2, 0xf3, 0x9c, 0xef, 0x25, 0x96, 0x9b,
+    0x68, 0x3d, 0x21, 0x40, 0x85, 0xff, 0xfe, 0x60, 0xcf, 0x33, 0xbc, 0xff,
+    0xc9, 0x8a, 0x0f, 0xe7, 0x59, 0x7f, 0x4e, 0x36, 0xd4, 0x6f, 0x59, 0x7f,
+    0xfe, 0xe6, 0xcc, 0x1e, 0xce, 0x66, 0x80, 0x7c, 0xdb, 0xc5, 0x94, 0x48,
+    0x8c, 0xf9, 0x85, 0xfe, 0x23, 0x5f, 0xbf, 0x34, 0xeb, 0x2f, 0x7c, 0x01,
+    0x59, 0x4c, 0x7a, 0x44, 0x6b, 0x7e, 0x3e, 0xd7, 0xb5, 0xed, 0x7b, 0x52,
+    0xcb, 0xff, 0xfa, 0x59, 0xc6, 0xd6, 0x98, 0xe2, 0x7f, 0xd8, 0x67, 0xd6,
+    0x54, 0x26, 0x5d, 0x8e, 0x8c, 0x40, 0xe7, 0xb7, 0xff, 0xde, 0x76, 0xfc,
+    0x34, 0xb0, 0x80, 0x08, 0x59, 0x79, 0xfd, 0x0b, 0x2e, 0xc0, 0x2c, 0xb4,
+    0xfe, 0x36, 0x26, 0x0d, 0xdf, 0xf7, 0xa3, 0x9f, 0xe6, 0x04, 0x56, 0xb2,
+    0xff, 0xd0, 0xde, 0xf6, 0x7f, 0xd9, 0x25, 0x97, 0xfb, 0x0a, 0x59, 0xc1,
+    0x0e, 0xb2, 0xec, 0x21, 0xa2, 0xb7, 0x47, 0xbf, 0x3d, 0xa9, 0x93, 0x8d,
+    0x77, 0xd3, 0x21, 0xad, 0x7f, 0xfa, 0x59, 0xd4, 0x84, 0x80, 0x0b, 0x30,
+    0xc3, 0x12, 0x5f, 0x8e, 0x66, 0x36, 0xf5, 0x97, 0x61, 0x4c, 0x7f, 0x82,
+    0x29, 0x5f, 0xff, 0x73, 0x9e, 0x0f, 0x71, 0x26, 0xd0, 0x30, 0x96, 0x54,
+    0x8f, 0xf8, 0xc2, 0xea, 0x84, 0xd5, 0x1e, 0x33, 0x1b, 0xff, 0xed, 0x48,
+    0x7e, 0x8e, 0x16, 0x18, 0xfa, 0x35, 0x65, 0xe0, 0x07, 0x8b, 0x2f, 0xd9,
+    0x85, 0x12, 0x59, 0x6e, 0x41, 0xe1, 0x10, 0xed, 0x3a, 0x2e, 0x7f, 0x09,
+    0x3a, 0x85, 0xfa, 0x41, 0xb5, 0x61, 0x7b, 0x42, 0x6b, 0x46, 0x5e, 0x94,
+    0x38, 0x52, 0xc6, 0xc3, 0x0e, 0x1b, 0xfe, 0x62, 0x97, 0x05, 0x56, 0xd5,
+    0xb5, 0xed, 0x4b, 0x2f, 0x09, 0xa3, 0x56, 0x5f, 0x4d, 0xcc, 0x99, 0x65,
+    0xf8, 0x11, 0xfc, 0xdc, 0x59, 0x7f, 0xc3, 0xdb, 0x63, 0x4d, 0x82, 0xfa,
+    0xcb, 0xfb, 0x9a, 0xd3, 0x4d, 0xc5, 0x97, 0xfa, 0x33, 0x5d, 0xbb, 0xf6,
+    0xa8, 0x82, 0x57, 0xfd, 0x1f, 0xcd, 0x76, 0xef, 0xda, 0xa2, 0xf9, 0x5f,
+    0x9c, 0x7e, 0x83, 0x56, 0x5f, 0xff, 0xf6, 0x36, 0xb0, 0x7e, 0x8e, 0xa5,
+    0xa8, 0xff, 0x04, 0x29, 0x2c, 0xbf, 0xf1, 0x67, 0xfe, 0xdc, 0xfe, 0x01,
+    0x65, 0xd9, 0xc1, 0x4a, 0x70, 0x23, 0x2f, 0xed, 0x00, 0xe8, 0xc4, 0x51,
+    0xc6, 0x7a, 0xc5, 0x44, 0xa5, 0x1d, 0xf5, 0x12, 0xa7, 0x8d, 0xf2, 0x93,
+    0xef, 0xfe, 0x8f, 0x31, 0xb9, 0xa9, 0xce, 0x1e, 0x96, 0x5f, 0xf0, 0xf5,
+    0x87, 0xc9, 0x38, 0xd6, 0x5f, 0xff, 0x82, 0xfc, 0xc2, 0xef, 0xcc, 0x3f,
+    0x67, 0x5b, 0xab, 0x2a, 0x15, 0xe0, 0x60, 0xfb, 0x4a, 0x9c, 0xf1, 0x6b,
+    0xa3, 0x91, 0xc5, 0xfa, 0x35, 0x83, 0x85, 0x97, 0xe9, 0x60, 0x04, 0xfa,
+    0xcb, 0xfb, 0xdb, 0x7e, 0x6e, 0xfc, 0xb2, 0x99, 0x10, 0x2e, 0x4c, 0x12,
+    0x9b, 0xf0, 0x22, 0x5c, 0xc5, 0x97, 0xff, 0xdd, 0xfa, 0x35, 0x9c, 0x20,
+    0xbc, 0x8d, 0x75, 0x97, 0xff, 0xe7, 0xdf, 0xb3, 0x9e, 0x76, 0xfc, 0x7f,
+    0xd9, 0xf5, 0x94, 0x14, 0x54, 0x08, 0xa1, 0x7f, 0xe7, 0x9f, 0xd1, 0x3e,
+    0x7f, 0x98, 0xb2, 0xa0, 0xf8, 0xc8, 0x92, 0xff, 0xbf, 0x07, 0xf6, 0x6f,
+    0xce, 0x2c, 0xbf, 0xe8, 0x3f, 0x21, 0xa7, 0x7f, 0xac, 0xa9, 0x1f, 0x97,
+    0xce, 0xaf, 0xfd, 0x3b, 0xf5, 0xb7, 0x9f, 0x27, 0xde, 0xb2, 0xff, 0xfb,
+    0x3f, 0x05, 0xfe, 0x66, 0x1a, 0x6b, 0xc9, 0x65, 0xfc, 0x6e, 0x7f, 0xf8,
+    0x35, 0x97, 0xfe, 0xc1, 0xc4, 0xa3, 0xd8, 0x07, 0x59, 0x7f, 0x3c, 0x83,
+    0x27, 0x1a, 0xcb, 0xff, 0xfe, 0xf0, 0x5e, 0x7d, 0x47, 0x9d, 0xb9, 0xcc,
+    0x35, 0xc8, 0x0b, 0x2f, 0xcd, 0x3f, 0x38, 0xeb, 0x28, 0x68, 0x8e, 0xf3,
+    0x35, 0xff, 0xf7, 0xf9, 0xc8, 0xc2, 0x1f, 0xa3, 0xd1, 0xc5, 0x97, 0x8c,
+    0x30, 0xc4, 0x97, 0xef, 0x67, 0x6f, 0xa4, 0x82, 0xcd, 0x05, 0xff, 0xfe,
+    0x9b, 0x51, 0xbf, 0x61, 0xaf, 0xb0, 0x49, 0xb9, 0xb3, 0x3a, 0xfa, 0xca,
+    0x84, 0xce, 0x9c, 0x8f, 0xed, 0xc2, 0x1d, 0x5f, 0xf7, 0x98, 0xcf, 0xcd,
+    0xa8, 0xfa, 0xcb, 0xff, 0x37, 0xc3, 0x9f, 0x73, 0xe1, 0x2c, 0xa9, 0x1f,
+    0xbe, 0x8e, 0xef, 0xfa, 0x01, 0xfc, 0x29, 0x67, 0x16, 0x5f, 0xf6, 0x01,
+    0xc8, 0x12, 0x36, 0x4b, 0x29, 0x91, 0x25, 0xe2, 0x22, 0x37, 0xa9, 0xd7,
+    0x19, 0xbb, 0x44, 0xd2, 0x79, 0xcb, 0x80, 0x78, 0x51, 0xfa, 0xfe, 0x34,
+    0x6b, 0x9f, 0xeb, 0x2f, 0x73, 0x27, 0x59, 0x71, 0x4e, 0x03, 0x67, 0xf1,
+    0x6a, 0x59, 0x50, 0x6e, 0x0e, 0x5b, 0x4b, 0x29, 0x65, 0xb8, 0x61, 0x6d,
+    0xba, 0x17, 0x7e, 0x76, 0x9c, 0x9d, 0x65, 0xff, 0xf3, 0x76, 0xc3, 0xe4,
+    0x79, 0xc8, 0x39, 0xe5, 0x95, 0x24, 0x4f, 0x70, 0xab, 0xe4, 0xd7, 0xfe,
+    0x3c, 0x75, 0xc2, 0xc9, 0xc4, 0x92, 0xcb, 0xff, 0xfc, 0xde, 0x72, 0xea,
+    0x42, 0x4a, 0x0a, 0x4e, 0x7c, 0x1a, 0xcb, 0xff, 0xd9, 0x9e, 0x1f, 0xa3,
+    0x99, 0xe6, 0x02, 0xcb, 0xf4, 0xd2, 0x8d, 0x71, 0x65, 0xfe, 0xc2, 0x0c,
+    0xb9, 0x3b, 0xac, 0xb1, 0xbb, 0x0f, 0x70, 0x65, 0x37, 0xfe, 0x6f, 0xce,
+    0x1e, 0x6c, 0xd6, 0xa1, 0x65, 0x42, 0x7c, 0x53, 0x98, 0x49, 0x04, 0x6c,
+    0x0d, 0x0a, 0x4f, 0x95, 0xdf, 0x6c, 0x6f, 0x05, 0x65, 0xfb, 0x25, 0xe8,
+    0xd2, 0xcb, 0xe3, 0x76, 0x79, 0x96, 0x57, 0x67, 0xe1, 0xb8, 0x49, 0xa2,
+    0x7b, 0xf3, 0x78, 0xd8, 0xe9, 0x65, 0xfb, 0x06, 0x51, 0xd2, 0xcb, 0x7e,
+    0x0f, 0x40, 0x8a, 0x6f, 0xff, 0xff, 0xdd, 0x7c, 0xa0, 0xfc, 0x1f, 0xa3,
+    0x99, 0x26, 0x34, 0xd7, 0xf9, 0x41, 0xf8, 0xb2, 0xff, 0x02, 0x4d, 0xfe,
+    0x08, 0x75, 0x97, 0xfe, 0xe3, 0xcb, 0x99, 0xdc, 0x1d, 0x96, 0x56, 0x8f,
+    0xcf, 0xe6, 0xb7, 0xfd, 0xdf, 0x98, 0x00, 0x8d, 0x49, 0x65, 0xf6, 0xa7,
+    0x69, 0xd6, 0x5d, 0xd1, 0x6c, 0x3d, 0xec, 0x3a, 0xa8, 0x54, 0x9e, 0xd0,
+    0x83, 0x72, 0x60, 0xc3, 0xdc, 0x48, 0x40, 0x5f, 0xf7, 0x50, 0xc7, 0xc2,
+    0xcd, 0xc5, 0x97, 0xbe, 0xfd, 0xac, 0xbf, 0xfd, 0x2e, 0x60, 0xf3, 0xcc,
+    0xff, 0xf4, 0x2c, 0xa9, 0xd1, 0x3f, 0xd9, 0xd7, 0x43, 0xb7, 0xe9, 0xfd,
+    0x01, 0xc5, 0x97, 0xff, 0xd2, 0x83, 0xea, 0x1a, 0x4f, 0xc7, 0x20, 0x2c,
+    0xbf, 0x9b, 0x98, 0x31, 0x31, 0x65, 0xfb, 0x75, 0x8b, 0x37, 0xac, 0xbf,
+    0xb0, 0x6c, 0x1e, 0xfd, 0xd9, 0xec, 0x39, 0x6d, 0xfd, 0xc9, 0x31, 0xde,
+    0x4b, 0x2a, 0x13, 0x3f, 0xe8, 0xa3, 0x50, 0xa5, 0x02, 0x2d, 0xfe, 0xe1,
+    0x66, 0xff, 0x3c, 0x96, 0x5e, 0xe4, 0xb7, 0xac, 0xa6, 0x3d, 0x3d, 0xc3,
+    0x4b, 0xff, 0xd1, 0x38, 0x9e, 0x8e, 0xbf, 0x93, 0x90, 0xd6, 0x56, 0x2a,
+    0x79, 0x68, 0xdc, 0x9e, 0x12, 0xc4, 0x49, 0x7f, 0x80, 0x77, 0x01, 0xdc,
+    0x0b, 0x2f, 0xfe, 0x79, 0x60, 0xc9, 0x9f, 0xd0, 0x75, 0x97, 0x3f, 0x96,
+    0x57, 0x8f, 0x5f, 0xe8, 0x37, 0x19, 0xda, 0xcb, 0xfe, 0x1b, 0x89, 0xa2,
+    0x68, 0x35, 0x65, 0xf4, 0x61, 0x7c, 0x52, 0x7a, 0x43, 0x19, 0xbf, 0xde,
+    0xcd, 0xfb, 0x39, 0x2e, 0xd6, 0x57, 0x0f, 0xd3, 0xe7, 0x75, 0xf4, 0xc2,
+    0x83, 0x0e, 0x8b, 0xff, 0xc5, 0x9f, 0x69, 0x39, 0x67, 0xfc, 0xcb, 0x2f,
+    0xe2, 0x7e, 0xa4, 0xd8, 0xb2, 0xff, 0x10, 0x0b, 0x3f, 0xec, 0xd8, 0x7e,
+    0x5e, 0x46, 0xbf, 0x8b, 0x60, 0x9a, 0xf3, 0xac, 0xbf, 0xf0, 0x5e, 0x5b,
+    0x21, 0x87, 0x87, 0x59, 0x4c, 0x8b, 0x97, 0x4a, 0x23, 0x0b, 0xff, 0x69,
+    0x81, 0x3f, 0xa3, 0x81, 0xe2, 0xcb, 0xf6, 0x69, 0xfa, 0x31, 0x65, 0xa4,
+    0xb2, 0xff, 0xfc, 0x61, 0x60, 0xf4, 0xc1, 0x9c, 0x7e, 0x82, 0x9d, 0x65,
+    0xa7, 0x83, 0xe8, 0xc1, 0x1a, 0x9d, 0x17, 0x1c, 0x84, 0x8d, 0xfe, 0x98,
+    0x9c, 0xcf, 0xe7, 0x96, 0x5e, 0xf6, 0x76, 0xb2, 0xf1, 0x86, 0x18, 0x92,
+    0xfe, 0x04, 0x16, 0x75, 0xf4, 0x82, 0xcd, 0x05, 0x6c, 0x45, 0x86, 0xd9,
+    0xa0, 0x87, 0xb7, 0xff, 0xf0, 0xaf, 0x67, 0x7e, 0x61, 0x8f, 0x0c, 0xd9,
+    0xfe, 0x64, 0xeb, 0x2b, 0xc8, 0x9d, 0x09, 0xb5, 0x42, 0xa9, 0x16, 0x87,
+    0xc3, 0xc6, 0xed, 0x7f, 0xd9, 0xbf, 0x18, 0x6e, 0xe6, 0xac, 0xbf, 0xff,
+    0x37, 0xfd, 0x1c, 0xc6, 0xff, 0x18, 0xba, 0x92, 0xca, 0xf2, 0x23, 0x45,
+    0x67, 0x37, 0xe8, 0xf7, 0x23, 0x4b, 0x2f, 0xf8, 0x48, 0xe6, 0x18, 0x21,
+    0x7d, 0x65, 0x4e, 0xde, 0x60, 0xca, 0x70, 0x38, 0x70, 0xdc, 0xc2, 0xee,
+    0xe3, 0x32, 0xea, 0x12, 0x4d, 0x39, 0x11, 0x34, 0x37, 0xf5, 0x2a, 0xd8,
+    0xf2, 0xc6, 0xfd, 0x2d, 0xc5, 0xd1, 0x8a, 0x39, 0x4e, 0x46, 0xa9, 0xf9,
+    0x57, 0xc1, 0x86, 0x3e, 0xf2, 0x71, 0x09, 0xef, 0xf9, 0x8a, 0x77, 0x2f,
+    0xe1, 0xd6, 0x5d, 0x00, 0x59, 0x58, 0x79, 0xbf, 0x37, 0xbf, 0xf8, 0xd1,
+    0x3e, 0xdc, 0x2c, 0xde, 0xc3, 0x59, 0x7f, 0x16, 0x0f, 0xce, 0x62, 0xca,
+    0xd1, 0xfa, 0x1d, 0x1e, 0xff, 0xff, 0xc5, 0x8c, 0x0d, 0x9e, 0x7f, 0xfc,
+    0x33, 0xec, 0x13, 0x5a, 0xc9, 0xd6, 0x5e, 0x27, 0x3a, 0xcb, 0xff, 0x71,
+    0xb4, 0xfe, 0x6e, 0x44, 0x96, 0x5f, 0xc3, 0xf6, 0x7f, 0x6f, 0x16, 0x59,
+    0xa4, 0x8f, 0xbf, 0x39, 0xfc, 0x6c, 0xc3, 0xda, 0x84, 0xd8, 0x3d, 0x18,
+    0xed, 0xfe, 0x23, 0x78, 0xda, 0x79, 0x2c, 0xbe, 0x27, 0xeb, 0xeb, 0x2f,
+    0x61, 0x01, 0x65, 0xfd, 0xdc, 0x74, 0x50, 0x62, 0xcb, 0xfd, 0x21, 0xf8,
+    0x27, 0x1e, 0x2c, 0xbc, 0x26, 0xde, 0x2c, 0xac, 0x3d, 0x40, 0x1a, 0x5f,
+    0x67, 0xe6, 0x92, 0xcb, 0xff, 0xb7, 0x4a, 0x37, 0x78, 0xe4, 0x20, 0x38,
+    0xb2, 0xbc, 0x7d, 0xae, 0x47, 0x7f, 0xec, 0xfc, 0x6b, 0x9e, 0x82, 0xfa,
+    0xe2, 0x08, 0x5f, 0xd9, 0xae, 0xdd, 0xfb, 0x54, 0x41, 0x01, 0x67, 0x95,
+    0x7a, 0x06, 0xcb, 0x2a, 0x0f, 0xa7, 0x89, 0xd7, 0xfe, 0x22, 0xc3, 0x5f,
+    0x0e, 0xe4, 0xb2, 0xed, 0xe3, 0x59, 0x7b, 0x7c, 0x1d, 0x65, 0xf7, 0x5c,
+    0xcd, 0x2c, 0xbf, 0x4f, 0x9a, 0x89, 0x2c, 0xbe, 0xd6, 0x98, 0xc5, 0x94,
+    0x73, 0xcb, 0xf1, 0x45, 0x42, 0x24, 0x1d, 0xba, 0xfe, 0xdc, 0x19, 0x8e,
+    0x52, 0x59, 0x50, 0x9a, 0xa4, 0xe7, 0x78, 0x32, 0x50, 0xae, 0x09, 0x0d,
+    0xff, 0xff, 0xe8, 0x2e, 0xf9, 0x05, 0xfe, 0x60, 0x4e, 0x27, 0x1f, 0x51,
+    0xde, 0x12, 0xcb, 0xff, 0xd3, 0x49, 0x8b, 0xf0, 0x09, 0x89, 0xa6, 0x59,
+    0x71, 0x4c, 0xb2, 0xd0, 0x33, 0xe2, 0xc4, 0xba, 0x85, 0xd1, 0x79, 0xcc,
+    0xcd, 0x22, 0xec, 0x6f, 0x50, 0x83, 0xf4, 0x23, 0x81, 0x0d, 0x42, 0x8d,
+    0xd7, 0xe9, 0xdb, 0xe1, 0xb3, 0x69, 0x2c, 0xbd, 0x1a, 0x02, 0xcb, 0x78,
+    0x66, 0xb5, 0x84, 0x6f, 0xef, 0x36, 0x8b, 0x27, 0x59, 0x77, 0x3c, 0xb2,
+    0xb4, 0x78, 0x80, 0x2d, 0xbf, 0x6a, 0x3b, 0xc2, 0x59, 0x58, 0x79, 0x2e,
+    0x45, 0x7f, 0x7b, 0x3f, 0xf6, 0x3a, 0xcb, 0xff, 0xb8, 0x32, 0x69, 0xc4,
+    0xd1, 0x46, 0x2c, 0xbf, 0xbe, 0x26, 0x79, 0xfa, 0x59, 0x5d, 0x22, 0x83,
+    0xc5, 0xa4, 0x89, 0x7f, 0xc5, 0x3e, 0x68, 0x04, 0x10, 0x2c, 0xbf, 0xb3,
+    0xaf, 0xeb, 0x50, 0xb2, 0xff, 0xee, 0x13, 0xfd, 0xce, 0x24, 0x4f, 0x8b,
+    0x28, 0x67, 0xe5, 0xc2, 0xea, 0x84, 0x7e, 0xb1, 0x80, 0x61, 0x57, 0x7f,
+    0xce, 0xdf, 0x73, 0xb9, 0x01, 0x65, 0xed, 0xfe, 0xc5, 0x96, 0xef, 0xc7,
+    0xa8, 0x21, 0xb5, 0xf0, 0x7f, 0x04, 0xb2, 0xb0, 0xf2, 0xf8, 0x55, 0x7e,
+    0xde, 0x3f, 0x47, 0x16, 0x58, 0xeb, 0x2f, 0xf4, 0x7c, 0x7e, 0x0b, 0xf1,
+    0x60, 0x85, 0x8d, 0xff, 0x4e, 0xf2, 0x82, 0xfe, 0xde, 0x2c, 0xbf, 0xfb,
+    0x3b, 0xf4, 0x7b, 0x35, 0xa8, 0x35, 0x65, 0xc0, 0x85, 0x97, 0x10, 0xf4,
+    0x7b, 0x60, 0x45, 0xbe, 0x28, 0xe8, 0x0b, 0x2a, 0x11, 0xca, 0xd0, 0x96,
+    0x10, 0xb6, 0xe8, 0x35, 0x65, 0xfe, 0xcd, 0x30, 0x0e, 0xf2, 0x59, 0x73,
+    0x12, 0xcb, 0xfe, 0x82, 0x34, 0x6d, 0x20, 0xe9, 0x65, 0x8c, 0x59, 0x43,
+    0x3e, 0x03, 0x8a, 0x88, 0x73, 0x78, 0x83, 0x3a, 0xcb, 0xd3, 0x94, 0x2c,
+    0xbf, 0x79, 0xe5, 0x84, 0xb2, 0xfe, 0x6f, 0x96, 0x79, 0x96, 0x5c, 0xd3,
+    0x2c, 0xbe, 0xdd, 0x8d, 0x1a, 0xb2, 0xde, 0xd8, 0x88, 0xe8, 0x26, 0x72,
+    0xbd, 0xd1, 0x7b, 0xfe, 0x8e, 0x79, 0xb5, 0xa7, 0x92, 0xca, 0xc3, 0xfe,
+    0x24, 0x6b, 0x9c, 0xcd, 0x8a, 0x8f, 0x86, 0x2f, 0x90, 0x92, 0xf1, 0x83,
+    0x8e, 0xfe, 0x32, 0x8b, 0xfa, 0x27, 0xff, 0x33, 0xeb, 0x2a, 0x17, 0xc8,
+    0xe5, 0x1d, 0xee, 0x43, 0x49, 0x88, 0x74, 0x77, 0xe8, 0xca, 0x0a, 0x53,
+    0x91, 0x8e, 0x17, 0xf7, 0x18, 0x63, 0xc2, 0x59, 0x7f, 0xff, 0xf6, 0x7e,
+    0x0e, 0x3c, 0xfc, 0x61, 0x48, 0xb3, 0xa9, 0x46, 0x7d, 0x65, 0xff, 0xfb,
+    0xd9, 0xce, 0x66, 0x07, 0x53, 0xe0, 0x4b, 0xeb, 0x28, 0x91, 0x87, 0xf6,
+    0xeb, 0xfe, 0xf4, 0x6b, 0xe5, 0x19, 0xd2, 0xcb, 0xff, 0xfe, 0x69, 0xe2,
+    0x5c, 0xd6, 0x9b, 0xa9, 0xa4, 0xfa, 0x3e, 0x74, 0xb2, 0xff, 0x43, 0xce,
+    0xfa, 0x71, 0x16, 0x5e, 0xf6, 0x10, 0xd1, 0xab, 0xe3, 0x8f, 0xb5, 0x56,
+    0x2a, 0x26, 0x68, 0x77, 0xfe, 0x1e, 0xf7, 0xe8, 0xd4, 0xdc, 0x9d, 0x65,
+    0xff, 0x7a, 0x33, 0x52, 0xe0, 0x4e, 0xb2, 0xa7, 0x3e, 0x3e, 0xca, 0xae,
+    0x6e, 0x2c, 0xbf, 0xec, 0x9d, 0xfe, 0x01, 0x0a, 0x4b, 0x2f, 0x44, 0x8d,
+    0x59, 0x7e, 0xce, 0x4f, 0x86, 0x2c, 0xb9, 0xbb, 0x59, 0x6f, 0xec, 0x3d,
+    0xd9, 0x0e, 0xed, 0x94, 0xdf, 0xfb, 0xfe, 0x79, 0x30, 0xfd, 0x12, 0x59,
+    0x4e, 0x7f, 0x04, 0x75, 0x7f, 0x08, 0x7e, 0x18, 0xfd, 0x2c, 0xa8, 0x54,
+    0x6f, 0x90, 0x9d, 0x34, 0x93, 0x42, 0xcf, 0x18, 0x7f, 0xc8, 0x2f, 0xf8,
+    0x4f, 0xb7, 0xb0, 0xb3, 0x8b, 0x2f, 0x4a, 0x58, 0xb2, 0xe8, 0x11, 0x65,
+    0x74, 0x6c, 0xdc, 0x72, 0xff, 0x44, 0x84, 0xe0, 0x04, 0xed, 0x65, 0x31,
+    0xec, 0x7c, 0x86, 0xec, 0x29, 0x23, 0x90, 0x70, 0xc3, 0xbd, 0xac, 0xf2,
+    0xcb, 0xdc, 0x63, 0xac, 0xad, 0x1b, 0x8f, 0x8e, 0x5d, 0x9d, 0x2c, 0xb9,
+    0xa7, 0x59, 0x50, 0x79, 0xe2, 0x10, 0xee, 0x8b, 0xdf, 0xee, 0x16, 0x1c,
+    0xed, 0xf5, 0x96, 0x14, 0xac, 0xbf, 0xf3, 0x41, 0x6c, 0x72, 0x93, 0x1d,
+    0x65, 0x61, 0xe9, 0x78, 0x56, 0xf9, 0xa6, 0x63, 0x16, 0x5f, 0xf9, 0xfa,
+    0x13, 0xed, 0xa8, 0x08, 0xad, 0x65, 0xc2, 0x4e, 0xb2, 0x8e, 0x7b, 0xbf,
+    0x44, 0xbf, 0x3f, 0x0a, 0x26, 0x59, 0x76, 0xfd, 0x2c, 0xbf, 0xff, 0x06,
+    0x72, 0x8c, 0xf0, 0xb8, 0xfe, 0x78, 0x3a, 0x59, 0x7b, 0x82, 0x73, 0x62,
+    0x6b, 0x43, 0x21, 0xc8, 0x40, 0x1a, 0x44, 0x44, 0xe2, 0x0c, 0xd7, 0x6a,
+    0x94, 0x3f, 0x1e, 0xf5, 0xc4, 0x62, 0xcb, 0xf7, 0x0f, 0x9f, 0xe2, 0xcb,
+    0xf8, 0x1a, 0x8e, 0xf0, 0x96, 0x5f, 0xf8, 0xdc, 0xfb, 0x7b, 0x3f, 0x1a,
+    0x59, 0x50, 0x7d, 0x6c, 0x5b, 0x7e, 0x79, 0x13, 0x42, 0xcb, 0xf3, 0x97,
+    0xf0, 0x96, 0x5f, 0xd8, 0x7c, 0xc2, 0x35, 0x65, 0xfe, 0x7f, 0xf3, 0x37,
+    0xf9, 0x96, 0x58, 0xd1, 0x9f, 0x01, 0x16, 0x54, 0x22, 0xb5, 0xe1, 0x0b,
+    0x7f, 0xc4, 0xe6, 0x4d, 0x27, 0xd4, 0x96, 0x5f, 0xcd, 0xac, 0xdf, 0x1b,
+    0x8b, 0x2a, 0x63, 0xeb, 0xf1, 0xd5, 0xfc, 0xda, 0xd4, 0x61, 0x2c, 0xbf,
+    0xe8, 0x97, 0x33, 0xb2, 0x8d, 0x2c, 0xa3, 0x4f, 0x8f, 0x45, 0x76, 0x65,
+    0x97, 0xf7, 0x1b, 0x5d, 0xfb, 0x16, 0x5e, 0x27, 0x37, 0x0f, 0x87, 0xb2,
+    0x3e, 0x84, 0x2a, 0x17, 0xaf, 0x25, 0x0b, 0x9c, 0x95, 0x05, 0xd9, 0x63,
+    0x0b, 0xea, 0x12, 0x67, 0x20, 0x28, 0x69, 0x72, 0x12, 0x21, 0x87, 0x3d,
+    0xff, 0xf4, 0xf9, 0xa9, 0xdb, 0xf2, 0xcd, 0x69, 0xe4, 0xb2, 0xf7, 0x6c,
+    0x35, 0x97, 0xff, 0x6b, 0x0e, 0xfd, 0x6e, 0xc7, 0x67, 0x3a, 0xcb, 0xff,
+    0xfd, 0xc6, 0xe7, 0x23, 0x9d, 0x93, 0xcf, 0x05, 0x13, 0x71, 0x65, 0x62,
+    0x63, 0x1d, 0x28, 0xb8, 0xef, 0xd2, 0x6f, 0xde, 0x6d, 0xb6, 0x35, 0x65,
+    0xf6, 0x01, 0xb7, 0xac, 0xbe, 0x00, 0x02, 0x05, 0x95, 0xd9, 0xf8, 0x91,
+    0x58, 0x84, 0x77, 0xc1, 0xd7, 0xd9, 0x65, 0xf8, 0xa5, 0xc9, 0xc0, 0xb2,
+    0xff, 0xfe, 0x97, 0xda, 0x6e, 0xfc, 0xdd, 0x7c, 0x42, 0xcd, 0xf8, 0xb2,
+    0xff, 0xe0, 0x47, 0x0f, 0x0d, 0xad, 0x31, 0x8b, 0x2f, 0x3b, 0xc9, 0x65,
+    0xfe, 0x6f, 0xb4, 0xb3, 0xaf, 0xac, 0xa1, 0xa6, 0x7b, 0x84, 0x5d, 0x14,
+    0xb3, 0x00, 0x11, 0x37, 0x46, 0xef, 0xc7, 0x6f, 0xfe, 0x16, 0x5e, 0x6c,
+    0x31, 0x65, 0xf3, 0x73, 0x06, 0xc7, 0x86, 0x44, 0xf7, 0xf1, 0x73, 0x0f,
+    0x1b, 0x8b, 0x2f, 0xfe, 0xce, 0xa5, 0x9e, 0x6d, 0x13, 0x42, 0xcb, 0xfe,
+    0x88, 0xe7, 0x1b, 0x58, 0x75, 0x95, 0x23, 0xf9, 0x1a, 0x15, 0xf6, 0xe7,
+    0xb2, 0x75, 0x97, 0xfa, 0x07, 0x9f, 0x6f, 0x05, 0x65, 0x41, 0xec, 0x0c,
+    0x9a, 0xff, 0xd2, 0xfb, 0x4f, 0xa8, 0x93, 0xe9, 0x65, 0xf1, 0xad, 0xd7,
+    0x16, 0x54, 0x27, 0x4d, 0x34, 0x2a, 0x0e, 0xf4, 0xe4, 0x3f, 0x3f, 0xbf,
+    0xf7, 0xc4, 0x04, 0x09, 0x00, 0x80, 0x2c, 0xbf, 0xe6, 0xd4, 0xe1, 0x06,
+    0xc8, 0xdc, 0x59, 0x7f, 0xfc, 0x4c, 0x69, 0xb0, 0x27, 0xdb, 0xcc, 0x5f,
+    0x59, 0x52, 0x44, 0x79, 0xcf, 0xef, 0xff, 0xc0, 0xe7, 0x9b, 0x0e, 0xfd,
+    0x73, 0xfe, 0x0f, 0x4b, 0x2f, 0xe7, 0xe3, 0x14, 0x71, 0x65, 0xde, 0x75,
+    0x97, 0xc3, 0x72, 0x07, 0x8f, 0x04, 0x56, 0x57, 0x58, 0x8d, 0x50, 0xc2,
+    0x66, 0xff, 0xff, 0xc7, 0x72, 0x04, 0x9b, 0x81, 0x3f, 0x9a, 0x3f, 0xe0,
+    0xb9, 0xd6, 0x5f, 0x72, 0x53, 0xe2, 0xcb, 0xff, 0xb0, 0xcd, 0x43, 0x16,
+    0x00, 0xec, 0xb2, 0xe2, 0x85, 0x97, 0xff, 0x83, 0xf9, 0x30, 0x3c, 0xed,
+    0xf7, 0x3a, 0xca, 0xf1, 0xef, 0x10, 0xad, 0xdb, 0x37, 0x16, 0x5f, 0xff,
+    0x9d, 0xbe, 0xc3, 0xc1, 0xe7, 0xd8, 0xed, 0xa5, 0x97, 0xd2, 0xe4, 0x1d,
+    0x65, 0xff, 0xe8, 0xec, 0x78, 0x27, 0xdb, 0x50, 0x11, 0x5a, 0xcb, 0xc1,
+    0xc1, 0xac, 0xbd, 0xa7, 0xe6, 0xc4, 0xf7, 0xe7, 0x23, 0xc8, 0x50, 0x68,
+    0x87, 0xc3, 0x8e, 0xa4, 0x44, 0x5b, 0x69, 0xf6, 0xfc, 0x2b, 0xf4, 0x94,
+    0x3e, 0x1c, 0x9c, 0x32, 0x92, 0xaf, 0xfd, 0x1c, 0xef, 0xcc, 0x38, 0xcd,
+    0x2c, 0xae, 0x97, 0x54, 0x1a, 0x73, 0x0f, 0x49, 0xf7, 0x4a, 0x16, 0x5f,
+    0xfb, 0xd1, 0xec, 0xe8, 0x19, 0xfe, 0x2c, 0xbd, 0x33, 0x1d, 0x65, 0xa7,
+    0x19, 0xee, 0x61, 0xfd, 0x3a, 0x26, 0x82, 0xe5, 0x7f, 0xff, 0xfb, 0xbd,
+    0x93, 0x7a, 0x35, 0x3e, 0xce, 0x01, 0xc8, 0x1b, 0x33, 0xb8, 0xff, 0x16,
+    0x54, 0x32, 0xeb, 0x07, 0x0a, 0xec, 0x8d, 0xb7, 0xb8, 0x4e, 0xb4, 0x7b,
+    0x8f, 0x3b, 0x3e, 0x50, 0xd5, 0x09, 0x15, 0xed, 0x6a, 0x16, 0x5f, 0xf4,
+    0xed, 0x3f, 0x30, 0xef, 0xe5, 0x97, 0xfd, 0x28, 0x1b, 0x0f, 0x1f, 0xcb,
+    0x2c, 0xda, 0x3f, 0x1f, 0x9d, 0x5f, 0xda, 0x89, 0xd8, 0xbe, 0xb2, 0xe1,
+    0x0e, 0xb2, 0xed, 0xaf, 0x6a, 0x59, 0x43, 0x37, 0x3c, 0x18, 0xbd, 0xb4,
+    0x85, 0x56, 0xd4, 0xb2, 0xfc, 0x50, 0x3c, 0x99, 0x65, 0xf7, 0x03, 0xa3,
+    0x56, 0x5f, 0xa3, 0xdf, 0x89, 0x2c, 0xbe, 0x18, 0x7f, 0xcd, 0xad, 0x14,
+    0x10, 0x5d, 0xd1, 0x38, 0x09, 0x2f, 0x78, 0x4d, 0x2c, 0xbf, 0xd0, 0x4f,
+    0xe0, 0x94, 0xeb, 0x2f, 0xff, 0xde, 0x6d, 0x79, 0xe0, 0x8d, 0x79, 0x9d,
+    0xe7, 0x59, 0x7d, 0x8c, 0x0e, 0x2c, 0xbe, 0x6e, 0x44, 0xb0, 0xfd, 0xb4,
+    0xab, 0x7a, 0x71, 0xc2, 0xcb, 0xda, 0x7e, 0xd6, 0x5e, 0x3c, 0x79, 0x65,
+    0xe8, 0x90, 0xa5, 0x65, 0x80, 0x33, 0xd9, 0xc1, 0xd2, 0x1c, 0xbf, 0xe8,
+    0xe4, 0x7f, 0x98, 0x52, 0x59, 0x7f, 0xff, 0xfb, 0x27, 0xe4, 0x1a, 0xfc,
+    0xfc, 0xb0, 0xd3, 0x73, 0xaf, 0xea, 0x33, 0xa5, 0x97, 0xb4, 0x52, 0x59,
+    0x7f, 0xc4, 0x0f, 0xb0, 0xf0, 0xa4, 0xb2, 0xd1, 0xb0, 0xf4, 0xdc, 0x72,
+    0xbc, 0x99, 0x77, 0x0d, 0xc3, 0x0c, 0xfb, 0xc2, 0xbf, 0x62, 0xca, 0x14,
+    0x2e, 0xaf, 0xca, 0x11, 0xa3, 0x27, 0xc6, 0x66, 0x86, 0x0c, 0xcb, 0x47,
+    0x1e, 0xf4, 0x2a, 0x1c, 0xdc, 0x9d, 0xbf, 0x1b, 0x08, 0x4d, 0xae, 0x13,
+    0x8b, 0x2f, 0xfd, 0xfe, 0x64, 0xce, 0x0e, 0x64, 0xeb, 0x2b, 0x47, 0xb0,
+    0x43, 0x17, 0xec, 0x33, 0xe2, 0x1d, 0x65, 0xff, 0xff, 0x70, 0x48, 0x00,
+    0xfd, 0x1a, 0xc2, 0x67, 0x97, 0x33, 0xeb, 0x2e, 0xe4, 0xeb, 0x2f, 0xe2,
+    0x83, 0x35, 0x07, 0x59, 0x43, 0x3c, 0x5c, 0x18, 0xad, 0x23, 0x2f, 0xf0,
+    0xaa, 0xbf, 0xdc, 0x0e, 0x81, 0x9e, 0x75, 0x97, 0xdc, 0x3b, 0xb2, 0xca,
+    0x91, 0xea, 0x7c, 0xce, 0xff, 0xf4, 0xb6, 0x6a, 0x38, 0xd0, 0x40, 0x04,
+    0x2c, 0xa8, 0x3e, 0xc7, 0x22, 0xbe, 0x73, 0xe0, 0xd6, 0x5f, 0xd8, 0x37,
+    0x27, 0xde, 0xb2, 0xbe, 0x79, 0xdb, 0xc8, 0x6f, 0xfb, 0xd1, 0xd7, 0xe3,
+    0xcf, 0xb8, 0xb2, 0x96, 0x5b, 0x7a, 0xca, 0xd8, 0x7b, 0x5b, 0x48, 0xf3,
+    0x6c, 0x2e, 0xdd, 0x2c, 0xbb, 0x0c, 0x59, 0x77, 0xfe, 0xc6, 0xa7, 0xe2,
+    0x55, 0x08, 0x8f, 0x66, 0x3b, 0xff, 0x39, 0x77, 0x9a, 0xed, 0xdf, 0xb5,
+    0x44, 0x22, 0xb4, 0xeb, 0x2f, 0x8d, 0x72, 0x02, 0xcb, 0xce, 0xdb, 0xab,
+    0x2a, 0x47, 0xa4, 0xc2, 0x5e, 0x22, 0xa8, 0x5c, 0x66, 0xc2, 0x16, 0x87,
+    0xa9, 0xe1, 0xd0, 0xed, 0xc0, 0x8c, 0x34, 0x24, 0x3b, 0xe1, 0x3d, 0x7b,
+    0x80, 0x75, 0x97, 0xf7, 0xbb, 0x6e, 0x60, 0xd6, 0x54, 0xe7, 0x95, 0xd8,
+    0xe5, 0xff, 0x69, 0xc7, 0x8d, 0xbd, 0xce, 0xb2, 0xff, 0xff, 0xfc, 0xc7,
+    0xce, 0x61, 0x07, 0xfe, 0xcd, 0xe3, 0x8f, 0x34, 0x7f, 0xc1, 0x73, 0xac,
+    0xbf, 0xb8, 0xfd, 0xf9, 0xa7, 0x59, 0x58, 0x98, 0x76, 0x89, 0x3c, 0x73,
+    0xf8, 0x41, 0x5f, 0x9b, 0x52, 0xdb, 0xfa, 0xcb, 0xff, 0x9f, 0x93, 0xc7,
+    0xb3, 0xb1, 0x36, 0xdd, 0x65, 0x1c, 0xfd, 0x08, 0xae, 0xff, 0xff, 0xf7,
+    0xb0, 0x3a, 0x37, 0xcd, 0xd4, 0x7c, 0x3e, 0x2c, 0xeb, 0xe1, 0x7e, 0x2c,
+    0xbf, 0xfb, 0x3a, 0x13, 0xec, 0x41, 0x96, 0x71, 0x65, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xfb, 0x0a, 0x72, 0x71, 0xc1, 0x4f, 0x1a, 0x1e, 0x16, 0x7f,
+    0x8d, 0xde, 0x10, 0x93, 0xe6, 0xa3, 0x84, 0xe6, 0xf3, 0x18, 0x00, 0x08,
+    0x09, 0xc7, 0x05, 0x3c, 0x69, 0x65, 0xf9, 0xf7, 0x73, 0xaf, 0xac, 0xbf,
+    0xa4, 0x59, 0x81, 0x15, 0xac, 0xbf, 0xcf, 0xf9, 0x66, 0xb3, 0x8b, 0x2a,
+    0x13, 0xda, 0xc4, 0x5f, 0x46, 0x10, 0xe5, 0x64, 0x61, 0x7e, 0xef, 0xe6,
+    0xb7, 0x6b, 0x2f, 0xff, 0x7a, 0x0b, 0xfb, 0x3c, 0xe3, 0xf3, 0xe9, 0x65,
+    0x39, 0xfb, 0x70, 0xae, 0xff, 0xce, 0x58, 0xda, 0x28, 0xea, 0x4b, 0x2f,
+    0xff, 0xfb, 0xe1, 0x9f, 0x3c, 0xdf, 0xf6, 0x1f, 0x35, 0x2c, 0xeb, 0xeb,
+    0x2f, 0xef, 0x37, 0xbd, 0x07, 0x59, 0x7e, 0x91, 0x46, 0x71, 0x65, 0xe7,
+    0x29, 0xfb, 0x3d, 0x3e, 0x8b, 0x6a, 0x48, 0xf0, 0xfc, 0x2e, 0xef, 0xff,
+    0xd0, 0x09, 0xa5, 0x13, 0x93, 0x9b, 0xc2, 0x89, 0x2c, 0xbf, 0xf0, 0x99,
+    0xe7, 0x38, 0xb3, 0x0c, 0x31, 0x65, 0xff, 0xfb, 0x3b, 0xf4, 0x10, 0xc9,
+    0xa7, 0xc2, 0x63, 0x56, 0x54, 0xe8, 0x99, 0x92, 0x2d, 0xff, 0xd3, 0x81,
+    0xba, 0xe7, 0x78, 0xc5, 0xda, 0xca, 0x73, 0xeb, 0x22, 0x4a, 0x92, 0x6f,
+    0x4f, 0x1a, 0xd5, 0xff, 0xfd, 0x31, 0x40, 0x39, 0xdf, 0x9b, 0x53, 0x14,
+    0x03, 0x8b, 0x2f, 0xff, 0xef, 0xf2, 0x0d, 0x93, 0x79, 0xcb, 0xf2, 0xcd,
+    0x62, 0xcb, 0xff, 0x37, 0x30, 0x7b, 0x1c, 0x1b, 0x78, 0xb2, 0xe0, 0xef,
+    0x59, 0x7f, 0xa0, 0xfd, 0x7e, 0x33, 0xa5, 0x97, 0xfe, 0xf3, 0x6f, 0xf3,
+    0xcb, 0x50, 0x6a, 0xca, 0xc4, 0xca, 0xbb, 0x5a, 0xd2, 0x17, 0x86, 0x7e,
+    0x69, 0x7f, 0xfe, 0xd7, 0x5f, 0x63, 0x39, 0xe6, 0xe8, 0x1a, 0x71, 0xac,
+    0xbf, 0x7d, 0x82, 0x46, 0xac, 0xa8, 0x44, 0x08, 0x56, 0x6f, 0xec, 0x33,
+    0x08, 0x20, 0x59, 0x7e, 0x96, 0x7e, 0x00, 0xb2, 0xe8, 0x3c, 0xe7, 0xa9,
+    0xd1, 0x6d, 0xff, 0xcd, 0xc2, 0x8f, 0xf3, 0x37, 0xb1, 0xab, 0x2f, 0xff,
+    0xfe, 0x01, 0xde, 0x5e, 0x76, 0xfb, 0x0f, 0x07, 0x9f, 0x63, 0xb6, 0x96,
+    0x57, 0x11, 0xc7, 0xf2, 0xf0, 0xa2, 0xdf, 0xfb, 0xcf, 0xbb, 0xdf, 0x98,
+    0xf1, 0xda, 0xcb, 0xc5, 0x06, 0x2c, 0xbc, 0x59, 0xcc, 0x3d, 0xf3, 0xa1,
+    0xdf, 0xa7, 0x3c, 0x0e, 0x16, 0x54, 0xec, 0xae, 0x49, 0x10, 0x8e, 0x52,
+    0xa1, 0xb0, 0xc3, 0xec, 0x87, 0xa8, 0xcb, 0x26, 0x8e, 0x8b, 0x45, 0x3e,
+    0x8e, 0x1f, 0x90, 0xcc, 0xfc, 0x6b, 0x3b, 0xe1, 0x1e, 0x21, 0x8d, 0xff,
+    0xa0, 0xd3, 0x60, 0xb3, 0xfe, 0x65, 0x97, 0xfa, 0x39, 0xc8, 0x9f, 0x0c,
+    0x59, 0x7f, 0xfc, 0x3f, 0x85, 0xfa, 0xf8, 0x30, 0x7b, 0x3c, 0xcb, 0x2f,
+    0xff, 0xb7, 0xbf, 0xbc, 0xc3, 0xcf, 0xf0, 0x25, 0xf5, 0x97, 0xdf, 0x20,
+    0xfd, 0x65, 0xc1, 0x25, 0x97, 0xb0, 0xf9, 0xa3, 0x71, 0xe2, 0x2a, 0x84,
+    0x5d, 0x7a, 0x11, 0x34, 0x34, 0xda, 0x1c, 0xd3, 0xf1, 0x86, 0xdf, 0x66,
+    0x8d, 0x65, 0x95, 0x0c, 0xe8, 0x4c, 0xa5, 0xcd, 0x34, 0x3b, 0x1e, 0x3a,
+    0x60, 0x9b, 0x5e, 0x30, 0xc3, 0x12, 0x5f, 0xf6, 0x01, 0xf5, 0x9b, 0xf0,
+    0x69, 0x05, 0x9a, 0x0b, 0x8c, 0x31, 0x25, 0xe3, 0x0c, 0x31, 0x25, 0xfc,
+    0xf3, 0x8f, 0xd1, 0xc4, 0x82, 0xcd, 0x05, 0x12, 0x31, 0x0c, 0x4b, 0xdb,
+    0x39, 0xbf, 0x76, 0xc3, 0x10, 0xe9, 0x05, 0x9b, 0x3b, 0xc6, 0x18, 0x62,
+    0x4b, 0xdc, 0x8d, 0x24, 0x16, 0x68, 0x2f, 0x9c, 0xba, 0xfa, 0xcb, 0x01,
+    0x91, 0x59, 0xf5, 0xc3, 0x0b, 0xae, 0xdb, 0xda, 0x96, 0x5f, 0xf3, 0x17,
+    0x65, 0x86, 0x38, 0x16, 0x5f, 0x8a, 0x24, 0xfd, 0xac, 0xbd, 0x93, 0x32,
+    0xca, 0x19, 0xe1, 0x88, 0x4f, 0x7e, 0xe0, 0x67, 0xdb, 0x25, 0x97, 0xe1,
+    0xb6, 0xf8, 0x1a, 0xcb, 0xec, 0x2c, 0xdc, 0x59, 0x5a, 0x3c, 0xc3, 0x94,
+    0xd3, 0x22, 0x68, 0x47, 0x8b, 0xff, 0xbc, 0xf2, 0x27, 0x36, 0x62, 0x69,
+    0x96, 0x5f, 0xc2, 0xac, 0xb0, 0xc7, 0x02, 0xcb, 0xfe, 0x9e, 0x3a, 0xe3,
+    0x16, 0x01, 0x65, 0xf3, 0xc9, 0x80, 0xb2, 0xb4, 0x7b, 0x5e, 0x39, 0xbf,
+    0x64, 0xe7, 0xc3, 0xac, 0xbf, 0xa2, 0x71, 0xfa, 0x38, 0xb2, 0xff, 0x46,
+    0x77, 0x9b, 0xd8, 0x6b, 0x2d, 0x9d, 0x9f, 0x11, 0x17, 0x50, 0xab, 0x4d,
+    0x83, 0x21, 0x1a, 0x44, 0x5b, 0x70, 0x8a, 0xbf, 0xbd, 0x9b, 0xf3, 0xfc,
+    0x59, 0x5d, 0xaa, 0x23, 0x04, 0x74, 0xbf, 0x4f, 0xa9, 0x2b, 0xd6, 0x18,
+    0xfe, 0x9e, 0xfd, 0x0b, 0xd2, 0x94, 0x8d, 0x7f, 0xbf, 0x2c, 0xf7, 0x9e,
+    0x4b, 0x2f, 0x99, 0xc8, 0x6b, 0x2e, 0x08, 0x16, 0x50, 0xcd, 0xb8, 0x08,
+    0x2f, 0xd1, 0x93, 0x36, 0x96, 0x54, 0xe7, 0x90, 0x44, 0x37, 0x4f, 0xf5,
+    0x95, 0x0b, 0xa9, 0xf9, 0x38, 0x18, 0x6a, 0xbb, 0xc2, 0xc8, 0x88, 0xaf,
+    0xb6, 0xfd, 0x9d, 0xac, 0xbe, 0x03, 0x17, 0xd6, 0x54, 0xe7, 0x8f, 0xc2,
+    0x6b, 0x85, 0x56, 0xd4, 0xb2, 0xf7, 0x23, 0xeb, 0x2e, 0x01, 0x8b, 0x2f,
+    0xdc, 0x09, 0x08, 0x75, 0x96, 0xe4, 0xc7, 0xba, 0xe3, 0x9f, 0x18, 0xac,
+    0x46, 0xbf, 0x44, 0x7f, 0x7f, 0xbf, 0x77, 0x1e, 0x83, 0xac, 0xb9, 0xfe,
+    0xb2, 0xfb, 0x71, 0xc8, 0x18, 0x6f, 0x88, 0xa2, 0xff, 0x61, 0xa6, 0xbc,
+    0xa4, 0x35, 0x97, 0xf3, 0xb8, 0xfe, 0x17, 0x59, 0x7c, 0x37, 0x20, 0x61,
+    0xf0, 0x91, 0xad, 0x62, 0x33, 0xc3, 0x09, 0x9b, 0xff, 0x81, 0xff, 0x44,
+    0xa4, 0xdc, 0xc1, 0xac, 0xbf, 0xf7, 0xf3, 0x51, 0xbf, 0xe4, 0xe0, 0x59,
+    0x74, 0xd2, 0x84, 0x41, 0xb2, 0x25, 0xff, 0x41, 0x48, 0x87, 0xe8, 0x9d,
+    0x65, 0xfc, 0x3c, 0xd6, 0xd9, 0xc6, 0xb2, 0xf7, 0x9a, 0x64, 0x95, 0xa3,
+    0xce, 0xe1, 0x8d, 0xff, 0x3f, 0x5f, 0xc9, 0x83, 0xa3, 0x56, 0x5b, 0xb6,
+    0x3d, 0xe0, 0x91, 0x5f, 0xe2, 0xce, 0xa5, 0xc6, 0x35, 0x65, 0xed, 0x06,
+    0x75, 0x97, 0x9f, 0x46, 0xac, 0xad, 0x1b, 0xb7, 0x1e, 0xb1, 0xab, 0x2f,
+    0xfe, 0xce, 0xfd, 0x1e, 0xcd, 0x6a, 0x0d, 0x59, 0x79, 0x81, 0xc8, 0x3d,
+    0x7d, 0x09, 0x56, 0xc4, 0xc6, 0x27, 0x6f, 0x27, 0x7b, 0xfe, 0xcc, 0xec,
+    0x11, 0x9d, 0x49, 0x65, 0xff, 0x83, 0xcc, 0x28, 0xf0, 0xc4, 0x3a, 0xcb,
+    0xff, 0xbf, 0xa0, 0xf3, 0xcf, 0x20, 0x30, 0xd6, 0x5f, 0x43, 0x9f, 0x7a,
+    0x4b, 0xda, 0xc1, 0x42, 0xcb, 0xff, 0xbc, 0xce, 0x00, 0x40, 0x23, 0xdc,
+    0x59, 0x7f, 0x7b, 0x0e, 0x77, 0x92, 0xcb, 0xc6, 0x18, 0x62, 0x4b, 0xfc,
+    0x5f, 0xf3, 0x41, 0x4e, 0x90, 0x59, 0xa0, 0xbe, 0x8d, 0x3f, 0x96, 0x5e,
+    0x80, 0x64, 0x91, 0x65, 0x89, 0xbf, 0x44, 0xac, 0x4d, 0x53, 0xe4, 0x02,
+    0x43, 0xd6, 0xfe, 0xcd, 0x9f, 0x70, 0x71, 0x65, 0x76, 0x9e, 0xe1, 0xe3,
+    0x77, 0xde, 0x6d, 0x7f, 0xce, 0x02, 0xc9, 0xa5, 0x1d, 0x2c, 0xa8, 0x55,
+    0x29, 0x92, 0x88, 0x58, 0xea, 0xff, 0x9c, 0x8b, 0x35, 0xa6, 0x99, 0x65,
+    0xfc, 0x42, 0x68, 0x83, 0x25, 0x95, 0x39, 0xf2, 0xb9, 0xbd, 0xff, 0xfd,
+    0x2f, 0x3c, 0xbb, 0xf3, 0x7e, 0x59, 0xef, 0x3c, 0x96, 0x5f, 0xa0, 0x11,
+    0xee, 0x2c, 0xac, 0x44, 0x18, 0x17, 0x2f, 0xfe, 0x10, 0xa1, 0x87, 0xec,
+    0x97, 0x99, 0x65, 0xff, 0x84, 0x8d, 0x03, 0xfe, 0x71, 0xb2, 0xcb, 0xff,
+    0xe7, 0xf8, 0x61, 0xa3, 0xae, 0xfd, 0x9d, 0x71, 0x65, 0xfb, 0x5a, 0x6f,
+    0xf1, 0x65, 0x6c, 0x47, 0xd8, 0xd0, 0xc0, 0x7e, 0x22, 0x8d, 0xff, 0xf0,
+    0x36, 0xf2, 0x39, 0xe8, 0xeb, 0xe6, 0x87, 0x4b, 0x2f, 0xfe, 0x9a, 0x41,
+    0x2f, 0xcb, 0x35, 0x9c, 0x59, 0x7f, 0xfe, 0x2e, 0xfc, 0xd3, 0x4a, 0x0b,
+    0xfa, 0xd4, 0x49, 0x67, 0x0f, 0x16, 0xff, 0xfe, 0x6e, 0x69, 0x9f, 0x50,
+    0xdf, 0xf6, 0x73, 0x98, 0xb2, 0xff, 0x64, 0x49, 0xbe, 0x50, 0xb2, 0xc0,
+    0xc4, 0x77, 0x9d, 0x9f, 0x6d, 0x62, 0xa1, 0x50, 0x0e, 0x20, 0x3c, 0x71,
+    0x37, 0xff, 0xf3, 0x80, 0xb0, 0xe4, 0xff, 0xe0, 0x9a, 0x68, 0x1a, 0xcb,
+    0xa5, 0xc5, 0x97, 0x44, 0x86, 0x7e, 0x0c, 0xb3, 0x50, 0xcc, 0xa7, 0x94,
+    0x67, 0xb9, 0x0a, 0xa3, 0x4b, 0xba, 0x87, 0x23, 0x46, 0x81, 0x31, 0x9e,
+    0x8e, 0x7d, 0x2b, 0x4d, 0xe1, 0x36, 0x08, 0x52, 0x94, 0xb1, 0xee, 0x42,
+    0x96, 0xff, 0xfe, 0xfb, 0x1f, 0x0b, 0xfc, 0x83, 0x78, 0x11, 0xf9, 0x96,
+    0x5f, 0x81, 0x8d, 0xe3, 0x56, 0x5f, 0xff, 0x67, 0x70, 0x4f, 0xfe, 0x0c,
+    0x2f, 0xa9, 0x2c, 0xae, 0x8f, 0xdc, 0xe5, 0x17, 0xdc, 0xf6, 0x71, 0x65,
+    0xf3, 0x7e, 0x3e, 0xb2, 0x98, 0xf0, 0xf4, 0x45, 0x7f, 0x41, 0x77, 0xb5,
+    0x8a, 0x9b, 0x42, 0xcb, 0xee, 0xbe, 0xd3, 0xac, 0xbf, 0x41, 0xf5, 0x1b,
+    0xd6, 0x5f, 0xfe, 0xfb, 0x19, 0xc2, 0x8f, 0xf3, 0x5a, 0x85, 0x97, 0xa5,
+    0x04, 0xb2, 0xf0, 0xe0, 0xd5, 0x97, 0xff, 0x47, 0x7f, 0x28, 0x33, 0x3f,
+    0xce, 0x2c, 0xbf, 0xf3, 0xfb, 0x51, 0xf6, 0xed, 0x86, 0xb2, 0xff, 0xbf,
+    0xec, 0x6d, 0x48, 0x43, 0xac, 0xbb, 0x00, 0xb2, 0xbc, 0x88, 0xee, 0x1f,
+    0x7c, 0xea, 0x99, 0x32, 0x0d, 0x0e, 0x82, 0x1a, 0x77, 0xff, 0xff, 0x13,
+    0x9e, 0x35, 0xd8, 0xfd, 0x1c, 0x0b, 0xb4, 0xb9, 0xe7, 0x92, 0xcb, 0xc1,
+    0xff, 0x16, 0x5f, 0x8c, 0x7f, 0x41, 0xd6, 0x5e, 0xee, 0x38, 0xb2, 0xff,
+    0xe1, 0x25, 0x9e, 0x7f, 0x36, 0xb5, 0x0b, 0x2a, 0x11, 0x13, 0x85, 0x00,
+    0x1d, 0xbe, 0x93, 0x90, 0x16, 0x5f, 0xfe, 0x6f, 0x87, 0x4f, 0xc9, 0x37,
+    0x22, 0x75, 0x96, 0xf6, 0x1f, 0x5b, 0x90, 0xde, 0xe6, 0xfc, 0x59, 0x74,
+    0x69, 0x65, 0x7c, 0xda, 0x6d, 0x8f, 0x5f, 0xd9, 0x3f, 0x37, 0x1b, 0xb5,
+    0x95, 0x07, 0xac, 0x44, 0x97, 0xe0, 0xe8, 0xdf, 0x32, 0xca, 0xd8, 0xbc,
+    0x8d, 0x10, 0xd2, 0x9d, 0x98, 0x64, 0x38, 0x7b, 0xd9, 0x27, 0x45, 0x2c,
+    0x95, 0xa8, 0xce, 0xdc, 0xd4, 0x0e, 0x25, 0x0a, 0x6e, 0x42, 0x67, 0xf0,
+    0xb0, 0xdb, 0x20, 0xb1, 0x8b, 0x2f, 0xf8, 0x82, 0xe6, 0x80, 0xf1, 0x25,
+    0x95, 0xa3, 0xcb, 0x00, 0x95, 0xfe, 0x27, 0x33, 0x09, 0xcd, 0x59, 0x7f,
+    0xf6, 0x7f, 0x82, 0x70, 0xe5, 0x1a, 0x85, 0x97, 0xb7, 0xe1, 0x0c, 0xfd,
+    0x8e, 0x65, 0x7f, 0xee, 0xe3, 0xfe, 0x6d, 0xf9, 0xd7, 0xd6, 0x5f, 0xfa,
+    0x34, 0x4f, 0x3c, 0x6a, 0x24, 0xb2, 0xb0, 0xff, 0xcc, 0x42, 0xa6, 0x46,
+    0xaf, 0xa1, 0x67, 0x7f, 0xff, 0xbc, 0xc6, 0x66, 0xeb, 0x1d, 0xff, 0xc0,
+    0xcb, 0x3a, 0xfa, 0xcb, 0xff, 0xb4, 0xc0, 0x13, 0xd0, 0x77, 0x7f, 0xac,
+    0xbf, 0xff, 0xa7, 0x1f, 0xa3, 0x99, 0xd7, 0x23, 0x5f, 0xe6, 0x4e, 0xb2,
+    0x86, 0x98, 0x3e, 0x99, 0x49, 0x12, 0xe8, 0x65, 0x95, 0x0a, 0xb8, 0x32,
+    0x36, 0xd7, 0x8c, 0xb8, 0x06, 0x17, 0xfd, 0x37, 0x7e, 0x63, 0xc6, 0x8d,
+    0x59, 0x7f, 0x9b, 0x53, 0x67, 0xe2, 0x65, 0x97, 0xf4, 0x7a, 0x3f, 0x1e,
+    0x59, 0x7d, 0xba, 0xc5, 0xda, 0xca, 0xc3, 0xd1, 0xdd, 0x2c, 0xbf, 0x4f,
+    0xb0, 0x31, 0x32, 0xcb, 0x49, 0x65, 0xfa, 0x5f, 0x6d, 0x76, 0xb2, 0xf0,
+    0x85, 0x32, 0xca, 0x91, 0xec, 0x74, 0x22, 0x02, 0x9a, 0xc4, 0xe6, 0x7b,
+    0x3c, 0xd4, 0x21, 0x5c, 0x93, 0x90, 0x84, 0xad, 0xa2, 0x14, 0x70, 0x91,
+    0x38, 0x83, 0x3c, 0xe1, 0x24, 0xa9, 0x36, 0xa3, 0xa4, 0xbb, 0x65, 0x7a,
+    0x92, 0x6c, 0x73, 0x5d, 0xc7, 0xea, 0xd3, 0xa8, 0x1b, 0x90, 0xd8, 0x9a,
+    0x7f, 0x5b, 0x53, 0x9c, 0xc7, 0xa4, 0x01, 0x7a, 0x9a, 0xde, 0xf3, 0xbe,
+    0x60, 0x9d, 0x7c, 0x2a, 0xc1, 0x8f, 0x93, 0xee, 0x1f, 0xa7, 0x0e, 0x06,
+    0x7c, 0xb4, 0xc9, 0xc1, 0x71, 0x23, 0xe1, 0xba, 0x0e, 0xb2, 0xf7, 0xb3,
+    0x8b, 0x2f, 0xbe, 0x01, 0x3b, 0x59, 0x7f, 0x98, 0xdf, 0xf5, 0xdb, 0x79,
+    0x65, 0x74, 0x7b, 0x64, 0x4b, 0x43, 0x44, 0xce, 0x3b, 0xde, 0xdd, 0x6d,
+    0xeb, 0x2e, 0x6f, 0x2c, 0xbe, 0xcc, 0x2f, 0xac, 0xba, 0x09, 0x65, 0x78,
+    0xf2, 0xf8, 0x2d, 0xbc, 0x82, 0xff, 0xfb, 0x08, 0x5f, 0xcd, 0x6e, 0xb9,
+    0xec, 0x03, 0xac, 0xbf, 0xfe, 0x1c, 0x3e, 0xbc, 0x63, 0x8f, 0x6d, 0xe7,
+    0xdb, 0x59, 0x52, 0x46, 0xd0, 0xcc, 0x7e, 0xa5, 0x79, 0xdc, 0xc5, 0x97,
+    0x02, 0x16, 0x5f, 0xbb, 0xcf, 0xf9, 0x96, 0x59, 0xc6, 0x7b, 0x4c, 0x38,
+    0x42, 0xd7, 0xdd, 0xf9, 0x85, 0x6b, 0x2f, 0xdb, 0x3a, 0x96, 0x7d, 0x65,
+    0xe6, 0xd4, 0x2c, 0xbf, 0x48, 0x4e, 0x46, 0x2c, 0xbb, 0x9e, 0xc3, 0xc3,
+    0x71, 0xbb, 0xf1, 0x9f, 0xe3, 0x9d, 0x65, 0xff, 0xff, 0x67, 0x9c, 0x4e,
+    0x61, 0xae, 0x40, 0x82, 0x89, 0xbd, 0x0b, 0x2d, 0x0b, 0x2f, 0xff, 0xd1,
+    0xaf, 0x41, 0xf7, 0x43, 0x05, 0x13, 0x7a, 0x16, 0x5f, 0x9b, 0x53, 0x47,
+    0xb4, 0x8c, 0xc0, 0x32, 0x90, 0x85, 0x49, 0x70, 0x9b, 0x08, 0xba, 0x8d,
+    0x18, 0xf0, 0x8a, 0x01, 0x91, 0x13, 0xfd, 0xb8, 0x25, 0x82, 0x43, 0xd6,
+    0xfd, 0x37, 0xa2, 0x7c, 0x59, 0x6f, 0x2c, 0xa9, 0x1b, 0xa1, 0x94, 0xdb,
+    0x69, 0x2c, 0xbf, 0xf7, 0xfc, 0xf2, 0xfc, 0xc5, 0x07, 0x59, 0x79, 0x87,
+    0x8b, 0x2f, 0xfc, 0xe4, 0x0d, 0x83, 0x0b, 0xea, 0x4b, 0x2f, 0x98, 0xa7,
+    0x85, 0x97, 0x67, 0x16, 0x5d, 0xa8, 0x59, 0x5e, 0x35, 0x9f, 0x16, 0xbf,
+    0xe2, 0x83, 0xb1, 0x61, 0xe1, 0x65, 0xff, 0xb5, 0xa6, 0x9b, 0x98, 0x6b,
+    0x69, 0x65, 0xef, 0x34, 0x96, 0x5c, 0xd0, 0xb2, 0xe6, 0x1e, 0x23, 0x1e,
+    0x62, 0x1e, 0x1a, 0xfd, 0x00, 0xc1, 0xca, 0xdc, 0x4e, 0xab, 0x48, 0x05,
+    0x18, 0xa5, 0xfc, 0x31, 0xc4, 0xdf, 0xc5, 0x97, 0xff, 0x17, 0xf9, 0xe7,
+    0x96, 0xcc, 0xeb, 0xeb, 0x28, 0x54, 0x55, 0x93, 0x02, 0xf2, 0x3f, 0xc8,
+    0xf1, 0x58, 0xe4, 0x25, 0xd7, 0xfc, 0xfb, 0x93, 0x72, 0x3c, 0xfb, 0x8b,
+    0x2f, 0xf8, 0x48, 0x98, 0x48, 0xd3, 0xcc, 0xb2, 0xfd, 0xcc, 0xcf, 0xe2,
+    0xcb, 0xd0, 0x53, 0xac, 0xbe, 0x6f, 0x31, 0xd6, 0x53, 0x1b, 0xd9, 0x87,
+    0x2f, 0xfd, 0xfe, 0x0a, 0x44, 0x83, 0x3c, 0x12, 0x59, 0x5d, 0x23, 0x27,
+    0xcc, 0x64, 0x43, 0x7b, 0x9f, 0x65, 0x97, 0x4c, 0x15, 0x97, 0x47, 0x70,
+    0x6d, 0x08, 0x72, 0xff, 0xa3, 0xfe, 0x70, 0x3f, 0x5c, 0x59, 0x43, 0x3e,
+    0x42, 0x2b, 0xbf, 0xfb, 0x27, 0x79, 0xb6, 0x7a, 0x39, 0xc7, 0x59, 0x7f,
+    0xf0, 0x5d, 0xa5, 0x05, 0xde, 0x75, 0xf5, 0x97, 0xc4, 0x17, 0xef, 0x62,
+    0x22, 0xf8, 0x8f, 0x71, 0xd9, 0x65, 0xff, 0x03, 0x67, 0x9b, 0xb0, 0xe8,
+    0x0b, 0x2f, 0xef, 0xf9, 0xb6, 0x17, 0x4b, 0x2f, 0x6e, 0xc6, 0xe2, 0xca,
+    0xd2, 0x23, 0xc8, 0xf7, 0x74, 0xc2, 0xed, 0xf0, 0xb2, 0xf4, 0xc1, 0xd2,
+    0xcb, 0xd8, 0xdf, 0x59, 0x7f, 0xcd, 0xac, 0xe8, 0x59, 0x86, 0x18, 0xb2,
+    0xbc, 0x7b, 0x4e, 0x37, 0x42, 0x94, 0xe2, 0x22, 0x14, 0xac, 0x64, 0xe3,
+    0x1c, 0x78, 0xbf, 0xfe, 0x28, 0x96, 0xc1, 0x3e, 0xc4, 0x19, 0x67, 0x16,
+    0x5f, 0xff, 0xbc, 0x1e, 0x1e, 0x3a, 0xef, 0xcc, 0x72, 0x69, 0xd6, 0x5f,
+    0xff, 0xf9, 0xf7, 0x0b, 0x18, 0x8b, 0x01, 0x9f, 0x83, 0xb7, 0xfc, 0xcb,
+    0x28, 0x6b, 0xb4, 0x19, 0x18, 0x2f, 0x70, 0xc8, 0x3c, 0x2b, 0x3d, 0x1e,
+    0x20, 0x14, 0x78, 0xa2, 0x15, 0x8b, 0xb8, 0x15, 0x97, 0xf7, 0x98, 0xfd,
+    0xb0, 0xd6, 0x5e, 0x03, 0x9d, 0x65, 0xd8, 0x05, 0x95, 0x06, 0xcb, 0x07,
+    0x2f, 0x3e, 0x1d, 0x65, 0x4e, 0x8b, 0x1c, 0x17, 0x26, 0x0d, 0xd1, 0xfb,
+    0xff, 0x9c, 0x4f, 0x44, 0xb9, 0xad, 0x67, 0x4b, 0x2c, 0x52, 0x44, 0x2f,
+    0x8f, 0xef, 0xa3, 0xc1, 0xd2, 0xcb, 0xfb, 0x85, 0x83, 0x27, 0x59, 0x44,
+    0x79, 0xa6, 0x11, 0x5d, 0xdb, 0x2c, 0xbf, 0x14, 0x4f, 0x1d, 0x2c, 0xbf,
+    0x9f, 0x47, 0x0e, 0x80, 0xb2, 0xed, 0x01, 0x65, 0x48, 0xf1, 0x58, 0xba,
+    0xdc, 0xed, 0x14, 0xac, 0x2e, 0xed, 0xb5, 0x09, 0xb8, 0xb3, 0xab, 0xc3,
+    0x1e, 0xfb, 0x85, 0x13, 0xac, 0xbf, 0xe9, 0xdf, 0xce, 0x32, 0x7e, 0xd6,
+    0x56, 0x8f, 0x6c, 0x88, 0xaf, 0xff, 0x8c, 0xce, 0xf9, 0x9f, 0x9b, 0x0d,
+    0x2c, 0x02, 0xca, 0xc3, 0xf3, 0x62, 0x1b, 0xfe, 0x23, 0x7c, 0xed, 0xf7,
+    0x3a, 0xcb, 0xfe, 0xc3, 0x33, 0x5d, 0xbb, 0xf6, 0xa8, 0xc3, 0x97, 0xff,
+    0x07, 0x83, 0xf3, 0x9f, 0xa9, 0x31, 0x2c, 0xbf, 0x7f, 0xce, 0x40, 0x59,
+    0x53, 0xa2, 0xcf, 0xc8, 0xee, 0x8b, 0x7f, 0xe7, 0xfe, 0x4c, 0xf0, 0x51,
+    0x32, 0xcb, 0xff, 0x79, 0xb0, 0x4c, 0x98, 0xc8, 0xe9, 0x65, 0x9b, 0x13,
+    0x99, 0xd4, 0x3a, 0xfc, 0x61, 0xc3, 0xdb, 0xbb, 0xed, 0x51, 0x82, 0x2a,
+    0x4a, 0x89, 0xbb, 0x8e, 0xe4, 0x08, 0xf7, 0xf1, 0x47, 0xf8, 0xdb, 0xd6,
+    0x5f, 0xed, 0xab, 0x83, 0x2c, 0xf0, 0xa5, 0x65, 0xd8, 0x4b, 0x29, 0x65,
+    0xff, 0xd0, 0x5d, 0xe7, 0xfc, 0xda, 0x07, 0x6b, 0x28, 0x8f, 0x43, 0xe1,
+    0x77, 0xcd, 0xcf, 0x32, 0xcb, 0xd9, 0xd7, 0xd6, 0x50, 0xcd, 0xf1, 0xc8,
+    0x6f, 0xe6, 0x2c, 0xff, 0x99, 0x65, 0xa3, 0x0f, 0x33, 0x84, 0x34, 0x34,
+    0xcd, 0xb1, 0x94, 0x30, 0xab, 0xbf, 0xfd, 0xe6, 0x9b, 0xcd, 0xd7, 0xcb,
+    0x37, 0xba, 0xcb, 0xc3, 0x79, 0x96, 0x5f, 0xf3, 0x6f, 0xf6, 0x6b, 0x4d,
+    0xbd, 0x65, 0x41, 0xec, 0xf8, 0x76, 0xe8, 0x02, 0xcb, 0xfe, 0xe4, 0x1b,
+    0xc0, 0x8f, 0xcc, 0xb2, 0xec, 0x29, 0x8f, 0x43, 0xe2, 0xd7, 0xf1, 0xf9,
+    0xc7, 0x29, 0xd6, 0x5c, 0x73, 0xac, 0xa8, 0x3c, 0x57, 0x2e, 0xbf, 0x37,
+    0x9d, 0xa7, 0x59, 0x74, 0x6e, 0x2c, 0xb8, 0x1c, 0x91, 0xe0, 0x31, 0x3d,
+    0xf7, 0x30, 0xbe, 0xb2, 0xf6, 0xec, 0x69, 0x65, 0x31, 0xf6, 0xb9, 0x68,
+    0x48, 0x6f, 0x79, 0xfe, 0xb2, 0xf7, 0xdf, 0x71, 0x65, 0xfe, 0xff, 0x98,
+    0x58, 0x1d, 0x96, 0x5f, 0xe3, 0x7d, 0x12, 0x0b, 0xe9, 0x65, 0x89, 0x65,
+    0x31, 0xe2, 0x04, 0xd2, 0xe1, 0x31, 0x65, 0x42, 0xea, 0x14, 0xe5, 0xc3,
+    0x8d, 0xcb, 0xb3, 0x59, 0xa1, 0x4a, 0x77, 0x1f, 0x39, 0x14, 0x33, 0x78,
+    0x5b, 0xf1, 0xc0, 0x8f, 0xed, 0xbc, 0x08, 0x43, 0x7a, 0x6c, 0xdc, 0x59,
+    0x7e, 0x34, 0x0d, 0x37, 0x16, 0x5f, 0x79, 0x9e, 0x4b, 0x2f, 0x0d, 0xe4,
+    0xb2, 0xa0, 0xde, 0xe1, 0x0d, 0xfe, 0xf3, 0xcd, 0xb3, 0xb8, 0x1a, 0xcb,
+    0x06, 0x11, 0x7a, 0x06, 0x7e, 0x0f, 0xdf, 0xde, 0x89, 0x78, 0x23, 0x59,
+    0x7f, 0xfb, 0x61, 0x3f, 0xe3, 0x41, 0x96, 0xa2, 0x4b, 0x2f, 0xd1, 0xff,
+    0x44, 0xcb, 0x2e, 0xff, 0x16, 0x5f, 0x9c, 0xd3, 0x23, 0x4b, 0x2a, 0x48,
+    0xe1, 0x62, 0xef, 0x25, 0xb9, 0x41, 0x0b, 0xdf, 0xe6, 0x2f, 0xcb, 0x35,
+    0x8b, 0x2f, 0xfe, 0x6e, 0xcb, 0x0f, 0x13, 0x0e, 0x27, 0x59, 0x7f, 0xf4,
+    0x8b, 0x0e, 0xe5, 0x9e, 0x73, 0xac, 0xbf, 0xd9, 0xf8, 0xde, 0xc4, 0x05,
+    0x97, 0xff, 0xc0, 0x3b, 0xca, 0x58, 0x01, 0x3f, 0x3f, 0x02, 0xb2, 0xbb,
+    0x44, 0x36, 0x8c, 0xef, 0xfc, 0x27, 0x5b, 0x23, 0x64, 0xc5, 0x07, 0x59,
+    0x7f, 0xb5, 0x0c, 0x32, 0x79, 0x2c, 0xbf, 0xf6, 0x98, 0xbb, 0x2c, 0x9f,
+    0x0c, 0x59, 0x7f, 0xd9, 0xbe, 0x33, 0xae, 0xbe, 0x2a, 0x96, 0x5f, 0xa3,
+    0xfc, 0xc2, 0xd8, 0x8b, 0x2d, 0x18, 0xf8, 0xfe, 0x86, 0x9a, 0x20, 0x61,
+    0xef, 0x7e, 0xef, 0xdd, 0x3e, 0xe2, 0xcb, 0xfd, 0xc8, 0x91, 0xa6, 0xe6,
+    0xe2, 0xcb, 0xff, 0x0c, 0x83, 0xfe, 0x41, 0x47, 0x16, 0x54, 0x1f, 0xab,
+    0x1c, 0x58, 0x56, 0xb2, 0xa4, 0xae, 0x97, 0xb3, 0x1e, 0x91, 0x5a, 0x18,
+    0xe5, 0x1b, 0x40, 0x4a, 0x77, 0xc2, 0x88, 0xc2, 0x0b, 0xde, 0x63, 0x56,
+    0x5f, 0xfe, 0x68, 0xf9, 0x67, 0xfd, 0x8d, 0x2d, 0xeb, 0x2f, 0xfb, 0xae,
+    0x01, 0xc8, 0x73, 0x05, 0x65, 0xff, 0x6b, 0x37, 0xe0, 0xf4, 0x46, 0x2c,
+    0xa6, 0x3f, 0x67, 0x3b, 0xbf, 0xff, 0x04, 0xa5, 0x85, 0xf6, 0xdb, 0xcf,
+    0x93, 0xc9, 0x65, 0xfe, 0x80, 0x47, 0xb3, 0xa9, 0x2c, 0xa6, 0x44, 0x41,
+    0x2a, 0xd7, 0x93, 0x88, 0x04, 0x2f, 0xff, 0x0a, 0x8b, 0xe9, 0x9e, 0x67,
+    0x59, 0x7c, 0xff, 0x0c, 0x96, 0x5d, 0x1c, 0x59, 0x5b, 0x0f, 0x6c, 0x88,
+    0xfe, 0x45, 0x7f, 0xde, 0x72, 0xc9, 0xa5, 0x1d, 0x2c, 0xbf, 0xfb, 0xcd,
+    0xac, 0xe1, 0x66, 0xff, 0x32, 0xcb, 0xf1, 0x67, 0x03, 0xb3, 0x0f, 0xf6,
+    0x63, 0x9b, 0xf6, 0xbb, 0x77, 0xed, 0x51, 0x03, 0x2f, 0xe7, 0x9c, 0x0e,
+    0x43, 0x45, 0x60, 0xf5, 0xec, 0xe0, 0x70, 0xfc, 0x76, 0xcd, 0xaf, 0x79,
+    0xe5, 0xb1, 0x1c, 0xc5, 0x0b, 0x1b, 0xfe, 0xf3, 0x61, 0x67, 0x63, 0xc5,
+    0x95, 0xda, 0xe1, 0xf9, 0xe3, 0xa5, 0x28, 0x4b, 0x7e, 0x39, 0x3d, 0xe7,
+    0x57, 0xbe, 0x18, 0x59, 0x7f, 0xfb, 0xcd, 0xfc, 0xc3, 0xf2, 0x30, 0x6c,
+    0xb2, 0xee, 0x71, 0x65, 0xf0, 0xfc, 0xe7, 0x59, 0x7f, 0xd9, 0x38, 0x92,
+    0x68, 0xeb, 0xeb, 0x2c, 0x0e, 0xd1, 0x77, 0xa4, 0x77, 0x17, 0x22, 0x2b,
+    0xfc, 0x0f, 0xb4, 0xe7, 0x8e, 0xd6, 0x57, 0x49, 0xa7, 0x3c, 0x35, 0xc9,
+    0x0a, 0xfc, 0x3d, 0xa1, 0xc7, 0xb4, 0x2c, 0xbf, 0xbb, 0xeb, 0xdd, 0x3e,
+    0xe2, 0xcb, 0xf3, 0xeb, 0xf9, 0xda, 0xcb, 0xe1, 0xb4, 0x4e, 0xb2, 0xd1,
+    0xa3, 0xca, 0x09, 0x45, 0xff, 0xcc, 0x3d, 0x99, 0x9d, 0x01, 0xcb, 0xeb,
+    0x2d, 0x29, 0x1f, 0x67, 0x09, 0xea, 0x13, 0x12, 0x78, 0x75, 0x54, 0x32,
+    0x04, 0xf2, 0x73, 0x15, 0xa3, 0xae, 0x73, 0x50, 0xc6, 0x89, 0x73, 0x49,
+    0x65, 0xfd, 0xd7, 0xc7, 0x98, 0x6a, 0xcb, 0xfb, 0xcd, 0xfe, 0x67, 0xd6,
+    0x5f, 0x64, 0xcc, 0x75, 0x94, 0x34, 0x4a, 0x60, 0xb7, 0x65, 0xe2, 0x16,
+    0xda, 0x16, 0x5f, 0x41, 0x30, 0x16, 0x5b, 0x3c, 0x6c, 0x3e, 0x21, 0x7f,
+    0xb4, 0x4e, 0x60, 0x9d, 0x18, 0xb2, 0xe0, 0x6f, 0x59, 0x7e, 0xff, 0x83,
+    0x38, 0x56, 0x50, 0xcf, 0xeb, 0xc6, 0xe1, 0x19, 0xbf, 0xfc, 0xc0, 0xef,
+    0xcd, 0xe2, 0x8c, 0xd6, 0x2c, 0xbf, 0xc3, 0xea, 0x59, 0x85, 0x3a, 0xcb,
+    0xff, 0x4a, 0x37, 0x33, 0x5f, 0xe4, 0x49, 0x65, 0xff, 0x74, 0x38, 0xe3,
+    0x0f, 0xd0, 0xb2, 0xff, 0x37, 0xf8, 0xfd, 0x00, 0xc5, 0x97, 0x6a, 0x75,
+    0x46, 0x0a, 0xaf, 0x1e, 0xd3, 0x9a, 0xdf, 0xf9, 0xf5, 0x84, 0x0e, 0x7f,
+    0x9d, 0x2c, 0xbf, 0xff, 0xff, 0xb3, 0xfe, 0x72, 0x37, 0x67, 0x34, 0xef,
+    0xfd, 0xf8, 0x3d, 0x98, 0x77, 0x2e, 0xa4, 0xb8, 0x82, 0xd7, 0xfe, 0x77,
+    0x37, 0xb7, 0x1e, 0xc3, 0x4c, 0x5c, 0x41, 0x6b, 0xff, 0xbc, 0xde, 0x68,
+    0x2f, 0xec, 0x34, 0xc5, 0xc4, 0x16, 0xbf, 0xd0, 0xc5, 0xfd, 0x86, 0x98,
+    0xb8, 0x82, 0xd7, 0xf1, 0xf0, 0x7b, 0x0d, 0x31, 0x71, 0x05, 0xaf, 0xff,
+    0xf9, 0xc8, 0x98, 0xfb, 0x39, 0xdf, 0x9b, 0x4c, 0x6c, 0xf8, 0x62, 0xe2,
+    0x0b, 0x5d, 0xd6, 0xc1, 0xa7, 0x3d, 0xda, 0x8e, 0x95, 0x1d, 0x0c, 0x8f,
+    0xea, 0x15, 0x68, 0xf8, 0xfc, 0xa5, 0x1c, 0xdf, 0xe6, 0x83, 0x79, 0xfe,
+    0x74, 0xb2, 0xf9, 0xf4, 0x07, 0x59, 0x7f, 0xf7, 0x9b, 0xcd, 0x05, 0xfd,
+    0x86, 0x98, 0xb8, 0x82, 0xd7, 0xfd, 0x37, 0x3b, 0x69, 0xf6, 0x1a, 0x62,
+    0xe2, 0x0b, 0x5f, 0xbf, 0xc8, 0x3e, 0xce, 0xd1, 0x44, 0x22, 0xa5, 0xff,
+    0xed, 0x9d, 0xf9, 0xbb, 0x8f, 0xf3, 0x61, 0xa6, 0x2e, 0x20, 0xb5, 0xff,
+    0xff, 0xc4, 0x4c, 0x7d, 0x81, 0xcd, 0x9c, 0xef, 0xcd, 0xa6, 0x36, 0x7c,
+    0x31, 0x71, 0x05, 0xab, 0x13, 0x29, 0xe9, 0x11, 0xd8, 0x2f, 0xfb, 0xcd,
+    0xa6, 0x36, 0x7c, 0x31, 0x71, 0x05, 0xaf, 0xff, 0x9d, 0xfa, 0x97, 0x3c,
+    0xc3, 0x1c, 0x6a, 0x12, 0x5f, 0xfb, 0x25, 0x20, 0xf3, 0x45, 0x3e, 0xda,
+    0xe2, 0x0b, 0x57, 0x68, 0xe7, 0xd2, 0x47, 0x13, 0xef, 0xfd, 0xdb, 0x6b,
+    0xee, 0x0e, 0x6c, 0x31, 0x71, 0x05, 0xaf, 0xef, 0x37, 0xbc, 0xc0, 0x54,
+    0x01, 0x6b, 0xf6, 0x03, 0x61, 0xa6, 0x2e, 0x20, 0xb5, 0xd9, 0xfe, 0xcf,
+    0xcf, 0xc7, 0x55, 0xd2, 0x3c, 0x79, 0x0c, 0x3b, 0xf8, 0xf8, 0x3d, 0x86,
+    0x98, 0xb8, 0x82, 0xd7, 0xfe, 0xef, 0xcd, 0xa6, 0x36, 0x7c, 0x31, 0x71,
+    0x05, 0xae, 0xcd, 0x8e, 0x88, 0xee, 0x1f, 0xdf, 0xe0, 0xb1, 0xdc, 0xba,
+    0x92, 0xe2, 0x0b, 0x5f, 0xfb, 0x1b, 0x7e, 0x16, 0x0d, 0xe4, 0xb8, 0x82,
+    0xc7, 0x3c, 0x0a, 0x1a, 0xf0, 0x96, 0x8d, 0xc0, 0x6a, 0x51, 0xf6, 0x72,
+    0x31, 0x7f, 0xc6, 0x44, 0x18, 0x5b, 0x98, 0xdf, 0x70, 0x21, 0x51, 0x05,
+    0x85, 0xa2, 0x2e, 0xe7, 0xed, 0x65, 0x0d, 0x94, 0xe1, 0xdc, 0x24, 0xc1,
+    0x49, 0x8f, 0xf9, 0xbd, 0x63, 0x2c, 0xd6, 0x63, 0x4e, 0x52, 0xac, 0x6e,
+    0x96, 0xea, 0xcb, 0xd1, 0x2d, 0xd5, 0x95, 0x06, 0xe4, 0x86, 0xaa, 0x76,
+    0x6a, 0x78, 0xdb, 0xba, 0x85, 0x06, 0x8b, 0xc1, 0x4b, 0x7d, 0x27, 0x6b,
+    0xff, 0x48, 0xb3, 0xfe, 0x6c, 0xeb, 0xeb, 0x2f, 0xe2, 0x97, 0x3f, 0xe8,
+    0x59, 0x58, 0x7d, 0x6c, 0x7d, 0x7f, 0xa3, 0xcc, 0x67, 0x52, 0xe2, 0xcb,
+    0xf4, 0x7f, 0x9e, 0x65, 0x97, 0xfe, 0xd6, 0x1b, 0xec, 0x38, 0x75, 0x3a,
+    0xcb, 0xfe, 0xe8, 0xb1, 0x8f, 0x84, 0x05, 0x97, 0xff, 0xff, 0xe7, 0x98,
+    0x9c, 0xcc, 0xde, 0xdc, 0xf6, 0x03, 0x6f, 0x3f, 0xc7, 0x3e, 0x75, 0xf5,
+    0x97, 0xe9, 0x7f, 0x98, 0x4b, 0x2f, 0xff, 0x3f, 0x70, 0x43, 0x2c, 0xdf,
+    0xa6, 0xe2, 0xcb, 0xff, 0x72, 0x69, 0x04, 0x73, 0x48, 0x23, 0x59, 0x53,
+    0xaa, 0x10, 0x91, 0xa8, 0xc9, 0xf1, 0x04, 0xd3, 0x7e, 0xa1, 0x11, 0xe2,
+    0x7f, 0xa5, 0x5f, 0xf6, 0x7c, 0xcc, 0x21, 0xfa, 0x16, 0x5f, 0xfd, 0x1d,
+    0x48, 0x43, 0xf3, 0xf1, 0xd1, 0x8b, 0x2f, 0xd2, 0xdd, 0xdd, 0x0c, 0xeb,
+    0x2d, 0xe6, 0x3f, 0x97, 0x49, 0xbe, 0xf9, 0x41, 0xd6, 0x5f, 0xb5, 0x1d,
+    0x4b, 0x8b, 0x2a, 0x74, 0xc8, 0x65, 0x0b, 0x16, 0x26, 0xd1, 0x0d, 0xff,
+    0x41, 0xbe, 0xc2, 0x2c, 0xe9, 0x65, 0xe3, 0xbf, 0xd6, 0x5c, 0xfc, 0x59,
+    0x7a, 0x4d, 0xf5, 0x97, 0xff, 0xbe, 0xc4, 0x19, 0x67, 0x01, 0xff, 0xf4,
+    0xb2, 0xc5, 0x31, 0xf3, 0x88, 0x39, 0x7f, 0xdc, 0x7e, 0xb6, 0xc3, 0xe6,
+    0xd2, 0xcb, 0xfb, 0x34, 0x03, 0xb7, 0x16, 0x5c, 0x1e, 0x7c, 0xfa, 0xb6,
+    0xcf, 0x6f, 0x66, 0x8d, 0x59, 0x7f, 0xf6, 0xfd, 0xf1, 0xc7, 0xf7, 0x52,
+    0xcf, 0xac, 0xac, 0x4c, 0xa8, 0x10, 0x93, 0xdb, 0x31, 0x10, 0x76, 0xfe,
+    0x0c, 0xd0, 0x5c, 0x65, 0x97, 0xf8, 0x84, 0xcd, 0x14, 0x1d, 0x65, 0xfc,
+    0x1f, 0x94, 0x7f, 0x8b, 0x2b, 0x0f, 0x7c, 0x06, 0x55, 0x25, 0x56, 0xc6,
+    0x8e, 0x02, 0x3a, 0x72, 0x46, 0xe4, 0x23, 0x2a, 0x17, 0x48, 0xf2, 0x39,
+    0xbe, 0x90, 0xde, 0x57, 0x75, 0xe3, 0xb7, 0x16, 0x5f, 0xa5, 0x1b, 0xdf,
+    0xcb, 0x2a, 0x73, 0xc5, 0x71, 0xcb, 0xff, 0xb3, 0xaf, 0xf1, 0x8a, 0x00,
+    0xe7, 0x59, 0x7d, 0xbb, 0x99, 0x3a, 0xcb, 0xff, 0xf6, 0x7f, 0xcd, 0xb0,
+    0xd7, 0xd8, 0x58, 0x63, 0x81, 0x65, 0xf1, 0xc7, 0x87, 0x59, 0x7f, 0xfb,
+    0xc3, 0x13, 0xed, 0xe2, 0xcf, 0xc0, 0x16, 0x5f, 0xf6, 0xf6, 0x21, 0x87,
+    0xd8, 0x75, 0x97, 0xf3, 0xf9, 0xb9, 0x12, 0x59, 0x5b, 0x11, 0xa5, 0x04,
+    0x58, 0x95, 0xc3, 0xab, 0xff, 0x0a, 0xf0, 0x8b, 0x04, 0x82, 0x02, 0xcb,
+    0xfd, 0x9e, 0x6e, 0x30, 0x64, 0xb2, 0xa7, 0x54, 0x85, 0xe4, 0x32, 0x25,
+    0xfc, 0x65, 0x61, 0x3d, 0xdd, 0x40, 0xbe, 0xeb, 0x91, 0xd2, 0xcb, 0xff,
+    0x4b, 0x3a, 0x96, 0xa3, 0xef, 0xf5, 0x97, 0x8f, 0x12, 0x59, 0x7e, 0xc1,
+    0xf8, 0x26, 0x2c, 0xad, 0x88, 0xa8, 0x98, 0x91, 0xcf, 0xc8, 0x72, 0xff,
+    0xbb, 0xf3, 0x0f, 0xd1, 0xfe, 0x2c, 0xbc, 0x37, 0xfa, 0xcb, 0xff, 0xf7,
+    0xff, 0x93, 0x4b, 0x27, 0xd9, 0xd4, 0x14, 0x71, 0x65, 0xff, 0xef, 0xe4,
+    0xd2, 0xc9, 0xfa, 0x82, 0x8e, 0x2c, 0xbc, 0x51, 0xd6, 0xc4, 0x52, 0x7d,
+    0x66, 0xff, 0xdc, 0x82, 0x89, 0x7f, 0xd8, 0x4b, 0x2b, 0x49, 0xd5, 0x1c,
+    0xf9, 0xce, 0x81, 0x0c, 0x0e, 0x1b, 0x5e, 0x6d, 0xbc, 0x59, 0x79, 0xba,
+    0xfa, 0xcb, 0xde, 0x9d, 0x96, 0x5d, 0x86, 0x70, 0xdd, 0x04, 0x76, 0xff,
+    0xda, 0x27, 0x31, 0xf5, 0xac, 0xe9, 0x65, 0xe2, 0x63, 0x56, 0x5f, 0xdc,
+    0x61, 0xe1, 0x9c, 0x59, 0x7f, 0x3e, 0x9c, 0x6d, 0x8b, 0x2e, 0xd0, 0x16,
+    0x5d, 0x86, 0x2c, 0xa7, 0x35, 0xdf, 0x17, 0xa8, 0x4e, 0x1e, 0x75, 0x81,
+    0x96, 0xe1, 0xff, 0x43, 0x9e, 0x2e, 0xfa, 0xcd, 0xe3, 0xbb, 0x2c, 0xae,
+    0x91, 0x00, 0x06, 0x5b, 0xe3, 0x33, 0xce, 0xb2, 0xf8, 0xdd, 0x31, 0x8b,
+    0x2f, 0xd3, 0xbf, 0xa3, 0x71, 0x65, 0xff, 0x1b, 0x85, 0x12, 0xfe, 0x76,
+    0xb2, 0xfd, 0x3f, 0xf6, 0xf3, 0xeb, 0x2b, 0x6a, 0x45, 0xa6, 0x12, 0x31,
+    0x58, 0x4e, 0x6f, 0xe3, 0x7d, 0x1d, 0x7f, 0x16, 0x5f, 0xe2, 0xc1, 0xfa,
+    0x0c, 0x25, 0x95, 0x07, 0xc3, 0xa2, 0xfb, 0xff, 0xfd, 0xa8, 0xf4, 0x6b,
+    0x51, 0x3f, 0xdd, 0xcd, 0xce, 0xbe, 0xb2, 0xa1, 0x93, 0x19, 0x92, 0x99,
+    0x1a, 0x55, 0xa3, 0xca, 0x56, 0x01, 0x21, 0x43, 0x58, 0x30, 0xa1, 0x10,
+    0x86, 0xf8, 0xa6, 0xe6, 0x2c, 0xbf, 0x4b, 0x27, 0xfc, 0x2c, 0xbf, 0xff,
+    0xa3, 0xe2, 0x4e, 0x3c, 0xfc, 0x6f, 0x6f, 0x82, 0x24, 0xb2, 0xff, 0xd1,
+    0x39, 0xfc, 0xda, 0xd3, 0xc9, 0x65, 0x4e, 0x89, 0xd2, 0x5e, 0xa5, 0x94,
+    0xc9, 0x8a, 0xcc, 0x44, 0x50, 0xc5, 0xdb, 0x23, 0xbf, 0xd3, 0xcf, 0x05,
+    0xd6, 0x7d, 0x65, 0xf8, 0x79, 0x85, 0xda, 0xcb, 0xf7, 0x5f, 0x27, 0xf2,
+    0xcb, 0xa2, 0x65, 0x95, 0x39, 0xf3, 0x48, 0x9c, 0x05, 0x15, 0x89, 0x88,
+    0x32, 0x28, 0x61, 0x37, 0x7f, 0xf6, 0x88, 0x3d, 0x7c, 0xb2, 0x77, 0x25,
+    0x97, 0xff, 0xf0, 0xfc, 0x19, 0xdb, 0x35, 0xac, 0x8e, 0xa4, 0xc7, 0x59,
+    0x7f, 0x9e, 0x62, 0x0f, 0xca, 0x16, 0x5f, 0xc3, 0x13, 0xff, 0x63, 0x16,
+    0x5c, 0x53, 0x2c, 0xa7, 0x3c, 0x70, 0x98, 0x5d, 0xe3, 0x56, 0x5f, 0xf7,
+    0xa3, 0xa2, 0xc1, 0xbc, 0x96, 0x5e, 0x7d, 0x4e, 0xb2, 0xe0, 0x42, 0xcb,
+    0xe6, 0x83, 0xe2, 0xca, 0x59, 0x7f, 0x39, 0xbf, 0x8d, 0x01, 0x65, 0x0c,
+    0xdc, 0x90, 0x5d, 0xff, 0xfe, 0x86, 0x19, 0x40, 0x7b, 0xfe, 0x76, 0x38,
+    0xec, 0x43, 0xac, 0xb8, 0x10, 0xb2, 0xe8, 0x35, 0x65, 0xff, 0x67, 0xf9,
+    0x07, 0x13, 0x26, 0x59, 0x7f, 0xb9, 0x9e, 0x6e, 0x06, 0x75, 0x97, 0x18,
+    0x62, 0x4b, 0xfe, 0x2c, 0xde, 0xf2, 0xe3, 0x0d, 0x65, 0x76, 0x9f, 0xe3,
+    0x0e, 0xe8, 0x58, 0xeb, 0x3e, 0x20, 0x03, 0x18, 0xac, 0x58, 0x85, 0xf8,
+    0x74, 0x61, 0xa0, 0x83, 0x37, 0x8c, 0x30, 0xc4, 0x96, 0x3a, 0x41, 0x66,
+    0x82, 0xf3, 0xbe, 0x92, 0x0b, 0x47, 0x08, 0x90, 0xbe, 0xa1, 0xab, 0x6f,
+    0xec, 0x62, 0x69, 0x62, 0xb5, 0x3a, 0xe7, 0x27, 0x68, 0x9d, 0x2e, 0x79,
+    0xe5, 0xe5, 0xc8, 0x5f, 0xdf, 0x8c, 0xf6, 0x4e, 0xb2, 0xec, 0x3a, 0xca,
+    0xe8, 0xf0, 0xf8, 0x5b, 0x7f, 0xef, 0x79, 0xdb, 0xf1, 0x85, 0x32, 0xcb,
+    0x71, 0x65, 0x61, 0xe7, 0x31, 0xed, 0x0a, 0x5f, 0x4b, 0x56, 0x27, 0x35,
+    0x67, 0x86, 0x5c, 0xa5, 0x75, 0x0d, 0x87, 0x27, 0x77, 0xcd, 0x96, 0x63,
+    0xd4, 0xb2, 0x76, 0x9d, 0x7b, 0x9a, 0x19, 0x5a, 0x86, 0xe9, 0xe3, 0x16,
+    0xf5, 0x2f, 0xfd, 0xe9, 0xc8, 0x20, 0x86, 0xa9, 0x4f, 0xa9, 0xf2, 0x94,
+    0x39, 0xf9, 0x56, 0xa1, 0x9d, 0x18, 0xdf, 0x09, 0x9d, 0xb7, 0x1b, 0x84,
+    0xfa, 0xcb, 0xfb, 0x00, 0x06, 0xd4, 0x96, 0x5e, 0xf0, 0x4d, 0x59, 0x77,
+    0x78, 0xb2, 0x86, 0x7c, 0x4c, 0x5a, 0xe3, 0xd7, 0xfe, 0x83, 0xed, 0xbc,
+    0xf8, 0x36, 0x31, 0x65, 0xd8, 0x62, 0xcb, 0xa3, 0xeb, 0x2a, 0x73, 0x5b,
+    0xd8, 0xbd, 0x8e, 0xb2, 0xa4, 0x8a, 0x3c, 0x6f, 0xf9, 0x1d, 0xfe, 0x93,
+    0x16, 0x1c, 0x3e, 0x59, 0x7e, 0xf3, 0xb1, 0x3a, 0xcb, 0xff, 0x67, 0xf9,
+    0xe6, 0x3b, 0xe6, 0x96, 0x5d, 0x83, 0x59, 0x50, 0x8a, 0xa3, 0x4c, 0x88,
+    0x97, 0x79, 0xed, 0xfb, 0x36, 0x60, 0x3e, 0xb2, 0xfb, 0x67, 0xe3, 0x7a,
+    0xcb, 0xf6, 0x77, 0x07, 0x65, 0x97, 0xd8, 0x7c, 0xfa, 0xcb, 0xfb, 0xd0,
+    0x23, 0x44, 0xeb, 0x2f, 0xf9, 0xb7, 0xeb, 0x26, 0xce, 0xbe, 0xb2, 0xbb,
+    0x3e, 0xaf, 0x17, 0x5c, 0xe6, 0xac, 0xad, 0x1b, 0xaf, 0x91, 0xdf, 0x39,
+    0xde, 0x65, 0x97, 0xff, 0xa6, 0x69, 0xb6, 0x37, 0x5c, 0x71, 0x18, 0xeb,
+    0x2f, 0xcd, 0x06, 0x44, 0xcb, 0x2f, 0xf6, 0xcf, 0x38, 0x00, 0xde, 0x59,
+    0x7c, 0xff, 0xeb, 0x8b, 0x2a, 0x11, 0x9e, 0xc9, 0xee, 0x50, 0x46, 0xb7,
+    0xff, 0xfe, 0x79, 0x83, 0x20, 0xf7, 0xb3, 0xcd, 0xff, 0xc7, 0x51, 0x3c,
+    0x71, 0x65, 0xf8, 0x9f, 0x72, 0x79, 0x96, 0x5f, 0x4d, 0xc8, 0xfa, 0xca,
+    0xed, 0x18, 0x33, 0x39, 0x04, 0xb2, 0xc6, 0x2c, 0xbf, 0xff, 0xc4, 0xef,
+    0xbe, 0x25, 0xe8, 0xd4, 0xf1, 0xfe, 0x3c, 0x96, 0x5f, 0xd1, 0xdf, 0xf8,
+    0xfd, 0x2c, 0xbe, 0xf6, 0x3c, 0xeb, 0x2f, 0xb0, 0xef, 0xd2, 0xca, 0xdc,
+    0x46, 0xa1, 0x30, 0xf0, 0xbc, 0x42, 0x2b, 0xcd, 0xd4, 0xcb, 0x2f, 0x82,
+    0x2b, 0x3b, 0x2c, 0xbf, 0x66, 0x4e, 0x1e, 0x2c, 0xbe, 0xd1, 0x30, 0x16,
+    0x5f, 0x37, 0x6f, 0xa5, 0x97, 0x40, 0x16, 0x5f, 0x06, 0x70, 0x8b, 0xf1,
+    0xb8, 0x10, 0x8a, 0x99, 0x12, 0xde, 0x59, 0xb0, 0x16, 0x5d, 0x9d, 0xac,
+    0xbf, 0x66, 0xb4, 0xda, 0x59, 0x5b, 0x87, 0x9f, 0xe1, 0x10, 0x0b, 0xdf,
+    0x47, 0x59, 0xda, 0xcb, 0xf0, 0x8d, 0x1c, 0x75, 0x94, 0xe7, 0x94, 0x12,
+    0x3b, 0xfe, 0xf3, 0xf3, 0xcd, 0x3b, 0x92, 0xcb, 0xe7, 0x9c, 0x49, 0x2c,
+    0xa1, 0x4b, 0x25, 0xb0, 0x50, 0xf5, 0x10, 0xd0, 0x94, 0x36, 0x46, 0x7d,
+    0x85, 0x26, 0x93, 0x74, 0x4e, 0xd0, 0xc5, 0xdc, 0x21, 0x9a, 0x1e, 0x3a,
+    0x87, 0xd7, 0x8c, 0x9e, 0x1c, 0xc0, 0x40, 0x15, 0x8f, 0x70, 0x9b, 0xf0,
+    0xbe, 0x0b, 0x89, 0x8f, 0x82, 0x10, 0xee, 0x9c, 0x5f, 0xec, 0x26, 0x07,
+    0x3c, 0xcb, 0x2d, 0xb8, 0xb2, 0xf8, 0x67, 0x79, 0x2c, 0xa6, 0x36, 0xc1,
+    0x14, 0xad, 0x88, 0x87, 0x26, 0x7b, 0xcd, 0x38, 0x56, 0x5c, 0xf0, 0xb2,
+    0xfd, 0x00, 0x6e, 0xb1, 0x65, 0xc7, 0x0a, 0xcb, 0xf3, 0xff, 0xc1, 0x25,
+    0x97, 0x1f, 0x7a, 0xcb, 0xfe, 0x0b, 0xb1, 0x3f, 0xdf, 0xcb, 0x2b, 0x62,
+    0x32, 0x60, 0x55, 0x89, 0xfc, 0x2e, 0x44, 0xfc, 0x19, 0xbf, 0xfa, 0x38,
+    0xc0, 0x8d, 0x37, 0xa0, 0x6b, 0x2f, 0x38, 0x45, 0x6b, 0x2f, 0xfd, 0x9d,
+    0x96, 0x73, 0x6f, 0x35, 0x0b, 0x28, 0x68, 0xf8, 0x25, 0x6f, 0xa1, 0x08,
+    0x41, 0x7f, 0xfa, 0x45, 0x1b, 0x0e, 0x50, 0x6f, 0xda, 0x75, 0x97, 0xd8,
+    0x1d, 0x4e, 0xb2, 0xfc, 0xe7, 0xcf, 0x1d, 0x65, 0x74, 0x89, 0x6d, 0x26,
+    0x7c, 0x8e, 0xc6, 0x2c, 0xbd, 0xfd, 0x42, 0xcb, 0xdc, 0x7f, 0xac, 0xbe,
+    0xc9, 0xc4, 0x92, 0xcb, 0xc2, 0x10, 0x16, 0x57, 0x47, 0xba, 0x43, 0x9f,
+    0x24, 0xbf, 0xbf, 0xbf, 0x0b, 0x06, 0xb2, 0xa6, 0x3d, 0xde, 0x17, 0xdf,
+    0xb9, 0x92, 0x6d, 0x2c, 0xbf, 0x4d, 0x27, 0xeb, 0x8b, 0x2b, 0x0f, 0x47,
+    0x84, 0xf7, 0x83, 0xb9, 0xba, 0xb2, 0xdb, 0xd6, 0x5f, 0xf6, 0xbc, 0xe2,
+    0x3f, 0x98, 0x0b, 0x2a, 0x0f, 0x31, 0x84, 0xef, 0xe6, 0x29, 0xfc, 0x1e,
+    0x2c, 0xaf, 0x1e, 0x77, 0xc8, 0x2e, 0xdc, 0xdd, 0x59, 0x7b, 0x92, 0x9d,
+    0x65, 0x4e, 0x98, 0xd6, 0x42, 0xf4, 0x24, 0x42, 0x0e, 0xd4, 0x2e, 0xf0,
+    0xc8, 0x93, 0x23, 0xde, 0x68, 0x69, 0xcc, 0x62, 0x71, 0x27, 0x86, 0xb1,
+    0x3a, 0x7e, 0x33, 0xbb, 0xcf, 0xb0, 0x45, 0x97, 0xa6, 0x6f, 0x2c, 0xbf,
+    0xa3, 0x4f, 0x33, 0x79, 0x65, 0xfb, 0x83, 0x82, 0x9d, 0xcf, 0x2b, 0x83,
+    0xb7, 0xff, 0xbf, 0xf8, 0x28, 0x34, 0xd8, 0x96, 0xe1, 0xd6, 0x5f, 0xd9,
+    0x3c, 0x7b, 0xd0, 0xb2, 0xfd, 0x93, 0x7b, 0x09, 0x65, 0xfb, 0x04, 0x20,
+    0x81, 0x65, 0xf8, 0x0e, 0xf2, 0x3a, 0xca, 0x83, 0xcf, 0xc2, 0x8a, 0x64,
+    0xc4, 0x74, 0x9d, 0xe2, 0xd2, 0x76, 0xbc, 0x78, 0x3a, 0xca, 0xe9, 0x3a,
+    0x7d, 0x46, 0x9e, 0x73, 0xcb, 0xe3, 0xeb, 0x50, 0xb2, 0xfe, 0x6d, 0x70,
+    0x48, 0x02, 0xcb, 0xff, 0xb3, 0xfe, 0x6f, 0xfb, 0x0a, 0x00, 0xb2, 0xdb,
+    0xc0, 0x7e, 0x04, 0x5d, 0x7f, 0xfa, 0x5b, 0x30, 0x6d, 0xce, 0xbe, 0x17,
+    0xe2, 0xcb, 0xfe, 0xe6, 0x7e, 0x0e, 0xda, 0x92, 0xca, 0x64, 0x57, 0x11,
+    0x4f, 0xd3, 0x6f, 0xde, 0x09, 0x46, 0xf5, 0x97, 0xf1, 0x3f, 0xe5, 0x06,
+    0xac, 0xa8, 0x3d, 0x61, 0x0a, 0x6e, 0x3f, 0x16, 0x5f, 0x4f, 0xb3, 0x77,
+    0xb5, 0x97, 0xf7, 0x98, 0xcc, 0xeb, 0xeb, 0x2f, 0xff, 0x72, 0x35, 0xdf,
+    0xf8, 0xdf, 0xf6, 0x0d, 0x65, 0xf6, 0x67, 0x52, 0x59, 0x7b, 0x8d, 0x32,
+    0xca, 0x23, 0x7f, 0xc2, 0x2b, 0xf3, 0x6f, 0xd6, 0x1d, 0x65, 0x1a, 0x79,
+    0x3e, 0x20, 0xb7, 0x16, 0x5f, 0xce, 0xfa, 0x33, 0x3c, 0xb2, 0xff, 0x34,
+    0x7f, 0x37, 0xb8, 0xd6, 0x5f, 0xef, 0x46, 0x9b, 0xb6, 0xde, 0xb2, 0xa6,
+    0x44, 0xae, 0x8b, 0x7e, 0x67, 0x7f, 0xe9, 0xca, 0x3a, 0x61, 0x94, 0x4e,
+    0xb2, 0xff, 0x03, 0x9f, 0x28, 0x3f, 0x16, 0x5f, 0xe3, 0xc7, 0x9f, 0x91,
+    0xb8, 0xb2, 0xa0, 0xfa, 0x1c, 0xce, 0x9d, 0x18, 0xe5, 0x0a, 0x7a, 0x1a,
+    0xae, 0x9e, 0xcb, 0xf5, 0x0d, 0x33, 0x91, 0xfa, 0x14, 0xc5, 0x0f, 0x8b,
+    0xe3, 0x4c, 0x19, 0xd6, 0x5f, 0xb6, 0x7a, 0x35, 0x25, 0x95, 0xb1, 0x90,
+    0x1f, 0x12, 0x84, 0x27, 0x38, 0xc8, 0xd0, 0x3b, 0x84, 0x24, 0xc4, 0x47,
+    0x17, 0x79, 0x62, 0x7f, 0x68, 0x30, 0x96, 0xf1, 0xf9, 0x0b, 0x2f, 0xe9,
+    0xe6, 0x90, 0xa3, 0x53, 0xac, 0xbe, 0x3e, 0x3f, 0x96, 0x5a, 0x75, 0x97,
+    0xef, 0xf9, 0x8f, 0xa5, 0x95, 0x23, 0x75, 0xa1, 0x2b, 0xde, 0x1b, 0x2c,
+    0xbf, 0x7b, 0x1a, 0x5c, 0x59, 0x7f, 0xfd, 0xe8, 0x10, 0x5f, 0xc9, 0xc1,
+    0xce, 0x40, 0x12, 0x5f, 0xb3, 0xee, 0x11, 0x5a, 0xcb, 0x6e, 0x2c, 0xbf,
+    0x6b, 0xb7, 0x7e, 0xd7, 0x10, 0x22, 0xf7, 0x23, 0xa5, 0x97, 0xcd, 0xcd,
+    0x49, 0x65, 0x81, 0x08, 0x89, 0xc1, 0x4e, 0x8d, 0x8e, 0x3b, 0x7c, 0x58,
+    0x66, 0xea, 0xcb, 0x9a, 0x75, 0x94, 0xc6, 0xf3, 0xe4, 0xb7, 0x82, 0x5d,
+    0xac, 0xbe, 0x9c, 0x9c, 0xeb, 0x2e, 0x72, 0x59, 0x50, 0x6d, 0xe7, 0x22,
+    0xa9, 0x2a, 0x40, 0x19, 0x3f, 0x4a, 0x5a, 0x85, 0xa1, 0xdf, 0xbc, 0x41,
+    0xf5, 0x4b, 0xf9, 0xf5, 0x9b, 0xf0, 0x6b, 0x2f, 0xdd, 0xb9, 0xbe, 0x65,
+    0x94, 0x03, 0xd7, 0x22, 0xeb, 0xed, 0x0d, 0x8e, 0xb2, 0xf0, 0xde, 0x4b,
+    0x2d, 0x25, 0x95, 0x06, 0xb7, 0x74, 0x72, 0xfb, 0xf3, 0xb9, 0x2c, 0xbc,
+    0x78, 0xed, 0x65, 0xce, 0x6a, 0xca, 0xc3, 0x68, 0x43, 0xb6, 0x92, 0xcb,
+    0xfb, 0x27, 0x0f, 0xf7, 0xfd, 0x65, 0x41, 0xe1, 0x1a, 0x23, 0x7f, 0xcf,
+    0x2d, 0x44, 0xef, 0xae, 0xd6, 0x59, 0x96, 0x5f, 0xff, 0x9f, 0xa0, 0x77,
+    0xe6, 0x98, 0x9c, 0xcf, 0xe7, 0x96, 0x5e, 0x35, 0xbe, 0xb2, 0xf7, 0x1f,
+    0xeb, 0x2a, 0x11, 0x43, 0x82, 0x06, 0xac, 0x74, 0x3b, 0x76, 0xcf, 0x2c,
+    0xbf, 0x7d, 0x86, 0x18, 0x59, 0x7c, 0xf2, 0xc1, 0xac, 0xa3, 0x9e, 0x41,
+    0x13, 0xde, 0x3f, 0xfb, 0x59, 0x6f, 0xc1, 0xbf, 0xc2, 0x1b, 0xfa, 0x0f,
+    0x86, 0xc7, 0x16, 0x54, 0xea, 0xc1, 0xb0, 0x8f, 0xb5, 0x6d, 0x30, 0x9c,
+    0x8b, 0xd0, 0xdb, 0x01, 0xe9, 0x42, 0x83, 0xe4, 0xb7, 0x98, 0xf0, 0xb2,
+    0xe8, 0x3a, 0xcb, 0xd9, 0xac, 0x59, 0x5d, 0x9b, 0x13, 0x8b, 0x5f, 0xf0,
+    0x3d, 0x9d, 0x4b, 0xed, 0x32, 0xca, 0xc3, 0xdd, 0x09, 0x15, 0xd9, 0x3a,
+    0xcb, 0x05, 0x65, 0x0c, 0xd4, 0x68, 0x5e, 0xff, 0x46, 0x17, 0xf9, 0xb7,
+    0xbd, 0x65, 0xfd, 0x1b, 0x9e, 0x67, 0x92, 0xcb, 0xd1, 0xcd, 0x87, 0x3e,
+    0x62, 0x37, 0xbf, 0x9c, 0xce, 0x72, 0x00, 0xb2, 0xbc, 0x7c, 0x44, 0x69,
+    0x7a, 0x1f, 0x4b, 0x2f, 0xfd, 0xe7, 0x2f, 0xf0, 0x82, 0xe2, 0x2c, 0xbf,
+    0xed, 0x69, 0xba, 0x97, 0xdf, 0xa5, 0x97, 0xb6, 0xdc, 0xd5, 0x97, 0xfd,
+    0x07, 0x96, 0x4f, 0x81, 0x15, 0xac, 0xbf, 0xe8, 0x03, 0x4b, 0xcc, 0x40,
+    0x59, 0x69, 0xd6, 0x5c, 0xff, 0xd1, 0xe4, 0x8a, 0xcd, 0xeb, 0x11, 0xae,
+    0xc4, 0x0f, 0x08, 0x6b, 0xc6, 0x40, 0x8b, 0x2f, 0xfe, 0x7e, 0x09, 0xf6,
+    0x20, 0xcb, 0x38, 0xb2, 0xe2, 0x1a, 0xea, 0xfa, 0x54, 0x1f, 0x3b, 0xa2,
+    0x5c, 0x07, 0x59, 0x7d, 0x20, 0xc1, 0xab, 0x2c, 0x05, 0x95, 0x86, 0xd1,
+    0xc8, 0xea, 0x15, 0xda, 0x8e, 0x1d, 0x26, 0x90, 0xf6, 0x36, 0xc7, 0xda,
+    0x8c, 0x4b, 0xc6, 0x40, 0x84, 0x29, 0x10, 0x7d, 0x2a, 0xff, 0x0f, 0xce,
+    0x71, 0x20, 0x96, 0x5f, 0xde, 0xc9, 0x79, 0xb7, 0xac, 0xad, 0xc3, 0xe2,
+    0xf9, 0x9d, 0x89, 0x65, 0xed, 0x06, 0x75, 0x95, 0x23, 0x5c, 0x71, 0x0b,
+    0xff, 0xe2, 0x63, 0x45, 0xf3, 0xfe, 0x0b, 0xca, 0x50, 0xb2, 0xa0, 0xfc,
+    0xf0, 0x86, 0xfd, 0xec, 0xff, 0x21, 0x65, 0xf8, 0xbe, 0x1c, 0xf2, 0xcb,
+    0x05, 0x65, 0x2c, 0xad, 0x85, 0xe0, 0x44, 0x6a, 0x0f, 0x96, 0x74, 0x3b,
+    0xb7, 0x59, 0x65, 0xdb, 0xe1, 0x65, 0x82, 0xb2, 0xec, 0xd2, 0xcb, 0x70,
+    0x06, 0x9f, 0xe2, 0x35, 0x3a, 0xb1, 0x19, 0x43, 0xf8, 0xd8, 0x63, 0x76,
+    0x41, 0xa8, 0x46, 0x39, 0x17, 0x06, 0x7e, 0x7f, 0x78, 0x6f, 0x25, 0x97,
+    0x36, 0x96, 0x56, 0x1b, 0x2f, 0x0e, 0x5f, 0x9c, 0x89, 0x8e, 0xb2, 0xf6,
+    0x6f, 0x11, 0x65, 0xcd, 0xe5, 0x97, 0x86, 0xf2, 0x59, 0x7c, 0xe7, 0xc3,
+    0xac, 0xbe, 0x63, 0xc6, 0xe2, 0xcb, 0x9b, 0x5b, 0x0f, 0x17, 0x08, 0x68,
+    0x68, 0xa5, 0xc1, 0x6f, 0x30, 0xdf, 0x98, 0xee, 0x58, 0xb2, 0xf3, 0x44,
+    0x96, 0x56, 0xc6, 0xc7, 0x4f, 0x6b, 0x1c, 0x83, 0x69, 0x2d, 0x8c, 0x87,
+    0x25, 0x2e, 0x1b, 0x0c, 0x3e, 0xc8, 0x5a, 0x5a, 0xae, 0xa1, 0x15, 0xe8,
+    0x54, 0xbc, 0xf8, 0x78, 0x21, 0x6c, 0x44, 0x1c, 0x25, 0x0c, 0x31, 0x36,
+    0xcb, 0xf7, 0x49, 0x6f, 0xfe, 0xfc, 0x37, 0x9f, 0x50, 0x6e, 0x4c, 0xb2,
+    0xfc, 0x38, 0xf4, 0x08, 0xb2, 0x9c, 0xfb, 0x02, 0x89, 0x7f, 0xcf, 0xc2,
+    0xcd, 0xed, 0xe0, 0xac, 0xbf, 0xb3, 0xd9, 0xd8, 0x71, 0x65, 0xff, 0x16,
+    0x7e, 0x37, 0xb1, 0x01, 0x65, 0xfe, 0xfc, 0x6f, 0x6f, 0xca, 0x16, 0x5f,
+    0xff, 0xd8, 0x24, 0x68, 0x0d, 0xfd, 0x04, 0xfc, 0xfe, 0x69, 0x65, 0x62,
+    0x24, 0x08, 0xd2, 0xfc, 0x37, 0x2c, 0xdc, 0x59, 0x58, 0x98, 0x90, 0x21,
+    0x91, 0xc2, 0x1b, 0xb4, 0x75, 0x97, 0xcd, 0xf8, 0x92, 0xcb, 0xfc, 0x17,
+    0x69, 0x41, 0x76, 0xb2, 0xb0, 0xfa, 0xbc, 0x2f, 0xc2, 0x1b, 0xde, 0xc0,
+    0x2c, 0xbf, 0xf3, 0x6b, 0xcf, 0xc3, 0x75, 0xfe, 0xd6, 0x5f, 0x9b, 0xf1,
+    0xfe, 0x24, 0xbe, 0xee, 0x3f, 0xc4, 0x97, 0x18, 0x62, 0x4a, 0x91, 0xf1,
+    0xe1, 0x39, 0x84, 0x74, 0x90, 0x59, 0xaf, 0xa9, 0x26, 0x19, 0xe1, 0xc3,
+    0x21, 0xa7, 0x79, 0xc8, 0x0b, 0x2f, 0x3f, 0x9d, 0x65, 0xf8, 0xcf, 0x89,
+    0x00, 0x59, 0x58, 0x89, 0x73, 0x4d, 0xfc, 0x36, 0xe3, 0x77, 0x89, 0xcc,
+    0x59, 0x7e, 0xf3, 0x46, 0x80, 0xb2, 0xa6, 0x3c, 0x3f, 0x8e, 0x5e, 0x9b,
+    0xcc, 0xb2, 0xff, 0xb0, 0xbf, 0xe6, 0x82, 0x9d, 0x65, 0xff, 0xfe, 0xf6,
+    0x1c, 0x48, 0x06, 0xa3, 0x85, 0x9b, 0xdb, 0xc1, 0x59, 0x7b, 0xf1, 0xde,
+    0x22, 0x67, 0xe6, 0xf7, 0xff, 0x8c, 0x7e, 0x7d, 0xbc, 0xd8, 0x6b, 0x69,
+    0x65, 0x2c, 0xac, 0x44, 0x4f, 0x8d, 0x38, 0x95, 0x43, 0x5e, 0x19, 0xec,
+    0x86, 0x63, 0x9d, 0x46, 0x7e, 0x78, 0x4f, 0x82, 0x3d, 0x12, 0x7f, 0xe1,
+    0x19, 0x91, 0x9f, 0xdf, 0xe0, 0x97, 0xe6, 0xdc, 0x20, 0x2c, 0xbf, 0x8a,
+    0x25, 0xad, 0x42, 0xcb, 0xd1, 0xa0, 0x2c, 0xbe, 0x28, 0xe8, 0x18, 0x79,
+    0x1e, 0x2c, 0xbf, 0xf7, 0xf9, 0x9d, 0xf9, 0xcb, 0xfc, 0x59, 0x79, 0x88,
+    0x0b, 0x36, 0x1b, 0xfa, 0x3a, 0x29, 0x37, 0xbb, 0xdd, 0xcf, 0xac, 0xbf,
+    0xf1, 0xdb, 0x0f, 0xfe, 0x04, 0xbe, 0xb2, 0xff, 0xfe, 0xd0, 0x79, 0xe7,
+    0x97, 0x7e, 0x6e, 0xa5, 0x0f, 0x25, 0x96, 0x83, 0x51, 0x37, 0xf3, 0xea,
+    0x84, 0xc0, 0x30, 0x97, 0xd0, 0xb2, 0xb4, 0xeb, 0x2f, 0xee, 0x41, 0x9f,
+    0xce, 0xd6, 0x5f, 0xf6, 0x6f, 0x7d, 0x3c, 0x9e, 0x4b, 0x2e, 0x81, 0xf6,
+    0x7f, 0x5d, 0x09, 0x70, 0xbe, 0xfe, 0x8f, 0x47, 0xa2, 0x75, 0x97, 0xbf,
+    0x03, 0x59, 0x7f, 0xe6, 0x7e, 0xa5, 0xfe, 0x13, 0x1a, 0xb2, 0xfe, 0xcd,
+    0xb0, 0xf9, 0xb4, 0xb2, 0xa4, 0x7d, 0xe2, 0x1f, 0xd4, 0x22, 0xbb, 0x21,
+    0x17, 0x53, 0xa6, 0x03, 0x28, 0x6d, 0xdb, 0x8b, 0x29, 0x65, 0x39, 0x78,
+    0x60, 0x8d, 0x41, 0xf3, 0x3a, 0x35, 0xff, 0x6b, 0x0e, 0xe5, 0xfe, 0x42,
+    0xca, 0x1a, 0x7f, 0x5e, 0x8e, 0x8d, 0xc8, 0x2f, 0xd2, 0xf0, 0x63, 0x4b,
+    0x2f, 0xf4, 0x6f, 0x6d, 0xe4, 0x1e, 0x2c, 0xbf, 0x9b, 0x8f, 0xd4, 0xb1,
+    0x65, 0xce, 0x7d, 0x1f, 0x1e, 0xd9, 0xb5, 0xfe, 0x68, 0xf9, 0x41, 0xf8,
+    0xb2, 0xba, 0x47, 0x67, 0xa1, 0x16, 0x46, 0x17, 0xec, 0x09, 0xe3, 0x8b,
+    0x29, 0x65, 0xd9, 0x36, 0x8d, 0x97, 0x09, 0xef, 0xf9, 0x82, 0x2b, 0xf4,
+    0x08, 0x53, 0xac, 0xbf, 0xe8, 0x9e, 0x3a, 0xf9, 0x64, 0xeb, 0x2f, 0x6e,
+    0xb1, 0x8b, 0x2b, 0x11, 0x8b, 0xd9, 0x6b, 0x1f, 0x6e, 0x9d, 0x5f, 0xfc,
+    0x27, 0x1b, 0x93, 0x30, 0xf0, 0x80, 0xb2, 0xf4, 0x89, 0xd6, 0x5f, 0x3f,
+    0xf2, 0x75, 0x97, 0x47, 0x4b, 0x2e, 0x28, 0x59, 0x63, 0xc1, 0xf4, 0xf8,
+    0x6c, 0x88, 0xbe, 0x2f, 0x7f, 0x64, 0xde, 0x81, 0x09, 0x65, 0xff, 0xf3,
+    0xee, 0x08, 0x51, 0xe7, 0x6f, 0xc7, 0xf8, 0xb2, 0xa0, 0xff, 0xc2, 0x5d,
+    0x43, 0x4e, 0x39, 0xe1, 0x5c, 0x50, 0xbf, 0xbe, 0xed, 0xb5, 0x8b, 0x2f,
+    0xfe, 0x2c, 0xdc, 0x9c, 0x3a, 0x96, 0x75, 0xf5, 0x97, 0xf6, 0x9b, 0x99,
+    0x9a, 0x59, 0x53, 0x2b, 0xc9, 0xd4, 0x65, 0x9e, 0x8f, 0x34, 0x8e, 0x78,
+    0x45, 0xbd, 0x26, 0xf7, 0xb2, 0x75, 0x96, 0xdb, 0x59, 0x58, 0x6c, 0x5c,
+    0x76, 0xf4, 0x9f, 0x4b, 0x2f, 0xe0, 0x1d, 0xe5, 0x83, 0x59, 0x60, 0xac,
+    0xbc, 0xcf, 0x25, 0x97, 0xde, 0x82, 0xfa, 0xca, 0xd8, 0x6f, 0x38, 0x37,
+    0x6c, 0xe1, 0xf8, 0x6f, 0x4d, 0xbe, 0xcf, 0xe0, 0xd2, 0x5f, 0xf3, 0x91,
+    0xb8, 0x4f, 0xfe, 0x2c, 0xbe, 0x73, 0x40, 0x62, 0xca, 0x91, 0xfe, 0x78,
+    0x84, 0x8d, 0xef, 0xa0, 0x8a, 0x16, 0x54, 0xc9, 0xd5, 0xe8, 0x70, 0xa1,
+    0x3b, 0xf8, 0x52, 0x88, 0x5d, 0x7f, 0x39, 0x8f, 0xf7, 0x35, 0x65, 0xee,
+    0x1f, 0x4b, 0x2e, 0x6e, 0xd6, 0x50, 0x0d, 0xa7, 0x07, 0x68, 0xd5, 0x54,
+    0x6d, 0x1e, 0x56, 0x95, 0xbe, 0xc5, 0x7f, 0xff, 0x75, 0x2c, 0xf8, 0xa4,
+    0x51, 0x83, 0x0f, 0xdb, 0xf1, 0xa5, 0x97, 0xf7, 0xdb, 0x50, 0x11, 0x5a,
+    0xcb, 0xb4, 0xfe, 0x44, 0xa8, 0x8c, 0x97, 0xbd, 0x93, 0xac, 0xbd, 0x29,
+    0x42, 0xcb, 0xd9, 0xec, 0xd8, 0x6e, 0x42, 0x3b, 0x4e, 0x89, 0xb2, 0x68,
+    0xbf, 0xfb, 0xed, 0x3f, 0xf8, 0x1d, 0xcf, 0xbf, 0x96, 0x5f, 0xff, 0x16,
+    0x7d, 0xb0, 0xbd, 0x9f, 0xf3, 0x76, 0xb2, 0xff, 0xbe, 0xc7, 0xe7, 0xa0,
+    0x42, 0x59, 0x7f, 0x89, 0xb9, 0xc8, 0xf4, 0x2c, 0xbf, 0xe8, 0x2e, 0xdf,
+    0xef, 0xd0, 0x36, 0x22, 0xdf, 0xa4, 0xd6, 0x39, 0xbf, 0xe8, 0xce, 0xb2,
+    0x73, 0x1f, 0xa5, 0x97, 0xfc, 0xe6, 0x6b, 0x1b, 0xd0, 0x35, 0x95, 0xa3,
+    0xf3, 0x23, 0xba, 0x92, 0x7e, 0x80, 0x8c, 0x03, 0xf0, 0xd3, 0xbf, 0x82,
+    0x2b, 0x6d, 0x6b, 0x16, 0x5f, 0xff, 0xb3, 0xa9, 0x7d, 0xa7, 0xcd, 0x7f,
+    0xed, 0xa8, 0x59, 0x7f, 0xbd, 0x86, 0xbc, 0x36, 0xda, 0xcb, 0xfd, 0x9c,
+    0xcd, 0xcf, 0x40, 0xd6, 0x5d, 0x13, 0xac, 0xbd, 0xe8, 0x99, 0x65, 0xfe,
+    0x86, 0x2c, 0x9c, 0x49, 0x2c, 0xb7, 0x43, 0x3e, 0x7c, 0x17, 0xf0, 0xed,
+    0xf9, 0xe6, 0x26, 0x99, 0x65, 0x76, 0x99, 0x77, 0x8d, 0x43, 0x09, 0xcd,
+    0xe6, 0xb5, 0x89, 0xe5, 0x72, 0x38, 0x4b, 0xef, 0x9b, 0x9e, 0x59, 0x76,
+    0xa4, 0xb2, 0xff, 0xc5, 0x9f, 0xf8, 0x67, 0xfe, 0x76, 0xb2, 0xfc, 0x30,
+    0xbe, 0xa4, 0xb2, 0xfe, 0x7e, 0xb9, 0x9d, 0x7d, 0x65, 0xd8, 0x62, 0xca,
+    0x01, 0xe3, 0x11, 0x7d, 0xf1, 0xf8, 0x21, 0xd6, 0x54, 0x1e, 0x2e, 0x10,
+    0xdb, 0x8b, 0x2c, 0x62, 0xcb, 0x98, 0x0b, 0x2f, 0x8c, 0x72, 0x92, 0xcb,
+    0x86, 0xcb, 0x2e, 0xf3, 0x2c, 0xbe, 0x97, 0x3d, 0x8b, 0x2f, 0x98, 0x22,
+    0xbc, 0x59, 0x6e, 0x6c, 0x45, 0x58, 0xc5, 0xbb, 0x22, 0x98, 0x59, 0xc5,
+    0x80, 0x45, 0x4c, 0x98, 0xe8, 0x61, 0x7b, 0x4e, 0x9a, 0xb0, 0x23, 0x2e,
+    0xb8, 0x10, 0xb2, 0xe0, 0x42, 0xcb, 0xf0, 0x65, 0x84, 0x2d, 0x8d, 0x60,
+    0x05, 0xaf, 0xff, 0xfb, 0xd8, 0x1d, 0x1b, 0xd4, 0xbd, 0x84, 0x6f, 0x8a,
+    0x33, 0x4b, 0x2a, 0x15, 0xcf, 0x0c, 0x8c, 0xd1, 0x76, 0x40, 0xd4, 0x2c,
+    0xc1, 0x1b, 0xb1, 0x2a, 0xfc, 0xfa, 0xfe, 0xd0, 0x9f, 0xe4, 0x85, 0x6b,
+    0x2f, 0xf0, 0x72, 0x68, 0x3c, 0x85, 0x6b, 0x2f, 0xd8, 0x38, 0x94, 0x61,
+    0xf6, 0x00, 0xd2, 0xff, 0xf1, 0x3f, 0x5c, 0x34, 0xd7, 0xd9, 0xd9, 0xc0,
+    0xb2, 0xfa, 0x35, 0x1e, 0x59, 0x58, 0x7e, 0x2e, 0xa1, 0x7f, 0xd8, 0xdd,
+    0x7f, 0x51, 0x9d, 0x2c, 0xbf, 0xfc, 0x4d, 0xd7, 0x26, 0x2c, 0x9f, 0x3a,
+    0xfa, 0xcb, 0xff, 0x7b, 0x0e, 0x24, 0x03, 0x3a, 0xfa, 0xca, 0xc4, 0x46,
+    0x7d, 0x32, 0xff, 0x75, 0xdb, 0x68, 0x48, 0x1a, 0xcb, 0xe0, 0x1d, 0xe5,
+    0xb1, 0x33, 0xd2, 0x20, 0xe4, 0x31, 0x7e, 0x45, 0x70, 0x7e, 0xb2, 0xed,
+    0xb8, 0x59, 0x7f, 0x00, 0xe2, 0x70, 0x49, 0xd6, 0x5f, 0xdc, 0x62, 0x28,
+    0xe9, 0x65, 0xd9, 0xd2, 0xca, 0xe8, 0xfd, 0x7e, 0x65, 0xb6, 0x59, 0x7f,
+    0xf8, 0x48, 0x32, 0x26, 0x93, 0x96, 0x75, 0xf5, 0x97, 0xc0, 0xd3, 0x69,
+    0x65, 0x42, 0x74, 0x32, 0x5b, 0xc1, 0x77, 0x84, 0x77, 0x0c, 0xcc, 0x4c,
+    0xbf, 0x8b, 0x3a, 0x03, 0x49, 0x65, 0xfd, 0xce, 0x44, 0xa3, 0x4b, 0x2f,
+    0xfb, 0x50, 0x76, 0x9a, 0x1f, 0x71, 0x65, 0x61, 0xf4, 0x76, 0x5b, 0x78,
+    0x3d, 0x7d, 0x65, 0x9d, 0x65, 0xd3, 0x71, 0x65, 0x4e, 0x8f, 0xd2, 0x84,
+    0xaf, 0x08, 0xbe, 0x3c, 0x20, 0x85, 0xd8, 0x62, 0xcb, 0xfe, 0x09, 0x77,
+    0xec, 0x9f, 0x8c, 0xb2, 0xff, 0xa3, 0xac, 0x04, 0x6f, 0xc9, 0xd6, 0x5f,
+    0xc5, 0x9f, 0xe3, 0x81, 0x65, 0x69, 0x17, 0x07, 0x17, 0x01, 0xd7, 0x0e,
+    0xef, 0xf1, 0x4e, 0xda, 0xeb, 0xd3, 0xac, 0xbf, 0xd3, 0xf3, 0x59, 0xdc,
+    0x4e, 0xb2, 0xfa, 0x3a, 0xfe, 0xe2, 0xca, 0x83, 0xdc, 0x91, 0xb5, 0xff,
+    0xef, 0xbe, 0x9c, 0x70, 0x4f, 0xa7, 0x92, 0xcb, 0xfe, 0x15, 0xea, 0x3e,
+    0xdd, 0xb0, 0xd6, 0x5f, 0xec, 0x29, 0xf0, 0x6f, 0xe5, 0x95, 0x32, 0x35,
+    0xfe, 0x42, 0x14, 0x73, 0x0f, 0x6f, 0xec, 0x3e, 0x0d, 0x8c, 0x59, 0x71,
+    0xe1, 0x65, 0xff, 0xa5, 0x06, 0xf5, 0xfd, 0x46, 0x18, 0xb2, 0x8e, 0x88,
+    0x47, 0x2d, 0xf8, 0xb5, 0xdf, 0xe2, 0xcb, 0xfe, 0x79, 0x6c, 0x1b, 0x6f,
+    0x81, 0xac, 0xbf, 0x64, 0xde, 0x6f, 0xac, 0xbf, 0xff, 0x13, 0x9b, 0x34,
+    0x67, 0xe0, 0xf1, 0xe8, 0x02, 0xcb, 0xff, 0xf7, 0xca, 0x37, 0x5b, 0x59,
+    0xd4, 0xbf, 0x85, 0xda, 0xcb, 0xff, 0xf8, 0x7e, 0x61, 0x40, 0x9f, 0x6e,
+    0x16, 0x6f, 0x6f, 0x05, 0x65, 0x62, 0x61, 0xac, 0xa8, 0x15, 0x8a, 0x24,
+    0xd9, 0x39, 0x19, 0xad, 0xf6, 0x67, 0xb8, 0xb2, 0xa1, 0x71, 0x73, 0x23,
+    0x69, 0x78, 0x61, 0x8a, 0xcb, 0xc8, 0x5f, 0xf1, 0xd0, 0x6e, 0x94, 0xde,
+    0x30, 0xc3, 0x12, 0x5f, 0xb0, 0xd2, 0x0f, 0x12, 0x0b, 0x34, 0x17, 0x8e,
+    0xff, 0x59, 0x7c, 0x2c, 0xc3, 0x0c, 0x59, 0x76, 0x01, 0x65, 0x61, 0xbe,
+    0xf9, 0x45, 0xe8, 0x07, 0x16, 0x54, 0x23, 0x40, 0xe7, 0x5f, 0x5a, 0x10,
+    0x82, 0xff, 0xf9, 0xa4, 0xfc, 0x39, 0xde, 0x4e, 0x6f, 0x99, 0x65, 0xfd,
+    0x07, 0x7f, 0x86, 0x16, 0x5f, 0x36, 0x81, 0xc5, 0x97, 0xfe, 0x08, 0xaf,
+    0x36, 0xcb, 0x0c, 0x70, 0x2c, 0xbf, 0xf4, 0x02, 0x25, 0x1a, 0xd6, 0x18,
+    0xb2, 0xff, 0xfa, 0x38, 0x3f, 0x31, 0x9e, 0x38, 0x7e, 0x18, 0x59, 0x53,
+    0xa2, 0x3f, 0xb3, 0xea, 0x84, 0x7c, 0xb4, 0x35, 0x2f, 0xfb, 0x9a, 0x80,
+    0xfc, 0x9b, 0x7a, 0xcb, 0xff, 0x16, 0x73, 0xbf, 0x37, 0x70, 0x4b, 0x2f,
+    0xff, 0xf1, 0xa6, 0x3e, 0x8d, 0x17, 0xcc, 0x91, 0x05, 0xf9, 0x84, 0xb2,
+    0xff, 0xf7, 0xfc, 0xce, 0x0c, 0x2f, 0xfb, 0x24, 0xb2, 0xff, 0xef, 0x36,
+    0xbc, 0xfa, 0xce, 0xdf, 0xeb, 0x2f, 0x8e, 0x77, 0x96, 0xc4, 0x46, 0x62,
+    0x45, 0x42, 0x74, 0x78, 0x74, 0xc7, 0xc1, 0x87, 0x85, 0xfd, 0xa0, 0xf7,
+    0xe6, 0xe2, 0xcb, 0xe3, 0x1c, 0xa4, 0xb2, 0xff, 0xbf, 0x1d, 0x01, 0xfd,
+    0xe6, 0x59, 0x6f, 0x2c, 0xac, 0x3c, 0xae, 0xce, 0x6f, 0x69, 0xfb, 0x59,
+    0x7f, 0x4e, 0xdd, 0xfa, 0x3e, 0xb2, 0xfa, 0x27, 0x20, 0xac, 0xad, 0x1e,
+    0x8f, 0x8b, 0xef, 0xb8, 0xc7, 0x85, 0x97, 0xfe, 0x8c, 0x29, 0xf0, 0x9f,
+    0xae, 0x2c, 0xbf, 0x16, 0x7e, 0x34, 0xb2, 0xf1, 0x86, 0x18, 0x92, 0xfc,
+    0xe6, 0xf9, 0xbe, 0x90, 0x59, 0xa0, 0xa8, 0x44, 0x03, 0x23, 0x5f, 0x1f,
+    0x91, 0xf5, 0x97, 0xb7, 0xc1, 0xd6, 0x5e, 0xfb, 0x18, 0xb2, 0xf7, 0x1f,
+    0x4b, 0x2b, 0xa3, 0x73, 0xf1, 0xdb, 0xa0, 0x6b, 0x2f, 0xf6, 0xb5, 0x13,
+    0x8f, 0x09, 0x65, 0x78, 0xf2, 0x5c, 0x5a, 0xa1, 0x30, 0x5c, 0x22, 0x65,
+    0x77, 0x6b, 0xbe, 0x06, 0x64, 0xcb, 0x2f, 0xb9, 0x85, 0xf5, 0x95, 0x87,
+    0x86, 0xe4, 0x56, 0xe6, 0xc5, 0x6a, 0x63, 0x22, 0xc6, 0xee, 0x88, 0xa6,
+    0x21, 0xd4, 0x2f, 0x7d, 0x19, 0x31, 0x3e, 0xde, 0xdb, 0xce, 0x96, 0x5a,
+    0x43, 0x5c, 0x65, 0xc9, 0x77, 0xed, 0x08, 0x6a, 0x14, 0x2e, 0x6b, 0x86,
+    0x72, 0x52, 0xfe, 0x83, 0xc7, 0xa0, 0x0b, 0x2f, 0x44, 0xe1, 0x59, 0x61,
+    0x5e, 0x1e, 0x4f, 0x8b, 0x2f, 0xfe, 0x6f, 0xc6, 0xb0, 0xbe, 0xee, 0x4b,
+    0x2a, 0x4c, 0x90, 0xd9, 0x8b, 0x35, 0x18, 0xdf, 0xa3, 0xc9, 0x29, 0xd1,
+    0x70, 0xbd, 0xef, 0x2b, 0xbf, 0xfa, 0x30, 0xb0, 0x6f, 0x22, 0x89, 0xd6,
+    0x5f, 0x77, 0xa8, 0x92, 0xcb, 0xb7, 0xc2, 0xcb, 0xff, 0x36, 0xbb, 0xf3,
+    0x77, 0xe6, 0x25, 0x97, 0xff, 0xff, 0x9c, 0x81, 0xff, 0x61, 0xff, 0xcc,
+    0xdf, 0xe6, 0xef, 0xcc, 0x20, 0x67, 0x59, 0x53, 0xa2, 0xec, 0x07, 0xf5,
+    0x08, 0xf7, 0xc8, 0x69, 0xdf, 0xf6, 0x6e, 0x41, 0xfa, 0x96, 0x7d, 0x65,
+    0x63, 0x2e, 0x5d, 0xa9, 0x2b, 0x9a, 0x7e, 0x74, 0x12, 0x8c, 0x6b, 0x84,
+    0xd7, 0xf7, 0x72, 0xce, 0x7d, 0x96, 0x5e, 0x28, 0xde, 0xb2, 0xff, 0xed,
+    0x47, 0x7e, 0x27, 0xf9, 0x41, 0x8b, 0x2e, 0x15, 0xb2, 0xca, 0x59, 0x6f,
+    0x2c, 0xa9, 0x17, 0x8c, 0x17, 0x53, 0x9e, 0xae, 0x8d, 0xaa, 0x11, 0x78,
+    0xf0, 0x99, 0xbd, 0x33, 0xce, 0xb2, 0xf7, 0x03, 0xb8, 0xb2, 0xb0, 0xdf,
+    0x7c, 0x7a, 0xff, 0x41, 0x48, 0x9a, 0x3a, 0x59, 0x50, 0xec, 0x78, 0x27,
+    0x84, 0xd4, 0xa5, 0x11, 0x8e, 0x55, 0x46, 0x4e, 0x75, 0x9b, 0x2c, 0xef,
+    0xb8, 0xdd, 0x7a, 0x94, 0x2a, 0xc7, 0x93, 0x47, 0xf7, 0xa9, 0x78, 0xe7,
+    0x87, 0x47, 0xa5, 0xc5, 0xbc, 0x6b, 0x00, 0x8c, 0x20, 0xa7, 0x26, 0x79,
+    0x1b, 0x5f, 0xe9, 0x7a, 0x81, 0x66, 0xde, 0x5d, 0xb7, 0x0d, 0x91, 0x19,
+    0x37, 0x48, 0x2f, 0xcd, 0x34, 0x98, 0x96, 0x5d, 0xb5, 0x32, 0xcb, 0xfe,
+    0x9b, 0xfb, 0xbc, 0x89, 0x83, 0xa5, 0x97, 0xf8, 0x70, 0x47, 0x81, 0xc2,
+    0xca, 0x83, 0xf0, 0x73, 0xfb, 0xfe, 0xf4, 0x4f, 0xa8, 0x93, 0xe9, 0x65,
+    0xff, 0xef, 0x47, 0x8b, 0x0d, 0x1e, 0x14, 0x6e, 0x2c, 0xbf, 0x11, 0xa2,
+    0x40, 0x16, 0x5f, 0xf8, 0x9f, 0xaf, 0xfa, 0x3b, 0xc9, 0x96, 0x5f, 0x98,
+    0x7e, 0x63, 0x56, 0x5e, 0x11, 0xc9, 0x65, 0x0d, 0x1f, 0x18, 0x96, 0x45,
+    0x3f, 0x40, 0xdd, 0x28, 0xbf, 0x41, 0x31, 0xf1, 0x65, 0xf1, 0x9f, 0xcd,
+    0xc5, 0x95, 0x39, 0xe5, 0xf4, 0x4b, 0x7f, 0xfe, 0x27, 0x33, 0x4d, 0x1e,
+    0x13, 0xed, 0xe8, 0xde, 0xb2, 0xff, 0xcd, 0xe8, 0x1f, 0x83, 0x1d, 0x71,
+    0x65, 0xe2, 0x2c, 0x59, 0x58, 0x7b, 0x2e, 0x7f, 0x78, 0x66, 0x81, 0x65,
+    0xf8, 0xfa, 0xd3, 0xfd, 0x65, 0xed, 0x9b, 0xbd, 0xac, 0xbb, 0x3e, 0xb2,
+    0xa7, 0x37, 0x3e, 0x23, 0xbf, 0xf1, 0xc7, 0x05, 0x9b, 0xcb, 0x38, 0xb2,
+    0xf7, 0x88, 0xeb, 0x2b, 0x62, 0x3e, 0xe0, 0x7b, 0x18, 0x58, 0x89, 0xcf,
+    0xaf, 0xfe, 0x99, 0xfb, 0xf4, 0x4b, 0xe5, 0x87, 0x59, 0x7f, 0x6b, 0x08,
+    0x9e, 0x75, 0x97, 0xfe, 0x12, 0x0f, 0x9a, 0x3b, 0x91, 0xab, 0x2b, 0xb4,
+    0x58, 0x32, 0x2f, 0xcb, 0x2f, 0xfc, 0x67, 0x52, 0xe6, 0xcc, 0xf6, 0x12,
+    0xcb, 0xff, 0x4d, 0x1d, 0x73, 0x4d, 0xbf, 0x06, 0xb2, 0xa1, 0x10, 0x98,
+    0x85, 0x7f, 0xf8, 0xfd, 0x4b, 0x9b, 0x30, 0x8b, 0x18, 0x0b, 0x2f, 0xe7,
+    0xd0, 0x63, 0xa9, 0x2c, 0xa6, 0x3f, 0x97, 0x4b, 0xbf, 0xfa, 0x06, 0x7c,
+    0xee, 0x39, 0xec, 0x3a, 0xcb, 0xf3, 0xe0, 0xdb, 0x7a, 0xca, 0xd1, 0xf6,
+    0x1d, 0x12, 0xf3, 0x78, 0x2b, 0x2f, 0xbe, 0xde, 0x0a, 0xcb, 0xfb, 0x35,
+    0xd4, 0xbf, 0x0b, 0x2d, 0xb8, 0x2a, 0x8f, 0x40, 0x42, 0x2b, 0xf1, 0x99,
+    0xdc, 0x01, 0x65, 0xf7, 0x7e, 0xcd, 0x2c, 0xa8, 0x3f, 0xe6, 0x32, 0xdd,
+    0x29, 0xad, 0x8c, 0x89, 0x6d, 0xac, 0x9e, 0x50, 0x8b, 0x19, 0x06, 0x46,
+    0x62, 0xd0, 0x96, 0x98, 0x93, 0x50, 0xb0, 0xf4, 0x63, 0x6f, 0x0f, 0x82,
+    0x85, 0xa7, 0xe1, 0x34, 0x18, 0x46, 0x6f, 0x22, 0xdd, 0x87, 0x55, 0x85,
+    0xed, 0x73, 0x82, 0xf7, 0x5b, 0x54, 0xa4, 0xe1, 0x4c, 0xa7, 0x9d, 0xa2,
+    0x52, 0x08, 0xa2, 0x39, 0xdd, 0xa5, 0x29, 0x28, 0x54, 0x94, 0x26, 0x2a,
+    0xa3, 0x0b, 0xda, 0x71, 0x95, 0x0a, 0xb8, 0x61, 0xc5, 0xae, 0x2d, 0x9e,
+    0x96, 0x89, 0x2a, 0xd8, 0x9c, 0x76, 0x93, 0x0f, 0x31, 0x07, 0x5e, 0x6c,
+    0xff, 0x7f, 0x76, 0x8b, 0x4f, 0xaa, 0xe0, 0xc9, 0xab, 0xb2, 0xcd, 0xc9,
+    0x5b, 0x53, 0x5a, 0x39, 0xed, 0x5a, 0xa4, 0xf3, 0xd7, 0x2a, 0xde, 0xbc,
+    0x30, 0x47, 0xb7, 0x8a, 0xc0, 0xae, 0x3d, 0x05, 0x72, 0x8e, 0x4a, 0xf0,
+    0x28, 0x79, 0x8a, 0x4b, 0x4f, 0xde, 0xa5, 0xa8, 0x69, 0x62, 0x7b, 0xe7,
+    0xf2, 0x4c, 0xa4, 0x51, 0x6d, 0xd6, 0x4f, 0xc2, 0x5b, 0x99, 0x6d, 0xda,
+    0x52, 0x4d, 0x0b, 0x9c, 0x1c, 0xef, 0x96, 0xe0, 0xcb, 0xbd, 0xe3, 0xe7,
+    0xd6, 0x5f, 0xe7, 0x3c, 0x7d, 0xb8, 0xcb, 0x2f, 0xd9, 0xa1, 0x3f, 0xc5,
+    0x97, 0x7a, 0x16, 0x58, 0x58, 0x11, 0x18, 0x43, 0x9c, 0x31, 0x10, 0xa6,
+    0xfb, 0xb2, 0x8c, 0x59, 0x7e, 0xd7, 0x6e, 0xfd, 0xaa, 0x2e, 0x35, 0x85,
+    0xc1, 0xeb, 0xe1, 0x0d, 0xfe, 0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x45, 0xd6,
+    0xbf, 0xf8, 0x5b, 0xc8, 0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x12, 0x8a, 0xa2,
+    0x70, 0xa1, 0x0e, 0x72, 0x99, 0x43, 0x4c, 0x65, 0x46, 0xc3, 0x27, 0xb2,
+    0x96, 0x9d, 0x90, 0xdc, 0x8c, 0x9d, 0xf7, 0x07, 0x52, 0xc1, 0x0c, 0xce,
+    0x42, 0x73, 0xe5, 0x1b, 0xa8, 0x77, 0xff, 0x85, 0x9d, 0xe4, 0x2f, 0x35,
+    0xdb, 0xbf, 0x6a, 0x89, 0x69, 0x7f, 0xc2, 0xaf, 0xcd, 0xb8, 0xf1, 0xd6,
+    0xea, 0xcb, 0xff, 0xe3, 0x3b, 0xda, 0x85, 0x20, 0x15, 0xeb, 0x68, 0xd9,
+    0xb3, 0xdb, 0x6b, 0x2f, 0xff, 0xfd, 0xbb, 0xf1, 0x40, 0xce, 0x28, 0x26,
+    0x15, 0x5f, 0x15, 0xeb, 0x68, 0xd9, 0xb3, 0xdb, 0x6b, 0x2b, 0xc8, 0xfe,
+    0x31, 0xba, 0xfc, 0x2b, 0x90, 0xa0, 0x49, 0xd6, 0x5e, 0xdc, 0x3b, 0x2c,
+    0xbf, 0xec, 0x21, 0xfa, 0x34, 0xe4, 0xb2, 0xa0, 0xf5, 0x70, 0x7e, 0xf3,
+    0xbf, 0x6a, 0x88, 0xdd, 0x7e, 0xea, 0x62, 0x81, 0xac, 0xae, 0xcf, 0x49,
+    0xca, 0x6f, 0xc3, 0xf4, 0x66, 0x96, 0x56, 0x8f, 0x24, 0x88, 0xaf, 0xf6,
+    0x98, 0x57, 0xdf, 0xa0, 0xc5, 0x97, 0x83, 0xb6, 0x62, 0xcb, 0xed, 0x06,
+    0x00, 0xb2, 0x98, 0xff, 0x26, 0x39, 0x10, 0x86, 0xff, 0xff, 0xfb, 0x79,
+    0x67, 0x38, 0x38, 0xcd, 0x76, 0xef, 0xd8, 0xb9, 0x37, 0xe3, 0xfc, 0x54,
+    0x61, 0xeb, 0x7a, 0x11, 0x7c, 0xc6, 0x17, 0xf7, 0x05, 0x99, 0xcd, 0xc1,
+    0x16, 0x5f, 0xdb, 0x8d, 0x3f, 0x9b, 0x6d, 0x65, 0xfb, 0x74, 0x5e, 0x85,
+    0x66, 0x2c, 0xbe, 0x19, 0x60, 0x16, 0x5f, 0x41, 0x87, 0x1a, 0xcb, 0xee,
+    0xfd, 0x06, 0x2c, 0xbd, 0xe8, 0x35, 0x65, 0x62, 0x21, 0x74, 0x42, 0x2b,
+    0x23, 0x10, 0x92, 0xff, 0xcf, 0x21, 0x79, 0xae, 0xdd, 0xfb, 0x54, 0x4b,
+    0xeb, 0x62, 0xcb, 0xde, 0x7f, 0xac, 0xb7, 0xf8, 0x6b, 0x04, 0x10, 0xbf,
+    0x89, 0xa0, 0xc0, 0xee, 0x2c, 0xbf, 0x84, 0x6e, 0xb7, 0x74, 0x62, 0xca,
+    0x84, 0x46, 0x61, 0x43, 0x18, 0x5f, 0xd0, 0xdb, 0x99, 0xd4, 0x96, 0x5f,
+    0xb4, 0x6f, 0x83, 0xc5, 0x95, 0xe3, 0xda, 0x10, 0xc2, 0xf4, 0x6a, 0x16,
+    0x56, 0x1b, 0xe6, 0x23, 0xb9, 0xfc, 0xb2, 0xf8, 0x03, 0xe4, 0x2c, 0xbe,
+    0x7d, 0x4f, 0x3a, 0xcb, 0x61, 0x1e, 0x36, 0xf2, 0x2a, 0x92, 0x21, 0x38,
+    0xb9, 0x78, 0x10, 0x62, 0xcb, 0xfd, 0x8d, 0xa9, 0x79, 0x8c, 0x59, 0x5b,
+    0x87, 0xa1, 0xe1, 0xdb, 0xf6, 0xeb, 0xce, 0x24, 0x96, 0x5f, 0x07, 0xcd,
+    0xa5, 0x97, 0xdc, 0xf4, 0x79, 0x65, 0xfe, 0x89, 0xe0, 0xa7, 0xcd, 0xd5,
+    0x97, 0x73, 0x4b, 0x2a, 0x0f, 0xbe, 0x72, 0x29, 0x8d, 0xac, 0x2c, 0x55,
+    0x32, 0x60, 0xe2, 0x34, 0x39, 0xc9, 0x07, 0x08, 0x8c, 0x85, 0xdf, 0x71,
+    0xad, 0xf4, 0x4e, 0xc6, 0xdb, 0x86, 0x9a, 0x85, 0xc1, 0xd0, 0x7d, 0x18,
+    0x31, 0x43, 0x17, 0x90, 0xa3, 0xfb, 0x98, 0x49, 0x76, 0xcb, 0x44, 0x84,
+    0x8d, 0xff, 0xf8, 0xa3, 0xb1, 0x7f, 0xeb, 0xb6, 0xe1, 0x66, 0xf7, 0x59,
+    0x7f, 0xf4, 0xbe, 0xd3, 0x0b, 0x1b, 0x6f, 0x81, 0xac, 0xbf, 0x18, 0x2d,
+    0x8d, 0x9d, 0x65, 0xfe, 0x16, 0x07, 0xe8, 0x0d, 0xd2, 0xca, 0x1a, 0x60,
+    0xfd, 0x2d, 0x32, 0x49, 0x16, 0xdf, 0xb5, 0xdb, 0xbf, 0x6a, 0x8a, 0xad,
+    0x7e, 0xce, 0x7a, 0x3a, 0x59, 0x61, 0x78, 0x7b, 0xde, 0x36, 0xbe, 0x0e,
+    0xe8, 0xe1, 0x65, 0xb6, 0xb5, 0x95, 0xe3, 0x77, 0xb6, 0x4b, 0x73, 0x6e,
+    0xac, 0xbb, 0x34, 0xb2, 0xf6, 0x75, 0xf5, 0x97, 0xcc, 0x77, 0xde, 0xb2,
+    0x8d, 0x3e, 0xf7, 0x19, 0x00, 0xb7, 0xc7, 0x6f, 0x16, 0xe9, 0x8b, 0x2f,
+    0xef, 0x46, 0xf0, 0x8f, 0x16, 0x5f, 0xcf, 0xe9, 0x8a, 0x06, 0xb2, 0xff,
+    0xfb, 0xe0, 0x38, 0x47, 0x99, 0xf0, 0x1c, 0x3d, 0x2c, 0xbf, 0xfb, 0xfe,
+    0x8e, 0x13, 0x84, 0x56, 0xda, 0x59, 0x7a, 0x25, 0x8b, 0x2f, 0xe6, 0x0f,
+    0x65, 0x13, 0x2c, 0xa9, 0x26, 0x7c, 0x32, 0xfc, 0x2d, 0xe9, 0x4a, 0x64,
+    0x7f, 0x0d, 0xdf, 0xf1, 0xb8, 0x59, 0xd7, 0xdc, 0xeb, 0x2d, 0xba, 0xb2,
+    0xc6, 0x2c, 0xae, 0x8d, 0x37, 0xc5, 0x2f, 0x6e, 0xc7, 0xd6, 0x5f, 0xd0,
+    0x71, 0x20, 0xbb, 0x59, 0x74, 0x69, 0x65, 0x68, 0xf1, 0x38, 0x5d, 0x73,
+    0xf4, 0xb2, 0xf0, 0x90, 0x05, 0x95, 0xd1, 0xb4, 0xf8, 0xbd, 0xf4, 0xc4,
+    0x1e, 0xd6, 0x5f, 0xd8, 0x79, 0x9d, 0xe7, 0x59, 0x7e, 0xe3, 0x79, 0x8d,
+    0x59, 0x73, 0xf4, 0xb2, 0x88, 0xdf, 0xfc, 0xa2, 0xff, 0xfa, 0x5e, 0x79,
+    0x1a, 0xfc, 0xc0, 0xf3, 0x8c, 0xb2, 0x96, 0x56, 0x1e, 0xde, 0xea, 0x85,
+    0x42, 0x66, 0x0c, 0x48, 0xed, 0xa4, 0xf7, 0x70, 0xd9, 0x65, 0xff, 0x14,
+    0x4b, 0xec, 0x71, 0xc2, 0xcb, 0xf6, 0xbb, 0x77, 0xed, 0x51, 0x20, 0x2f,
+    0xb5, 0x85, 0xf5, 0x97, 0xc3, 0xda, 0xc5, 0x4d, 0xa1, 0x65, 0x0d, 0x18,
+    0x18, 0x6f, 0xa3, 0x6e, 0x10, 0xd6, 0xc4, 0xc4, 0x85, 0xc3, 0x5a, 0xfd,
+    0xc7, 0x27, 0xe9, 0x65, 0xff, 0x7d, 0xb8, 0xc1, 0x15, 0x8e, 0x16, 0x5d,
+    0x84, 0xb2, 0xe0, 0xc2, 0xca, 0x92, 0x2e, 0xfa, 0x2d, 0x62, 0x7d, 0xc3,
+    0xcd, 0x0a, 0xdf, 0xd1, 0xa9, 0xe3, 0x53, 0xac, 0xbe, 0x63, 0xc7, 0x16,
+    0x54, 0x8f, 0x40, 0xd2, 0xfb, 0xfd, 0xa9, 0xcf, 0x05, 0x2e, 0x2c, 0xa8,
+    0x3d, 0x7c, 0x23, 0xbf, 0xfe, 0x3b, 0x10, 0x04, 0xfb, 0x10, 0x65, 0x9c,
+    0x59, 0x7f, 0xf3, 0x41, 0xdc, 0x62, 0x6e, 0xc1, 0x49, 0x65, 0xff, 0xff,
+    0x37, 0xcb, 0x37, 0x96, 0x72, 0x7c, 0x33, 0x6c, 0x3e, 0x6d, 0x2c, 0xac,
+    0x4c, 0x03, 0xc9, 0xe0, 0x46, 0xbf, 0x01, 0xc0, 0x47, 0x59, 0x7a, 0x77,
+    0x1a, 0xcb, 0xfd, 0xdb, 0x61, 0x81, 0x2f, 0xac, 0xa8, 0x3f, 0x8c, 0x27,
+    0xe8, 0x76, 0xfe, 0x10, 0x51, 0xa6, 0x83, 0xac, 0xbb, 0x92, 0x59, 0x4e,
+    0x79, 0x3c, 0x32, 0xbf, 0xff, 0xa3, 0xbf, 0xb6, 0xb5, 0x80, 0xe7, 0xdf,
+    0xce, 0x35, 0x97, 0x0a, 0x7c, 0xb2, 0xff, 0xe9, 0xbc, 0xe7, 0xff, 0xa3,
+    0xe1, 0x3a, 0xcb, 0xff, 0xb0, 0x71, 0x28, 0xc1, 0xc1, 0x7d, 0x65, 0x62,
+    0x21, 0xce, 0x8d, 0x7b, 0x76, 0x3e, 0xb2, 0xa1, 0x97, 0x57, 0x3c, 0x24,
+    0xc6, 0x79, 0x91, 0xaf, 0x1a, 0xb3, 0xd2, 0xfe, 0xe1, 0x14, 0xcc, 0x67,
+    0x56, 0xf4, 0x6a, 0x4f, 0x28, 0x1c, 0xa1, 0xe9, 0xc8, 0xc8, 0x3f, 0x0a,
+    0x80, 0xbb, 0xef, 0x21, 0xdb, 0x5b, 0x12, 0x14, 0x5b, 0xa4, 0x57, 0xfe,
+    0x94, 0x60, 0x3d, 0x98, 0x5d, 0xac, 0xbf, 0x41, 0x16, 0x7d, 0x65, 0xf6,
+    0xb4, 0xdd, 0xac, 0xbe, 0x2c, 0x9c, 0x5e, 0x22, 0x17, 0x6c, 0xf4, 0x42,
+    0x5b, 0xf8, 0x5f, 0x0d, 0x97, 0xb1, 0x65, 0xfe, 0x17, 0xe7, 0x3e, 0x40,
+    0xd6, 0x50, 0xb5, 0x4e, 0x7a, 0x8f, 0x08, 0xc4, 0xcd, 0xb3, 0x1b, 0xfc,
+    0x2f, 0x35, 0xdb, 0xbf, 0x6a, 0x8b, 0x21, 0x7f, 0xff, 0xbc, 0xfa, 0x17,
+    0xe7, 0xf9, 0x06, 0x7e, 0x61, 0xe3, 0x71, 0x65, 0xfc, 0xdb, 0xc5, 0xf2,
+    0x3a, 0x59, 0x7f, 0xff, 0x82, 0x3c, 0x16, 0x26, 0x78, 0x82, 0xfb, 0x98,
+    0x6c, 0x71, 0x65, 0xff, 0xfb, 0xb6, 0xe6, 0x0f, 0x0a, 0x0c, 0xf9, 0xaf,
+    0xc5, 0x97, 0xfd, 0xe6, 0x70, 0x60, 0x75, 0x3a, 0xcb, 0xf7, 0x82, 0xe6,
+    0x8b, 0xf2, 0x23, 0xfe, 0xad, 0x68, 0x92, 0x67, 0x03, 0x87, 0xad, 0x71,
+    0x39, 0x8f, 0xc6, 0xd5, 0x43, 0x54, 0x50, 0xd1, 0xff, 0x5f, 0xe1, 0x79,
+    0xae, 0xdd, 0xfb, 0x54, 0x5a, 0xeb, 0xf4, 0xdf, 0x1c, 0x12, 0xcb, 0xfc,
+    0x59, 0x3e, 0xb4, 0xc6, 0x2c, 0xbe, 0xf3, 0x44, 0xcb, 0x2f, 0xd8, 0x24,
+    0x4e, 0x2f, 0x0f, 0xfb, 0xb2, 0x8d, 0xd3, 0x4b, 0xfc, 0x2f, 0x35, 0xdb,
+    0xbf, 0x6a, 0x8b, 0x91, 0x7e, 0xd7, 0x6e, 0xfd, 0xaa, 0x2e, 0xc5, 0xff,
+    0x9e, 0x42, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0xa3, 0x96, 0x17, 0x88, 0x84,
+    0x39, 0xb5, 0xf1, 0x44, 0x8e, 0xb2, 0xfd, 0x26, 0x20, 0x32, 0xcb, 0xff,
+    0x0a, 0x05, 0x27, 0x8d, 0x4b, 0x1b, 0x7a, 0xcb, 0x49, 0x65, 0xfb, 0x5d,
+    0xbb, 0xf6, 0xa8, 0xa5, 0x57, 0xfd, 0xdf, 0x9a, 0x6f, 0x44, 0xf8, 0xb2,
+    0xff, 0xf7, 0xa2, 0x78, 0xf3, 0x6f, 0x71, 0xf9, 0x96, 0x0b, 0x37, 0x77,
+    0x48, 0x5e, 0x23, 0x3a, 0x67, 0x1a, 0xe9, 0x31, 0x07, 0x86, 0xfd, 0xff,
+    0x9d, 0xbf, 0x20, 0x8d, 0xc8, 0x0b, 0x2e, 0xf0, 0x56, 0x58, 0x58, 0xd5,
+    0x0e, 0x61, 0x0f, 0x44, 0xc7, 0x8d, 0x63, 0xc5, 0x3c, 0x3d, 0xbf, 0xff,
+    0xf9, 0xff, 0x80, 0x89, 0x0b, 0x10, 0xf8, 0x38, 0x94, 0x0d, 0xdc, 0xd5,
+    0x95, 0x3b, 0xa3, 0x18, 0x95, 0x27, 0x7f, 0x25, 0x21, 0x75, 0x09, 0xb6,
+    0xa7, 0x41, 0x1d, 0x2d, 0xe5, 0x35, 0x80, 0xa8, 0xa1, 0x83, 0xc5, 0x2f,
+    0xc3, 0x1f, 0x7c, 0xa4, 0x63, 0x19, 0xef, 0xfa, 0x42, 0xf3, 0x5d, 0xbb,
+    0xf6, 0xa8, 0x8e, 0x17, 0xfc, 0xc2, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0xad,
+    0x56, 0x16, 0xe8, 0x91, 0xfa, 0x4d, 0xff, 0xe1, 0x67, 0x79, 0x0b, 0xcd,
+    0x76, 0xef, 0xda, 0xa2, 0x5b, 0x5b, 0xb5, 0x97, 0x83, 0xa0, 0x2c, 0xbb,
+    0x3a, 0x59, 0x7e, 0x39, 0xe1, 0xb8, 0xb2, 0xfe, 0x8d, 0x01, 0xfa, 0xe2,
+    0xcb, 0x0f, 0x0f, 0x57, 0xc4, 0xf7, 0xef, 0xc7, 0x84, 0xe2, 0xcb, 0xdb,
+    0xc3, 0x25, 0x94, 0x29, 0x4c, 0x2b, 0xb1, 0x2e, 0x87, 0x59, 0xb0, 0x89,
+    0xf7, 0x94, 0xdc, 0x39, 0x2c, 0xbf, 0xfe, 0xc3, 0x32, 0x7f, 0xff, 0x0c,
+    0x7f, 0xb9, 0xab, 0x2b, 0xc7, 0xd2, 0x42, 0xf7, 0xe6, 0xdd, 0x1c, 0x74,
+    0xb2, 0xff, 0xb3, 0xa2, 0xc0, 0x01, 0xe4, 0xb2, 0xe3, 0xf6, 0xb2, 0xfe,
+    0x6e, 0xb8, 0x3c, 0x25, 0x97, 0xf7, 0x59, 0x28, 0xd0, 0x16, 0x56, 0x1e,
+    0xdb, 0x96, 0xdf, 0xff, 0x41, 0x4f, 0xc0, 0xbb, 0x4b, 0x9e, 0x79, 0x2c,
+    0xa8, 0x4c, 0x6a, 0x47, 0x1a, 0x73, 0xf1, 0x05, 0xe7, 0xf0, 0x8b, 0x2f,
+    0x8a, 0x3a, 0x92, 0xcb, 0xff, 0x31, 0x7f, 0x83, 0x0b, 0xea, 0x4b, 0x2f,
+    0xe9, 0xe3, 0xb7, 0xd0, 0x16, 0x5f, 0xfb, 0x5e, 0x7c, 0x20, 0xcb, 0x38,
+    0xb2, 0xff, 0xfb, 0xa0, 0x0f, 0xcf, 0x2c, 0xe1, 0x05, 0xc4, 0x59, 0x4c,
+    0x88, 0xe7, 0x3d, 0xbe, 0x06, 0x6a, 0x65, 0x97, 0xe6, 0xf4, 0x09, 0x32,
+    0xcb, 0xdf, 0x83, 0xac, 0xa1, 0xa7, 0x87, 0xd8, 0xec, 0xc4, 0x5a, 0x3e,
+    0xf4, 0x2f, 0x40, 0x43, 0xf2, 0x3d, 0xd2, 0x9b, 0xff, 0x8d, 0x82, 0xfe,
+    0x69, 0xa7, 0x73, 0xac, 0xbe, 0x79, 0x1a, 0xcb, 0x2c, 0x6a, 0xcf, 0x1a,
+    0x2b, 0xf9, 0xb4, 0x4d, 0xfe, 0x2c, 0xbf, 0x69, 0xcb, 0x21, 0x65, 0x2a,
+    0x21, 0xb3, 0x1f, 0x9f, 0x88, 0x9c, 0xb2, 0xe8, 0x25, 0x97, 0xb1, 0x86,
+    0xb2, 0xf0, 0xf0, 0xeb, 0x2e, 0x62, 0x19, 0xb7, 0x61, 0xba, 0x83, 0xf6,
+    0x92, 0x65, 0xf7, 0x03, 0x07, 0x59, 0x7e, 0xf3, 0x6a, 0x06, 0xb2, 0xff,
+    0xcf, 0x38, 0x85, 0x9c, 0x20, 0xf9, 0x65, 0x76, 0x7c, 0xce, 0x4f, 0x7d,
+    0x93, 0x4b, 0x16, 0x5c, 0xf2, 0x59, 0x7f, 0xd2, 0x17, 0x9a, 0xed, 0xdf,
+    0xb5, 0x44, 0xc0, 0xa8, 0x3d, 0xf7, 0x16, 0xbf, 0x05, 0xfe, 0xdf, 0x59,
+    0x7f, 0xa7, 0x7f, 0x80, 0x42, 0x92, 0xcb, 0x42, 0xcb, 0xa7, 0x65, 0x95,
+    0x86, 0x9c, 0x84, 0x2e, 0xe4, 0x2c, 0xa8, 0x45, 0xc3, 0x13, 0xba, 0xe0,
+    0x47, 0xef, 0x18, 0xc0, 0x59, 0x76, 0xde, 0x2c, 0xbe, 0xe3, 0x90, 0x16,
+    0x5e, 0x28, 0x9d, 0x65, 0x4c, 0x7e, 0x7e, 0x1d, 0x00, 0xc8, 0xac, 0x86,
+    0xff, 0x07, 0xad, 0x34, 0x1f, 0x16, 0x5f, 0xbc, 0xd0, 0x53, 0xac, 0xbf,
+    0xe8, 0x9f, 0xe5, 0x01, 0xff, 0x16, 0x57, 0x91, 0x27, 0xc3, 0x3d, 0xb2,
+    0x7b, 0xe2, 0xce, 0x42, 0xca, 0xf9, 0xe9, 0xef, 0x33, 0xbd, 0x26, 0x02,
+    0xcb, 0xf1, 0x16, 0x7d, 0x96, 0x5f, 0x75, 0xdb, 0x1a, 0xb2, 0xfc, 0xe6,
+    0xe7, 0x9d, 0x65, 0x62, 0x2c, 0x66, 0x24, 0x71, 0xcf, 0x92, 0x84, 0x96,
+    0xff, 0xf4, 0xbd, 0x84, 0x60, 0x9a, 0xf3, 0x41, 0xd6, 0x5f, 0xcd, 0xfc,
+    0x3c, 0x79, 0x65, 0xff, 0x30, 0x27, 0xf4, 0x70, 0x3c, 0x59, 0x7f, 0xa4,
+    0xff, 0xe3, 0x14, 0x2c, 0xb4, 0x68, 0xfa, 0xc8, 0xea, 0xba, 0x4c, 0x23,
+    0x49, 0x7f, 0x84, 0xbd, 0xff, 0xe2, 0x73, 0x33, 0xbf, 0x47, 0x52, 0xdb,
+    0xc5, 0x97, 0xf3, 0x4d, 0xcf, 0xb4, 0xeb, 0x2f, 0xfd, 0x87, 0xcd, 0x67,
+    0x52, 0xcf, 0xac, 0xbf, 0x9b, 0xcc, 0x7c, 0x35, 0x65, 0x78, 0xfa, 0xf8,
+    0x7d, 0x7f, 0xcf, 0xed, 0x43, 0x49, 0xf8, 0xb2, 0xff, 0xf3, 0xcf, 0xe6,
+    0x82, 0xc9, 0x9b, 0x4c, 0xb2, 0xb1, 0x3c, 0x09, 0x8d, 0xfc, 0x9d, 0xf8,
+    0x4d, 0x04, 0x88, 0xc3, 0x7b, 0x12, 0xcb, 0x6d, 0xac, 0xbe, 0xed, 0xb0,
+    0x6b, 0x29, 0x65, 0xbb, 0x59, 0x84, 0xbb, 0x82, 0x04, 0x97, 0x48, 0x6b,
+    0x2b, 0x6b, 0x44, 0xf4, 0xe2, 0x1d, 0x0a, 0x31, 0x6e, 0x87, 0xce, 0x2f,
+    0x7e, 0x36, 0x25, 0x83, 0x59, 0x7d, 0x9f, 0xf6, 0x2c, 0xb9, 0xcd, 0x59,
+    0x76, 0x0c, 0x8d, 0xc6, 0xd9, 0x0d, 0xc2, 0x8e, 0xd7, 0x18, 0x52, 0xef,
+    0x81, 0x65, 0xdb, 0xb2, 0x59, 0x7c, 0x6e, 0x75, 0xf5, 0x95, 0x39, 0xea,
+    0xe8, 0x5d, 0xc6, 0xaf, 0xc2, 0x6d, 0xb9, 0x01, 0x65, 0xfd, 0x9e, 0x71,
+    0x0b, 0xeb, 0x2a, 0x73, 0xd8, 0x19, 0x5d, 0xe7, 0x7e, 0xd6, 0x5f, 0xd9,
+    0xff, 0xc6, 0xb8, 0xb2, 0xfe, 0x72, 0x04, 0xe0, 0xfa, 0xca, 0x84, 0x4d,
+    0x4e, 0x46, 0x43, 0x9b, 0x65, 0xb6, 0x17, 0x0d, 0x8d, 0xc4, 0xf0, 0xc7,
+    0x91, 0x08, 0xe3, 0x45, 0xc9, 0x40, 0x06, 0xbe, 0x77, 0x0d, 0x9e, 0xa1,
+    0x6e, 0xc4, 0x33, 0x42, 0x23, 0x44, 0x47, 0x84, 0x0f, 0xa1, 0xb0, 0xf0,
+    0xad, 0x28, 0xf6, 0x39, 0x2c, 0x47, 0xf0, 0xfc, 0x0a, 0xee, 0xf6, 0x03,
+    0x0b, 0xb6, 0xdf, 0x84, 0x8c, 0x86, 0xf1, 0xc3, 0xa4, 0x97, 0xfe, 0x79,
+    0x0b, 0xcd, 0x76, 0xef, 0xda, 0xa2, 0x63, 0x5d, 0x1b, 0xab, 0x2e, 0xd6,
+    0x2c, 0xb4, 0x68, 0xd7, 0xf8, 0x66, 0xfc, 0x27, 0xe5, 0x06, 0xac, 0xb0,
+    0xb6, 0x47, 0x51, 0xc7, 0x7c, 0xfb, 0xc2, 0x6b, 0xfe, 0x1b, 0x6f, 0x17,
+    0xd0, 0x04, 0x92, 0xcb, 0xc6, 0x18, 0x62, 0xcb, 0xf8, 0x53, 0xb5, 0x8a,
+    0x92, 0x97, 0x96, 0x5e, 0xda, 0x52, 0x1a, 0xca, 0xda, 0xcf, 0x83, 0x69,
+    0x9e, 0xdf, 0xda, 0xd0, 0x4b, 0x3c, 0xb2, 0xfa, 0x09, 0xbc, 0xb2, 0xfa,
+    0x27, 0x8d, 0x2c, 0xbf, 0xdc, 0x80, 0x3f, 0xdc, 0xd5, 0x97, 0xbf, 0x13,
+    0x2c, 0xbe, 0x89, 0x98, 0xeb, 0x2f, 0xff, 0x31, 0x16, 0x07, 0xb2, 0xc9,
+    0xc4, 0x92, 0xca, 0xc3, 0xec, 0xd1, 0x15, 0xf7, 0x23, 0x50, 0xb2, 0xfa,
+    0x70, 0x8f, 0x71, 0x65, 0xff, 0x6e, 0xb0, 0x36, 0x64, 0xd0, 0x75, 0x94,
+    0x34, 0xe9, 0x58, 0x83, 0x70, 0x8a, 0x63, 0x3d, 0x42, 0x27, 0xe4, 0x22,
+    0x10, 0xee, 0x93, 0xda, 0x4b, 0x2f, 0xc7, 0x8c, 0xff, 0x16, 0x5f, 0xb8,
+    0xc5, 0xd4, 0x96, 0x5d, 0x93, 0x2c, 0xb1, 0x9b, 0x0d, 0xfe, 0x14, 0x56,
+    0xd0, 0x8a, 0x01, 0x88, 0xe3, 0x35, 0xfe, 0xf4, 0x6a, 0x71, 0x02, 0x05,
+    0x97, 0xc1, 0x9d, 0xc9, 0x65, 0xff, 0xff, 0x98, 0x3d, 0xeb, 0x37, 0xc1,
+    0x7f, 0x41, 0x9f, 0xd1, 0xfe, 0x32, 0xcb, 0x9f, 0x8b, 0x2f, 0xb6, 0x7f,
+    0x3c, 0xb2, 0xbc, 0x6e, 0xb8, 0x2d, 0x7f, 0xff, 0x37, 0x5f, 0xe4, 0xfa,
+    0xce, 0x6c, 0xce, 0xfc, 0x1d, 0xc5, 0x95, 0x08, 0x85, 0xd1, 0x0d, 0xe8,
+    0x29, 0xd6, 0x5f, 0xff, 0xff, 0x4b, 0x9e, 0xc0, 0x99, 0xcf, 0x67, 0x79,
+    0xcd, 0x99, 0xd4, 0xb8, 0xc4, 0xcb, 0x2f, 0x3b, 0xf6, 0xa8, 0xac, 0x57,
+    0xce, 0x24, 0x1a, 0xb2, 0xbb, 0x3c, 0xcd, 0x14, 0xdf, 0xbc, 0xc7, 0x8d,
+    0x2c, 0xbf, 0xfc, 0x17, 0x9f, 0x58, 0x7f, 0x44, 0xe4, 0x15, 0x94, 0xc7,
+    0xe4, 0x44, 0xf7, 0xf8, 0x32, 0xce, 0x03, 0xa0, 0x2c, 0xbf, 0xf6, 0xde,
+    0x7c, 0xb0, 0x30, 0x5f, 0x59, 0x7f, 0x8b, 0x38, 0x0c, 0xc1, 0xac, 0xa1,
+    0xab, 0x93, 0x36, 0x32, 0xee, 0xc8, 0xba, 0x1c, 0xd4, 0x33, 0x7d, 0x09,
+    0x52, 0x20, 0xf9, 0xae, 0xf3, 0xfb, 0xff, 0x07, 0xfc, 0x2c, 0xde, 0x59,
+    0xc5, 0x97, 0xdf, 0x2c, 0xdd, 0x59, 0x79, 0x82, 0x35, 0x94, 0x69, 0xff,
+    0xb1, 0xfe, 0xe1, 0x25, 0xff, 0xc5, 0xf3, 0x43, 0x05, 0x9d, 0xc6, 0x96,
+    0x5f, 0xd0, 0xc2, 0xb7, 0x0f, 0x6b, 0x2f, 0xf6, 0xa7, 0xff, 0x1f, 0xae,
+    0xd6, 0x54, 0x22, 0xb3, 0xc8, 0x8e, 0x63, 0x7f, 0xb3, 0xf8, 0x50, 0x66,
+    0xda, 0xcb, 0xfd, 0x1a, 0x93, 0x4c, 0xc6, 0x2c, 0xbf, 0xf9, 0x8f, 0xcd,
+    0x9e, 0x6f, 0x94, 0x1d, 0x65, 0x49, 0x15, 0xdc, 0x35, 0xf9, 0xa5, 0xf3,
+    0xfd, 0xfb, 0x59, 0x7f, 0xd1, 0xbd, 0xf5, 0xdf, 0x9f, 0x75, 0x65, 0xfe,
+    0x68, 0xec, 0xb1, 0xa7, 0x59, 0x47, 0x44, 0x97, 0x88, 0xb7, 0x4f, 0xaf,
+    0xf4, 0x17, 0xfd, 0x80, 0x75, 0x97, 0xd0, 0x77, 0xfa, 0xca, 0x91, 0xe9,
+    0x70, 0xc6, 0xfd, 0xbb, 0xfc, 0xea, 0x65, 0x97, 0xdc, 0x99, 0x8d, 0x59,
+    0x78, 0xf1, 0xa5, 0x97, 0xff, 0xff, 0xf9, 0xff, 0xfc, 0xf7, 0x1e, 0x4c,
+    0x5f, 0x96, 0x6b, 0x39, 0x9e, 0x79, 0xca, 0x24, 0xb2, 0xf7, 0xe2, 0x65,
+    0x95, 0x09, 0x8a, 0xe1, 0x68, 0x09, 0x38, 0x38, 0x24, 0x22, 0xef, 0xe0,
+    0xed, 0xf7, 0xe6, 0x15, 0xac, 0xbe, 0xea, 0x51, 0xe5, 0x97, 0xfb, 0x83,
+    0xf6, 0x76, 0x1d, 0xc5, 0x96, 0xce, 0x1e, 0xd8, 0x48, 0xee, 0x8d, 0xeb,
+    0x2b, 0xc6, 0xfc, 0x89, 0xef, 0xef, 0x30, 0xcb, 0x02, 0xb2, 0xff, 0x4c,
+    0xf8, 0xd2, 0x10, 0xeb, 0x28, 0x68, 0x80, 0xec, 0x81, 0x8b, 0x2f, 0xf7,
+    0x52, 0x9a, 0x4f, 0xa9, 0xd6, 0x5f, 0x4b, 0xed, 0x3a, 0xca, 0x83, 0xda,
+    0x73, 0x7b, 0xff, 0xfd, 0x07, 0x34, 0xd7, 0xeb, 0xd0, 0xdf, 0xe3, 0x17,
+    0x52, 0x59, 0x7f, 0xfe, 0x6f, 0xc7, 0x6d, 0xf6, 0x3e, 0xce, 0x38, 0xc6,
+    0xb2, 0xa1, 0x55, 0xa6, 0x46, 0xa0, 0xd0, 0x8a, 0xf1, 0x03, 0xb1, 0xdd,
+    0x2f, 0xac, 0xbf, 0xa0, 0x07, 0x8e, 0x12, 0xcb, 0xfb, 0x27, 0xc2, 0xc9,
+    0x2c, 0xa8, 0x3e, 0xf6, 0x17, 0xd1, 0x65, 0xff, 0xdc, 0xf6, 0x6e, 0xb7,
+    0xda, 0x5c, 0x0a, 0xcb, 0xf8, 0xff, 0x0b, 0xcf, 0x0b, 0x2c, 0xdd, 0x1f,
+    0xa8, 0x88, 0xf7, 0x83, 0xd6, 0x2c, 0xbf, 0xda, 0x60, 0xce, 0x0e, 0x49,
+    0x65, 0xe6, 0x89, 0xd6, 0x5f, 0xfc, 0x38, 0xe4, 0x37, 0x5f, 0xfc, 0x1d,
+    0x65, 0xfd, 0x06, 0x4c, 0x50, 0x35, 0x95, 0x3a, 0x38, 0x06, 0x3b, 0x31,
+    0xae, 0x87, 0x3e, 0x89, 0x7e, 0xef, 0xd0, 0x46, 0xac, 0xac, 0x3f, 0x57,
+    0x4c, 0xbe, 0x3b, 0xf5, 0xf5, 0x97, 0xff, 0x4f, 0x1f, 0xd8, 0x27, 0x62,
+    0x6e, 0x89, 0xc5, 0x97, 0xff, 0x3e, 0xe6, 0x13, 0x8d, 0xf3, 0xaf, 0xac,
+    0xbf, 0xed, 0x47, 0x1f, 0x45, 0x12, 0x59, 0x5a, 0x46, 0x67, 0x94, 0x37,
+    0xa2, 0xde, 0x93, 0xce, 0xb2, 0xf6, 0xc9, 0xce, 0xb2, 0xff, 0x9f, 0xa9,
+    0x37, 0xbc, 0xfb, 0x8b, 0x2f, 0xe2, 0x89, 0xca, 0x27, 0x59, 0x6f, 0xac,
+    0xbf, 0xf1, 0xbc, 0xe6, 0x79, 0xb8, 0x19, 0xd6, 0x50, 0xcf, 0x48, 0x22,
+    0x34, 0x28, 0x54, 0x77, 0x90, 0xef, 0xe8, 0xc9, 0x87, 0x74, 0x40, 0xe7,
+    0x84, 0xff, 0x7d, 0x13, 0x44, 0xeb, 0x2f, 0xfc, 0x4e, 0x3f, 0x46, 0xff,
+    0x39, 0x2c, 0xbf, 0xfd, 0x2c, 0x2f, 0x87, 0xcd, 0xbb, 0xbb, 0x1b, 0x8b,
+    0x2f, 0xff, 0xff, 0x61, 0xf3, 0x40, 0x00, 0x79, 0xe6, 0xfc, 0xb3, 0xce,
+    0x06, 0x1c, 0x2c, 0xba, 0x37, 0x16, 0x5f, 0xff, 0xf8, 0x33, 0xe7, 0x7b,
+    0x08, 0x3b, 0xbb, 0x33, 0xa9, 0x60, 0x48, 0x1c, 0x59, 0x7f, 0xfa, 0x7c,
+    0xeb, 0xfc, 0x62, 0x80, 0x39, 0xd6, 0x5f, 0xee, 0x8b, 0x07, 0xe7, 0x31,
+    0x65, 0x61, 0xff, 0x3a, 0x55, 0x4e, 0xa9, 0x58, 0x64, 0x7d, 0x1f, 0x79,
+    0x49, 0xdd, 0x88, 0x67, 0x90, 0xf4, 0xbe, 0xfc, 0xa1, 0x96, 0x5f, 0xf6,
+    0x0e, 0x7c, 0x33, 0x3c, 0xeb, 0x2f, 0xe9, 0xe6, 0x90, 0xa3, 0x53, 0xac,
+    0xbe, 0x22, 0xcf, 0xac, 0xbf, 0x36, 0xe6, 0xb4, 0xcb, 0x2b, 0x6b, 0x44,
+    0x04, 0x1b, 0x78, 0x82, 0xfe, 0x9c, 0x4d, 0xb7, 0x20, 0x2c, 0xbe, 0xdc,
+    0x8e, 0x12, 0xcb, 0xff, 0x79, 0xcf, 0xff, 0x47, 0xc2, 0x75, 0x95, 0x87,
+    0xc7, 0x31, 0x25, 0xff, 0xd9, 0x86, 0x9e, 0x1b, 0x5a, 0x63, 0x16, 0x5e,
+    0x77, 0xd2, 0xcb, 0xfe, 0x69, 0x37, 0x82, 0x73, 0xb2, 0xcb, 0xb3, 0xeb,
+    0x2a, 0x13, 0x64, 0xc8, 0x4a, 0xe8, 0x8b, 0xc8, 0x9f, 0x1b, 0xdb, 0x38,
+    0xb9, 0xf7, 0x56, 0x5f, 0xfe, 0x8d, 0xc3, 0xc0, 0xcb, 0x3f, 0xf7, 0x25,
+    0x94, 0x47, 0xc7, 0xba, 0x33, 0x7b, 0xcc, 0x2f, 0x68, 0x6e, 0xf2, 0xf6,
+    0x94, 0x20, 0x05, 0x51, 0x6c, 0x47, 0xa5, 0x3c, 0x63, 0xd2, 0x34, 0x19,
+    0xb6, 0x4b, 0xb5, 0x36, 0x31, 0x3e, 0xe1, 0xbd, 0xd4, 0x37, 0x1a, 0x18,
+    0x53, 0x42, 0x17, 0x51, 0x9b, 0xfa, 0x58, 0x1b, 0xc3, 0x08, 0x10, 0xa2,
+    0x28, 0xdf, 0xb9, 0x29, 0x6f, 0xf2, 0xb0, 0x82, 0xd7, 0xbc, 0x87, 0x6e,
+    0x17, 0x22, 0x47, 0x31, 0xbb, 0x0c, 0x1b, 0xc2, 0xaf, 0x6f, 0x6b, 0x59,
+    0x7d, 0xfd, 0xbc, 0xf2, 0xcb, 0x12, 0xca, 0x14, 0x9b, 0x59, 0x12, 0xdc,
+    0x28, 0x15, 0x16, 0x5e, 0xda, 0xf6, 0x96, 0xda, 0xcb, 0xdf, 0x8f, 0x2c,
+    0xbe, 0x81, 0xe1, 0xd6, 0x5b, 0x50, 0x6f, 0x74, 0x39, 0x6d, 0xc5, 0x97,
+    0x36, 0xea, 0xcb, 0xe9, 0xf5, 0x13, 0xac, 0xb8, 0x40, 0x2c, 0xbb, 0x3c,
+    0xb2, 0xf7, 0xb2, 0x65, 0x97, 0xbc, 0xc7, 0x59, 0x69, 0x96, 0x54, 0xe7,
+    0xc2, 0x31, 0x67, 0x1d, 0x08, 0xe5, 0xf9, 0xca, 0x70, 0xf1, 0x65, 0xfb,
+    0x07, 0xa7, 0xed, 0x65, 0xf3, 0xcf, 0x1a, 0x59, 0x74, 0x0f, 0xc7, 0x94,
+    0x45, 0x16, 0x1a, 0xca, 0x64, 0xf6, 0xe6, 0x26, 0x38, 0xa3, 0x8c, 0x80,
+    0x90, 0x9e, 0x78, 0x79, 0xf7, 0x2d, 0xb2, 0xcb, 0x79, 0x65, 0xee, 0x09,
+    0xc5, 0x97, 0xdd, 0x4f, 0x06, 0xac, 0xa9, 0xcf, 0x50, 0x62, 0x21, 0x1e,
+    0xbf, 0x75, 0x2f, 0xbf, 0x4b, 0x2d, 0x0b, 0x29, 0xcd, 0xd7, 0xca, 0xaf,
+    0xf7, 0x5a, 0x86, 0x93, 0xf1, 0x65, 0xf6, 0x14, 0x49, 0x65, 0x61, 0xe9,
+    0x9c, 0xce, 0xdb, 0x6b, 0x2f, 0xdc, 0xcf, 0xb6, 0x96, 0x5e, 0xce, 0xbe,
+    0xb2, 0xd8, 0x03, 0xc4, 0xe1, 0x3d, 0xce, 0x35, 0x97, 0xbf, 0x9c, 0x59,
+    0x71, 0x42, 0xca, 0x91, 0xe3, 0x84, 0x5b, 0x78, 0xe5, 0xff, 0x30, 0x67,
+    0x8e, 0x81, 0xa8, 0x59, 0x7a, 0x51, 0xd2, 0xcb, 0x6e, 0x2c, 0xa9, 0x8d,
+    0x89, 0x0e, 0xde, 0xd3, 0x92, 0xca, 0x59, 0x6d, 0xb5, 0x97, 0xf1, 0x66,
+    0xfd, 0x37, 0x16, 0x54, 0xe7, 0x84, 0x60, 0xa5, 0xba, 0x59, 0x50, 0x89,
+    0xec, 0x1b, 0x64, 0xd0, 0x92, 0x5f, 0xb3, 0x52, 0x83, 0xac, 0xbe, 0xf3,
+    0xe6, 0x96, 0x5f, 0xa7, 0xc2, 0x63, 0x56, 0x54, 0x1e, 0x4b, 0x10, 0xdf,
+    0xe7, 0xd4, 0x80, 0xdd, 0x71, 0x65, 0xf7, 0x39, 0x00, 0x59, 0x50, 0xad,
+    0x88, 0x64, 0x38, 0xb0, 0xcd, 0xda, 0x31, 0x3b, 0x5f, 0xa1, 0x7e, 0xe7,
+    0x44, 0xe0, 0x12, 0x03, 0x0d, 0x2f, 0xfd, 0x85, 0x86, 0x96, 0x7f, 0xcc,
+    0xb2, 0xfe, 0x73, 0x70, 0x6f, 0x25, 0x95, 0xe3, 0xe9, 0x23, 0xcb, 0xf9,
+    0x88, 0xb3, 0x7b, 0xac, 0xbd, 0x21, 0x3e, 0xb2, 0xf6, 0xb4, 0xeb, 0x2f,
+    0xa4, 0x00, 0xc9, 0x65, 0xf6, 0x84, 0x80, 0x2c, 0xbd, 0x1e, 0x85, 0x95,
+    0x07, 0xc2, 0xc4, 0x7e, 0x23, 0xbf, 0xcd, 0x3b, 0x9c, 0x00, 0x85, 0x97,
+    0x30, 0xd6, 0x5c, 0xfd, 0x2c, 0xbf, 0xbd, 0x93, 0x14, 0x0d, 0x65, 0xff,
+    0x4a, 0x0f, 0xcc, 0xd4, 0x71, 0x65, 0x76, 0x7c, 0xbd, 0x16, 0xdf, 0x8d,
+    0x98, 0x9c, 0xc5, 0x94, 0x34, 0x65, 0x33, 0xe3, 0x92, 0x5e, 0xfb, 0x01,
+    0x65, 0xf0, 0x20, 0xbb, 0x59, 0x61, 0x5a, 0xca, 0x34, 0xf4, 0xfa, 0x1c,
+    0x09, 0x15, 0xf4, 0xbf, 0x82, 0x2c, 0xbd, 0xdc, 0x01, 0x65, 0xed, 0x41,
+    0xd6, 0x53, 0x22, 0x35, 0xcc, 0x42, 0x46, 0x60, 0xed, 0xfb, 0x3a, 0xfb,
+    0x9d, 0x65, 0xd9, 0x32, 0xcb, 0x4e, 0x46, 0xfc, 0x42, 0x8b, 0xd1, 0xa9,
+    0xd6, 0x54, 0x1e, 0x2b, 0x14, 0x52, 0xcb, 0xdd, 0xc0, 0x16, 0x58, 0xa4,
+    0x6a, 0x30, 0x2e, 0xfe, 0xf3, 0x1f, 0x3c, 0xeb, 0x2a, 0x0f, 0x44, 0x24,
+    0xb7, 0xd1, 0x28, 0x3a, 0xcb, 0xc4, 0xdb, 0xab, 0x28, 0x56, 0x6f, 0xfe,
+    0x43, 0x70, 0x78, 0xb2, 0xfc, 0x19, 0x73, 0xc3, 0x59, 0x50, 0x78, 0x04,
+    0x2f, 0x7e, 0xc9, 0xa4, 0xfc, 0x59, 0x52, 0x5d, 0x9c, 0x19, 0x0f, 0x45,
+    0x8c, 0x3d, 0x33, 0xee, 0x8b, 0x4e, 0x67, 0xe8, 0x70, 0x14, 0x61, 0xdc,
+    0x86, 0x07, 0xe1, 0x32, 0x16, 0x0d, 0xec, 0xa2, 0x10, 0x5f, 0xcf, 0x2d,
+    0xdd, 0xd0, 0xce, 0xb2, 0xc4, 0xb2, 0xe9, 0x6e, 0x2c, 0xaf, 0x1e, 0xff,
+    0x0d, 0x7e, 0x21, 0x7f, 0xbf, 0xc7, 0xeb, 0xed, 0x3a, 0xca, 0x59, 0x4c,
+    0x78, 0x1b, 0x66, 0xb7, 0xf6, 0x4e, 0x3f, 0x36, 0x96, 0x57, 0x8f, 0x48,
+    0x89, 0x2f, 0xfd, 0x19, 0xcd, 0x90, 0xc3, 0x12, 0x4b, 0x2f, 0xe6, 0x33,
+    0x93, 0xe1, 0x8b, 0x28, 0x8f, 0xc3, 0xe8, 0x17, 0x14, 0x2c, 0xbc, 0x00,
+    0x42, 0xcb, 0xb3, 0xb5, 0x97, 0x40, 0xf8, 0x6c, 0xfe, 0x39, 0x7a, 0x0b,
+    0xb5, 0x97, 0xff, 0xf3, 0x98, 0x37, 0x7d, 0x4f, 0xe7, 0xff, 0x9b, 0x52,
+    0x59, 0x7e, 0xef, 0xbf, 0x46, 0x96, 0x57, 0x91, 0x44, 0x43, 0x81, 0x5c,
+    0xa9, 0x26, 0xcd, 0xd9, 0x0f, 0x12, 0x3f, 0x0c, 0xeb, 0xe7, 0x27, 0x99,
+    0x65, 0xfb, 0x34, 0x27, 0xf8, 0xb2, 0xfc, 0xdf, 0x2c, 0x92, 0xcb, 0xe8,
+    0x32, 0x26, 0x59, 0x7f, 0xee, 0x6f, 0x7f, 0x41, 0xb9, 0xfe, 0x2c, 0xb8,
+    0x43, 0xac, 0xbf, 0x16, 0x68, 0x38, 0xb2, 0xf3, 0xf4, 0x4b, 0x2f, 0xef,
+    0x93, 0x83, 0x09, 0x65, 0xf8, 0x9c, 0x18, 0x4b, 0x2b, 0x61, 0xe8, 0x7c,
+    0xae, 0x86, 0x89, 0x00, 0xb6, 0x54, 0xe9, 0xe2, 0xc8, 0x84, 0xd2, 0x96,
+    0x26, 0x98, 0x8f, 0xc8, 0x20, 0x18, 0x28, 0x5b, 0x5f, 0x73, 0x0b, 0xb5,
+    0x97, 0xf4, 0x17, 0xfb, 0x0c, 0xeb, 0x2d, 0xc5, 0x97, 0xfa, 0x0c, 0x18,
+    0x5f, 0x52, 0x59, 0x7b, 0x91, 0x25, 0x97, 0xef, 0x66, 0x9b, 0x8b, 0x2e,
+    0x6d, 0x74, 0x78, 0x7f, 0x1c, 0xb6, 0xf5, 0x95, 0x09, 0x8d, 0x48, 0x8a,
+    0x62, 0xfd, 0x08, 0xf9, 0xdf, 0x74, 0xba, 0xff, 0xf1, 0x7f, 0xd9, 0x2f,
+    0xc6, 0x17, 0x5f, 0x59, 0x78, 0x98, 0xd5, 0x97, 0xd8, 0x36, 0xde, 0xb2,
+    0xe8, 0x3e, 0x1b, 0xf7, 0x1c, 0xbf, 0x4b, 0xec, 0x7f, 0xac, 0xbf, 0x9f,
+    0xaf, 0x40, 0x84, 0xb2, 0xd9, 0xd1, 0xeb, 0x18, 0x51, 0x78, 0x4e, 0x89,
+    0x65, 0xfc, 0xf2, 0x72, 0xcd, 0xd5, 0x97, 0x30, 0xd6, 0x5f, 0x73, 0xcf,
+    0x25, 0x96, 0xfa, 0xca, 0x84, 0xf1, 0x9a, 0x11, 0x1a, 0x84, 0x07, 0x8a,
+    0x5c, 0x78, 0x05, 0xc1, 0x16, 0x10, 0x8a, 0xf6, 0x14, 0xcb, 0x2d, 0xd2,
+    0xcb, 0x81, 0x09, 0x2e, 0x30, 0xc4, 0x94, 0xc6, 0xbc, 0xc1, 0x6b, 0xf1,
+    0x67, 0xfc, 0xc9, 0x05, 0x9a, 0x1b, 0xe3, 0x4b, 0x38, 0xb2, 0xa4, 0x7b,
+    0x43, 0x38, 0xbb, 0xb0, 0x2c, 0xbf, 0xce, 0x6c, 0x11, 0x67, 0xd6, 0x5e,
+    0x60, 0x3a, 0xca, 0x84, 0xd7, 0x86, 0x38, 0xf0, 0xbc, 0x01, 0x11, 0x0c,
+    0x04, 0xc6, 0xf7, 0xa0, 0xc5, 0x97, 0x9f, 0xae, 0x2c, 0xb7, 0x16, 0x5f,
+    0x09, 0xe7, 0xfa, 0xca, 0x9c, 0xfb, 0x86, 0x3b, 0xd0, 0xef, 0xc4, 0x6f,
+    0x41, 0x4c, 0xb2, 0xe2, 0x85, 0x94, 0xb2, 0x96, 0x54, 0xc5, 0xb1, 0xc2,
+    0xee, 0xf4, 0xcb, 0x2e, 0x60, 0x2c, 0xa8, 0x35, 0xc0, 0x18, 0xa9, 0x91,
+    0x6d, 0xa1, 0xc7, 0x2b, 0x02, 0x7d, 0xff, 0xc6, 0xb1, 0x77, 0xc8, 0x3b,
+    0xf5, 0xf5, 0x97, 0x81, 0x9b, 0xab, 0x2f, 0xff, 0x8b, 0x01, 0x87, 0x0c,
+    0x6b, 0x4c, 0x1e, 0xd6, 0x5f, 0x14, 0x1e, 0x65, 0x94, 0x6a, 0x35, 0xb4,
+    0x8c, 0x43, 0xff, 0x4f, 0xbe, 0x3f, 0x02, 0x75, 0x96, 0x35, 0x65, 0xb6,
+    0xd6, 0x5d, 0xa3, 0x56, 0x54, 0x1f, 0x0b, 0x11, 0x84, 0x48, 0x41, 0x4b,
+    0xff, 0xef, 0x64, 0xb9, 0x1f, 0x96, 0x6e, 0x39, 0x01, 0x65, 0xff, 0x37,
+    0xfd, 0x9d, 0x7c, 0x30, 0xb2, 0xf8, 0x48, 0xd0, 0x16, 0x54, 0x8f, 0x73,
+    0xc7, 0x37, 0x67, 0x16, 0x5f, 0xfe, 0xc9, 0x6d, 0xe1, 0xaf, 0x9f, 0x8f,
+    0xf1, 0x65, 0x42, 0x21, 0x24, 0x44, 0x01, 0x6a, 0xe2, 0x6c, 0x1f, 0x8c,
+    0xc6, 0xe8, 0xe2, 0xcb, 0x01, 0x65, 0xf4, 0x1e, 0x0e, 0xb2, 0xfc, 0xc6,
+    0x1d, 0xfe, 0xb2, 0x98, 0xf2, 0x74, 0x43, 0x6c, 0x59, 0x4c, 0x8c, 0xbd,
+    0x15, 0x38, 0xb7, 0x16, 0xb6, 0xc8, 0x6c, 0x6a, 0xca, 0x85, 0xd6, 0x8c,
+    0x87, 0xa3, 0x46, 0x27, 0xe8, 0x4f, 0x3c, 0xa6, 0x6d, 0xd4, 0xbb, 0xe8,
+    0x30, 0x33, 0x2c, 0xbd, 0xc8, 0x99, 0x65, 0xfd, 0x83, 0xcd, 0xed, 0xa5,
+    0x94, 0xb2, 0xda, 0x59, 0x63, 0xac, 0xaf, 0x9a, 0xd0, 0x85, 0xef, 0x11,
+    0xbe, 0x1b, 0xbf, 0x4b, 0x2f, 0xc0, 0x6d, 0x31, 0xab, 0x2e, 0x73, 0x56,
+    0x5d, 0x9d, 0x2c, 0xae, 0xd3, 0x44, 0x98, 0x90, 0xe3, 0xbe, 0x5b, 0x73,
+    0x00, 0x11, 0x11, 0x46, 0xd8, 0xbd, 0xd9, 0xe5, 0x97, 0xf1, 0x7f, 0x09,
+    0x8c, 0x59, 0x7f, 0x7f, 0x98, 0x76, 0xfa, 0xcb, 0x69, 0x65, 0x41, 0xbe,
+    0xc2, 0xda, 0x59, 0x4b, 0x2d, 0x0b, 0x28, 0x56, 0x69, 0x88, 0x2f, 0xe1,
+    0x77, 0xb3, 0x7b, 0xac, 0xbe, 0xf7, 0xb0, 0x0b, 0x2d, 0x1e, 0x37, 0xe2,
+    0x0e, 0xd4, 0x26, 0xb8, 0xc2, 0xc7, 0x6a, 0x74, 0x50, 0x38, 0x5f, 0xdf,
+    0xce, 0xa5, 0x12, 0x59, 0x7e, 0xfe, 0x79, 0xcd, 0x59, 0x5d, 0x1e, 0xb3,
+    0x17, 0x5f, 0xba, 0x06, 0xd4, 0x1e, 0x2c, 0xbd, 0xe7, 0x3a, 0xcb, 0xf9,
+    0xfe, 0x01, 0x0a, 0x4b, 0x28, 0x67, 0x95, 0xb8, 0x39, 0x7f, 0x7c, 0x6c,
+    0x08, 0x25, 0x97, 0xa7, 0xf3, 0x2c, 0xbb, 0xc1, 0xe8, 0xf2, 0x5c, 0xb2,
+    0xf1, 0x86, 0x18, 0x92, 0xff, 0x44, 0xe2, 0x67, 0x9f, 0xa4, 0x82, 0xcd,
+    0x05, 0xfe, 0x61, 0xb9, 0x75, 0x2e, 0x2c, 0xa1, 0x9f, 0xd7, 0x91, 0xee,
+    0xc9, 0xd6, 0x5f, 0x8e, 0x24, 0x68, 0x0b, 0x29, 0x65, 0x2c, 0xb4, 0x1c,
+    0xb6, 0x00, 0x5d, 0x41, 0xf2, 0x48, 0xfe, 0xff, 0xdc, 0x89, 0x7b, 0x30,
+    0xa5, 0xc5, 0x94, 0x34, 0xf0, 0xfb, 0x86, 0x43, 0x11, 0x4c, 0xf7, 0xf2,
+    0x1b, 0xd0, 0x76, 0x59, 0x7a, 0x59, 0xda, 0xcb, 0xe8, 0x1b, 0x1d, 0x65,
+    0x6d, 0x0a, 0xd5, 0x21, 0xe7, 0x25, 0x18, 0xf6, 0xa3, 0xd0, 0xdb, 0x0e,
+    0xde, 0xd6, 0xe8, 0xd6, 0x5b, 0xcb, 0x29, 0x8d, 0x8e, 0xe9, 0x05, 0xfb,
+    0xd1, 0xd3, 0xee, 0x2c, 0xbf, 0xfe, 0x8f, 0xf0, 0x79, 0xf6, 0xf0, 0x73,
+    0xaf, 0xac, 0xaf, 0x1f, 0xdf, 0xca, 0xef, 0x16, 0x79, 0x65, 0xb4, 0xb2,
+    0xff, 0x66, 0x76, 0x26, 0xff, 0x62, 0xcb, 0xfe, 0x82, 0xf9, 0x67, 0xe0,
+    0xc5, 0x97, 0xf1, 0x9c, 0x62, 0xea, 0x4b, 0x2f, 0xa7, 0xfe, 0x79, 0x65,
+    0x61, 0xe9, 0x04, 0xbe, 0x96, 0x53, 0x22, 0xd7, 0x50, 0x89, 0x72, 0x1b,
+    0xee, 0x7d, 0xd9, 0x65, 0xfd, 0x93, 0x00, 0xf9, 0x32, 0xcb, 0xef, 0xf2,
+    0x00, 0xb2, 0xed, 0x05, 0x65, 0x61, 0xb9, 0xf9, 0x15, 0xb8, 0xb2, 0x88,
+    0xd8, 0x84, 0x82, 0xff, 0x3e, 0xfc, 0x1c, 0xf8, 0x62, 0xcb, 0xff, 0xd1,
+    0x9d, 0x09, 0xf6, 0x20, 0xcb, 0x38, 0xb2, 0xf4, 0x64, 0xeb, 0x2d, 0x83,
+    0x3e, 0x6d, 0xe9, 0x57, 0xd9, 0xe1, 0x34, 0xb2, 0xe3, 0x81, 0x65, 0xce,
+    0x4b, 0x2b, 0xc6, 0xb1, 0xc5, 0xee, 0x63, 0x56, 0x5f, 0x37, 0xc0, 0xeb,
+    0x2f, 0xd1, 0xd4, 0xb0, 0xeb, 0x2a, 0x47, 0xc0, 0x71, 0x7f, 0x10, 0xdf,
+    0x72, 0x08, 0xd5, 0x95, 0x3a, 0xe6, 0x4e, 0x42, 0x79, 0x88, 0xb7, 0x06,
+    0xe6, 0x11, 0xd4, 0x3a, 0xce, 0x67, 0xe2, 0x17, 0x84, 0xc8, 0x08, 0x0a,
+    0x13, 0x9c, 0x29, 0xfa, 0x78, 0x61, 0x00, 0x21, 0x7d, 0xda, 0x35, 0x65,
+    0xf4, 0x1d, 0xfc, 0xb2, 0xf7, 0xfe, 0xeb, 0x2f, 0xb4, 0x18, 0xde, 0xb2,
+    0xfd, 0x9b, 0x8e, 0x40, 0x19, 0xf0, 0xb9, 0x0f, 0xc7, 0x2f, 0xbd, 0xf6,
+    0x9d, 0x65, 0xfe, 0xed, 0xb8, 0x59, 0xbd, 0xd6, 0x5f, 0x44, 0xef, 0x25,
+    0x97, 0x00, 0xeb, 0x2f, 0x73, 0xcc, 0xb2, 0xb4, 0x6c, 0xfe, 0x2f, 0x7f,
+    0x13, 0xfe, 0x7c, 0x31, 0x65, 0x2c, 0xa2, 0x37, 0x3f, 0x2e, 0xa8, 0x3f,
+    0xac, 0x5a, 0xbe, 0x9c, 0xb3, 0xa5, 0x97, 0xf0, 0x39, 0x83, 0x79, 0x2c,
+    0xac, 0x3d, 0x07, 0x23, 0xbe, 0xfb, 0x17, 0x16, 0x5f, 0x6c, 0xce, 0xbe,
+    0xb2, 0xfe, 0xe4, 0x75, 0x2c, 0xfa, 0xca, 0xec, 0xf4, 0xf8, 0x4b, 0x7d,
+    0x9f, 0x6e, 0x2c, 0xa5, 0x95, 0xd1, 0xac, 0x72, 0x1a, 0xc4, 0x72, 0x33,
+    0xa3, 0xa7, 0xd4, 0x2b, 0x8c, 0x93, 0xce, 0x26, 0x74, 0x47, 0xa3, 0x4f,
+    0x43, 0x3c, 0x9c, 0x39, 0x18, 0x25, 0xe1, 0x02, 0x22, 0xcb, 0xc4, 0xdb,
+    0x8b, 0x2f, 0xef, 0x47, 0xf9, 0xe6, 0x59, 0x73, 0x9a, 0xb2, 0xc3, 0xf9,
+    0xe2, 0x6d, 0x96, 0xde, 0xeb, 0x83, 0x59, 0x50, 0x8a, 0xbc, 0x62, 0x62,
+    0xbb, 0x6d, 0xac, 0xba, 0x06, 0xb2, 0x85, 0x26, 0xab, 0xc2, 0x96, 0xe2,
+    0xcb, 0x1d, 0x65, 0xb4, 0xb2, 0x9c, 0xd1, 0x04, 0x46, 0xb4, 0x7a, 0x7e,
+    0x33, 0xbf, 0xa7, 0x1e, 0x98, 0x33, 0xac, 0xb0, 0x16, 0x52, 0xc6, 0x3e,
+    0x37, 0x22, 0xdb, 0x30, 0xbf, 0xd0, 0x52, 0x73, 0xe0, 0xd6, 0x5f, 0x7c,
+    0xe7, 0xd2, 0xcb, 0xff, 0x81, 0x05, 0xdb, 0xfc, 0x02, 0x14, 0x96, 0x5e,
+    0x93, 0x79, 0x65, 0xf7, 0xcb, 0x24, 0xb2, 0xf8, 0x22, 0xbe, 0x3a, 0xcb,
+    0xf4, 0xe3, 0x77, 0x31, 0x65, 0x61, 0xe7, 0x84, 0x9a, 0xff, 0xee, 0x7b,
+    0x06, 0x59, 0xbc, 0xb3, 0x8b, 0x2f, 0x3c, 0xdc, 0x59, 0x4c, 0x7c, 0x3f,
+    0x44, 0xa9, 0x27, 0x90, 0x69, 0x8f, 0x44, 0x73, 0x22, 0xe8, 0x70, 0x9c,
+    0x3f, 0x08, 0x2b, 0x84, 0xed, 0x65, 0x6d, 0x6e, 0xda, 0xe4, 0x50, 0xc0,
+    0x2a, 0x12, 0x8a, 0xb2, 0x08, 0x94, 0x87, 0x3c, 0x35, 0x24, 0xd4, 0x39,
+    0x7a, 0xb9, 0x3d, 0x40, 0x6c, 0x67, 0x3d, 0xc3, 0x07, 0xa8, 0xfd, 0xda,
+    0x50, 0x4c, 0xd1, 0xc9, 0x6a, 0x51, 0x09, 0xe3, 0xd8, 0xf4, 0xf1, 0x83,
+    0xc7, 0x68, 0x08, 0xf4, 0x45, 0x70, 0x9e, 0x29, 0x6e, 0xdc, 0x9d, 0x5e,
+    0xfc, 0xe3, 0xb0, 0x5f, 0x37, 0xc3, 0x28, 0xc5, 0x7d, 0xb8, 0x6d, 0x89,
+    0x1f, 0xfe, 0xeb, 0x65, 0xff, 0x0b, 0xfb, 0x66, 0xef, 0x03, 0x0b, 0x2f,
+    0x00, 0x49, 0x2c, 0xbf, 0xfe, 0xe3, 0x79, 0xdb, 0xf9, 0xa0, 0x1d, 0xe4,
+    0xb2, 0xc2, 0xfa, 0x3e, 0xcf, 0x8f, 0x5f, 0xee, 0x0b, 0x8d, 0xf0, 0x1e,
+    0xd6, 0x58, 0x30, 0x7c, 0x7f, 0x2b, 0xa1, 0x6a, 0xd8, 0xe7, 0x94, 0x60,
+    0x38, 0xc3, 0x2f, 0xda, 0xed, 0xdf, 0xb5, 0x45, 0x6e, 0xbf, 0xf3, 0xc8,
+    0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x13, 0x82, 0xc2, 0xf1, 0x10, 0x87, 0x36,
+    0xb8, 0x50, 0x35, 0x96, 0xf2, 0xcb, 0x71, 0x65, 0x04, 0xd1, 0x6d, 0x88,
+    0xdf, 0xb0, 0xce, 0x31, 0x8b, 0x2f, 0x4b, 0x9c, 0x59, 0x7d, 0xdb, 0xbf,
+    0x6a, 0x8b, 0x45, 0x7f, 0xfb, 0x07, 0xe7, 0x36, 0x69, 0x9b, 0x81, 0x3a,
+    0xcb, 0xfd, 0x13, 0xfb, 0x34, 0x1e, 0xd6, 0x56, 0x91, 0x65, 0xe3, 0x0e,
+    0x26, 0xde, 0x62, 0xed, 0x65, 0xe7, 0x20, 0x2c, 0xac, 0x36, 0xfd, 0x8e,
+    0x5f, 0x02, 0x0b, 0xb5, 0x97, 0xb7, 0xc4, 0xcb, 0x2f, 0xf6, 0x6e, 0x73,
+    0x5a, 0x7f, 0xac, 0xbf, 0xa2, 0x77, 0xf3, 0x9d, 0x65, 0x32, 0x20, 0xa6,
+    0x1f, 0xf1, 0xb5, 0xfd, 0x1f, 0xc2, 0xef, 0x16, 0x5b, 0x8b, 0x29, 0x8d,
+    0xef, 0x8b, 0x2f, 0xe8, 0x72, 0x08, 0xf1, 0x65, 0xfb, 0x43, 0x0f, 0xf8,
+    0xb2, 0xff, 0xa2, 0x7f, 0x67, 0x3d, 0x9b, 0x8b, 0x2f, 0xdd, 0xe3, 0x17,
+    0x6b, 0x2f, 0xf6, 0x76, 0x50, 0x0e, 0x42, 0xcb, 0xa3, 0xbd, 0x87, 0xb5,
+    0xc2, 0x8b, 0xfe, 0xdf, 0xcc, 0xf6, 0x10, 0x83, 0x59, 0x50, 0x7d, 0x78,
+    0x61, 0x5e, 0x4c, 0x84, 0xa3, 0x01, 0xbf, 0xd9, 0xa0, 0x64, 0xc2, 0x71,
+    0x65, 0x8d, 0x59, 0x7f, 0xd9, 0x13, 0xe4, 0xda, 0x6e, 0x2c, 0xa6, 0x3c,
+    0xb9, 0x84, 0xaf, 0xff, 0xd3, 0xc7, 0xe0, 0x7a, 0x8f, 0x3f, 0x0b, 0x00,
+    0xb2, 0xff, 0xd1, 0xd3, 0xee, 0x78, 0x9f, 0x72, 0x75, 0x97, 0xfe, 0x8d,
+    0x03, 0x1b, 0x35, 0xf0, 0xac, 0xa8, 0x46, 0xb7, 0x95, 0x38, 0x8b, 0x43,
+    0x4f, 0x41, 0x8a, 0x66, 0x84, 0x07, 0x21, 0xf1, 0x7f, 0x46, 0xf2, 0x7f,
+    0xf1, 0x65, 0xff, 0xf7, 0xe0, 0x7e, 0x0b, 0x9b, 0xde, 0x31, 0x76, 0xb2,
+    0xff, 0xdc, 0xf6, 0x02, 0x6e, 0x13, 0xf9, 0x65, 0xf1, 0xd8, 0xa4, 0xb2,
+    0x99, 0x16, 0x3b, 0x8a, 0x3c, 0x3f, 0xa8, 0x5c, 0x73, 0xc9, 0x63, 0x5e,
+    0x48, 0x78, 0x6f, 0xdd, 0x1e, 0x59, 0x77, 0x0e, 0xb2, 0xa6, 0x35, 0xbe,
+    0x16, 0xa5, 0x97, 0xb5, 0x06, 0xac, 0xbf, 0x37, 0xca, 0x0e, 0xb2, 0xb6,
+    0xb3, 0xce, 0x98, 0x2f, 0xc3, 0xb7, 0xfa, 0x0f, 0xad, 0x30, 0x38, 0xb2,
+    0xf7, 0x78, 0x62, 0xcb, 0x64, 0xc7, 0xa3, 0xe3, 0x3b, 0xff, 0xe6, 0xff,
+    0x1b, 0xb7, 0xd7, 0x78, 0xc5, 0xda, 0xcb, 0x18, 0xb2, 0xff, 0x6a, 0x3f,
+    0xd4, 0xb3, 0xeb, 0x2f, 0xff, 0xec, 0x99, 0xca, 0x70, 0x37, 0x5c, 0xef,
+    0x18, 0xbb, 0x59, 0x76, 0x0d, 0x65, 0xe9, 0xdc, 0xeb, 0x2f, 0x40, 0x35,
+    0x06, 0xcd, 0x85, 0xaf, 0xfe, 0xeb, 0x9f, 0x2c, 0xdf, 0xff, 0xb0, 0xd6,
+    0x54, 0x93, 0x9d, 0x65, 0x09, 0x84, 0x88, 0xd3, 0x90, 0x90, 0x09, 0x85,
+    0xcd, 0x25, 0x97, 0xf6, 0x6f, 0xf8, 0x63, 0xb5, 0x97, 0xfb, 0xde, 0x09,
+    0xa7, 0x8e, 0x2c, 0xbf, 0x6c, 0x97, 0x84, 0xe2, 0xcb, 0x8d, 0x1a, 0xcb,
+    0xff, 0xee, 0x16, 0x6f, 0x7f, 0x96, 0x73, 0xcf, 0x32, 0xca, 0xc3, 0xe8,
+    0x61, 0x8b, 0xf4, 0x7f, 0x82, 0x79, 0x65, 0x42, 0x6b, 0x03, 0x16, 0xc3,
+    0x06, 0x35, 0x9a, 0x12, 0x84, 0x41, 0x7c, 0x4d, 0xd4, 0x96, 0x5e, 0x03,
+    0xf9, 0x65, 0xfe, 0x9f, 0x18, 0x6e, 0xe6, 0xac, 0xac, 0x3c, 0xf7, 0x1c,
+    0xbf, 0xb5, 0x03, 0x82, 0x99, 0x65, 0xb8, 0xb2, 0xa7, 0x37, 0xde, 0x2d,
+    0xb0, 0xb1, 0x4b, 0x37, 0x83, 0x68, 0x3d, 0x9c, 0x90, 0x65, 0x39, 0x0c,
+    0xfe, 0xd9, 0xfa, 0x21, 0x9a, 0x14, 0x9a, 0x6d, 0x39, 0x07, 0xa7, 0x27,
+    0x9d, 0xd8, 0x0e, 0x05, 0x08, 0x6e, 0x47, 0x8b, 0xf8, 0xed, 0x02, 0xb5,
+    0xb6, 0xe2, 0x22, 0xf5, 0xee, 0x1f, 0x8b, 0x2f, 0xf0, 0xa6, 0x1b, 0xf2,
+    0xce, 0x2c, 0xbf, 0xfe, 0x6f, 0xb6, 0x9c, 0x11, 0xe6, 0xee, 0x00, 0xb2,
+    0xe9, 0x49, 0x65, 0xff, 0xd8, 0x51, 0x86, 0xc4, 0xbf, 0x93, 0xac, 0xbf,
+    0xf3, 0xfb, 0x64, 0x67, 0xfc, 0xc7, 0x59, 0x7f, 0xff, 0x9b, 0xf1, 0xe2,
+    0xcf, 0xea, 0x3c, 0x59, 0xbc, 0x3d, 0xac, 0xbf, 0xfe, 0x8c, 0xff, 0x9e,
+    0x5a, 0x08, 0xe0, 0xa1, 0x65, 0x49, 0x39, 0x5d, 0xc4, 0xef, 0x0b, 0x85,
+    0x0f, 0x79, 0xfe, 0xeb, 0x0d, 0xff, 0xe6, 0xf3, 0xb4, 0xff, 0x62, 0x60,
+    0x71, 0x65, 0xff, 0x14, 0x4b, 0x39, 0x8d, 0x0b, 0x2d, 0x3a, 0xca, 0x83,
+    0xc7, 0x23, 0x5b, 0xff, 0xfe, 0x80, 0x1d, 0xe5, 0xb3, 0xfe, 0xc3, 0xe7,
+    0x71, 0xe8, 0x3a, 0xcb, 0xff, 0xe6, 0x2f, 0x87, 0xcd, 0xcd, 0xb7, 0xfe,
+    0x0d, 0x65, 0x79, 0x17, 0x3f, 0x68, 0xbf, 0x9a, 0x7d, 0x8e, 0x40, 0x59,
+    0x7f, 0xff, 0xde, 0x76, 0xe6, 0x1a, 0xe4, 0x0d, 0x99, 0xb9, 0x04, 0xe6,
+    0xac, 0xbc, 0xef, 0xda, 0xa2, 0xda, 0x54, 0x22, 0x4b, 0xb6, 0x9b, 0xff,
+    0xfa, 0x1f, 0xf1, 0xe8, 0xe3, 0x34, 0x9b, 0x58, 0x35, 0x97, 0xf7, 0xa0,
+    0xf0, 0xc3, 0x59, 0x4c, 0x9c, 0x54, 0xc4, 0x7a, 0x86, 0x0f, 0x08, 0xfe,
+    0xaf, 0x7f, 0x3c, 0x87, 0xe6, 0x3a, 0xcb, 0xfd, 0x93, 0x14, 0x1f, 0x67,
+    0x6b, 0x2e, 0xf3, 0x0c, 0xf8, 0xfe, 0x5b, 0x7f, 0xfb, 0xd9, 0x27, 0x2f,
+    0xbc, 0x98, 0xd8, 0x59, 0x7f, 0xd9, 0x9d, 0xed, 0x87, 0xcd, 0xa5, 0x97,
+    0xff, 0x7b, 0x27, 0xe3, 0x6a, 0x37, 0x5c, 0x96, 0x5d, 0x8c, 0xb2, 0xbb,
+    0x3d, 0xbd, 0xe8, 0xd7, 0xf4, 0x0a, 0x39, 0x3e, 0x18, 0xb2, 0xa0, 0xf6,
+    0x34, 0x4b, 0x6d, 0xa9, 0x65, 0xff, 0xd9, 0xf8, 0x39, 0x39, 0xa5, 0x80,
+    0x59, 0x60, 0x2c, 0xa9, 0x8f, 0xa4, 0x85, 0xbe, 0x85, 0x7f, 0xe6, 0x21,
+    0xc4, 0x1f, 0x75, 0xe4, 0xb2, 0xff, 0xa0, 0x1e, 0x89, 0xcb, 0x38, 0xb2,
+    0xa0, 0xfd, 0xc2, 0x7f, 0x7d, 0xe8, 0xd1, 0xab, 0x2f, 0xff, 0x36, 0xa3,
+    0x3c, 0x16, 0xe7, 0xb0, 0x0b, 0x2f, 0xff, 0x86, 0x1f, 0xf0, 0x79, 0x2f,
+    0x46, 0xf1, 0xc2, 0xcb, 0x83, 0x8b, 0x2a, 0x48, 0xd3, 0x19, 0x1b, 0x24,
+    0x12, 0x95, 0xff, 0x44, 0xa3, 0x53, 0xc6, 0xa7, 0x59, 0x7f, 0xfa, 0x25,
+    0xe8, 0x23, 0x4b, 0x27, 0x12, 0x4b, 0x2f, 0xff, 0xf4, 0x31, 0x3f, 0xc3,
+    0xfc, 0x1c, 0x1c, 0x7e, 0x8e, 0x96, 0x5f, 0xe6, 0x38, 0xe3, 0x82, 0x71,
+    0x65, 0xef, 0xe7, 0x6b, 0x2f, 0xff, 0x89, 0xb7, 0xb7, 0xfd, 0x1f, 0xe4,
+    0x6f, 0x85, 0x94, 0xc9, 0xa6, 0x69, 0x2f, 0xcb, 0xff, 0x34, 0x08, 0xed,
+    0xfe, 0x1e, 0x14, 0x9b, 0xc1, 0x59, 0x61, 0xac, 0xbf, 0x83, 0xdf, 0xa3,
+    0x58, 0xb2, 0xf7, 0x5c, 0xf2, 0xca, 0xc3, 0xcc, 0x72, 0xea, 0x64, 0x57,
+    0xb9, 0x97, 0x17, 0x6f, 0xfe, 0xfb, 0xb6, 0x46, 0x9e, 0x4d, 0xe5, 0x97,
+    0xe7, 0x1e, 0x10, 0x16, 0x54, 0x8f, 0x9d, 0x90, 0x6f, 0xfa, 0x35, 0xb3,
+    0x91, 0xe7, 0x65, 0x97, 0xfb, 0xcc, 0xf2, 0xfb, 0x4e, 0xb2, 0xfa, 0x30,
+    0x99, 0x65, 0xf7, 0xe3, 0x06, 0xb2, 0x86, 0x78, 0x1d, 0x0f, 0xde, 0xfe,
+    0x4e, 0xb2, 0xb6, 0xa6, 0x6e, 0x88, 0xa4, 0x76, 0x23, 0xcb, 0x93, 0x00,
+    0xe1, 0x1f, 0x92, 0x98, 0xfb, 0x85, 0x9b, 0x16, 0xcc, 0x91, 0xa8, 0x77,
+    0x9e, 0x11, 0x5e, 0x85, 0x33, 0xc3, 0xd0, 0x8e, 0xf9, 0x1c, 0x37, 0xe1,
+    0xf2, 0x18, 0x4a, 0x98, 0x43, 0xb6, 0x72, 0x23, 0x9e, 0xe9, 0x1d, 0xec,
+    0xc3, 0x56, 0x5f, 0xd1, 0x2e, 0x3e, 0x76, 0xb2, 0xe8, 0x17, 0xa3, 0xc9,
+    0xf0, 0xe5, 0xff, 0x46, 0x9f, 0xe0, 0x10, 0xa4, 0xb2, 0xff, 0xfe, 0xd4,
+    0x7d, 0xbb, 0x61, 0xc3, 0x69, 0xa4, 0xdc, 0x59, 0x7f, 0x1a, 0xfa, 0x18,
+    0x49, 0x65, 0xfe, 0xfb, 0x76, 0xc3, 0xe8, 0x96, 0x5f, 0xd0, 0x7c, 0x0e,
+    0x1d, 0x65, 0x41, 0xf0, 0x31, 0xa5, 0xff, 0xff, 0xff, 0x86, 0x51, 0xdf,
+    0x5d, 0xb7, 0x47, 0x72, 0x37, 0x09, 0xfa, 0x33, 0xbf, 0x34, 0xc4, 0xc7,
+    0xe2, 0xcb, 0xff, 0x37, 0xe3, 0xed, 0xbe, 0x0b, 0xb5, 0x97, 0x75, 0x25,
+    0x95, 0x88, 0xf6, 0x78, 0x4f, 0x84, 0xfe, 0xfe, 0x2d, 0xb6, 0xd6, 0x1a,
+    0xb2, 0xef, 0xf9, 0x65, 0xff, 0x67, 0xf8, 0x27, 0x3f, 0x9e, 0x59, 0x53,
+    0x9e, 0x89, 0xc5, 0xef, 0xcd, 0x39, 0xe3, 0xb5, 0x97, 0xe7, 0xea, 0x42,
+    0x71, 0x65, 0xff, 0x9a, 0x6e, 0x6f, 0x72, 0x9c, 0x23, 0x59, 0x61, 0x73,
+    0xab, 0xa2, 0xc3, 0x93, 0x56, 0x75, 0x08, 0xef, 0x46, 0x2c, 0x46, 0x7c,
+    0x84, 0x0f, 0xc8, 0xf7, 0x94, 0x88, 0x55, 0x42, 0xd7, 0x8a, 0x72, 0x3b,
+    0x00, 0x4b, 0xd1, 0xb8, 0xfe, 0x59, 0x7e, 0xd7, 0x6e, 0xfd, 0xaa, 0x2e,
+    0x55, 0xfc, 0xe3, 0xf4, 0x14, 0xeb, 0x2e, 0x37, 0xcb, 0x2c, 0x2c, 0x68,
+    0x92, 0xc1, 0x7f, 0x1b, 0x39, 0x6d, 0xcc, 0x6a, 0xcb, 0xf6, 0xbb, 0x77,
+    0xed, 0x51, 0x76, 0xaf, 0x4f, 0x86, 0x2c, 0xbc, 0x0d, 0xee, 0xb2, 0xff,
+    0x9a, 0x52, 0x62, 0x04, 0x49, 0x65, 0xc7, 0xdb, 0x59, 0x7c, 0xda, 0x70,
+    0x2c, 0xbc, 0xf3, 0xc2, 0xcb, 0x0b, 0x1a, 0x62, 0xf8, 0x2e, 0x73, 0x6f,
+    0x0f, 0x38, 0xf1, 0x1b, 0xf0, 0x68, 0x24, 0x35, 0x10, 0x94, 0xb8, 0x9c,
+    0xaa, 0x55, 0x98, 0xf0, 0xe5, 0x36, 0xe2, 0x21, 0xb5, 0xe0, 0x5b, 0x5b,
+    0xc0, 0x9d, 0xc8, 0x63, 0x7a, 0x9c, 0x14, 0x55, 0xa9, 0xbf, 0x21, 0xa7,
+    0xf8, 0xd6, 0xaf, 0xf0, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x2a, 0x75, 0xfe,
+    0xd7, 0xdb, 0xf3, 0x87, 0x8b, 0x2e, 0xe7, 0x16, 0x5c, 0x42, 0xf0, 0xf3,
+    0x34, 0x6b, 0x7f, 0xf3, 0x6f, 0x8f, 0x34, 0x4d, 0x34, 0x76, 0xb2, 0xe9,
+    0xf1, 0x65, 0xf7, 0x0b, 0xdf, 0x59, 0x7f, 0xbd, 0x1c, 0x83, 0x86, 0x65,
+    0x97, 0xc1, 0x94, 0x4e, 0xb2, 0xff, 0xba, 0x97, 0x36, 0x66, 0xf7, 0xd2,
+    0xca, 0x92, 0x2d, 0xc6, 0x45, 0xa3, 0x4f, 0x11, 0xdf, 0xc1, 0xe8, 0xee,
+    0xe4, 0xb2, 0xdf, 0x59, 0x7d, 0xd7, 0x20, 0x6b, 0x2c, 0x15, 0x97, 0xa1,
+    0xe7, 0xd8, 0x6d, 0x00, 0x47, 0x4c, 0x7f, 0x24, 0x8b, 0x7d, 0xdb, 0xbf,
+    0x6a, 0x8a, 0xe5, 0x71, 0xe1, 0x65, 0xfb, 0x5d, 0xbb, 0xf6, 0xa8, 0xb3,
+    0x96, 0x17, 0x07, 0x99, 0x82, 0xd7, 0x3c, 0x96, 0x5f, 0xd2, 0xff, 0x5d,
+    0xb7, 0x16, 0x53, 0x9e, 0x30, 0x45, 0xaf, 0xe6, 0xe6, 0x13, 0x98, 0xb2,
+    0xf0, 0x65, 0x0b, 0x2b, 0x49, 0xa9, 0xf9, 0xf0, 0x9b, 0xbe, 0x43, 0xbc,
+    0xb2, 0xff, 0xf7, 0xe3, 0x9b, 0x03, 0xcf, 0xc4, 0xd3, 0x32, 0xcb, 0xff,
+    0xf3, 0xfb, 0x0f, 0x07, 0xd9, 0x98, 0x69, 0xaf, 0x25, 0x97, 0xf3, 0x1e,
+    0x70, 0xea, 0x4b, 0x2f, 0xc7, 0xc9, 0x9c, 0x0b, 0x2f, 0xa7, 0xf3, 0xfd,
+    0x65, 0x39, 0xe5, 0x84, 0xa2, 0xf8, 0xfb, 0x40, 0xa7, 0xeb, 0x2f, 0xd1,
+    0x34, 0xd1, 0xda, 0xcb, 0xa3, 0xdb, 0x0f, 0x59, 0x8b, 0x2b, 0x13, 0xc4,
+    0x99, 0x3b, 0xca, 0xe4, 0xf5, 0xbd, 0xde, 0xff, 0x8a, 0x0f, 0xc0, 0xc9,
+    0xcd, 0x59, 0x7e, 0xd6, 0x7d, 0x8e, 0xb2, 0xe3, 0xef, 0x59, 0x78, 0xa0,
+    0x6b, 0x2b, 0x0d, 0xa3, 0x8c, 0xdd, 0xec, 0x59, 0x7e, 0xc9, 0xa6, 0x0c,
+    0xeb, 0x2c, 0x6e, 0x1e, 0x0f, 0x85, 0xaf, 0xd3, 0x41, 0xe0, 0x45, 0x97,
+    0xff, 0xfd, 0xa6, 0xe0, 0x33, 0x63, 0x6f, 0x8f, 0x34, 0x4d, 0x34, 0x76,
+    0xb2, 0xe9, 0x1d, 0x65, 0x42, 0x34, 0xf0, 0xa1, 0xca, 0x49, 0xae, 0xfc,
+    0x78, 0x3e, 0x12, 0xcb, 0xfc, 0x23, 0x4d, 0x1c, 0x63, 0xac, 0xbf, 0xfd,
+    0xe6, 0xd9, 0xe7, 0x6f, 0xc6, 0x0d, 0x96, 0x5f, 0xf9, 0xb5, 0xb2, 0x0e,
+    0xdb, 0x8f, 0x32, 0xcb, 0xee, 0xdd, 0xfb, 0x54, 0x48, 0x4a, 0x34, 0xfc,
+    0xf4, 0x87, 0x7f, 0xd9, 0xfe, 0x06, 0x51, 0x3c, 0x2c, 0xbf, 0xff, 0x36,
+    0xbb, 0xf6, 0x6c, 0xd6, 0xb0, 0xcd, 0xb8, 0x3a, 0xca, 0x92, 0x25, 0x78,
+    0x73, 0x7d, 0xfd, 0x37, 0x4b, 0x2f, 0xe7, 0x7e, 0xa5, 0xc6, 0x59, 0x7f,
+    0x81, 0x1b, 0x91, 0xf8, 0x1a, 0xcb, 0xfe, 0x3e, 0x3e, 0xa7, 0xd9, 0xd1,
+    0xd6, 0x54, 0x1f, 0x96, 0x1a, 0xdf, 0xee, 0xb9, 0xf2, 0x83, 0xf1, 0x65,
+    0xff, 0xe7, 0x2e, 0xf6, 0x0c, 0x9e, 0x5e, 0x79, 0x2c, 0xa6, 0x3f, 0xf0,
+    0x9a, 0x5f, 0xd8, 0x4c, 0x0e, 0x42, 0xcb, 0x0b, 0x85, 0x6f, 0x12, 0x34,
+    0xc8, 0x5e, 0x75, 0x0b, 0x86, 0x23, 0xd1, 0x1f, 0xa1, 0x3e, 0x08, 0x4f,
+    0xf0, 0x86, 0xe6, 0xf2, 0xcb, 0xff, 0x38, 0x93, 0x13, 0x7c, 0xa0, 0x0b,
+    0x2a, 0x75, 0xc8, 0xc9, 0x4b, 0x9e, 0xea, 0x13, 0x5f, 0x16, 0xbf, 0xf3,
+    0x1f, 0x39, 0xb3, 0xa9, 0x67, 0xd6, 0x5f, 0x70, 0x63, 0x85, 0x95, 0xe3,
+    0xe3, 0xfa, 0x0d, 0xf4, 0xbc, 0x27, 0x16, 0x5c, 0x2a, 0x6d, 0x0b, 0x2f,
+    0xff, 0xde, 0x69, 0xbc, 0xdd, 0x7f, 0xdd, 0xb7, 0x30, 0x6b, 0x2f, 0xa1,
+    0x83, 0xc5, 0x96, 0x17, 0xb4, 0x91, 0x35, 0xd9, 0x0f, 0x96, 0x2a, 0x13,
+    0x1f, 0xc2, 0x27, 0x85, 0xf5, 0xf6, 0xd1, 0xe8, 0x3a, 0xcb, 0xf7, 0x39,
+    0x9a, 0x9d, 0x65, 0xee, 0x41, 0xab, 0x2b, 0xc7, 0x8d, 0xc2, 0x9b, 0xa0,
+    0xc5, 0x97, 0xfc, 0x0c, 0x19, 0x38, 0x23, 0x7a, 0xca, 0xc3, 0xf2, 0x62,
+    0x27, 0x17, 0xbc, 0x7d, 0xf2, 0x59, 0x7e, 0x8d, 0x6c, 0x07, 0xd6, 0x58,
+    0x45, 0x97, 0xff, 0x40, 0x0e, 0xf2, 0xe7, 0xf3, 0x0e, 0xb2, 0x86, 0x7a,
+    0xbe, 0x12, 0xbd, 0x31, 0xe6, 0x59, 0x61, 0x62, 0x86, 0xc1, 0x00, 0x55,
+    0x23, 0xc4, 0x33, 0xa7, 0x3d, 0x1c, 0x29, 0xb2, 0x37, 0x36, 0x94, 0x21,
+    0x32, 0x66, 0x8e, 0x4e, 0xb7, 0xe8, 0xcc, 0xde, 0x73, 0x14, 0xa3, 0xd0,
+    0xe1, 0x9f, 0xe1, 0xbe, 0x12, 0xc3, 0x07, 0xc4, 0x7f, 0xdd, 0x22, 0xbf,
+    0xc1, 0x7d, 0x4b, 0xc6, 0x3a, 0xcb, 0xff, 0xff, 0xfa, 0x3e, 0x4e, 0x02,
+    0x7d, 0xed, 0xbc, 0x83, 0xc1, 0x0a, 0x07, 0xe7, 0x96, 0x71, 0x65, 0xff,
+    0x84, 0x28, 0x1f, 0x9e, 0x59, 0xc5, 0x97, 0xfc, 0x50, 0x3f, 0x3c, 0xb3,
+    0x8b, 0x2f, 0xf3, 0xef, 0x6d, 0xe4, 0x1e, 0x6c, 0x3f, 0x51, 0x0f, 0xaf,
+    0x67, 0x42, 0xc6, 0x9c, 0x16, 0x8d, 0x0a, 0x1f, 0xd7, 0xff, 0x0b, 0xf3,
+    0xf0, 0xb3, 0xff, 0x80, 0x2c, 0xbf, 0xfc, 0x2c, 0xef, 0x21, 0x79, 0xae,
+    0xdd, 0xfb, 0x54, 0x4f, 0x8b, 0xff, 0xd2, 0x17, 0x9b, 0xd8, 0xde, 0x72,
+    0x0e, 0x15, 0x97, 0xfd, 0x86, 0x66, 0xf6, 0xfc, 0xa1, 0x65, 0xf0, 0x75,
+    0x1c, 0x59, 0x7d, 0xbb, 0xb6, 0x28, 0x31, 0x65, 0xf8, 0xd7, 0xfe, 0x18,
+    0xb2, 0xff, 0x44, 0xe2, 0x6d, 0xb9, 0x01, 0x65, 0x85, 0xce, 0x8e, 0xa1,
+    0x9d, 0x11, 0x10, 0x4b, 0x84, 0x29, 0xa7, 0x4e, 0x33, 0xf1, 0x9c, 0xd7,
+    0x6d, 0xb3, 0x3b, 0x42, 0x3f, 0x72, 0xb0, 0x6e, 0xd4, 0xac, 0xb3, 0xa4,
+    0xf9, 0x15, 0xe3, 0xe8, 0xbf, 0xc4, 0xff, 0xe1, 0x73, 0xeb, 0x2f, 0xff,
+    0xe0, 0x93, 0x9b, 0xb3, 0xe6, 0xc1, 0x4b, 0x3c, 0xc7, 0x59, 0x73, 0x74,
+    0xb2, 0xff, 0xfa, 0x53, 0xed, 0x38, 0xda, 0x27, 0xef, 0x5b, 0x36, 0x7b,
+    0x6d, 0x65, 0x48, 0xff, 0x80, 0x2f, 0x7f, 0xf8, 0xa7, 0xf4, 0x37, 0xf8,
+    0xc5, 0xd4, 0x96, 0x5f, 0xfd, 0x9f, 0x6c, 0x2f, 0x67, 0xe0, 0x6b, 0x2f,
+    0xfd, 0xf3, 0x60, 0xa5, 0x9e, 0x63, 0xac, 0xbf, 0xe3, 0x60, 0xa5, 0x9e,
+    0x63, 0xac, 0xbe, 0x09, 0x39, 0xbb, 0x0f, 0xdb, 0xe7, 0xd7, 0xed, 0x01,
+    0xbd, 0x0b, 0x28, 0xe7, 0xc4, 0x13, 0xbb, 0xf6, 0x6b, 0x32, 0x65, 0x96,
+    0x17, 0x8a, 0xb6, 0xce, 0x65, 0xe8, 0x6d, 0xb9, 0x11, 0x25, 0x72, 0x31,
+    0x91, 0x08, 0xaf, 0xda, 0xed, 0xdf, 0xb5, 0x45, 0x64, 0xbf, 0xf3, 0xc8,
+    0x5e, 0x6b, 0xb7, 0x7e, 0xd5, 0x13, 0x72, 0xc2, 0xf1, 0x10, 0x87, 0x36,
+    0xae, 0xd3, 0x25, 0x68, 0x7d, 0xdf, 0x76, 0xef, 0xda, 0xa2, 0x56, 0x5f,
+    0xff, 0x6a, 0x72, 0x8d, 0x38, 0xc9, 0xf5, 0x1b, 0xd6, 0x56, 0x91, 0x00,
+    0x13, 0x0b, 0xfe, 0x76, 0x93, 0x10, 0x60, 0xeb, 0x2f, 0xa0, 0x6f, 0xe5,
+    0x97, 0xb4, 0xdd, 0x2c, 0xa5, 0x97, 0xf9, 0xa4, 0xc4, 0x18, 0x3a, 0xcb,
+    0xf1, 0x3b, 0x75, 0xd9, 0xcd, 0xe3, 0x85, 0xd1, 0x22, 0xdf, 0xe4, 0x3b,
+    0xab, 0x37, 0xfa, 0x18, 0xa2, 0x51, 0xba, 0xb2, 0xf8, 0x23, 0xc3, 0x56,
+    0x5f, 0x1d, 0xe4, 0x2f, 0x13, 0x98, 0xec, 0x8d, 0xa1, 0xdb, 0xc3, 0x2d,
+    0xb3, 0x3b, 0xf0, 0xb7, 0x9b, 0x98, 0xb2, 0xfc, 0x2f, 0x25, 0x00, 0x59,
+    0x42, 0xd1, 0x7d, 0x3b, 0x5c, 0x8a, 0xaf, 0xfd, 0xfc, 0x17, 0x9a, 0x69,
+    0xdc, 0xeb, 0x2f, 0xe1, 0x4b, 0x9f, 0x51, 0xc5, 0x97, 0xff, 0xb6, 0xad,
+    0xac, 0x53, 0xcc, 0x79, 0x36, 0x6b, 0x16, 0x5f, 0xf9, 0xb8, 0x13, 0x93,
+    0x6f, 0x0b, 0xac, 0xbf, 0xfe, 0xf4, 0x49, 0x81, 0xac, 0xf3, 0x93, 0xc9,
+    0x65, 0xfd, 0x04, 0xfd, 0xbe, 0xe2, 0xcb, 0xe0, 0xee, 0x8e, 0x16, 0x5f,
+    0xf4, 0x77, 0x1a, 0x6f, 0xc7, 0x6b, 0x2a, 0x49, 0x8c, 0xf4, 0x7e, 0x74,
+    0xdf, 0x17, 0xfc, 0x96, 0xda, 0x59, 0x7f, 0xe0, 0x7f, 0x3d, 0x05, 0xfd,
+    0xbc, 0x59, 0x43, 0x3d, 0x10, 0x88, 0xdf, 0x76, 0xef, 0xda, 0xa2, 0x5c,
+    0x5f, 0xff, 0x7b, 0x07, 0x1e, 0x89, 0x14, 0x69, 0xc6, 0xb2, 0xb4, 0x7f,
+    0xbc, 0x30, 0xbf, 0x4b, 0x3f, 0xbb, 0x3a, 0xcb, 0xef, 0xe9, 0xba, 0x59,
+    0x7f, 0x9e, 0x5f, 0x28, 0x3f, 0x16, 0x5f, 0xfc, 0xdc, 0x09, 0xbc, 0xc3,
+    0xb7, 0xa1, 0x65, 0x31, 0xfb, 0x39, 0x95, 0xfa, 0x5b, 0x6d, 0xe7, 0x59,
+    0x76, 0xdc, 0x2c, 0xbf, 0xf8, 0xa4, 0xe3, 0x78, 0x94, 0x13, 0xac, 0xa8,
+    0x3d, 0x9c, 0x19, 0xbf, 0x14, 0x76, 0xfa, 0x59, 0x7f, 0xff, 0x60, 0x7b,
+    0xf4, 0x14, 0x49, 0xc7, 0x1d, 0x69, 0x96, 0x5f, 0xfb, 0x8c, 0x41, 0xfe,
+    0xdb, 0x6f, 0x3a, 0xcb, 0xff, 0xff, 0xe2, 0xcf, 0xf3, 0x06, 0xe3, 0x82,
+    0x7e, 0xbd, 0x9c, 0x8e, 0x71, 0xfc, 0xb2, 0xf3, 0x14, 0x2c, 0xa9, 0x27,
+    0xf6, 0x38, 0x41, 0xb1, 0x06, 0xe1, 0x39, 0xd6, 0x89, 0x0f, 0x7b, 0xd5,
+    0xfe, 0xcf, 0xf9, 0xb4, 0xfc, 0x59, 0x7f, 0xfd, 0xf6, 0x28, 0x96, 0x0f,
+    0x25, 0x84, 0x05, 0x97, 0xe6, 0x00, 0x1b, 0xa5, 0x97, 0xfd, 0x1e, 0x76,
+    0x93, 0x1b, 0x0b, 0x2f, 0xfe, 0x20, 0xcb, 0xcf, 0x2c, 0xea, 0x50, 0xb2,
+    0xff, 0xe0, 0xc8, 0x9a, 0x51, 0xf2, 0x0c, 0x96, 0x5f, 0xa3, 0x80, 0x3f,
+    0xd6, 0x53, 0x1f, 0x5f, 0x90, 0xe8, 0x69, 0x83, 0xf0, 0xdf, 0xf0, 0xaf,
+    0xb7, 0x6b, 0x2a, 0x13, 0xc3, 0xc4, 0xc7, 0x8c, 0xbc, 0x06, 0xd7, 0xf4,
+    0xbd, 0x85, 0x9d, 0xac, 0xbd, 0x2f, 0x7d, 0x65, 0x31, 0xe5, 0x78, 0xb6,
+    0xfb, 0xaf, 0x47, 0x6b, 0x2d, 0xe8, 0x3c, 0x57, 0x21, 0xbf, 0xf8, 0x98,
+    0x1c, 0xd4, 0x34, 0x9f, 0x8b, 0x2f, 0xe7, 0xe8, 0x0e, 0xfa, 0x59, 0x73,
+    0x71, 0x65, 0x62, 0x2a, 0xd8, 0x9b, 0x88, 0x5b, 0x65, 0xb7, 0xf6, 0x98,
+    0xe4, 0xf2, 0x59, 0x7f, 0xee, 0xa5, 0x9f, 0xcd, 0x77, 0x18, 0xb2, 0xf3,
+    0xc8, 0x5e, 0xd0, 0xca, 0x64, 0x15, 0x0c, 0x62, 0x36, 0xf9, 0x42, 0x77,
+    0x21, 0x3f, 0xd1, 0x13, 0x16, 0x7a, 0x13, 0x2f, 0x28, 0x6c, 0x9b, 0x79,
+    0x1f, 0xaf, 0xe3, 0x7b, 0x09, 0xf6, 0xe9, 0x65, 0xff, 0x82, 0x71, 0x7c,
+    0x82, 0xfe, 0x69, 0x65, 0xff, 0xfb, 0x3c, 0x2f, 0x91, 0xf8, 0xdf, 0x05,
+    0xdb, 0xf1, 0x65, 0xff, 0x0f, 0x05, 0xc6, 0x9b, 0xc1, 0x59, 0x7f, 0xf0,
+    0xe0, 0x5e, 0xee, 0x75, 0x2f, 0x47, 0x16, 0x58, 0x5b, 0x33, 0x31, 0xcf,
+    0x4a, 0xa4, 0xe4, 0x60, 0xff, 0x40, 0x0a, 0xc6, 0xf3, 0xab, 0xff, 0x85,
+    0xbc, 0x85, 0xe6, 0xbb, 0x77, 0xed, 0x51, 0x1d, 0xaf, 0xff, 0x83, 0x1d,
+    0x49, 0x8e, 0x66, 0x10, 0xfd, 0x0b, 0x2f, 0xff, 0xfe, 0x3c, 0x77, 0xdf,
+    0x9a, 0x6f, 0x31, 0x0d, 0xf5, 0x06, 0x9a, 0x19, 0xd6, 0x5c, 0x11, 0x16,
+    0x5f, 0x13, 0xbf, 0x4b, 0x2f, 0xba, 0xfb, 0x18, 0xb2, 0xa0, 0xf1, 0x4e,
+    0x43, 0x74, 0xe2, 0xc6, 0x9a, 0x2e, 0x28, 0x1d, 0xdc, 0x45, 0xdb, 0xff,
+    0xfc, 0xe0, 0x16, 0x24, 0x4f, 0x9f, 0x82, 0x60, 0x67, 0x5f, 0x59, 0x7e,
+    0xe3, 0x6f, 0xf6, 0xf5, 0x97, 0x17, 0x16, 0x5f, 0x7b, 0x24, 0x2e, 0x0f,
+    0x09, 0xcb, 0x2b, 0x13, 0x2b, 0x99, 0x37, 0xf0, 0xa5, 0xbc, 0x29, 0xd8,
+    0x35, 0x97, 0xfc, 0x29, 0xdb, 0xc3, 0x5b, 0xe5, 0x0b, 0x2f, 0xe1, 0x41,
+    0x47, 0x78, 0x4b, 0x2e, 0x0f, 0x96, 0x5f, 0xc2, 0x92, 0xcf, 0x3f, 0xd6,
+    0x58, 0xc5, 0x97, 0xd8, 0x7d, 0x42, 0xcb, 0xf6, 0x13, 0x00, 0x45, 0x94,
+    0x47, 0x91, 0xc2, 0x1b, 0xd9, 0xa8, 0x59, 0x7c, 0x1d, 0xd1, 0xc2, 0xcb,
+    0xff, 0xf4, 0x98, 0x7e, 0x6d, 0xfb, 0x30, 0x7a, 0x60, 0xf6, 0xb2, 0xfa,
+    0x35, 0x1a, 0x59, 0x42, 0x84, 0xcd, 0x99, 0x6b, 0x44, 0x3e, 0x1b, 0xf9,
+    0x28, 0x8b, 0x57, 0xa6, 0x89, 0xd6, 0x5f, 0x41, 0x7f, 0x8b, 0x2e, 0xc3,
+    0x20, 0xdf, 0xf0, 0x7a, 0xff, 0xdc, 0xfe, 0x7a, 0x0b, 0xfe, 0x65, 0x97,
+    0xfd, 0x19, 0xf6, 0x79, 0xe3, 0x4b, 0x2e, 0x10, 0xeb, 0x2b, 0x11, 0x18,
+    0x03, 0xdf, 0x9b, 0xdd, 0xb5, 0x71, 0x65, 0xfc, 0x02, 0xce, 0xbf, 0x8b,
+    0x2e, 0x9f, 0x71, 0x65, 0xff, 0xdb, 0xe0, 0x7f, 0xc8, 0x6f, 0xc4, 0xcb,
+    0x2f, 0x8d, 0xf6, 0x01, 0x65, 0xfc, 0xe6, 0x67, 0xe3, 0xb5, 0x94, 0xe7,
+    0xa2, 0x44, 0x77, 0xf1, 0x01, 0xf4, 0xe2, 0x2c, 0xbf, 0xfe, 0x8f, 0xc7,
+    0xf6, 0x7f, 0xd8, 0x4f, 0xa3, 0x56, 0x56, 0xd0, 0x9c, 0xc4, 0x0e, 0x4e,
+    0x5a, 0xc3, 0x7a, 0x84, 0xb3, 0x90, 0x11, 0x6d, 0xff, 0xf7, 0xb6, 0x16,
+    0x36, 0x9a, 0x77, 0x39, 0xd9, 0x65, 0xff, 0xff, 0xde, 0x71, 0x93, 0xec,
+    0xe7, 0xa3, 0x9b, 0x02, 0xfb, 0x25, 0x9b, 0xe1, 0x65, 0xf1, 0xa5, 0x92,
+    0x59, 0x5e, 0x44, 0xd1, 0x3c, 0x5f, 0xfe, 0x2c, 0x37, 0xcf, 0x2f, 0x18,
+    0xe2, 0x1d, 0x65, 0x41, 0xf7, 0x61, 0x15, 0x32, 0x6f, 0x1e, 0x8d, 0x62,
+    0xfd, 0xad, 0x46, 0xfe, 0x2c, 0xbf, 0xf3, 0x6b, 0x67, 0x0b, 0x0f, 0x1d,
+    0xac, 0xbf, 0xc1, 0xfb, 0x3e, 0xf7, 0x92, 0xcb, 0xf9, 0xf7, 0x8f, 0x08,
+    0xd5, 0x96, 0x82, 0x3e, 0x31, 0x0d, 0x2f, 0xff, 0xfe, 0x04, 0x17, 0x6f,
+    0xf7, 0xe8, 0x1b, 0x30, 0x9a, 0x03, 0xef, 0x42, 0xcb, 0xff, 0x10, 0x65,
+    0xb3, 0x18, 0xa0, 0xeb, 0x2f, 0xee, 0x49, 0xbb, 0x7d, 0x2c, 0xbc, 0xef,
+    0xda, 0xa2, 0xa1, 0x5f, 0xfe, 0x6d, 0xf8, 0xc5, 0x9a, 0x8e, 0xe3, 0x4b,
+    0x2c, 0x75, 0x97, 0xb0, 0x3f, 0x23, 0xda, 0x0a, 0x4d, 0x42, 0x38, 0xfb,
+    0x2e, 0xd4, 0x20, 0xef, 0xe8, 0x9a, 0x41, 0xea, 0x4b, 0x2f, 0xf8, 0x1c,
+    0xd9, 0xc0, 0x3e, 0x4c, 0xb2, 0xfe, 0xdd, 0x72, 0x18, 0x9d, 0x2c, 0xa6,
+    0x3e, 0xe7, 0x3c, 0xbf, 0x83, 0xdb, 0x1a, 0xfd, 0xac, 0xbe, 0xd7, 0x61,
+    0x02, 0xcb, 0xfb, 0x09, 0xf5, 0xa6, 0x59, 0x6c, 0x63, 0xcf, 0xf1, 0x25,
+    0x49, 0x71, 0x23, 0x0a, 0x4d, 0x2a, 0xee, 0x14, 0x7d, 0x13, 0xb3, 0x96,
+    0xa3, 0x21, 0x39, 0xaf, 0xa1, 0x3c, 0x44, 0x1c, 0x7f, 0xbd, 0xb8, 0xf0,
+    0xb2, 0xd8, 0xb2, 0xff, 0xf9, 0x8f, 0x1d, 0xec, 0xef, 0xcd, 0xbb, 0x07,
+    0x85, 0x97, 0xff, 0x05, 0xe7, 0xe6, 0x37, 0x7d, 0xe6, 0xf5, 0x95, 0x24,
+    0x56, 0xf8, 0x40, 0x95, 0x6f, 0xfa, 0x5f, 0x6d, 0x3f, 0x6c, 0x4b, 0x2f,
+    0x03, 0x98, 0xb2, 0xff, 0x70, 0x33, 0x38, 0xde, 0x65, 0x97, 0xff, 0xf7,
+    0x0c, 0x7d, 0xde, 0x36, 0xa6, 0xe4, 0x1d, 0xfa, 0xfa, 0xcb, 0xfa, 0x3b,
+    0x62, 0x89, 0x2c, 0xbf, 0xed, 0x90, 0xc5, 0x87, 0xd4, 0x2c, 0xbd, 0xa6,
+    0xe9, 0x65, 0x49, 0x33, 0x3e, 0x87, 0x26, 0x35, 0x3b, 0x0f, 0x0b, 0x3e,
+    0x71, 0x7e, 0x29, 0xc1, 0x02, 0x2c, 0xbf, 0xa5, 0xb9, 0x1f, 0x82, 0x59,
+    0x68, 0xc3, 0xd8, 0xdd, 0x29, 0xbf, 0x48, 0xa0, 0xe6, 0xac, 0xbf, 0xf8,
+    0xf9, 0xa2, 0xc6, 0xde, 0xda, 0x75, 0x95, 0xd1, 0xf5, 0xb9, 0x45, 0xff,
+    0xf9, 0xb5, 0xb3, 0x3e, 0x18, 0xc9, 0xfd, 0x8d, 0x25, 0x97, 0xfe, 0x2c,
+    0x9b, 0xfe, 0xcd, 0x37, 0x16, 0x5f, 0xf8, 0xfb, 0x0e, 0xff, 0xd9, 0xef,
+    0xe9, 0x65, 0xfe, 0x83, 0xe3, 0x68, 0x3b, 0x8b, 0x29, 0xcf, 0xe4, 0x28,
+    0x95, 0xe4, 0x6c, 0x14, 0x2d, 0xef, 0xdd, 0x13, 0x1d, 0x96, 0x5e, 0x9f,
+    0x0c, 0x59, 0x7b, 0x35, 0xe5, 0x96, 0x81, 0x41, 0xba, 0xec, 0x7a, 0xfb,
+    0x6c, 0x3b, 0xb0, 0xb2, 0xa1, 0x51, 0x58, 0xc8, 0xb2, 0x32, 0xe6, 0x27,
+    0xd3, 0x08, 0x4a, 0xef, 0xef, 0xbf, 0xb6, 0x0e, 0x16, 0x5f, 0xf7, 0xf8,
+    0x27, 0x1f, 0xa9, 0x62, 0xcb, 0xfc, 0xf2, 0xd9, 0xc0, 0x81, 0xd6, 0x5f,
+    0x47, 0xa2, 0x75, 0x96, 0x61, 0x9e, 0xbf, 0x8d, 0x6a, 0x11, 0xd1, 0x85,
+    0xe1, 0x84, 0x95, 0xfb, 0x8d, 0xec, 0x1a, 0xcb, 0xf4, 0xa3, 0xf9, 0x3a,
+    0xca, 0xdc, 0x3c, 0xfd, 0x13, 0xde, 0xeb, 0xf8, 0xb2, 0xfe, 0xe3, 0x17,
+    0x7e, 0x85, 0x95, 0x87, 0xdf, 0xa2, 0x5f, 0x8e, 0xdf, 0x36, 0xdb, 0x79,
+    0x65, 0xff, 0xb3, 0xfc, 0xd6, 0x4d, 0xe6, 0x35, 0x65, 0xff, 0xfc, 0xdc,
+    0x06, 0x48, 0xa0, 0x0f, 0xee, 0xa5, 0x9f, 0x59, 0x7f, 0xf7, 0x6d, 0xad,
+    0x3c, 0x9f, 0xb0, 0xf4, 0xb2, 0xff, 0xb0, 0xdc, 0x3b, 0x6d, 0xc1, 0xd6,
+    0x56, 0x91, 0xb9, 0xe5, 0xa2, 0x47, 0xbf, 0xed, 0x8e, 0x59, 0xbb, 0xb3,
+    0xc1, 0x59, 0x7e, 0x31, 0xb5, 0x86, 0xac, 0xa8, 0x54, 0x0b, 0x85, 0xcc,
+    0x48, 0xf1, 0x8e, 0x04, 0xbc, 0x43, 0xfb, 0xfe, 0xfb, 0x71, 0x82, 0x2b,
+    0x1c, 0x2c, 0xba, 0x3a, 0x59, 0x7f, 0x47, 0xf0, 0x9f, 0x71, 0x65, 0xf8,
+    0x02, 0x89, 0xf0, 0xc5, 0x94, 0xc8, 0xaf, 0xd1, 0xe0, 0x05, 0xc8, 0xba,
+    0xe1, 0x40, 0xa5, 0x65, 0xff, 0x9c, 0xbb, 0xfe, 0x7b, 0xff, 0x0a, 0xca,
+    0x63, 0xde, 0x08, 0xfd, 0xfd, 0x1a, 0x9e, 0x35, 0x3a, 0xcb, 0xe0, 0xcf,
+    0x12, 0x59, 0x52, 0x3d, 0x2e, 0x17, 0xdf, 0xfb, 0x98, 0x5f, 0xe6, 0x49,
+    0xbc, 0xb2, 0xfe, 0xe6, 0x6f, 0x28, 0xe9, 0x65, 0xc1, 0xf2, 0xca, 0xe2,
+    0x20, 0xfe, 0x7b, 0xb6, 0x5f, 0x7f, 0xfd, 0x00, 0xc2, 0xd8, 0xff, 0xd9,
+    0xec, 0x03, 0xac, 0xb8, 0xa7, 0x59, 0x50, 0x9a, 0x06, 0x42, 0x95, 0x8c,
+    0xc9, 0x46, 0xff, 0x0f, 0x0f, 0xb3, 0x8f, 0xe5, 0x97, 0x83, 0x1c, 0x59,
+    0x4c, 0x7a, 0x3e, 0x35, 0xbb, 0x92, 0x59, 0x7f, 0xfb, 0xd0, 0x72, 0x73,
+    0x4b, 0x01, 0xd0, 0x16, 0x5f, 0xdb, 0xdc, 0xfe, 0x31, 0xd6, 0x5f, 0xff,
+    0xe6, 0x8f, 0xbf, 0x85, 0xf3, 0xd8, 0x5f, 0xd8, 0x09, 0x71, 0x65, 0xff,
+    0x31, 0x36, 0x77, 0x1f, 0xe2, 0xca, 0x92, 0x62, 0xac, 0x94, 0x46, 0x1f,
+    0x64, 0xbd, 0xc0, 0xe9, 0x65, 0xe6, 0xf3, 0x2c, 0xbf, 0xb4, 0xe4, 0x00,
+    0x42, 0xca, 0x84, 0xfb, 0x67, 0x21, 0xc8, 0xcb, 0x18, 0xf1, 0xc7, 0x44,
+    0x1b, 0xbf, 0xc5, 0x9f, 0xe0, 0x1b, 0xa5, 0x97, 0xe2, 0xc1, 0x93, 0xac,
+    0xa9, 0x1e, 0xc6, 0x19, 0xdd, 0x9b, 0xd6, 0x5f, 0xa0, 0xef, 0xd7, 0xd6,
+    0x5d, 0x93, 0xac, 0xbf, 0xf8, 0x7c, 0xcd, 0x16, 0x03, 0x99, 0xa5, 0x95,
+    0xe4, 0x4d, 0x70, 0x63, 0xe5, 0x01, 0x17, 0xbf, 0x67, 0x61, 0x79, 0xd6,
+    0x57, 0x8f, 0x98, 0x8f, 0x6f, 0xff, 0xb4, 0x41, 0xe8, 0xb1, 0xb5, 0xdf,
+    0xa3, 0x8b, 0x2f, 0xff, 0xee, 0xdf, 0xd9, 0x28, 0xd4, 0x03, 0x50, 0x23,
+    0x92, 0xca, 0x84, 0x55, 0x62, 0x85, 0xf4, 0xee, 0x5b, 0xd6, 0x5f, 0xc0,
+    0xc2, 0xf0, 0x49, 0x65, 0x61, 0xe8, 0x39, 0x25, 0xff, 0xff, 0xfd, 0x2d,
+    0x9f, 0xf3, 0x47, 0x36, 0x60, 0x7b, 0x8d, 0xfb, 0x33, 0x5a, 0xcd, 0xe1,
+    0x7f, 0x2c, 0xbe, 0xfe, 0xd0, 0x29, 0xda, 0x96, 0x54, 0x23, 0x13, 0x21,
+    0x27, 0x7d, 0xe2, 0x7d, 0xd5, 0x97, 0xc7, 0x6d, 0xd8, 0x59, 0x50, 0xae,
+    0xbf, 0x23, 0x21, 0xf4, 0x32, 0xc9, 0xc7, 0x90, 0xe4, 0xf9, 0x30, 0x49,
+    0x2f, 0xf3, 0xf5, 0xc6, 0x3c, 0x76, 0xb2, 0xf6, 0x67, 0x16, 0x5d, 0x1a,
+    0x59, 0x69, 0xc6, 0x6c, 0x5c, 0x6e, 0xf0, 0x9b, 0x6e, 0xb2, 0xff, 0xfc,
+    0xd3, 0xf9, 0xdb, 0xf1, 0xe6, 0xff, 0x30, 0x6b, 0x2f, 0xfb, 0x66, 0x79,
+    0x9f, 0xfe, 0x85, 0x95, 0xb8, 0x88, 0xd2, 0x54, 0xaf, 0x23, 0x49, 0xe1,
+    0x5b, 0x4e, 0x99, 0x00, 0x61, 0xf3, 0x7f, 0xed, 0xef, 0x2c, 0x21, 0x94,
+    0x49, 0x65, 0xd3, 0xc2, 0xca, 0xc3, 0xd5, 0x09, 0xf5, 0xf6, 0x78, 0xf0,
+    0xb2, 0x88, 0xf0, 0xb8, 0x43, 0x79, 0x8c, 0x99, 0x65, 0xff, 0x3f, 0x9b,
+    0x9c, 0x0b, 0x81, 0x65, 0x0c, 0xf5, 0x9c, 0x7a, 0xc2, 0xf6, 0xb7, 0x47,
+    0x2d, 0xb5, 0x11, 0x8a, 0x4f, 0xf6, 0x83, 0x01, 0x40, 0xbc, 0x46, 0xcd,
+    0x3c, 0x26, 0xe5, 0x0b, 0x81, 0xc7, 0x8f, 0x93, 0xc5, 0x86, 0xc2, 0xaf,
+    0xb8, 0x65, 0xf4, 0x5e, 0xd1, 0xb5, 0xcd, 0x0b, 0x2d, 0x4a, 0xbf, 0x3c,
+    0x68, 0x9e, 0x95, 0xec, 0xf1, 0x85, 0x82, 0x13, 0x25, 0x1d, 0x9f, 0x25,
+    0x3e, 0xfe, 0x71, 0x8c, 0x2e, 0x7b, 0x71, 0xc2, 0x89, 0x0b, 0xfd, 0xd7,
+    0x7b, 0xc4, 0xc6, 0x2c, 0xbe, 0xed, 0xdf, 0xb5, 0x45, 0x50, 0xbf, 0xda,
+    0x8d, 0xfd, 0x4b, 0x3e, 0xb2, 0xb4, 0x7c, 0xc1, 0x30, 0xbf, 0xc6, 0xc7,
+    0xf9, 0xbf, 0x06, 0xb2, 0xff, 0xcf, 0x21, 0x79, 0xae, 0xdd, 0xfb, 0x54,
+    0x4d, 0x6b, 0xfe, 0xf4, 0x1f, 0x9c, 0x72, 0xed, 0x65, 0xf4, 0x6a, 0x3e,
+    0xb2, 0xe7, 0xfa, 0xca, 0x19, 0xb7, 0x39, 0x0d, 0xff, 0x3f, 0x5c, 0x26,
+    0x81, 0x0e, 0xb2, 0xff, 0x13, 0xff, 0x93, 0x79, 0x96, 0x58, 0x5c, 0x95,
+    0x12, 0xe4, 0x20, 0x8d, 0x22, 0x39, 0xb7, 0x93, 0x9d, 0xc0, 0x04, 0x22,
+    0x1c, 0xdf, 0xff, 0x6e, 0x30, 0xf0, 0xfb, 0x3f, 0x9b, 0x8d, 0xbf, 0x8b,
+    0x2f, 0xda, 0xed, 0xdf, 0xb5, 0x45, 0x58, 0xbd, 0xa8, 0x3a, 0xcb, 0xfe,
+    0x89, 0x46, 0xa7, 0x8d, 0x4e, 0xb2, 0xff, 0xe8, 0x21, 0xc6, 0xf9, 0x9b,
+    0x79, 0x01, 0x65, 0x85, 0xc2, 0x65, 0x98, 0xb3, 0xa3, 0x62, 0x1c, 0xf9,
+    0xd5, 0xf1, 0x60, 0x45, 0x6b, 0x2f, 0xee, 0xbf, 0x1e, 0x7d, 0xc5, 0x97,
+    0xe7, 0xf6, 0x6b, 0x16, 0x54, 0x1e, 0xbb, 0x98, 0xdf, 0xda, 0x0c, 0xdc,
+    0x8f, 0xac, 0xa8, 0x46, 0x5f, 0x9f, 0x02, 0x41, 0x7f, 0xf0, 0x30, 0x85,
+    0xc8, 0x1c, 0x9d, 0xc9, 0x65, 0x0b, 0x3f, 0x58, 0x2f, 0xbf, 0x86, 0xc1,
+    0xfe, 0x71, 0x65, 0xfc, 0xc7, 0x6f, 0xfa, 0x16, 0x5f, 0x44, 0xd1, 0xd2,
+    0xca, 0xf1, 0xe7, 0xf0, 0xb2, 0xfd, 0xae, 0xdd, 0xfb, 0x54, 0x48, 0x8b,
+    0xef, 0xe9, 0xba, 0x59, 0x7f, 0xec, 0xdd, 0x69, 0xfa, 0xcd, 0x69, 0xd6,
+    0x5d, 0x21, 0x78, 0x89, 0xb6, 0x36, 0xde, 0x47, 0x7f, 0x4f, 0x1a, 0xf3,
+    0xb2, 0xcb, 0x0b, 0xda, 0xd3, 0xa4, 0xc7, 0xc7, 0x85, 0xef, 0x0f, 0xaf,
+    0xda, 0xed, 0xdf, 0xb5, 0x45, 0xa4, 0xbf, 0xf3, 0xc8, 0x5e, 0x6b, 0xb7,
+    0x7e, 0xd5, 0x13, 0xea, 0xc2, 0xf1, 0x10, 0x87, 0x36, 0xbf, 0xfc, 0x2c,
+    0xef, 0x21, 0x79, 0xae, 0xdd, 0xfb, 0x54, 0x50, 0x8b, 0xff, 0xb0, 0xc1,
+    0x7f, 0x35, 0xf8, 0xdf, 0x85, 0x97, 0xef, 0x87, 0xb7, 0xe2, 0xcb, 0xa3,
+    0x4b, 0x2f, 0xfe, 0x83, 0x87, 0x5d, 0xbb, 0x0e, 0x26, 0x59, 0x66, 0x9c,
+    0xf6, 0xe6, 0x16, 0xa3, 0xa2, 0xb7, 0xd0, 0x84, 0xbf, 0x6b, 0xb7, 0x7e,
+    0xd5, 0x14, 0x7a, 0xe1, 0xe2, 0xcb, 0xe6, 0xc0, 0x71, 0x65, 0xcf, 0xda,
+    0xcb, 0x60, 0xcd, 0xc6, 0xe9, 0x0d, 0xff, 0x44, 0xa3, 0x53, 0xc6, 0xa7,
+    0x59, 0x7f, 0xff, 0xff, 0x84, 0x6d, 0x4d, 0x1e, 0xd6, 0x79, 0xc4, 0xe6,
+    0x1a, 0xe4, 0x08, 0x28, 0x9b, 0xd0, 0xb2, 0xfc, 0xfc, 0x6f, 0xc2, 0xcb,
+    0xfe, 0x89, 0xa0, 0xa2, 0x6f, 0x42, 0xca, 0x84, 0x76, 0x9b, 0x08, 0xf2,
+    0x26, 0xbe, 0x3c, 0xf8, 0x62, 0xcb, 0xff, 0xf0, 0xfd, 0x02, 0x0b, 0xf9,
+    0x38, 0x39, 0xc8, 0x02, 0x4a, 0x83, 0xfc, 0xc2, 0x4b, 0xcf, 0x21, 0x70,
+    0xab, 0x33, 0x0a, 0x26, 0x36, 0xd2, 0x71, 0x14, 0xfe, 0x32, 0x7d, 0xb8,
+    0x58, 0x5f, 0xfd, 0x9e, 0x17, 0xf3, 0x5f, 0x8d, 0xf8, 0x59, 0x61, 0x73,
+    0xae, 0x45, 0x9e, 0x5e, 0x07, 0xe1, 0x0b, 0x50, 0xf8, 0x6b, 0x13, 0xd3,
+    0x3e, 0xa4, 0xe7, 0x92, 0xb1, 0x8d, 0xb4, 0x79, 0x9d, 0xce, 0x15, 0xf5,
+    0x1d, 0x63, 0x47, 0x21, 0x34, 0x78, 0xfe, 0x86, 0x90, 0x0a, 0xbf, 0x39,
+    0xcf, 0x7f, 0xfc, 0x67, 0x7b, 0x50, 0xa4, 0x02, 0xbd, 0x6d, 0x1b, 0x36,
+    0x7b, 0x6d, 0x65, 0xff, 0xff, 0xb7, 0x7e, 0x28, 0x19, 0xc5, 0x04, 0xc2,
+    0xab, 0xe2, 0xbd, 0x6d, 0x1b, 0x36, 0x7b, 0x6d, 0x65, 0x79, 0x1f, 0xc6,
+    0x37, 0x5f, 0xfd, 0xe8, 0x6d, 0x30, 0xaf, 0xbf, 0x41, 0x8b, 0x2f, 0xfd,
+    0xc1, 0x5b, 0x1b, 0xb3, 0x67, 0xb6, 0xc5, 0xc1, 0xf6, 0xf6, 0x49, 0x7f,
+    0xff, 0xff, 0xb7, 0x45, 0x6c, 0x6e, 0xcd, 0x9e, 0xdb, 0x17, 0x1e, 0x33,
+    0xbd, 0xa8, 0x52, 0x01, 0x5e, 0xb6, 0x8d, 0x9b, 0x3d, 0xb6, 0xb2, 0xfd,
+    0xae, 0xdd, 0xfb, 0x54, 0x44, 0x4b, 0xfd, 0xc0, 0xc4, 0xdf, 0x6d, 0xeb,
+    0x2c, 0x2f, 0x0f, 0xb2, 0x63, 0x6b, 0xfb, 0x35, 0xdb, 0xbf, 0x6a, 0x88,
+    0xad, 0x7f, 0xdb, 0x82, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0xae, 0x14, 0x2d,
+    0x10, 0xee, 0x77, 0x7d, 0xe7, 0xd3, 0x2c, 0xbf, 0x7c, 0x02, 0x14, 0x96,
+    0x5f, 0x81, 0x05, 0xd8, 0xb8, 0x3c, 0xa7, 0x21, 0xba, 0x6d, 0xc5, 0x97,
+    0xf1, 0x37, 0x7f, 0x89, 0x2c, 0xb0, 0xb9, 0xcf, 0x23, 0x43, 0x76, 0x6e,
+    0x91, 0x64, 0x08, 0x43, 0xdf, 0xe1, 0x4e, 0xd4, 0x51, 0xdb, 0xf4, 0xb2,
+    0xfb, 0x3c, 0xff, 0x59, 0x7f, 0xb1, 0xb4, 0x00, 0x07, 0x8b, 0x2c, 0x29,
+    0x23, 0xd4, 0xe1, 0x0d, 0xff, 0xff, 0xfe, 0xda, 0xb6, 0xb1, 0x4c, 0x73,
+    0xd8, 0x6e, 0x0c, 0xb2, 0x76, 0x97, 0x20, 0x71, 0xe2, 0x7d, 0xc5, 0x97,
+    0xf6, 0xa3, 0xee, 0x58, 0xb2, 0xff, 0xfd, 0xc6, 0xf3, 0xb4, 0x98, 0xbe,
+    0x1f, 0x6b, 0x16, 0x53, 0x1f, 0xf7, 0xca, 0xef, 0xe8, 0x07, 0x3e, 0x50,
+    0xb2, 0xff, 0x3b, 0x9a, 0x63, 0xeb, 0x8b, 0x2f, 0xff, 0xde, 0xc2, 0xc3,
+    0x7c, 0xf2, 0xf1, 0x8e, 0x21, 0xd6, 0x5f, 0x76, 0xef, 0xda, 0xa2, 0x9e,
+    0x5f, 0xff, 0x9b, 0x5e, 0x78, 0xde, 0x59, 0xcc, 0x26, 0x3a, 0xcb, 0xff,
+    0x14, 0x6f, 0x6f, 0xca, 0x30, 0x96, 0x54, 0x93, 0x17, 0xd2, 0xbf, 0x8c,
+    0x3e, 0xa7, 0x7f, 0x86, 0x0d, 0x91, 0xb9, 0x12, 0x59, 0x7f, 0x8e, 0xc3,
+    0x0b, 0xea, 0x4b, 0x2e, 0x3b, 0x2c, 0xa8, 0x3c, 0x9e, 0xcc, 0xef, 0xff,
+    0xe8, 0xff, 0x02, 0x7e, 0xd8, 0x11, 0x9e, 0x60, 0xf6, 0xb2, 0xe6, 0xe2,
+    0xcb, 0xfa, 0x0f, 0xc8, 0x69, 0xd6, 0x54, 0x91, 0x3f, 0x8b, 0x9f, 0x16,
+    0xbf, 0xff, 0x9f, 0x4f, 0xee, 0xa5, 0x9f, 0xc2, 0x0f, 0xc2, 0x6a, 0xcb,
+    0xe9, 0x46, 0x4e, 0xb2, 0xff, 0xfd, 0xa0, 0xeb, 0x50, 0x58, 0x6b, 0x7b,
+    0xd8, 0x22, 0xcb, 0x0d, 0x65, 0xed, 0x37, 0x4b, 0x2b, 0xb4, 0xc0, 0xba,
+    0x5c, 0xd1, 0x11, 0xd5, 0xbe, 0x23, 0x79, 0x8b, 0xeb, 0x2f, 0xfe, 0x79,
+    0x0b, 0x71, 0xe4, 0xbd, 0x1d, 0xac, 0xbf, 0x86, 0x21, 0x09, 0xd7, 0x16,
+    0x5f, 0xf6, 0x9e, 0x71, 0x85, 0xf5, 0x25, 0x95, 0x07, 0xd6, 0xc6, 0x37,
+    0xfd, 0x84, 0x08, 0x3b, 0x6a, 0x4b, 0x2f, 0xf3, 0x71, 0x82, 0x2b, 0x1c,
+    0x2c, 0xa9, 0x1f, 0x6f, 0xcd, 0xec, 0xeb, 0x2f, 0xff, 0x8f, 0x8d, 0xf0,
+    0xfe, 0x24, 0xc3, 0xc1, 0xac, 0xa6, 0x44, 0x07, 0x88, 0x80, 0x21, 0x7e,
+    0xd4, 0xf1, 0xa9, 0xd6, 0x5f, 0x98, 0xbe, 0x21, 0xd6, 0x54, 0x1e, 0x90,
+    0x0a, 0xaf, 0xf6, 0xa2, 0x3f, 0xc6, 0xde, 0xb2, 0xfe, 0x89, 0xdc, 0x6f,
+    0xf5, 0x95, 0x24, 0x41, 0x1c, 0x87, 0x74, 0xd2, 0xfb, 0x61, 0x3c, 0x96,
+    0x5f, 0x9f, 0x3c, 0xc7, 0x59, 0x5c, 0x3c, 0x9d, 0xe4, 0x75, 0x08, 0xa0,
+    0xc7, 0xcb, 0xf9, 0xbe, 0xe6, 0xf9, 0x96, 0x5f, 0xf6, 0xf7, 0x3e, 0xc1,
+    0xf9, 0x8e, 0xb2, 0xff, 0x8a, 0x0f, 0x12, 0x2c, 0x3a, 0xcb, 0xff, 0xc7,
+    0x8d, 0x4f, 0x1d, 0x60, 0x45, 0x78, 0x35, 0x97, 0xdf, 0x94, 0x1a, 0xb2,
+    0xa4, 0x98, 0x96, 0x16, 0xb1, 0xeb, 0x9b, 0x08, 0x9f, 0x7e, 0xef, 0x18,
+    0xa6, 0x59, 0x7f, 0x8b, 0xbc, 0xdf, 0x9f, 0xe2, 0xcb, 0xf0, 0xc3, 0x1a,
+    0x9d, 0x65, 0xce, 0x6a, 0xca, 0x83, 0xf5, 0xc3, 0x5d, 0x14, 0xdf, 0x9e,
+    0x78, 0xd0, 0x56, 0x56, 0xd0, 0xcc, 0x58, 0x14, 0x42, 0x44, 0x54, 0x2b,
+    0x88, 0xc7, 0x24, 0x42, 0x32, 0xcc, 0x8d, 0x2c, 0xd3, 0xee, 0xe1, 0x03,
+    0xd4, 0x30, 0x5a, 0x33, 0x19, 0x93, 0x4e, 0x37, 0xe8, 0x58, 0xbc, 0x61,
+    0xa5, 0x1d, 0x1f, 0x23, 0x33, 0xfa, 0x4e, 0xf8, 0x4e, 0xed, 0x96, 0xdf,
+    0xfe, 0x79, 0x0b, 0x19, 0x39, 0x9c, 0xe4, 0x01, 0x65, 0xff, 0xe0, 0x00,
+    0x3c, 0x16, 0x21, 0x39, 0xca, 0x16, 0x5f, 0xfc, 0x58, 0x07, 0x20, 0x0b,
+    0x3b, 0x1d, 0x65, 0x69, 0x12, 0x1f, 0x4c, 0xbf, 0x3f, 0xbc, 0xd3, 0x2c,
+    0xbf, 0xfb, 0x38, 0xc4, 0x02, 0xcf, 0xfb, 0x16, 0x5f, 0xf9, 0x88, 0x05,
+    0x9f, 0xf6, 0x0b, 0xf1, 0xf4, 0x88, 0x51, 0x42, 0xd5, 0x8f, 0x0e, 0x36,
+    0x06, 0x86, 0xe7, 0x21, 0x19, 0x6c, 0x59, 0x7e, 0x28, 0x08, 0xaf, 0x8b,
+    0x2f, 0xe3, 0x74, 0xe3, 0x72, 0x59, 0x43, 0x3e, 0x8c, 0x10, 0x72, 0xbb,
+    0xff, 0x98, 0x7a, 0x7e, 0x85, 0xeb, 0x51, 0x3a, 0xca, 0x16, 0x7e, 0xbe,
+    0x2d, 0xb4, 0x2c, 0xbf, 0xb9, 0x1d, 0x94, 0x0d, 0x65, 0x0c, 0xde, 0xb0,
+    0x85, 0xff, 0xf4, 0x6b, 0x24, 0xcf, 0xfc, 0x1b, 0x07, 0xb4, 0x97, 0x07,
+    0xa5, 0x95, 0xe3, 0xe6, 0x24, 0xeb, 0x76, 0xb2, 0xfd, 0x12, 0x00, 0x64,
+    0xb2, 0xfb, 0xb7, 0x7e, 0xd5, 0x15, 0x9a, 0xe8, 0x31, 0x65, 0x62, 0x20,
+    0x66, 0x12, 0xd1, 0x46, 0xf3, 0x0b, 0xef, 0xb1, 0xf8, 0xb2, 0xda, 0x59,
+    0x63, 0x56, 0x53, 0x1a, 0x3e, 0x08, 0xde, 0xe0, 0x7b, 0x59, 0x46, 0x9b,
+    0xee, 0x10, 0x58, 0x45, 0x97, 0xb5, 0x1b, 0xd6, 0x54, 0x1b, 0x0e, 0x09,
+    0x5f, 0xdb, 0xc8, 0xa3, 0x72, 0x65, 0x97, 0xe3, 0xc1, 0x4b, 0x8b, 0x2e,
+    0x89, 0x96, 0x54, 0x1f, 0x84, 0xe6, 0x5a, 0x27, 0xbe, 0xff, 0x04, 0xe2,
+    0xcb, 0xee, 0x72, 0x0c, 0x59, 0x67, 0x59, 0x58, 0x7a, 0xec, 0x49, 0xc2,
+    0x3b, 0xa7, 0x65, 0x97, 0xfb, 0x93, 0x31, 0x7b, 0x3a, 0x59, 0x50, 0x79,
+    0x78, 0x2f, 0x73, 0xfd, 0x65, 0xf0, 0x04, 0x29, 0x2c, 0xa1, 0x9b, 0x9f,
+    0x8b, 0x5f, 0xff, 0x41, 0xff, 0x98, 0x5f, 0xe7, 0xb0, 0x0e, 0xb2, 0xff,
+    0x1e, 0x3a, 0xe6, 0xa3, 0x7a, 0xcb, 0x9f, 0x8b, 0x2a, 0x0f, 0x30, 0x26,
+    0xd7, 0xfa, 0x4c, 0x1d, 0xcd, 0xa0, 0x07, 0x59, 0x7e, 0x28, 0xf3, 0x62,
+    0xca, 0xc3, 0xe1, 0x73, 0xcb, 0x32, 0xcb, 0xf6, 0x11, 0x3f, 0xd6, 0x70,
+    0xb0, 0xbc, 0x19, 0x0d, 0x65, 0x78, 0xf4, 0x48, 0xd2, 0xfc, 0x5f, 0xf4,
+    0x6f, 0x59, 0x79, 0xdc, 0xeb, 0x2f, 0xd9, 0x34, 0xe1, 0x02, 0xcb, 0xfb,
+    0xf1, 0xa0, 0x44, 0xcb, 0x2c, 0x2e, 0x17, 0xa7, 0x47, 0x08, 0x6c, 0x85,
+    0x17, 0x47, 0xed, 0x08, 0x39, 0x94, 0xb5, 0x09, 0x03, 0xc2, 0x1b, 0xcf,
+    0x0e, 0xb2, 0x02, 0x12, 0x84, 0xcf, 0x21, 0x05, 0xf8, 0x40, 0x84, 0x87,
+    0x79, 0x48, 0x83, 0x7b, 0xa5, 0x57, 0xf4, 0xb0, 0xe2, 0x46, 0xe2, 0xcb,
+    0xfd, 0xf7, 0xd4, 0xf0, 0xc3, 0x59, 0x7f, 0x7f, 0x83, 0x68, 0x25, 0x94,
+    0xc7, 0xbe, 0xe6, 0x77, 0xf4, 0x1e, 0x70, 0xea, 0x4b, 0x2f, 0xb5, 0x86,
+    0x7d, 0x65, 0x78, 0xfc, 0xbe, 0x41, 0xbc, 0xbe, 0xff, 0x4f, 0xec, 0xef,
+    0xd1, 0xa5, 0x97, 0xfd, 0x05, 0x2e, 0x1d, 0xc8, 0xd5, 0x95, 0x07, 0xdb,
+    0xf3, 0x5b, 0xa0, 0x6b, 0x2f, 0xf8, 0x27, 0xce, 0xf5, 0xd3, 0x98, 0xb2,
+    0xa4, 0x7e, 0x7c, 0x21, 0xf8, 0xb5, 0xfe, 0xd4, 0x1b, 0x84, 0xc6, 0xac,
+    0xbf, 0xff, 0x60, 0xfd, 0x1c, 0xd9, 0x8d, 0xa6, 0x3c, 0x1a, 0xb2, 0xff,
+    0xf4, 0x18, 0x21, 0xcb, 0x3a, 0xfc, 0x61, 0x8b, 0x2f, 0xdf, 0x62, 0xc3,
+    0xac, 0xbc, 0xe4, 0x2c, 0x6a, 0xcf, 0x72, 0x30, 0x2e, 0xa3, 0x11, 0xd1,
+    0x79, 0x19, 0x88, 0xad, 0xba, 0x99, 0x7f, 0xce, 0x60, 0xb1, 0xc1, 0xfa,
+    0x85, 0x95, 0x24, 0x61, 0x94, 0x21, 0xef, 0xfc, 0xf2, 0x17, 0x9a, 0xed,
+    0xdf, 0xb5, 0x44, 0x8a, 0xbf, 0xff, 0x7f, 0xd8, 0x42, 0xfe, 0xef, 0xd7,
+    0x0d, 0x35, 0xd6, 0x5f, 0xf9, 0xfe, 0x2e, 0x1b, 0x4d, 0xf0, 0xac, 0xa1,
+    0x68, 0xe6, 0x84, 0xe7, 0x59, 0xbf, 0xed, 0x69, 0x8c, 0xc9, 0x98, 0xeb,
+    0x2f, 0xbb, 0x8f, 0x42, 0xca, 0x63, 0xdc, 0x23, 0xab, 0xf6, 0xbb, 0x77,
+    0xed, 0x51, 0x64, 0xaa, 0x0f, 0x5b, 0x08, 0x2f, 0x98, 0xa5, 0xc5, 0x97,
+    0xe8, 0xe7, 0xda, 0x75, 0x95, 0x39, 0xe4, 0x9a, 0x43, 0x7f, 0x83, 0x3f,
+    0xa3, 0xfc, 0x65, 0x97, 0xf0, 0x46, 0xda, 0x7e, 0x2c, 0xb9, 0xbe, 0xb2,
+    0xfd, 0xfe, 0x09, 0xc1, 0x78, 0x89, 0xbd, 0x12, 0x70, 0xd3, 0xe5, 0xb4,
+    0x2d, 0x36, 0x1c, 0x8c, 0x12, 0xff, 0xfa, 0x0e, 0xe3, 0x17, 0xf8, 0xea,
+    0x53, 0xe1, 0x8b, 0x2f, 0xb0, 0xce, 0x79, 0x65, 0xf4, 0x1d, 0x8c, 0x59,
+    0x7f, 0x31, 0xe3, 0xc2, 0x0d, 0x65, 0x4c, 0x7a, 0x1b, 0xa4, 0x57, 0xf7,
+    0x9b, 0x51, 0x2e, 0x2c, 0xbf, 0x8f, 0xf6, 0xf3, 0x9d, 0x65, 0xff, 0xe6,
+    0xff, 0xb3, 0xf8, 0x51, 0xf8, 0x1a, 0xca, 0x83, 0xf4, 0x72, 0xdb, 0xfc,
+    0xdf, 0x0e, 0x9f, 0x82, 0xe7, 0x4d, 0x6b, 0x1c, 0xfb, 0x26, 0xf4, 0x28,
+    0x69, 0x95, 0x0e, 0x3c, 0x75, 0xd7, 0xff, 0xfb, 0xef, 0xd0, 0x05, 0x8c,
+    0xa3, 0xa9, 0x7d, 0x88, 0x1c, 0x59, 0x7f, 0x66, 0xbb, 0x77, 0xed, 0x51,
+    0x6c, 0x2f, 0xff, 0xde, 0xd8, 0x59, 0xaf, 0xf3, 0xd3, 0x6c, 0xd9, 0xed,
+    0xb5, 0x97, 0xef, 0x3e, 0x98, 0xeb, 0x28, 0x52, 0x88, 0x8e, 0xd8, 0x6f,
+    0xd9, 0xbf, 0x4f, 0xc5, 0x97, 0xb4, 0x1f, 0x2c, 0xbb, 0xe2, 0xe0, 0xfb,
+    0x86, 0x51, 0xa2, 0x9a, 0x16, 0x9b, 0x6b, 0x46, 0x63, 0x7b, 0x39, 0x8b,
+    0x2f, 0xbb, 0x77, 0xed, 0x51, 0x6d, 0xae, 0x7d, 0x2c, 0xb4, 0x96, 0x5b,
+    0x93, 0x9a, 0x70, 0x8b, 0x56, 0x8f, 0xff, 0xea, 0xf7, 0xef, 0x7d, 0x80,
+    0x15, 0x97, 0xff, 0xa2, 0x7f, 0xb0, 0xf0, 0xa4, 0xde, 0x0a, 0xca, 0x63,
+    0xf1, 0xf1, 0x45, 0xff, 0x44, 0xa3, 0x53, 0xc6, 0xa7, 0x59, 0x7d, 0x13,
+    0x71, 0x96, 0x54, 0x93, 0xaa, 0xc8, 0x4d, 0x4d, 0x09, 0x32, 0x21, 0xdd,
+    0x3a, 0xbf, 0xf0, 0xf4, 0xc1, 0x9c, 0x5f, 0x35, 0xf5, 0x94, 0x2d, 0x13,
+    0x58, 0xaf, 0x7b, 0xd9, 0x3a, 0xcb, 0xf9, 0xc7, 0x98, 0x46, 0xac, 0xbe,
+    0xc2, 0x00, 0xb9, 0x8f, 0x24, 0xe3, 0xb7, 0x0a, 0x09, 0x65, 0xe1, 0x47,
+    0x86, 0xb2, 0xf4, 0xfe, 0x65, 0x97, 0xfe, 0x14, 0x0a, 0x36, 0x97, 0xfd,
+    0x85, 0x00, 0x59, 0x78, 0x54, 0x15, 0x62, 0xa2, 0xcb, 0xf7, 0xe3, 0xcf,
+    0x32, 0xcb, 0xf1, 0x48, 0x61, 0x3a, 0xcb, 0xf8, 0xc1, 0x36, 0xdc, 0x80,
+    0xb2, 0xa0, 0xf6, 0xb0, 0xa2, 0xfe, 0x61, 0x26, 0xe0, 0x7a, 0x59, 0x7e,
+    0x1f, 0x7e, 0x0e, 0x96, 0x57, 0x8f, 0x6d, 0xcc, 0x6f, 0xfb, 0x35, 0xa8,
+    0x93, 0xf4, 0x62, 0xcb, 0xee, 0xdd, 0xfb, 0x54, 0x5e, 0x0b, 0xf7, 0xfa,
+    0xed, 0xb4, 0xb2, 0xff, 0xcc, 0x0e, 0x6c, 0xe0, 0x1f, 0x26, 0x59, 0x7f,
+    0xe7, 0xfc, 0x6f, 0xd6, 0xb3, 0xae, 0x2c, 0xbf, 0xf9, 0xf4, 0x27, 0xdb,
+    0xc5, 0x9f, 0xc5, 0x95, 0xa4, 0xc7, 0xce, 0x61, 0xe2, 0xa2, 0x41, 0xde,
+    0x83, 0x7d, 0xf1, 0x55, 0x93, 0x2c, 0xba, 0x21, 0x65, 0x68, 0xdf, 0x7c,
+    0xa6, 0xfe, 0x89, 0xca, 0x18, 0x6b, 0x2e, 0x7e, 0x2c, 0xbd, 0xb7, 0x9e,
+    0x59, 0x40, 0x36, 0xbf, 0x16, 0xbf, 0x1e, 0x0a, 0x4e, 0xb2, 0xfe, 0x82,
+    0xfe, 0xf7, 0xed, 0x65, 0xfd, 0x28, 0xdf, 0x1a, 0xe9, 0x65, 0xff, 0xfc,
+    0xf3, 0xcd, 0x28, 0xd4, 0xff, 0x96, 0x6e, 0x39, 0x01, 0x65, 0x49, 0x17,
+    0xf8, 0x5e, 0xe6, 0x17, 0xde, 0x2c, 0x99, 0x65, 0xfd, 0xf7, 0xf6, 0xc1,
+    0xc2, 0xcb, 0xfe, 0x7f, 0xf2, 0x18, 0x78, 0x75, 0x95, 0x07, 0xcc, 0x45,
+    0xf7, 0xe9, 0x33, 0x79, 0xd6, 0x5f, 0x16, 0x31, 0xab, 0x2f, 0xf8, 0xfd,
+    0x4b, 0xf8, 0x5f, 0xe2, 0xca, 0xe9, 0x10, 0x27, 0x26, 0x10, 0x86, 0xec,
+    0x35, 0x65, 0xf9, 0xe5, 0xf6, 0x9d, 0x65, 0xff, 0xe6, 0xfc, 0x17, 0x6c,
+    0x73, 0xb7, 0x02, 0xb2, 0xa1, 0x17, 0x58, 0x64, 0xc2, 0xee, 0x51, 0x76,
+    0x1d, 0x65, 0xf9, 0xbc, 0x36, 0xe2, 0xcb, 0x34, 0xe6, 0xf6, 0x42, 0xd7,
+    0xec, 0x20, 0x6e, 0xc2, 0xcb, 0x9f, 0x8b, 0x2f, 0x05, 0xf8, 0xb2, 0xbe,
+    0x6c, 0x84, 0x16, 0xbf, 0x4d, 0xa6, 0x9c, 0xeb, 0x2a, 0x0f, 0x33, 0x08,
+    0xae, 0x98, 0x6b, 0x2f, 0xff, 0xff, 0x88, 0x2f, 0xcc, 0x2e, 0x73, 0x3c,
+    0xdc, 0x0c, 0xfc, 0xf6, 0x75, 0xf8, 0x59, 0x7e, 0x6d, 0x3f, 0x46, 0x2c,
+    0xbf, 0xf4, 0x77, 0xb3, 0x08, 0x32, 0xce, 0x2c, 0xa9, 0x23, 0x9a, 0x67,
+    0xd3, 0x94, 0xdf, 0xef, 0x31, 0x86, 0xe9, 0xcc, 0x59, 0x7e, 0xdf, 0x03,
+    0x3f, 0x16, 0x5f, 0xd9, 0xc0, 0xfe, 0x09, 0x65, 0xff, 0xff, 0x9d, 0xbe,
+    0xe7, 0x72, 0x07, 0x7e, 0x6d, 0x48, 0x49, 0x61, 0x2c, 0xbf, 0xb0, 0x7e,
+    0x8e, 0x6e, 0x2c, 0xbf, 0xa3, 0xae, 0xa4, 0xfd, 0x2c, 0xa1, 0xaa, 0x86,
+    0xc8, 0x7f, 0x76, 0x62, 0xc6, 0xd3, 0x15, 0x78, 0xb0, 0x9a, 0xc2, 0x61,
+    0x7f, 0x9c, 0x81, 0xfd, 0xbc, 0xf2, 0xcb, 0xfe, 0xf3, 0xc8, 0xed, 0x1a,
+    0x92, 0xcb, 0x66, 0xe1, 0xf6, 0xf8, 0xd6, 0xe3, 0xf1, 0x65, 0xf4, 0x14,
+    0xb7, 0x16, 0x5f, 0xfc, 0x07, 0x20, 0x16, 0x6f, 0xf6, 0x0d, 0x65, 0xff,
+    0xce, 0x0c, 0x1e, 0x79, 0xb5, 0xe7, 0x59, 0x5d, 0x22, 0x1b, 0x88, 0x97,
+    0xff, 0x33, 0x83, 0xed, 0xcf, 0x41, 0x7d, 0x65, 0xf6, 0x7c, 0xce, 0xd6,
+    0x5d, 0x00, 0x59, 0x52, 0x4e, 0x2f, 0x0a, 0x8d, 0x17, 0x68, 0x55, 0x78,
+    0x93, 0x88, 0x5f, 0x24, 0xbf, 0xcf, 0xe7, 0x10, 0xf9, 0xc5, 0x96, 0xed,
+    0x65, 0xdd, 0xc9, 0x65, 0x76, 0x6a, 0xbe, 0x25, 0x5b, 0x5b, 0x3a, 0xb0,
+    0x52, 0x34, 0x28, 0x21, 0x15, 0x07, 0x45, 0x5a, 0x64, 0x16, 0xcf, 0x08,
+    0x29, 0x3d, 0x8c, 0x87, 0x23, 0x59, 0x36, 0x11, 0x5d, 0x90, 0xf4, 0xc2,
+    0xc4, 0x33, 0x43, 0x97, 0x45, 0xc7, 0x84, 0x47, 0xa3, 0x5b, 0x77, 0x60,
+    0x13, 0x94, 0x29, 0xf9, 0x2a, 0x9b, 0xf2, 0x9b, 0xf7, 0xb4, 0xed, 0xae,
+    0xde, 0xfc, 0x0d, 0x65, 0xf0, 0x1f, 0x5c, 0x59, 0x77, 0x42, 0xe0, 0xdf,
+    0x60, 0xe5, 0xfe, 0x00, 0xb9, 0xa5, 0x05, 0xf5, 0x94, 0x2d, 0x52, 0x24,
+    0x47, 0xc1, 0xa2, 0xeb, 0xe2, 0x18, 0x9d, 0x2c, 0xbb, 0x3a, 0x59, 0x7c,
+    0xfc, 0x0c, 0xeb, 0x29, 0x8d, 0xd6, 0x85, 0xef, 0xda, 0xed, 0xdf, 0xb5,
+    0x45, 0xe8, 0xbf, 0x67, 0xca, 0x27, 0x59, 0x7f, 0xe7, 0x6f, 0x87, 0x4f,
+    0xbf, 0x06, 0xb2, 0xf0, 0xc3, 0xc5, 0x97, 0xe8, 0x3b, 0xfa, 0x16, 0x5e,
+    0x3b, 0x7d, 0x65, 0xff, 0x3f, 0xe5, 0x06, 0xfd, 0xa7, 0x59, 0x5a, 0x3f,
+    0xc3, 0x93, 0x10, 0xe5, 0xfb, 0x0f, 0xe7, 0x1a, 0xca, 0x85, 0x41, 0x03,
+    0x5e, 0xc2, 0x0d, 0x1b, 0x78, 0x9d, 0xcf, 0xc4, 0x84, 0xce, 0xe9, 0x75,
+    0xff, 0xd8, 0x3f, 0x61, 0xce, 0xf2, 0xc2, 0x59, 0x78, 0x30, 0x05, 0x97,
+    0xdb, 0xf0, 0x85, 0x8c, 0xf7, 0xb4, 0x85, 0x7f, 0x85, 0xff, 0x26, 0x93,
+    0x8d, 0x65, 0x31, 0xf9, 0x78, 0xf2, 0x85, 0xa6, 0xd5, 0x91, 0xa4, 0xd6,
+    0xd3, 0x77, 0xf8, 0xe2, 0xad, 0x96, 0x23, 0x2b, 0x9e, 0x16, 0x32, 0x8c,
+    0x83, 0x29, 0xf4, 0x9d, 0xc6, 0x5a, 0xd3, 0xdf, 0xd3, 0x4e, 0x94, 0xea,
+    0x30, 0xd3, 0xca, 0x43, 0xf4, 0xa4, 0x77, 0x29, 0x04, 0x7a, 0x25, 0x29,
+    0xbf, 0x8d, 0xa1, 0xac, 0x4a, 0xcc, 0x97, 0x57, 0x78, 0xbf, 0xc5, 0x97,
+    0x1c, 0xeb, 0x2d, 0xe5, 0x95, 0xb5, 0x1a, 0x80, 0x8b, 0xdf, 0xfc, 0x18,
+    0x98, 0xb3, 0x7b, 0x9c, 0xec, 0xb2, 0xfb, 0x3c, 0xff, 0x59, 0x7f, 0xb1,
+    0xb4, 0x00, 0x07, 0x8b, 0x2c, 0x29, 0x35, 0x13, 0x24, 0x8b, 0xc2, 0x1b,
+    0xff, 0xdf, 0xe0, 0x63, 0x99, 0xf6, 0x3b, 0xc9, 0x65, 0xe8, 0xea, 0x75,
+    0x94, 0x47, 0xcf, 0xf4, 0x9b, 0xe6, 0xdb, 0x83, 0xac, 0xbf, 0xef, 0xf3,
+    0x3a, 0x97, 0x82, 0x6a, 0xcb, 0xdc, 0x89, 0x96, 0x53, 0x22, 0x78, 0xe4,
+    0x24, 0x49, 0xc3, 0xcb, 0xc4, 0xfe, 0x59, 0x7b, 0x7c, 0x49, 0x65, 0xef,
+    0x67, 0x16, 0x5f, 0xf1, 0x31, 0xbf, 0xeb, 0xb6, 0xf2, 0xcb, 0xdc, 0x89,
+    0xd6, 0x54, 0x22, 0x48, 0x63, 0xd8, 0x39, 0xd1, 0xdd, 0xfe, 0xff, 0x99,
+    0xc0, 0x08, 0x59, 0x7f, 0x67, 0x5d, 0x48, 0x33, 0xac, 0xbf, 0x9f, 0x52,
+    0x20, 0xba, 0xcb, 0x98, 0xeb, 0x2b, 0x11, 0x4b, 0xa3, 0x20, 0x98, 0xee,
+    0x96, 0x5f, 0x1c, 0x24, 0x35, 0x97, 0xb7, 0xbf, 0x4b, 0x2f, 0x1b, 0x06,
+    0x2c, 0xbc, 0xef, 0xda, 0xa2, 0x23, 0x5f, 0x1b, 0xdb, 0xe9, 0x65, 0x1a,
+    0x7d, 0x7d, 0x8f, 0x31, 0x4d, 0xf8, 0x51, 0xfe, 0x38, 0x16, 0x5f, 0x99,
+    0xcf, 0x9a, 0x59, 0x7f, 0xc1, 0x7e, 0x8b, 0x27, 0x12, 0x4b, 0x2f, 0x76,
+    0x21, 0xd6, 0x5f, 0xff, 0xf4, 0x4d, 0xf8, 0xe6, 0xa3, 0xed, 0xdb, 0x0f,
+    0x61, 0xa4, 0xeb, 0x2a, 0x11, 0x10, 0x43, 0xf7, 0xff, 0x37, 0x3d, 0x86,
+    0x9a, 0xfb, 0x07, 0xd2, 0xca, 0x9d, 0x52, 0xdb, 0x11, 0x6a, 0x11, 0x47,
+    0x30, 0xf1, 0x67, 0x09, 0xbf, 0x0c, 0x3d, 0xe4, 0x37, 0xf3, 0xf5, 0xec,
+    0x63, 0x16, 0x5d, 0x2f, 0x2c, 0xb0, 0xf4, 0x78, 0xae, 0x5d, 0x7f, 0xf7,
+    0x39, 0x87, 0x2c, 0xdf, 0xb2, 0x36, 0xa5, 0x96, 0xf3, 0x1f, 0x98, 0x49,
+    0xef, 0xf4, 0xfa, 0xcf, 0xfd, 0xbe, 0xb2, 0x96, 0x5f, 0xfd, 0xec, 0xf9,
+    0x44, 0xdb, 0x0d, 0x27, 0x59, 0x70, 0x62, 0x63, 0xd1, 0xf8, 0x5d, 0x42,
+    0x2c, 0xf9, 0x08, 0x5b, 0xc5, 0x1d, 0x2c, 0xa9, 0x1e, 0x18, 0xc9, 0xee,
+    0x7f, 0x2c, 0xbf, 0xda, 0xce, 0x63, 0x94, 0xeb, 0x2f, 0x69, 0xba, 0x59,
+    0x43, 0x3e, 0x5c, 0x16, 0xf9, 0x95, 0xfe, 0x08, 0xc4, 0xf7, 0x9e, 0x4b,
+    0x2e, 0x19, 0xd6, 0x5f, 0x9e, 0x71, 0x18, 0x6b, 0x2f, 0xfe, 0xc3, 0x03,
+    0x13, 0xfc, 0x71, 0xfe, 0x2c, 0xa9, 0x22, 0xef, 0x0d, 0x5c, 0x5c, 0x8a,
+    0x6f, 0xff, 0x49, 0x8d, 0x35, 0xf9, 0x0d, 0x3b, 0xfd, 0x65, 0xff, 0xfc,
+    0xed, 0xf8, 0xf1, 0x67, 0xfc, 0xde, 0xc6, 0x31, 0x65, 0x32, 0x28, 0xfc,
+    0x97, 0x7f, 0xff, 0xfb, 0xff, 0x63, 0xe9, 0xb3, 0xa2, 0x0f, 0xe3, 0xdb,
+    0x37, 0xb7, 0xe6, 0x85, 0x97, 0xfb, 0x18, 0x9b, 0x5a, 0xc5, 0x97, 0xfd,
+    0x8e, 0x40, 0xd0, 0x60, 0x0b, 0x2a, 0x13, 0x05, 0xc2, 0x2e, 0x9f, 0x34,
+    0x61, 0x7f, 0xfe, 0x3e, 0xe3, 0x3b, 0xcd, 0xff, 0x64, 0xbc, 0xdb, 0xd6,
+    0x5f, 0xdd, 0x4b, 0x41, 0x80, 0x2c, 0xbf, 0x7e, 0x35, 0x00, 0x59, 0x70,
+    0x87, 0x59, 0x7e, 0xcd, 0x4a, 0x0e, 0xb2, 0xa7, 0x37, 0xe7, 0x18, 0xa8,
+    0x4c, 0x47, 0x16, 0x98, 0xbd, 0xd9, 0xae, 0x9c, 0xe9, 0x2e, 0x30, 0xc4,
+    0x97, 0xfe, 0x17, 0xdf, 0x9a, 0x6f, 0x44, 0xe2, 0xc0, 0x6c, 0x4c, 0x18,
+    0xbf, 0xdc, 0x2c, 0xfe, 0xde, 0x7d, 0x65, 0xf6, 0xf8, 0xfc, 0x2c, 0xbd,
+    0xbd, 0xf4, 0xb2, 0xfb, 0x3c, 0x58, 0xb2, 0xb0, 0xdf, 0x70, 0x7a, 0xa4,
+    0x98, 0x9e, 0x2e, 0xb1, 0xaf, 0xd8, 0x6d, 0xba, 0xb2, 0xfc, 0xe7, 0xce,
+    0xbe, 0xb2, 0xf7, 0x1f, 0x71, 0x65, 0xfe, 0x72, 0xef, 0x61, 0x9f, 0xe2,
+    0xca, 0x9d, 0x12, 0x58, 0x28, 0xc5, 0x01, 0x1f, 0xbd, 0x3c, 0x6e, 0x2c,
+    0xbf, 0xfe, 0xf3, 0x1b, 0xc6, 0xc2, 0x00, 0xf4, 0xfd, 0xac, 0xbf, 0xe0,
+    0x34, 0xdc, 0x6f, 0x31, 0xd6, 0x5f, 0xe8, 0xf6, 0x4d, 0x27, 0x9d, 0x65,
+    0xff, 0xc5, 0x9d, 0x4b, 0x83, 0x6d, 0xf0, 0x35, 0x95, 0x3a, 0x64, 0x63,
+    0x20, 0x02, 0x80, 0x4e, 0x77, 0x4d, 0x2f, 0xcd, 0xf8, 0xff, 0x16, 0x5f,
+    0xe7, 0xeb, 0x8e, 0x41, 0xc5, 0x97, 0xcd, 0xa7, 0x02, 0xca, 0x91, 0xfd,
+    0x00, 0x9f, 0x86, 0x57, 0xf8, 0x11, 0xbd, 0xfd, 0xe6, 0x59, 0x42, 0xcf,
+    0x8f, 0xe5, 0xf7, 0xfd, 0xc0, 0xeb, 0x4d, 0x0d, 0xa5, 0x95, 0x89, 0xc4,
+    0x3c, 0x65, 0x9f, 0x24, 0xb6, 0xe2, 0xcb, 0xe2, 0xea, 0x68, 0x59, 0x7f,
+    0xd1, 0x9d, 0x43, 0xc9, 0xe4, 0xb2, 0xfe, 0xc0, 0x6c, 0x2c, 0x02, 0xcb,
+    0x8f, 0xda, 0xca, 0x19, 0xe3, 0x39, 0x75, 0xff, 0xb0, 0xcd, 0x8e, 0x36,
+    0x99, 0xa1, 0x65, 0xfa, 0x0b, 0xf0, 0x05, 0x97, 0xbe, 0x07, 0x59, 0x5a,
+    0x3c, 0x23, 0x93, 0x5f, 0x16, 0x3e, 0xe2, 0xcb, 0xf4, 0x18, 0x27, 0xa1,
+    0x65, 0x6d, 0x69, 0xe2, 0xc0, 0xa0, 0xc8, 0xf1, 0xf7, 0x44, 0x2f, 0x08,
+    0x2e, 0x11, 0x08, 0x47, 0x7e, 0x2c, 0xf3, 0xfd, 0x65, 0xed, 0x9c, 0xed,
+    0x65, 0x6e, 0x1e, 0x37, 0x89, 0xaf, 0xf3, 0x38, 0x35, 0xa0, 0xf9, 0x65,
+    0xfd, 0x06, 0xe1, 0x31, 0xab, 0x2f, 0xec, 0xfe, 0xef, 0xf3, 0xcb, 0x2b,
+    0x11, 0x6b, 0xe2, 0x52, 0x33, 0xe1, 0x6d, 0xfd, 0x3c, 0xd1, 0xc0, 0xf4,
+    0xb2, 0xff, 0x08, 0x4e, 0x6e, 0xb5, 0x0b, 0x2a, 0x0f, 0x95, 0xcc, 0x6f,
+    0xff, 0xee, 0xc5, 0xe9, 0xc9, 0xbe, 0x2f, 0x51, 0xf2, 0x70, 0x2c, 0xbb,
+    0x68, 0x92, 0xcb, 0xcf, 0x84, 0xb2, 0xff, 0xef, 0x94, 0x01, 0xfe, 0x01,
+    0x0a, 0x4b, 0x2f, 0xc3, 0x69, 0x9a, 0x16, 0x5f, 0xb3, 0xfb, 0x79, 0xf5,
+    0x97, 0xde, 0x6d, 0x6c, 0x73, 0xd1, 0x22, 0x7a, 0xda, 0xdb, 0x85, 0xdd,
+    0xa1, 0x10, 0x51, 0x0b, 0xf8, 0x8c, 0xfe, 0x73, 0xb9, 0x42, 0xb4, 0x70,
+    0xe1, 0xc9, 0x53, 0x5d, 0xc6, 0x6f, 0xd4, 0x63, 0xad, 0x08, 0x79, 0xa1,
+    0xd3, 0xa8, 0xf8, 0xbd, 0x1a, 0x73, 0xc6, 0xfc, 0x08, 0x67, 0x14, 0xae,
+    0x7e, 0x47, 0xf5, 0xf8, 0xdd, 0x43, 0x0a, 0x0d, 0xe4, 0x06, 0x2f, 0x6d,
+    0x8e, 0x08, 0x35, 0xbb, 0x09, 0x5b, 0xc2, 0x7b, 0xcb, 0x2e, 0xdd, 0xf2,
+    0xcb, 0xf6, 0xbb, 0x77, 0xed, 0x51, 0x17, 0x2f, 0x68, 0x3e, 0x59, 0x7e,
+    0xf8, 0x04, 0x29, 0x24, 0xbf, 0x73, 0xfe, 0x80, 0x2c, 0xbf, 0x3c, 0xf1,
+    0xa0, 0xac, 0xb0, 0xb8, 0x4c, 0x12, 0x71, 0xec, 0x1a, 0xd1, 0xb3, 0x8e,
+    0x84, 0xa7, 0x6c, 0xa2, 0xfc, 0x41, 0x96, 0x71, 0x65, 0xe2, 0x21, 0xac,
+    0xba, 0x42, 0xf0, 0xf0, 0x88, 0x9e, 0x85, 0xab, 0xb2, 0x94, 0xad, 0x4e,
+    0xa1, 0x61, 0x7f, 0xf1, 0xde, 0x42, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0x99,
+    0x97, 0xff, 0x0c, 0x59, 0x05, 0xc4, 0x1f, 0x98, 0xd5, 0x97, 0xbc, 0xdc,
+    0x59, 0x7c, 0x29, 0xe4, 0x7d, 0x65, 0xfd, 0x1c, 0x28, 0xff, 0x16, 0x56,
+    0xd2, 0x3d, 0x23, 0x93, 0x56, 0xd0, 0x89, 0x6d, 0xa6, 0xdd, 0x7f, 0xf6,
+    0xd3, 0x36, 0x33, 0x5b, 0x30, 0x3a, 0x9d, 0x65, 0xf6, 0x07, 0x53, 0xac,
+    0xbb, 0x6f, 0x6b, 0x59, 0x71, 0x9f, 0x59, 0x42, 0x83, 0xda, 0xda, 0x44,
+    0x63, 0x1f, 0xbf, 0x85, 0x56, 0xd7, 0xb5, 0x8a, 0x79, 0x0b, 0x2d, 0x32,
+    0xcb, 0xa3, 0x8b, 0x2b, 0x69, 0x1f, 0x54, 0xe8, 0x5d, 0x09, 0x5f, 0xfd,
+    0xf9, 0x67, 0xbc, 0xf2, 0x66, 0x25, 0x97, 0x6d, 0xed, 0x6b, 0x2f, 0xfd,
+    0xe6, 0xff, 0x1f, 0xa9, 0xf0, 0xc5, 0x97, 0xfe, 0xdf, 0x1e, 0x68, 0x9a,
+    0x68, 0xed, 0x65, 0x0a, 0x51, 0xc8, 0x28, 0x42, 0xec, 0x7d, 0x90, 0x6e,
+    0x63, 0xac, 0xbf, 0x7c, 0x9b, 0xaf, 0xac, 0xae, 0xcd, 0xf0, 0x82, 0xd7,
+    0xfd, 0xb5, 0x80, 0xe2, 0x69, 0xa7, 0x85, 0x97, 0xc2, 0x8f, 0xb9, 0x2c,
+    0xbe, 0xda, 0x85, 0x5f, 0x21, 0x65, 0x82, 0xb2, 0x85, 0x51, 0xbe, 0x62,
+    0xdb, 0xb6, 0xf6, 0xb5, 0x97, 0xff, 0xff, 0xf0, 0xaf, 0xa8, 0x15, 0x36,
+    0x90, 0xfb, 0xdf, 0xa9, 0x4d, 0xbc, 0x22, 0xab, 0x69, 0x8a, 0xc5, 0x58,
+    0xaa, 0xd9, 0xb3, 0xdb, 0x6b, 0x2f, 0xfc, 0x51, 0x3e, 0x9f, 0xd0, 0x76,
+    0x59, 0x7d, 0x80, 0x80, 0x2c, 0xbf, 0xb9, 0xa8, 0xcf, 0xf1, 0x65, 0x82,
+    0xb2, 0xa0, 0xdf, 0x61, 0x6d, 0xfe, 0x71, 0xb9, 0xf5, 0x1c, 0x59, 0x7f,
+    0xed, 0xe1, 0x7e, 0xc6, 0xdb, 0xe0, 0x6b, 0x2f, 0xe8, 0x3b, 0xca, 0x3e,
+    0xb2, 0xff, 0xe8, 0x3b, 0xff, 0x3a, 0x01, 0xc4, 0xf2, 0xcb, 0xff, 0xdd,
+    0xe8, 0x33, 0xf5, 0xc6, 0xd7, 0x7e, 0xc5, 0x97, 0xcd, 0xbd, 0xc0, 0xb2,
+    0xa0, 0xfc, 0xbe, 0x9f, 0x43, 0x4d, 0xeb, 0x0c, 0x8d, 0x43, 0xf1, 0x61,
+    0x42, 0xe2, 0xf9, 0xa7, 0x09, 0x2c, 0xbf, 0x64, 0xf8, 0x09, 0x96, 0x56,
+    0xc3, 0xcb, 0xf9, 0x15, 0xf9, 0xb7, 0x4d, 0x6e, 0xd6, 0x5f, 0xf0, 0x65,
+    0xc7, 0x3b, 0x90, 0x16, 0x56, 0x8f, 0x91, 0xcb, 0x2f, 0xe8, 0xe6, 0xc6,
+    0x79, 0x96, 0x5f, 0xed, 0x98, 0x4f, 0xa0, 0x6d, 0xac, 0xb8, 0xa4, 0xb2,
+    0xf6, 0xa0, 0xd5, 0x97, 0xff, 0xcf, 0xec, 0xe8, 0x1e, 0x31, 0xfd, 0x37,
+    0x82, 0xb2, 0x99, 0x10, 0xd3, 0x0b, 0x1c, 0x76, 0xff, 0x0f, 0x4e, 0x07,
+    0xcd, 0x2c, 0xbf, 0xb3, 0x90, 0x21, 0x42, 0xca, 0x1a, 0x69, 0x79, 0x0b,
+    0xd6, 0x30, 0xf1, 0x95, 0xb1, 0x65, 0xce, 0x75, 0x95, 0xc3, 0x4d, 0xba,
+    0x21, 0x76, 0xef, 0xd6, 0x58, 0x56, 0xb2, 0xc0, 0x83, 0x5e, 0x11, 0xab,
+    0xc7, 0x7f, 0xac, 0xb0, 0xad, 0x65, 0x61, 0xb1, 0x21, 0xcb, 0xf6, 0xd8,
+    0xc9, 0xcc, 0x59, 0x50, 0x79, 0x5f, 0x1f, 0xbf, 0xff, 0xbb, 0x28, 0x3e,
+    0xc8, 0xd6, 0x9b, 0x7e, 0x9d, 0xc0, 0xb2, 0xfd, 0x27, 0xfb, 0x9a, 0xb2,
+    0xa1, 0x10, 0xd8, 0xbd, 0x7c, 0x58, 0x08, 0x59, 0x44, 0x78, 0x3b, 0xc8,
+    0x6f, 0xb0, 0x78, 0x35, 0x97, 0xf3, 0x18, 0xdc, 0xce, 0xd6, 0x53, 0x1f,
+    0x96, 0x88, 0xf8, 0x43, 0x7c, 0xdf, 0x89, 0x2c, 0xbc, 0x78, 0x92, 0xcb,
+    0xdc, 0x79, 0x96, 0x54, 0x1b, 0x9f, 0x8e, 0x5f, 0xc2, 0xe6, 0x14, 0xf9,
+    0xc9, 0x65, 0x6d, 0x6c, 0x96, 0x9d, 0xa4, 0x3f, 0x3c, 0x31, 0xc6, 0x7b,
+    0xda, 0xfb, 0x47, 0x33, 0x34, 0x26, 0xb5, 0x08, 0x83, 0x90, 0xfa, 0x37,
+    0xa7, 0x67, 0x02, 0x99, 0x42, 0x87, 0xf1, 0xad, 0x6f, 0x2e, 0x11, 0x6b,
+    0x74, 0x82, 0xfe, 0xd6, 0x9e, 0x42, 0x1d, 0x65, 0xe7, 0x2e, 0xd6, 0x5e,
+    0xf9, 0x42, 0xcb, 0xe2, 0x2c, 0xfa, 0xca, 0x14, 0x9b, 0xb8, 0x1b, 0xae,
+    0x1f, 0xd9, 0x8a, 0xf7, 0xcf, 0xe6, 0x99, 0x65, 0xf1, 0x4d, 0x03, 0x59,
+    0x77, 0x5f, 0x59, 0x7d, 0xe9, 0xa0, 0x6b, 0x2f, 0xe0, 0x6a, 0x04, 0x72,
+    0x59, 0x50, 0x9b, 0xce, 0x42, 0xab, 0xb2, 0x36, 0x22, 0x98, 0x89, 0xc6,
+    0x02, 0x47, 0x7b, 0xd1, 0xd2, 0xcb, 0xf4, 0x1c, 0xb2, 0x65, 0x97, 0xf3,
+    0x61, 0x0f, 0xd0, 0xb2, 0xc7, 0x59, 0x63, 0xac, 0xba, 0x09, 0x65, 0x4e,
+    0x69, 0x8c, 0x11, 0xa1, 0xa2, 0xb3, 0xb2, 0x7d, 0xc2, 0xbe, 0x1b, 0xd2,
+    0xcb, 0xa3, 0x8b, 0x2f, 0xed, 0x41, 0x07, 0x3c, 0xb2, 0xfb, 0x51, 0x84,
+    0xb2, 0xf9, 0xff, 0x20, 0x2c, 0xbf, 0xc1, 0x39, 0x64, 0xcd, 0x3a, 0xcb,
+    0x05, 0x65, 0xfe, 0x6e, 0xdf, 0x35, 0x9f, 0x59, 0x40, 0x3c, 0x3e, 0x08,
+    0xdf, 0xe7, 0xd3, 0x46, 0xe3, 0x1d, 0x65, 0x1a, 0x9a, 0x8f, 0x62, 0xc7,
+    0x2c, 0xf1, 0x07, 0x08, 0xbe, 0xef, 0xbc, 0x8a, 0xff, 0xb5, 0x19, 0x28,
+    0xf4, 0x01, 0x65, 0xff, 0xed, 0x9e, 0x76, 0xf8, 0x02, 0x44, 0xf2, 0x59,
+    0x7f, 0xc2, 0x1f, 0x38, 0xef, 0xd4, 0x96, 0x5d, 0xb5, 0x8a, 0x56, 0x5f,
+    0xf7, 0xa1, 0x86, 0xdc, 0x9d, 0xd6, 0x50, 0xa8, 0x7b, 0x0c, 0x41, 0x52,
+    0x5c, 0x08, 0xc8, 0x64, 0xf6, 0x82, 0xd1, 0xae, 0x69, 0xa4, 0xe6, 0xe0,
+    0x4a, 0x28, 0x49, 0x5f, 0xff, 0xff, 0xff, 0xfe, 0x15, 0x05, 0x38, 0x2a,
+    0x0a, 0x36, 0x96, 0xd2, 0xec, 0x57, 0x02, 0xac, 0x51, 0xa9, 0xf7, 0x70,
+    0x23, 0x15, 0x51, 0xb7, 0xd0, 0x9e, 0x14, 0x44, 0x0a, 0x37, 0x36, 0x9f,
+    0xf6, 0x6c, 0xf6, 0xda, 0xcb, 0xff, 0xf0, 0x3a, 0x97, 0x83, 0x1a, 0x17,
+    0xe6, 0xed, 0xf4, 0xb2, 0xf8, 0x32, 0xd9, 0xc5, 0x97, 0xfe, 0xf6, 0x16,
+    0x1b, 0x85, 0x83, 0x59, 0x7f, 0xf7, 0x46, 0x47, 0xc6, 0xdb, 0x9c, 0x83,
+    0xac, 0xbe, 0xe6, 0x75, 0xf5, 0x97, 0xd9, 0x34, 0x18, 0xb2, 0xfc, 0x3f,
+    0x41, 0x4e, 0xb2, 0xf9, 0x8b, 0xfc, 0x59, 0x7f, 0xff, 0xc7, 0x6d, 0x78,
+    0x3c, 0x94, 0x6f, 0xd4, 0x17, 0xfd, 0x92, 0x59, 0x52, 0x44, 0x4b, 0x10,
+    0xdf, 0xf9, 0xbe, 0xdd, 0xb0, 0xff, 0x9d, 0xac, 0xa9, 0xd5, 0x01, 0x48,
+    0x97, 0x0f, 0x34, 0x93, 0xe2, 0x32, 0x23, 0xfc, 0x2c, 0x77, 0x48, 0xaf,
+    0x0d, 0xb7, 0xac, 0xbf, 0xdd, 0x96, 0x7b, 0xd8, 0x05, 0x97, 0xce, 0x63,
+    0xee, 0x2c, 0xa7, 0x3d, 0x82, 0x33, 0xbf, 0x07, 0xbf, 0x31, 0x8b, 0x2f,
+    0xbf, 0xb7, 0x9e, 0x59, 0x7f, 0xff, 0x9c, 0xbb, 0x2c, 0x1f, 0x83, 0xb3,
+    0xd1, 0x2d, 0x44, 0xeb, 0x2b, 0x11, 0x10, 0x12, 0x5b, 0xf8, 0x42, 0x8f,
+    0x44, 0x96, 0x5f, 0xff, 0xc6, 0x96, 0x00, 0x3c, 0xd9, 0x26, 0xf4, 0x76,
+    0x4e, 0xb2, 0x8e, 0x88, 0xa7, 0x2d, 0xbf, 0xe6, 0xee, 0x69, 0x7a, 0x08,
+    0xd5, 0x97, 0xa0, 0xff, 0x59, 0x44, 0x7a, 0xe6, 0x1d, 0xdf, 0xec, 0x32,
+    0x3e, 0x4f, 0xc5, 0x97, 0x9b, 0xcc, 0xb2, 0xa0, 0xfb, 0xd8, 0x8b, 0xe6,
+    0x57, 0x41, 0x2c, 0xbe, 0xce, 0xc7, 0x8b, 0x2f, 0x88, 0x62, 0x74, 0xb2,
+    0xe0, 0xfd, 0x65, 0xe7, 0xd4, 0xb6, 0x1e, 0xeb, 0x91, 0x6d, 0x92, 0x50,
+    0xa1, 0x7f, 0x02, 0x23, 0x2b, 0xc9, 0x4b, 0x8c, 0xf5, 0xa7, 0x63, 0x90,
+    0x7a, 0x16, 0x4f, 0x0a, 0xc2, 0x87, 0x47, 0xcb, 0x42, 0xe5, 0x7f, 0x8d,
+    0x7d, 0xfd, 0xe7, 0x5f, 0x59, 0x76, 0xfd, 0xc5, 0x94, 0x69, 0xea, 0x39,
+    0xc5, 0xff, 0xfb, 0x5a, 0x6c, 0xde, 0x41, 0xe6, 0xce, 0x05, 0xf8, 0xb2,
+    0x96, 0x5f, 0xff, 0x71, 0xb6, 0xf3, 0xbf, 0x31, 0x10, 0x75, 0x3a, 0xca,
+    0xd1, 0xef, 0x7c, 0x2e, 0xfe, 0xfe, 0x1f, 0xac, 0x3a, 0xca, 0x84, 0xc1,
+    0xf2, 0x16, 0xec, 0x45, 0x7f, 0x8e, 0x77, 0x97, 0x1a, 0x4b, 0x2f, 0xf1,
+    0xbb, 0x23, 0xa0, 0x6a, 0x16, 0x56, 0x1f, 0x53, 0x99, 0xd3, 0x27, 0xcd,
+    0xe8, 0xca, 0x4a, 0x13, 0xb7, 0xff, 0xb7, 0xe0, 0xfd, 0x1b, 0xcf, 0x04,
+    0xe2, 0x2c, 0xb4, 0xcb, 0x2b, 0x0f, 0x7c, 0x29, 0xb7, 0xfd, 0x2e, 0xfc,
+    0xc6, 0x41, 0x0d, 0x65, 0xfc, 0x37, 0x97, 0x1a, 0x4b, 0x2b, 0x48, 0x88,
+    0x72, 0x10, 0x9d, 0x5f, 0x04, 0xbf, 0xc5, 0x97, 0xf7, 0x02, 0xc4, 0xdc,
+    0x59, 0x7a, 0x35, 0x0b, 0x2b, 0x61, 0xe3, 0xf8, 0xb2, 0xbb, 0x44, 0x6e,
+    0x9a, 0x6f, 0x4b, 0x6c, 0xc5, 0x97, 0x01, 0x96, 0x5f, 0x8f, 0x2f, 0x09,
+    0xc5, 0x96, 0xd6, 0xc3, 0xc0, 0x10, 0x5a, 0xfc, 0xe6, 0x16, 0x0d, 0x65,
+    0x42, 0x2c, 0xd9, 0x87, 0x45, 0x77, 0xfe, 0x28, 0xec, 0xd7, 0xcd, 0x30,
+    0x16, 0x5f, 0xdc, 0xc6, 0xd6, 0x9d, 0x65, 0xfb, 0x9b, 0x00, 0xff, 0x59,
+    0x53, 0xa2, 0x50, 0x07, 0xdf, 0x2c, 0xba, 0x34, 0xb2, 0xff, 0xe9, 0xf3,
+    0x8c, 0xfe, 0x16, 0x61, 0x86, 0x24, 0xb3, 0x00, 0xf8, 0x08, 0x5a, 0xff,
+    0x82, 0xfa, 0xdb, 0x0f, 0x9b, 0x4b, 0x2a, 0x11, 0xe6, 0x38, 0x48, 0xf8,
+    0x9a, 0xfe, 0xeb, 0x3c, 0x1e, 0x80, 0xb2, 0xde, 0x59, 0x7f, 0x1f, 0x9e,
+    0x82, 0xfa, 0xcb, 0xd3, 0xf8, 0x2b, 0x2f, 0xfd, 0xe7, 0xe7, 0xb3, 0x7e,
+    0x7f, 0x8b, 0x2a, 0x0f, 0x79, 0xc7, 0xa9, 0x91, 0x57, 0xe8, 0x45, 0xdf,
+    0x98, 0x3d, 0xb4, 0xeb, 0x2b, 0x13, 0x3c, 0xec, 0xc3, 0xf0, 0xbc, 0xdb,
+    0x27, 0xbf, 0xe2, 0xc8, 0x35, 0xfe, 0xe6, 0xac, 0xbf, 0xa4, 0x27, 0xf9,
+    0x1f, 0x59, 0x7f, 0x8f, 0x9d, 0x93, 0xe7, 0x6b, 0x2e, 0x0c, 0xcb, 0x2e,
+    0x97, 0x20, 0xf2, 0xc0, 0x67, 0x7c, 0x7e, 0x09, 0xc5, 0x97, 0xbb, 0x0f,
+    0x6b, 0x2a, 0x11, 0xd5, 0xd3, 0xd3, 0x16, 0x84, 0x92, 0xff, 0xbf, 0xf8,
+    0x3e, 0x61, 0x1a, 0xb2, 0xff, 0xfb, 0xfe, 0xcd, 0xdf, 0xe7, 0x8b, 0x3f,
+    0xe6, 0x59, 0x5d, 0x22, 0x24, 0x8e, 0x2f, 0xe2, 0x7f, 0xca, 0x0d, 0x59,
+    0x7f, 0xb0, 0x03, 0x0b, 0xea, 0x4b, 0x2a, 0x0f, 0x82, 0x72, 0xdb, 0xf9,
+    0xdc, 0x7b, 0xf0, 0x6b, 0x2f, 0x3b, 0xf6, 0xa8, 0xb3, 0xd7, 0xfa, 0x08,
+    0xdd, 0x06, 0x09, 0x65, 0xfc, 0x07, 0x29, 0x31, 0xd6, 0x54, 0x26, 0xb5,
+    0x3c, 0x20, 0xc6, 0x45, 0xd9, 0x73, 0x14, 0x80, 0xca, 0xff, 0x7b, 0xfc,
+    0x7e, 0x84, 0x3a, 0xcb, 0xfd, 0x12, 0x6f, 0xc7, 0xf8, 0xb2, 0xf8, 0x02,
+    0x7a, 0x16, 0x5e, 0x18, 0xdd, 0x65, 0x78, 0xfc, 0x48, 0xcb, 0xe4, 0x77,
+    0xf4, 0x84, 0xcf, 0x3f, 0x4b, 0x2a, 0x13, 0x04, 0x68, 0x53, 0xb9, 0x75,
+    0xff, 0x1a, 0xe5, 0x9b, 0xcb, 0x38, 0xb2, 0xfe, 0xde, 0x59, 0xcc, 0x25,
+    0x96, 0xdc, 0x59, 0x58, 0x78, 0x3c, 0x2d, 0xbc, 0xd2, 0x85, 0x96, 0x7d,
+    0x86, 0xf3, 0x84, 0x36, 0xd1, 0xa8, 0xde, 0xf4, 0x2d, 0xaf, 0xf3, 0x0f,
+    0x0e, 0x66, 0x79, 0x65, 0xa7, 0x59, 0x7f, 0xff, 0xd9, 0xfe, 0x67, 0x6e,
+    0x40, 0xd9, 0xa8, 0x20, 0xfe, 0x3c, 0xb2, 0xfd, 0xc1, 0xb4, 0x12, 0xca,
+    0x84, 0x69, 0x1c, 0xcc, 0x84, 0xbe, 0xcf, 0x7f, 0xf7, 0x3e, 0xd3, 0x18,
+    0xe3, 0x8e, 0xb8, 0xb2, 0x99, 0x38, 0x37, 0x8c, 0x04, 0x27, 0x77, 0x00,
+    0x0b, 0x2f, 0x18, 0x61, 0x89, 0x2f, 0xfa, 0x5c, 0x2c, 0xec, 0x79, 0xa4,
+    0x82, 0xcd, 0x05, 0xa4, 0xb2, 0x99, 0x12, 0x6e, 0x6f, 0xf4, 0xbb, 0xfe,
+    0x90, 0xfd, 0x05, 0x18, 0x62, 0xcb, 0xf6, 0xe8, 0x4f, 0x83, 0x59, 0x7f,
+    0xfd, 0xbc, 0x83, 0x2c, 0xde, 0xdf, 0x8e, 0xf3, 0xcb, 0x2f, 0xd9, 0xbf,
+    0x64, 0x8e, 0xb2, 0xdf, 0x83, 0xff, 0xf2, 0x9d, 0x42, 0x61, 0x38, 0x70,
+    0x18, 0x55, 0x5f, 0xfb, 0xa9, 0x10, 0x41, 0xb3, 0xb3, 0x81, 0x65, 0xd0,
+    0x6a, 0xcb, 0xfe, 0x1c, 0x14, 0x02, 0x5e, 0x65, 0x97, 0xc6, 0xfd, 0xa7,
+    0x59, 0x50, 0x8b, 0x69, 0xd1, 0x18, 0x5c, 0x26, 0xf7, 0xfb, 0xcc, 0x32,
+    0x77, 0x99, 0x65, 0xfe, 0x1f, 0x82, 0xe0, 0xdb, 0xc5, 0x97, 0xce, 0x08,
+    0xd2, 0xca, 0x84, 0x44, 0xb1, 0x97, 0x0d, 0xaf, 0xa3, 0xf9, 0x3a, 0xcb,
+    0xfd, 0x1b, 0x3f, 0x9c, 0xe4, 0x2c, 0xbf, 0x86, 0x20, 0xc3, 0xfe, 0x2c,
+    0xa3, 0x51, 0x0d, 0xa2, 0x22, 0x34, 0xbf, 0xb3, 0x92, 0xf0, 0x9c, 0x59,
+    0x4c, 0x7b, 0xe4, 0x61, 0x7a, 0x08, 0xd5, 0x95, 0x26, 0xc9, 0x48, 0x71,
+    0x90, 0xe4, 0x2f, 0x0d, 0x86, 0xbf, 0x71, 0xda, 0xf5, 0x1b, 0x83, 0x23,
+    0x4d, 0x19, 0x16, 0xa5, 0x0f, 0x9e, 0x36, 0x1f, 0x4a, 0x94, 0x04, 0x32,
+    0x0a, 0x33, 0x7e, 0x43, 0xab, 0xf0, 0xc5, 0xdf, 0x18, 0x98, 0x84, 0x17,
+    0xfd, 0x9a, 0x2c, 0xde, 0xfa, 0x92, 0xcb, 0x81, 0xc5, 0x97, 0xe2, 0xfe,
+    0x00, 0xeb, 0x2f, 0xb4, 0xd1, 0xf5, 0x97, 0xf7, 0x0b, 0x26, 0x83, 0xac,
+    0xa0, 0x1e, 0x77, 0xc8, 0x69, 0xd1, 0x2e, 0x17, 0x5b, 0xa3, 0xeb, 0x2f,
+    0x80, 0xe6, 0x7d, 0x65, 0xfe, 0x73, 0x3c, 0xd1, 0xa8, 0x59, 0x7f, 0x04,
+    0xfc, 0x0e, 0xa7, 0x59, 0x7e, 0x6d, 0xf0, 0x5f, 0x59, 0x50, 0x9e, 0x60,
+    0xce, 0x4d, 0x85, 0x77, 0x44, 0x4c, 0x2d, 0xa2, 0x32, 0x32, 0xe1, 0x85,
+    0xff, 0xb4, 0xdc, 0x90, 0x9e, 0x82, 0x85, 0x97, 0xda, 0x68, 0x3a, 0xcb,
+    0xff, 0xf7, 0xcd, 0x0c, 0x60, 0xfd, 0x9c, 0xea, 0x51, 0xe5, 0x95, 0xa4,
+    0x5b, 0x1c, 0xf8, 0x88, 0x6f, 0x80, 0x1d, 0x4e, 0xb2, 0xf4, 0xc1, 0xd2,
+    0xcb, 0x9e, 0x4b, 0x2f, 0xe3, 0xe1, 0x7f, 0x6f, 0x16, 0x5f, 0xff, 0xec,
+    0xf8, 0x40, 0x77, 0x93, 0x8e, 0x09, 0xf4, 0xf2, 0x59, 0x7f, 0x13, 0x99,
+    0xfc, 0xf6, 0x22, 0x34, 0x8b, 0xef, 0xf6, 0x7b, 0xc1, 0xfb, 0x92, 0xcb,
+    0x98, 0x6b, 0x2f, 0xef, 0x76, 0xfa, 0x79, 0x2c, 0xb7, 0x72, 0x3c, 0x4c,
+    0x16, 0xbc, 0xd3, 0x71, 0x65, 0x41, 0xe2, 0x9c, 0xa2, 0xff, 0xef, 0xb7,
+    0x9c, 0xfb, 0x61, 0xf3, 0x69, 0x65, 0xfc, 0xff, 0x3c, 0x67, 0xd6, 0x53,
+    0x9f, 0x98, 0x51, 0xef, 0x7a, 0x38, 0xb2, 0x86, 0xa9, 0xca, 0x68, 0x51,
+    0xe9, 0x0c, 0xf0, 0xbb, 0x28, 0x4a, 0x7c, 0x86, 0xfb, 0xdd, 0x3e, 0xe2,
+    0xcb, 0xf7, 0x9c, 0xed, 0xc5, 0x94, 0x33, 0xcd, 0xec, 0x9a, 0xb1, 0x5b,
+    0x43, 0x4a, 0x90, 0x78, 0x5a, 0xdf, 0x9b, 0xce, 0x76, 0x59, 0x79, 0xc8,
+    0x0b, 0x2b, 0x61, 0xe0, 0xf6, 0x4d, 0x7b, 0x7e, 0x0d, 0x65, 0xb5, 0x39,
+    0xe1, 0xcc, 0x4b, 0x73, 0xf9, 0x65, 0xf4, 0xd2, 0x72, 0x59, 0x5a, 0x37,
+    0x1c, 0x16, 0xbf, 0xdb, 0xba, 0xcd, 0xd2, 0x09, 0x8b, 0x2a, 0x73, 0xdb,
+    0x30, 0x86, 0xf6, 0xeb, 0x0d, 0x65, 0x61, 0xe1, 0xb9, 0x25, 0x42, 0xec,
+    0xd3, 0x17, 0xfa, 0x5c, 0x63, 0xc2, 0xfc, 0xa3, 0x00, 0xbf, 0x8f, 0xde,
+    0xcc, 0x3f, 0x16, 0x5f, 0xff, 0xff, 0x03, 0x99, 0x84, 0x68, 0x9a, 0x28,
+    0xcf, 0x0b, 0xe1, 0x64, 0xe7, 0xc3, 0xac, 0xbb, 0x58, 0xb2, 0xee, 0x32,
+    0xca, 0x9c, 0xd6, 0x68, 0x5a, 0xe1, 0x24, 0xb2, 0xf9, 0xb7, 0xb6, 0xf5,
+    0x97, 0xd0, 0x42, 0x1d, 0x65, 0x62, 0x20, 0x4e, 0x44, 0xe3, 0x02, 0x12,
+    0xd6, 0x26, 0xd1, 0xf8, 0xcb, 0x2e, 0x07, 0x16, 0x5f, 0x6c, 0x28, 0xed,
+    0x65, 0xf3, 0xfa, 0x04, 0x59, 0x58, 0x7b, 0xbe, 0x17, 0xde, 0x49, 0x7d,
+    0x06, 0x60, 0xd6, 0x5f, 0xff, 0x07, 0xa9, 0x70, 0x7e, 0x8d, 0x0d, 0xdc,
+    0xc5, 0x97, 0x6d, 0x62, 0xa2, 0xca, 0xc4, 0xd2, 0xda, 0x10, 0xda, 0x30,
+    0x22, 0x21, 0x14, 0xae, 0xcf, 0xac, 0xb8, 0xec, 0xb2, 0x86, 0x6b, 0x08,
+    0x5a, 0xf8, 0xc8, 0xeb, 0x8b, 0x2f, 0x7c, 0x4c, 0x59, 0x74, 0x4e, 0xb2,
+    0x9c, 0xda, 0x70, 0x76, 0xf0, 0xe2, 0x4b, 0x2f, 0xd3, 0x4a, 0x3a, 0xfa,
+    0xcb, 0xfb, 0xbf, 0x36, 0xf7, 0xd2, 0xcb, 0x44, 0xe7, 0xb5, 0x85, 0x57,
+    0x67, 0x96, 0x53, 0xa2, 0xcc, 0x9d, 0xb6, 0xc9, 0xee, 0xc1, 0xac, 0xbb,
+    0xe2, 0xb5, 0x95, 0x3a, 0xe8, 0x5c, 0xa5, 0x72, 0x63, 0xd7, 0x88, 0x38,
+    0xb1, 0xf8, 0x69, 0xef, 0x31, 0xdb, 0x16, 0xbf, 0x68, 0x07, 0x6e, 0x2c,
+    0xba, 0x37, 0xac, 0xac, 0x3c, 0x0d, 0xe5, 0x17, 0xbc, 0x13, 0x16, 0x5e,
+    0xf3, 0xce, 0xb2, 0xfd, 0xcf, 0xb4, 0x74, 0xb2, 0xe0, 0xf6, 0xb2, 0xa4,
+    0x78, 0x00, 0x28, 0xbd, 0xfc, 0x11, 0x65, 0xfc, 0x70, 0xf3, 0xf9, 0xf5,
+    0x97, 0xf8, 0xc7, 0xef, 0x0b, 0x06, 0xb2, 0xfc, 0xfe, 0xea, 0x5c, 0x59,
+    0x50, 0x88, 0xae, 0x17, 0x04, 0xce, 0xfd, 0x9c, 0x04, 0x4c, 0xb2, 0xfe,
+    0x8e, 0xb9, 0xb3, 0x50, 0xb2, 0xf4, 0xa3, 0x8b, 0x2c, 0x15, 0x95, 0x23,
+    0x5a, 0x01, 0xcb, 0xc3, 0x0f, 0x6b, 0x2f, 0x86, 0x51, 0x25, 0x95, 0x07,
+    0xc0, 0xc4, 0x2e, 0x3d, 0x7b, 0x18, 0x6b, 0x2f, 0xff, 0x09, 0xb3, 0xaf,
+    0x94, 0x66, 0xcc, 0xeb, 0xeb, 0x2f, 0xfa, 0x3c, 0xd1, 0x34, 0xd1, 0xda,
+    0xca, 0x85, 0x69, 0x83, 0x23, 0x34, 0x7b, 0xa5, 0xd6, 0x22, 0x9a, 0x14,
+    0xfa, 0x2f, 0x39, 0x47, 0xa1, 0x7b, 0xf2, 0xc0, 0x8d, 0xef, 0x50, 0xbf,
+    0xcd, 0x33, 0x93, 0x75, 0xc5, 0x97, 0x67, 0x6b, 0x2f, 0xf1, 0x7f, 0x85,
+    0x1f, 0xe2, 0xcb, 0xfd, 0xe2, 0xc6, 0x04, 0x01, 0x65, 0xf9, 0xb7, 0xe1,
+    0x71, 0x65, 0xff, 0xfd, 0x1e, 0x0f, 0x51, 0xfe, 0xfd, 0x1a, 0x0e, 0x06,
+    0x65, 0x95, 0x88, 0xe9, 0x63, 0x2d, 0x18, 0xf8, 0xa2, 0xfd, 0xfc, 0xf0,
+    0x77, 0x16, 0x5f, 0xfa, 0x7f, 0x31, 0xe3, 0x73, 0xd9, 0x3a, 0xca, 0xe8,
+    0xfb, 0xb4, 0x57, 0x7f, 0x6b, 0x3d, 0xe0, 0xfd, 0x65, 0xfb, 0xc5, 0x19,
+    0xa5, 0x17, 0xf6, 0x6a, 0x70, 0xb8, 0xd5, 0x10, 0x68, 0x59, 0xa6, 0xb6,
+    0xa7, 0x45, 0x0c, 0x95, 0x2f, 0x8b, 0xd9, 0xd2, 0xca, 0x84, 0xc4, 0x1a,
+    0x18, 0x8e, 0x55, 0x7e, 0x7e, 0xd8, 0xf0, 0xb2, 0xfe, 0x97, 0x89, 0xfa,
+    0xfa, 0xca, 0xec, 0xf5, 0x48, 0x9e, 0xf8, 0x42, 0x79, 0xd6, 0x5f, 0xb8,
+    0xda, 0x60, 0x2c, 0xac, 0x3e, 0xce, 0x11, 0x6e, 0x91, 0xdf, 0xa3, 0xfb,
+    0x0e, 0x62, 0xcb, 0xff, 0x4f, 0xff, 0x47, 0xb3, 0x7b, 0xc9, 0x65, 0xe3,
+    0xc7, 0x6b, 0x2f, 0x88, 0x01, 0xe2, 0xca, 0xc3, 0x7f, 0xa1, 0xda, 0x84,
+    0x50, 0x34, 0x20, 0x2f, 0xcf, 0x39, 0x39, 0xab, 0x2f, 0xf8, 0x7c, 0xe6,
+    0x68, 0x7e, 0xc5, 0x97, 0xfd, 0xc7, 0x28, 0x99, 0x87, 0x3a, 0xcb, 0xfd,
+    0x26, 0x3c, 0x78, 0x41, 0xac, 0xbf, 0xfd, 0x18, 0x5d, 0x7f, 0x34, 0xd3,
+    0xb9, 0xd6, 0x5d, 0x9e, 0xd8, 0x8b, 0x6e, 0x1c, 0xfc, 0xd2, 0xec, 0xe2,
+    0xcb, 0x19, 0xf3, 0xd3, 0xdb, 0x3d, 0xa8, 0x4d, 0xb9, 0xe3, 0x42, 0xbf,
+    0xec, 0x97, 0xb0, 0x9f, 0x46, 0xac, 0xb8, 0xe6, 0x2c, 0xa1, 0x67, 0xa1,
+    0x23, 0x8b, 0xf4, 0x1f, 0xf9, 0xe5, 0x95, 0xb1, 0x7d, 0x6f, 0x68, 0x33,
+    0x88, 0xc0, 0x25, 0x1d, 0xce, 0x43, 0xd3, 0x46, 0x3e, 0x86, 0x5b, 0x93,
+    0x14, 0x72, 0xc1, 0x78, 0xdd, 0x24, 0xb8, 0x70, 0xb2, 0xec, 0x92, 0xcb,
+    0xff, 0xf3, 0x76, 0xc3, 0xfc, 0x82, 0x5f, 0xe7, 0x9e, 0x4b, 0x2f, 0xff,
+    0xbd, 0x07, 0xd9, 0xe8, 0x7d, 0x0c, 0xa2, 0x4b, 0x29, 0xd1, 0xa5, 0xc1,
+    0x6f, 0x8b, 0x05, 0x5a, 0xec, 0x11, 0x65, 0xfe, 0x7f, 0xbe, 0x0d, 0xb7,
+    0xac, 0xbe, 0x07, 0xa0, 0x6b, 0x2f, 0xef, 0x31, 0x85, 0x03, 0x59, 0x7f,
+    0xd0, 0x03, 0xc6, 0x17, 0xf8, 0xb2, 0xff, 0xb9, 0x86, 0x79, 0xce, 0xdc,
+    0x59, 0x7e, 0xcd, 0x4e, 0x1e, 0x2c, 0xae, 0xd3, 0x1b, 0x63, 0x39, 0x88,
+    0xbc, 0x5b, 0xc3, 0x7d, 0xe7, 0x37, 0xe6, 0xea, 0x4c, 0x4b, 0x2f, 0x37,
+    0xb1, 0x65, 0xfd, 0xf7, 0x39, 0xe0, 0xeb, 0x2b, 0x0f, 0xbf, 0xb2, 0x7e,
+    0x86, 0xe9, 0x65, 0x1c, 0xdd, 0x98, 0x61, 0x7f, 0xc1, 0x9f, 0x66, 0x7f,
+    0xd1, 0xf5, 0x97, 0x34, 0xcb, 0x2a, 0x0f, 0xd7, 0xb2, 0x2d, 0xd3, 0xcb,
+    0xdc, 0x09, 0x2c, 0xbf, 0xf0, 0x4d, 0x38, 0x7f, 0xe8, 0x08, 0xad, 0x65,
+    0x74, 0x7c, 0x24, 0x39, 0x7c, 0x78, 0xd1, 0xab, 0x2f, 0xb0, 0x00, 0x75,
+    0x97, 0x84, 0xf3, 0xac, 0xac, 0x3e, 0x12, 0x23, 0xdb, 0x21, 0xa9, 0xd1,
+    0x66, 0x64, 0x20, 0xef, 0x84, 0x82, 0xed, 0x65, 0xee, 0x7a, 0x16, 0x54,
+    0x8d, 0xf8, 0xc8, 0xef, 0xc5, 0xa3, 0x1e, 0x75, 0x95, 0x08, 0xb3, 0xc6,
+    0x97, 0x21, 0xbf, 0x16, 0x7f, 0xcc, 0xb2, 0xfb, 0xbf, 0x41, 0x8b, 0x2f,
+    0xd9, 0xfe, 0x31, 0xd6, 0x5c, 0x12, 0x59, 0x78, 0xb2, 0x75, 0x95, 0x0b,
+    0xb6, 0x32, 0x3c, 0xc8, 0xcc, 0x9a, 0x37, 0xad, 0x47, 0xf3, 0xe2, 0xd1,
+    0x59, 0x31, 0x12, 0x70, 0x9c, 0x41, 0x6b, 0xfe, 0x83, 0xc7, 0xd8, 0xb2,
+    0x4b, 0x2d, 0x25, 0x97, 0xdc, 0x0c, 0x01, 0x65, 0xc1, 0xdd, 0x59, 0x5a,
+    0x44, 0x1f, 0x8d, 0x80, 0x22, 0x44, 0x57, 0x61, 0x2c, 0xbf, 0x70, 0x4e,
+    0x78, 0x2b, 0x2b, 0xc6, 0xff, 0xe2, 0xb7, 0xff, 0xb4, 0xd0, 0x7c, 0xd9,
+    0x9e, 0x6c, 0x3a, 0xcb, 0xe6, 0xe4, 0x3a, 0xca, 0xd8, 0x7d, 0x3c, 0x49,
+    0xbf, 0xd8, 0x59, 0xd7, 0xe4, 0x75, 0x97, 0x7e, 0x16, 0x54, 0x1e, 0x4b,
+    0x99, 0xdf, 0xf3, 0xc8, 0x6c, 0x11, 0x5b, 0x69, 0x65, 0xfb, 0x08, 0xa0,
+    0x6b, 0x2f, 0xbc, 0xfe, 0x85, 0x97, 0xf4, 0x4e, 0x77, 0x9a, 0x16, 0x5b,
+    0x4b, 0x2a, 0x47, 0xc1, 0x31, 0x08, 0x4b, 0xaf, 0xff, 0x9c, 0xdf, 0xc6,
+    0x81, 0xa8, 0xf9, 0x38, 0x16, 0x5f, 0xe8, 0xec, 0x7e, 0x0b, 0xf1, 0x65,
+    0xce, 0x6a, 0xcb, 0xfa, 0x72, 0xcf, 0xea, 0x16, 0x5f, 0x76, 0x27, 0xf8,
+    0xb2, 0xfe, 0x2c, 0x06, 0x14, 0x96, 0x5f, 0xff, 0x1b, 0xb0, 0x42, 0x7f,
+    0xf1, 0xba, 0xf3, 0x18, 0xb2, 0xb1, 0x10, 0x0e, 0x57, 0x7b, 0x50, 0x6a,
+    0xca, 0x84, 0xc4, 0x18, 0xb4, 0xa1, 0x4b, 0xc2, 0x1a, 0x85, 0xc6, 0xdc,
+    0x7b, 0x68, 0x45, 0x69, 0xb4, 0xe4, 0x1e, 0x3c, 0x78, 0x42, 0x91, 0x87,
+    0x13, 0xfe, 0x68, 0x18, 0xc9, 0xee, 0xe6, 0xf5, 0x97, 0x37, 0xd6, 0x5f,
+    0x31, 0x38, 0xd6, 0x5c, 0x27, 0xd6, 0x5f, 0xf8, 0xf9, 0xfe, 0x09, 0xc7,
+    0x96, 0x2c, 0xbf, 0x72, 0x35, 0xf8, 0x58, 0x2c, 0xdf, 0xd0, 0xd1, 0x61,
+    0xa2, 0x0e, 0x2b, 0xdc, 0xc2, 0xb5, 0x97, 0xc6, 0x64, 0x99, 0x65, 0xec,
+    0x63, 0x56, 0x5f, 0x4c, 0xef, 0xa5, 0x94, 0xe7, 0xc0, 0x44, 0x42, 0x0e,
+    0x5e, 0xc6, 0xde, 0xb2, 0xf4, 0x84, 0x3a, 0xca, 0xf1, 0xbb, 0x71, 0xdb,
+    0xfb, 0x8d, 0xac, 0x0e, 0x96, 0x5f, 0xff, 0xd3, 0x6c, 0x6e, 0xc3, 0xae,
+    0x07, 0x61, 0xdb, 0xfe, 0x65, 0x97, 0x41, 0xab, 0x2a, 0x0f, 0xe5, 0x98,
+    0xab, 0x15, 0x6c, 0x1a, 0x32, 0xd0, 0xc6, 0x98, 0xc0, 0xef, 0x5e, 0x69,
+    0xf9, 0x06, 0xec, 0x29, 0xae, 0x38, 0xa5, 0x51, 0x7e, 0x2f, 0xd3, 0xf5,
+    0x28, 0x1a, 0xcb, 0xf6, 0x13, 0x75, 0x25, 0x97, 0xb5, 0x98, 0xb2, 0xb6,
+    0xb3, 0xec, 0x62, 0xae, 0x13, 0xde, 0x28, 0x02, 0xcb, 0xcd, 0x9e, 0x59,
+    0x71, 0x77, 0x06, 0xdb, 0x43, 0x77, 0xff, 0x4b, 0xe1, 0x94, 0x8f, 0xff,
+    0xc1, 0xd6, 0x5f, 0xef, 0xf2, 0x27, 0xce, 0x0d, 0x65, 0xde, 0xc5, 0x97,
+    0xff, 0xde, 0x81, 0xe7, 0x7b, 0x30, 0xb0, 0x7e, 0x85, 0x97, 0xfd, 0xa8,
+    0xf3, 0x6f, 0xd4, 0x49, 0x65, 0xff, 0xfe, 0x04, 0x75, 0x2e, 0x0f, 0x30,
+    0xb3, 0xbf, 0x30, 0x7e, 0xb2, 0xff, 0xe6, 0xc2, 0xcc, 0xe6, 0xc9, 0x70,
+    0xeb, 0x2f, 0xfc, 0xf1, 0xd4, 0xb6, 0x73, 0xa1, 0xc2, 0xcb, 0xf9, 0xe7,
+    0x2c, 0x9c, 0x2b, 0x28, 0x6a, 0xb1, 0x31, 0xa7, 0xa2, 0xc6, 0x46, 0xdc,
+    0x34, 0x98, 0x5b, 0x4a, 0x00, 0x3a, 0xe3, 0x0f, 0xd1, 0x36, 0xd0, 0xaf,
+    0x1b, 0x1a, 0x59, 0x7c, 0x77, 0x18, 0x56, 0x5f, 0xe1, 0x23, 0xcd, 0xc8,
+    0x11, 0x65, 0xf0, 0x09, 0xe4, 0xb2, 0xfe, 0xf3, 0x1d, 0xdf, 0x75, 0x65,
+    0xe0, 0xf5, 0xc5, 0x97, 0x8b, 0x37, 0x56, 0x5e, 0x3e, 0x6f, 0x59, 0x5b,
+    0x0f, 0x6b, 0x07, 0x9c, 0x7a, 0xf6, 0x9a, 0x75, 0x97, 0xf0, 0xe0, 0x1a,
+    0xce, 0x96, 0x5b, 0x6d, 0x65, 0x0b, 0x4e, 0xae, 0x07, 0x46, 0x44, 0x69,
+    0xa7, 0x64, 0x33, 0x42, 0x27, 0x45, 0xe7, 0x1d, 0x15, 0x97, 0x5f, 0xf3,
+    0x1b, 0x1a, 0x2c, 0x63, 0x56, 0x5d, 0xdc, 0xeb, 0x2f, 0xd8, 0xda, 0x9a,
+    0x4b, 0x2f, 0x89, 0xff, 0xc5, 0x96, 0x83, 0x9e, 0x4e, 0xf2, 0x8b, 0x9a,
+    0x65, 0x97, 0xfe, 0xc9, 0xf6, 0x7a, 0x26, 0x6e, 0xa4, 0xb2, 0xfe, 0x83,
+    0x46, 0x51, 0xd2, 0xca, 0x83, 0xf1, 0xd2, 0x1d, 0xf1, 0x46, 0x8d, 0x59,
+    0x7d, 0x05, 0x86, 0xac, 0xbd, 0xc8, 0x35, 0x65, 0xfe, 0x7c, 0xeb, 0xff,
+    0x7f, 0x2c, 0xbf, 0xf8, 0x23, 0xcd, 0x44, 0x98, 0x70, 0x4b, 0x2f, 0xf8,
+    0x9e, 0x78, 0xd6, 0x9e, 0x4b, 0x2a, 0x47, 0xf5, 0xe4, 0x2b, 0xff, 0x1f,
+    0x39, 0xcc, 0x20, 0x6d, 0xe2, 0xcb, 0xff, 0xed, 0x3f, 0x0b, 0x27, 0x12,
+    0x41, 0x86, 0x25, 0x95, 0x08, 0xb1, 0x72, 0x20, 0xa0, 0x57, 0x49, 0xd4,
+    0xf8, 0x77, 0xf1, 0xaf, 0x5f, 0xff, 0xe6, 0xe0, 0x33, 0x63, 0x6f, 0x8f,
+    0x34, 0x4d, 0x34, 0x76, 0xb2, 0xf7, 0xda, 0x75, 0x97, 0xe0, 0x3f, 0x51,
+    0x32, 0xcb, 0xc5, 0x1d, 0xac, 0xbf, 0xf3, 0x4d, 0xe8, 0xd7, 0x52, 0x8d,
+    0x2c, 0xbf, 0xfd, 0xff, 0x46, 0xfe, 0x13, 0xfe, 0x66, 0xde, 0xb2, 0xff,
+    0xcc, 0x7c, 0xd6, 0x44, 0xcc, 0x75, 0x95, 0x88, 0x8b, 0xd2, 0x75, 0x0d,
+    0x1d, 0xbc, 0x86, 0x5d, 0xf6, 0x7e, 0x06, 0xb2, 0xff, 0xf3, 0x13, 0xf5,
+    0xce, 0x66, 0x87, 0xec, 0x59, 0x5b, 0x17, 0x44, 0xe5, 0x08, 0x8c, 0x21,
+    0xec, 0x89, 0xa3, 0xca, 0xd1, 0xc1, 0xd9, 0x5c, 0x74, 0x8a, 0x79, 0x18,
+    0x49, 0x85, 0x1b, 0xa4, 0x36, 0x85, 0x94, 0xb2, 0xf6, 0x60, 0x16, 0x5e,
+    0xf3, 0x7d, 0x65, 0xb7, 0xe1, 0xe9, 0x30, 0x81, 0x05, 0x88, 0x37, 0x7e,
+    0xd4, 0xe1, 0x71, 0xac, 0xb6, 0xda, 0xca, 0xc3, 0x7a, 0x21, 0x4d, 0xe8,
+    0xdd, 0xe2, 0xca, 0x34, 0xf0, 0x3b, 0x21, 0xbf, 0x6b, 0x59, 0xb9, 0x32,
+    0xcb, 0x8c, 0xe2, 0xca, 0x86, 0x75, 0xd0, 0xe1, 0x01, 0x92, 0xd6, 0x1a,
+    0x52, 0x5e, 0xe4, 0x23, 0x0e, 0x71, 0xe6, 0x27, 0x9d, 0x3c, 0x04, 0x61,
+    0xc1, 0x85, 0xfe, 0xf2, 0x41, 0x0b, 0x2f, 0x1d, 0xc4, 0x59, 0x7f, 0x8a,
+    0x45, 0x87, 0x8e, 0xd6, 0x5d, 0x9b, 0x6b, 0x2b, 0x0f, 0x2f, 0xc6, 0x57,
+    0xef, 0x36, 0xfc, 0x1a, 0xcb, 0xdb, 0x3e, 0xcb, 0x2f, 0xfc, 0x38, 0x2c,
+    0x20, 0xcb, 0x38, 0xb2, 0xed, 0x9d, 0x2c, 0xbf, 0x39, 0xdb, 0x77, 0x16,
+    0x5f, 0xd9, 0xe7, 0xfb, 0xcc, 0xb2, 0xe8, 0xe9, 0x65, 0x74, 0x78, 0x9f,
+    0x2d, 0xac, 0x44, 0x83, 0xb6, 0xdf, 0xf6, 0x04, 0xb3, 0xe4, 0xe7, 0x59,
+    0x69, 0x96, 0x5e, 0xf6, 0x01, 0x65, 0x31, 0xae, 0xf8, 0x95, 0xfe, 0xe4,
+    0x4a, 0x27, 0x89, 0xd6, 0x5d, 0x86, 0xac, 0xbf, 0xfd, 0x86, 0xf9, 0xb9,
+    0xec, 0xdf, 0x19, 0xd2, 0xca, 0x84, 0x5b, 0xb1, 0x07, 0x8d, 0x08, 0x5e,
+    0xed, 0x62, 0xcb, 0xe8, 0xfc, 0x76, 0xb2, 0xed, 0xaf, 0x75, 0x65, 0x00,
+    0xf0, 0x48, 0x8a, 0xf9, 0xb5, 0x12, 0x59, 0x7d, 0x39, 0xe3, 0x8b, 0x2a,
+    0x73, 0xc4, 0xc2, 0x1b, 0xff, 0x47, 0xdc, 0x3f, 0x7e, 0xb3, 0xeb, 0x2f,
+    0xfb, 0x5b, 0x20, 0x7e, 0xce, 0xe1, 0x65, 0xff, 0xd1, 0x83, 0x6e, 0x16,
+    0x6f, 0x62, 0x59, 0x5e, 0x45, 0xdb, 0x9f, 0x04, 0xee, 0xfd, 0xdb, 0xc3,
+    0x6d, 0xac, 0xbc, 0x59, 0xc5, 0x97, 0xff, 0xfe, 0x8f, 0x31, 0xc5, 0xcd,
+    0x27, 0xd0, 0x9e, 0x6e, 0xb9, 0xdb, 0x4e, 0xb2, 0xa7, 0x5d, 0xac, 0x1b,
+    0x41, 0xa4, 0x3d, 0x94, 0xb0, 0xf6, 0xe1, 0xe4, 0xd0, 0xaa, 0xd1, 0x0f,
+    0xa3, 0x1b, 0x01, 0xd1, 0x2b, 0xf1, 0x97, 0xf0, 0xdd, 0x09, 0x78, 0x85,
+    0x5b, 0xa3, 0x77, 0xb5, 0xc0, 0xac, 0xb7, 0x16, 0x5f, 0xee, 0xc0, 0xe0,
+    0x62, 0xed, 0x65, 0x78, 0xf1, 0x48, 0x46, 0xb1, 0x10, 0x6c, 0xc5, 0x7f,
+    0xa7, 0x1e, 0x7f, 0x8f, 0xd2, 0xcb, 0xed, 0x8f, 0x2d, 0xa9, 0x65, 0xf9,
+    0xe5, 0xc1, 0x9d, 0x65, 0xff, 0xd9, 0xbf, 0x07, 0x84, 0x19, 0x67, 0x16,
+    0x5f, 0xb5, 0x1e, 0x10, 0x6b, 0x2b, 0x47, 0xda, 0xe8, 0x96, 0x02, 0xcb,
+    0xa7, 0x85, 0x96, 0x89, 0xcd, 0x43, 0x08, 0xdf, 0x18, 0xf9, 0xc5, 0x97,
+    0xf0, 0xe0, 0x05, 0x9d, 0x2c, 0xbf, 0xe9, 0x1d, 0xe5, 0xfe, 0x41, 0xab,
+    0x2a, 0x11, 0x13, 0x84, 0x4e, 0x5b, 0x7b, 0x8c, 0x4b, 0x2c, 0x05, 0x97,
+    0xdd, 0xec, 0xe7, 0x4b, 0x2b, 0x46, 0xe0, 0x84, 0x6f, 0xf0, 0x92, 0x8d,
+    0xec, 0x40, 0x59, 0x7c, 0xfb, 0xb8, 0x4b, 0x2b, 0x11, 0x96, 0xea, 0x64,
+    0x41, 0xc3, 0x5a, 0xc5, 0x67, 0xdd, 0x90, 0xee, 0x1a, 0x9c, 0xa5, 0xe1,
+    0x2a, 0x04, 0x92, 0x85, 0x78, 0x61, 0xf1, 0x7d, 0xc9, 0xc3, 0xc5, 0x97,
+    0x4f, 0x25, 0x97, 0x9b, 0xcc, 0xb2, 0xb0, 0xf5, 0xfa, 0x24, 0xf8, 0xc5,
+    0xff, 0xd3, 0xf7, 0xe6, 0x13, 0x46, 0xe7, 0x5f, 0x59, 0x7d, 0x9d, 0x4a,
+    0x16, 0x5e, 0x0b, 0xf1, 0x65, 0x62, 0x22, 0x3c, 0x94, 0x21, 0x15, 0xef,
+    0xb4, 0xeb, 0x2f, 0xf9, 0x8d, 0x81, 0xc6, 0xfc, 0xf2, 0xcb, 0xf4, 0x10,
+    0x0f, 0xf5, 0x97, 0xf9, 0x8c, 0xea, 0x5c, 0xce, 0xd6, 0x5f, 0xd2, 0x10,
+    0x00, 0x8e, 0x96, 0x53, 0x22, 0x37, 0xc4, 0xee, 0x6d, 0x7f, 0x07, 0x91,
+    0x30, 0x74, 0xb2, 0xf0, 0x73, 0xa5, 0x95, 0xe3, 0xcc, 0xf9, 0x7d, 0xfd,
+    0xfc, 0x8f, 0xe1, 0xd6, 0x5f, 0xd8, 0x7d, 0x6a, 0x06, 0xb2, 0xfd, 0xd7,
+    0x3e, 0xd3, 0xac, 0xbf, 0x82, 0x53, 0xf1, 0xba, 0x59, 0x7f, 0xf4, 0x4e,
+    0x63, 0xf5, 0xcc, 0x1b, 0x71, 0x65, 0x42, 0x27, 0xe4, 0x54, 0x45, 0xf7,
+    0xec, 0x37, 0xed, 0x3a, 0xcb, 0xc0, 0xce, 0x96, 0x57, 0x47, 0x8c, 0x02,
+    0x9b, 0xfc, 0x18, 0x9c, 0xb1, 0xa7, 0x59, 0x7f, 0xfe, 0x8d, 0x03, 0x38,
+    0x41, 0x79, 0x78, 0x2f, 0x3a, 0xcb, 0xf7, 0xf1, 0xcb, 0xb5, 0x95, 0xe3,
+    0xfc, 0xdd, 0x55, 0xbd, 0xd4, 0x1d, 0x65, 0xff, 0xe1, 0xfa, 0x3a, 0x91,
+    0x61, 0xf3, 0xaf, 0xac, 0xbf, 0x1f, 0x3d, 0x84, 0xb2, 0x98, 0xfc, 0x5d,
+    0x2e, 0xff, 0x82, 0xf2, 0x1e, 0x60, 0x38, 0xb2, 0xff, 0xec, 0xdf, 0xe7,
+    0x96, 0xcf, 0xf9, 0xcd, 0x59, 0x7e, 0x3e, 0x69, 0xc9, 0x65, 0xff, 0xba,
+    0x97, 0xa0, 0xef, 0xd4, 0xb1, 0x65, 0xfc, 0xdd, 0x75, 0x2c, 0xfa, 0xca,
+    0x84, 0x4a, 0xe1, 0x30, 0x10, 0x2b, 0xc9, 0xa2, 0x11, 0xc7, 0x21, 0xbd,
+    0x7e, 0xeb, 0x87, 0x6d, 0xc5, 0x97, 0xff, 0x79, 0xdb, 0xe0, 0x09, 0x13,
+    0xc9, 0x65, 0xf4, 0x10, 0x45, 0x6b, 0x2e, 0xce, 0x6c, 0x3e, 0x7f, 0x21,
+    0x54, 0x23, 0x08, 0xa1, 0x27, 0x7f, 0x3c, 0xe0, 0x72, 0x1a, 0xca, 0x9d,
+    0x7c, 0x08, 0x70, 0xc7, 0xed, 0xeb, 0xa2, 0x26, 0x2c, 0x9a, 0x19, 0x9a,
+    0x74, 0x39, 0x1f, 0xa1, 0x5e, 0x44, 0xbc, 0x84, 0x77, 0xe3, 0x64, 0xdf,
+    0x0f, 0x7d, 0xb2, 0x6b, 0xf0, 0x32, 0x66, 0x3a, 0xcb, 0xfe, 0xf7, 0xb1,
+    0xba, 0x96, 0x69, 0x65, 0x41, 0xf0, 0xb9, 0x45, 0xfe, 0xf8, 0x67, 0x8f,
+    0xc0, 0xd6, 0x5e, 0xfe, 0x12, 0xcb, 0xde, 0x7d, 0xc5, 0x97, 0xe0, 0xcb,
+    0x01, 0xc5, 0x97, 0xf8, 0x48, 0xef, 0x6f, 0x35, 0x0b, 0x2f, 0xf8, 0x78,
+    0x1d, 0x4f, 0xdb, 0x4e, 0xb2, 0xff, 0xf6, 0xfc, 0x21, 0x93, 0x99, 0xce,
+    0x40, 0x16, 0x5f, 0xff, 0xfc, 0x76, 0xe6, 0xc9, 0xa4, 0x12, 0xfe, 0xcf,
+    0x44, 0x98, 0xb0, 0xf0, 0xb2, 0xb1, 0x18, 0x01, 0x4b, 0xbe, 0x6d, 0x41,
+    0xd6, 0x56, 0x8f, 0x0f, 0xc4, 0x57, 0xff, 0xdd, 0xf8, 0x25, 0x9d, 0x49,
+    0xb8, 0x59, 0xbd, 0x65, 0xfb, 0xd1, 0xe6, 0x35, 0x65, 0xcf, 0x37, 0x0f,
+    0xeb, 0x75, 0x4a, 0xa1, 0x19, 0xbe, 0x84, 0xe5, 0xff, 0xfe, 0x6d, 0xe4,
+    0x1e, 0x6c, 0x10, 0xa0, 0x7e, 0x79, 0x67, 0x16, 0x54, 0x95, 0x98, 0x1a,
+    0x37, 0xa1, 0xff, 0x14, 0x39, 0xbf, 0xe5, 0x06, 0x6f, 0x27, 0xa8, 0x66,
+    0x45, 0xce, 0x61, 0x93, 0xe3, 0xed, 0x1a, 0x4e, 0x88, 0x1e, 0x5b, 0x25,
+    0xd3, 0x05, 0x65, 0x8e, 0xb2, 0xba, 0x35, 0x22, 0xb1, 0x8b, 0xfd, 0xf0,
+    0x04, 0xb8, 0xc3, 0x59, 0x7e, 0x90, 0x33, 0x06, 0xb2, 0xdb, 0xd8, 0xf6,
+    0x9c, 0xce, 0xfd, 0xe6, 0xd0, 0x02, 0xb2, 0xda, 0xc3, 0xd0, 0x98, 0xa2,
+    0xfe, 0x33, 0x8f, 0x1d, 0x49, 0x65, 0x41, 0xeb, 0xe1, 0x45, 0xff, 0x67,
+    0x4f, 0xf8, 0xfb, 0x81, 0x65, 0xff, 0xe9, 0x8a, 0x3f, 0xcf, 0xf5, 0xdb,
+    0x14, 0xeb, 0x2f, 0xcc, 0x71, 0x26, 0xe2, 0xcb, 0xf8, 0xb3, 0xe1, 0x82,
+    0x59, 0x7e, 0xea, 0x45, 0x03, 0x59, 0x47, 0x3d, 0x37, 0x2b, 0xbf, 0xa4,
+    0xc4, 0x77, 0xfa, 0xcb, 0xfe, 0x1e, 0x6c, 0xe3, 0x17, 0x52, 0x59, 0x68,
+    0xe8, 0xf9, 0xcc, 0x2c, 0xa8, 0x4e, 0xcd, 0x8e, 0x3c, 0x9a, 0xef, 0xa5,
+    0x08, 0x8b, 0xf3, 0xcb, 0x27, 0x85, 0x97, 0xff, 0x47, 0x39, 0x87, 0xf9,
+    0x41, 0xf8, 0xb2, 0xff, 0xa3, 0x46, 0xf8, 0xa3, 0x34, 0xb2, 0xfe, 0x37,
+    0x66, 0x1e, 0x3b, 0x59, 0x7f, 0xf4, 0x75, 0x2f, 0x86, 0x27, 0x6e, 0xbe,
+    0xb2, 0xff, 0x37, 0x9f, 0xb8, 0x21, 0xac, 0xa6, 0x45, 0x51, 0x18, 0xf1,
+    0x1e, 0xfe, 0x8e, 0xc0, 0x70, 0x81, 0x65, 0xf6, 0xf6, 0x21, 0xac, 0xbf,
+    0xf1, 0x40, 0xfd, 0x07, 0x2c, 0xed, 0x65, 0xe6, 0x2f, 0xac, 0xac, 0x3f,
+    0xb9, 0x88, 0xfc, 0x7b, 0x7f, 0x87, 0xc6, 0xf7, 0xb0, 0x6b, 0x2f, 0xfe,
+    0x68, 0xe1, 0x3c, 0xb6, 0x73, 0x34, 0xb2, 0xff, 0x0c, 0xb2, 0x5e, 0x81,
+    0xac, 0xbc, 0x4f, 0xa5, 0x97, 0xce, 0xef, 0xba, 0xb2, 0xff, 0xfe, 0xc1,
+    0xec, 0x60, 0x46, 0xcf, 0xfb, 0x3f, 0xe7, 0x92, 0xcb, 0xff, 0xb9, 0x3e,
+    0x19, 0x84, 0x1d, 0xd8, 0x17, 0x88, 0x9c, 0x38, 0xde, 0xf2, 0x3a, 0x84,
+    0xcf, 0x9a, 0x19, 0xd7, 0xfb, 0xa9, 0x72, 0x69, 0x44, 0xeb, 0x28, 0x6b,
+    0x8c, 0xdd, 0x93, 0xcc, 0x87, 0xa8, 0x71, 0x1c, 0xbb, 0xd0, 0xaa, 0x72,
+    0xf2, 0x33, 0xfc, 0x70, 0x41, 0x27, 0xbf, 0xff, 0xbf, 0x9d, 0x7f, 0x5a,
+    0x8f, 0x80, 0x42, 0x97, 0xb1, 0x65, 0xcd, 0xbd, 0x65, 0xf4, 0x14, 0xb8,
+    0xb2, 0xcd, 0xd2, 0x25, 0xa6, 0x5d, 0x00, 0xc5, 0xfe, 0xd4, 0xe5, 0x1d,
+    0xb4, 0x96, 0x57, 0x8f, 0xad, 0xcd, 0xef, 0xde, 0x8d, 0xe3, 0x85, 0x97,
+    0x86, 0xe4, 0xb2, 0xdb, 0xd6, 0x5f, 0xba, 0xf9, 0x47, 0x96, 0x5b, 0x50,
+    0x6e, 0xdc, 0x4e, 0xfb, 0xa9, 0xa3, 0x4b, 0x2d, 0xa5, 0x95, 0x86, 0xd4,
+    0x24, 0x95, 0x24, 0x7c, 0x8c, 0xa7, 0x4a, 0xdc, 0x5a, 0xbe, 0x6d, 0xf8,
+    0x35, 0x97, 0xc5, 0xfc, 0x25, 0x97, 0x17, 0xf4, 0x78, 0x6e, 0x47, 0x7f,
+    0xdd, 0x4b, 0x81, 0xfc, 0x7f, 0x8b, 0x2f, 0xda, 0x93, 0xf4, 0x62, 0xcb,
+    0xfd, 0xc3, 0x1c, 0x71, 0xd7, 0x16, 0x54, 0x23, 0x1b, 0x0b, 0x18, 0xed,
+    0xca, 0xaf, 0xdc, 0x0f, 0xe0, 0x96, 0x5f, 0xe0, 0xf5, 0x2f, 0xf0, 0x3b,
+    0x8b, 0x2f, 0x72, 0x3a, 0x59, 0x7a, 0x3d, 0xc5, 0x97, 0x39, 0x9d, 0x1b,
+    0x90, 0x0e, 0xd4, 0x93, 0x00, 0xc3, 0x9f, 0x13, 0x93, 0x95, 0xfe, 0xce,
+    0xb6, 0x67, 0x9b, 0xcb, 0x2e, 0xf0, 0xd6, 0x5c, 0xdd, 0xac, 0xb9, 0xfe,
+    0x33, 0x5d, 0xb6, 0x2f, 0x5a, 0x44, 0x93, 0xb1, 0xda, 0x16, 0x5f, 0xda,
+    0x86, 0x93, 0xf1, 0x65, 0x0c, 0xde, 0x74, 0x21, 0x7f, 0xdf, 0xe0, 0x64,
+    0x20, 0xdb, 0xeb, 0x2a, 0x0f, 0x75, 0xc8, 0xaf, 0xde, 0x8c, 0x93, 0xac,
+    0xbd, 0x8d, 0xc5, 0x97, 0xef, 0xff, 0x03, 0x3a, 0xcb, 0xff, 0xe9, 0xdf,
+    0xd8, 0x3d, 0x98, 0x45, 0x8c, 0x05, 0x95, 0x3a, 0x24, 0xfb, 0x1b, 0xd1,
+    0x4d, 0xff, 0x7b, 0xb6, 0x7d, 0x9c, 0x7f, 0x2c, 0xa1, 0xa6, 0x4d, 0x90,
+    0xb9, 0x73, 0x2b, 0xe2, 0x89, 0x32, 0xcb, 0xce, 0x53, 0x2c, 0xbd, 0xd4,
+    0x99, 0x65, 0x9c, 0xe6, 0xe4, 0x87, 0x2f, 0x06, 0x09, 0x65, 0xff, 0xfe,
+    0x6f, 0xc1, 0x3c, 0xb0, 0x7c, 0x7d, 0x37, 0x9b, 0x7a, 0xcb, 0xe8, 0x29,
+    0x71, 0x65, 0x69, 0x31, 0x9f, 0x2c, 0x91, 0x2e, 0xf1, 0xb1, 0x17, 0xef,
+    0xff, 0xdc, 0x2d, 0x9e, 0x76, 0xf8, 0x02, 0x44, 0xf2, 0x59, 0x7f, 0xff,
+    0xf4, 0x6b, 0x26, 0x83, 0xe7, 0x6c, 0x3f, 0x47, 0xf8, 0x6e, 0xb3, 0x75,
+    0x65, 0xfe, 0xf3, 0x1b, 0xb6, 0x1d, 0x1a, 0xb2, 0xff, 0x8f, 0x05, 0xdb,
+    0x90, 0x05, 0x2b, 0x2f, 0xf3, 0x1f, 0x59, 0xb6, 0xc0, 0x59, 0x7f, 0xd0,
+    0x0d, 0x6a, 0x0c, 0x1f, 0x4b, 0x2f, 0xf1, 0x87, 0xf4, 0x31, 0x4e, 0xb2,
+    0xff, 0xf3, 0xc9, 0xb5, 0x9d, 0x4d, 0x28, 0xd4, 0xeb, 0x2a, 0x11, 0x00,
+    0x03, 0x4b, 0xff, 0xe2, 0xce, 0x61, 0xe3, 0xbc, 0xfb, 0x6b, 0x16, 0x57,
+    0x69, 0xea, 0x1c, 0xe7, 0xc7, 0x80, 0x35, 0xfc, 0x2e, 0xf7, 0x91, 0x5f,
+    0xfa, 0x6e, 0x7c, 0x3d, 0x60, 0xdc, 0x96, 0x5c, 0x1e, 0x96, 0x5f, 0xd0,
+    0x78, 0xce, 0xbe, 0xb2, 0xd8, 0x73, 0xc5, 0xf8, 0xc5, 0x42, 0xb5, 0x6c,
+    0x94, 0x94, 0xec, 0x01, 0x84, 0x2d, 0xfd, 0x3e, 0x69, 0xbb, 0x85, 0x97,
+    0xc4, 0x38, 0x3a, 0xcb, 0xff, 0xe0, 0x97, 0xf9, 0xe6, 0x98, 0xa0, 0xef,
+    0x25, 0x97, 0xf6, 0xa1, 0xa4, 0xfc, 0x59, 0x70, 0x5d, 0x65, 0xb3, 0x61,
+    0xe1, 0x11, 0x65, 0x1d, 0x17, 0x3b, 0xe1, 0x23, 0x7f, 0x38, 0x30, 0x6f,
+    0x25, 0x95, 0x09, 0x98, 0x64, 0x36, 0x98, 0xaa, 0xf8, 0x1c, 0xda, 0x62,
+    0x95, 0x97, 0xe8, 0xed, 0xf5, 0x3a, 0xca, 0x64, 0xf9, 0xfd, 0x1a, 0xf3,
+    0x99, 0x91, 0x6d, 0xfb, 0xc0, 0x6d, 0x1a, 0xb2, 0xf7, 0x62, 0x49, 0x65,
+    0xf4, 0x68, 0x57, 0xc5, 0x95, 0xe3, 0xc5, 0x00, 0xfd, 0xfe, 0x1f, 0xb0,
+    0x01, 0xff, 0x16, 0x5f, 0xff, 0xff, 0xd9, 0xb9, 0x83, 0xe4, 0x0e, 0x3f,
+    0xec, 0x0f, 0x7e, 0x8e, 0x7b, 0x38, 0xf0, 0x75, 0x97, 0xef, 0x64, 0xa4,
+    0xeb, 0x2f, 0xff, 0xb3, 0xdd, 0xf9, 0xa6, 0x27, 0x33, 0xf9, 0xe5, 0x95,
+    0x89, 0xe3, 0x33, 0x73, 0x91, 0x70, 0xd3, 0xf0, 0x8a, 0xdb, 0x27, 0xbd,
+    0xc1, 0x00, 0xb2, 0xf4, 0x11, 0xab, 0x2a, 0x0d, 0xd7, 0x07, 0xaa, 0x1b,
+    0x9a, 0xc9, 0xe3, 0x27, 0x1c, 0x7a, 0x79, 0x39, 0x65, 0xdc, 0x73, 0xed,
+    0x18, 0xd4, 0xd2, 0x91, 0xb5, 0x0c, 0xe3, 0xc2, 0xef, 0xd1, 0xa3, 0x3c,
+    0x69, 0xa0, 0x4d, 0x29, 0x75, 0x7f, 0x94, 0x5e, 0x19, 0x40, 0xe2, 0x42,
+    0x5e, 0xff, 0xec, 0x20, 0x66, 0x6b, 0x9f, 0x8c, 0x59, 0x7f, 0xdd, 0x7f,
+    0x34, 0xd3, 0xb9, 0xd6, 0x5e, 0xcd, 0xf8, 0xb2, 0xd8, 0x04, 0x4c, 0x12,
+    0x0f, 0x0e, 0xaf, 0x0a, 0xe4, 0xcb, 0x2f, 0xa0, 0x9e, 0x4b, 0x2f, 0xd9,
+    0xb8, 0xe4, 0x0d, 0x87, 0x81, 0xa2, 0x0b, 0xc7, 0x79, 0x96, 0x5f, 0xcc,
+    0x78, 0xf0, 0x83, 0x59, 0x7f, 0xc2, 0x7d, 0x88, 0x32, 0xce, 0x2c, 0xa9,
+    0x1f, 0x3b, 0x17, 0x5f, 0xbc, 0xd1, 0xae, 0x2c, 0xae, 0xd1, 0x99, 0xe8,
+    0x42, 0x6f, 0x21, 0xbf, 0xff, 0x4b, 0x85, 0x9f, 0xe3, 0x61, 0xff, 0xac,
+    0x31, 0x65, 0xff, 0xbc, 0xc7, 0x1e, 0x4d, 0x19, 0xa5, 0x97, 0xa5, 0x1d,
+    0x2c, 0xbf, 0x04, 0x83, 0x1d, 0x2c, 0xbc, 0x7c, 0xfa, 0xcb, 0xe8, 0x03,
+    0x9d, 0x65, 0xa5, 0x88, 0xc0, 0x98, 0xf8, 0xe3, 0xa0, 0x28, 0x21, 0xca,
+    0xe9, 0x36, 0x42, 0x8c, 0x56, 0xfb, 0x8d, 0xf8, 0x59, 0x50, 0x79, 0x6e,
+    0x55, 0x7e, 0x2c, 0x00, 0x78, 0xb2, 0xff, 0x6c, 0x27, 0x9c, 0xa3, 0xa5,
+    0x97, 0xfe, 0xf3, 0x7f, 0xd8, 0xdf, 0x80, 0x2c, 0xbb, 0xb6, 0xc4, 0x4c,
+    0xe8, 0x9f, 0x86, 0xb7, 0xbb, 0xe7, 0xd6, 0x5f, 0xcf, 0xf0, 0x08, 0x52,
+    0x59, 0x53, 0x9e, 0x67, 0x87, 0xaf, 0xf0, 0x63, 0x7e, 0x7d, 0xb4, 0xb2,
+    0xfb, 0xbf, 0x34, 0xcb, 0x2f, 0xff, 0xfb, 0x40, 0x00, 0x79, 0xe6, 0xfc,
+    0xb3, 0xce, 0x06, 0x1c, 0x2c, 0xbf, 0xe7, 0xd6, 0x6f, 0xcd, 0xf0, 0x35,
+    0x95, 0x88, 0xa1, 0x03, 0x35, 0xff, 0xf6, 0x1a, 0x6b, 0x0f, 0xcd, 0x37,
+    0x9b, 0xaf, 0xac, 0xa3, 0x9f, 0xa9, 0x11, 0x54, 0x26, 0xb7, 0x91, 0x9d,
+    0x5c, 0x1d, 0x2c, 0xbd, 0xdb, 0xe9, 0x65, 0xff, 0xa7, 0xc2, 0x3e, 0x7f,
+    0x82, 0x71, 0x65, 0xfb, 0x9d, 0xc6, 0x8d, 0x59, 0x7f, 0x30, 0x3a, 0x96,
+    0x7d, 0x65, 0x4e, 0x8c, 0xcf, 0x0b, 0xb8, 0xe8, 0x10, 0x37, 0x95, 0x5f,
+    0x4b, 0xf8, 0x05, 0x97, 0xb8, 0xd3, 0x2c, 0xae, 0x8d, 0xff, 0x08, 0xaf,
+    0xbf, 0xe0, 0xf6, 0xb2, 0xfd, 0x8c, 0x3f, 0x32, 0xca, 0x9c, 0xf2, 0xa4,
+    0x49, 0x79, 0xf4, 0x6a, 0xcb, 0xff, 0x9e, 0x5b, 0x38, 0x59, 0xfe, 0x66,
+    0xe2, 0xca, 0x84, 0x7a, 0x63, 0x63, 0x91, 0x84, 0x76, 0xff, 0xdd, 0x7f,
+    0x8c, 0x50, 0x07, 0x3a, 0xca, 0x59, 0x58, 0x79, 0x3b, 0xcf, 0xaf, 0x48,
+    0xfe, 0x59, 0x53, 0x9e, 0x07, 0xc8, 0xef, 0xff, 0xfd, 0xb7, 0x9f, 0xf3,
+    0x8c, 0x59, 0x66, 0xf2, 0xce, 0x71, 0xba, 0xfa, 0xcb, 0x74, 0xb2, 0xfb,
+    0x0f, 0x1b, 0x8b, 0x2d, 0xd0, 0xac, 0xdb, 0x70, 0x4a, 0xf1, 0xac, 0x62,
+    0xcb, 0xf1, 0x8d, 0x84, 0x6a, 0xca, 0x63, 0xc6, 0x08, 0xf5, 0xfe, 0x18,
+    0x99, 0x37, 0x9c, 0xeb, 0x2b, 0x13, 0x93, 0x62, 0x37, 0x85, 0x41, 0x39,
+    0x04, 0x86, 0xfb, 0xcf, 0xbb, 0xc5, 0x97, 0xfe, 0xce, 0xbe, 0x66, 0x10,
+    0xfd, 0x0b, 0x2c, 0xfd, 0x9f, 0x26, 0x89, 0x6d, 0x8b, 0x2f, 0xb5, 0x3b,
+    0x4e, 0xb2, 0xf7, 0x9b, 0x4b, 0x2c, 0xec, 0x78, 0x13, 0x12, 0x56, 0xc3,
+    0xf7, 0xf2, 0x85, 0xf7, 0x0a, 0x0e, 0xb2, 0xff, 0xa7, 0x8e, 0x63, 0x6f,
+    0x73, 0xac, 0xbd, 0xbf, 0x09, 0x65, 0x42, 0x27, 0x3a, 0x24, 0x72, 0x1f,
+    0x9d, 0x5e, 0xf4, 0x8e, 0xb2, 0xef, 0x32, 0xca, 0xc3, 0x67, 0xf1, 0xda,
+    0x86, 0x6c, 0xf4, 0x9d, 0x32, 0x30, 0xe3, 0x63, 0xe7, 0xea, 0x17, 0x2d,
+    0x08, 0x7d, 0x11, 0xfa, 0x38, 0xf7, 0x87, 0xa1, 0x46, 0xff, 0xc9, 0x4a,
+    0xdf, 0x85, 0x80, 0x63, 0x3b, 0xdb, 0x6f, 0xbf, 0xd1, 0x33, 0x75, 0xc0,
+    0x9d, 0x65, 0xcc, 0x62, 0xcb, 0x76, 0xb2, 0xb0, 0xd4, 0x9c, 0x5e, 0xf3,
+    0xf5, 0x25, 0x95, 0x3a, 0x26, 0xc6, 0xbd, 0xf2, 0x0b, 0xfb, 0xec, 0x4c,
+    0x0e, 0x2c, 0xbe, 0x19, 0x67, 0x96, 0x58, 0x7b, 0x0f, 0x34, 0x42, 0xcb,
+    0xf6, 0x70, 0x3a, 0x9d, 0x65, 0xff, 0xff, 0xff, 0x74, 0x0d, 0x77, 0xcd,
+    0xcd, 0xed, 0xb4, 0x1a, 0x26, 0xd5, 0xc9, 0x6d, 0x2d, 0x0a, 0x9b, 0x01,
+    0xb9, 0xb3, 0x67, 0xb6, 0xd6, 0x56, 0x26, 0x30, 0x45, 0x62, 0x14, 0xde,
+    0x3b, 0xfd, 0x65, 0xd2, 0xfa, 0xcb, 0xfb, 0xb1, 0xb6, 0xf8, 0x1a, 0xcb,
+    0x79, 0x65, 0x80, 0xb2, 0xee, 0x49, 0x65, 0x42, 0x27, 0x06, 0x38, 0xe2,
+    0xe0, 0x30, 0xe0, 0x88, 0x44, 0x6f, 0xe9, 0xe6, 0x90, 0xa3, 0x53, 0xac,
+    0xba, 0x40, 0x59, 0x79, 0xf3, 0x4b, 0x2f, 0x16, 0x7d, 0x65, 0xef, 0x61,
+    0xd6, 0x57, 0x47, 0xd3, 0xe1, 0x72, 0x1b, 0xf8, 0xdd, 0xdf, 0x25, 0x97,
+    0xa3, 0xae, 0x2c, 0xbe, 0x62, 0x96, 0x2c, 0xbd, 0x3b, 0x92, 0xca, 0x19,
+    0xec, 0x9c, 0x77, 0xe4, 0x17, 0x6b, 0xcb, 0x2f, 0xa0, 0x6f, 0x25, 0x97,
+    0xec, 0xff, 0x9b, 0xeb, 0x2f, 0xcf, 0xd6, 0x75, 0xf5, 0x95, 0xe3, 0xd0,
+    0xf9, 0x3d, 0xe7, 0xd4, 0x96, 0x5e, 0xf6, 0x1d, 0x65, 0x48, 0xdc, 0x7c,
+    0x72, 0xff, 0x8d, 0x9b, 0x33, 0xbf, 0xc1, 0xab, 0x2f, 0x04, 0xa7, 0x59,
+    0x5b, 0x13, 0x5c, 0x9c, 0x5c, 0xd7, 0x1e, 0x96, 0xb4, 0x43, 0xe3, 0xcb,
+    0xe3, 0xed, 0xee, 0x0d, 0x65, 0xa7, 0x59, 0x6d, 0x2c, 0xa9, 0xcd, 0x1b,
+    0x09, 0x5f, 0x4e, 0xef, 0xe5, 0x97, 0xe0, 0xce, 0xef, 0xe5, 0x97, 0xec,
+    0x18, 0x1f, 0xeb, 0x2b, 0x61, 0xf8, 0xf8, 0x8b, 0x79, 0x45, 0xf8, 0x49,
+    0x06, 0x38, 0xb2, 0xa7, 0x3d, 0xc3, 0x4c, 0xee, 0xeb, 0xeb, 0x2f, 0xff,
+    0xe6, 0xd6, 0x1d, 0xfa, 0x16, 0x30, 0xbe, 0xa4, 0xe0, 0x59, 0x7e, 0x9b,
+    0xcd, 0xd7, 0xd6, 0x57, 0x91, 0x0f, 0xf5, 0xdb, 0xf6, 0x10, 0xfd, 0x0b,
+    0x2b, 0x6b, 0x5d, 0x78, 0x88, 0x4f, 0xc8, 0xf3, 0x1b, 0xda, 0x38, 0xb3,
+    0xae, 0xf9, 0x31, 0xe1, 0xdc, 0x44, 0x81, 0x84, 0xf9, 0x84, 0x77, 0xfd,
+    0x83, 0x1b, 0x75, 0x9d, 0x7d, 0x65, 0xf7, 0x65, 0x12, 0x59, 0x5e, 0x3d,
+    0xc7, 0x3a, 0xbf, 0xd1, 0x9f, 0x8f, 0x38, 0xd6, 0x5f, 0xf6, 0x7e, 0x3b,
+    0x12, 0x01, 0x8b, 0x2f, 0x47, 0x52, 0x59, 0x53, 0xa2, 0xa0, 0x64, 0x26,
+    0x18, 0xee, 0x9c, 0xdf, 0x66, 0x17, 0xd6, 0x5f, 0xfe, 0xde, 0xc4, 0x0f,
+    0x33, 0xcb, 0xed, 0x3a, 0xcb, 0xe0, 0xbe, 0xa4, 0xb2, 0xa0, 0xfb, 0x46,
+    0x97, 0x7f, 0xf0, 0xe0, 0x7a, 0x8f, 0xb7, 0x6c, 0x35, 0x97, 0xc1, 0x7d,
+    0x49, 0x65, 0xe8, 0xdd, 0x92, 0xca, 0x19, 0xe0, 0xcc, 0x45, 0x7f, 0x7f,
+    0xb1, 0x8c, 0xfa, 0x59, 0x7e, 0xfb, 0x14, 0x01, 0x65, 0xff, 0x4d, 0xcd,
+    0xee, 0x53, 0x84, 0x6b, 0x2f, 0xe7, 0x30, 0x00, 0x3e, 0xda, 0xcb, 0xec,
+    0xfe, 0x1d, 0x65, 0xc4, 0x6a, 0xca, 0x73, 0x70, 0x12, 0x1a, 0x92, 0x22,
+    0xb8, 0xd5, 0x7e, 0x91, 0x05, 0xf8, 0xb2, 0xff, 0xd0, 0x41, 0xfc, 0x82,
+    0x5f, 0xe2, 0xca, 0xc3, 0xe5, 0xd1, 0x3d, 0xff, 0x8a, 0x3f, 0x2c, 0xdc,
+    0x72, 0x02, 0xcb, 0xc0, 0x60, 0x2c, 0xbe, 0x9e, 0x6f, 0x32, 0xcb, 0x7b,
+    0x0f, 0x00, 0x23, 0x97, 0x39, 0xd6, 0x5f, 0xf6, 0xe7, 0x9b, 0x61, 0xba,
+    0xce, 0x2c, 0xae, 0xcf, 0x54, 0x22, 0xd7, 0xfe, 0x27, 0x37, 0xcf, 0x2e,
+    0x30, 0xd6, 0x5f, 0xbc, 0xc4, 0xf3, 0xac, 0xb7, 0x6b, 0x2f, 0x83, 0x2c,
+    0xe7, 0x66, 0xe4, 0x89, 0xe8, 0xe8, 0xaf, 0x27, 0x7b, 0xc5, 0x9f, 0x59,
+    0x70, 0x87, 0x59, 0x4c, 0x7a, 0xa4, 0x45, 0xf1, 0xbb, 0xba, 0x1a, 0xcb,
+    0xb7, 0xba, 0xcb, 0xfd, 0x1a, 0x8e, 0xf3, 0x7e, 0x2c, 0xa8, 0x5e, 0x11,
+    0x9d, 0x0a, 0x50, 0x8d, 0x19, 0x0e, 0x42, 0x14, 0xd2, 0x3e, 0x8c, 0x18,
+    0x9a, 0x68, 0x63, 0xea, 0x11, 0x07, 0x21, 0xf3, 0xf9, 0x3e, 0x7e, 0x32,
+    0x70, 0x96, 0xef, 0x18, 0xdb, 0x18, 0xbf, 0x4d, 0x1f, 0x2d, 0xeb, 0x2f,
+    0xa6, 0xc6, 0x02, 0xca, 0xd8, 0x79, 0x90, 0x55, 0x7f, 0xf4, 0x6f, 0xd4,
+    0x6b, 0x1b, 0xd0, 0x35, 0x97, 0x46, 0x2c, 0xa2, 0x3d, 0x9e, 0x22, 0x5c,
+    0xe7, 0x59, 0x74, 0xdb, 0x6b, 0x28, 0x8d, 0x8e, 0xf1, 0x6b, 0xff, 0xf3,
+    0x1f, 0xa9, 0x73, 0x67, 0xb3, 0xfc, 0x27, 0xfa, 0xcb, 0x83, 0xf5, 0x95,
+    0x24, 0xd7, 0xf1, 0xf1, 0x94, 0xbe, 0x45, 0xb6, 0xb1, 0x61, 0x7b, 0x5c,
+    0x30, 0xf9, 0xb6, 0xa2, 0xe1, 0x4c, 0x2a, 0x36, 0x88, 0x51, 0x8a, 0x23,
+    0x1b, 0xda, 0x50, 0x83, 0x15, 0x08, 0xc5, 0x52, 0x06, 0xd3, 0x63, 0x8a,
+    0x4c, 0x7c, 0xf2, 0xa6, 0xa5, 0x38, 0xe0, 0x3a, 0x42, 0x16, 0x56, 0xa8,
+    0x46, 0xcb, 0x0c, 0xee, 0x7b, 0x1b, 0xa9, 0xd6, 0x66, 0x9c, 0x11, 0x9a,
+    0x90, 0x1f, 0xa9, 0xf4, 0x03, 0xce, 0xc8, 0xfa, 0xb2, 0x38, 0x79, 0xe8,
+    0x20, 0x4e, 0x5b, 0x0a, 0xe1, 0xb4, 0x54, 0xd4, 0x2e, 0x57, 0x48, 0x5f,
+    0xa7, 0xb5, 0x06, 0x39, 0x7d, 0xf1, 0xcb, 0x19, 0x0c, 0xcd, 0xb9, 0xdc,
+    0xd1, 0x27, 0xf1, 0xb7, 0x65, 0x59, 0xd0, 0xb8, 0x64, 0x01, 0x32, 0xa7,
+    0xb1, 0x89, 0x89, 0x7f, 0xf8, 0x59, 0xde, 0x42, 0xf3, 0x5d, 0xbb, 0xf6,
+    0xa8, 0x9b, 0x17, 0xed, 0x76, 0xef, 0xda, 0xa2, 0xad, 0x5c, 0x0d, 0xeb,
+    0x2e, 0xe6, 0xda, 0xcb, 0x0b, 0xc3, 0xe9, 0xf1, 0xb7, 0x06, 0x6e, 0xdf,
+    0xa5, 0x97, 0x3c, 0x2c, 0xbf, 0xd2, 0x90, 0x7e, 0x51, 0x25, 0x97, 0xd9,
+    0xe7, 0xfa, 0xcb, 0x0a, 0x70, 0xf5, 0x08, 0xce, 0xff, 0xff, 0xd2, 0x8d,
+    0xf0, 0xda, 0xed, 0x8e, 0xf2, 0x62, 0xc1, 0xe1, 0xab, 0x2f, 0xef, 0xb6,
+    0xce, 0x63, 0x2c, 0xbf, 0xf4, 0xb2, 0x58, 0xf2, 0x28, 0x3a, 0xcb, 0x6a,
+    0x0f, 0xa9, 0x8b, 0xaf, 0xf6, 0xb3, 0xb8, 0x00, 0x87, 0x59, 0x7f, 0xb8,
+    0xff, 0x17, 0xc2, 0x85, 0x97, 0xf4, 0x4f, 0xa8, 0xc1, 0xac, 0xa9, 0x1f,
+    0x0f, 0x8d, 0x2f, 0xff, 0xd1, 0x3c, 0x6a, 0x0f, 0x11, 0xff, 0x30, 0x0e,
+    0xb2, 0xa0, 0xfd, 0xbc, 0x45, 0x7a, 0x07, 0x32, 0xca, 0x92, 0xa4, 0x66,
+    0x86, 0xb6, 0x89, 0xbd, 0x18, 0x67, 0xc8, 0x6f, 0xb4, 0x7f, 0x0d, 0x65,
+    0xff, 0xda, 0x91, 0x67, 0xf9, 0x07, 0xff, 0x6b, 0x2a, 0x0f, 0xa0, 0x24,
+    0x77, 0x87, 0x84, 0xb2, 0xff, 0xce, 0xdb, 0xb1, 0xef, 0x96, 0x49, 0x65,
+    0xfa, 0x4d, 0xdb, 0xe9, 0x65, 0x78, 0xf9, 0xf8, 0x7f, 0x79, 0xdf, 0xb5,
+    0x45, 0x68, 0xbf, 0x1b, 0xd7, 0x03, 0xd2, 0xca, 0x83, 0xf7, 0xec, 0x89,
+    0x8a, 0x6f, 0xe0, 0xb1, 0xba, 0x81, 0xac, 0xbf, 0xd1, 0xa0, 0x09, 0xc8,
+    0xc5, 0x97, 0xff, 0x9b, 0xf2, 0x8e, 0xfc, 0xdf, 0xe3, 0xf4, 0xb2, 0xb4,
+    0x8d, 0xa3, 0x97, 0x78, 0xbb, 0x79, 0x9d, 0xfc, 0x0d, 0x99, 0xa6, 0x35,
+    0x65, 0xff, 0x60, 0xdb, 0x93, 0x14, 0x0d, 0x65, 0x0c, 0xfa, 0x1c, 0xc2,
+    0xff, 0xa3, 0xbc, 0x3e, 0x17, 0xf6, 0xd6, 0x5f, 0xef, 0x46, 0x81, 0xfc,
+    0x9d, 0x65, 0xfe, 0x2c, 0x96, 0xc6, 0xf4, 0x96, 0x5d, 0xe6, 0x3a, 0x28,
+    0xfc, 0x77, 0xf3, 0x4b, 0xff, 0x9e, 0x5b, 0x35, 0x1f, 0x6e, 0xd8, 0x6b,
+    0x2d, 0x25, 0x96, 0x94, 0x1e, 0xbf, 0x48, 0xd7, 0x83, 0xcf, 0xac, 0xbf,
+    0xff, 0x49, 0xc9, 0xbf, 0x1e, 0xef, 0x06, 0x51, 0xc5, 0x97, 0xff, 0xe6,
+    0xdd, 0x82, 0x0c, 0x9b, 0x9c, 0x8d, 0x87, 0xed, 0x65, 0x32, 0x2b, 0x5d,
+    0x4e, 0xe6, 0xe9, 0x65, 0xff, 0xf7, 0x71, 0xac, 0x03, 0x9d, 0xe5, 0x0d,
+    0xda, 0xcb, 0xff, 0xe9, 0x73, 0x0a, 0x0e, 0xf9, 0xff, 0xc1, 0xd6, 0x54,
+    0x22, 0x71, 0xd3, 0xeb, 0x48, 0xd4, 0xfc, 0x2c, 0xe8, 0xe9, 0xf3, 0xfa,
+    0x19, 0x5f, 0x87, 0xad, 0xff, 0xff, 0xdb, 0xdb, 0xfc, 0xc3, 0x7b, 0xf3,
+    0x7f, 0x26, 0x28, 0x3c, 0xf8, 0x62, 0xcb, 0xff, 0xef, 0xbe, 0x70, 0x79,
+    0x2f, 0x46, 0xf1, 0xc2, 0xcb, 0xff, 0xff, 0xf9, 0xbe, 0x3c, 0x0f, 0x36,
+    0x7b, 0x3b, 0xf0, 0x67, 0x6c, 0x2e, 0xa5, 0xce, 0x06, 0x16, 0x53, 0xa3,
+    0x74, 0x94, 0x2a, 0x13, 0x75, 0x78, 0xd5, 0x2f, 0xef, 0xbf, 0xb6, 0x0e,
+    0x16, 0x5e, 0x90, 0x66, 0x59, 0x50, 0x79, 0xae, 0x5f, 0x7d, 0x2f, 0xb4,
+    0xeb, 0x2f, 0xdc, 0xe3, 0x94, 0xeb, 0x2f, 0xc2, 0x7c, 0xa0, 0x0b, 0x2d,
+    0xe5, 0x95, 0xd2, 0x21, 0x0e, 0x47, 0xbc, 0xa0, 0x42, 0x8b, 0xff, 0xe0,
+    0x3e, 0x79, 0xdb, 0x76, 0x0e, 0x4e, 0x6a, 0xcb, 0xff, 0x37, 0x30, 0x7d,
+    0x72, 0x35, 0xc5, 0x97, 0xf9, 0xe5, 0xf6, 0x9f, 0xcc, 0xb2, 0xa1, 0x30,
+    0x3c, 0x41, 0xed, 0x41, 0x8f, 0xef, 0xd9, 0xe6, 0xc3, 0xac, 0xbf, 0x30,
+    0x0e, 0xda, 0x59, 0x7f, 0xe1, 0xb6, 0xf6, 0x1e, 0x19, 0x9e, 0x59, 0x7f,
+    0xff, 0xcf, 0xf8, 0x27, 0x9e, 0x35, 0x0d, 0x28, 0x39, 0x41, 0xab, 0x2f,
+    0xf3, 0x71, 0x82, 0x2b, 0x1c, 0x2c, 0xa2, 0x44, 0xcf, 0xd8, 0xef, 0xef,
+    0x47, 0x64, 0xe7, 0x59, 0x7f, 0xe7, 0x6e, 0xfc, 0xe1, 0x9f, 0x4c, 0xb2,
+    0x98, 0xfb, 0x08, 0xb6, 0xf7, 0x61, 0x85, 0x97, 0xfa, 0x78, 0xc2, 0x1f,
+    0xa1, 0x65, 0xb1, 0x8f, 0x3d, 0xc7, 0x6a, 0x75, 0x49, 0x03, 0x26, 0xc2,
+    0x76, 0x86, 0xcf, 0xa1, 0x1c, 0x4d, 0xf7, 0xff, 0x9f, 0xae, 0x7a, 0x39,
+    0x9f, 0x27, 0x35, 0x65, 0xfe, 0x94, 0x6a, 0x78, 0xd4, 0xeb, 0x2f, 0xa5,
+    0xac, 0x3a, 0xcb, 0xd9, 0xa0, 0x2c, 0xbf, 0x4d, 0x83, 0x3e, 0xe2, 0xcb,
+    0xf8, 0xa0, 0xce, 0xa5, 0xc5, 0x95, 0xd2, 0x26, 0x58, 0x8a, 0x61, 0xcd,
+    0xd2, 0xcb, 0xc6, 0x87, 0xb5, 0x95, 0x09, 0x97, 0x64, 0x33, 0x8d, 0x41,
+    0xbf, 0xff, 0xff, 0x37, 0x79, 0xf8, 0x2f, 0xf3, 0x64, 0x30, 0xf0, 0xfb,
+    0x35, 0x0d, 0x27, 0xe2, 0xcb, 0xff, 0xce, 0xdf, 0x0e, 0x9f, 0x82, 0x61,
+    0x76, 0xb2, 0xff, 0xfb, 0x40, 0xe0, 0x3c, 0xf2, 0x6f, 0x94, 0x01, 0x65,
+    0x62, 0x63, 0xbe, 0x84, 0x20, 0x52, 0xaf, 0xec, 0xfb, 0x90, 0x02, 0xb2,
+    0xfe, 0xf6, 0xc6, 0x9d, 0xc9, 0x65, 0xfc, 0x7e, 0x0c, 0x9c, 0xc5, 0x97,
+    0xe0, 0x73, 0x69, 0xed, 0x3d, 0xa6, 0xb2, 0xa0, 0xfa, 0x5c, 0xba, 0xfd,
+    0xdb, 0x0f, 0x09, 0x65, 0xf6, 0x9a, 0x0e, 0xb2, 0xe7, 0x1a, 0xca, 0xe8,
+    0xdb, 0x80, 0x86, 0xb1, 0x10, 0x0e, 0xbd, 0x52, 0x4e, 0x17, 0x0b, 0x0a,
+    0x13, 0x1c, 0x85, 0x05, 0xff, 0x6a, 0x62, 0xc1, 0xfa, 0x37, 0xac, 0xbf,
+    0xf0, 0xfc, 0x17, 0x37, 0x06, 0xf2, 0x59, 0x58, 0x7f, 0x44, 0x77, 0x5b,
+    0x5b, 0x6b, 0x8a, 0x29, 0x19, 0x14, 0x34, 0xc4, 0xa7, 0x09, 0xe1, 0x7c,
+    0x32, 0x1c, 0x8f, 0x4c, 0xd8, 0x53, 0xf7, 0x0c, 0x4e, 0xa1, 0x24, 0xd2,
+    0x83, 0xf5, 0x1d, 0x81, 0xdd, 0x7d, 0x1d, 0x3b, 0xca, 0x84, 0x03, 0x09,
+    0x46, 0xf1, 0xc8, 0xd4, 0xbf, 0x1d, 0xd0, 0x90, 0xc0, 0xbe, 0x16, 0x71,
+    0x37, 0x16, 0x50, 0xb4, 0xe6, 0x8d, 0x8d, 0xc6, 0xfc, 0x64, 0x76, 0xdd,
+    0xac, 0xbf, 0xff, 0x7b, 0x0b, 0x0d, 0xf3, 0xcb, 0xc6, 0x38, 0x87, 0x59,
+    0x7d, 0xdb, 0xbf, 0x6a, 0x8b, 0x01, 0x52, 0x44, 0x3e, 0x95, 0xef, 0xf1,
+    0xdb, 0x81, 0x8d, 0x4c, 0xb2, 0xfb, 0xb1, 0x3d, 0x32, 0xca, 0x83, 0xda,
+    0x73, 0x4b, 0xc0, 0x10, 0x0b, 0x2f, 0xc3, 0xcc, 0x07, 0x16, 0x54, 0x27,
+    0x27, 0x90, 0xb1, 0xe3, 0xef, 0xc8, 0x04, 0x1e, 0xbf, 0xc3, 0x81, 0x7d,
+    0x7c, 0x30, 0xb2, 0x85, 0xa2, 0x14, 0x29, 0xf7, 0xed, 0x76, 0xef, 0xda,
+    0xa2, 0x75, 0x5f, 0xff, 0xef, 0x44, 0xe3, 0xc3, 0x8b, 0xe7, 0x33, 0xcd,
+    0xc0, 0xce, 0xb2, 0xfc, 0x2c, 0xef, 0x21, 0x78, 0x89, 0xb9, 0x8d, 0xaf,
+    0xff, 0xe2, 0x0c, 0x7f, 0x98, 0x42, 0xc0, 0x08, 0xf3, 0xce, 0xb2, 0xfe,
+    0x21, 0x73, 0x3c, 0xce, 0xb2, 0xa1, 0x11, 0x98, 0xb9, 0x78, 0xd8, 0x3a,
+    0xcb, 0xd3, 0xc7, 0x6b, 0x2f, 0xfb, 0xc1, 0xe8, 0x6d, 0xbe, 0x06, 0xb2,
+    0xd9, 0x39, 0xed, 0x7c, 0x7a, 0xf9, 0xfb, 0x10, 0xeb, 0x2f, 0x4b, 0x82,
+    0xcd, 0x46, 0x19, 0x3b, 0xef, 0x28, 0xbf, 0x6b, 0xb7, 0x7e, 0xd5, 0x16,
+    0xca, 0xff, 0xef, 0x37, 0xfc, 0x1e, 0xb0, 0xef, 0xd2, 0xcb, 0xef, 0xe9,
+    0xba, 0x59, 0x7f, 0x7d, 0xfd, 0xb0, 0x70, 0xb2, 0xff, 0xfe, 0x90, 0xbe,
+    0x43, 0x60, 0xdb, 0x39, 0x9f, 0x28, 0x59, 0x50, 0x88, 0x87, 0x2f, 0xbf,
+    0x4a, 0x1b, 0x7c, 0x2c, 0xbf, 0x61, 0x00, 0xf8, 0xb2, 0xff, 0xa3, 0x82,
+    0xfc, 0xdd, 0xbe, 0x96, 0x5f, 0xf3, 0x61, 0x1b, 0x1b, 0xdf, 0xcb, 0x2a,
+    0x11, 0x85, 0xd9, 0x40, 0x09, 0xb6, 0xce, 0xef, 0xfa, 0x25, 0x1a, 0x9e,
+    0x35, 0x3a, 0xcb, 0xf0, 0xfc, 0xc6, 0x0a, 0x16, 0x58, 0x5e, 0x2a, 0xb1,
+    0xec, 0xd9, 0x91, 0x8f, 0x0a, 0xb7, 0x87, 0x19, 0x20, 0x70, 0xea, 0xff,
+    0xc4, 0x2c, 0xe1, 0x6f, 0x93, 0xee, 0xac, 0xbf, 0x3f, 0x3c, 0xf2, 0x59,
+    0x7f, 0x83, 0xf0, 0x68, 0x32, 0xe2, 0xca, 0xd1, 0xee, 0x11, 0x3d, 0xfc,
+    0xfa, 0xdb, 0x72, 0x35, 0x65, 0xe0, 0xf0, 0x5e, 0x1e, 0x89, 0x10, 0xdc,
+    0xe0, 0xc4, 0xc8, 0xc1, 0x0e, 0xfb, 0xba, 0xed, 0x65, 0xf7, 0x6e, 0xfd,
+    0xaa, 0x2e, 0x65, 0x8e, 0xb2, 0xb4, 0x78, 0x26, 0x18, 0x5f, 0xc5, 0x9d,
+    0x01, 0xa4, 0xb2, 0xc2, 0xb5, 0x95, 0xa3, 0xc2, 0xde, 0x5b, 0x79, 0xcf,
+    0xc5, 0x97, 0x4c, 0x75, 0x94, 0xb2, 0xa1, 0x32, 0x2c, 0x5a, 0x66, 0x57,
+    0x24, 0x30, 0x73, 0x6c, 0x62, 0xfe, 0x9c, 0x5e, 0xd5, 0xb5, 0xed, 0x7b,
+    0x52, 0xcb, 0xfb, 0xa1, 0x7f, 0xe3, 0xe9, 0x65, 0x0b, 0x46, 0x7e, 0x2c,
+    0x3a, 0x35, 0xfb, 0x5d, 0xbb, 0xf6, 0xa8, 0xbb, 0xd7, 0xfa, 0x42, 0xf9,
+    0xad, 0x31, 0x8b, 0x2c, 0x2f, 0x0f, 0xb5, 0xcd, 0xaf, 0xf8, 0xa1, 0xe7,
+    0xeb, 0x90, 0x35, 0x97, 0x0c, 0x0b, 0x2e, 0x8d, 0xd5, 0x97, 0x8b, 0x27,
+    0x59, 0x61, 0x63, 0x44, 0x29, 0xa7, 0x20, 0x17, 0x21, 0x9a, 0x88, 0x76,
+    0xef, 0x66, 0x32, 0x10, 0xfb, 0x46, 0xea, 0x18, 0xad, 0x5b, 0xca, 0xea,
+    0x52, 0x29, 0xe1, 0x81, 0xe8, 0x68, 0x3c, 0x39, 0x01, 0x2b, 0xdc, 0xa3,
+    0x98, 0xe4, 0xa2, 0x4f, 0xc2, 0x74, 0x48, 0x56, 0xdf, 0xf8, 0xc7, 0x29,
+    0xf8, 0xc5, 0xd4, 0x96, 0x5f, 0xfd, 0x93, 0xe1, 0x9e, 0xce, 0x63, 0x12,
+    0xcb, 0xff, 0x31, 0x16, 0x1b, 0xd8, 0x5c, 0x6b, 0x2f, 0xd9, 0xe1, 0xb9,
+    0x2c, 0xb9, 0x85, 0xf9, 0x1c, 0xe4, 0x81, 0xc4, 0x31, 0x0f, 0xaf, 0xdc,
+    0xe1, 0xde, 0x4b, 0x2f, 0xff, 0xde, 0x82, 0x9f, 0x81, 0x76, 0x97, 0x3c,
+    0xf2, 0x59, 0x7f, 0xfe, 0xf4, 0x14, 0xfc, 0x0b, 0xb4, 0xb9, 0xe7, 0x92,
+    0xcb, 0xff, 0xff, 0xf9, 0xa0, 0xbe, 0x4e, 0x6e, 0x7c, 0x3f, 0x6f, 0xf3,
+    0xcd, 0xa8, 0x9d, 0xf5, 0xda, 0xcb, 0xbc, 0xc3, 0x46, 0xef, 0x95, 0x6e,
+    0xe4, 0x2c, 0xbf, 0xfb, 0xae, 0xc2, 0xfd, 0x7f, 0x30, 0x8d, 0x59, 0x78,
+    0x9c, 0x5c, 0x27, 0xca, 0x32, 0x8e, 0xe3, 0x32, 0xe1, 0x77, 0xc5, 0xaf,
+    0xed, 0xaf, 0x68, 0x8e, 0xb5, 0x3a, 0xcb, 0xc7, 0x0e, 0xe2, 0xcb, 0xc1,
+    0x73, 0xac, 0xbe, 0x0e, 0xe8, 0xe1, 0x65, 0xfb, 0x37, 0x7f, 0x06, 0xac,
+    0xb6, 0xea, 0xca, 0x9c, 0xdf, 0xe1, 0x5d, 0xf7, 0x1b, 0xbd, 0x2c, 0xa9,
+    0xd1, 0xc9, 0xa2, 0x0f, 0x0e, 0x13, 0x21, 0x84, 0x37, 0xfe, 0xe3, 0x9b,
+    0xe6, 0x82, 0x0c, 0x2c, 0xbf, 0xf7, 0x9f, 0xef, 0xee, 0xa5, 0x9f, 0x59,
+    0x58, 0x7f, 0x8c, 0x7b, 0x73, 0x81, 0x65, 0xff, 0xff, 0xe2, 0x73, 0x0b,
+    0x3f, 0xfc, 0x9e, 0x09, 0xcd, 0xe1, 0xe3, 0x08, 0x6b, 0x2f, 0x60, 0x9c,
+    0x59, 0x58, 0x8a, 0x8d, 0x0b, 0x6e, 0xba, 0xde, 0x69, 0xb8, 0xb2, 0xfe,
+    0x28, 0x01, 0xde, 0x4b, 0x2f, 0xe2, 0x80, 0x1d, 0xe4, 0xb2, 0xff, 0x6d,
+    0x7b, 0x41, 0x60, 0xfc, 0x15, 0x97, 0xec, 0xdf, 0x05, 0xfc, 0x3e, 0x9e,
+    0x16, 0x5f, 0x88, 0x3c, 0xf3, 0x6c, 0x47, 0x86, 0x0e, 0xea, 0x12, 0xb7,
+    0xe1, 0xb6, 0xfd, 0x62, 0xcb, 0x7a, 0x0f, 0xef, 0x14, 0xaf, 0xf3, 0xcb,
+    0x59, 0xb6, 0xc0, 0x59, 0x7f, 0xa0, 0xa3, 0xbe, 0x00, 0xeb, 0x2f, 0xa2,
+    0x6f, 0x32, 0xcb, 0xce, 0xfd, 0xaa, 0x25, 0x75, 0xfe, 0x35, 0xc8, 0x1f,
+    0xcf, 0x2c, 0xa9, 0xcf, 0xfb, 0xb2, 0x26, 0x29, 0xbd, 0xec, 0xed, 0x65,
+    0xf6, 0x00, 0x3c, 0x59, 0x73, 0xf5, 0x86, 0xfc, 0x87, 0x6f, 0xce, 0x6b,
+    0xfe, 0x4b, 0x2f, 0xff, 0xb8, 0xcf, 0xd7, 0x9d, 0xbe, 0x1d, 0x3f, 0x16,
+    0x5b, 0xa2, 0x3f, 0x7f, 0x94, 0x5f, 0xfd, 0xec, 0x97, 0x7e, 0x61, 0xc1,
+    0x7d, 0x65, 0x31, 0xf6, 0x7c, 0xa2, 0xa4, 0xaa, 0xa8, 0x64, 0xdd, 0x9a,
+    0xea, 0x16, 0x27, 0x6f, 0x28, 0xc3, 0xaf, 0xfd, 0xdb, 0x6b, 0x3c, 0xda,
+    0xf3, 0xac, 0xbf, 0xf8, 0x3c, 0xf3, 0xcb, 0xec, 0xe4, 0x05, 0x97, 0xbc,
+    0xdf, 0xe9, 0x10, 0x3a, 0x3e, 0xbf, 0xb4, 0xf2, 0x7e, 0xa4, 0xb2, 0xfc,
+    0x4e, 0x60, 0x87, 0x59, 0x50, 0x7a, 0xff, 0x2e, 0xbf, 0x43, 0x01, 0x8e,
+    0xb2, 0xf6, 0x9b, 0xa5, 0x95, 0x23, 0xc3, 0xf9, 0x35, 0xfa, 0x27, 0xfe,
+    0x79, 0x65, 0xfd, 0x07, 0x1e, 0x9f, 0xb5, 0x95, 0xe3, 0xd6, 0x22, 0x8b,
+    0xff, 0xc5, 0xff, 0x64, 0xba, 0xfe, 0xa3, 0x0c, 0x59, 0x7f, 0xff, 0xf9,
+    0xc8, 0x48, 0x06, 0x4b, 0xd1, 0xbc, 0x70, 0x2f, 0x08, 0x32, 0xce, 0x2c,
+    0xa8, 0x46, 0x26, 0x92, 0xee, 0x94, 0xeb, 0x2f, 0xbb, 0x79, 0x62, 0xcb,
+    0xff, 0xff, 0xff, 0xf0, 0xdc, 0xe7, 0x79, 0x4a, 0x04, 0x81, 0xb6, 0x9f,
+    0xa1, 0xfa, 0x35, 0xc6, 0x77, 0x28, 0xef, 0xd1, 0x32, 0xcb, 0xf8, 0xbe,
+    0x1f, 0x0a, 0x61, 0x65, 0xcd, 0xf8, 0x47, 0x0b, 0x42, 0xc2, 0xb1, 0x33,
+    0x47, 0x8c, 0x0e, 0xfe, 0x20, 0x6b, 0x4d, 0x3a, 0xcb, 0xfd, 0x9a, 0xe3,
+    0xf6, 0x1e, 0x96, 0x5f, 0xff, 0xdd, 0x73, 0x35, 0xff, 0xbc, 0xe2, 0x1c,
+    0x7e, 0x63, 0x56, 0x56, 0x22, 0x55, 0xcd, 0x6f, 0xf7, 0x58, 0xdc, 0xe0,
+    0x61, 0x65, 0x82, 0xb2, 0xfb, 0xed, 0x9a, 0x59, 0x4b, 0x2f, 0xbf, 0x1f,
+    0xe2, 0xcb, 0x9e, 0x5b, 0x51, 0xad, 0xc0, 0xba, 0x9d, 0x11, 0xfe, 0x11,
+    0xde, 0x9d, 0x7f, 0xd8, 0xdb, 0xca, 0x33, 0x52, 0x59, 0x7f, 0xfe, 0xfc,
+    0xb3, 0x71, 0xc8, 0x1d, 0x7f, 0x51, 0x86, 0x2c, 0x30, 0xdc, 0x5f, 0xba,
+    0xff, 0xa0, 0x0b, 0x2b, 0x11, 0xfc, 0xed, 0x61, 0x6a, 0xbf, 0xff, 0xd8,
+    0x36, 0xef, 0xcc, 0x31, 0xe1, 0x82, 0x4d, 0xe0, 0x9a, 0xb2, 0xff, 0xf4,
+    0xc5, 0x1f, 0xe7, 0xfa, 0xed, 0x8a, 0x75, 0x97, 0xfc, 0xe6, 0x0f, 0xd1,
+    0x3e, 0x18, 0xb2, 0x99, 0x11, 0x04, 0x9b, 0x7f, 0xfc, 0xc0, 0xc3, 0xb7,
+    0xf9, 0x07, 0x7e, 0xbe, 0xb2, 0xff, 0xfe, 0xdf, 0x83, 0xd4, 0x07, 0x8d,
+    0xbd, 0xd8, 0x61, 0x85, 0x95, 0x88, 0xac, 0x64, 0xfb, 0xff, 0xfd, 0xdb,
+    0xe9, 0xfd, 0xd4, 0xb3, 0xf9, 0xf8, 0x08, 0xaf, 0x16, 0x5f, 0xfc, 0xfd,
+    0x49, 0xbf, 0xe8, 0xd7, 0xe1, 0x65, 0xff, 0x41, 0xff, 0x93, 0x49, 0xbe,
+    0xb2, 0xa4, 0x98, 0x1b, 0x10, 0x9d, 0x97, 0xe8, 0x97, 0xff, 0xfb, 0xcc,
+    0x31, 0xe1, 0x9d, 0x7c, 0x2f, 0xcf, 0x18, 0xe3, 0x59, 0x7c, 0x17, 0xd4,
+    0x96, 0x5f, 0xc5, 0x13, 0x81, 0xfe, 0xb2, 0xff, 0x38, 0xc4, 0xdd, 0x82,
+    0x92, 0xcb, 0x47, 0x67, 0xc6, 0x72, 0xdb, 0xff, 0xe3, 0xb9, 0x03, 0xc6,
+    0x39, 0x4f, 0xdb, 0x4e, 0xb2, 0xff, 0xfe, 0xd3, 0xf3, 0x0a, 0x30, 0x1c,
+    0xc9, 0xa3, 0xae, 0x2c, 0xb9, 0xbe, 0xe8, 0xac, 0x0a, 0x95, 0x0d, 0x38,
+    0x66, 0x84, 0x2b, 0xc3, 0x52, 0xff, 0x82, 0x03, 0xbc, 0xb9, 0xa1, 0xac,
+    0xbf, 0xff, 0xd8, 0xc5, 0xfc, 0x2d, 0x84, 0xe3, 0x82, 0x9e, 0x34, 0xb2,
+    0xbe, 0x89, 0x8d, 0xe7, 0x56, 0xd2, 0xcb, 0xff, 0xf7, 0x5f, 0x28, 0xf3,
+    0xf3, 0x3b, 0x27, 0xce, 0xd6, 0x56, 0x22, 0x2f, 0xb2, 0x50, 0x88, 0xdf,
+    0xff, 0xfe, 0xf6, 0x1c, 0x0f, 0xac, 0xdf, 0x83, 0xce, 0x05, 0xfa, 0xf1,
+    0x8f, 0xf5, 0x97, 0xfa, 0x3c, 0xdf, 0xe3, 0xf4, 0xb2, 0xff, 0xd9, 0xd7,
+    0xff, 0x07, 0xf6, 0x4e, 0xb2, 0xff, 0xa6, 0xef, 0xcc, 0x78, 0xd1, 0xab,
+    0x2f, 0xf0, 0x33, 0x59, 0x9f, 0xe2, 0xca, 0xc3, 0xee, 0xe8, 0xf2, 0xa1,
+    0x7f, 0xb8, 0x70, 0xee, 0xc8, 0xf4, 0x3b, 0x3d, 0xf4, 0x7d, 0x45, 0x1a,
+    0xe7, 0xcc, 0x02, 0xf4, 0x61, 0x98, 0x90, 0xae, 0xbd, 0x80, 0x75, 0x97,
+    0xb5, 0x9d, 0x2c, 0xbd, 0xe7, 0x97, 0x8d, 0xc0, 0x06, 0xef, 0xff, 0xcc,
+    0x3f, 0x3b, 0x7e, 0x0b, 0xb6, 0x39, 0xd9, 0x65, 0xb3, 0xc8, 0x85, 0x23,
+    0x2b, 0xfe, 0xce, 0xb8, 0x38, 0x72, 0x9d, 0x65, 0xfe, 0x7e, 0x41, 0x7f,
+    0xcc, 0xb2, 0xfc, 0x79, 0xb8, 0xc4, 0xb2, 0xff, 0xee, 0xdb, 0x5e, 0xc9,
+    0xbc, 0xda, 0x9d, 0x65, 0xff, 0xce, 0x0c, 0x2e, 0xbf, 0xa8, 0xc3, 0x16,
+    0x5f, 0xf3, 0xcb, 0x9e, 0x8d, 0x08, 0x35, 0x95, 0x24, 0xdf, 0xb0, 0x9c,
+    0xd3, 0x9e, 0xcc, 0x7a, 0x28, 0x24, 0x7f, 0xa2, 0x5f, 0x81, 0x33, 0x04,
+    0x56, 0xb2, 0xff, 0xff, 0x7b, 0x3b, 0x2c, 0x3e, 0x16, 0x7c, 0x20, 0x3b,
+    0xc9, 0x65, 0xfd, 0xe7, 0x39, 0x47, 0x4b, 0x2f, 0xfc, 0x59, 0xec, 0x9a,
+    0x4d, 0xa9, 0x2c, 0xbf, 0xff, 0xfe, 0x04, 0x17, 0x6f, 0xf7, 0xe8, 0x19,
+    0xbd, 0xbf, 0x2f, 0x37, 0xf8, 0xc3, 0x59, 0x7f, 0xe6, 0xde, 0xdf, 0x9a,
+    0x50, 0x5f, 0x59, 0x50, 0x9d, 0xb4, 0x8b, 0x71, 0x7f, 0xb2, 0xde, 0x8f,
+    0xbe, 0xff, 0x7f, 0xf9, 0xf2, 0x5e, 0xc6, 0x2c, 0x06, 0xde, 0x2c, 0xbc,
+    0xf2, 0x17, 0xb4, 0x37, 0x83, 0xd1, 0x18, 0xf4, 0xa1, 0x8e, 0x38, 0x64,
+    0x64, 0xe2, 0x3f, 0x70, 0xe5, 0xea, 0x11, 0x8c, 0xc9, 0x33, 0xc6, 0xa1,
+    0xca, 0x72, 0x2f, 0x46, 0x98, 0xe5, 0x00, 0x86, 0x18, 0xac, 0x84, 0xa3,
+    0xc0, 0xe5, 0x20, 0x73, 0xf2, 0xb9, 0x44, 0x94, 0x39, 0xba, 0xb1, 0x70,
+    0xaf, 0x16, 0x5f, 0xbf, 0x01, 0x15, 0xe2, 0xcb, 0xfe, 0x96, 0x7f, 0xcd,
+    0x1a, 0x02, 0xcb, 0xf6, 0x76, 0xf2, 0xc5, 0x97, 0xfb, 0x06, 0xc5, 0xfc,
+    0xf2, 0xcb, 0xff, 0xf8, 0x7e, 0x82, 0x9f, 0x81, 0x76, 0x97, 0x3c, 0xf2,
+    0x59, 0x7b, 0x3c, 0x2f, 0x69, 0xa6, 0x61, 0x83, 0x5d, 0x15, 0xf8, 0xe0,
+    0x89, 0xf8, 0x63, 0x79, 0xa1, 0xd6, 0x5e, 0xfc, 0x0d, 0x25, 0xff, 0xef,
+    0x3b, 0x7e, 0x24, 0xda, 0x9c, 0x20, 0x49, 0x7b, 0x42, 0xb1, 0x70, 0x7c,
+    0xdc, 0x1c, 0xbc, 0xfd, 0x8b, 0x92, 0x2e, 0x47, 0x08, 0x0b, 0x0b, 0x1b,
+    0xa2, 0xc4, 0xee, 0x51, 0x79, 0xeb, 0xc8, 0x1f, 0xca, 0xaf, 0xdf, 0x19,
+    0x4d, 0xff, 0xe1, 0x67, 0x79, 0x0b, 0xcd, 0x76, 0xef, 0xda, 0xa2, 0x61,
+    0x5f, 0x43, 0x09, 0xe5, 0x97, 0xfb, 0xb8, 0xeb, 0xe5, 0x12, 0x59, 0x7f,
+    0xbd, 0x04, 0xe7, 0x8d, 0xd5, 0x97, 0x98, 0x4f, 0x2c, 0xbf, 0xff, 0xb3,
+    0x7b, 0x8f, 0xd0, 0x2f, 0xfe, 0xc1, 0x87, 0xfc, 0x59, 0x76, 0x49, 0x65,
+    0xff, 0xed, 0x38, 0x05, 0x9b, 0xf9, 0x19, 0x1c, 0x92, 0xcb, 0xb0, 0x58,
+    0xd3, 0x6b, 0xc2, 0x27, 0x34, 0x01, 0xa1, 0x0e, 0x85, 0x7c, 0x41, 0x6b,
+    0xb6, 0xa1, 0x51, 0x65, 0xb7, 0xac, 0xa1, 0x49, 0xb4, 0x39, 0x0d, 0xf9,
+    0xbd, 0xec, 0x9d, 0x65, 0xe1, 0x47, 0x86, 0xb2, 0xff, 0xe1, 0x4e, 0x75,
+    0x20, 0xbf, 0xca, 0x24, 0xb2, 0xfb, 0x69, 0x64, 0x8e, 0xb2, 0xfd, 0xb4,
+    0x6d, 0x1b, 0x56, 0xde, 0xd6, 0xb2, 0xef, 0xed, 0x35, 0x97, 0x75, 0xb8,
+    0xb2, 0xfd, 0xe6, 0x3c, 0x76, 0xb2, 0xec, 0x3e, 0xc3, 0xc3, 0xec, 0x6e,
+    0xfe, 0x83, 0xe0, 0x23, 0x7a, 0xca, 0x19, 0xef, 0x78, 0xc2, 0xff, 0x6b,
+    0x3b, 0x80, 0x08, 0x75, 0x97, 0xef, 0xbc, 0xef, 0xc5, 0x97, 0xd0, 0x76,
+    0xd2, 0xcb, 0x44, 0xc7, 0x93, 0xa2, 0x8b, 0xe8, 0x26, 0x99, 0x65, 0xff,
+    0xfb, 0x27, 0xd9, 0x98, 0x5f, 0xf3, 0xb7, 0x1b, 0x7a, 0xcb, 0xf7, 0xa0,
+    0x6c, 0x6a, 0xca, 0x64, 0xda, 0x34, 0x44, 0x77, 0xe2, 0x28, 0xf9, 0x0e,
+    0xea, 0xbd, 0xf7, 0x84, 0xe1, 0x2c, 0xbb, 0x6b, 0xfa, 0xcb, 0xe9, 0x98,
+    0xc9, 0x96, 0x5f, 0xe8, 0x3b, 0x7a, 0x30, 0x96, 0x5c, 0xfc, 0x59, 0x47,
+    0x3e, 0xbf, 0x92, 0xef, 0x30, 0xbf, 0xbf, 0x1b, 0xc9, 0xfa, 0x59, 0x7e,
+    0x2e, 0xd8, 0xb1, 0x65, 0xff, 0xb8, 0x3d, 0x13, 0x99, 0x9d, 0x7d, 0x65,
+    0xfe, 0x30, 0xb3, 0xaf, 0xe7, 0x96, 0x56, 0x1f, 0xa3, 0x20, 0x5f, 0xe8,
+    0x79, 0xfe, 0x6b, 0xe9, 0x65, 0xf9, 0xf5, 0x27, 0x3a, 0xca, 0x1a, 0x7f,
+    0x99, 0x08, 0x7e, 0x8c, 0x58, 0xbf, 0xd0, 0x9a, 0x22, 0x00, 0x9a, 0x58,
+    0xeb, 0x2f, 0xf7, 0xfc, 0xed, 0xc6, 0xde, 0xb2, 0xdb, 0x5a, 0xca, 0x23,
+    0xca, 0xdb, 0x34, 0xbf, 0xdc, 0x8c, 0x21, 0xfa, 0x16, 0x5f, 0xd1, 0x84,
+    0x3f, 0x42, 0xcb, 0xc1, 0xd4, 0xdb, 0x0f, 0x73, 0x86, 0x37, 0xf8, 0xcd,
+    0x98, 0x3f, 0x46, 0xf5, 0x97, 0xfe, 0x0e, 0x1b, 0x9f, 0x0c, 0x74, 0x35,
+    0x95, 0x07, 0xf0, 0xc7, 0x17, 0xf8, 0x83, 0xfc, 0xf8, 0x93, 0xac, 0xad,
+    0x1e, 0xaf, 0xc8, 0x2f, 0xff, 0xcd, 0xaf, 0x3e, 0xc1, 0xe4, 0xbd, 0x1b,
+    0xc7, 0x0b, 0x2f, 0xf8, 0xc1, 0x3d, 0x1d, 0xf9, 0xa6, 0x59, 0x7c, 0x13,
+    0xe0, 0xd6, 0x57, 0x47, 0xbf, 0xba, 0x7b, 0x7f, 0xff, 0xde, 0xc9, 0x64,
+    0xbd, 0x85, 0x86, 0xf9, 0xe5, 0x92, 0x3a, 0xca, 0xc4, 0x45, 0xfc, 0x9a,
+    0xfd, 0xa8, 0x97, 0x31, 0x65, 0xf3, 0x7f, 0x37, 0xac, 0xbf, 0xd8, 0x67,
+    0xc9, 0xc1, 0xc5, 0x95, 0x07, 0xfb, 0xe2, 0x7f, 0x91, 0xd4, 0x97, 0x04,
+    0x31, 0x6f, 0xb8, 0x40, 0x6a, 0x30, 0x4f, 0x11, 0x14, 0x68, 0x5f, 0x84,
+    0xfd, 0xff, 0xf4, 0x17, 0xf5, 0x0d, 0x22, 0xc3, 0xbc, 0x96, 0x5f, 0xfe,
+    0x8e, 0xf8, 0x1f, 0xb7, 0x98, 0xdf, 0x32, 0xcb, 0xf8, 0xf1, 0x85, 0xfd,
+    0xb5, 0x97, 0xda, 0x6e, 0xa4, 0xb2, 0xdc, 0x59, 0x7e, 0x8c, 0x2f, 0xed,
+    0xac, 0xbd, 0xc7, 0xeb, 0x62, 0x23, 0x18, 0xbe, 0x62, 0x33, 0x88, 0xd0,
+    0xd3, 0x74, 0x3a, 0x67, 0xe1, 0xaf, 0x7f, 0xdb, 0x98, 0x3f, 0x46, 0xe1,
+    0x42, 0xca, 0x63, 0xf3, 0x73, 0x6b, 0xfe, 0xd4, 0xfd, 0xf9, 0xbc, 0x1f,
+    0xac, 0xaf, 0x1e, 0xe3, 0x90, 0x5f, 0xe6, 0x37, 0x59, 0x3c, 0x4e, 0xb2,
+    0xfd, 0x07, 0xde, 0x09, 0x2c, 0xae, 0x1e, 0xff, 0xcd, 0x6e, 0xfb, 0x2c,
+    0xb8, 0x38, 0xb2, 0xed, 0x71, 0x65, 0x48, 0xf9, 0x4d, 0x22, 0x00, 0xb6,
+    0xd8, 0xb5, 0xff, 0xfa, 0x41, 0xd4, 0x76, 0x66, 0x37, 0xbb, 0x69, 0xf7,
+    0x56, 0x5e, 0xd4, 0x7d, 0x65, 0xfb, 0xb6, 0xe7, 0x99, 0x65, 0xfd, 0x8c,
+    0x5f, 0x0f, 0x96, 0x57, 0x47, 0xa9, 0xe2, 0x8b, 0xf7, 0x64, 0xdd, 0x49,
+    0x65, 0x4c, 0x98, 0xc7, 0x17, 0x3e, 0xe0, 0x12, 0x3b, 0xc7, 0xd9, 0x8b,
+    0x2f, 0xed, 0x63, 0x7a, 0x06, 0xb2, 0xf6, 0x83, 0xc5, 0x97, 0xff, 0xde,
+    0x82, 0xcf, 0xfb, 0x3f, 0xe8, 0x08, 0xad, 0x65, 0xfc, 0xda, 0xd8, 0xe4,
+    0x05, 0x97, 0xbd, 0x9d, 0x2c, 0xbf, 0xff, 0xc6, 0x6e, 0xff, 0x3d, 0xb0,
+    0xb2, 0x76, 0xc2, 0xea, 0x5c, 0x59, 0x7e, 0x33, 0xf9, 0xee, 0xd6, 0x56,
+    0x22, 0x45, 0xd9, 0xea, 0x13, 0xb6, 0x18, 0xf6, 0x16, 0x30, 0xef, 0x94,
+    0x9c, 0xb8, 0xa1, 0x5d, 0x7f, 0xfb, 0xe4, 0xe0, 0xf6, 0x30, 0xc3, 0xfe,
+    0x2c, 0xbe, 0xdf, 0x83, 0x85, 0x97, 0xd2, 0xc8, 0xe9, 0x65, 0xff, 0x44,
+    0xe2, 0x4b, 0xc1, 0x79, 0xd6, 0x54, 0x23, 0x2b, 0x12, 0x66, 0x23, 0xd1,
+    0x15, 0xff, 0xba, 0x96, 0xcf, 0x3f, 0x70, 0x43, 0x59, 0x7f, 0x13, 0x00,
+    0xf1, 0xbd, 0x65, 0xed, 0x00, 0xeb, 0x29, 0x8f, 0x2c, 0x25, 0xd7, 0xf3,
+    0x13, 0xf6, 0x58, 0xb2, 0xb1, 0x1b, 0x3c, 0x84, 0x68, 0x48, 0x6f, 0x8b,
+    0x18, 0xd5, 0x97, 0xcd, 0x1d, 0x71, 0x65, 0xf8, 0x4f, 0x94, 0x01, 0x65,
+    0x1c, 0xfa, 0xfe, 0x43, 0xbc, 0x8a, 0xfb, 0xff, 0xc3, 0x16, 0x5f, 0xfe,
+    0x8f, 0x82, 0x25, 0x9d, 0x7e, 0x70, 0x98, 0xb2, 0xfd, 0x07, 0xd3, 0xcc,
+    0xb2, 0xff, 0xf9, 0xbf, 0x2c, 0xd6, 0x72, 0x18, 0x78, 0x75, 0x97, 0xb8,
+    0xe0, 0x59, 0x50, 0x99, 0x96, 0x18, 0xb1, 0x1f, 0x93, 0x5c, 0xa3, 0xe9,
+    0xb4, 0xb2, 0xfa, 0x0e, 0xd2, 0x59, 0x77, 0xa2, 0x46, 0xb3, 0x41, 0x77,
+    0xa0, 0x8d, 0x59, 0x73, 0xc9, 0x65, 0xfa, 0x3b, 0x27, 0x3a, 0xcb, 0xff,
+    0x44, 0xb6, 0x67, 0x9b, 0x5e, 0x75, 0x96, 0x6f, 0x1f, 0x37, 0x09, 0xe8,
+    0x68, 0xeb, 0xe8, 0xb3, 0x70, 0x73, 0xcf, 0x97, 0xe9, 0xb8, 0x30, 0xce,
+    0xb2, 0xff, 0xff, 0xf4, 0x7b, 0xcf, 0xcd, 0x9e, 0x76, 0xe7, 0xb0, 0x1b,
+    0x35, 0x9f, 0x7e, 0x96, 0x5f, 0xfb, 0xae, 0x77, 0xe6, 0x1b, 0x6b, 0xb5,
+    0x97, 0xf3, 0x83, 0x5a, 0x6d, 0x2c, 0xbd, 0xfd, 0x98, 0xb2, 0xa1, 0x33,
+    0x3d, 0x15, 0xbb, 0xd8, 0x10, 0x84, 0x2d, 0xbd, 0x8c, 0x05, 0x97, 0xde,
+    0x0f, 0x5f, 0x59, 0x7f, 0xf7, 0xb2, 0x34, 0x58, 0x73, 0x86, 0x65, 0x97,
+    0xf7, 0xc4, 0x00, 0x23, 0xa5, 0x97, 0xfc, 0xdf, 0x6c, 0x39, 0x64, 0xeb,
+    0x29, 0x8f, 0x9f, 0xc6, 0x17, 0xf7, 0x18, 0xd3, 0xbf, 0xd6, 0x5f, 0xfb,
+    0x7c, 0x1b, 0x26, 0x28, 0xd4, 0x2c, 0xbf, 0xff, 0xf6, 0xb3, 0x7c, 0x17,
+    0xf6, 0x08, 0x51, 0xe7, 0x6f, 0xc7, 0xf8, 0xb2, 0xee, 0xc5, 0x0b, 0x2f,
+    0x89, 0xfc, 0x6a, 0xcb, 0xd3, 0x86, 0x4b, 0x2f, 0x16, 0x73, 0x61, 0xee,
+    0x0c, 0x73, 0x08, 0xaf, 0x9c, 0x12, 0x1a, 0xcb, 0xfd, 0x07, 0xec, 0x9f,
+    0x3b, 0x59, 0x43, 0x55, 0x31, 0xdc, 0x2a, 0xfa, 0x21, 0x62, 0xed, 0x1f,
+    0xef, 0x86, 0x51, 0x88, 0x02, 0x11, 0x5f, 0x6c, 0xdf, 0xbb, 0x3a, 0xca,
+    0x1a, 0xb6, 0x9c, 0x95, 0x78, 0x6c, 0x20, 0xad, 0xb8, 0xb2, 0xdb, 0x8b,
+    0x2f, 0x60, 0xfe, 0xb2, 0xc7, 0x63, 0x61, 0xa1, 0x4b, 0xbf, 0x8b, 0x2f,
+    0xfc, 0xdb, 0xf0, 0x7e, 0xce, 0xf0, 0x96, 0x5f, 0xe8, 0x28, 0x03, 0xbe,
+    0xea, 0xcb, 0xda, 0x79, 0x2c, 0xbf, 0xc3, 0xf6, 0x77, 0xe8, 0xd2, 0xca,
+    0x1a, 0x20, 0xf4, 0x66, 0x43, 0x97, 0xee, 0x67, 0xf5, 0x0b, 0x2f, 0xff,
+    0x0a, 0xca, 0x0e, 0xed, 0xe7, 0xff, 0xa1, 0x65, 0x42, 0x6f, 0x32, 0x16,
+    0x68, 0x61, 0x70, 0xbc, 0x24, 0xf7, 0x3f, 0x6b, 0x2f, 0xe6, 0x99, 0xfb,
+    0xe4, 0x96, 0x5f, 0xff, 0xf0, 0xc7, 0x9b, 0x71, 0xac, 0x21, 0xfa, 0x04,
+    0x00, 0x23, 0xa5, 0x95, 0xda, 0x2c, 0x3c, 0x2e, 0xe5, 0xf7, 0xff, 0xb5,
+    0x0c, 0x59, 0xfe, 0x47, 0x9c, 0xeb, 0x2f, 0xff, 0xf7, 0x98, 0x87, 0xac,
+    0xef, 0xd1, 0xec, 0xd6, 0xa0, 0xd5, 0x97, 0xe0, 0xee, 0xb6, 0x1d, 0x65,
+    0xfb, 0xee, 0x76, 0xfa, 0xca, 0x34, 0xf4, 0x48, 0xaa, 0xfd, 0xe8, 0xc9,
+    0x3a, 0xcb, 0xff, 0x37, 0xc3, 0xa7, 0xe6, 0xc3, 0xfd, 0x65, 0x42, 0x22,
+    0x46, 0x44, 0xe4, 0xd7, 0xf9, 0xb0, 0xe5, 0x93, 0xba, 0xcb, 0xfd, 0xc6,
+    0xde, 0x38, 0x04, 0xeb, 0x2b, 0x0f, 0x9d, 0xcc, 0x6f, 0xbf, 0xc0, 0x05,
+    0x65, 0xe6, 0x3f, 0xd6, 0x5e, 0x21, 0x3e, 0xb2, 0xfc, 0x11, 0xb9, 0x03,
+    0x61, 0xb9, 0x71, 0xca, 0x84, 0x4d, 0x49, 0x72, 0xfe, 0xf3, 0x7c, 0xa0,
+    0xeb, 0x2f, 0xa3, 0x79, 0x42, 0xcb, 0xcf, 0x2c, 0x59, 0x53, 0x1f, 0x49,
+    0xcb, 0x08, 0x8a, 0xb6, 0xb5, 0xe9, 0xc8, 0x44, 0xc8, 0xe7, 0xfb, 0x87,
+    0xf3, 0x18, 0x4c, 0x8f, 0xe8, 0xce, 0xca, 0x12, 0xbf, 0x85, 0xd0, 0x61,
+    0x17, 0x7f, 0xfc, 0xe7, 0x1f, 0xa3, 0xd0, 0x70, 0xf5, 0x2e, 0x2c, 0xbf,
+    0xfd, 0x9f, 0xf3, 0x67, 0x5f, 0xcd, 0xf1, 0xc5, 0x96, 0xf7, 0x91, 0x38,
+    0x4a, 0x37, 0xcf, 0xcf, 0xce, 0xb2, 0xfc, 0xce, 0x0d, 0x9f, 0x59, 0x7f,
+    0xf3, 0x97, 0xa1, 0x86, 0xdc, 0xc9, 0x2c, 0xbd, 0x00, 0x11, 0x65, 0xfd,
+    0x9b, 0xfc, 0xc0, 0x99, 0x65, 0x62, 0x60, 0x46, 0x94, 0x78, 0x8d, 0xca,
+    0x49, 0x07, 0x83, 0xb7, 0x14, 0x2c, 0xbe, 0xf4, 0x72, 0x16, 0x5e, 0x10,
+    0x78, 0xb2, 0xf0, 0xaf, 0x82, 0x85, 0x95, 0x39, 0xfc, 0x0c, 0x55, 0xc8,
+    0x78, 0x3b, 0x7b, 0x8d, 0xc5, 0x97, 0xdb, 0x0f, 0xb3, 0xb5, 0x97, 0xf4,
+    0xf3, 0x48, 0x51, 0xa9, 0xd6, 0x5e, 0xce, 0xc6, 0xb2, 0xfb, 0xf8, 0x40,
+    0x59, 0x7f, 0x39, 0x91, 0xfc, 0x9d, 0x65, 0xfd, 0x9a, 0xd4, 0x40, 0xd6,
+    0x56, 0xd6, 0x8c, 0xec, 0x36, 0x61, 0xd2, 0x21, 0xdb, 0x2e, 0xbf, 0xfa,
+    0x7f, 0x60, 0xc6, 0xdd, 0x67, 0x5f, 0x59, 0x7d, 0x38, 0x81, 0x9d, 0x65,
+    0xf4, 0xd2, 0x89, 0xd6, 0x54, 0x1e, 0x56, 0x13, 0x5f, 0xcd, 0xf0, 0x08,
+    0x52, 0x59, 0x7c, 0x64, 0xdc, 0x85, 0x97, 0xcd, 0x07, 0xc5, 0x97, 0xe8,
+    0x37, 0x3f, 0xc5, 0x97, 0xff, 0xf6, 0x13, 0x0f, 0x99, 0xce, 0x67, 0x9b,
+    0x81, 0x9d, 0x65, 0xfc, 0x3d, 0x3f, 0xfc, 0x15, 0x97, 0x3f, 0xe4, 0x88,
+    0x8e, 0x2d, 0x5f, 0xcd, 0xe0, 0x9c, 0xec, 0xb2, 0xff, 0xe0, 0xcb, 0x39,
+    0xb3, 0xed, 0xb7, 0x93, 0xac, 0xb3, 0x48, 0xfd, 0xc8, 0xb6, 0xa1, 0x54,
+    0xf4, 0xf0, 0x91, 0x34, 0x83, 0xa2, 0xed, 0x12, 0x78, 0x80, 0xa1, 0x61,
+    0xf8, 0x52, 0xd8, 0x5e, 0xd6, 0xea, 0xa8, 0x76, 0xa2, 0x51, 0x49, 0x40,
+    0xa0, 0x87, 0x69, 0x24, 0x0a, 0xa2, 0x8d, 0xa6, 0x81, 0x12, 0x89, 0xa4,
+    0xb2, 0x39, 0x43, 0xf9, 0x38, 0xfb, 0xdc, 0xab, 0xfe, 0xa1, 0xca, 0xd1,
+    0xac, 0x4d, 0x1f, 0xae, 0xa3, 0x2f, 0x3c, 0x62, 0xbe, 0x8f, 0x45, 0xe3,
+    0x6b, 0x04, 0x6e, 0x82, 0xb4, 0xa2, 0x97, 0x09, 0xc9, 0xed, 0xaf, 0xca,
+    0x4f, 0x0c, 0x33, 0xb7, 0x9e, 0x18, 0x39, 0xb7, 0x0f, 0x61, 0x25, 0x76,
+    0xdf, 0xff, 0x0a, 0x76, 0xb1, 0x4b, 0x09, 0xec, 0xea, 0x59, 0xbb, 0xc5,
+    0x97, 0xfa, 0x66, 0xfe, 0x6b, 0xf0, 0xb2, 0xfd, 0x86, 0x67, 0x9d, 0x65,
+    0xff, 0xf6, 0x9b, 0xa9, 0x71, 0xbf, 0xe8, 0xd7, 0xe1, 0x65, 0xfe, 0x8d,
+    0x3c, 0xcf, 0xc9, 0x2c, 0xbc, 0xef, 0xda, 0xa2, 0xae, 0x5f, 0xce, 0x27,
+    0xbc, 0xe7, 0x59, 0x5d, 0x9e, 0xbf, 0x8a, 0x6f, 0xe6, 0xd7, 0x9c, 0x43,
+    0xac, 0xbe, 0x6f, 0xca, 0x16, 0x50, 0xd1, 0xf9, 0xa8, 0x45, 0x78, 0x8f,
+    0x79, 0x75, 0xf1, 0x6e, 0xf1, 0xd6, 0x5f, 0x16, 0x4d, 0x0b, 0x2d, 0xb8,
+    0xb2, 0xff, 0xf4, 0x4f, 0xf6, 0x1e, 0x14, 0x9b, 0xc1, 0x59, 0x58, 0x7f,
+    0xc7, 0x21, 0xf0, 0xa5, 0xd0, 0x75, 0x97, 0x70, 0x6b, 0x2b, 0x46, 0xb5,
+    0xc5, 0xaf, 0xf4, 0x6b, 0xf0, 0x50, 0x05, 0x97, 0xf8, 0x5e, 0x6b, 0xb7,
+    0x7e, 0xd5, 0x11, 0xe2, 0xfd, 0xe6, 0xd7, 0x9d, 0x65, 0xe2, 0xfb, 0xac,
+    0xbb, 0x07, 0x87, 0x85, 0xc2, 0x7a, 0x92, 0x2c, 0x4f, 0x08, 0x5b, 0xfd,
+    0x28, 0xd4, 0xf1, 0xa9, 0xd6, 0x5f, 0xff, 0xc5, 0x9b, 0xbc, 0xd9, 0xc0,
+    0x6f, 0xd8, 0xfc, 0x96, 0x9d, 0x65, 0xfc, 0xfe, 0x82, 0x80, 0x2c, 0xad,
+    0xe8, 0x8f, 0xdb, 0x64, 0xbf, 0xfa, 0x78, 0xd7, 0x79, 0xce, 0x60, 0xf1,
+    0x65, 0x42, 0x66, 0x39, 0x0c, 0x47, 0x28, 0xbf, 0xef, 0xb0, 0x45, 0x79,
+    0x29, 0xe6, 0x59, 0x7f, 0xff, 0xda, 0x2c, 0x9f, 0x61, 0x66, 0xf2, 0xcd,
+    0xde, 0x6c, 0xe0, 0x37, 0xac, 0xbf, 0xec, 0xff, 0x04, 0xe6, 0xce, 0xe4,
+    0xb2, 0xfe, 0x2c, 0xff, 0x30, 0xc5, 0x95, 0x09, 0x8d, 0xe1, 0xf9, 0xdc,
+    0x5c, 0xfa, 0xff, 0x76, 0xdc, 0xf3, 0x7d, 0x96, 0x5f, 0xb2, 0x77, 0x2e,
+    0x96, 0x57, 0x47, 0xb6, 0x46, 0x77, 0xef, 0xff, 0x08, 0x0b, 0x2f, 0xf6,
+    0xeb, 0x8e, 0x30, 0x6c, 0xb2, 0xc2, 0xf6, 0xb6, 0x40, 0x2c, 0x31, 0x4e,
+    0x66, 0x32, 0x7c, 0x8d, 0x31, 0x91, 0x26, 0x85, 0x16, 0x96, 0xfc, 0x40,
+    0xf0, 0xe2, 0x28, 0xd6, 0x79, 0x1a, 0x77, 0xe1, 0x2c, 0x21, 0x16, 0xe9,
+    0x3d, 0xef, 0x39, 0xd6, 0x5f, 0xb5, 0xdb, 0xbf, 0x6a, 0x8b, 0x05, 0x78,
+    0xd8, 0x9d, 0x65, 0xfc, 0xda, 0x2c, 0xdf, 0x8b, 0x2f, 0xff, 0xc1, 0x79,
+    0xcf, 0x9b, 0x61, 0xd6, 0x6a, 0x42, 0x49, 0x65, 0x79, 0x11, 0x04, 0x5b,
+    0x7d, 0xfd, 0x37, 0x4b, 0x2f, 0xd8, 0x59, 0xfe, 0x2c, 0xbf, 0x67, 0x02,
+    0xfd, 0x2c, 0xbf, 0xda, 0x73, 0x89, 0xa7, 0xe9, 0x65, 0x85, 0xc2, 0x78,
+    0x18, 0x38, 0x69, 0xb7, 0x70, 0xa6, 0x62, 0x27, 0x23, 0x22, 0x61, 0x0a,
+    0x2f, 0xf0, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x2c, 0xa5, 0xff, 0xb3, 0xf2,
+    0xc0, 0x6d, 0xe7, 0x82, 0xb2, 0xff, 0xf6, 0x38, 0xfd, 0x9a, 0xd4, 0x6f,
+    0x36, 0x16, 0x5f, 0x76, 0xef, 0xda, 0xa2, 0xd3, 0x56, 0xe1, 0xfd, 0xe9,
+    0x2e, 0xfc, 0x59, 0x3b, 0x18, 0xb2, 0xff, 0x0f, 0xcf, 0x37, 0x98, 0xeb,
+    0x29, 0x63, 0x9b, 0x4b, 0xfd, 0x07, 0xc1, 0x94, 0x74, 0xb2, 0xfc, 0x36,
+    0x04, 0x12, 0xcb, 0xf0, 0x73, 0x4f, 0xc5, 0x96, 0x16, 0x34, 0xf5, 0xb2,
+    0x17, 0x9d, 0x92, 0x9d, 0x73, 0xc3, 0x4e, 0x65, 0xc2, 0x6b, 0xf6, 0xd5,
+    0xb5, 0x8a, 0x82, 0xa0, 0xa8, 0xb2, 0xf8, 0x54, 0xda, 0xf6, 0xbd, 0xa1,
+    0x65, 0x6d, 0x47, 0xf3, 0xb4, 0x90, 0xaf, 0xf8, 0x51, 0xe6, 0x30, 0x6e,
+    0xfd, 0xac, 0xbf, 0x6d, 0x21, 0x4f, 0x32, 0x16, 0x5f, 0xf0, 0xa9, 0xb2,
+    0x66, 0xf1, 0x07, 0xeb, 0x2f, 0xf0, 0x87, 0xcf, 0xf1, 0xb8, 0xb2, 0xcc,
+    0xb2, 0x85, 0x07, 0x89, 0xb6, 0x69, 0x7f, 0x0a, 0x5b, 0xb8, 0xeb, 0x8b,
+    0x2f, 0xf4, 0x4f, 0xa7, 0x1c, 0xee, 0xb2, 0xff, 0xfd, 0xe7, 0x2f, 0xcb,
+    0x35, 0x90, 0x45, 0x9f, 0x59, 0x52, 0x44, 0x2b, 0x1a, 0x5f, 0xff, 0x3c,
+    0xef, 0xbf, 0x9b, 0x1f, 0x7f, 0x7e, 0x6d, 0x2c, 0xbf, 0x6f, 0x71, 0xe1,
+    0xd6, 0x5f, 0x38, 0x36, 0xf1, 0x65, 0xff, 0x72, 0x3d, 0x03, 0xf3, 0x9a,
+    0xb2, 0xb6, 0x1e, 0xef, 0xc9, 0x2e, 0xcd, 0xeb, 0x2d, 0xc8, 0x37, 0x84,
+    0x49, 0x7e, 0xfc, 0x14, 0x4c, 0xb2, 0xf4, 0x75, 0xc5, 0x95, 0x87, 0x88,
+    0x72, 0x7b, 0xf8, 0xed, 0xbb, 0x04, 0xcb, 0x2f, 0x6e, 0x8e, 0x16, 0x53,
+    0x1e, 0x68, 0x4b, 0xaf, 0xd0, 0x5d, 0xfa, 0x16, 0x5f, 0xfd, 0x9f, 0xf3,
+    0x1f, 0x3f, 0xc1, 0x38, 0xb2, 0xff, 0xd8, 0xe0, 0x89, 0x6a, 0x30, 0x96,
+    0x57, 0x68, 0x80, 0x64, 0x5b, 0xe6, 0xdf, 0xed, 0xeb, 0x2f, 0xb9, 0x05,
+    0x32, 0xcb, 0xe8, 0xdd, 0x9b, 0x16, 0x53, 0x9e, 0x39, 0x11, 0x5f, 0xed,
+    0xd6, 0x06, 0xc7, 0xf0, 0x56, 0x54, 0x95, 0xe1, 0x0c, 0x8b, 0x15, 0xda,
+    0x18, 0x53, 0x34, 0xf9, 0xb8, 0x04, 0x25, 0x0a, 0x7e, 0x11, 0xfd, 0xb7,
+    0x74, 0x82, 0xff, 0x1c, 0x43, 0x80, 0xec, 0x05, 0x97, 0xed, 0x9a, 0xd0,
+    0x7c, 0xb2, 0xfc, 0xc6, 0xc1, 0x76, 0xb2, 0xb8, 0x7a, 0x7f, 0x2b, 0xa8,
+    0x45, 0x56, 0x42, 0x22, 0xf3, 0x64, 0xeb, 0x2f, 0xff, 0x77, 0xe6, 0xf3,
+    0x6a, 0x26, 0x33, 0x3c, 0xb2, 0xbc, 0x7d, 0x04, 0x39, 0x78, 0x05, 0x8b,
+    0x2e, 0x2c, 0x59, 0x5b, 0x0d, 0x80, 0x06, 0xef, 0xfd, 0xc6, 0xd9, 0xe7,
+    0xd4, 0x6f, 0x85, 0x97, 0xfc, 0x77, 0x96, 0xd8, 0x7c, 0xda, 0x59, 0x53,
+    0xa2, 0x83, 0x44, 0x67, 0x41, 0xbf, 0x3f, 0x3f, 0x03, 0x59, 0x50, 0x7b,
+    0x01, 0x31, 0xbf, 0xcf, 0xa9, 0x3f, 0xdf, 0xb5, 0x97, 0xff, 0xb3, 0x0b,
+    0x00, 0x59, 0xff, 0x64, 0x96, 0x54, 0x27, 0xc7, 0xe8, 0xd2, 0x42, 0x43,
+    0xba, 0x67, 0x7f, 0xf1, 0xc9, 0xcd, 0x2c, 0x04, 0xf8, 0x62, 0xcb, 0xff,
+    0xc5, 0x86, 0xf9, 0xe5, 0xe3, 0x1c, 0x43, 0xac, 0xb7, 0xa1, 0x12, 0x38,
+    0x8b, 0x7e, 0x89, 0x70, 0xf2, 0x59, 0x7d, 0x02, 0x47, 0x96, 0x5c, 0xd3,
+    0xac, 0xbc, 0xef, 0xda, 0xa2, 0xdc, 0x5f, 0xbf, 0xce, 0x34, 0xcb, 0x2a,
+    0x73, 0xe9, 0xec, 0x5c, 0x42, 0x9b, 0xff, 0x36, 0xbc, 0xf9, 0xa9, 0xda,
+    0x75, 0x97, 0xd3, 0x40, 0xf1, 0x65, 0xfc, 0x03, 0xe7, 0x02, 0x4b, 0x2f,
+    0xf7, 0xf9, 0x1a, 0xd6, 0x18, 0xb2, 0x98, 0xf8, 0x5c, 0xb6, 0xff, 0xd9,
+    0xac, 0x2d, 0x9e, 0xce, 0x8c, 0x59, 0x7e, 0x20, 0x3f, 0x5c, 0x59, 0x50,
+    0x7d, 0x2e, 0x83, 0x52, 0x54, 0xee, 0x69, 0x3f, 0x45, 0x1a, 0x84, 0x5f,
+    0x8c, 0x9c, 0xfc, 0xa1, 0x07, 0xc8, 0x44, 0xdf, 0xf9, 0xc6, 0x4f, 0xbf,
+    0xd1, 0x37, 0x16, 0x5f, 0x6f, 0x8e, 0xc9, 0x65, 0xfc, 0x40, 0x98, 0xa0,
+    0xeb, 0x28, 0xd4, 0x48, 0x9d, 0x01, 0xc9, 0x2f, 0x1c, 0x99, 0x65, 0x89,
+    0x65, 0xbb, 0x59, 0x7f, 0xde, 0x0b, 0xf3, 0x30, 0x8d, 0x59, 0x7f, 0xfe,
+    0x8e, 0xf6, 0x67, 0x9b, 0x51, 0xec, 0x21, 0xc2, 0xcb, 0xf7, 0x1f, 0xa7,
+    0x1a, 0xcb, 0x30, 0xd1, 0x6a, 0x73, 0x8f, 0xaa, 0xdf, 0xe7, 0x16, 0x59,
+    0x3c, 0x1a, 0xb2, 0xa1, 0x35, 0xcc, 0x1b, 0x61, 0x0f, 0x43, 0x1c, 0x8d,
+    0x6f, 0xfa, 0x1c, 0xbd, 0x98, 0x5d, 0xac, 0xbf, 0xdf, 0xfb, 0x4e, 0x78,
+    0x25, 0x97, 0xfc, 0x12, 0x9c, 0x9f, 0x4f, 0x25, 0x95, 0x24, 0x50, 0xe1,
+    0xb7, 0x0c, 0xef, 0xf1, 0x04, 0xf1, 0xcf, 0xb2, 0xcb, 0xf4, 0x6b, 0x59,
+    0xba, 0xb2, 0xf6, 0x9b, 0xa5, 0x95, 0x07, 0xf2, 0x46, 0x5f, 0x2a, 0xbf,
+    0xc1, 0x19, 0x66, 0xf7, 0x92, 0xcb, 0xff, 0xf7, 0xa6, 0xd8, 0x70, 0xfd,
+    0xa7, 0xcf, 0x9b, 0x9e, 0x59, 0x7f, 0x14, 0x4d, 0x36, 0x01, 0x65, 0xff,
+    0xe8, 0x9f, 0xec, 0x3c, 0x29, 0x37, 0x82, 0xb2, 0xff, 0xa4, 0xdb, 0xf3,
+    0xce, 0x53, 0xac, 0xbd, 0x19, 0xa5, 0x97, 0xfb, 0xd1, 0x26, 0xdb, 0xc3,
+    0xac, 0xa1, 0x9e, 0x87, 0x06, 0xef, 0xdb, 0x3a, 0xe3, 0x1a, 0xb2, 0xa7,
+    0x3c, 0xee, 0x88, 0xab, 0xa4, 0x7e, 0x3c, 0x36, 0x2f, 0xfd, 0x9e, 0x6d,
+    0x0f, 0xd0, 0x5d, 0xac, 0xbf, 0xf1, 0x67, 0xf9, 0x1b, 0x3f, 0x9d, 0xac,
+    0xbe, 0xd9, 0xfc, 0x02, 0xca, 0x92, 0x28, 0x98, 0xfb, 0xc8, 0x17, 0xfb,
+    0xa9, 0x41, 0x7f, 0x00, 0xb2, 0xfb, 0x80, 0x6f, 0xac, 0xa9, 0x2b, 0x50,
+    0xec, 0xd1, 0x96, 0xfc, 0x5c, 0xf1, 0xa2, 0xf2, 0x19, 0x41, 0x2f, 0x10,
+    0xce, 0xfc, 0xfa, 0xfe, 0x79, 0x65, 0xff, 0x98, 0x11, 0x21, 0xfa, 0x0b,
+    0xb5, 0x95, 0x23, 0xe5, 0xf9, 0x3d, 0xfd, 0xf9, 0x66, 0xb3, 0x8b, 0x29,
+    0x65, 0xe0, 0xbf, 0xd6, 0x5c, 0x18, 0x59, 0x52, 0x36, 0x5f, 0x1c, 0xa5,
+    0x97, 0xdd, 0x76, 0xda, 0x59, 0x71, 0xc5, 0xe2, 0x23, 0x7a, 0x3d, 0x39,
+    0x0f, 0xc2, 0xef, 0xb0, 0x64, 0x35, 0x95, 0x07, 0xd9, 0xbd, 0x2e, 0xff,
+    0x8b, 0xfe, 0x79, 0x05, 0xc4, 0x59, 0x50, 0x9d, 0x26, 0x11, 0x34, 0x64,
+    0xce, 0x47, 0x7d, 0xfd, 0x82, 0xa1, 0x2c, 0xbc, 0xed, 0x3a, 0xca, 0xc3,
+    0xc5, 0x34, 0xa6, 0xcc, 0xb2, 0xdb, 0x6b, 0x2c, 0x40, 0x34, 0x9f, 0x10,
+    0xbd, 0xb3, 0x68, 0xda, 0x16, 0x5f, 0xf4, 0x85, 0xe6, 0xbb, 0x77, 0xed,
+    0x51, 0x43, 0xaf, 0xd2, 0xd9, 0xbc, 0xf0, 0xb2, 0xa1, 0x30, 0xa6, 0x46,
+    0x98, 0x99, 0xca, 0x49, 0x26, 0xf6, 0x8d, 0xed, 0x65, 0xf4, 0x77, 0x87,
+    0x59, 0x52, 0x3c, 0x10, 0x0f, 0xdf, 0x46, 0xe0, 0x61, 0x65, 0xe9, 0xb0,
+    0x6b, 0x2f, 0x4d, 0x1f, 0x59, 0x50, 0x6e, 0x82, 0x3b, 0x5a, 0x45, 0x00,
+    0x08, 0xb8, 0xbd, 0x70, 0x44, 0x59, 0x7e, 0xe3, 0xfb, 0x3b, 0x59, 0x5d,
+    0x1e, 0x07, 0x06, 0x2f, 0x0e, 0x0e, 0xb2, 0xff, 0xb2, 0x07, 0xe8, 0xdd,
+    0x89, 0x96, 0x5f, 0xe0, 0x37, 0xbd, 0x80, 0x75, 0x94, 0x73, 0xed, 0x01,
+    0xdd, 0xff, 0xb3, 0xfc, 0xf6, 0x6b, 0x58, 0x62, 0xcb, 0xff, 0x16, 0xeb,
+    0x93, 0x9c, 0x78, 0x35, 0x95, 0x09, 0xde, 0x63, 0x83, 0x11, 0xbc, 0x22,
+    0x44, 0x22, 0xdd, 0x3f, 0xbf, 0xf3, 0x8e, 0x07, 0xe6, 0x26, 0x3a, 0xcb,
+    0xff, 0x6f, 0x7d, 0x71, 0xfd, 0xc8, 0x9d, 0x65, 0xfe, 0xe0, 0x7b, 0xcf,
+    0x94, 0x2c, 0xa3, 0xa2, 0xc3, 0xc7, 0x9f, 0x41, 0xbd, 0xfc, 0xed, 0x65,
+    0xd9, 0xda, 0xcb, 0x66, 0xc3, 0x69, 0xf1, 0xdb, 0xfe, 0xf3, 0xeb, 0xaf,
+    0xc3, 0x4e, 0xb2, 0xff, 0x17, 0x7b, 0x26, 0xef, 0xd3, 0x2c, 0xa9, 0x1f,
+    0xa3, 0x9d, 0x51, 0x22, 0xf4, 0x30, 0x9c, 0xbf, 0xd2, 0x8d, 0x4f, 0x1a,
+    0x9d, 0x65, 0xf4, 0x3e, 0x80, 0xb2, 0xff, 0x76, 0xdc, 0xc1, 0xbf, 0x6b,
+    0x28, 0x67, 0xab, 0xe2, 0x1b, 0xf3, 0xf3, 0x7e, 0x71, 0x65, 0xf9, 0xff,
+    0xb2, 0x21, 0x65, 0x42, 0x3f, 0x72, 0x11, 0x40, 0x22, 0x09, 0x4d, 0xfb,
+    0x67, 0xb0, 0x0e, 0xb2, 0xff, 0x6a, 0x3c, 0xe3, 0x91, 0xd6, 0x5f, 0xf1,
+    0xdb, 0xfb, 0x78, 0x4e, 0x6a, 0xcb, 0xfa, 0x4f, 0xac, 0xeb, 0xeb, 0x2f,
+    0xe1, 0xb9, 0xfc, 0xc6, 0x2c, 0xa8, 0x3d, 0xcc, 0x2e, 0xbf, 0xec, 0xff,
+    0x04, 0xe6, 0x9f, 0x8b, 0x2f, 0x0e, 0x79, 0xd6, 0x5f, 0x9b, 0xfc, 0x76,
+    0x59, 0x7f, 0xda, 0x06, 0x9c, 0xbf, 0x80, 0x59, 0x53, 0xa7, 0x94, 0x32,
+    0x9c, 0x33, 0xd4, 0x25, 0xce, 0x40, 0xe7, 0x40, 0x1f, 0x09, 0x35, 0xe1,
+    0x35, 0x25, 0x97, 0xf0, 0x9f, 0x0c, 0x64, 0xeb, 0x2f, 0xe0, 0x79, 0xdb,
+    0xc1, 0x59, 0x52, 0x3f, 0xa9, 0x87, 0xb4, 0x5f, 0x7f, 0xf7, 0x65, 0x1f,
+    0x2c, 0xdf, 0x9a, 0x92, 0xcb, 0xf3, 0xf3, 0x93, 0xf1, 0x65, 0xee, 0x1d,
+    0xd6, 0x5f, 0xe2, 0x34, 0x4f, 0x78, 0x3c, 0x59, 0x53, 0x1e, 0x90, 0x47,
+    0x2f, 0xfe, 0x0f, 0x3c, 0xf2, 0x82, 0x1e, 0x79, 0x65, 0xff, 0x09, 0x00,
+    0x9a, 0x51, 0xa9, 0xd6, 0x5f, 0xc4, 0xff, 0x12, 0x3b, 0x59, 0x47, 0x3e,
+    0xa2, 0x3c, 0xbe, 0x20, 0x4e, 0x05, 0x97, 0xff, 0xfa, 0x6e, 0x30, 0xf6,
+    0x4c, 0xc5, 0xbd, 0xe6, 0x7f, 0x86, 0x16, 0x56, 0x22, 0xa9, 0x88, 0x5c,
+    0x8e, 0xff, 0x8f, 0xcd, 0x98, 0x38, 0x2f, 0xac, 0xbf, 0xdc, 0xd9, 0xfd,
+    0x83, 0xc2, 0x59, 0x60, 0x2c, 0xae, 0x8f, 0x23, 0x46, 0xf5, 0x08, 0xa5,
+    0x68, 0x41, 0x5f, 0xc1, 0xef, 0xd1, 0xac, 0x59, 0x7d, 0xd7, 0x3e, 0xcb,
+    0x2b, 0x0f, 0x45, 0xcb, 0xaa, 0x15, 0xe9, 0xe1, 0x81, 0xa8, 0xac, 0xf7,
+    0xa2, 0x3f, 0x46, 0xae, 0x50, 0xd2, 0xe3, 0xbd, 0xf9, 0xc2, 0x6c, 0x08,
+    0xb2, 0xfc, 0x28, 0xcd, 0x47, 0x16, 0x54, 0xc7, 0xa8, 0x45, 0x37, 0xf6,
+    0x7d, 0x87, 0x87, 0x59, 0x7c, 0x52, 0x63, 0xac, 0xb6, 0xc9, 0x8f, 0x35,
+    0xcb, 0x2f, 0xe6, 0x2d, 0xef, 0x30, 0xaa, 0x59, 0x7f, 0x44, 0xdd, 0x4b,
+    0x37, 0xac, 0xa9, 0x8f, 0x9b, 0x86, 0xb4, 0x34, 0x59, 0xbc, 0x24, 0x2f,
+    0xff, 0xc3, 0xf4, 0x08, 0x2f, 0xe4, 0xe0, 0xe7, 0x20, 0x09, 0x2e, 0x1e,
+    0x2c, 0xbf, 0x4f, 0x13, 0xbf, 0x16, 0x56, 0x22, 0x5d, 0x96, 0x1c, 0x5a,
+    0xfe, 0xdd, 0x70, 0x1e, 0x38, 0xb2, 0xe8, 0x02, 0xcb, 0x05, 0x60, 0x85,
+    0xb5, 0x78, 0xf9, 0xc0, 0x8d, 0x7f, 0xee, 0x6f, 0x79, 0xa7, 0x72, 0x79,
+    0x96, 0x5f, 0xfa, 0x37, 0x66, 0x7d, 0xef, 0xfd, 0xf0, 0xb2, 0xff, 0xd8,
+    0x38, 0x94, 0x68, 0xff, 0xe9, 0x65, 0xfc, 0xe0, 0x98, 0xa0, 0x6b, 0x2f,
+    0xf8, 0xb2, 0x71, 0xfb, 0x0b, 0xeb, 0x2f, 0x7d, 0xb8, 0xb2, 0xa1, 0x36,
+    0x99, 0x88, 0xb4, 0x84, 0x74, 0x5f, 0x1f, 0x91, 0x6f, 0x0e, 0x2b, 0x6a,
+    0x75, 0x55, 0xbb, 0x41, 0x68, 0xa8, 0x7c, 0x2a, 0x8c, 0x76, 0x9c, 0x21,
+    0x45, 0x59, 0x4c, 0x4e, 0x3d, 0x4a, 0x34, 0xf1, 0xca, 0x71, 0xc9, 0x69,
+    0xc6, 0xc6, 0x27, 0xdc, 0x71, 0x9d, 0x43, 0xb5, 0xa1, 0x51, 0x34, 0xb7,
+    0xdd, 0x4a, 0x87, 0x3c, 0x71, 0xfe, 0x95, 0xca, 0xf1, 0x86, 0x82, 0x32,
+    0x12, 0x8c, 0x93, 0x92, 0x82, 0xbf, 0x39, 0x86, 0x18, 0x67, 0xef, 0x8c,
+    0x8b, 0x6e, 0x17, 0xc2, 0x47, 0xfb, 0x7f, 0xf6, 0xb3, 0xae, 0xfc, 0xdf,
+    0xe3, 0xf4, 0xb2, 0xf8, 0x02, 0x14, 0x96, 0x5d, 0xd8, 0xb0, 0x1f, 0x57,
+    0xd1, 0xe8, 0x5a, 0xab, 0x80, 0xca, 0x87, 0xbe, 0x8d, 0x48, 0xeb, 0x2f,
+    0xba, 0xe3, 0xee, 0x2c, 0xbf, 0x60, 0xc3, 0xfe, 0x2c, 0xbf, 0xcf, 0xe7,
+    0x10, 0xf9, 0xc5, 0x97, 0x9f, 0x46, 0xac, 0xb0, 0xb9, 0xd1, 0x80, 0xc4,
+    0x44, 0x4d, 0xbc, 0xa0, 0xc3, 0x3b, 0xfc, 0x2f, 0x35, 0xdb, 0xbf, 0x6a,
+    0x8b, 0xcd, 0x50, 0xfd, 0x9c, 0x72, 0x79, 0x1c, 0x78, 0xf9, 0x6a, 0xd1,
+    0x7a, 0xa5, 0x1a, 0xea, 0x55, 0xf9, 0xdf, 0x7d, 0x28, 0x64, 0xad, 0x72,
+    0x7f, 0x21, 0xdd, 0xbd, 0x52, 0xff, 0x0b, 0xcd, 0x76, 0xef, 0xda, 0xa2,
+    0x96, 0x5d, 0xb5, 0xed, 0x35, 0x97, 0x7e, 0x75, 0x97, 0xe6, 0x17, 0xcc,
+    0x65, 0x97, 0xff, 0xef, 0x61, 0x61, 0xbe, 0x79, 0x78, 0xc7, 0x10, 0xeb,
+    0x2f, 0xbb, 0x77, 0xed, 0x51, 0x61, 0x2a, 0x48, 0x87, 0xd2, 0xbd, 0xc3,
+    0xc5, 0x97, 0x37, 0x4b, 0x2d, 0xf8, 0x35, 0xba, 0x16, 0xbf, 0xfe, 0xc2,
+    0x1c, 0x7a, 0x3a, 0xfe, 0x13, 0x9d, 0x65, 0xe2, 0x0f, 0x6b, 0x2a, 0x0f,
+    0xa9, 0xd3, 0x6d, 0xc5, 0x97, 0xf0, 0x74, 0xd3, 0xb9, 0xd6, 0x58, 0x5e,
+    0xd3, 0x54, 0x51, 0x04, 0x43, 0x18, 0xc8, 0x57, 0xb2, 0x81, 0xe1, 0x21,
+    0xc2, 0x0d, 0xb1, 0x1b, 0xfc, 0x2f, 0x35, 0xdb, 0xbf, 0x6a, 0x8b, 0x2d,
+    0x69, 0x2c, 0xbb, 0x46, 0xac, 0xbe, 0x16, 0x6e, 0xd3, 0xda, 0x96, 0x52,
+    0x4b, 0xc2, 0xc4, 0x3a, 0xca, 0xec, 0xf7, 0x38, 0x62, 0x10, 0xba, 0x35,
+    0x16, 0xa4, 0x23, 0xc7, 0x4b, 0xa3, 0xcb, 0x2c, 0x05, 0x97, 0x1b, 0x3a,
+    0xcb, 0x6a, 0x46, 0xab, 0x04, 0x6b, 0xb3, 0xe6, 0x74, 0x0b, 0x01, 0x65,
+    0x8d, 0x59, 0x4c, 0x68, 0xfe, 0x23, 0x7f, 0xfe, 0x1b, 0x7f, 0xd8, 0x36,
+    0xc1, 0xbc, 0xee, 0x4b, 0x2f, 0xf9, 0xfa, 0x2c, 0xeb, 0xf0, 0x6a, 0xcb,
+    0xfd, 0x3f, 0x5c, 0x81, 0xfd, 0x96, 0x5f, 0xa3, 0x37, 0xc7, 0x16, 0x5a,
+    0x1c, 0xf7, 0x4c, 0x35, 0xa8, 0x4c, 0x45, 0xd4, 0xca, 0x12, 0xf7, 0xcf,
+    0x29, 0x0d, 0x65, 0xff, 0xda, 0xf3, 0x8c, 0xa0, 0x3d, 0xf9, 0xd6, 0x5f,
+    0xb5, 0x1f, 0x7f, 0x2c, 0xa6, 0x3e, 0xb7, 0x44, 0xbc, 0x61, 0x86, 0x24,
+    0xbf, 0xe8, 0x97, 0x5f, 0xd4, 0x67, 0x49, 0x05, 0x9a, 0x0b, 0xfe, 0x0b,
+    0xf5, 0x9f, 0x6e, 0x8c, 0x59, 0x74, 0x71, 0x65, 0x0d, 0x36, 0xaf, 0x42,
+    0x34, 0x90, 0x38, 0x99, 0xbc, 0xee, 0xed, 0xa7, 0xb5, 0x2c, 0xbf, 0x99,
+    0xf8, 0x0e, 0x05, 0x65, 0xff, 0xcd, 0x27, 0xe3, 0x90, 0x7b, 0xce, 0x24,
+    0xbf, 0xff, 0xbc, 0xdf, 0xf6, 0x70, 0xb0, 0xe1, 0xe7, 0x9e, 0x4b, 0x2f,
+    0xf4, 0x4b, 0xef, 0xe7, 0x1a, 0xcb, 0xe7, 0xf9, 0xbc, 0x59, 0x50, 0x8f,
+    0x2c, 0x43, 0xd2, 0xd3, 0x99, 0x5a, 0x4b, 0x2d, 0x25, 0x96, 0x92, 0xcb,
+    0xc6, 0x18, 0x62, 0xcb, 0x76, 0x90, 0x59, 0xa0, 0xa8, 0x3f, 0x73, 0x44,
+    0x58, 0x44, 0x06, 0x34, 0xb2, 0xfc, 0x1e, 0x79, 0xe4, 0xb3, 0x09, 0x77,
+    0xff, 0xdc, 0x6e, 0xf0, 0xb5, 0x05, 0x83, 0xc3, 0x56, 0x51, 0xd1, 0x07,
+    0xf3, 0x5b, 0x74, 0xb2, 0xc6, 0xac, 0xb0, 0x56, 0x51, 0x1a, 0x3e, 0x09,
+    0x56, 0x1f, 0xc7, 0x08, 0xfe, 0x6b, 0x77, 0x0d, 0x59, 0x6c, 0x59, 0x70,
+    0x41, 0x06, 0xa0, 0x63, 0x17, 0x34, 0x2c, 0xbf, 0x8a, 0x0e, 0x51, 0x8b,
+    0x2f, 0xfe, 0x87, 0xd7, 0xfd, 0x83, 0x0f, 0xf8, 0xb2, 0xe9, 0x42, 0xcb,
+    0xdc, 0x19, 0xab, 0x2a, 0x74, 0x71, 0x8c, 0xb2, 0x61, 0x5f, 0x15, 0x05,
+    0x10, 0x41, 0x6b, 0xff, 0xd9, 0xd7, 0xc4, 0xfb, 0x7f, 0xd8, 0x36, 0x59,
+    0x7f, 0xff, 0xfa, 0x3f, 0xc6, 0xe7, 0x23, 0xfe, 0x68, 0xd0, 0x0e, 0xf2,
+    0x97, 0xcd, 0x59, 0x46, 0xa3, 0x0f, 0xc9, 0x77, 0x37, 0x4b, 0x2f, 0x02,
+    0x5e, 0x59, 0x74, 0x1d, 0x65, 0xff, 0xfa, 0x08, 0x32, 0x94, 0x7f, 0xd8,
+    0x71, 0x20, 0x0b, 0x2f, 0xfe, 0x69, 0xe3, 0xcd, 0x1f, 0xe0, 0x78, 0xb2,
+    0xff, 0xe0, 0xcb, 0x39, 0xa8, 0x69, 0x3f, 0x12, 0x59, 0xb4, 0x88, 0x72,
+    0x44, 0xa9, 0x26, 0x07, 0xf8, 0x6e, 0x5d, 0xd8, 0xb8, 0x65, 0x8e, 0xcf,
+    0x09, 0x69, 0x22, 0x8e, 0x33, 0x1c, 0x8e, 0x74, 0xd5, 0x1e, 0xc8, 0xb5,
+    0x18, 0xfb, 0xc2, 0xc4, 0xa3, 0x41, 0xe4, 0x67, 0x3f, 0x8c, 0x77, 0x79,
+    0x21, 0x82, 0xfb, 0x63, 0xa2, 0x46, 0x33, 0x7f, 0xf8, 0x59, 0xde, 0x42,
+    0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0xa3, 0x17, 0xcd, 0xf7, 0xdb, 0x59, 0x7f,
+    0x3e, 0x80, 0x78, 0x02, 0xcb, 0xe8, 0xd4, 0x01, 0x65, 0xfd, 0x03, 0x83,
+    0xc0, 0x8b, 0x2a, 0x64, 0x4f, 0xf8, 0x93, 0x79, 0x68, 0x84, 0x37, 0xf1,
+    0x3f, 0xfc, 0xd3, 0x2c, 0xbe, 0xcc, 0x26, 0x59, 0x7e, 0xf4, 0x4f, 0x83,
+    0x59, 0x7e, 0x27, 0x04, 0x08, 0xb2, 0xff, 0x67, 0xf8, 0x24, 0xf1, 0x3a,
+    0xcb, 0xff, 0x60, 0x33, 0x26, 0x31, 0xfa, 0xe2, 0xcb, 0xff, 0x37, 0x52,
+    0xe1, 0x67, 0xfc, 0x15, 0x97, 0xfc, 0xda, 0xf6, 0x61, 0x4b, 0x8b, 0x2a,
+    0x47, 0xed, 0xd9, 0xfd, 0xf3, 0xef, 0xc2, 0x59, 0x7f, 0xff, 0xd8, 0x7f,
+    0x34, 0x7c, 0xb3, 0xfe, 0xc2, 0xc3, 0x1c, 0x0b, 0x2b, 0xa4, 0x54, 0x68,
+    0x8f, 0xc4, 0x57, 0x6e, 0x6e, 0xac, 0xbf, 0xf3, 0xcb, 0xbf, 0x31, 0xe3,
+    0x46, 0xac, 0xbf, 0xfb, 0x6d, 0xc8, 0x19, 0xf8, 0x26, 0x02, 0xcb, 0x0b,
+    0x85, 0x68, 0x58, 0x82, 0x69, 0x6c, 0xc3, 0xfe, 0x28, 0x01, 0x39, 0x1b,
+    0x7e, 0x35, 0xe0, 0x98, 0x98, 0x3a, 0x22, 0x05, 0x49, 0xb5, 0x17, 0xd4,
+    0xa6, 0xb3, 0xc2, 0x2d, 0xe9, 0x82, 0xbc, 0x8c, 0x9b, 0xf3, 0x87, 0xb7,
+    0xff, 0x0b, 0x79, 0x0b, 0xcd, 0x76, 0xef, 0xda, 0xa2, 0x39, 0x5f, 0xfe,
+    0x16, 0x77, 0x90, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x27, 0x25, 0xfe, 0x17,
+    0x9a, 0xed, 0xdf, 0xb5, 0x45, 0x98, 0xbb, 0xe0, 0x59, 0x7e, 0xcf, 0x16,
+    0x69, 0x65, 0xe9, 0xe3, 0x4b, 0x2f, 0xd2, 0xe3, 0x9c, 0x5f, 0x8f, 0x68,
+    0x85, 0xf8, 0x4d, 0x7c, 0x2a, 0xf6, 0xad, 0xa8, 0x55, 0xac, 0xbf, 0xc3,
+    0xc3, 0xc7, 0x50, 0x75, 0x95, 0xb5, 0x1f, 0x60, 0xab, 0x39, 0xb6, 0xf5,
+    0x97, 0xfb, 0x51, 0xff, 0x3f, 0x52, 0x59, 0x7f, 0xff, 0xfd, 0x13, 0x7a,
+    0x3f, 0x02, 0x36, 0xa6, 0x8f, 0x66, 0xfc, 0xf6, 0x0f, 0x7e, 0x2c, 0xa0,
+    0x22, 0xd4, 0x8d, 0x2f, 0xfb, 0x38, 0xff, 0x00, 0x85, 0x25, 0x96, 0x02,
+    0xcb, 0xfb, 0x9a, 0xd6, 0x75, 0xc5, 0x95, 0xb5, 0x1e, 0x06, 0x08, 0xde,
+    0xd6, 0x1d, 0x65, 0xf3, 0x16, 0x71, 0x65, 0xb3, 0xe6, 0xf3, 0x74, 0x72,
+    0xff, 0xff, 0xde, 0x82, 0x0f, 0x39, 0x02, 0x7d, 0x88, 0x32, 0xce, 0x7d,
+    0x96, 0x5f, 0x8b, 0x37, 0xe1, 0x2c, 0xbe, 0xff, 0xdb, 0x4b, 0x2e, 0xe0,
+    0x16, 0x54, 0x91, 0x96, 0xcd, 0x7a, 0x27, 0xf9, 0x15, 0xbe, 0xb2, 0xdb,
+    0xab, 0x2b, 0x6c, 0xd2, 0x88, 0x23, 0x79, 0xcb, 0xb5, 0x97, 0xb9, 0x1c,
+    0x59, 0x76, 0xdf, 0x16, 0x5f, 0x9c, 0xc9, 0xf0, 0xc5, 0x95, 0x39, 0xe2,
+    0x10, 0xd5, 0xc2, 0x8f, 0x2c, 0xb3, 0x2c, 0xbf, 0xd1, 0xc8, 0xfc, 0xf8,
+    0x62, 0xcb, 0x31, 0xcf, 0x10, 0x84, 0x2e, 0xee, 0x4b, 0x2f, 0xdf, 0xe1,
+    0x44, 0x96, 0x5f, 0x19, 0xf8, 0x35, 0x65, 0x41, 0xf1, 0xe0, 0xc3, 0x13,
+    0xdf, 0xf8, 0x87, 0xe8, 0xe7, 0x33, 0x50, 0xb2, 0xe0, 0x3a, 0xcb, 0xd1,
+    0x84, 0xb2, 0xfb, 0xaf, 0xe4, 0x2c, 0xa1, 0x9b, 0xcc, 0x1a, 0xb0, 0x8b,
+    0x2f, 0xff, 0x77, 0x1c, 0xe6, 0x1f, 0xaf, 0x84, 0xbe, 0xb2, 0xb6, 0x1e,
+    0xf6, 0x09, 0x5f, 0xce, 0x5f, 0xdb, 0x73, 0x56, 0x5f, 0xbb, 0xf3, 0xb0,
+    0xad, 0x65, 0xf8, 0x3c, 0x8e, 0x42, 0xca, 0xd1, 0xe9, 0xb9, 0x65, 0xfc,
+    0x40, 0xf6, 0x01, 0xd6, 0x5f, 0x14, 0x6f, 0x0a, 0xca, 0x63, 0xcf, 0x72,
+    0xcb, 0xba, 0x3a, 0xca, 0x59, 0x7f, 0xc4, 0x0c, 0xfc, 0x13, 0x01, 0x65,
+    0xb6, 0xf0, 0xf0, 0x5c, 0x2e, 0xf1, 0x06, 0x65, 0x96, 0x17, 0xb5, 0x32,
+    0x00, 0x05, 0x25, 0xb1, 0x0c, 0x89, 0xc8, 0xa4, 0xf2, 0x36, 0x2c, 0x87,
+    0xa1, 0xac, 0x3d, 0x92, 0xf4, 0x39, 0x33, 0x06, 0x88, 0x8e, 0xbf, 0xe8,
+    0x44, 0xb9, 0x60, 0xac, 0xf4, 0x94, 0xb8, 0xfd, 0xf2, 0x30, 0xc2, 0x0f,
+    0x7b, 0x86, 0xd9, 0x00, 0x8b, 0x3b, 0xa5, 0x37, 0xed, 0x76, 0xef, 0xda,
+    0xa2, 0xdd, 0x5b, 0x8b, 0x2b, 0x0f, 0x1c, 0x06, 0xd7, 0xe1, 0x63, 0xf4,
+    0x69, 0x65, 0x0b, 0x3c, 0xbf, 0x10, 0xdf, 0x98, 0x1c, 0xcd, 0xd5, 0x97,
+    0xf1, 0x38, 0xbd, 0x4f, 0xe5, 0x97, 0x9b, 0xa0, 0x2c, 0xbf, 0x75, 0x2f,
+    0x30, 0x16, 0x5f, 0xfd, 0xa7, 0xec, 0x01, 0xe7, 0xe3, 0xa3, 0x16, 0x5c,
+    0x46, 0xac, 0xb3, 0xac, 0xbe, 0xed, 0xdf, 0xb5, 0x45, 0x20, 0xac, 0x3d,
+    0x79, 0x85, 0xf4, 0x21, 0x7f, 0xa5, 0xf6, 0x33, 0x80, 0x65, 0x97, 0xfe,
+    0xcf, 0x36, 0xff, 0x66, 0x17, 0x6b, 0x2f, 0xec, 0xf6, 0x79, 0x8d, 0x59,
+    0x7e, 0xfc, 0x6f, 0x6d, 0xeb, 0x2f, 0x3c, 0x85, 0xc2, 0x78, 0x43, 0x29,
+    0xc8, 0x4f, 0xf4, 0x5f, 0xc3, 0x4f, 0x9f, 0xef, 0x2d, 0xbe, 0xce, 0x78,
+    0x2b, 0x2f, 0xe8, 0x2e, 0x71, 0x8e, 0xb2, 0xb0, 0xf3, 0x98, 0x8a, 0xff,
+    0x30, 0xc3, 0xfe, 0x1c, 0x96, 0x5f, 0x18, 0x78, 0xe2, 0xcb, 0xce, 0x52,
+    0x59, 0x61, 0x70, 0xae, 0x5b, 0xb2, 0xad, 0x18, 0x1e, 0x3d, 0xff, 0x43,
+    0x31, 0xc8, 0x02, 0x66, 0x61, 0x1d, 0xff, 0xc2, 0xde, 0x42, 0xf3, 0x5d,
+    0xbb, 0xf6, 0xa8, 0x94, 0x95, 0x3b, 0x61, 0x51, 0x32, 0xb1, 0xd7, 0x1e,
+    0x13, 0xa0, 0xa4, 0x5c, 0x94, 0xa0, 0xaf, 0xcb, 0xba, 0xdd, 0x84, 0x35,
+    0xe1, 0x6f, 0xda, 0xcb, 0xf9, 0x8b, 0x3d, 0x9d, 0xac, 0xbf, 0x98, 0xbf,
+    0x8c, 0x35, 0x97, 0x4b, 0xeb, 0x2f, 0x14, 0x18, 0xb2, 0xe8, 0x17, 0xa3,
+    0x66, 0x42, 0xf5, 0x24, 0x45, 0xfd, 0x7a, 0xf7, 0x02, 0x75, 0x96, 0xda,
+    0xd6, 0x58, 0x5c, 0x93, 0x0d, 0xea, 0x16, 0xec, 0x47, 0xb6, 0x3b, 0x78,
+    0x9e, 0x4b, 0x2f, 0xc2, 0x81, 0x4e, 0xb9, 0xc5, 0x97, 0xff, 0x9b, 0xa0,
+    0x6b, 0x07, 0x1a, 0x6e, 0x80, 0xb2, 0xfd, 0xae, 0xdd, 0xfb, 0x54, 0x4e,
+    0xcb, 0xfa, 0x77, 0xd7, 0x7a, 0xc5, 0x97, 0xbc, 0xe6, 0x2c, 0xbf, 0xe2,
+    0x79, 0x04, 0x07, 0x79, 0x2c, 0xb6, 0x0c, 0xf5, 0x7c, 0x3b, 0x79, 0xe4,
+    0x2c, 0x55, 0x26, 0xbb, 0x06, 0x38, 0x96, 0xe6, 0xc5, 0x08, 0x4b, 0xa7,
+    0xdc, 0x59, 0x7f, 0xfe, 0x61, 0x84, 0xf1, 0xba, 0xe3, 0x28, 0x2c, 0xed,
+    0x65, 0xfe, 0x94, 0x6a, 0x78, 0xd4, 0xeb, 0x2f, 0xfd, 0xe2, 0x79, 0x04,
+    0x07, 0x79, 0x2c, 0xa8, 0x3f, 0x3c, 0x35, 0xbf, 0xff, 0x67, 0x52, 0xf4,
+    0x71, 0xf5, 0x1b, 0xbe, 0x7e, 0xd6, 0x58, 0x5e, 0x2b, 0x3a, 0x3c, 0x6f,
+    0x1e, 0x65, 0x71, 0xb2, 0x86, 0x4e, 0xe9, 0x05, 0xf3, 0x6a, 0x37, 0xac,
+    0xbb, 0x3c, 0xb2, 0xff, 0xed, 0xb7, 0x20, 0x67, 0xe0, 0x98, 0x0b, 0x2c,
+    0x2f, 0x87, 0xfb, 0xb6, 0x46, 0x20, 0xb5, 0xff, 0xce, 0x7f, 0x67, 0x6f,
+    0xe8, 0x12, 0x4b, 0x2f, 0xdf, 0xd6, 0x41, 0x8b, 0x2f, 0x30, 0xdd, 0x65,
+    0xff, 0xc5, 0x9e, 0x79, 0xf3, 0x84, 0xfd, 0x2c, 0xbb, 0x6c, 0x58, 0xd1,
+    0x96, 0xc8, 0xbe, 0x28, 0xe0, 0xdd, 0x42, 0xf7, 0x84, 0xa3, 0x2c, 0x3c,
+    0xb8, 0x8e, 0x43, 0xa7, 0x6e, 0x30, 0x6b, 0xff, 0x72, 0x0b, 0xa0, 0x73,
+    0x90, 0x05, 0x97, 0xff, 0xff, 0xfd, 0xe6, 0xfb, 0xbf, 0x5c, 0xe7, 0x20,
+    0xf1, 0xec, 0xc9, 0xf0, 0xb3, 0xaf, 0xf2, 0x3a, 0x59, 0x7f, 0xa2, 0x4d,
+    0xf6, 0x29, 0x2c, 0xbf, 0xff, 0xf7, 0x61, 0x9f, 0x37, 0xc7, 0x58, 0x37,
+    0x90, 0x87, 0xe6, 0x38, 0xd6, 0x5f, 0x0d, 0xfe, 0x2f, 0x13, 0x75, 0xec,
+    0xff, 0x50, 0x94, 0xe1, 0x8d, 0xff, 0xd3, 0x75, 0xc6, 0x3e, 0xc1, 0x35,
+    0x93, 0xac, 0xbe, 0xed, 0xdf, 0xb5, 0x44, 0x58, 0xbf, 0x9b, 0x4e, 0x5d,
+    0xc2, 0xca, 0xd1, 0xee, 0x78, 0xc2, 0xfb, 0x3e, 0x06, 0x59, 0x7f, 0xe7,
+    0x90, 0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x25, 0xd5, 0xfe, 0x71, 0xc1, 0x7a,
+    0x38, 0xb2, 0xfb, 0x4c, 0x19, 0xd6, 0x5f, 0xff, 0xd8, 0x3f, 0x40, 0x82,
+    0xfe, 0x4e, 0x0e, 0x72, 0x00, 0x92, 0xc2, 0xe1, 0x3e, 0x9c, 0x85, 0x3e,
+    0x88, 0x8e, 0x43, 0xe4, 0xef, 0x98, 0xed, 0x91, 0xdf, 0xfc, 0x77, 0x90,
+    0xbc, 0xd7, 0x6e, 0xfd, 0xaa, 0x26, 0x25, 0xfd, 0xe8, 0x2e, 0xa6, 0x75,
+    0x97, 0xf9, 0xdb, 0x6d, 0x81, 0x83, 0x59, 0x7d, 0x9d, 0xc0, 0xb8, 0x3e,
+    0x2f, 0x17, 0x50, 0xb4, 0x78, 0x7a, 0x16, 0xd7, 0xfb, 0xce, 0x71, 0x6e,
+    0x11, 0xac, 0xbf, 0x6b, 0xb7, 0x7e, 0xd5, 0x15, 0x4a, 0xd8, 0xb2, 0xb0,
+    0xf1, 0x8d, 0x36, 0xbf, 0xed, 0x69, 0x88, 0xb0, 0x3d, 0xac, 0xbf, 0xf0,
+    0x5f, 0x52, 0x2c, 0x31, 0xc0, 0xb2, 0xff, 0xe7, 0xe6, 0x98, 0xcf, 0xf9,
+    0xb5, 0x25, 0x97, 0xfd, 0xa7, 0xf7, 0x52, 0xcf, 0x8b, 0x84, 0x5d, 0x8c,
+    0xe3, 0xc7, 0xd4, 0x2d, 0x33, 0xd7, 0x86, 0xed, 0xff, 0x85, 0xfa, 0x0f,
+    0x83, 0x82, 0xfa, 0xcb, 0xdf, 0x69, 0xd6, 0x5f, 0xf9, 0xe4, 0x2f, 0x35,
+    0xdb, 0xbf, 0x6a, 0x89, 0xd1, 0x7c, 0x1e, 0x30, 0x16, 0x5e, 0x6e, 0x8c,
+    0x59, 0x40, 0x3c, 0x0e, 0x11, 0x51, 0xa8, 0xcd, 0x38, 0xe8, 0x21, 0x1d,
+    0x7c, 0xe5, 0xfe, 0x2c, 0xbe, 0x9c, 0xa2, 0x75, 0x97, 0xc7, 0x83, 0x45,
+    0x9c, 0xf1, 0x02, 0x43, 0x7f, 0xe0, 0x07, 0x82, 0xc6, 0x63, 0x94, 0x96,
+    0x50, 0xb4, 0x7c, 0x33, 0xd0, 0x0f, 0x2f, 0xf3, 0x3e, 0xa2, 0x4f, 0xbd,
+    0x65, 0xf3, 0x10, 0x19, 0x65, 0xfa, 0x68, 0x9a, 0x38, 0xb2, 0xfe, 0x33,
+    0x1b, 0x7e, 0x12, 0xca, 0x63, 0xd7, 0xe1, 0x4d, 0xe6, 0xf4, 0x2c, 0x16,
+    0x68, 0x6f, 0xfe, 0x0f, 0x3f, 0x1d, 0x0b, 0x0c, 0xcc, 0x75, 0x95, 0x24,
+    0xc3, 0x8f, 0x09, 0x8f, 0x16, 0xdf, 0xb5, 0xdb, 0xbf, 0x6a, 0x89, 0xdd,
+    0x7f, 0xff, 0x41, 0xc3, 0xa9, 0xa0, 0xfb, 0x0f, 0x9f, 0xe3, 0x71, 0x65,
+    0xe7, 0x90, 0xbc, 0x44, 0xa7, 0xcd, 0xaf, 0xdf, 0x0b, 0x9d, 0x92, 0x5f,
+    0xf8, 0xa3, 0xf9, 0xcc, 0xce, 0xa4, 0xb2, 0x86, 0xaa, 0x93, 0x23, 0x41,
+    0x3c, 0x32, 0x9c, 0xd7, 0xe4, 0xf7, 0xfc, 0x38, 0x94, 0x0b, 0x33, 0x80,
+    0x59, 0x7e, 0xe1, 0x40, 0x38, 0xb2, 0xf1, 0x60, 0xd6, 0x5d, 0x02, 0xe0,
+    0xf0, 0x80, 0x4f, 0x42, 0xd3, 0x01, 0xc5, 0x52, 0x7e, 0xbf, 0x70, 0x5f,
+    0x7f, 0x85, 0x97, 0xff, 0x85, 0x9d, 0xe4, 0x2f, 0x35, 0xdb, 0xbf, 0x6a,
+    0x8a, 0x15, 0x7f, 0xfc, 0xff, 0x96, 0x13, 0x0c, 0x5f, 0x27, 0x8d, 0x2c,
+    0xbe, 0x27, 0xd6, 0xf5, 0x97, 0x8e, 0xe6, 0x2c, 0xb0, 0xb8, 0x3c, 0x09,
+    0xc8, 0xee, 0x9d, 0x96, 0x5f, 0xfe, 0xf0, 0x7f, 0x05, 0x93, 0x9a, 0x18,
+    0x99, 0x65, 0xfc, 0x13, 0x9d, 0xe4, 0x2e, 0x0f, 0x8f, 0xb1, 0x7b, 0xff,
+    0xff, 0x16, 0x6f, 0x6f, 0x04, 0x5f, 0x7e, 0x6f, 0x14, 0x66, 0xb0, 0xeb,
+    0x2a, 0x49, 0xa1, 0x7a, 0x11, 0xbc, 0x47, 0xbf, 0x07, 0xaf, 0xb7, 0x6b,
+    0x2f, 0xd8, 0x0c, 0x72, 0x59, 0x7d, 0xc6, 0x33, 0xeb, 0x2f, 0x40, 0x05,
+    0xce, 0x7e, 0x44, 0x55, 0xf2, 0x5a, 0x64, 0x75, 0x14, 0x2a, 0x2f, 0xf8,
+    0xef, 0xcc, 0x32, 0x08, 0x6b, 0x2f, 0xfc, 0xf2, 0x17, 0x9a, 0xed, 0xdf,
+    0xb5, 0x45, 0x24, 0xbf, 0xd9, 0xe2, 0xc1, 0xf8, 0x2b, 0x2f, 0x41, 0x0d,
+    0x65, 0x85, 0xe2, 0x34, 0xce, 0x71, 0xf4, 0xe3, 0x0c, 0xaf, 0xff, 0xfb,
+    0x08, 0x3c, 0x8c, 0x2f, 0x93, 0x9b, 0x93, 0x41, 0x0d, 0x65, 0xc7, 0x25,
+    0x97, 0xff, 0x4d, 0xe7, 0x3f, 0xfd, 0x1f, 0x09, 0xd6, 0x5f, 0x61, 0x44,
+    0xeb, 0x2b, 0x0f, 0x9f, 0x48, 0xd7, 0xb3, 0x82, 0xc9, 0x30, 0x1e, 0x31,
+    0x88, 0xfb, 0x50, 0xd8, 0xc3, 0x4f, 0x29, 0x16, 0x51, 0xb1, 0xe1, 0x57,
+    0x71, 0xdc, 0x4c, 0x55, 0xa9, 0x40, 0x87, 0x97, 0xac, 0xe6, 0x20, 0x2b,
+    0x25, 0xcf, 0xca, 0xbd, 0x0c, 0x3e, 0x76, 0xe3, 0x46, 0xbe, 0xed, 0xdf,
+    0xb5, 0x44, 0x48, 0xbf, 0xff, 0x36, 0xbc, 0xfb, 0x26, 0xf4, 0x4e, 0x2b,
+    0xd4, 0x6d, 0xac, 0xad, 0x22, 0x43, 0xc6, 0x17, 0xff, 0xfb, 0xd1, 0x38,
+    0xaf, 0x51, 0xb6, 0x2f, 0x4d, 0x07, 0x9f, 0x0c, 0x59, 0x61, 0x78, 0x88,
+    0xf9, 0x88, 0xef, 0x69, 0xf4, 0xb2, 0xff, 0xcf, 0x21, 0x79, 0xae, 0xdd,
+    0xfb, 0x54, 0x4b, 0xcb, 0xe7, 0xfb, 0xce, 0xb2, 0xc2, 0xd9, 0x11, 0x87,
+    0x1c, 0xdb, 0x4e, 0xbf, 0xfa, 0x37, 0xbc, 0xcd, 0xae, 0xa5, 0x13, 0x2c,
+    0xbd, 0xb5, 0x1c, 0x0b, 0x2e, 0x98, 0x96, 0x5f, 0xf8, 0x54, 0x76, 0x18,
+    0x60, 0xa2, 0x4b, 0x2f, 0xfb, 0x64, 0x7d, 0xb5, 0x1b, 0xe6, 0x59, 0x7f,
+    0xfb, 0xd1, 0xc1, 0x07, 0x1a, 0x9b, 0x08, 0x0b, 0x2f, 0xb4, 0x1f, 0xf1,
+    0x65, 0xfc, 0x36, 0x35, 0xc8, 0x0b, 0x2f, 0xd0, 0x40, 0x19, 0xd6, 0x5f,
+    0xb4, 0x03, 0xb7, 0x16, 0x5e, 0x82, 0xe9, 0x65, 0xfb, 0xe2, 0x1c, 0xa1,
+    0x65, 0x9b, 0xc7, 0x88, 0x43, 0x97, 0xff, 0xbd, 0xbe, 0x08, 0x1b, 0x98,
+    0x3c, 0xd7, 0x4b, 0x2f, 0xf3, 0x69, 0xc6, 0xc4, 0x6a, 0xcb, 0xa3, 0xeb,
+    0x2f, 0xf9, 0xe7, 0xd4, 0x75, 0x26, 0x3a, 0xcb, 0xff, 0xc1, 0x1b, 0x68,
+    0x49, 0xb7, 0x42, 0xe5, 0x32, 0xca, 0x92, 0x68, 0xec, 0x4d, 0xe4, 0xf0,
+    0x19, 0x10, 0xb7, 0x0e, 0xaf, 0xe0, 0x7a, 0x34, 0xc7, 0x59, 0x7f, 0xe9,
+    0xb9, 0x1b, 0xdf, 0xd1, 0xd4, 0xcb, 0x2a, 0x0f, 0xc1, 0xcb, 0x6f, 0x6e,
+    0x88, 0x75, 0x97, 0x78, 0x0b, 0x29, 0x8d, 0xc3, 0x90, 0xdf, 0xb2, 0x7c,
+    0xe1, 0xd6, 0x5f, 0xb5, 0x1f, 0x6d, 0xeb, 0x2f, 0xd3, 0xbf, 0x1c, 0x0b,
+    0x29, 0x8f, 0x45, 0xca, 0x6f, 0xfe, 0x9b, 0x60, 0x85, 0x1b, 0xdf, 0x7c,
+    0x4c, 0xb2, 0x96, 0x5f, 0x7f, 0x35, 0x32, 0xcb, 0xdf, 0x7d, 0xeb, 0x2d,
+    0x2c, 0x3c, 0x17, 0x23, 0xbf, 0x3f, 0x23, 0x7e, 0x2c, 0xa9, 0x8f, 0x3b,
+    0x79, 0x35, 0x42, 0x61, 0x78, 0x98, 0xf0, 0x9a, 0xbb, 0x50, 0xb2, 0xb6,
+    0xa5, 0xdd, 0xc9, 0x1e, 0x8d, 0x2f, 0x08, 0xfa, 0x2d, 0x62, 0x79, 0xa3,
+    0xb3, 0xd4, 0x31, 0xbc, 0xb0, 0x43, 0xff, 0x79, 0xdf, 0x19, 0x5e, 0xe9,
+    0x9d, 0xd8, 0x4b, 0x2f, 0xed, 0x9c, 0xf6, 0x37, 0xd6, 0x50, 0xcf, 0x11,
+    0x85, 0x6d, 0xd2, 0xcb, 0xfe, 0x03, 0xfe, 0x70, 0xcd, 0x1b, 0x8b, 0x28,
+    0x67, 0xa0, 0xc2, 0x57, 0xf1, 0x07, 0xf3, 0x41, 0xab, 0x2f, 0x0a, 0xdb,
+    0x4b, 0x29, 0xcf, 0x3c, 0x25, 0xf7, 0xff, 0x63, 0x75, 0xcf, 0xc4, 0xe7,
+    0x79, 0x2c, 0xa6, 0x3e, 0x6d, 0x10, 0xdf, 0xe0, 0xff, 0xc5, 0x19, 0xa5,
+    0x97, 0xe2, 0xc9, 0xc4, 0xde, 0xb2, 0xfb, 0x27, 0x13, 0x7a, 0xcb, 0xf0,
+    0xe3, 0xa1, 0xbe, 0xc3, 0xd1, 0x22, 0xbb, 0xff, 0xe6, 0xd6, 0xcf, 0x43,
+    0x7f, 0x81, 0xec, 0x30, 0xb2, 0xf9, 0xa7, 0x06, 0xe2, 0xcb, 0x74, 0xb2,
+    0xf3, 0xbf, 0x6a, 0x8a, 0x5d, 0x4b, 0x2b, 0x0f, 0x1b, 0xb1, 0x29, 0x8a,
+    0x6f, 0x8b, 0xf1, 0xa5, 0x97, 0xfd, 0x9a, 0xdc, 0xc1, 0xe6, 0xba, 0x59,
+    0x4c, 0x7b, 0xbb, 0xc8, 0x6f, 0xfd, 0x12, 0xf3, 0xb7, 0x5c, 0x83, 0x56,
+    0x54, 0xea, 0x9c, 0x25, 0x08, 0x33, 0x50, 0x26, 0x52, 0xd3, 0x67, 0xa1,
+    0x1a, 0x44, 0x77, 0xff, 0xcf, 0xa9, 0xf6, 0x6f, 0x0f, 0xa1, 0x8f, 0x03,
+    0x59, 0x7a, 0x35, 0xf5, 0x97, 0xf0, 0xfa, 0x8d, 0x37, 0x4b, 0x2f, 0xbf,
+    0x3e, 0x18, 0xb2, 0xa4, 0x7d, 0xec, 0x38, 0x45, 0xf7, 0xe6, 0x37, 0x59,
+    0xc5, 0x97, 0xfe, 0x82, 0x8f, 0x6c, 0x09, 0x07, 0xb5, 0x97, 0x82, 0xfc,
+    0x59, 0x7d, 0x30, 0x5e, 0x65, 0x97, 0xe8, 0x03, 0xf5, 0xc5, 0x97, 0x89,
+    0x80, 0xb2, 0xf6, 0x7f, 0x8b, 0x2a, 0x0d, 0xbf, 0x06, 0xea, 0x49, 0x93,
+    0x8c, 0xa2, 0x64, 0x0f, 0x0e, 0x00, 0x93, 0xeb, 0xf7, 0xed, 0xc7, 0x21,
+    0xee, 0xac, 0xa5, 0x97, 0xee, 0x7f, 0x51, 0xc5, 0x96, 0x8e, 0x8d, 0x9f,
+    0xc2, 0xef, 0xf8, 0x1c, 0xd4, 0x75, 0x26, 0x3a, 0xcb, 0xdf, 0x7d, 0xeb,
+    0x2f, 0xd3, 0x86, 0x68, 0xdc, 0x59, 0x7c, 0x19, 0xa3, 0x71, 0x65, 0xcf,
+    0x3e, 0xc3, 0xd3, 0x9c, 0xb6, 0xa1, 0x1b, 0x8e, 0x74, 0x17, 0x1b, 0xfe,
+    0x86, 0x07, 0x20, 0xef, 0xf5, 0x97, 0xfc, 0xdc, 0x99, 0x8b, 0xf0, 0x05,
+    0x97, 0xff, 0x17, 0xf7, 0xc6, 0xb8, 0xe5, 0x1b, 0x8b, 0x2f, 0xe7, 0x69,
+    0xf6, 0x1f, 0x16, 0x54, 0x93, 0x13, 0xd1, 0x71, 0xcd, 0xf8, 0x71, 0xf4,
+    0x7b, 0xfd, 0x1b, 0x9c, 0x83, 0xbf, 0xd6, 0x5c, 0xe4, 0xb2, 0xff, 0xa0,
+    0x1b, 0x3d, 0x07, 0x72, 0x59, 0x5d, 0x1e, 0x76, 0xf1, 0x5b, 0xff, 0xec,
+    0x18, 0x93, 0x73, 0xfe, 0xc1, 0x87, 0xfc, 0x59, 0x52, 0x47, 0xde, 0xa1,
+    0x07, 0xe2, 0x5b, 0xfa, 0x0c, 0x6f, 0x07, 0x71, 0x65, 0xfd, 0xd4, 0xb8,
+    0xe5, 0xd2, 0xca, 0x85, 0xc5, 0x19, 0x30, 0x64, 0xa1, 0x66, 0x8d, 0x1b,
+    0x46, 0xa2, 0x18, 0xdf, 0xf8, 0xa6, 0xd9, 0xa8, 0xea, 0x4c, 0x75, 0x97,
+    0xff, 0xb7, 0xc1, 0x7f, 0xfe, 0xc1, 0x87, 0xfc, 0x59, 0x74, 0x1d, 0x65,
+    0x42, 0x29, 0x31, 0x0b, 0x49, 0x97, 0xe2, 0x9b, 0xec, 0x6a, 0xcb, 0xf3,
+    0x0c, 0x25, 0x8b, 0x2f, 0xfe, 0xff, 0xb2, 0x5b, 0x20, 0x7e, 0x7e, 0x96,
+    0x54, 0xc7, 0xda, 0x44, 0xd5, 0x08, 0xb8, 0x0c, 0x25, 0xaf, 0xfa, 0x59,
+    0xa9, 0xb0, 0xa0, 0xeb, 0x2f, 0xc0, 0x8e, 0xf0, 0xeb, 0x2f, 0xf6, 0x4f,
+    0xc8, 0x98, 0x3a, 0x59, 0x7e, 0x3e, 0x3b, 0x4e, 0xb2, 0x99, 0x17, 0x9a,
+    0x38, 0x22, 0x8e, 0x1a, 0xdd, 0x2c, 0x59, 0x7e, 0xe1, 0xba, 0x73, 0x16,
+    0x5e, 0x28, 0x3a, 0xca, 0x19, 0xe2, 0xe8, 0xaa, 0xfb, 0xad, 0xcc, 0x92,
+    0xcb, 0xfc, 0xfa, 0x9b, 0x3f, 0xbb, 0xbd, 0x65, 0xe8, 0x07, 0x16, 0x54,
+    0x26, 0x66, 0x33, 0xbc, 0x5b, 0x72, 0x20, 0x93, 0x18, 0x73, 0x7c, 0xfe,
+    0x79, 0xd6, 0x5f, 0xbc, 0x13, 0x70, 0x96, 0x5e, 0x31, 0xe4, 0xb2, 0xff,
+    0x18, 0x4f, 0xf9, 0x38, 0xd6, 0x5f, 0xbe, 0x24, 0xf1, 0xe5, 0x97, 0xfd,
+    0x1e, 0xe3, 0xfe, 0x35, 0xba, 0xb2, 0xff, 0xc7, 0x71, 0x89, 0x34, 0xa0,
+    0xba, 0x59, 0x43, 0x3f, 0xc6, 0x3b, 0xbf, 0x83, 0xe8, 0xd6, 0x01, 0x65,
+    0xf6, 0x80, 0x26, 0xf5, 0x97, 0x98, 0xcf, 0xac, 0xa9, 0x1f, 0x87, 0x8b,
+    0x78, 0x4d, 0x53, 0xaa, 0x00, 0x19, 0x16, 0x14, 0x74, 0x3b, 0x31, 0x9f,
+    0xa1, 0x4d, 0xf8, 0x48, 0xdf, 0xe2, 0xfe, 0x71, 0x9f, 0xcb, 0x2f, 0xb9,
+    0x2e, 0x3a, 0xcb, 0xfe, 0x03, 0x7b, 0x34, 0xf3, 0x71, 0x65, 0xff, 0xf4,
+    0x8a, 0x27, 0x12, 0x6e, 0x7b, 0x37, 0x74, 0x05, 0x97, 0xa4, 0x3d, 0xeb,
+    0x2a, 0x0f, 0xd5, 0xd5, 0xaf, 0xed, 0x87, 0xcf, 0xbf, 0xd6, 0x5f, 0xde,
+    0x61, 0xb6, 0xbb, 0x59, 0x6e, 0xd6, 0x5b, 0x98, 0x7d, 0xfd, 0x97, 0xb9,
+    0x75, 0xee, 0xa6, 0xe2, 0xca, 0xe8, 0xf4, 0xdc, 0xd2, 0xf4, 0x30, 0xd6,
+    0x5f, 0xe9, 0xbc, 0xdf, 0x28, 0x3a, 0xca, 0x85, 0x4a, 0x63, 0x31, 0xe8,
+    0x88, 0xf0, 0xae, 0x78, 0x71, 0x70, 0x88, 0x23, 0x77, 0xfb, 0x0c, 0x93,
+    0x70, 0x27, 0x59, 0x76, 0xfe, 0x2c, 0xbf, 0x83, 0xc8, 0x98, 0x3a, 0x59,
+    0x7e, 0xc9, 0xf3, 0xdc, 0x59, 0x50, 0x7e, 0x1e, 0x19, 0x22, 0xfb, 0xe3,
+    0x86, 0x6d, 0x2c, 0xbd, 0x9a, 0xe2, 0xca, 0xec, 0xfb, 0x4e, 0x5b, 0xbc,
+    0x92, 0xff, 0x81, 0x00, 0x13, 0x7c, 0x16, 0xea, 0xcb, 0xff, 0xf4, 0xf1,
+    0xf8, 0xf3, 0x7e, 0x4d, 0xae, 0xfd, 0x0b, 0x2a, 0x13, 0xd7, 0xc8, 0xc4,
+    0x58, 0xc9, 0xcf, 0xaf, 0xff, 0xfb, 0x5d, 0x76, 0xdd, 0x6c, 0x35, 0xf6,
+    0x73, 0xcf, 0xdc, 0x10, 0xd6, 0x5f, 0xf3, 0xf0, 0x4f, 0xf5, 0xdb, 0x1d,
+    0x65, 0xbd, 0x08, 0xab, 0x0b, 0x7d, 0xf3, 0x1b, 0xb7, 0x8b, 0x2f, 0xe1,
+    0x3f, 0x13, 0x97, 0x4b, 0x2f, 0xff, 0xbb, 0xf3, 0xcc, 0x24, 0xd2, 0x62,
+    0xc3, 0xc2, 0xcb, 0xc4, 0xc7, 0x59, 0x5a, 0x46, 0x10, 0x09, 0x48, 0xc3,
+    0xea, 0x57, 0xff, 0x7f, 0x82, 0x73, 0x08, 0x3f, 0x8f, 0x2c, 0xbf, 0xa1,
+    0xcb, 0xf8, 0x4b, 0x2b, 0x0f, 0xbc, 0x91, 0x6f, 0xf4, 0x75, 0xcd, 0xc8,
+    0xd1, 0xab, 0x2f, 0xf7, 0x9e, 0x66, 0xd4, 0x4e, 0xb2, 0xfd, 0xba, 0x78,
+    0xcf, 0xac, 0xbf, 0xf8, 0x4f, 0xca, 0x06, 0xe5, 0x9f, 0x02, 0xca, 0xc3,
+    0xee, 0xd1, 0x55, 0xd8, 0x75, 0x94, 0x35, 0x58, 0xd9, 0x0e, 0xa3, 0xc2,
+    0xaf, 0xc4, 0x0e, 0x70, 0x18, 0x51, 0x6f, 0x21, 0xbf, 0x6e, 0xb1, 0xe3,
+    0x8b, 0x2f, 0xcf, 0xbf, 0x35, 0xc5, 0x97, 0xe9, 0xc4, 0xde, 0xf2, 0x59,
+    0x43, 0x3f, 0xf3, 0x95, 0x11, 0x4d, 0x8c, 0x59, 0x7e, 0xf3, 0x93, 0x1d,
+    0x65, 0xf1, 0xb3, 0x72, 0x16, 0x5f, 0xf4, 0x7f, 0xcf, 0x33, 0xcd, 0x8b,
+    0x2f, 0xe0, 0x74, 0x0c, 0xd6, 0x2c, 0xbf, 0xbb, 0x86, 0xfb, 0x49, 0x65,
+    0xe8, 0xcf, 0xac, 0xbf, 0x66, 0xb4, 0x19, 0xd6, 0x5c, 0xe0, 0x39, 0xe2,
+    0x7c, 0x6e, 0xa1, 0x19, 0x98, 0x5c, 0xce, 0x37, 0xc3, 0xf3, 0xf4, 0xb2,
+    0xfe, 0x07, 0x23, 0xd1, 0xc5, 0x95, 0x07, 0xa0, 0xe4, 0x77, 0xdf, 0xe6,
+    0x4e, 0xb2, 0xff, 0xff, 0x79, 0xb7, 0xb8, 0x1a, 0x51, 0xbd, 0xcf, 0x1e,
+    0xdd, 0x75, 0x95, 0xd2, 0x22, 0x3c, 0x47, 0x76, 0x4e, 0xb2, 0x9c, 0xdd,
+    0x91, 0x25, 0x42, 0xb0, 0xe1, 0x97, 0x60, 0x93, 0x13, 0x4c, 0x49, 0xe8,
+    0xc1, 0x49, 0xf7, 0x90, 0xe3, 0xbf, 0xff, 0xde, 0xed, 0xb9, 0x83, 0xef,
+    0xcd, 0xfc, 0x98, 0xa0, 0xeb, 0x2e, 0x07, 0x6b, 0x2d, 0xc5, 0x97, 0x31,
+    0xbc, 0x35, 0x21, 0x18, 0xbc, 0x07, 0xed, 0x65, 0xf1, 0x93, 0x72, 0x16,
+    0x5f, 0x3c, 0xf1, 0xf5, 0x97, 0xe7, 0x26, 0xdc, 0xde, 0xb2, 0xdc, 0x23,
+    0xcd, 0xde, 0x45, 0x7e, 0x9d, 0xf9, 0x92, 0x59, 0x7f, 0xfc, 0x3c, 0xde,
+    0xfa, 0x98, 0x49, 0x3f, 0xdc, 0xeb, 0x2e, 0xcd, 0xc5, 0x95, 0x08, 0x94,
+    0x62, 0x8d, 0x29, 0xdf, 0xcf, 0xd0, 0x0e, 0xdc, 0x59, 0x63, 0x56, 0x5f,
+    0xb5, 0x9b, 0xc7, 0x0b, 0x2a, 0x13, 0xe2, 0xe8, 0x76, 0x67, 0x1d, 0x42,
+    0xf7, 0xc5, 0xc0, 0x2e, 0xf8, 0x95, 0xfc, 0xc6, 0x3c, 0xd0, 0x75, 0x97,
+    0xb7, 0x63, 0x8b, 0x2b, 0xe7, 0x9a, 0x12, 0xeb, 0x0b, 0x14, 0xba, 0x9c,
+    0x4d, 0xa1, 0x20, 0x54, 0x22, 0x15, 0x62, 0xf1, 0x3c, 0x3b, 0x3c, 0x62,
+    0x72, 0x71, 0x1c, 0x35, 0xb2, 0x54, 0x8f, 0x6e, 0x5d, 0x43, 0x0d, 0xa3,
+    0x54, 0x9a, 0x72, 0xab, 0x51, 0x84, 0x9e, 0x1c, 0xde, 0x94, 0x2c, 0xf2,
+    0x95, 0x81, 0x2b, 0x14, 0xa5, 0x23, 0x72, 0x5d, 0x8f, 0xe7, 0x00, 0x82,
+    0xf7, 0xb7, 0x08, 0xb1, 0x25, 0x07, 0xee, 0xc2, 0xe2, 0xfd, 0xae, 0xdd,
+    0xfb, 0x54, 0x53, 0x8b, 0xfb, 0xcc, 0x72, 0x73, 0x56, 0x58, 0x5e, 0x1f,
+    0x1b, 0x1b, 0x5f, 0xd0, 0x7c, 0xdd, 0x8f, 0xac, 0xbe, 0xf4, 0x11, 0xab,
+    0x2f, 0xa3, 0xb8, 0xf2, 0xca, 0x39, 0xf9, 0xfc, 0xbc, 0x42, 0x2b, 0xec,
+    0xe0, 0x92, 0x59, 0x7f, 0xda, 0x7e, 0x7b, 0x30, 0xbb, 0x59, 0x7f, 0x07,
+    0x99, 0xf1, 0x27, 0x59, 0x4c, 0x7d, 0x1e, 0x38, 0xbf, 0x1f, 0x5a, 0xce,
+    0x2c, 0xbf, 0xff, 0x78, 0x3f, 0xd4, 0x7f, 0x99, 0xdf, 0x23, 0x5d, 0xac,
+    0xbe, 0x0e, 0xeb, 0xcc, 0xb2, 0xff, 0x31, 0xb9, 0x28, 0x07, 0x16, 0x54,
+    0x8f, 0x67, 0x84, 0xd7, 0x87, 0x07, 0x59, 0x7f, 0xa3, 0xed, 0xdb, 0x0e,
+    0x16, 0x5b, 0x4b, 0x2f, 0xff, 0xa6, 0x26, 0xe7, 0xe0, 0x46, 0xd4, 0xd1,
+    0xe5, 0x95, 0x23, 0xe2, 0xc1, 0x1a, 0x1a, 0x34, 0x74, 0x39, 0xf8, 0x4a,
+    0x5e, 0xce, 0x32, 0xcb, 0xfd, 0x1f, 0x86, 0x21, 0x38, 0xb2, 0xb0, 0xf3,
+    0x74, 0x37, 0x7f, 0xfe, 0xcf, 0xf0, 0x4e, 0x7d, 0xa0, 0xbe, 0x4e, 0x05,
+    0x97, 0xf7, 0x52, 0x83, 0x86, 0x65, 0x97, 0xf1, 0xc7, 0x1c, 0x09, 0x2c,
+    0xbd, 0x28, 0x3a, 0xcb, 0xbc, 0xcb, 0x2b, 0xa3, 0x65, 0xf1, 0xca, 0x84,
+    0x58, 0xb1, 0x83, 0xaf, 0xdf, 0x73, 0x67, 0x04, 0x59, 0x7f, 0xf6, 0x6f,
+    0xc1, 0xea, 0x1a, 0x4f, 0xc5, 0x96, 0x7e, 0x8f, 0xab, 0x44, 0xd7, 0xa5,
+    0x06, 0x2c, 0xbf, 0xcd, 0x87, 0x34, 0xd7, 0xe9, 0x65, 0xbf, 0xd1, 0xe9,
+    0x70, 0x76, 0xfe, 0x71, 0x33, 0x7c, 0x71, 0x65, 0x61, 0xec, 0x04, 0xa6,
+    0xff, 0xef, 0x30, 0x9f, 0x62, 0x0c, 0xb3, 0x8b, 0x2f, 0xfc, 0xdd, 0x70,
+    0xb0, 0x7e, 0x73, 0x16, 0x5f, 0xff, 0x64, 0xf9, 0xd7, 0xf8, 0xc5, 0x00,
+    0x73, 0xac, 0xac, 0x46, 0x91, 0xa8, 0x9c, 0x3f, 0xbf, 0xf6, 0x7a, 0x35,
+    0x82, 0xcc, 0x30, 0xc4, 0x97, 0x31, 0x8b, 0x2e, 0x9c, 0x5c, 0x2f, 0x9b,
+    0x48, 0xc0, 0x70, 0x8b, 0xc2, 0x1e, 0xca, 0x3a, 0x85, 0x8b, 0x43, 0xce,
+    0x68, 0x41, 0x1c, 0x87, 0xd1, 0x82, 0x82, 0x12, 0xe5, 0x0d, 0x2f, 0xc3,
+    0xcf, 0x6c, 0xc3, 0x75, 0x0e, 0xfd, 0xae, 0xdd, 0xfb, 0x54, 0x57, 0x8b,
+    0xef, 0xe9, 0xba, 0x59, 0x7f, 0xff, 0x60, 0xfd, 0x02, 0x0b, 0xf9, 0x38,
+    0x39, 0xc8, 0x02, 0x4b, 0x0b, 0xc4, 0x5b, 0x31, 0xb6, 0xd9, 0x1d, 0xff,
+    0xc2, 0xde, 0x42, 0xf3, 0x5d, 0xbb, 0xf6, 0xa8, 0x91, 0xd7, 0x61, 0xd6,
+    0x5d, 0xfc, 0x59, 0x5d, 0x9a, 0xce, 0x85, 0xaf, 0xff, 0x1a, 0xda, 0xcd,
+    0x4a, 0x3d, 0xe6, 0x02, 0xcb, 0xbc, 0x35, 0x97, 0xff, 0xef, 0xc0, 0xe0,
+    0x22, 0xbd, 0x47, 0xd8, 0x11, 0x25, 0x97, 0x89, 0xc5, 0xc8, 0xfb, 0xf7,
+    0x8b, 0xde, 0x60, 0x42, 0xcb, 0xdd, 0xe1, 0xd2, 0x0b, 0x2e, 0xef, 0xb1,
+    0xfa, 0x02, 0xcb, 0xff, 0xf7, 0xa0, 0x83, 0xcf, 0x36, 0xb3, 0x7c, 0x17,
+    0xd6, 0x5f, 0xfc, 0xda, 0xcd, 0x4a, 0x3d, 0xe6, 0x02, 0xcb, 0xee, 0xdd,
+    0xfb, 0x54, 0x49, 0x0b, 0xf9, 0xf5, 0x9b, 0xfd, 0x8b, 0x2a, 0x74, 0xc6,
+    0x24, 0x44, 0x6a, 0xae, 0x90, 0xc0, 0x61, 0x7d, 0x37, 0xf3, 0xb5, 0x97,
+    0xe8, 0x60, 0x31, 0xd6, 0x54, 0x1e, 0x54, 0x89, 0x2f, 0xf4, 0x17, 0xca,
+    0x0f, 0xc5, 0x97, 0xff, 0xe6, 0xd3, 0x6e, 0xc1, 0x4f, 0x1f, 0x6f, 0x3c,
+    0xeb, 0x2f, 0xcf, 0x2f, 0xb4, 0xeb, 0x2a, 0x0f, 0xfd, 0x95, 0xef, 0xff,
+    0x3f, 0xe6, 0xe6, 0x0c, 0x61, 0x7d, 0x49, 0x65, 0xff, 0xf3, 0xf5, 0xcc,
+    0xf3, 0x96, 0x4e, 0x70, 0xf9, 0x65, 0xff, 0xde, 0x6e, 0xbf, 0x9d, 0x7f,
+    0x5a, 0x85, 0x97, 0xff, 0x34, 0x1d, 0xc6, 0x26, 0xec, 0x14, 0x96, 0x56,
+    0x23, 0x73, 0xb5, 0x0f, 0x23, 0x5f, 0xfd, 0x80, 0xdb, 0xcd, 0x44, 0xef,
+    0xae, 0xd6, 0x5f, 0x9c, 0x1f, 0xc0, 0x2c, 0xa2, 0x3e, 0xfe, 0x24, 0x5f,
+    0xec, 0xf3, 0x9c, 0xa3, 0xa5, 0x97, 0x48, 0x5c, 0x2e, 0x73, 0xe4, 0x68,
+    0xcd, 0x09, 0x79, 0x88, 0x7d, 0x0b, 0x00, 0x10, 0x72, 0x32, 0x7f, 0xc2,
+    0x7c, 0x42, 0x1b, 0xf0, 0x7a, 0xed, 0xb8, 0xb2, 0xfd, 0x9e, 0x17, 0x87,
+    0x59, 0x7c, 0x69, 0x04, 0xeb, 0x2c, 0x2e, 0x17, 0xcc, 0xf0, 0x8f, 0xb8,
+    0x5c, 0xbc, 0xe9, 0xc0, 0x21, 0x53, 0xf2, 0xa1, 0x0a, 0x6f, 0xfe, 0x16,
+    0xf2, 0x17, 0x9a, 0xed, 0xdf, 0xb5, 0x44, 0x94, 0xbf, 0x6b, 0xb7, 0x7e,
+    0xd5, 0x17, 0x8a, 0xff, 0xa4, 0x2f, 0x35, 0xdb, 0xbf, 0x6a, 0x89, 0x35,
+    0x61, 0x78, 0x7f, 0xee, 0x6d, 0x7d, 0xdf, 0x98, 0x96, 0x5c, 0x31, 0x42,
+    0xcb, 0xfe, 0x14, 0xed, 0x1b, 0x47, 0xb0, 0xf9, 0xc5, 0x97, 0xf6, 0xd4,
+    0x28, 0x07, 0xff, 0xd2, 0xcb, 0xf7, 0x39, 0x85, 0x8b, 0x2f, 0xfb, 0x5d,
+    0xc4, 0xf9, 0x85, 0xf5, 0x97, 0xf1, 0x09, 0x36, 0xa3, 0x7a, 0xcb, 0xfa,
+    0x38, 0xc7, 0x89, 0x96, 0x5f, 0x3b, 0x75, 0xc5, 0x96, 0xf2, 0xca, 0xc4,
+    0x78, 0x31, 0x36, 0xe1, 0xc9, 0xcc, 0x7c, 0x5a, 0x61, 0x15, 0xfe, 0x60,
+    0x61, 0x47, 0x5c, 0x59, 0x7b, 0x7c, 0x49, 0x65, 0xfa, 0x3f, 0xcc, 0xfa,
+    0xcb, 0xce, 0x43, 0xc3, 0xc5, 0xf0, 0xf5, 0xfe, 0x63, 0x7a, 0xe6, 0x11,
+    0xab, 0x2f, 0xf9, 0xf5, 0x2e, 0x60, 0x75, 0x3a, 0xca, 0x64, 0x50, 0x78,
+    0xc4, 0x26, 0xb7, 0xfd, 0x80, 0x1f, 0xa0, 0xa0, 0xc5, 0x97, 0xc0, 0xe6,
+    0x12, 0xca, 0x83, 0xd9, 0x63, 0x8b, 0xff, 0x07, 0xbe, 0x71, 0xf5, 0xf8,
+    0x35, 0x65, 0xfb, 0xdf, 0xe6, 0x7d, 0x65, 0x31, 0xf4, 0xba, 0x0d, 0xff,
+    0xfb, 0xce, 0xc0, 0xe6, 0x1a, 0xe7, 0xd4, 0x61, 0x2c, 0xb9, 0x86, 0xb2,
+    0xa0, 0xfa, 0x7c, 0xa7, 0x7d, 0x20, 0xc7, 0x4b, 0x2f, 0xfa, 0x76, 0xe7,
+    0x1c, 0x1e, 0x0a, 0xcb, 0xf9, 0xb4, 0x32, 0x8e, 0x96, 0x5f, 0xf6, 0x1a,
+    0x6b, 0xcb, 0x3a, 0xfa, 0xcb, 0xd3, 0xc4, 0xeb, 0x2f, 0x05, 0xfa, 0xc3,
+    0xd9, 0x10, 0xee, 0xfe, 0xf6, 0x67, 0xfd, 0x8b, 0x2f, 0xfa, 0x25, 0xcd,
+    0x69, 0xcb, 0xeb, 0x2a, 0x4a, 0xab, 0x87, 0x08, 0x9e, 0xe1, 0x13, 0x31,
+    0x0e, 0x88, 0xfc, 0x75, 0xc8, 0x43, 0x7c, 0xd3, 0x79, 0x65, 0xfc, 0xd8,
+    0x51, 0xd7, 0x16, 0x5f, 0xd9, 0xff, 0xc1, 0x4e, 0xb2, 0xfd, 0x83, 0xda,
+    0x45, 0xb8, 0xb2, 0xfe, 0x72, 0x06, 0xd2, 0x2d, 0xc5, 0x97, 0x38, 0xf7,
+    0x9f, 0x2e, 0xd9, 0x85, 0x1d, 0x1e, 0x1e, 0x2c, 0x0c, 0x24, 0xaf, 0x39,
+    0x76, 0xb2, 0xf7, 0xa0, 0x45, 0x95, 0xf3, 0x72, 0x60, 0xe5, 0xff, 0xbc,
+    0xf2, 0x6f, 0x3c, 0x9b, 0xcb, 0x2f, 0xe2, 0x70, 0x13, 0x9d, 0x65, 0xf8,
+    0x7e, 0xdc, 0x62, 0x59, 0x7f, 0x8b, 0x0f, 0xb7, 0x9a, 0x85, 0x95, 0x07,
+    0xbd, 0x31, 0x55, 0xe8, 0xff, 0x16, 0x5f, 0xf4, 0x1f, 0xd8, 0x31, 0xb7,
+    0x4b, 0x2b, 0x0f, 0xdf, 0xa2, 0x26, 0x1c, 0xbe, 0xdd, 0x68, 0x35, 0x65,
+    0xe9, 0x74, 0x6a, 0xcb, 0xf8, 0xff, 0xf0, 0x7f, 0xc5, 0x97, 0x82, 0x3e,
+    0x96, 0x5f, 0xfc, 0xe0, 0xef, 0xcd, 0xa2, 0x6f, 0xf1, 0x65, 0xfe, 0xdf,
+    0x92, 0xf4, 0x11, 0xab, 0x2e, 0x29, 0xd6, 0x54, 0x26, 0x42, 0x32, 0x5c,
+    0x1f, 0x62, 0xf7, 0x1e, 0x02, 0x20, 0x86, 0xb6, 0xfa, 0xcb, 0xfe, 0x8d,
+    0x01, 0xff, 0xb7, 0x9f, 0x59, 0x76, 0xb1, 0x65, 0xf7, 0x4d, 0xd4, 0x96,
+    0x5c, 0x24, 0xeb, 0x29, 0x8d, 0xe8, 0x09, 0x2b, 0x48, 0xbf, 0xf0, 0x88,
+    0x0e, 0xc9, 0x4e, 0xec, 0x3a, 0xcb, 0xda, 0xdf, 0xe5, 0x97, 0xec, 0xd3,
+    0xc0, 0xd6, 0x54, 0x1e, 0xdb, 0x8b, 0x10, 0xfd, 0xe1, 0xe1, 0x2c, 0xbf,
+    0xf6, 0x82, 0x7f, 0x34, 0x1d, 0xc9, 0x65, 0xff, 0x72, 0x0e, 0x59, 0x28,
+    0x25, 0x97, 0xf9, 0x8b, 0x66, 0x1d, 0xbe, 0xb2, 0xb4, 0x8a, 0x6f, 0x9e,
+    0xef, 0x36, 0xb8, 0xa4, 0xb2, 0xe1, 0x41, 0x8b, 0x28, 0x26, 0xcb, 0x6c,
+    0x5a, 0xa1, 0x34, 0x9c, 0x86, 0x0e, 0xeb, 0x25, 0xff, 0xdd, 0x85, 0xc7,
+    0xbf, 0x07, 0xb4, 0x8b, 0x71, 0x65, 0xf3, 0x7a, 0x37, 0xac, 0xad, 0x1f,
+    0x9f, 0xd4, 0x2f, 0xf4, 0x6a, 0x3a, 0x06, 0xa1, 0x65, 0xe6, 0xdd, 0x9d,
+    0x65, 0xa7, 0x59, 0x50, 0x6c, 0x88, 0x82, 0xf7, 0x83, 0xb8, 0xb2, 0xfe,
+    0x28, 0xff, 0x9e, 0x4b, 0x2a, 0x0f, 0x32, 0x62, 0x0b, 0xdf, 0x8d, 0x2c,
+    0xa8, 0x4c, 0xc2, 0x72, 0x29, 0x99, 0x5d, 0xac, 0x24, 0x57, 0x3f, 0x6b,
+    0x2f, 0xff, 0xff, 0x61, 0x13, 0xcb, 0xcd, 0xb0, 0x4d, 0x6a, 0x24, 0xdf,
+    0x6d, 0x38, 0x16, 0x5f, 0x86, 0x19, 0xc4, 0x3a, 0xcb, 0xfc, 0x59, 0xff,
+    0x37, 0x52, 0x59, 0x5d, 0x9e, 0xf7, 0x8a, 0xef, 0xee, 0xb9, 0x87, 0x7e,
+    0x2c, 0xbe, 0x1e, 0x7a, 0x16, 0x5b, 0x4b, 0x2f, 0xd3, 0xea, 0x3a, 0xd2,
+    0xca, 0x9c, 0xdd, 0xe0, 0x8d, 0xfe, 0x08, 0xf2, 0x50, 0x0e, 0x2c, 0xa8,
+    0x4f, 0xb6, 0x42, 0xf9, 0x0d, 0x56, 0x23, 0x72, 0xe2, 0x5c, 0xe1, 0x0d,
+    0xff, 0xec, 0xf7, 0x7e, 0x6e, 0xbf, 0x87, 0x7e, 0x2c, 0xbe, 0x9c, 0xe1,
+    0xdc, 0x59, 0x7e, 0xf9, 0xe6, 0x21, 0xac, 0xa7, 0x3d, 0x02, 0x27, 0xbf,
+    0x4d, 0xce, 0x31, 0xd6, 0x5e, 0xe0, 0x7a, 0x59, 0x7f, 0xfd, 0x39, 0x8f,
+    0x2e, 0x73, 0x34, 0x64, 0x68, 0xd5, 0x96, 0x25, 0x97, 0xf3, 0xff, 0x93,
+    0xe1, 0x8b, 0x2f, 0xff, 0xe6, 0xe3, 0xcb, 0x8d, 0xbf, 0x81, 0x76, 0x93,
+    0x6f, 0x59, 0x70, 0x82, 0x2c, 0xac, 0x4d, 0x42, 0x62, 0x97, 0x1e, 0x02,
+    0xa1, 0x08, 0x7c, 0xbc, 0x45, 0xdb, 0xf6, 0x68, 0x00, 0x85, 0x97, 0x6d,
+    0x8b, 0xda, 0xdb, 0x52, 0xc1, 0x49, 0x16, 0xd2, 0x1b, 0xda, 0x68, 0xf1,
+    0x19, 0x4c, 0x96, 0x47, 0x18, 0xbe, 0x4b, 0x36, 0xee, 0x38, 0x3e, 0x9b,
+    0x98, 0x8a, 0x63, 0xdd, 0x46, 0x01, 0xe8, 0xd3, 0xde, 0x32, 0x10, 0x42,
+    0x5c, 0xa3, 0x75, 0xe4, 0x7b, 0x5f, 0x94, 0x70, 0x63, 0x2e, 0xdc, 0x26,
+    0xc4, 0x8d, 0xc3, 0x75, 0x92, 0xff, 0x06, 0x71, 0x7b, 0xbb, 0xac, 0x6a,
+    0xca, 0x87, 0xd7, 0x1d, 0x9e, 0x16, 0xf2, 0xb5, 0x3f, 0xc3, 0x94, 0x9a,
+    0xd3, 0xfa, 0x33, 0x47, 0x84, 0x73, 0x9f, 0x4f, 0xda, 0xfe, 0x10, 0x01,
+    0x86, 0xa8, 0x95, 0xaa, 0xa6, 0xec, 0x76, 0x75, 0x14, 0xc0, 0x58, 0x79,
+    0xe7, 0x59, 0xa5, 0x4d, 0xd7, 0x1d, 0x30, 0x43, 0x33, 0xb1, 0xbc, 0x36,
+    0x98, 0xf7, 0xde, 0x36, 0xf8, 0xfa, 0xb6, 0xb3, 0x4d, 0x5d, 0xc3, 0x6e,
+    0x4a, 0x75, 0x9b, 0x12, 0x9d, 0x5a, 0xc5, 0x05, 0xc9, 0xf7, 0x0a, 0xc8,
+    0xfd, 0x69, 0x03, 0x5f, 0x12, 0xc7, 0x00, 0xad, 0xd7, 0x85, 0x73, 0x90,
+    0xe5, 0x78, 0xca, 0xfc, 0xbc, 0x22, 0x2f, 0xe6, 0x16, 0xa6, 0x1c, 0x48,
+    0xd1, 0xef, 0xad, 0x7b, 0x8c, 0xac, 0x49, 0xb6, 0xe7, 0xe2, 0x84, 0xac,
+    0xd8, 0xb7, 0x6f, 0x64, 0xd6, 0x80,
 };
 
-static const unsigned kPreloadedHSTSBits = 608997;
+static const unsigned kPreloadedHSTSBits = 803081;
 
-static const unsigned kHSTSRootPosition = 608327;
+static const unsigned kHSTSRootPosition = 802430;
 
 #endif  // NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json
index c455c54..04c1bc3 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -248,6 +248,7 @@
     { "name": "talk.google.com", "include_subdomains": true, "mode": "force-https", "pins": "google" },
     { "name": "wallet.google.com", "include_subdomains": true, "mode": "force-https", "pins": "google" },
     { "name": "xn--7xa.google.com", "include_subdomains": true, "mode": "force-https", "pins": "google" },
+    { "name": "dns.google.com", "include_subdomains": true, "mode": "force-https", "pins": "google" },
 
     // Other Google-related domains that must use HTTPS.
     { "name": "apis.google.com", "include_subdomains": true, "mode": "force-https", "pins": "google" },
@@ -729,7 +730,6 @@
     { "name": "carezone.com", "mode": "force-https" },
     { "name": "conformal.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "cyphertite.com", "include_subdomains": true, "mode": "force-https" },
-    { "name": "logotype.se", "include_subdomains": true, "mode": "force-https" },
     { "name": "bccx.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "launchkey.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "carlolly.co.uk", "include_subdomains": true, "mode": "force-https" },
@@ -1628,7 +1628,6 @@
     { "name": "visionless.me", "include_subdomains": true, "mode": "force-https" },
     { "name": "vrobert.fr", "include_subdomains": true, "mode": "force-https" },
     { "name": "wbg-vs.de", "include_subdomains": true, "mode": "force-https" },
-    { "name": "hstspreload.appspot.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "hg.python.org", "include_subdomains": true, "mode": "force-https" },
     { "name": "doc.python.org", "include_subdomains": true, "mode": "force-https" },
     { "name": "console.python.org", "include_subdomains": true, "mode": "force-https" },
@@ -4606,7 +4605,6 @@
     { "name": "infinitusgaming.eu", "include_subdomains": true, "mode": "force-https" },
     { "name": "infocommsociety.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "instant.io", "include_subdomains": true, "mode": "force-https" },
-    { "name": "involved-it.be", "include_subdomains": true, "mode": "force-https" },
     { "name": "ipcfg.me", "include_subdomains": true, "mode": "force-https" },
     { "name": "ipswitch.com.tw", "include_subdomains": true, "mode": "force-https" },
     { "name": "iready.ro", "include_subdomains": true, "mode": "force-https" },
@@ -5626,7 +5624,6 @@
     { "name": "asun.co", "include_subdomains": true, "mode": "force-https" },
     { "name": "atlantichomes.com.au", "include_subdomains": true, "mode": "force-https" },
     { "name": "autokovrik-diskont.ru", "include_subdomains": true, "mode": "force-https" },
-    { "name": "bam.com.au", "include_subdomains": true, "mode": "force-https" },
     { "name": "ben.ninja", "include_subdomains": true, "mode": "force-https" },
     { "name": "bm-trading.nl", "include_subdomains": true, "mode": "force-https" },
     { "name": "bodyblog.nl", "include_subdomains": true, "mode": "force-https" },
@@ -6964,7 +6961,7 @@
     { "name": "united.com", "include_subdomains": false, "mode": "force-https" },
     { "name": "www.united.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "mobile.united.com", "include_subdomains": true, "mode": "force-https" },
-    { "name": "smartphone.continental.com ", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smartphone.continental.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "0513c.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "0x.cx", "include_subdomains": true, "mode": "force-https" },
     { "name": "1022996493.rsc.cdn77.org", "include_subdomains": true, "mode": "force-https" },
@@ -8517,7 +8514,6 @@
     { "name": "swimming.ca", "include_subdomains": true, "mode": "force-https" },
     { "name": "swite.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "syncmylife.net", "include_subdomains": true, "mode": "force-https" },
-    { "name": "tablotv.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "talentcast.nl", "include_subdomains": true, "mode": "force-https" },
     { "name": "tasmansecurity.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "teachercreatedmaterials.com", "include_subdomains": true, "mode": "force-https" },
@@ -8817,7 +8813,2797 @@
     { "name": "zoeller.me", "include_subdomains": true, "mode": "force-https" },
     { "name": "gendrin.com", "include_subdomains": true, "mode": "force-https" },
     { "name": "webmail.xalqbank.az", "include_subdomains": true, "mode": "force-https" },
-    { "name": "winebid.com", "include_subdomains": true, "mode": "force-https" }
+    { "name": "winebid.com", "include_subdomains": true, "mode": "force-https" },
+
+    // Manual additions in Chrome 51 or later that do not belong in a
+    // special section above.
+    // START OF MANUAL ADDITIONS
+    { "name": "050media.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "0x.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "0x44.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "1001.best", "include_subdomains": true, "mode": "force-https" },
+    { "name": "1018hosting.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "123test.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "12vpn.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "12vpnchina.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "1750studios.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "1cover.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "1hourproofreading.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "1q365a.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "1st-community.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "247healthshop.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "24ip.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "24ip.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "2kgwf.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "2nains.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "300m.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "321live.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "33drugstore.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "360ds.co.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "365beautyworld.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "365healthworld.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "404.sh", "include_subdomains": true, "mode": "force-https" },
+    { "name": "4455software.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "4500.co.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "4679.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "4d2.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "4elements.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "4w-performers.link", "include_subdomains": true, "mode": "force-https" },
+    { "name": "4winds.pt", "include_subdomains": true, "mode": "force-https" },
+    { "name": "50millionablaze.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "50plusnet.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "57aromas.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "60ych.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "6120.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "646.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "69square.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "8t8.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "8thportsmouth.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "92url.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aa-tour.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aaeblog.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aapp.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aaronsilber.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aatf.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "abareplace.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "abc.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "abearofsoap.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aberdeenjudo.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "abilitylist.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "abthorpe.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "accelerole.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "accuenergy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "acheritage.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "acisonline.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "acritelli.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "acrylicwifi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "activateplay.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "activeweb.top", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adamkaminski.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adamricheimer.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adams.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adastra.re", "include_subdomains": true, "mode": "force-https" },
+    { "name": "addstar.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adelaides.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adiponectinsupplement.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adiponectinsupplement.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adme.co.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "admitcard.co.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adoal.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adquisitio.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adrenaline-gaming.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aduvi.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "advelty.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adventistdeploy.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adventureforest.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.co.za", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "adzuna.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "afb24.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aficionados.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "africatravel.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "afvallendoeje.nu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "agowa338.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "agro-id.gov.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ahabingo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ahmad.works", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aia.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "airlinecheckins.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aisle3.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aiwdirect.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "akerek.hu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "akoww.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "akropolis-ravensburg.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "akstudentsfirst.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "akutun.cl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alariel.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alasta.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alertwire.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alexisabarca.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alexmerkel.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alexmerkel.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alexsergeyev.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alienstat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alittlebitcheeky.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "all.tf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "allforyou.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alliedfrozenstorage.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "allmbw.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "allstarswithus.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "allthingssquared.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "almeria-si.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alnitech.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alphabuild.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alt-three.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "alterbaum.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "altopia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "amcvega.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "amees.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "american-truck-simulator.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "american-truck-simulator.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "americanworkwear.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "americkykongres.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "amilx.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "amilx.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "amitube.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "amnesy.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "amv-crm.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "analytic-s.ml", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ananke.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "anassiriphotography.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "anastasiafond.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "and-stuff.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "and.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "andreastoneman.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "andrepicard.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "andrewhowden.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "andrewthelott.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "andsat.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "annarokina.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "annetta.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "anonukradio.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ant.land", "include_subdomains": true, "mode": "force-https" },
+    { "name": "antoine-roux.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "antoinedeschenes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "antoniorequena.com.ve", "include_subdomains": true, "mode": "force-https" },
+    { "name": "antscript.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "any.pm", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ao-dev.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "apervita.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "apexitsolutions.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "api-geek.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "apmg-certified.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "apmg-cyber.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "app-arena.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "appdrinks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "appleoosa.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "applic8.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "appointed.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "appraisal-comps.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "appreciationkards.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "appsdash.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aprovpn.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aquapoint.kiev.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aramido.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aran.me.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arbeitskreis-asyl-eningen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arlen.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arnesolutions.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arpa.ph", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arrowgrove.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ars.toscana.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "artetrama.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "artisanhd.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "artistnetwork.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arubasunsetbeach.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arvid.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "arw.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "as.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ascamso.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ascii.moe", "include_subdomains": true, "mode": "force-https" },
+    { "name": "asdpress.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "asmui.ml", "include_subdomains": true, "mode": "force-https" },
+    { "name": "astromelody.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "asurepay.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "atchleyjazz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "atchleyjazz.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "atchleylab.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ateli.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "athensbusinessresources.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "audiovisualdevices.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "augias.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "augiero.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aujapan.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aussiehq.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "authoritynutrition.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "auto-serwis.zgorzelec.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "automacity.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "autotsum.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "autumnwindsagility.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "avenueeyecare.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "avg.club", "include_subdomains": true, "mode": "force-https" },
+    { "name": "avinet.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "avmemo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "avmoo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "avsox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "avtovokzaly.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "awanderlustadventure.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "awxg.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "axeny.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ayurveda101.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "azimut.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "aztrix.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "babacasino.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "babak.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "babyhouse.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "babystep.tv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "back-bone.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "backmountaingas.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bacula.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bad.horse", "include_subdomains": true, "mode": "force-https" },
+    { "name": "baiduaccount.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bakabt.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bakkerdesignandbuild.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "baliyano.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bankofdenton.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "barisi.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bashc.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "basicsolutionsus.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "baumstark.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bazdell.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bblovess.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bbuio.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bc-bd.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bcbsmagentprofile.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bcmlu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bcweightlifting.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "beavers.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bebef.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "beepan.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "beeznest.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "befundonline.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "behere.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "beikeil.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "belliash.eu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "belly-button-piercings.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bemyvictim.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "benjaminblack.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "benzkosmetik.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bermytraq.bm", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bestbrakes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bestessayhelp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bestlashesandbrows.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bestorangeseo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "betz.ro", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bevinco2020.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bf.am", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bgcparkstad.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bgdaddy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bhtelecom.ba", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bible-maroc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "biblerhymes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "biblionaut.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bielsa.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bienenblog.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "biergaizi.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "big-black.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bikermusic.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "billiger-mietwagen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "billogram.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "billpro.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bingofriends.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bingostars.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "biodieseldata.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bioemsan.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "biolindo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitbeans.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitbr.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitcoin-india.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitf.ly", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitfehler.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitfinder.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitfuse.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitheus.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bithosting.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitmoe.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitref.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitsafe.systems", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bitskins.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bivsi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bl4ckb0x.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "black-armada.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "black-armada.com.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "black-armada.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blaudev.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blogarts.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blubberladen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blucas.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blue-labs.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blue-leaf81.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blueflare.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blueliv.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blueperil.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bluepoint.foundation", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bluepoint.institute", "include_subdomains": true, "mode": "force-https" },
+    { "name": "blusmurf.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bngsecure.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "boensou.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "boernecancerfonden.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bonfi.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "boomersurf.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "boringsmith.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "botox.bz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bourse-aux-jouets.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bourse-puericulture.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bouwbedrijfpurmerend.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brandnewdays.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "breechdepot.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brejoc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brewtrackr.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brianpcurran.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brideandgroomdirect.ie", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brightonbank.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brilliantdecisionmaking.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "britishscienceweek.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "britzer-toner.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "broken-oak.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "brunn.email", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bta.lv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "btcdlc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bubblegumblog.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "buchheld.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "budgetthostels.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "buffalodrinkinggame.beer", "include_subdomains": true, "mode": "force-https" },
+    { "name": "buildbox.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "built.by", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bulletpoint.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bumarkamoda.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "busindre.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "businessesdirectory.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "buyfox.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "by4cqb.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "byte.wtf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "byteshark.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bytesund.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "byteturtle.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bziaks.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "bztech.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "c3w.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cachethq.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cadao.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cajapopcorn.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "calltrackingreports.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "camaya.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "campaign-ad.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "campbellsoftware.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "campbrainybunch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "camperdays.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "campermanaustralia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "candicontrols.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "caphane.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "capogna.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "captivatedbytabrett.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "capturapp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "capturethepen.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "caputo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "carano-service.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "caraudio69.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cardloan-manual.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "careerstuds.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "carigami.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "carlandfaith.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "carlgo11.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "carsten.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "carstenfeuls.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "casedi.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "casinolistings.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "casinoreal.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "castlejackpot.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "catalyst-ecommerce.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "catgirl.pics", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cdndepo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cdnjs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cdreporting.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ced-services.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ceilingpac.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "celti.ie.eu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "centrepoint-community.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ceritamalam.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "certnazionale.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cfcproperties.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cfoitplaybook.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cg-systems.hu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cgan.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chabaudparfum.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "championsofregnum.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chaos-inc.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "charityclear.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "charmyadesara.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "charnleyhouse.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chartpen.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chateau-belvoir.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chatme.im", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chatup.cf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chebedara.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cheetah85.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cherrywoodtech.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chestnut.cf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chiaramail.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chihiro.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chikan-beacon.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "childcaresolutionscny.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chilihosting.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "china-line.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chinternet.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chirgui.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chotu.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chris-edwards.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chris-web.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chrisandsarahinasia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chrisfaber.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chrisfinazzo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "christadelphiananswers.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "christianhoffmann.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "christiesantiques.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "chua.cf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cipherboy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ciscohomeanalytics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "citizensbankal.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cityoflaurel.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "classicshop.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "clcleaningco.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "clearc.tk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "clearsettle-admin.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "clientsecure.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "climatestew.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "clochix.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "close.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cloudey.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cloverleaf.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "clownish.co.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cloxy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cmahy.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cni-certing.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coachingconsultancy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coam.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cocolovesdaddy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "codeferm.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "codefoundry.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coderhangout.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "codesport.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "codeyellow.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coi-verify.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coinjar-sandbox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "colisfrais.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "collada.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "collectiblebeans.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "collegepulse.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coloradolottery.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "colorbrush.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "commerciallocker.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "commoncore4kids.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "compareandrecycle.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "compliance-systeme.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "complymd.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "condepenalba.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "confirm365.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "connected-verhuurservice.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "connectfss.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "connyduck.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "consciousbrand.org.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "consciousbranding.org.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "consciousbrands.net.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "consumer.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "contactbig.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "containerstatistics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "convocatoriafundacionpepsicomexico.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coolchevy.org.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cooxa.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cordlessdog.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "corepartners.com.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "corpfin.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "correctpaardbatterijnietje.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "costreportdata.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coursdeprogrammation.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "covenantbank.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "covybrat.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "coweo.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cpuvinf.eu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cracking.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cranesafe.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "crazycen.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "creativeplayuk.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "creditproautos.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "crefelder.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "crowd.supply", "include_subdomains": true, "mode": "force-https" },
+    { "name": "crufad.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "crushroom.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "crypticshell.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cryptojar.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cryptonit.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cryptonym.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "csbs.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "csfm.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ct-status.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ctpe.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cultiv.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cupidmentor.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "curacao-license.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cyberguerrilla.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cyberguerrilla.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cyberhouse.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cyberwire.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cybozu.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cyclebeads.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cyfly.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cymtech.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cyph.audio", "include_subdomains": true, "mode": "force-https" },
+    { "name": "czechamlp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "d-20.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "d-training.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "daallexx.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dadtheimpaler.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dag-konsult.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dah5.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dailystormerpodcasts.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "damianuv-blog.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dammekens.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "damngoodpepper.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dancerdates.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "danielworthy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "danijobs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "danilapisarev.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dannycrichton.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "danscomp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "danseressen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "darkspacelab.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "darkwater.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dashnimorad.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "databutlr.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "datajapan.co.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "datenreiter.cf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "datenreiter.gq", "include_subdomains": true, "mode": "force-https" },
+    { "name": "datenreiter.ml", "include_subdomains": true, "mode": "force-https" },
+    { "name": "datenreiter.tk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "david-corry.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "davidgouveia.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "davidhunter.scot", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dccoffeeproducts.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dckd.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dcmt.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dcurt.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dd.art.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ddos-mitigation.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ddos-mitigation.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deaktualisierung.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deathy.ro", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deco.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "decor-d.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "decoratrix.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "decoyrouting.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dedelta.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deduijventil.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deetzen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "degeberg.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "delta-data.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deltanet-production.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "delvj.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "demotops.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "denimio.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dentallaborgeraeteservice.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dentystabirmingham.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "derbyshire-language-scheme.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "derchris.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "deregowski.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "desiccantpackets.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "designgears.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "designthinking.or.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "detest.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "devcu.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "devilshakerz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "devincrow.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "devmsg.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "devnull.team", "include_subdomains": true, "mode": "force-https" },
+    { "name": "devuan.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dfekt.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "diarbag.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "diasdasemana.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dicionariofinanceiro.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dienstplan.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dierenkruiden.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dieti.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "digidroom.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "digital-coach.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "digital-eastside.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "digitallocker.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "digitalquery.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dipl.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "directebanking.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "discipul.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "disposable.link", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dissectcyber.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dixiediner.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dizihocasi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "djlive.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "djxmmx.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "djz4music.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dmeevalumate.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dmi.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dna.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dnc.org.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dnshallinta.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dnslog.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "doctor-locks.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "doctorfox.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "docufiel.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dogbox.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dogfi.sh", "include_subdomains": true, "mode": "force-https" },
+    { "name": "doku-gilde.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dolarcanadense.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dolphinswithlasers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "domadillo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "donotspellitgav.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dontcageus.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "doodledraw.ninja", "include_subdomains": true, "mode": "force-https" },
+    { "name": "doordecor.bg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "downloadsoftwaregratisan.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dr2dr.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "drainagebuizen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dranderle.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "drawingcode.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dreamcreator108.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dreweryinc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "drhopeson.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "driftdude.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "drino.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "droidboss.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "drrr.chat", "include_subdomains": true, "mode": "force-https" },
+    { "name": "drycreekphoto.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dsbrowser.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dshiv.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "duijf.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "duijfathome.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "duncancmt.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "duo.money", "include_subdomains": true, "mode": "force-https" },
+    { "name": "durangoenergyllc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dutch1.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dutchweballiance.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dutyfreeonboard.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dworzak.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dxa.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dzyabchenko.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "e-mak.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "e-teacher.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "e3amn2l.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "e3kids.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eagleridgecampground.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "earga.sm", "include_subdomains": true, "mode": "force-https" },
+    { "name": "easyconstat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "easycosmetic.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eatery.co.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eatvisor.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ebcs-solutions.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ebecs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ebermannstadt.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ecchidreams.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eckro.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ecorus.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "edelblack.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "edicct.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "edk.com.tr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "edmundcelis.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ego-world.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "egretail.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ehrlichesbier.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ehuber.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eicfood.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eickemeyer.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eirastudios.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ejeff.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ekbanden.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ekokontakt.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ekostecki.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "el-soul.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "elanguest.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "elanguest.ro", "include_subdomains": true, "mode": "force-https" },
+    { "name": "elanguest.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eligibleapi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "elisabeth-kostecki.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "elisabethkostecki.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ella-kwikmed.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eloge.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "elternforum-birmensdorf.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eluhome.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "em-biotek.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "emailfuermich.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "emeldi-commerce.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "emielraaijmakers.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "emjainteractive.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "emprego.pt", "include_subdomains": true, "mode": "force-https" },
+    { "name": "emrenovation.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "enaim.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "encfs.win", "include_subdomains": true, "mode": "force-https" },
+    { "name": "encnet.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "encryptio.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "enjoy-nepal.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "enlightenedhr.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "enloestatebank.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "enscosupply.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "epaygateway.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "epicsecure.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "epicsoft.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "epostplus.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "equilibre-yoga-jennifer-will.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "equipsupply.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "erepublik-deutschland.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ergorium.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ergorium.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ericwie.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ericyl.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "erigrid.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "errlytics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "erudikum.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "erwinwensveen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "escritoriodearte.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "esigmbh.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "esn-ypci.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "essentialoilsimports.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "esseriumani.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "essexcosmeticdentists.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "essexghosthunters.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "estaleiro.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "estebanborges.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "etdonline.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eteesheet.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "etelej.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eth0.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ethicall.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ethosinfo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "etkaddict.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "etrker.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ets2mp.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "etula.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "etyd.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "euro.ro", "include_subdomains": true, "mode": "force-https" },
+    { "name": "evantage.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "evantageglobal.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "evegalaxy.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eventaro.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "everling.lu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "everymove.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "evi.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "evin.ml", "include_subdomains": true, "mode": "force-https" },
+    { "name": "evites.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "evowl.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "exchangeworks.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "exemples-de-stands.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "exoscale.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "exoticads.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "expressemotion.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "extremenetworking.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "exy.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "exyplis.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eyeglassuniverse.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "eyeonid.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ez.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "f-be.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "faber.org.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "factorable.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "factys.do", "include_subdomains": true, "mode": "force-https" },
+    { "name": "factys.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fadilus.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fail4free.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "faircom.co.za", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fairlyoddtreasures.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fakturi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "falkena.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "falsum.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "familie-kupschke.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "familie-monka.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fanjoe.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fanyl.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fanyue123.tk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "farhood.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fasset.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fatgeekflix.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fatwin.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fawong.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fcburk.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fdt.name", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fedux.com.ar", "include_subdomains": true, "mode": "force-https" },
+    { "name": "feedhq.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fernandes.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ferrugem.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "festrip.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "feuerwehr-oberkotzau.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fexmen.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ffmradio.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ficus.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fid.to", "include_subdomains": true, "mode": "force-https" },
+    { "name": "filemeal.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "filhodohomem.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "financieringsportaal.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fingent.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "finisron.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "firehost.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "firstmall.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fish2.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fit4medien.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fitbylo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fitiapp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fitnesswerk.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fitzsim.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fivestarsitters.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fixatom.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fixhotsauce.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fixmycomputerdude.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "flareon.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "flawcheck.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "flazznetworks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "flexinvesting.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "flipneus.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "floless.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "florence.uk.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "florent-tatard.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "florian-thie.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "floriankeller.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "flyaces.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fndout.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fnordserver.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fokkusu.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fondanastasia.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "font-converter.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foodievenues.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foraje-profesionale.ro", "include_subdomains": true, "mode": "force-https" },
+    { "name": "forbook.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "forex-dan.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fortesanshop.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fortworth.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fotm.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fotocerita.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fotopasja.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fotowettbewerb.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foxbnc.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foxdev.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foxley-farm.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foxley-seeds.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foxleyseeds.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "foxtrot.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fragnic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fraho.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "francescopalazzo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "franckgirard.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frank.fyi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fransallen.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frasys.cloud", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frasys.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frasys.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "freeform4u.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "freematthale.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "freemedforms.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "freesoftwaredriver.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "freetsa.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "freshfind.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frickelboxx.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frizo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fromlemaytoz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frontisme.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "froot.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "frugro.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fsbpaintrock.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fsbturton.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fsm2016.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ftc.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fundacionhijosdelsol.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fundays.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "funi4u.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "funkyweddingideas.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "furgo.love", "include_subdomains": true, "mode": "force-https" },
+    { "name": "futbol11.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fx-rk.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fxp.co.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fyfywka.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fyn.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "fysiohaenraets.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "g-o.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gafachi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gagniard.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gagor.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gakkainavi-epsilon.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gakkainavi-epsilon.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gakkainavi.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gakkainavi.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gakkainavi4.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gakkainavi4.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gakkainavi4.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "galactic-crew.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "game7.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gamecave.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gamedevelopers.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gamepader.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gamingmedia.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gamingreinvented.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ganhonet.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gar-nich.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "garantieabschluss.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "garedtech.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gasbarkenora.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gatapro.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gateworld.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ge1.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gee.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "geeq.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "geli-graphics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gemeentemolenwaard.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "generationnext.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "genyhitch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "geolad.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "georgesonarthurs.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "georgmayer.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "geoscan.aero", "include_subdomains": true, "mode": "force-https" },
+    { "name": "germandarknes.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getcarefirst.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getcarina.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getkai.co.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getlifti.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getsensibill.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getsetupfile.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getwashdaddy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gflclan.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ghcif.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "giftgofers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "giftsn.com.sg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gig.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gigawa.lt", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gingali.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gipsic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gistfy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "git.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "givemyanswer.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gix.net.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gixtools.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gixtools.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gixtools.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gixtools.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gjcampbell.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gjung.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "glidingshop.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "glidingshop.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "glitchsys.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "globalgivingtime.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "globalmusic.ga", "include_subdomains": true, "mode": "force-https" },
+    { "name": "globalsites.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gloomyvancouver.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "goerres2014.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gogetssl.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gogold-g.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gohon.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "goldpros.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "goldsecurity.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "golf18network.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "goodmengroup.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gosccs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gosharewood.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gospelvestcination.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gotgenes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gotomi.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "govillemo.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gozel.com.tr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gprs.uk.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gpstuner.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "grademypc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gradienthosting.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "graycell.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gresb.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gretchelizartistry.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "greysolutions.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gribani.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "grieg-gaarden.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "grieglogistics.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "griegshipbrokers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "groovinads.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gtamodshop.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gtldna.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gts-schulsoftware.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "guava.studio", "include_subdomains": true, "mode": "force-https" },
+    { "name": "guerrilla.technology", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gugaltika-ipb.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gulenbase.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gunnaro.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "guoqiang.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gurkan.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "guts.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gypsycatdreams.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gypthecat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gz-benz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gz-bmw.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "haarkliniek.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "habanaavenue.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hackerforever.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hackmd.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "haeckl.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hahayidu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hamali.bg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hancc.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "handiworker.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hansen.hn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hansvaneijsden.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hanu.la", "include_subdomains": true, "mode": "force-https" },
+    { "name": "haomwei.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "happyandrelaxeddogs.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "harabuhouse.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "harmoney.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "harrisonsand.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hartie95.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "harvestrenewal.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "harz.cloud", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hashimah.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hashworks.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "haskovec.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "haveforeningen-enghaven.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "havellab.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hawksguild.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hd-gaming.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hdhoang.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "heartmdinstitute.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "heavensinferno.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hebikhiv.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hedgeschool.ie", "include_subdomains": true, "mode": "force-https" },
+    { "name": "heinpost.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hellersgas.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hellotandem.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "helloworldhost.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hellscanyonraft.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hennadesigns.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hentschke-bau.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hentschke-invest.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "herbertmouwen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hermes-net.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "herr-webdesign.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "herrenfahrt.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "heycms.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hibilog.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hicl.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hiddendepth.ie", "include_subdomains": true, "mode": "force-https" },
+    { "name": "higgstools.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "higp.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.cl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.co.kr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.com.ar", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.ee", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.ie", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.kz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.lu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.lv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.pt", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hilti.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hippies.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hitoy.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hochzeit-dana-laurens.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hoffmeister.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "homedna.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "homeprivate.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "homewatt.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "honda-centrum.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "honeybeard.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "honeycome.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hooray.beer", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hopesb.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "horvathd.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hory.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hosiet.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hosmussynergie.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hostam.link", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hosteasy.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hosted-service.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hostinaus.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hostmijnpagina.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hotchoc.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hotel-pension-sonnalp.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hotting.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "houser.lu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "howbehealthy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hr-intranet.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "http418.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "huarongdao.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "huersch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hugosleep.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "huiser.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "humeurs.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "huntshomeinspections.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hup.blue", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hurd.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hxying.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hydrocloud.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hydrozone.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "hyk.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "i--b.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "i-partners.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iapws.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ib-wedler.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iba.community", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ibnuwebhost.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iceloch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "icpc2016.in.th", "include_subdomains": true, "mode": "force-https" },
+    { "name": "icreative.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ict-concept.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ictual.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "idacmedia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ideasmeetingpoint.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "idedr.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "idensys.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "idexxpublicationportal.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "idgard.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ieeespmb.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ies-italia.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ifasec.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "igiftcards.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "igk.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ihrnationalrat.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ihuanmeng.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ikon.name", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ile-kalorii.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "im2net.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "imanolbarba.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "imjad.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "immobilier-nice.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "immoprotect.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "immunicity.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "imolug.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "imperialwebsolutions.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "imu.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "in-flames.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "inbox-group.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "inbox.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "inche-ali.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "indoorskiassen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "indredouglas.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "indusfastremit-ca.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "industreiler.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "informatiebeveiliging.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "infosec.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "infotics.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "infra-con.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "inkable.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "inkstory.gr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "insightera.co.th", "include_subdomains": true, "mode": "force-https" },
+    { "name": "inspire-av.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "inspy.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "instantdev.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "intelldynamics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "intermedinet.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "internect.co.za", "include_subdomains": true, "mode": "force-https" },
+    { "name": "internetzentrale.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "internl.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "interociter-enterprises.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "interways.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "intimateperrierjouet.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "intocities.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "intramanager.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "intrasoft.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "invoicefinance.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iolife.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iompost.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iomstamps.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ionc.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ionx.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iossifovlab.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iotsms.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ip6.im", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ipal.im", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ipal.name", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iplabs.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ipmotion.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iptel.by", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ireef.tv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "isbengrumpy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ischool.co.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iseek.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "israkurort.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "istanbultravelguide.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "istheapplestoredown.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "it-go.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "itb-online.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "itforge.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "itnota.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "itos.asia", "include_subdomains": true, "mode": "force-https" },
+    { "name": "itos.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "its-v.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "itsecguy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "iwilcox.me.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "izolight.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "izoox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "izzzorgconcerten.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ja-publications.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jaclynjohnson.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jaispirit.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jaketremper.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jakubtopic.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jamessan.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jan27.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "janbrodda.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "janosh.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "japan-foods.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "japan4you.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "japlex.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jaredeberle.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jaredfernandez.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jartza.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "javelinsms.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jaymecd.rocks", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jazz-alliance.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jazz-alliance.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jazzinutrecht.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jcch.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jcyz.cf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jdh8.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jeff.forsale", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jekkt.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jennifersauer.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jensrex.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jeremye77.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jerodslay.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jeroendeneef.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jessicabenedictus.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jesters-court.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jetwhiz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jfmel.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jirav.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jobflyapp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jobmedic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "johndong.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "johners.tech", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jokewignand.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jonnichols.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jooto.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jornadasciberdefensa2016.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "josahrens.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "joyqi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "js-online.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jsanders.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jsg-technologies.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "json-viewer.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jthackery.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jualssh.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "julibear.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "julido.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "juliemaurel.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jumba.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jumbox.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jump.bg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "junge-selbsthilfe.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jungesforumkonstanz.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "junjung.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "justnaw.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "justudin.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "juwairen.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jym.fit", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jznet.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "k-tube.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kaangenc.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kaasbijwijn.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kabuabc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kadioglumakina.com.tr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kainz.bayern", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kainz.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kaizeronion.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kall.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kangarooislandholidayaccommodation.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "karateka.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "karsofsystems.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "karting34.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kashdash.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "katiaetdavid.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "katnunn.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "katproxy.site", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kavik.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kb3.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "keeweb.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "keisaku.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kekz.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kempkens.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kendra.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kenkoelectric.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kentacademiestrust.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kerangalam.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "keybored.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kgm-irm.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kickerplaza.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kid-dachau.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kidbacker.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kiel-media.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kienlen.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kilerd.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "killerrobots.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kimberg.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kiocloud.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kionetworks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kirbear.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kirinas.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kis-toitoidixi.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kisstyle.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kita.id", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kitabgaul.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kittmedia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kizil.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kk-neudorf-duissern.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "klas.or.id", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kleertjesvoordelig.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kleine-dingen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "klimat-pro.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "klunkergarten.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "klustekeningen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "knccloud.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kngk-group.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kngk.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "knot-store.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kodakit.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "koerper-wie-seele.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "koezmangal.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "koi-sama.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "koketteriet.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kollabria.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "komget.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "komikito.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "komiksbaza.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kompetenzwerft.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kon-sil.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "koophetlokaal.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "koretech.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kozuch.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kraynik.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kreationnext.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kromonos.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "krunut.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ksfh-mail.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kstan.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kucom.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kuehnel.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kueulangtahunanak.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kulde.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kupelne-ptacek.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kurofuku.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kurz.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kvalita-1a.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kylelaker.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "kyosaku.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "l-lab.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "laboiteapc.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lagalerievirtuelle.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lampl.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lan2k.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lanbyte.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "langbein.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lansinoh.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "laposte.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lasnaves.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "latinphone.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lauftreff-himmelgeist.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "laurel4th.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lbrt.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lcti.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ld-begunjscica.si", "include_subdomains": true, "mode": "force-https" },
+    { "name": "le-dev.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "le-hosting.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leadingsalons.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leandre.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "learnflakes.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "learnfrenchfluently.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "learningorder.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lechiennoir.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leesilvey.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "legarage.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leilonorte.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leitner.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leiyun.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lengzzz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lenovogaming.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leonard.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leopold.email", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leopoldina.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lesnet.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "letsmultiplayerplay.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "letstox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lgiswa.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lgrs.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "libertas-tech.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "liderwalut.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lifeskillsdirect.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lifestylehunter.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lifetimemoneymachine.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lifi.digital", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lifi.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "likeaross.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lingros-test.tk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lingvo-svoboda.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "link2serve.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "linno.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "linuxeyecandy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "linuxhostsupport.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "linuxwebservertips.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lislan.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "litevault.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "liudon.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "liverpoolmutualhomes.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lkummer.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "llamacuba.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lm-pumpen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "loadso.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "localbitcoins.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "logario.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "london-transfers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "londonlanguageexchange.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "longboarding-ulm.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "loophost.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lordjevington.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lost.host", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lotsencafe.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "louiewatch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "love-schna.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lover-bg.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lowmagnitude.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lowsidetna.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lpbk-bethel.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lucaterzini.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lucidframeworks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "luke.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lukeng.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lukeng.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lungdoc.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "luno.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "luoxiao.im", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lustrum.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lwl.moe", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lynero.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lynthium.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "m-edmondson.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "macaque.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "machon.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "macnemo.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "maddi.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "madebyshore.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "madin.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "madreacqua.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mafiasi.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "magenx.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mahrer.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mailfence.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mailhost.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mainlined.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "malerversand.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "malware.watch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mamaxi.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "manaboutahor.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "management-ethics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "managewp.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "manhattanchoralensemble.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "manningbrothers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "maosensanguentadasdejesus.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marcel-preuss.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marchagen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marcontrol.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marie-elisabeth.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marinelausa.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mark-a-hydrant.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marketingdesignu.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "markido.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "markt-heiligenstadt.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marleyresort.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "marquiseclub.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "martensmxservice.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "martialc.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "martin-smith.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "martinkup.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "masse.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "matchneedle.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mathembedded.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "matthiasadler.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mauriciog.com.ar", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mauricioghiorzi.com.ar", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mausi.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "maxbytes.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "maxima.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "maximiliankrieg.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "maxr1998.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "maxtruxa.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mbaestlein.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mbinformatik.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mbsec.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mc81.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mcdonaldwhsl.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mce.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mce.nyc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mceconferencecentre.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mcooperlaw.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mdewendt.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mdkr.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mdpraha.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mdwftw.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mea.in.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mechanus.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "medba.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mediaburst.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mediaselection.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "medm-test.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meedoenzaanstad.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meetingmanager.ovh", "include_subdomains": true, "mode": "force-https" },
+    { "name": "megakiste.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mehrwert.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meillard-auto-ecole.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mein-webportal.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meincenter-meinemeinung.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meine-email-im.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "melearning.university", "include_subdomains": true, "mode": "force-https" },
+    { "name": "melissaadkins.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "melody-lyrics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "melvinlow.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mensagemdaluz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "menthix.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "menudrivetest.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "menuonlineordering.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "merkel.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "metaether.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meteorapp.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "metzgerei-birkenhof.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meuemail.pro", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meyeraviation.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mghiorzi.com.ar", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mhdsyarif.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mheistermann.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "microdots.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "midair.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "midirs.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "midlgx.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mijnreisoverzicht.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mijntransacties.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mikadesign.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mikeburns.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mil0.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "milatrans.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "millenniumweb.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mindbodycontinuum.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "miniskipper.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "minobar.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mipiaci.co.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mipiaci.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mireservaonline.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "misakiya.co.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "missrain.tw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mitnetz-gas.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mixposure.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "miyoshi-kikaku.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mizi.name", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mjcaffarattilaw.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mkes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mkp-deutschland.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mktemp.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mm13.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mma-acareporting.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mmgazhomeloans.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mmmm.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mobility-events.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "modifiedmind.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "moebel-nagel.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "moegirl.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mogry.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mona.lu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "monasterialis.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mondar.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mondopoint.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "moneygo.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "monkeydust.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "montanacures.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "montenero.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "moo.la", "include_subdomains": true, "mode": "force-https" },
+    { "name": "moonagic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "moonvpn.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mostwuat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "motherbase.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "motionfreight.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "motoryz.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mountainadventureseminars.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "moviesabout.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "movinglogistics.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mpcompliance.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mplant.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mpserver12.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mpsgarage.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mrnonz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mrpopat.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "msno.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mtcgf.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mtg-esport.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mtn.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mumei.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "murfy.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "murodese.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "murrayrun.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "muzykaprzeszladoplay.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mx.org.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "my-owncloud.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myairshop.gr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mybon.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mycollab.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mydnaresults.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mydocserve.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myip.tech", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.com.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.lt", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.lv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myownconference.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myruststats.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mysticplumes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mystudy.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mytc.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mythslegendscollection.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mytripcar.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mytripcar.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mytripcar.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mytripcar.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "myworth.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nabankco.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nagaya.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nako.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nalifornia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nargileh.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "naro.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nartuk.com.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "natalia.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "natalt.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "natanaelys.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "natenom.name", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nathansmetana.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nationalcentereg.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "natural-progesterone.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "naturesystems.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nauck.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "navigate-it-services.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nb6.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nbp.com.pk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ncoding.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ncpw.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ncstep.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nebra.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "neftebitum-kngk.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "negativecurvature.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "neilgreen.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "neo19.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "netbank.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "netbulls.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "netmazk.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "netwerkmanager.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "networkalarmcorp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "networking4all.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "networkingnexus.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "networkingphoenix.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "netzwerkwerk.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "neuronasdigitales.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "never-afk.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "newedivideo.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "newlooknow.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "newstone-tech.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "newsyslog.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "newtnote.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "next176.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "next24.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nextgencel.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ng-firewall.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nghe.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nichteinschalten.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "niconiconi.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "niduxcomercial.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nierenpraxis-dr-merkel.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nierenpraxis-merkel.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nightfirecat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nightwinds.tk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nikklassen.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "niklaslindblad.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nikolasgrottendieck.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nine-hells.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ninespec.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nippon-oku.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nirada.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nixien.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nl-ix.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nlegall.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nmsnj.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nnqc.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "no17sifangjie.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nodespin.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "noedidacticos.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "noez.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nolatepayments.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nomesbiblicos.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "noobunbox.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nord-sud.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "norskpensjon.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nosecretshop.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nossasenhoradodesterro.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "notenoughtime.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "notificami.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "notoriousdev.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "notypiesni.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "npol.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nspeaks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nufla.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nukenet.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "null.cat", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nurserybook.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nutleyeducationalfoundation.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nutleyef.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nuttyveg.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nwra.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nwwc.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nyip.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nyronet.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nzbs.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "o0o.one", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oasisim.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "obsidianirc.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "occentus.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ochaken.cf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "octanio.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "octocat.ninja", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oddtime.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ohiohealthfortune100.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ohsocool.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oishioffice.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oke.com.tw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "okutama.in.th", "include_subdomains": true, "mode": "force-https" },
+    { "name": "olcso-vps-szerver.hu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oliver-pietsch.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ollehbizev.co.kr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ollies.cloud", "include_subdomains": true, "mode": "force-https" },
+    { "name": "olymp-arts.world", "include_subdomains": true, "mode": "force-https" },
+    { "name": "omniasl.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onefour.ga", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oneminute.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oneweb.hu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oneworldbank.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onguardonline.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oniichan.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "online-wetten.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onlinecompliance.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onlinedeposit.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onlinelighting.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onlinetravelmoney.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onmaps.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ontras.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onyxwall.link", "include_subdomains": true, "mode": "force-https" },
+    { "name": "onyxwall.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ooyo.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "open-future.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "openblox.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "openconnect.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "openmtbmap.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "opim.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oprbox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "optometriepunt.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oracaodocredo.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "orbiosales.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ordereat.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "orientalart.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "orioncustompcs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oroweatorganic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "osaiyuwu.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ossan-kobe-gourmet.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "osteammate.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "otpsmart.com.ua", "include_subdomains": true, "mode": "force-https" },
+    { "name": "outsider.im", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ovpn.to", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ovvy.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "owensmith.website", "include_subdomains": true, "mode": "force-https" },
+    { "name": "own3d.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ownit.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oxygenabsorbers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "oznamovacipovinnost.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "p-s-b.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pacelink.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "packlane.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paestbin.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pagetoimage.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "painosso.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paisaone.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pajowu.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pakremit.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paperturn.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paperwork.co.za", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paragon.com.sg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paragreen.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "parentinterview.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "parentmail.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "parleu2016.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "partnerbeam.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pastaenprosecco.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pastaf.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paster.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pasteros.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pastie.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "patentfamily.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paternitydnatest.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "patfs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "patientinsight.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "patralos.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "patrickschneider.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paulbdelaat.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paulinewesterman.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paxwinkel.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paypaq.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paypro.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "payroll.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "payslipview.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paytwopay.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pbapp.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pc-nf.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pccentral.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pchax.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pdamsidoarjo.co.id", "include_subdomains": true, "mode": "force-https" },
+    { "name": "peaceandwool.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "peakapp.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "peername.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pekkarik.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pencepay.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pentano.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pentest.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pepperhead.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "perfectseourl.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "performous.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "perspectivum.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pet-nsk.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "petpost.co.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pewboards.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pfarchimedes-pensioen123.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pgpm.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pgtb.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pharynks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "philipkohn.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "philipmordue.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "phillmoore.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "phillprice.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "phormance.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "photo.org.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "phpdistribution.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "phpsecure.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pickme.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "piekacz.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "piekacz.eu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "piekacz.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pieq.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pieq.eu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pieterjangeeroms.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "piliszek.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pinnaclelife.co.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pinnaclelife.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pirateproxy.tv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pisupp.ly", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pixelhero.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pixipics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "piyabute.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "plaintech.net.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "plaintray.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "planpharmacy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "plasti-pac.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "plhdb.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pliosoft.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "plixer.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ploader.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pluff.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "plumlocosoft.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pmt-documenten.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pnona.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pointaction.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pointpro.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "policeiwitness.sg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "politically-incorrect.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "politiewervingshop.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pompompoes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pontualcomp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "poolsandstuff.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "portosonline.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "portraitsystem.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "portvaletickets.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "poshpak.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "potatofrom.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "potatoheads.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "power99press.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "powerentertainment.tv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "powergridess.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "powerwellness-korecki.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ppipe.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prazynka.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "precedecaritas.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prego-shop.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "preparetheword.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prescotonline.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "preworkout.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prilock.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "princessmargaretlotto.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prior-it.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "privaterelay.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "privatestatic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prjktruby.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prnt.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pro-zone.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "profidea.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "profivps.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prohostonline.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "proitconsulting.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "projectbenson.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "promoscuola.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "promotiongeeks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "propipesystem.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prosocialmachines.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prosoft.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "protoyou.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "proxybay.top", "include_subdomains": true, "mode": "force-https" },
+    { "name": "proxyweb.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prtpe.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "prvikvadrat.hr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "przemas.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "psb1911.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "psicologia.co.ve", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pste.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pterodactylus.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ptsoft.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "puddis.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pugliese.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pvtschlag.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pxx.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pyol.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pysays.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qccareerschool.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qcdesignschool.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qceventplanning.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qcmakeupacademy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qcstudentcenter.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qcstyleacademy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qctravelschool.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qingpat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qonqa.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qrara.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qrlending.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "qualityofcourse.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "quantacloud.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "questsandrewards.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "quickpayservice.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "quietapple.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "quikpay.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "quintessa.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "quotemaster.co.za", "include_subdomains": true, "mode": "force-https" },
+    { "name": "quotev.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "r6-team.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "racasdecachorro.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "radyn.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "raidstone.rocks", "include_subdomains": true, "mode": "force-https" },
+    { "name": "railyardurgentcare.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rainforest.engineering", "include_subdomains": true, "mode": "force-https" },
+    { "name": "raitza.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "randc.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "randomcage.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "randstaddirect.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rannseier.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rapido.nu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ratajczak.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ratd.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ratuseks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ratuseks.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ratuseks.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rautermods.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ravindran.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rawet.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rawsec.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "raymondjcox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rcafox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rcorporation.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rdh.asia", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rdns.im", "include_subdomains": true, "mode": "force-https" },
+    { "name": "readr.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "real-it.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "realwaycome.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reanimated.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reardenporn.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "recapp.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "redar.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "redballoonsecurity.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "redbee.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "redburn.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reddingsbrigade-zwolle.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rede-reim.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rede.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "redigest.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "redzurl.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "regaloaks.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "regalosymuestrasgratis.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "regendevices.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "register.gov.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reic.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reiki-coaching.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reimers.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reithguard-it.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "relaxhavefun.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "remambo.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rent-a-coder.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "renteater.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "replicagunsswords.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "republique.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "repustate.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reputationweaver.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "res42.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "resc.la", "include_subdomains": true, "mode": "force-https" },
+    { "name": "resist.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "restrito.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "retrotracks.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "revamed.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "revensoftware.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "reverie.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "revthefox.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "revtut.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rhodenmanorcattery.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rhynl.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ribs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "righttoknow.ie", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rijschoolgevonden.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "riskmgt.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "riversideauto.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "riyono.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "robodeidentidad.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rockcanyonbank.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rocksberg.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rolandreed.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "romeoferraris.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ron2k.za.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "root.eu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rootswitch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rotterdamjazz.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rottweil-hilft.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rout0r.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rouvray.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rowancasting.ie", "include_subdomains": true, "mode": "force-https" },
+    { "name": "royalmarinesassociation.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "royalpub.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rring.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rsampaio.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rsync.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "runcarina.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "runreport.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ruobiyi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "rusempire.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ryankearney.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "s-cubed.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "saccani.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "safic.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "salmo23.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "salmododia.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "salmos91.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "salverainha.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "saml2.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sanandreasstories.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sanasalud.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sanradon.by", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sarah-beckett-harpist.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sarahlicity.me.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sarahs-roestcafe.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sarahsweetlife.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sarindia.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "saskpension.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "satrent.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "satsukii.moe", "include_subdomains": true, "mode": "force-https" },
+    { "name": "saucyfox.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "saunasandstuff.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "saunasandstuff.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "savenet.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "savingsstoreonline.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "schooltrends.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "schoolze.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "schreinerei-jahreis.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "schritt4fit.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "schroepfglas-versand.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sculpture.support", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secboom.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secondary-survivor.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secondary-survivor.help", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secondary-survivor.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secondarysurvivor.help", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secondarysurvivorportal.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secondarysurvivorportal.help", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secretpanties.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sectun.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secure-server-hosting.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secure.chat", "include_subdomains": true, "mode": "force-https" },
+    { "name": "secureonline.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "securityinet.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "securityinet.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "securityinet.org.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "securityprimes.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "securitysoapbox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "seedbox.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "seen.life", "include_subdomains": true, "mode": "force-https" },
+    { "name": "segitz.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "selectruckscalltrackingreports.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "selfcarecentral.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "selldorado.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "semen3325.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "semps-servers.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "semps.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "semyonov.su", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sendinvoice.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "senedirect.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sensibus.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "serenitycreams.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "serverpedia.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "servious.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sesha.co.za", "include_subdomains": true, "mode": "force-https" },
+    { "name": "setphaserstostun.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "setuid.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "setuid0.kr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sevenmatches.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sexton.uk.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shadoom.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shadowsocks.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shadowsworldonline.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shagi29.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shakespearesolutions.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shareimg.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sharepointdrive.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sharescope.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shauncrowley.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shawcentral.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shazbots.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shellfire.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shenghaiautoparts.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shep.co.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shh.sh", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shinnyosangha.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shocksrv.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shorebreaksecurity.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shortpath.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "showkeeper.tv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shu-kin.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "shyrydan.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sichere-kartenakzeptanz.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sieh.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "signslabelstapesandmore.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "silicagelpackets.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "silver-drachenkrieger.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "silverbowflyshop.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "silvistefi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simbihaiti.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simobilklub.si", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simon-hofmann.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simoncommunity.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simongong.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simonkjellberg.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simonreich.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simonsreich.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simplepractice.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simplixos.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "simplymozzo.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "singleuse.link", "include_subdomains": true, "mode": "force-https" },
+    { "name": "singlu10.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sinosky.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sirius-lee.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sistem-maklumat.com.my", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skalender.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skaraborgsassistans.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skarrok.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skatclub-beratzhausen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ski-insurance.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skigebiete-test.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skilldetector.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skk.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "skotty.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sloancom.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "slotcar.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "slowfood.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "slxh.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "slxh.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smallplanet.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smart-ov.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smartftp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smarthdd.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smarthomedna.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smarthouse.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smartrak.co.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smartshiftme.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smdavis.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sme-gmbh.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smithandcanova.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smkw.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smoo.st", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smow.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smow.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "smusg.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sneakpod.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "snfdata.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sniderman.eu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "snow-online.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "snow-online.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "snughealth.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "so-healthy.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "social-events.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "socialbillboard.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "socialdevelop.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sockeye.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "softwaredesign.foundation", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sogeek.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sogravatas.net.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sokkenhoek.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sol-3.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "solar-ec.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "solidfuelappliancespares.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "solinter.com.br", "include_subdomains": true, "mode": "force-https" },
+    { "name": "soll-i.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "solutionhoisthire.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "solved.tips", "include_subdomains": true, "mode": "force-https" },
+    { "name": "somethingnew.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sona-gaming.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sondergaard.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sonic.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sos.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sotar.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sotor.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "soulema.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sourcely.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sous-surveillance.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "southside-crew.club", "include_subdomains": true, "mode": "force-https" },
+    { "name": "southworcestershiregpservices.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spacecompute.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spacehq.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spaggel.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spauted.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spaysy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "speculor.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "speedmann.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "speedyprep.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "speidel.com.tr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spherenix.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spicydog.tk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spirit-dev.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spitefultowel.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "splitdna.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sqlapius.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sqr-training.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "square-src.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "squeezemetrics.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "srchub.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "srv47.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ssl247.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ssl247.com.mx", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ssl247.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ssl247.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ssnc.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sss3s.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stabletoken.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stadionmanager.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stadjerspasonline.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stage-props-blank-guns.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stageirites.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stagingjobshq.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stagstickets.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stahl.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "starmusic.ga", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stash.ai", "include_subdomains": true, "mode": "force-https" },
+    { "name": "statecover.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stateofexception.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "static.or.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stationnementdenuit.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "statuschecks.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stealsaga.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "steckregal-super.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "steidlewirt.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "steigerplank.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stellanova-planeten.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sterlingtrader.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stevensononthe.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stoffe-monster.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stoick.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "storecove.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "storeden.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stqry.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "str0.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "strchr.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "streamzilla.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "strictlysudo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stroeercrm.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "studenckiemetody.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stupendous.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stuur.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stw-group.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "styleci.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stylenda.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "su1ph3r.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "subseq.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "subtitle.rip", "include_subdomains": true, "mode": "force-https" },
+    { "name": "suncountrymarine.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "supastuds.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "super-o-blog.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "superhome.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "superiorfloridavacation.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "superkonsult.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "superswingtrainer.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "superwally.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "surfone-leucate.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "surgenet.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "survature.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "susastudentenjobs.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sustainability.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sustsol.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "svenskacasino.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "swaggerdile.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "swaleacademiestrust.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sycamorememphis.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sydgrabber.tk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sylvaindurand.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sylvanorder.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "synapticconsulting.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sync-it.no", "include_subdomains": true, "mode": "force-https" },
+    { "name": "syneic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "synfin.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "syriatalk.biz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "syriatalk.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sysmike.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "szechenyi2020.hu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "t-hawk.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "t-point.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "t-shirts4less.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tabla-periodica.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tacomafia.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "takusan.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "talsi.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tangiblesecurity.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tante-bugil.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tapfinder.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "taquilla.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "taskforce512.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tastycake.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tatilbus.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tavoittaja.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "taxspeaker.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "team-one.racing", "include_subdomains": true, "mode": "force-https" },
+    { "name": "team3482.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tech-essential.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tech-rat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "techmajesty.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "techpointed.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tecnogaming.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tedeh.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tedovo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "teebeedee.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "teemo.gg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "telefonkonferenz.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tempcraft.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tenenz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tengroup.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tennisadmin.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tentations-voyages.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "teos.online", "include_subdomains": true, "mode": "force-https" },
+    { "name": "teoskanta.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tepid.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "terracloud.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "terravirtua.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "testingbot.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "teuniz.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "teunstuinposters.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "texterseo.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "textoplano.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tgr.re", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thackbarth.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thai.land", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thaicyberpoint.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thaihostcool.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theberkshirescompany.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thecitizens.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thecitywarehouse.clothing", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theclementinebutchers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theclubjersey.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thedevrycommonsbrasil.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theendofzion.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thefarbeyond.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theflyingbear.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thefootballanalyst.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thefox.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thegcccoin.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thegvoffice.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thehiddenbay.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thelastsurprise.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "themillerslive.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thenorthschool.org.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thepiratebay.poker", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theploughharborne.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theseoframework.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thesharepointfarm.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theshopally.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "theurbanyoga.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thevintagenews.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thewindow.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thierfreund.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thinktux.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thirdpartytrade.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thirty5.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thomwiggers.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "threatcentral.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "throwaway.link", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tibbitshall.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ticketoplichting.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tickettoaster.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tickreport.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tigerdile.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "timbuktutimber.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "time-river.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "timestamp.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "timmersgems.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "timwittenberg.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tippspiel.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tjenestetorvet.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tls.care", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tmi-products.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tmi-produkter.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tmpraider.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tofu.im", "include_subdomains": true, "mode": "force-https" },
+    { "name": "togelonlinecommunity.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tokaido.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tokoone.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tokotimbangandigitalmurah.web.id", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tommsy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tomwilson.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tonegidoarchief.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tonkinson.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "topbrakes.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "topdevbox.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "torsten-schmitz.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "toshkov.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "totalbeauty.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "totaltriathlon.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "totem-international.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tourispo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tourpeer.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tout-art.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "towandalibrary.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tp-iryuubun.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tp-kabushiki.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tp-kyouyufudousan.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tp-law.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trade-smart.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tradeinvent.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trademan.ky", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tradinghope.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tradiz.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trakfusion.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "transacid.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "transmithe.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "transportal.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "travelinsurance.co.nz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tretkowski.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trident-online.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trim-a-slab.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trinityaffirmations.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trinnes.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tripdelta.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tripseats.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "troi.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "truckerswereld.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "truejob.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trueteaching.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "truthmessages.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "trw-reseller.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tsecy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tsgbit.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tsrstore.gq", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tubepro.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tunai.id", "include_subdomains": true, "mode": "force-https" },
+    { "name": "turbobit.ch", "include_subdomains": true, "mode": "force-https" },
+    { "name": "turnik-67.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "turtle.ai", "include_subdomains": true, "mode": "force-https" },
+    { "name": "turtlementors.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tuxcloud.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "twarog.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "twd2.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "twd2.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "twelve.rocks", "include_subdomains": true, "mode": "force-https" },
+    { "name": "twogo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tx041cap.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "txclimbers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "txf.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tyl.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tylerschmidtke.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tylian.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tyroproducts.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tysye.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "uber.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "uberboxen.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ublox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ubuntuhot.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "udomain.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ufgaming.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "uhc.gg", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ukchemicalresearch.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ukdropshipment.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ukdropshipment.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ultieme.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "umie.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "umisonoda.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "under30stravelinsurance.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "undo.co.il", "include_subdomains": true, "mode": "force-https" },
+    { "name": "unfiltered.nyc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "unicooo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "uniform-agri.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "unit7jazz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "unit7jazz.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "universalcarremote.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "universalpaymentgateway.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "university4industry.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "universogay.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "unsystem.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "upani.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "upstox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "uptimed.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "uptimenotguaranteed.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "urbanesecurity.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "urlchomp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "urspringer.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "usaab.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "usbirthcertificate.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "usercare.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "usleep.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "utopianhomespa.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "uttnetgroup.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "v2.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vakuutuskanava.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "valkyrja.xyz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "valleyridgepta.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vampirism.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vandalfsen.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vande-walle.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vanitynailworkz.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vantien.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vavai.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vbest.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vcientertainment.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vcr.re", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vdbongard.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vdrpro.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vennet.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "venturepro.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vetdnacenter.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "victorjacobs.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vide-maisons.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "videogamesartwork.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "videotogel.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vidid.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vidz.ga", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vigilantnow.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vigilo.cf", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vigilo.ga", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vigo-tarife.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vikasbabyworld.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "viktorsvantesson.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vincentpancol.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vincitraining.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vintageheartcoffee.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vinyculture.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vipmusic.ga", "include_subdomains": true, "mode": "force-https" },
+    { "name": "virtualdesignmedia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "visioflux-premium.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vistaalmar.es", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vistarait.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vitagenda.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vitalita.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vitapingu.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "viviotech.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vlora.city", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vnvisa.center", "include_subdomains": true, "mode": "force-https" },
+    { "name": "voceinveste.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "volkergropp.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vonavycukor.sk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vpn-byen.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vps-szerver-berles.hu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vratny.space", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vuosaarenmontessoritalo.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vux.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vxapps.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vxstream-sandbox.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "w4xzr.top", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wa-stromerzeuger.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "waelti.xxx", "include_subdomains": true, "mode": "force-https" },
+    { "name": "waffle.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "waka-mono.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wakamiyasumiyosi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wakened.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wallsblog.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wangql.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wangql.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "warhaggis.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "warhistoryonline.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "warmservers.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "warped.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "watchium.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wave.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wavefrontsystemstech.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wavesboardshop.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "waylaydesign.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wdt.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wealthcentral.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wealthfactory.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wealthreport.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wear2work.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wearandcare.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "web4pro.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webchat.domains", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webdesign-kronberg.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webergrillrestaurant.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webhosting4.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "weblogic.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webmax.com.tr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webperformance.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webs4all.ro", "include_subdomains": true, "mode": "force-https" },
+    { "name": "websectools.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webseitenserver.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webstylemedia.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webtheapp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webwit.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webwork.pw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "weicn.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "welcomehelp.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wellastore.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wellensteyn.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "werbewelt-tv.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "werken-bij-inwork.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "werkenbijkfc.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "westsussexconnecttosupport.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wetoxic.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "whatanime.ga", "include_subdomains": true, "mode": "force-https" },
+    { "name": "whatsstalk.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "whiskynerd.ca", "include_subdomains": true, "mode": "force-https" },
+    { "name": "whitelabelcashback.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wholesomeharvestbread.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wholikes.us", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wiberg.nu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wiedu.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wijnservices.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wikiclash.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "willberg.bayern", "include_subdomains": true, "mode": "force-https" },
+    { "name": "willcipriano.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "william.si", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wimake.solutions", "include_subdomains": true, "mode": "force-https" },
+    { "name": "windrunner.se", "include_subdomains": true, "mode": "force-https" },
+    { "name": "winghill.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wingumd.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "winterschoen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wintodoor.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wiretrip.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wispapp.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "witway.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wizzr.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wmcuk.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wofford-ecs.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wonder.com.mx", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wonderlandmovies.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wondy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wordxtra.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "workfone.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "woutervdb.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wow-foederation.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wowapi.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wphostingspot.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wsa.poznan.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wth.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wubocong.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wuetix.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wufu.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wvg.myds.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "www3.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "x3led.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "x509.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xa1.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xalqbank-online.az", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xbb.hk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xbb.li", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xboxdownloadthat.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xcentricmold.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xdeftor.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xendo.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xg3n1us.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xichuangke.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xilef.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xinbiji.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xmpp.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xn--3lqp21gwna.cn", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xn--3lqp21gwna.xn--fiqz9s", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xn--79q87uvkclvgd56ahq5a.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xn--pbt947am3ab71g.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xnode.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xoffy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xrockx.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xsmobile.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xuc.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xxbase.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "xyfun.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yacobo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yak.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yal.sh", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yameveo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yaoidreams.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yapbreak.fr", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yasinaydin.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ydy.jp", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yesonline.asia", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yesonline.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yinlei.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yjsoft.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ynode.co", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ynode.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "youkaryote.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "youkaryote.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yourznc.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yuhen.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yuko.moe", "include_subdomains": true, "mode": "force-https" },
+    { "name": "yum.beer", "include_subdomains": true, "mode": "force-https" },
+    { "name": "z-vector.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zaalleatherwear.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zahe.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zamorano.edu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zap.yt", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zbigniewgalucki.eu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zbp.at", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zebry.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zeedroom.be", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zehdenick-bleibt-bunt.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zeitzer-turngala.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zenvideocloud.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zerekin.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zertif.info", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zerudi.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zespia.tw", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zeto365.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zetorzeszow.pl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zhangruilin.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zhh.in", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ziin.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zimiao.moe", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zingarastore.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zionvps.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zippy-download.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zippy-download.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zjutv.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zohar.wang", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zomerschoen.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zorium.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zuram.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zvncloud.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zyf.pw", "include_subdomains": true, "mode": "force-https" },
+    // END OF MANUAL ADDITIONS
+
+    // Entries submitted through hstspreload.appspot.com in Chrome 51 or later.
+    // START OF BULK ADDITIONS
+    { "name": "bodhi.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "communityblog.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "keys.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "meetbot.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "paste.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "spins.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "src.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "torrent.fedoraproject.org", "include_subdomains": true, "mode": "force-https" },
+    // END OF BULK ADDITIONS
+
+    // To avoid trailing comma changes from showing up in diffs, we place a
+    // single entry at the end.
+    { "name": "hstspreload.appspot.com", "include_subdomains": true, "mode": "force-https" }
   ],
 
   // |ReportUMAOnPinFailure| uses these to report which domain was associated
diff --git a/net/net.gyp b/net/net.gyp
index 1f30e79..8c51208 100644
--- a/net/net.gyp
+++ b/net/net.gyp
@@ -706,34 +706,6 @@
       ],
     },
     {
-      'target_name': 'net_docs',
-      'type': 'none',
-      'actions': [
-        {
-          'action_name': 'net_docs',
-          'variables': {
-            'net_docs_input_dir': '.',
-          },
-          'inputs': [
-            '<@(net_docs_sources)',
-          ],
-          'outputs': [
-            '<(net_docs_output_dir)',
-          ],
-          'action': [
-            'python',
-            '<(net_docs_script)',
-            '--input_path',
-            '<(net_docs_input_dir)',
-            '--output_path',
-            '<(net_docs_output_dir)',
-            '<@(net_docs_sources)',
-          ],
-          'message': 'Rendering network stack documentation',
-        }
-      ],
-    },
-    {
       'target_name': 'http_server',
       'type': 'static_library',
       'variables': { 'enable_wexit_time_destructors': 1, },
diff --git a/net/net.gypi b/net/net.gypi
index b47e43f..9e7161f 100644
--- a/net/net.gypi
+++ b/net/net.gypi
@@ -62,7 +62,6 @@
       'base/registry_controlled_domains/registry_controlled_domain.h',
       'base/sockaddr_storage.cc',
       'base/sockaddr_storage.h',
-      'base/socket_performance_watcher.cc',
       'base/socket_performance_watcher.h',
       'base/socket_performance_watcher_factory.h',
       'base/sys_addrinfo.h',
@@ -121,6 +120,10 @@
       'cert/signed_certificate_timestamp.h',
       'cert/signed_tree_head.cc',
       'cert/signed_tree_head.h',
+      'cert/sth_distributor.cc',
+      'cert/sth_distributor.h',
+      'cert/sth_observer.h',
+      'cert/sth_reporter.h',
       'cert/x509_cert_types.cc',
       'cert/x509_cert_types.h',
       'cert/x509_certificate.cc',
@@ -2001,17 +2004,5 @@
       "websockets/websocket_stream.cc",
       "websockets/websocket_stream.h",
     ],
-    'net_docs_script': 'tools/net_docs/net_docs.py',
-    'net_docs_sources': [
-      'README.md',
-      'docs/bug-triage.md',
-      'docs/bug-triage-labels.md',
-      'docs/bug-triage-suggested-workflow.md',
-      'docs/code-patterns.md',
-      'docs/crash-course-in-net-internals.md',
-      'docs/life-of-a-url-request.md',
-      'sdch/README.md',
-    ],
-    'net_docs_output_dir': '<(PRODUCT_DIR)/net/docs',
   }
 }
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index 0a5ab02..4774b5bf 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -11,8 +11,8 @@
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "net/base/chunked_upload_data_stream.h"
-#include "net/base/network_quality_estimator.h"
 #include "net/base/socket_performance_watcher.h"
+#include "net/base/socket_performance_watcher_factory.h"
 #include "net/base/test_completion_callback.h"
 #include "net/base/test_data_directory.h"
 #include "net/cert/mock_cert_verifier.h"
@@ -139,47 +139,53 @@
   bool was_called_;
 };
 
-class TestNetworkQualityEstimator : public NetworkQualityEstimator {
+class TestSocketPerformanceWatcher : public SocketPerformanceWatcher {
  public:
-  TestNetworkQualityEstimator()
-      : NetworkQualityEstimator(scoped_ptr<net::ExternalEstimateProvider>(),
-                                std::map<std::string, std::string>()),
-        watcher_count_(0) {}
+  explicit TestSocketPerformanceWatcher(bool* rtt_notification_received)
+      : rtt_notification_received_(rtt_notification_received) {}
+  ~TestSocketPerformanceWatcher() override {}
 
-  ~TestNetworkQualityEstimator() override {}
+  bool ShouldNotifyUpdatedRTT() const override { return true; }
 
+  void OnUpdatedRTTAvailable(const base::TimeDelta& rtt) override {
+    *rtt_notification_received_ = true;
+  }
+
+  void OnConnectionChanged() override {}
+
+ private:
+  bool* rtt_notification_received_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcher);
+};
+
+class TestSocketPerformanceWatcherFactory
+    : public SocketPerformanceWatcherFactory {
+ public:
+  TestSocketPerformanceWatcherFactory()
+      : watcher_count_(0u), rtt_notification_received_(false) {}
+  ~TestSocketPerformanceWatcherFactory() override {}
+
+  // SocketPerformanceWatcherFactory implementation:
   scoped_ptr<SocketPerformanceWatcher> CreateSocketPerformanceWatcher(
       const Protocol protocol) override {
     if (protocol != PROTOCOL_QUIC) {
-      NOTIMPLEMENTED();
+      return nullptr;
     }
     ++watcher_count_;
-    return NetworkQualityEstimator::CreateSocketPerformanceWatcher(protocol);
+    return scoped_ptr<SocketPerformanceWatcher>(
+        new TestSocketPerformanceWatcher(&rtt_notification_received_));
   }
 
   size_t watcher_count() const { return watcher_count_; }
 
- private:
-  size_t watcher_count_;
-  DISALLOW_COPY_AND_ASSIGN(TestNetworkQualityEstimator);
-};
-
-class TestRTTObserver : public NetworkQualityEstimator::RTTObserver {
- public:
-  TestRTTObserver() : rtt_notification_received_(false) {}
-
   bool rtt_notification_received() const { return rtt_notification_received_; }
 
-  // NetworkQualityEstimator::RttObserver implementation:
-  void OnRTTObservation(
-      int32_t rtt_ms,
-      const base::TimeTicks& timestamp,
-      net::NetworkQualityEstimator::ObservationSource source) override {
-    rtt_notification_received_ = true;
-  }
-
  private:
+  size_t watcher_count_;
   bool rtt_notification_received_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory);
 };
 
 class QuicNetworkTransactionTest
@@ -190,7 +196,6 @@
       : clock_(new MockClock),
         maker_(GetParam(), 0, clock_, kDefaultServerHostName),
         cert_transparency_verifier_(new MultiLogCTVerifier()),
-        test_network_quality_estimator_(new TestNetworkQualityEstimator()),
         ssl_config_service_(new SSLConfigServiceDefaults),
         proxy_service_(ProxyService::CreateDirect()),
         auth_handler_factory_(
@@ -442,7 +447,7 @@
     params_.transport_security_state = &transport_security_state_;
     params_.cert_transparency_verifier = cert_transparency_verifier_.get();
     params_.socket_performance_watcher_factory =
-        test_network_quality_estimator_.get();
+        &test_socket_performance_watcher_factory_;
     params_.proxy_service = proxy_service_.get();
     params_.ssl_config_service = ssl_config_service_.get();
     params_.http_auth_handler_factory = auth_handler_factory_.get();
@@ -455,8 +460,6 @@
       params_.quic_host_whitelist.insert(host);
     }
 
-    test_network_quality_estimator_->AddRTTObserver(&rtt_observer_);
-
     session_.reset(new HttpNetworkSession(params_));
     session_->quic_stream_factory()->set_require_confirmation(false);
     ASSERT_EQ(params_.quic_socket_receive_buffer_size,
@@ -588,8 +591,7 @@
   MockCertVerifier cert_verifier_;
   TransportSecurityState transport_security_state_;
   scoped_ptr<CTVerifier> cert_transparency_verifier_;
-  scoped_ptr<TestNetworkQualityEstimator> test_network_quality_estimator_;
-  TestRTTObserver rtt_observer_;
+  TestSocketPerformanceWatcherFactory test_socket_performance_watcher_factory_;
   scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
   scoped_ptr<ProxyService> proxy_service_;
   scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_;
@@ -649,9 +651,11 @@
   params_.enable_alternative_service_with_different_host = false;
   CreateSession();
 
-  EXPECT_FALSE(rtt_observer_.rtt_notification_received());
+  EXPECT_FALSE(
+      test_socket_performance_watcher_factory_.rtt_notification_received());
   SendRequestAndExpectQuicResponse("hello!");
-  EXPECT_TRUE(rtt_observer_.rtt_notification_received());
+  EXPECT_TRUE(
+      test_socket_performance_watcher_factory_.rtt_notification_received());
 
   // Check that the NetLog was filled reasonably.
   TestNetLogEntry::List entries;
@@ -711,7 +715,8 @@
 
   mock_quic_data.AddSocketDataToFactory(&socket_factory_);
 
-  EXPECT_FALSE(rtt_observer_.rtt_notification_received());
+  EXPECT_FALSE(
+      test_socket_performance_watcher_factory_.rtt_notification_received());
   // There is no need to set up an alternate protocol job, because
   // no attempt will be made to speak to the proxy over TCP.
 
@@ -721,7 +726,8 @@
   CreateSession();
 
   SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
-  EXPECT_TRUE(rtt_observer_.rtt_notification_received());
+  EXPECT_TRUE(
+      test_socket_performance_watcher_factory_.rtt_notification_received());
 }
 
 // Regression test for https://crbug.com/492458.  Test that for an HTTP
@@ -831,7 +837,7 @@
   params_.enable_alternative_service_with_different_host = false;
   CreateSession();
 
-  EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count());
+  EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count());
   for (size_t i = 0; i < 2; ++i) {
     scoped_ptr<HttpNetworkTransaction> trans(
         new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
@@ -839,7 +845,7 @@
     int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
     EXPECT_EQ(ERR_IO_PENDING, rv);
     EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
-    EXPECT_EQ(1 + i, test_network_quality_estimator_->watcher_count());
+    EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count());
   }
 }
 
@@ -863,7 +869,7 @@
   CreateSession();
 
   SendRequestAndExpectHttpResponse("hello world");
-  EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count());
+  EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count());
 }
 
 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) {
@@ -2292,7 +2298,8 @@
 
 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) {
   maker_.set_hostname("www.example.org");
-  EXPECT_FALSE(rtt_observer_.rtt_notification_received());
+  EXPECT_FALSE(
+      test_socket_performance_watcher_factory_.rtt_notification_received());
   MockQuicData mock_quic_data;
   mock_quic_data.AddWrite(
       ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
@@ -2310,7 +2317,8 @@
   CreateSession();
   AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
   SendRequestAndExpectQuicResponse("hello!");
-  EXPECT_TRUE(rtt_observer_.rtt_notification_received());
+  EXPECT_TRUE(
+      test_socket_performance_watcher_factory_.rtt_notification_received());
 }
 
 TEST_P(QuicNetworkTransactionTest, QuicUpload) {
diff --git a/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp b/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp
index f239cc1..51d15bd0 100644
--- a/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp
+++ b/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp
@@ -215,9 +215,9 @@
   }
 
   // Convert the signed public key and challenge into base64/ascii.
-  base::Base64Encode(
-      std::string(reinterpret_cast<char*>(signedItem.data), signedItem.len),
-      &result_blob);
+  base::Base64Encode(base::StringPiece(reinterpret_cast<char*>(signedItem.data),
+                                       signedItem.len),
+                     &result_blob);
 
  failure:
   if (!isSuccess) {
diff --git a/net/tools/net_docs/net_docs.py b/net/tools/net_docs/net_docs.py
deleted file mode 100755
index a433a201..0000000
--- a/net/tools/net_docs/net_docs.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-"""Reads, parses, and (optionally) writes as HTML the contents of Markdown
-files passed as arguments. Intended for rendering network stack documentation
-stored as Markdown in the source tree to a human-readable format."""
-
-
-import argparse
-import os.path
-import sys
-
-
-def nth_parent_directory(path, n):
-  for i in range(n):
-    path = os.path.dirname(path)
-  return path
-
-
-# Go up the directory tree from this script and add src/third_party to sys.path
-# so "import markdown" can find it in src/third_party/markdown.
-SCRIPT_PATH = os.path.abspath(__file__)
-SRC_PATH = nth_parent_directory(SCRIPT_PATH, 4)
-THIRD_PARTY_PATH = os.path.join(SRC_PATH, 'third_party')
-sys.path.insert(0, THIRD_PARTY_PATH)
-import markdown
-
-
-def ReadFile(filename):
-  with open(filename, 'r') as file:
-    return file.read()
-
-
-def WriteFile(filename, contents):
-  dir = os.path.dirname(filename)
-  if not os.path.isdir(dir):
-    os.mkdir(dir)
-  with open(filename, 'w') as file:
-    file.write(contents)
-
-
-TEMPLATE = """
-<html>
-  <head>
-    <title>{title}</title>
-  </head>
-  <body>
-    {body}
-  </body>
-</html>"""
-
-
-def FormatPage(markdown_html, title):
-  # TODO(ttuttle): Add a navigation list / table of contents of available
-  # Markdown files, perhaps?
-  return TEMPLATE.format(title=title, body=markdown_html)
-
-
-def ProcessDocs(input_filenames, input_pathname, output_pathname,
-                extensions=None):
-  """Processes a list of Markdown documentation files.
-
-  If input_pathname and output_pathname are specified, outputs HTML files
-  into the corresponding subdirectories of output_pathname. If one or both is
-  not specified, simply ensures the files exist and contain valid Markdown.
-
-  Args:
-      input_filenames: A list of filenames (absolute, or relative to $PWD) of
-          Markdown files to parse and possibly render.
-      input_pathname: The base directory of the input files. (Needed so they
-          can be placed in the same relative path in the output path.)
-      output_pathname: The output directory into which rendered Markdown files
-          go, using that relative path.
-      extensions: a list of Markdown.extensions to apply if any.
-
-  Returns:
-      nothing
-
-  Raises:
-      IOError: if any of the file operations fail (e.g. input_filenames
-          contains a non-existent file).
-  """
-
-  outputting = (input_pathname is not None) and (output_pathname is not None)
-
-  if extensions:
-    markdown_parser = markdown.Markdown(extensions)
-  else:
-    markdown_parser = markdown.Markdown()
-
-  for input_filename in input_filenames:
-    markdown_text = ReadFile(input_filename)
-    markdown_html = markdown_parser.reset().convert(markdown_text)
-    if not outputting:
-      continue
-
-    full_html = FormatPage(markdown_html, title=input_filename)
-    rel_filename = os.path.relpath(input_filename, start=input_pathname)
-    output_filename = os.path.join(output_pathname, rel_filename) + '.html'
-    WriteFile(output_filename, full_html)
-
-
-def main():
-  parser = argparse.ArgumentParser(
-      description='Parse and render Markdown documentation')
-  parser.add_argument('--input_path', default=None,
-      help="Input path for Markdown; required only if output_path set")
-  parser.add_argument('--output_path', default=None,
-      help="Output path for rendered HTML; if unspecified, won't output")
-  parser.add_argument('filenames', nargs=argparse.REMAINDER)
-  args = parser.parse_args()
-
-  extensions = ['markdown.extensions.def_list']
-  ProcessDocs(args.filenames, args.input_path, args.output_path, extensions)
-
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 84ad5a0..620d8b8 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -835,7 +835,15 @@
 #if !defined(DISABLE_FILE_SUPPORT)
 TEST_F(URLRequestTest, FileTest) {
   base::FilePath app_path;
+
+#if defined(OS_ANDROID)
+  // Android devices are not guaranteed to be able to read /proc/self/exe
+  // Use /etc/hosts instead
+  app_path = base::FilePath("/etc/hosts");
+#else
   PathService::Get(base::FILE_EXE, &app_path);
+#endif  // OS_ANDROID
+
   GURL app_url = FilePathToFileURL(app_path);
 
   TestDelegate d;
diff --git a/printing/backend/print_backend_win.cc b/printing/backend/print_backend_win.cc
index a8140d520..b2e7e2b 100644
--- a/printing/backend/print_backend_win.cc
+++ b/printing/backend/print_backend_win.cc
@@ -8,8 +8,9 @@
 #include <stddef.h>
 #include <winspool.h>
 
+#include <memory>
+
 #include "base/memory/free_deleter.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
@@ -184,7 +185,7 @@
                           kLevel, NULL, 0, &bytes_needed, &count_returned);
   if (!bytes_needed)
     return false;
-  scoped_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]);
+  std::unique_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]);
   ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, kLevel,
                      printer_info_buffer.get(), bytes_needed, &bytes_needed,
                      &count_returned);
@@ -233,7 +234,7 @@
 
   PrinterSemanticCapsAndDefaults caps;
 
-  scoped_ptr<DEVMODE, base::FreeDeleter> user_settings =
+  std::unique_ptr<DEVMODE, base::FreeDeleter> user_settings =
       CreateDevMode(printer_handle.Get(), NULL);
   if (user_settings) {
     if (user_settings->dmFields & DM_COLOR)
@@ -321,7 +322,7 @@
     }
     ScopedPrinterHandle printer_handle;
     if (printer_handle.OpenPrinter(printer_name_wide.c_str())) {
-      scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out(
+      std::unique_ptr<DEVMODE, base::FreeDeleter> devmode_out(
           CreateDevMode(printer_handle.Get(), NULL));
       if (!devmode_out)
         return false;
diff --git a/printing/backend/printing_info_win.cc b/printing/backend/printing_info_win.cc
index d5b37cad..ab878c0 100644
--- a/printing/backend/printing_info_win.cc
+++ b/printing/backend/printing_info_win.cc
@@ -18,7 +18,7 @@
   if (size == 0) {
     return NULL;
   }
-  scoped_ptr<uint8_t[]> buffer(new uint8_t[size]);
+  std::unique_ptr<uint8_t[]> buffer(new uint8_t[size]);
   memset(buffer.get(), 0, size);
   if (!::GetPrinterDriver(printer, NULL, level, buffer.get(), size, &size)) {
     return NULL;
@@ -34,7 +34,7 @@
                     ", error = " << GetLastError();
     return NULL;
   }
-  scoped_ptr<uint8_t[]> buffer(new uint8_t[size]);
+  std::unique_ptr<uint8_t[]> buffer(new uint8_t[size]);
   memset(buffer.get(), 0, size);
   if (!::GetPrinter(printer, level, buffer.get(), size, &size)) {
     LOG(WARNING) << "Failed to get PRINTER_INFO_" << level <<
diff --git a/printing/backend/printing_info_win.h b/printing/backend/printing_info_win.h
index 896ed12a..0fd1160 100644
--- a/printing/backend/printing_info_win.h
+++ b/printing/backend/printing_info_win.h
@@ -9,7 +9,8 @@
 #include <stdint.h>
 #include <winspool.h>
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "printing/printing_export.h"
 
 namespace printing {
@@ -34,7 +35,7 @@
   }
 
  private:
-  scoped_ptr<uint8_t[]> buffer_;
+  std::unique_ptr<uint8_t[]> buffer_;
 };
 
 // This class is designed to work with DRIVER_INFO_X structures
@@ -52,7 +53,7 @@
   }
 
  private:
-  scoped_ptr<uint8_t[]> buffer_;
+  std::unique_ptr<uint8_t[]> buffer_;
 };
 
 }  // namespace internal
diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc
index 5b55ea9..c96e123c 100644
--- a/printing/backend/win_helper.cc
+++ b/printing/backend/win_helper.cc
@@ -7,13 +7,13 @@
 #include <stddef.h>
 
 #include <algorithm>
+#include <memory>
 
 #include "base/file_version_info.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/free_deleter.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -370,7 +370,7 @@
     info[0] = base::WideToUTF8(info_6.get()->pName);
 
   if (info_6.get()->pDriverPath) {
-    scoped_ptr<FileVersionInfo> version_info(
+    std::unique_ptr<FileVersionInfo> version_info(
         FileVersionInfo::CreateFileVersionInfo(
             base::FilePath(info_6.get()->pDriverPath)));
     if (version_info.get()) {
@@ -389,10 +389,10 @@
   return driver_info;
 }
 
-scoped_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode(
+std::unique_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode(
     const base::string16& printer_name,
     const std::string& print_ticket) {
-  scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode;
+  std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode;
   printing::ScopedXPSInitializer xps_initializer;
   if (!xps_initializer.initialized()) {
     // TODO(sanjeevr): Handle legacy proxy case (with no prntvpt.dll)
@@ -428,11 +428,11 @@
   return dev_mode;
 }
 
-scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevModeWithColor(
+std::unique_ptr<DEVMODE, base::FreeDeleter> CreateDevModeWithColor(
     HANDLE printer,
     const base::string16& printer_name,
     bool color) {
-  scoped_ptr<DEVMODE, base::FreeDeleter> default_ticket =
+  std::unique_ptr<DEVMODE, base::FreeDeleter> default_ticket =
       CreateDevMode(printer, NULL);
   if (!default_ticket)
     return default_ticket;
@@ -462,7 +462,7 @@
 
   const char* xps_color = color ? kXpsTicketColor : kXpsTicketMonochrome;
   std::string xps_ticket = base::StringPrintf(kXpsTicketTemplate, xps_color);
-  scoped_ptr<DEVMODE, base::FreeDeleter> ticket =
+  std::unique_ptr<DEVMODE, base::FreeDeleter> ticket =
       printing::XpsTicketToDevMode(printer_name, xps_ticket);
   if (!ticket)
     return default_ticket;
@@ -470,24 +470,24 @@
   return ticket;
 }
 
-scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(HANDLE printer,
-                                                     DEVMODE* in) {
+std::unique_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(HANDLE printer,
+                                                          DEVMODE* in) {
   LONG buffer_size = DocumentProperties(
       NULL, printer, const_cast<wchar_t*>(L""), NULL, NULL, 0);
   if (buffer_size < static_cast<int>(sizeof(DEVMODE)))
-    return scoped_ptr<DEVMODE, base::FreeDeleter>();
+    return std::unique_ptr<DEVMODE, base::FreeDeleter>();
 
   // Some drivers request buffers with size smaller than dmSize + dmDriverExtra.
   // crbug.com/421402
   buffer_size *= 2;
 
-  scoped_ptr<DEVMODE, base::FreeDeleter> out(
+  std::unique_ptr<DEVMODE, base::FreeDeleter> out(
       reinterpret_cast<DEVMODE*>(calloc(buffer_size, 1)));
   DWORD flags = (in ? (DM_IN_BUFFER) : 0) | DM_OUT_BUFFER;
   if (DocumentProperties(
           NULL, printer, const_cast<wchar_t*>(L""), out.get(), in, flags) !=
       IDOK) {
-    return scoped_ptr<DEVMODE, base::FreeDeleter>();
+    return std::unique_ptr<DEVMODE, base::FreeDeleter>();
   }
   int size = out->dmSize;
   int extra_size = out->dmDriverExtra;
@@ -495,7 +495,7 @@
   return out;
 }
 
-scoped_ptr<DEVMODE, base::FreeDeleter> PromptDevMode(
+std::unique_ptr<DEVMODE, base::FreeDeleter> PromptDevMode(
     HANDLE printer,
     const base::string16& printer_name,
     DEVMODE* in,
@@ -509,13 +509,13 @@
                          NULL,
                          0);
   if (buffer_size < static_cast<int>(sizeof(DEVMODE)))
-    return scoped_ptr<DEVMODE, base::FreeDeleter>();
+    return std::unique_ptr<DEVMODE, base::FreeDeleter>();
 
   // Some drivers request buffers with size smaller than dmSize + dmDriverExtra.
   // crbug.com/421402
   buffer_size *= 2;
 
-  scoped_ptr<DEVMODE, base::FreeDeleter> out(
+  std::unique_ptr<DEVMODE, base::FreeDeleter> out(
       reinterpret_cast<DEVMODE*>(calloc(buffer_size, 1)));
   DWORD flags = (in ? (DM_IN_BUFFER) : 0) | DM_OUT_BUFFER | DM_IN_PROMPT;
   LONG result = DocumentProperties(window,
@@ -527,7 +527,7 @@
   if (canceled)
     *canceled = (result == IDCANCEL);
   if (result != IDOK)
-    return scoped_ptr<DEVMODE, base::FreeDeleter>();
+    return std::unique_ptr<DEVMODE, base::FreeDeleter>();
   int size = out->dmSize;
   int extra_size = out->dmDriverExtra;
   CHECK_GE(buffer_size, size + extra_size);
diff --git a/printing/backend/win_helper.h b/printing/backend/win_helper.h
index fa39a03..05e0fe9 100644
--- a/printing/backend/win_helper.h
+++ b/printing/backend/win_helper.h
@@ -10,11 +10,11 @@
 #include <winspool.h>
 #include <xpsprint.h>
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
 #include "base/memory/free_deleter.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "base/win/scoped_handle.h"
 #include "printing/printing_export.h"
@@ -172,24 +172,24 @@
 
 PRINTING_EXPORT std::string GetDriverInfo(HANDLE printer);
 
-PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode(
+PRINTING_EXPORT std::unique_ptr<DEVMODE, base::FreeDeleter> XpsTicketToDevMode(
     const base::string16& printer_name,
     const std::string& print_ticket);
 
 // Creates default DEVMODE and sets color option. Some devices need special
 // workaround for color.
-PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevModeWithColor(
-    HANDLE printer,
-    const base::string16& printer_name,
-    bool color);
+PRINTING_EXPORT std::unique_ptr<DEVMODE, base::FreeDeleter>
+CreateDevModeWithColor(HANDLE printer,
+                       const base::string16& printer_name,
+                       bool color);
 
 // Creates new DEVMODE. If |in| is not NULL copy settings from there.
-PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(
+PRINTING_EXPORT std::unique_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(
     HANDLE printer,
     DEVMODE* in);
 
 // Prompts for new DEVMODE. If |in| is not NULL copy settings from there.
-PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> PromptDevMode(
+PRINTING_EXPORT std::unique_ptr<DEVMODE, base::FreeDeleter> PromptDevMode(
     HANDLE printer,
     const base::string16& printer_name,
     DEVMODE* in,
diff --git a/printing/emf_win.cc b/printing/emf_win.cc
index 2e8df76..f00a669c 100644
--- a/printing/emf_win.cc
+++ b/printing/emf_win.cc
@@ -6,11 +6,12 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/win/scoped_gdi_object.h"
 #include "base/win/scoped_hdc.h"
 #include "base/win/scoped_select_object.h"
@@ -360,7 +361,7 @@
       bool play_normally = true;
       res = false;
       HDC hdc = context->hdc;
-      scoped_ptr<SkBitmap> bitmap;
+      std::unique_ptr<SkBitmap> bitmap;
       if (bmih->biCompression == BI_JPEG) {
         if (!DIBFormatNativelySupported(hdc, CHECKJPEGFORMAT, bits,
                                         bmih->biSizeImage)) {
@@ -524,7 +525,7 @@
   return result;
 }
 
-scoped_ptr<Emf> Emf::RasterizeMetafile(int raster_area_in_pixels) const {
+std::unique_ptr<Emf> Emf::RasterizeMetafile(int raster_area_in_pixels) const {
   gfx::Rect page_bounds = GetPageBounds(1);
   gfx::Size page_size(page_bounds.size());
   if (page_size.GetArea() <= 0) {
@@ -544,7 +545,7 @@
   RECT rect = bitmap_rect.ToRECT();
   Playback(bitmap.context(), &rect);
 
-  scoped_ptr<Emf> result(new Emf);
+  std::unique_ptr<Emf> result(new Emf);
   result->Init();
   HDC hdc = result->context();
   DCHECK(hdc);
@@ -572,7 +573,7 @@
   return result;
 }
 
-scoped_ptr<Emf> Emf::RasterizeAlphaBlend() const {
+std::unique_ptr<Emf> Emf::RasterizeAlphaBlend() const {
   gfx::Rect page_bounds = GetPageBounds(1);
   if (page_bounds.size().GetArea() <= 0) {
     NOTREACHED() << "Metafile is empty";
@@ -590,7 +591,7 @@
                  static_cast<float>(-page_bounds.y())};
   ::SetWorldTransform(bitmap.context(), &xform);
 
-  scoped_ptr<Emf> result(new Emf);
+  std::unique_ptr<Emf> result(new Emf);
   result->Init();
   HDC hdc = result->context();
   DCHECK(hdc);
diff --git a/printing/emf_win.h b/printing/emf_win.h
index da14f1c..653fe59 100644
--- a/printing/emf_win.h
+++ b/printing/emf_win.h
@@ -5,16 +5,16 @@
 #ifndef PRINTING_EMF_WIN_H_
 #define PRINTING_EMF_WIN_H_
 
-#include <windows.h>
 #include <stddef.h>
 #include <stdint.h>
+#include <windows.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "printing/metafile.h"
 
 namespace base {
@@ -88,11 +88,11 @@
 
   // Returns new metafile with only bitmap created by playback of the current
   // metafile. Returns NULL if fails.
-  scoped_ptr<Emf> RasterizeMetafile(int raster_area_in_pixels) const;
+  std::unique_ptr<Emf> RasterizeMetafile(int raster_area_in_pixels) const;
 
   // Returns new metafile where AlphaBlend replaced by bitmaps. Returns NULL
   // if fails.
-  scoped_ptr<Emf> RasterizeAlphaBlend() const;
+  std::unique_ptr<Emf> RasterizeAlphaBlend() const;
 
  private:
   FRIEND_TEST_ALL_PREFIXES(EmfTest, DC);
diff --git a/printing/emf_win_unittest.cc b/printing/emf_win_unittest.cc
index 316defc..88ad730 100644
--- a/printing/emf_win_unittest.cc
+++ b/printing/emf_win_unittest.cc
@@ -9,12 +9,12 @@
 #include <wingdi.h>
 #include <winspool.h>
 
+#include <memory>
 #include <string>
 
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
 #include "base/win/scoped_hdc.h"
 #include "printing/printing_context.h"
@@ -88,7 +88,7 @@
   settings.set_device_name(L"UnitTest Printer");
 
   // Initialize it.
-  scoped_ptr<PrintingContext> context(PrintingContext::Create(this));
+  std::unique_ptr<PrintingContext> context(PrintingContext::Create(this));
   EXPECT_EQ(context->InitWithSettings(settings), PrintingContext::OK);
 
   base::FilePath emf_file;
@@ -218,7 +218,7 @@
   }
   EXPECT_TRUE(emf.FinishDocument());
 
-  scoped_ptr<Emf> raster(emf.RasterizeMetafile(1));
+  std::unique_ptr<Emf> raster(emf.RasterizeMetafile(1));
   // Just 1px bitmap but should be stretched to the same bounds.
   EXPECT_EQ(emf.GetPageBounds(1), raster->GetPageBounds(1));
 
diff --git a/printing/pdf_metafile_skia.cc b/printing/pdf_metafile_skia.cc
index 104970e..d3679c46 100644
--- a/printing/pdf_metafile_skia.cc
+++ b/printing/pdf_metafile_skia.cc
@@ -58,7 +58,7 @@
                         void* buffer,
                         size_t size) {
   // Calling duplicate() keeps original asset state unchanged.
-  scoped_ptr<SkStreamAsset> assetCopy(asset->duplicate());
+  std::unique_ptr<SkStreamAsset> assetCopy(asset->duplicate());
   size_t length = assetCopy->getLength();
   if (length > size)
     return false;
@@ -88,7 +88,7 @@
   SkPictureRecorder recorder_;  // Current recording
 
   std::vector<Page> pages_;
-  scoped_ptr<SkStreamAsset> pdf_data_;
+  std::unique_ptr<SkStreamAsset> pdf_data_;
 
 #if defined(OS_MACOSX)
   PdfMetafileCg pdf_cg_;
@@ -257,7 +257,7 @@
     return false;
 
   // Calling duplicate() keeps original asset state unchanged.
-  scoped_ptr<SkStreamAsset> asset(data_->pdf_data_->duplicate());
+  std::unique_ptr<SkStreamAsset> asset(data_->pdf_data_->duplicate());
 
   const size_t maximum_buffer_size = 1024 * 1024;
   std::vector<char> buffer(std::min(maximum_buffer_size, asset->getLength()));
@@ -296,10 +296,10 @@
 PdfMetafileSkia::PdfMetafileSkia() : data_(new PdfMetafileSkiaData) {
 }
 
-scoped_ptr<PdfMetafileSkia> PdfMetafileSkia::GetMetafileForCurrentPage() {
+std::unique_ptr<PdfMetafileSkia> PdfMetafileSkia::GetMetafileForCurrentPage() {
   // If we only ever need the metafile for the last page, should we
   // only keep a handle on one SkPicture?
-  scoped_ptr<PdfMetafileSkia> metafile(new PdfMetafileSkia);
+  std::unique_ptr<PdfMetafileSkia> metafile(new PdfMetafileSkia);
 
   if (data_->pages_.size() == 0)
     return metafile;
diff --git a/printing/pdf_metafile_skia.h b/printing/pdf_metafile_skia.h
index dffcc3e..47942eff 100644
--- a/printing/pdf_metafile_skia.h
+++ b/printing/pdf_metafile_skia.h
@@ -7,8 +7,9 @@
 
 #include <stdint.h>
 
+#include <memory>
+
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "build/build_config.h"
 #include "printing/metafile.h"
 #include "skia/ext/platform_canvas.h"
@@ -70,7 +71,7 @@
 #endif  // if defined(OS_CHROMEOS) || defined(OS_ANDROID)
 
   // Return a new metafile containing just the current page in draft mode.
-  scoped_ptr<PdfMetafileSkia> GetMetafileForCurrentPage();
+  std::unique_ptr<PdfMetafileSkia> GetMetafileForCurrentPage();
 
   // This method calls StartPage and then returns an appropriate
   // PlatformCanvas implementation bound to the context created by
@@ -83,7 +84,7 @@
                                       const float& scale_factor);
 
  private:
-  scoped_ptr<PdfMetafileSkiaData> data_;
+  std::unique_ptr<PdfMetafileSkiaData> data_;
 
   DISALLOW_COPY_AND_ASSIGN(PdfMetafileSkia);
 };
diff --git a/printing/printed_document.cc b/printing/printed_document.cc
index c4f2fb7..f77b135 100644
--- a/printing/printed_document.cc
+++ b/printing/printed_document.cc
@@ -110,7 +110,7 @@
 }
 
 void PrintedDocument::SetPage(int page_number,
-                              scoped_ptr<MetafilePlayer> metafile,
+                              std::unique_ptr<MetafilePlayer> metafile,
 #if defined(OS_WIN)
                               float shrink,
 #endif  // OS_WIN
diff --git a/printing/printed_document.h b/printing/printed_document.h
index 2231e9a..6231d2ee 100644
--- a/printing/printed_document.h
+++ b/printing/printed_document.h
@@ -6,11 +6,11 @@
 #define PRINTING_PRINTED_DOCUMENT_H_
 
 #include <map>
+#include <memory>
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "base/synchronization/lock.h"
 #include "printing/print_settings.h"
@@ -47,7 +47,7 @@
   // Sets a page's data. 0-based. Takes metafile ownership.
   // Note: locks for a short amount of time.
   void SetPage(int page_number,
-               scoped_ptr<MetafilePlayer> metafile,
+               std::unique_ptr<MetafilePlayer> metafile,
 #if defined(OS_WIN)
                float shrink,
 #endif  // OS_WIN
diff --git a/printing/printed_page.cc b/printing/printed_page.cc
index 2c3e7e8..d021126 100644
--- a/printing/printed_page.cc
+++ b/printing/printed_page.cc
@@ -9,7 +9,7 @@
 namespace printing {
 
 PrintedPage::PrintedPage(int page_number,
-                         scoped_ptr<MetafilePlayer> metafile,
+                         std::unique_ptr<MetafilePlayer> metafile,
                          const gfx::Size& page_size,
                          const gfx::Rect& page_content_rect)
     : page_number_(page_number),
diff --git a/printing/printed_page.h b/printing/printed_page.h
index 550d992..5ab1c17 100644
--- a/printing/printed_page.h
+++ b/printing/printed_page.h
@@ -5,9 +5,10 @@
 #ifndef PRINTING_PRINTED_PAGE_H_
 #define PRINTING_PRINTED_PAGE_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
 #include "printing/metafile.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
@@ -24,7 +25,7 @@
     : public base::RefCountedThreadSafe<PrintedPage> {
  public:
   PrintedPage(int page_number,
-              scoped_ptr<MetafilePlayer> metafile,
+              std::unique_ptr<MetafilePlayer> metafile,
               const gfx::Size& page_size,
               const gfx::Rect& page_content_rect);
 
@@ -54,7 +55,7 @@
   const int page_number_;
 
   // Actual paint data.
-  const scoped_ptr<MetafilePlayer> metafile_;
+  const std::unique_ptr<MetafilePlayer> metafile_;
 
 #if defined(OS_WIN)
   // Shrink done in comparison to desired_dpi.
diff --git a/printing/printed_page_unittest.cc b/printing/printed_page_unittest.cc
index 795afe48..0a78650 100644
--- a/printing/printed_page_unittest.cc
+++ b/printing/printed_page_unittest.cc
@@ -12,10 +12,8 @@
   gfx::Rect page_content;
 
   // No centering.
-  page = new PrintedPage(1,
-                         scoped_ptr<MetafilePlayer>(),
-                         gfx::Size(1200, 1200),
-                         gfx::Rect(0, 0, 400, 1100));
+  page = new PrintedPage(1, std::unique_ptr<MetafilePlayer>(),
+                         gfx::Size(1200, 1200), gfx::Rect(0, 0, 400, 1100));
   page->GetCenteredPageContentRect(gfx::Size(1000, 1000), &page_content);
   EXPECT_EQ(0, page_content.x());
   EXPECT_EQ(0, page_content.y());
@@ -23,10 +21,8 @@
   EXPECT_EQ(1100, page_content.height());
 
   // X centered.
-  page = new PrintedPage(1,
-                         scoped_ptr<MetafilePlayer>(),
-                         gfx::Size(500, 1200),
-                         gfx::Rect(0, 0, 400, 1100));
+  page = new PrintedPage(1, std::unique_ptr<MetafilePlayer>(),
+                         gfx::Size(500, 1200), gfx::Rect(0, 0, 400, 1100));
   page->GetCenteredPageContentRect(gfx::Size(1000, 1000), &page_content);
   EXPECT_EQ(250, page_content.x());
   EXPECT_EQ(0, page_content.y());
@@ -34,10 +30,8 @@
   EXPECT_EQ(1100, page_content.height());
 
   // Y centered.
-  page = new PrintedPage(1,
-                         scoped_ptr<MetafilePlayer>(),
-                         gfx::Size(1200, 500),
-                         gfx::Rect(0, 0, 400, 1100));
+  page = new PrintedPage(1, std::unique_ptr<MetafilePlayer>(),
+                         gfx::Size(1200, 500), gfx::Rect(0, 0, 400, 1100));
   page->GetCenteredPageContentRect(gfx::Size(1000, 1000), &page_content);
   EXPECT_EQ(0, page_content.x());
   EXPECT_EQ(250, page_content.y());
@@ -45,10 +39,8 @@
   EXPECT_EQ(1100, page_content.height());
 
   // Both X and Y centered.
-  page = new PrintedPage(1,
-                         scoped_ptr<MetafilePlayer>(),
-                         gfx::Size(500, 500),
-                         gfx::Rect(0, 0, 400, 1100));
+  page = new PrintedPage(1, std::unique_ptr<MetafilePlayer>(),
+                         gfx::Size(500, 500), gfx::Rect(0, 0, 400, 1100));
   page->GetCenteredPageContentRect(gfx::Size(1000, 1000), &page_content);
   EXPECT_EQ(250, page_content.x());
   EXPECT_EQ(250, page_content.y());
@@ -59,10 +51,8 @@
 #if defined(OS_WIN)
 TEST(PrintedPageTest, Shrink) {
   scoped_refptr<PrintedPage> page =
-      new PrintedPage(1,
-                      scoped_ptr<MetafilePlayer>(),
-                      gfx::Size(1200, 1200),
-                      gfx::Rect(0, 0, 400, 1100));
+      new PrintedPage(1, std::unique_ptr<MetafilePlayer>(),
+                      gfx::Size(1200, 1200), gfx::Rect(0, 0, 400, 1100));
   EXPECT_EQ(0.0f, page->shrink_factor());
   page->set_shrink_factor(0.2f);
   EXPECT_EQ(0.2f, page->shrink_factor());
diff --git a/printing/printing_context.cc b/printing/printing_context.cc
index 2e080397..5187cee 100644
--- a/printing/printing_context.cc
+++ b/printing/printing_context.cc
@@ -49,7 +49,8 @@
 }
 
 PrintingContext::Result PrintingContext::UsePdfSettings() {
-  scoped_ptr<base::DictionaryValue> pdf_settings(new base::DictionaryValue);
+  std::unique_ptr<base::DictionaryValue> pdf_settings(
+      new base::DictionaryValue);
   pdf_settings->SetBoolean(kSettingHeaderFooterEnabled, false);
   pdf_settings->SetBoolean(kSettingShouldPrintBackgrounds, false);
   pdf_settings->SetBoolean(kSettingShouldPrintSelectionOnly, false);
diff --git a/printing/printing_context.h b/printing/printing_context.h
index be671ba..9f963848 100644
--- a/printing/printing_context.h
+++ b/printing/printing_context.h
@@ -5,11 +5,11 @@
 #ifndef PRINTING_PRINTING_CONTEXT_H_
 #define PRINTING_PRINTING_CONTEXT_H_
 
+#include <memory>
 #include <string>
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "printing/print_settings.h"
 #include "ui/gfx/native_widget_types.h"
@@ -118,7 +118,7 @@
 
   // Creates an instance of this object. Implementers of this interface should
   // implement this method to create an object of their implementation.
-  static scoped_ptr<PrintingContext> Create(Delegate* delegate);
+  static std::unique_ptr<PrintingContext> Create(Delegate* delegate);
 
   void set_margin_type(MarginType type);
 
diff --git a/printing/printing_context_android.cc b/printing/printing_context_android.cc
index 3fabef2..88d76571 100644
--- a/printing/printing_context_android.cc
+++ b/printing/printing_context_android.cc
@@ -12,6 +12,7 @@
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
 #include "jni/PrintingContext_jni.h"
@@ -63,8 +64,8 @@
 namespace printing {
 
 // static
-scoped_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
-  return make_scoped_ptr<PrintingContext>(new PrintingContextAndroid(delegate));
+std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
+  return base::WrapUnique(new PrintingContextAndroid(delegate));
 }
 
 // static
diff --git a/printing/printing_context_linux.cc b/printing/printing_context_linux.cc
index 83d321ec..f65f0ae 100644
--- a/printing/printing_context_linux.cc
+++ b/printing/printing_context_linux.cc
@@ -5,6 +5,7 @@
 #include "printing/printing_context_linux.h"
 
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "printing/metafile.h"
 #include "printing/print_dialog_gtk_interface.h"
@@ -27,8 +28,8 @@
 namespace printing {
 
 // static
-scoped_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
-  return make_scoped_ptr<PrintingContext>(new PrintingContextLinux(delegate));
+std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
+  return base::WrapUnique(new PrintingContextLinux(delegate));
 }
 
 PrintingContextLinux::PrintingContextLinux(Delegate* delegate)
diff --git a/printing/printing_context_mac.mm b/printing/printing_context_mac.mm
index 36badc3..97a04a6 100644
--- a/printing/printing_context_mac.mm
+++ b/printing/printing_context_mac.mm
@@ -12,6 +12,7 @@
 #include "base/logging.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_nsautorelease_pool.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
@@ -66,8 +67,8 @@
 }  // namespace
 
 // static
-scoped_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
-  return make_scoped_ptr<PrintingContext>(new PrintingContextMac(delegate));
+std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
+  return base::WrapUnique(new PrintingContextMac(delegate));
 }
 
 PrintingContextMac::PrintingContextMac(Delegate* delegate)
diff --git a/printing/printing_context_no_system_dialog.cc b/printing/printing_context_no_system_dialog.cc
index ec8aaaf..5f8db1a 100644
--- a/printing/printing_context_no_system_dialog.cc
+++ b/printing/printing_context_no_system_dialog.cc
@@ -8,6 +8,7 @@
 #include <unicode/ulocdata.h>
 
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "printing/metafile.h"
 #include "printing/print_job_constants.h"
@@ -16,9 +17,8 @@
 namespace printing {
 
 // static
-scoped_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
-  return make_scoped_ptr<PrintingContext>(
-      new PrintingContextNoSystemDialog(delegate));
+std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
+  return base::WrapUnique(new PrintingContextNoSystemDialog(delegate));
 }
 
 PrintingContextNoSystemDialog::PrintingContextNoSystemDialog(Delegate* delegate)
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index ffd2bc0..4ecb814 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/memory/free_deleter.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "printing/backend/print_backend.h"
@@ -32,12 +33,11 @@
 }  // namespace
 
 // static
-scoped_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
+std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
 #if defined(ENABLE_BASIC_PRINTING)
-  return make_scoped_ptr<PrintingContext>(
-      new PrintingContextSytemDialogWin(delegate));
+  return base::WrapUnique(new PrintingContextSytemDialogWin(delegate));
 #else   // ENABLE_BASIC_PRINTING
-  return make_scoped_ptr<PrintingContext>(new PrintingContextWin(delegate));
+  return base::WrapUnique(new PrintingContextWin(delegate));
 #endif  // EENABLE_BASIC_PRINTING
 }
 
@@ -66,7 +66,7 @@
   if (!default_printer.empty()) {
     ScopedPrinterHandle printer;
     if (printer.OpenPrinter(default_printer.c_str())) {
-      scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
+      std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode =
           CreateDevMode(printer.Get(), NULL);
       if (InitializeSettings(default_printer, dev_mode.get()) == OK)
         return OK;
@@ -82,7 +82,7 @@
                        NULL, 2, NULL, 0, &bytes_needed, &count_returned);
   if (bytes_needed) {
     DCHECK_GE(bytes_needed, count_returned * sizeof(PRINTER_INFO_2));
-    scoped_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]);
+    std::unique_ptr<BYTE[]> printer_info_buffer(new BYTE[bytes_needed]);
     BOOL ret = ::EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS,
                               NULL, 2, printer_info_buffer.get(),
                               bytes_needed, &bytes_needed,
@@ -96,7 +96,7 @@
         ScopedPrinterHandle printer;
         if (!printer.OpenPrinter(info_2->pPrinterName))
           continue;
-        scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
+        std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode =
             CreateDevMode(printer.Get(), NULL);
         if (InitializeSettings(info_2->pPrinterName, dev_mode.get()) == OK)
           return OK;
@@ -152,7 +152,7 @@
 
   // Make printer changes local to Chrome.
   // See MSDN documentation regarding DocumentProperties.
-  scoped_ptr<DEVMODE, base::FreeDeleter> scoped_dev_mode =
+  std::unique_ptr<DEVMODE, base::FreeDeleter> scoped_dev_mode =
       CreateDevModeWithColor(printer.Get(), settings_.device_name(),
                              settings_.color() != GRAY);
   if (!scoped_dev_mode)
@@ -229,7 +229,7 @@
   if (!printer.OpenPrinter(settings_.device_name().c_str()))
     return FAILED;
 
-  scoped_ptr<DEVMODE, base::FreeDeleter> dev_mode =
+  std::unique_ptr<DEVMODE, base::FreeDeleter> dev_mode =
       CreateDevMode(printer.Get(), NULL);
 
   return InitializeSettings(settings_.device_name(), dev_mode.get());
diff --git a/printing/printing_context_win.h b/printing/printing_context_win.h
index 2d444cce..a4020665 100644
--- a/printing/printing_context_win.h
+++ b/printing/printing_context_win.h
@@ -5,10 +5,10 @@
 #ifndef PRINTING_PRINTING_CONTEXT_WIN_H_
 #define PRINTING_PRINTING_CONTEXT_WIN_H_
 
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
 #include "printing/printing_context.h"
 #include "ui/gfx/native_widget_types.h"
 
diff --git a/printing/printing_context_win_unittest.cc b/printing/printing_context_win_unittest.cc
index b71442b..fc6fee0c 100644
--- a/printing/printing_context_win_unittest.cc
+++ b/printing/printing_context_win_unittest.cc
@@ -162,7 +162,7 @@
   PrintSettings settings;
   settings.set_device_name(GetDefaultPrinter());
   // Initialize it.
-  scoped_ptr<PrintingContext> context(PrintingContext::Create(this));
+  std::unique_ptr<PrintingContext> context(PrintingContext::Create(this));
   EXPECT_EQ(PrintingContext::OK, context->InitWithSettings(settings));
 
   // The print may lie to use and may not support world transformation.
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc
index acb9603..a3301cf 100644
--- a/remoting/host/client_session.cc
+++ b/remoting/host/client_session.cc
@@ -80,9 +80,6 @@
       max_duration_(max_duration),
       audio_task_runner_(audio_task_runner),
       pairing_registry_(pairing_registry),
-      is_authenticated_(false),
-      pause_video_(false),
-      lossless_video_encode_(false),
       // Note that |lossless_video_color_| defaults to true, but actually only
       // controls VP9 video stream color quality.
       lossless_video_color_(!base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -198,8 +195,6 @@
 
   VLOG(1) << "Client capabilities: " << *client_capabilities_;
 
-  // Calculate the set of capabilities enabled by both client and host and
-  // pass it to the desktop environment if it is available.
   desktop_environment_->SetCapabilities(capabilities_);
 }
 
@@ -296,11 +291,34 @@
   clipboard_echo_filter_.set_client_stub(connection_->client_stub());
 }
 
+void ClientSession::CreateVideoStreams(
+    protocol::ConnectionToClient* connection) {
+  DCHECK(CalledOnValidThread());
+  DCHECK_EQ(connection_.get(), connection);
+
+  // Create a VideoStream to pump frames from the capturer to the client.
+  video_stream_ = connection_->StartVideoStream(
+      desktop_environment_->CreateVideoCapturer());
+
+  video_stream_->SetSizeCallback(
+      base::Bind(&ClientSession::OnScreenSizeChanged, base::Unretained(this)));
+
+  // Apply video-control parameters to the new stream.
+  video_stream_->SetLosslessEncode(lossless_video_encode_);
+  video_stream_->SetLosslessColor(lossless_video_color_);
+
+  // Pause capturing if necessary.
+  video_stream_->Pause(pause_video_);
+}
+
 void ClientSession::OnConnectionChannelsConnected(
     protocol::ConnectionToClient* connection) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(connection_.get(), connection);
 
+  DCHECK(!channels_connected_);
+  channels_connected_ = true;
+
   // Negotiate capabilities with the client.
   VLOG(1) << "Host capabilities: " << host_capabilities_;
   protocol::Capabilities capabilities;
@@ -316,20 +334,6 @@
       new MouseShapePump(desktop_environment_->CreateMouseCursorMonitor(),
                          connection_->client_stub()));
 
-  // Create a VideoStream to pump frames from the capturer to the client.
-  video_stream_ = connection_->StartVideoStream(
-      desktop_environment_->CreateVideoCapturer());
-
-  video_stream_->SetSizeCallback(
-      base::Bind(&ClientSession::OnScreenSizeChanged, base::Unretained(this)));
-
-  // Apply video-control parameters to the new stream.
-  video_stream_->SetLosslessEncode(lossless_video_encode_);
-  video_stream_->SetLosslessColor(lossless_video_color_);
-
-  // Pause capturing if necessary.
-  video_stream_->Pause(pause_video_);
-
   // Create an AudioPump if audio is enabled, to pump audio samples.
   if (connection_->session()->config().is_audio_enabled()) {
     std::unique_ptr<AudioEncoder> audio_encoder =
@@ -339,6 +343,11 @@
         std::move(audio_encoder), connection_->audio_stub()));
   }
 
+  if (pending_video_layout_message_) {
+    connection_->client_stub()->SetVideoLayout(*pending_video_layout_message_);
+    pending_video_layout_message_.reset();
+  }
+
   // Notify the event handler that all our channels are now connected.
   event_handler_->OnSessionChannelsConnected(this);
 }
@@ -449,7 +458,15 @@
     video_track->set_height(size.height() * kDefaultDpi / dpi.y());
     video_track->set_x_dpi(dpi.x());
     video_track->set_y_dpi(dpi.y());
-    connection_->client_stub()->SetVideoLayout(layout);
+
+    // VideoLayout can be sent only after the control channel is connected.
+    // TODO(sergeyu): Change client_stub() implementation to allow queuing while
+    // connection is being established.
+    if (channels_connected_) {
+      connection_->client_stub()->SetVideoLayout(layout);
+    } else {
+      pending_video_layout_message_.reset(new protocol::VideoLayout(layout));
+    }
   }
 }
 
diff --git a/remoting/host/client_session.h b/remoting/host/client_session.h
index a42e91e..8bc2e09 100644
--- a/remoting/host/client_session.h
+++ b/remoting/host/client_session.h
@@ -44,13 +44,16 @@
 class MouseShapePump;
 class ScreenControls;
 
+namespace protocol {
+class VideoLayout;
+}  // namespace protocol
+
 // A ClientSession keeps a reference to a connection to a client, and maintains
 // per-client state.
-class ClientSession
-    : public base::NonThreadSafe,
-      public protocol::HostStub,
-      public protocol::ConnectionToClient::EventHandler,
-      public ClientSessionControl {
+class ClientSession : public base::NonThreadSafe,
+                      public protocol::HostStub,
+                      public protocol::ConnectionToClient::EventHandler,
+                      public ClientSessionControl {
  public:
   // Callback interface for passing events to the ChromotingHost.
   class EventHandler {
@@ -112,6 +115,7 @@
       protocol::ConnectionToClient* connection) override;
   void OnConnectionAuthenticated(
       protocol::ConnectionToClient* connection) override;
+  void CreateVideoStreams(protocol::ConnectionToClient* connection) override;
   void OnConnectionChannelsConnected(
       protocol::ConnectionToClient* connection) override;
   void OnConnectionClosed(protocol::ConnectionToClient* connection,
@@ -219,12 +223,19 @@
   std::unique_ptr<HostExtensionSessionManager> extension_manager_;
 
   // Set to true if the client was authenticated successfully.
-  bool is_authenticated_;
+  bool is_authenticated_ = false;
+
+  // Set to true after all data channels have been connected.
+  bool channels_connected_ = false;
 
   // Used to store video channel pause & lossless parameters.
-  bool pause_video_;
-  bool lossless_video_encode_;
-  bool lossless_video_color_;
+  bool pause_video_ = false;
+  bool lossless_video_encode_ = false;
+  bool lossless_video_color_ = false;
+
+  // VideoLayout is sent only after the control channel is connected. Until
+  // then it's stored in |pending_video_layout_message_|.
+  std::unique_ptr<protocol::VideoLayout> pending_video_layout_message_;
 
   // Used to disable callbacks to |this| once DisconnectSession() has been
   // called.
diff --git a/remoting/host/client_session_unittest.cc b/remoting/host/client_session_unittest.cc
index 3ef301a..b5c2d1bd 100644
--- a/remoting/host/client_session_unittest.cc
+++ b/remoting/host/client_session_unittest.cc
@@ -205,6 +205,7 @@
   EXPECT_TRUE(connection_->clipboard_stub());
   EXPECT_TRUE(connection_->input_stub());
 
+  client_session_->CreateVideoStreams(client_session_->connection());
   client_session_->OnConnectionChannelsConnected(client_session_->connection());
 }
 
diff --git a/remoting/protocol/connection_to_client.h b/remoting/protocol/connection_to_client.h
index acb48b5..30216ba8 100644
--- a/remoting/protocol/connection_to_client.h
+++ b/remoting/protocol/connection_to_client.h
@@ -41,6 +41,10 @@
     // Called when the network connection is authenticated.
     virtual void OnConnectionAuthenticated(ConnectionToClient* connection) = 0;
 
+    // Called to request creation of video streams. May be called before or
+    // after OnConnectionChannelsConnected().
+    virtual void CreateVideoStreams(ConnectionToClient* connection) = 0;
+
     // Called when the network connection is authenticated and all
     // channels are connected.
     virtual void OnConnectionChannelsConnected(
diff --git a/remoting/protocol/ice_connection_to_client.cc b/remoting/protocol/ice_connection_to_client.cc
index 2172ff4..45af7f5 100644
--- a/remoting/protocol/ice_connection_to_client.cc
+++ b/remoting/protocol/ice_connection_to_client.cc
@@ -206,6 +206,7 @@
     return;
   }
   event_handler_->OnConnectionChannelsConnected(this);
+  event_handler_->CreateVideoStreams(this);
 }
 
 void IceConnectionToClient::CloseChannels() {
diff --git a/remoting/protocol/protocol_mock_objects.h b/remoting/protocol/protocol_mock_objects.h
index 8d6a988..4d03025 100644
--- a/remoting/protocol/protocol_mock_objects.h
+++ b/remoting/protocol/protocol_mock_objects.h
@@ -43,6 +43,7 @@
   MOCK_METHOD1(OnConnectionAuthenticating,
                void(ConnectionToClient* connection));
   MOCK_METHOD1(OnConnectionAuthenticated, void(ConnectionToClient* connection));
+  MOCK_METHOD1(CreateVideoStreams, void(ConnectionToClient* connection));
   MOCK_METHOD1(OnConnectionChannelsConnected,
                void(ConnectionToClient* connection));
   MOCK_METHOD2(OnConnectionClosed,
diff --git a/remoting/protocol/webrtc_connection_to_client.cc b/remoting/protocol/webrtc_connection_to_client.cc
index 0d0ed47..733fd4293 100644
--- a/remoting/protocol/webrtc_connection_to_client.cc
+++ b/remoting/protocol/webrtc_connection_to_client.cc
@@ -42,7 +42,8 @@
                  this),
       session_(std::move(session)),
       control_dispatcher_(new HostControlDispatcher()),
-      event_dispatcher_(new HostEventDispatcher()) {
+      event_dispatcher_(new HostEventDispatcher()),
+      weak_factory_(this) {
   session_->SetEventHandler(this);
   session_->SetTransport(&transport_);
 }
@@ -81,7 +82,6 @@
     return nullptr;
   }
   return std::move(stream);
-
 }
 
 AudioStub* WebrtcConnectionToClient::audio_stub() {
@@ -122,12 +122,22 @@
     case Session::ACCEPTED:
       // Don't care about these events.
       break;
+
     case Session::AUTHENTICATING:
       event_handler_->OnConnectionAuthenticating(this);
       break;
-    case Session::AUTHENTICATED:
+
+    case Session::AUTHENTICATED: {
+      base::WeakPtr<WebrtcConnectionToClient> self = weak_factory_.GetWeakPtr();
       event_handler_->OnConnectionAuthenticated(this);
+
+      // OnConnectionAuthenticated() call above may result in the connection
+      // being torn down.
+      if (self)
+        event_handler_->CreateVideoStreams(this);
       break;
+    }
+
     case Session::CLOSED:
     case Session::FAILED:
       control_dispatcher_.reset();
diff --git a/remoting/protocol/webrtc_connection_to_client.h b/remoting/protocol/webrtc_connection_to_client.h
index 34f51ba..d5ce65f 100644
--- a/remoting/protocol/webrtc_connection_to_client.h
+++ b/remoting/protocol/webrtc_connection_to_client.h
@@ -11,6 +11,7 @@
 #include <string>
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "remoting/protocol/channel_dispatcher_base.h"
 #include "remoting/protocol/connection_to_client.h"
@@ -75,6 +76,8 @@
   std::unique_ptr<HostControlDispatcher> control_dispatcher_;
   std::unique_ptr<HostEventDispatcher> event_dispatcher_;
 
+  base::WeakPtrFactory<WebrtcConnectionToClient> weak_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(WebrtcConnectionToClient);
 };
 
diff --git a/remoting/protocol/webrtc_video_capturer_adapter.cc b/remoting/protocol/webrtc_video_capturer_adapter.cc
index 0d5dec0..23df1d9 100644
--- a/remoting/protocol/webrtc_video_capturer_adapter.cc
+++ b/remoting/protocol/webrtc_video_capturer_adapter.cc
@@ -226,7 +226,7 @@
 
   cricket::WebRtcVideoFrame video_frame(
       yuv_frame_, (base::TimeTicks::Now() - base::TimeTicks()) /
-                      base::TimeDelta::FromMicroseconds(1),
+                      base::TimeDelta::FromMicroseconds(1) * 1000,
       webrtc::kVideoRotation_0);
 
   OnFrame(this, &video_frame);
diff --git a/sync/BUILD.gn b/sync/BUILD.gn
index 2946c66..1583652 100644
--- a/sync/BUILD.gn
+++ b/sync/BUILD.gn
@@ -274,7 +274,6 @@
     "internal_api/public/simple_metadata_change_list.h",
     "internal_api/public/sync_auth_provider.h",
     "internal_api/public/sync_context.h",
-    "internal_api/public/sync_context_proxy.h",
     "internal_api/public/sync_encryption_handler.cc",
     "internal_api/public/sync_encryption_handler.h",
     "internal_api/public/sync_manager.cc",
@@ -301,8 +300,7 @@
     "internal_api/shared_model_type_processor.cc",
     "internal_api/sync_context.cc",
     "internal_api/sync_context_proxy.cc",
-    "internal_api/sync_context_proxy_impl.cc",
-    "internal_api/sync_context_proxy_impl.h",
+    "internal_api/sync_context_proxy.h",
     "internal_api/sync_db_util.cc",
     "internal_api/sync_encryption_handler_impl.cc",
     "internal_api/sync_encryption_handler_impl.h",
@@ -549,17 +547,17 @@
   testonly = true
   sources = [
     "internal_api/public/test/fake_model_type_service.h",
+    "internal_api/public/test/fake_sync_context.h",
     "internal_api/public/test/fake_sync_manager.h",
     "internal_api/public/test/model_type_store_test_util.h",
-    "internal_api/public/test/null_sync_context_proxy.h",
     "internal_api/public/test/sync_manager_factory_for_profile_sync_test.h",
     "internal_api/public/test/test_entry_factory.h",
     "internal_api/public/test/test_internal_components_factory.h",
     "internal_api/public/test/test_user_share.h",
     "internal_api/test/fake_model_type_service.cc",
+    "internal_api/test/fake_sync_context.cc",
     "internal_api/test/fake_sync_manager.cc",
     "internal_api/test/model_type_store_test_util.cc",
-    "internal_api/test/null_sync_context_proxy.cc",
     "internal_api/test/sync_manager_factory_for_profile_sync_test.cc",
     "internal_api/test/sync_manager_for_profile_sync_test.cc",
     "internal_api/test/sync_manager_for_profile_sync_test.h",
@@ -660,7 +658,7 @@
     "internal_api/public/util/proto_value_ptr_unittest.cc",
     "internal_api/public/util/weak_handle_unittest.cc",
     "internal_api/shared_model_type_processor_unittest.cc",
-    "internal_api/sync_context_proxy_impl_unittest.cc",
+    "internal_api/sync_context_proxy_unittest.cc",
     "internal_api/sync_encryption_handler_impl_unittest.cc",
     "internal_api/sync_manager_impl_unittest.cc",
     "internal_api/syncapi_server_connection_manager_unittest.cc",
diff --git a/sync/internal_api/public/sync_context.h b/sync/internal_api/public/sync_context.h
index 0d522f91..3f080e4 100644
--- a/sync/internal_api/public/sync_context.h
+++ b/sync/internal_api/public/sync_context.h
@@ -11,36 +11,33 @@
 namespace syncer_v2 {
 struct ActivationContext;
 
-// An interface of the core parts of sync.
+// An interface of the core parts of sync for USS data types.
 //
 // In theory, this is the component that provides off-thread sync types with
 // functionality to schedule and execute communication with the sync server.  In
-// practice, this class delegates most of the responsibilty of implemeting this
+// practice, this class delegates most of the responsibility of implemeting this
 // functionality to other classes, and most of the interface is exposed not
-// directly here but instead through a per-ModelType class that this class helps
-// instantiate.
+// directly here but instead through a per-ModelType worker that this class
+// helps instantiate.
 class SYNC_EXPORT SyncContext {
  public:
   SyncContext();
   virtual ~SyncContext();
 
-  // Initializes the connection between the sync context on the sync thread and
-  // a proxy for the specified non-blocking sync type that lives on the data
-  // type's thread.
-  virtual void ConnectSyncTypeToWorker(
+  // Connect a worker on the sync thread and |type|'s processor on the model
+  // thread. Note that in production |activation_context| actually owns a
+  // processor proxy that forwards calls to the model thread and is safe to call
+  // from the sync thread.
+  virtual void ConnectType(
       syncer::ModelType type,
       scoped_ptr<ActivationContext> activation_context) = 0;
 
-  // Disconnects the syncer from the model and stops syncing the type.
-  //
-  // By the time this is called, the model thread should have already
-  // invalidated the WeakPtr it sent to us in the connect request.  Any
-  // messages sent to that ModelTypeProcessor will not be recived.
+  // Disconnects the worker from |type|'s processor and stop syncing the type.
   //
   // This is the sync thread's chance to clear state associated with the type.
   // It also causes the syncer to stop requesting updates for this type, and to
   // abort any in-progress commit requests.
-  virtual void DisconnectSyncWorker(syncer::ModelType type) = 0;
+  virtual void DisconnectType(syncer::ModelType type) = 0;
 };
 
 }  // namespace syncer_v2
diff --git a/sync/internal_api/public/sync_context_proxy.h b/sync/internal_api/public/sync_context_proxy.h
deleted file mode 100644
index f2eff7e1..0000000
--- a/sync/internal_api/public/sync_context_proxy.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SYNC_INTERNAL_API_PUBLIC_SYNC_CONTEXT_PROXY_H_
-#define SYNC_INTERNAL_API_PUBLIC_SYNC_CONTEXT_PROXY_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "sync/internal_api/public/base/model_type.h"
-
-namespace syncer_v2 {
-struct ActivationContext;
-
-// Interface for the datatype integration logic from non-sync threads.
-//
-// See SyncContextProxyImpl for an actual implementation.
-class SYNC_EXPORT SyncContextProxy {
- public:
-  SyncContextProxy();
-  virtual ~SyncContextProxy();
-
-  // Attempts to connect a non-blocking type to the sync context.
-  virtual void ConnectTypeToSync(
-      syncer::ModelType type,
-      scoped_ptr<ActivationContext> activation_context) = 0;
-
-  // Tells the syncer that we're no longer interested in syncing this type.
-  //
-  // Once this takes effect, the syncer can assume that it will no longer
-  // receive commit requests for this type.  It should also stop requesting
-  // and applying updates for this type, too.
-  virtual void Disconnect(syncer::ModelType type) = 0;
-
-  // Creates a clone of this SyncContextProxy.
-  virtual scoped_ptr<SyncContextProxy> Clone() const = 0;
-};
-
-}  // namespace syncer_v2
-
-#endif  // SYNC_INTERNAL_API_PUBLIC_SYNC_CONTEXT_PROXY_H_
diff --git a/sync/internal_api/public/sync_manager.h b/sync/internal_api/public/sync_manager.h
index 4be3aeb0..8a3366e 100644
--- a/sync/internal_api/public/sync_manager.h
+++ b/sync/internal_api/public/sync_manager.h
@@ -30,7 +30,7 @@
 #include "sync/internal_api/public/http_post_provider_factory.h"
 #include "sync/internal_api/public/internal_components_factory.h"
 #include "sync/internal_api/public/shutdown_reason.h"
-#include "sync/internal_api/public/sync_context_proxy.h"
+#include "sync/internal_api/public/sync_context.h"
 #include "sync/internal_api/public/sync_encryption_handler.h"
 #include "sync/internal_api/public/util/weak_handle.h"
 #include "sync/protocol/sync_protocol_error.h"
@@ -359,7 +359,7 @@
   virtual UserShare* GetUserShare() = 0;
 
   // Returns an instance of the main interface for non-blocking sync types.
-  virtual syncer_v2::SyncContextProxy* GetSyncContextProxy() = 0;
+  virtual scoped_ptr<syncer_v2::SyncContext> GetSyncContextProxy() = 0;
 
   // Returns the cache_guid of the currently open database.
   // Requires that the SyncManager be initialized.
diff --git a/sync/internal_api/public/test/fake_sync_context.h b/sync/internal_api/public/test/fake_sync_context.h
new file mode 100644
index 0000000..5eb4937
--- /dev/null
+++ b/sync/internal_api/public/test/fake_sync_context.h
@@ -0,0 +1,25 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SYNC_INTERNAL_API_PUBLIC_TEST_FAKE_SYNC_CONTEXT_H_
+#define SYNC_INTERNAL_API_PUBLIC_TEST_FAKE_SYNC_CONTEXT_H_
+
+#include "sync/internal_api/public/sync_context.h"
+
+namespace syncer_v2 {
+
+// A non-functional implementation of SyncContext for testing.
+class FakeSyncContext : public SyncContext {
+ public:
+  FakeSyncContext();
+  ~FakeSyncContext() override;
+
+  void ConnectType(syncer::ModelType type,
+                   scoped_ptr<ActivationContext> activation_context) override;
+  void DisconnectType(syncer::ModelType type) override;
+};
+
+}  // namespace syncer_v2
+
+#endif  // SYNC_INTERNAL_API_PUBLIC_TEST_FAKE_SYNC_CONTEXT_H_
diff --git a/sync/internal_api/public/test/fake_sync_manager.h b/sync/internal_api/public/test/fake_sync_manager.h
index 9bdde3f..0b4c810 100644
--- a/sync/internal_api/public/test/fake_sync_manager.h
+++ b/sync/internal_api/public/test/fake_sync_manager.h
@@ -11,7 +11,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/observer_list.h"
 #include "sync/internal_api/public/sync_manager.h"
-#include "sync/internal_api/public/test/null_sync_context_proxy.h"
 #include "sync/internal_api/public/test/test_user_share.h"
 
 class GURL;
@@ -99,7 +98,7 @@
   void SaveChanges() override;
   void ShutdownOnSyncThread(ShutdownReason reason) override;
   UserShare* GetUserShare() override;
-  syncer_v2::SyncContextProxy* GetSyncContextProxy() override;
+  scoped_ptr<syncer_v2::SyncContext> GetSyncContextProxy() override;
   const std::string cache_guid() override;
   bool ReceivedExperiment(Experiments* experiments) override;
   bool HasUnsyncedItems() override;
@@ -148,8 +147,6 @@
 
   TestUserShare test_user_share_;
 
-  syncer_v2::NullSyncContextProxy null_sync_context_proxy_;
-
   // Number of invalidations received since startup.
   int num_invalidations_received_;
 
diff --git a/sync/internal_api/public/test/null_sync_context_proxy.h b/sync/internal_api/public/test/null_sync_context_proxy.h
deleted file mode 100644
index aae38e9..0000000
--- a/sync/internal_api/public/test/null_sync_context_proxy.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SYNC_INTERNAL_API_PUBLIC_TEST_NULL_SYNC_CONTEXT_PROXY_H_
-#define SYNC_INTERNAL_API_PUBLIC_TEST_NULL_SYNC_CONTEXT_PROXY_H_
-
-#include "sync/internal_api/public/sync_context_proxy.h"
-
-namespace syncer_v2 {
-
-// A non-functional implementation of SyncContextProxy.
-//
-// It supports Clone(), but not much else.  Useful for testing.
-class NullSyncContextProxy : public SyncContextProxy {
- public:
-  NullSyncContextProxy();
-  ~NullSyncContextProxy() override;
-
-  void ConnectTypeToSync(
-      syncer::ModelType type,
-      scoped_ptr<ActivationContext> activation_context) override;
-  void Disconnect(syncer::ModelType type) override;
-  scoped_ptr<SyncContextProxy> Clone() const override;
-};
-
-}  // namespace syncer_v2
-
-#endif  // SYNC_INTERNAL_API_PUBLIC_TEST_NULL_SYNC_CONTEXT_PROXY_H_
diff --git a/sync/internal_api/public/util/weak_handle.h b/sync/internal_api/public/util/weak_handle.h
index 52f2b4f..ed92b2d 100644
--- a/sync/internal_api/public/util/weak_handle.h
+++ b/sync/internal_api/public/util/weak_handle.h
@@ -50,6 +50,7 @@
 #include <cstddef>
 
 #include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/callback_forward.h"
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
@@ -57,6 +58,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/single_thread_task_runner.h"
 #include "sync/base/sync_export.h"
@@ -85,14 +87,14 @@
   typedef T& ForwardType;
 };
 
-template <typename T, size_t n>
-struct ParamTraits<T[n]> {
-  typedef const T* ForwardType;
-};
-
 template <typename T>
-struct ParamTraits<T[]> {
-  typedef const T* ForwardType;
+// scoped_ptr<T> is the type the target function will accept; PassedWrapper is
+// the type that gets passed into Call and through to base::Bind. It would be
+// better to support movable types in a generic way but this was the simplest
+// fix for supporting scoped_ptr. Using base::internal is unfortunate but since
+// this class is basically a wrapper around base::Bind it makes sense.
+struct ParamTraits<scoped_ptr<T>> {
+  typedef base::internal::PassedWrapper<scoped_ptr<T>> ForwardType;
 };
 
 // Base class for WeakHandleCore<T> to avoid template bloat.  Handles
@@ -142,19 +144,14 @@
   template <typename U>
   void Call(const tracked_objects::Location& from_here,
             void (U::*fn)(void)) const {
-    PostToOwnerThread(
-        from_here,
-        Bind(&WeakHandleCore::template DoCall0<U>, this, fn));
+    PostToOwnerThread(from_here, Bind(fn, ptr_));
   }
 
   template <typename U, typename A1>
   void Call(const tracked_objects::Location& from_here,
             void (U::*fn)(A1),
             typename ParamTraits<A1>::ForwardType a1) const {
-    PostToOwnerThread(
-        from_here,
-        Bind(&WeakHandleCore::template DoCall1<U, A1>,
-             this, fn, a1));
+    PostToOwnerThread(from_here, Bind(fn, ptr_, a1));
   }
 
   template <typename U, typename A1, typename A2>
@@ -162,10 +159,7 @@
             void (U::*fn)(A1, A2),
             typename ParamTraits<A1>::ForwardType a1,
             typename ParamTraits<A2>::ForwardType a2) const {
-    PostToOwnerThread(
-        from_here,
-        Bind(&WeakHandleCore::template DoCall2<U, A1, A2>,
-             this, fn, a1, a2));
+    PostToOwnerThread(from_here, Bind(fn, ptr_, a1, a2));
   }
 
   template <typename U, typename A1, typename A2, typename A3>
@@ -174,10 +168,7 @@
             typename ParamTraits<A1>::ForwardType a1,
             typename ParamTraits<A2>::ForwardType a2,
             typename ParamTraits<A3>::ForwardType a3) const {
-    PostToOwnerThread(
-        from_here,
-        Bind(&WeakHandleCore::template DoCall3<U, A1, A2, A3>,
-             this, fn, a1, a2, a3));
+    PostToOwnerThread(from_here, Bind(fn, ptr_, a1, a2, a3));
   }
 
   template <typename U, typename A1, typename A2, typename A3, typename A4>
@@ -187,10 +178,7 @@
             typename ParamTraits<A2>::ForwardType a2,
             typename ParamTraits<A3>::ForwardType a3,
             typename ParamTraits<A4>::ForwardType a4) const {
-    PostToOwnerThread(
-        from_here,
-        Bind(&WeakHandleCore::template DoCall4<U, A1, A2, A3, A4>,
-             this, fn, a1, a2, a3, a4));
+    PostToOwnerThread(from_here, Bind(fn, ptr_, a1, a2, a3, a4));
   }
 
  private:
@@ -199,64 +187,6 @@
   // May be destroyed on any thread.
   ~WeakHandleCore() {}
 
-  // GCC 4.2.1 on OS X gets confused if all the DoCall functions are
-  // named the same, so we distinguish them.
-
-  template <typename U>
-  void DoCall0(void (U::*fn)(void)) const {
-    CHECK(IsOnOwnerThread());
-    if (!Get()) {
-      return;
-    }
-    (Get().get()->*fn)();
-  }
-
-  template <typename U, typename A1>
-  void DoCall1(void (U::*fn)(A1),
-               typename ParamTraits<A1>::ForwardType a1) const {
-    CHECK(IsOnOwnerThread());
-    if (!Get()) {
-      return;
-    }
-    (Get().get()->*fn)(a1);
-  }
-
-  template <typename U, typename A1, typename A2>
-  void DoCall2(void (U::*fn)(A1, A2),
-               typename ParamTraits<A1>::ForwardType a1,
-               typename ParamTraits<A2>::ForwardType a2) const {
-    CHECK(IsOnOwnerThread());
-    if (!Get()) {
-      return;
-    }
-    (Get().get()->*fn)(a1, a2);
-  }
-
-  template <typename U, typename A1, typename A2, typename A3>
-  void DoCall3(void (U::*fn)(A1, A2, A3),
-               typename ParamTraits<A1>::ForwardType a1,
-               typename ParamTraits<A2>::ForwardType a2,
-               typename ParamTraits<A3>::ForwardType a3) const {
-    CHECK(IsOnOwnerThread());
-    if (!Get()) {
-      return;
-    }
-    (Get().get()->*fn)(a1, a2, a3);
-  }
-
-  template <typename U, typename A1, typename A2, typename A3, typename A4>
-  void DoCall4(void (U::*fn)(A1, A2, A3, A4),
-               typename ParamTraits<A1>::ForwardType a1,
-               typename ParamTraits<A2>::ForwardType a2,
-               typename ParamTraits<A3>::ForwardType a3,
-               typename ParamTraits<A4>::ForwardType a4) const {
-    CHECK(IsOnOwnerThread());
-    if (!Get()) {
-      return;
-    }
-    (Get().get()->*fn)(a1, a2, a3, a4);
-  }
-
   // Must be dereferenced only on the owner thread.  May be destroyed
   // from any thread.
   base::WeakPtr<T> ptr_;
diff --git a/sync/internal_api/sync_context.cc b/sync/internal_api/sync_context.cc
index 5e7326c..c38db9a 100644
--- a/sync/internal_api/sync_context.cc
+++ b/sync/internal_api/sync_context.cc
@@ -6,10 +6,8 @@
 
 namespace syncer_v2 {
 
-SyncContext::SyncContext() {
-}
+SyncContext::SyncContext() {}
 
-SyncContext::~SyncContext() {
-}
+SyncContext::~SyncContext() {}
 
 }  // namespace syncer_v2
diff --git a/sync/internal_api/sync_context_proxy.cc b/sync/internal_api/sync_context_proxy.cc
index 8f90122..64618e5 100644
--- a/sync/internal_api/sync_context_proxy.cc
+++ b/sync/internal_api/sync_context_proxy.cc
@@ -2,14 +2,34 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "sync/internal_api/public/sync_context_proxy.h"
+#include "sync/internal_api/sync_context_proxy.h"
+
+#include "base/bind.h"
+#include "base/location.h"
+#include "base/single_thread_task_runner.h"
+#include "sync/internal_api/public/activation_context.h"
+#include "sync/internal_api/public/sync_context.h"
 
 namespace syncer_v2 {
 
-SyncContextProxy::SyncContextProxy() {
+SyncContextProxy::SyncContextProxy(
+    const scoped_refptr<base::SequencedTaskRunner>& task_runner,
+    const base::WeakPtr<SyncContext>& sync_context)
+    : task_runner_(task_runner), sync_context_(sync_context) {}
+
+SyncContextProxy::~SyncContextProxy() {}
+
+void SyncContextProxy::ConnectType(
+    syncer::ModelType type,
+    scoped_ptr<ActivationContext> activation_context) {
+  task_runner_->PostTask(
+      FROM_HERE, base::Bind(&SyncContext::ConnectType, sync_context_, type,
+                            base::Passed(&activation_context)));
 }
 
-SyncContextProxy::~SyncContextProxy() {
+void SyncContextProxy::DisconnectType(syncer::ModelType type) {
+  task_runner_->PostTask(
+      FROM_HERE, base::Bind(&SyncContext::DisconnectType, sync_context_, type));
 }
 
 }  // namespace syncer_v2
diff --git a/sync/internal_api/sync_context_proxy.h b/sync/internal_api/sync_context_proxy.h
new file mode 100644
index 0000000..ea014285
--- /dev/null
+++ b/sync/internal_api/sync_context_proxy.h
@@ -0,0 +1,41 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_H_
+#define SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_H_
+
+#include "sync/internal_api/public/sync_context.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequenced_task_runner.h"
+#include "sync/base/sync_export.h"
+#include "sync/internal_api/public/base/model_type.h"
+
+namespace syncer_v2 {
+
+// Encapsulates a reference to the sync context and the thread it's running on.
+// Used by sync's data types to connect with the sync context.
+class SYNC_EXPORT SyncContextProxy : public SyncContext {
+ public:
+  SyncContextProxy(const scoped_refptr<base::SequencedTaskRunner>& task_runner,
+                   const base::WeakPtr<SyncContext>& sync_context);
+  ~SyncContextProxy() override;
+
+  // SyncContext implementation
+  void ConnectType(syncer::ModelType type,
+                   scoped_ptr<ActivationContext> activation_context) override;
+  void DisconnectType(syncer::ModelType type) override;
+
+ private:
+  // A SequencedTaskRunner representing the thread where the SyncContext lives.
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+
+  // The SyncContext this object is wrapping.
+  base::WeakPtr<SyncContext> sync_context_;
+};
+
+}  // namespace syncer_v2
+
+#endif  // SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_H_
diff --git a/sync/internal_api/sync_context_proxy_impl.cc b/sync/internal_api/sync_context_proxy_impl.cc
deleted file mode 100644
index 0f1fd22..0000000
--- a/sync/internal_api/sync_context_proxy_impl.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sync/internal_api/sync_context_proxy_impl.h"
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/single_thread_task_runner.h"
-#include "sync/internal_api/public/activation_context.h"
-#include "sync/internal_api/public/sync_context.h"
-
-namespace syncer_v2 {
-
-SyncContextProxyImpl::SyncContextProxyImpl(
-    const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner,
-    const base::WeakPtr<SyncContext>& sync_context)
-    : sync_task_runner_(sync_task_runner), sync_context_(sync_context) {
-}
-
-SyncContextProxyImpl::~SyncContextProxyImpl() {
-}
-
-void SyncContextProxyImpl::ConnectTypeToSync(
-    syncer::ModelType type,
-    scoped_ptr<ActivationContext> activation_context) {
-  VLOG(1) << "ConnectTypeToSync: " << ModelTypeToString(type);
-  sync_task_runner_->PostTask(
-      FROM_HERE,
-      base::Bind(&SyncContext::ConnectSyncTypeToWorker, sync_context_, type,
-                 base::Passed(&activation_context)));
-}
-
-void SyncContextProxyImpl::Disconnect(syncer::ModelType type) {
-  sync_task_runner_->PostTask(
-      FROM_HERE,
-      base::Bind(&SyncContext::DisconnectSyncWorker, sync_context_, type));
-}
-
-scoped_ptr<SyncContextProxy> SyncContextProxyImpl::Clone() const {
-  return scoped_ptr<SyncContextProxy>(
-      new SyncContextProxyImpl(sync_task_runner_, sync_context_));
-}
-
-}  // namespace syncer_v2
diff --git a/sync/internal_api/sync_context_proxy_impl.h b/sync/internal_api/sync_context_proxy_impl.h
deleted file mode 100644
index bde38e4..0000000
--- a/sync/internal_api/sync_context_proxy_impl.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_IMPL_H_
-#define SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_IMPL_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/sequenced_task_runner.h"
-#include "sync/base/sync_export.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/sync_context_proxy.h"
-
-namespace syncer_v2 {
-class SyncContext;
-
-// Encapsulates a reference to the sync context and the thread it's running on.
-// Used by sync's data types to connect with the sync context.
-//
-// It is expected that this object will be copied to and used on many different
-// threads.  It is small and safe to pass by value.
-class SYNC_EXPORT SyncContextProxyImpl : public SyncContextProxy {
- public:
-  SyncContextProxyImpl(
-      const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner,
-      const base::WeakPtr<SyncContext>& sync_context);
-  ~SyncContextProxyImpl() override;
-
-  // Attempts to connect a non-blocking type to the sync context.
-  //
-  // This may fail under some unusual circumstances, like shutdown.  Due to the
-  // nature of WeakPtrs and cross-thread communication, the caller will be
-  // unable to distinguish a slow success from failure.
-  void ConnectTypeToSync(
-      syncer::ModelType type,
-      scoped_ptr<ActivationContext> activation_context) override;
-
-  // Disables syncing for the given type on the sync thread.
-  void Disconnect(syncer::ModelType type) override;
-
-  scoped_ptr<SyncContextProxy> Clone() const override;
-
- private:
-  // A SequencedTaskRunner representing the thread where the SyncContext lives.
-  scoped_refptr<base::SequencedTaskRunner> sync_task_runner_;
-
-  // The SyncContext this object is wrapping.
-  base::WeakPtr<SyncContext> sync_context_;
-};
-
-}  // namespace syncer_v2
-
-#endif  // SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_IMPL_H_
diff --git a/sync/internal_api/sync_context_proxy_impl_unittest.cc b/sync/internal_api/sync_context_proxy_unittest.cc
similarity index 84%
rename from sync/internal_api/sync_context_proxy_impl_unittest.cc
rename to sync/internal_api/sync_context_proxy_unittest.cc
index 6058d67..0648cfd8 100644
--- a/sync/internal_api/sync_context_proxy_impl_unittest.cc
+++ b/sync/internal_api/sync_context_proxy_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "sync/internal_api/sync_context_proxy_impl.h"
+#include "sync/internal_api/sync_context_proxy.h"
 
 #include <utility>
 #include <vector>
@@ -24,9 +24,9 @@
 
 namespace syncer_v2 {
 
-class SyncContextProxyImplTest : public ::testing::Test, FakeModelTypeService {
+class SyncContextProxyTest : public ::testing::Test, FakeModelTypeService {
  public:
-  SyncContextProxyImplTest()
+  SyncContextProxyTest()
       : sync_task_runner_(base::ThreadTaskRunnerHandle::Get()),
         type_task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
 
@@ -35,7 +35,7 @@
     registry_.reset(new syncer::ModelTypeRegistry(
         workers_, dir_maker_.directory(), &nudge_handler_));
     context_proxy_.reset(
-        new SyncContextProxyImpl(sync_task_runner_, registry_->AsWeakPtr()));
+        new SyncContextProxy(sync_task_runner_, registry_->AsWeakPtr()));
   }
 
   void TearDown() override {
@@ -50,12 +50,12 @@
 
   void OnSyncStarting(SharedModelTypeProcessor* processor) {
     processor->OnSyncStarting(base::Bind(
-        &SyncContextProxyImplTest::OnReadyToConnect, base::Unretained(this)));
+        &SyncContextProxyTest::OnReadyToConnect, base::Unretained(this)));
   }
 
   void OnReadyToConnect(syncer::SyncError error,
                         scoped_ptr<ActivationContext> context) {
-    context_proxy_->ConnectTypeToSync(syncer::THEMES, std::move(context));
+    context_proxy_->ConnectType(syncer::THEMES, std::move(context));
   }
 
   scoped_ptr<SharedModelTypeProcessor> CreateModelTypeProcessor() {
@@ -75,11 +75,11 @@
   syncer::MockNudgeHandler nudge_handler_;
   scoped_ptr<syncer::ModelTypeRegistry> registry_;
 
-  scoped_ptr<SyncContextProxyImpl> context_proxy_;
+  scoped_ptr<SyncContextProxy> context_proxy_;
 };
 
 // Try to connect a type to a SyncContext that has already shut down.
-TEST_F(SyncContextProxyImplTest, FailToConnect1) {
+TEST_F(SyncContextProxyTest, FailToConnect1) {
   scoped_ptr<SharedModelTypeProcessor> processor = CreateModelTypeProcessor();
   DisableSync();
   OnSyncStarting(processor.get());
@@ -90,7 +90,7 @@
 }
 
 // Try to connect a type to a SyncContext as it shuts down.
-TEST_F(SyncContextProxyImplTest, FailToConnect2) {
+TEST_F(SyncContextProxyTest, FailToConnect2) {
   scoped_ptr<SharedModelTypeProcessor> processor = CreateModelTypeProcessor();
   OnSyncStarting(processor.get());
   DisableSync();
@@ -101,7 +101,7 @@
 }
 
 // Tests the case where the type's sync proxy shuts down first.
-TEST_F(SyncContextProxyImplTest, TypeDisconnectsFirst) {
+TEST_F(SyncContextProxyTest, TypeDisconnectsFirst) {
   scoped_ptr<SharedModelTypeProcessor> processor = CreateModelTypeProcessor();
   OnSyncStarting(processor.get());
 
@@ -113,7 +113,7 @@
 }
 
 // Tests the case where the sync thread shuts down first.
-TEST_F(SyncContextProxyImplTest, SyncDisconnectsFirst) {
+TEST_F(SyncContextProxyTest, SyncDisconnectsFirst) {
   scoped_ptr<SharedModelTypeProcessor> processor = CreateModelTypeProcessor();
   OnSyncStarting(processor.get());
 
diff --git a/sync/internal_api/sync_manager_impl.cc b/sync/internal_api/sync_manager_impl.cc
index fae8446..edb8a00 100644
--- a/sync/internal_api/sync_manager_impl.cc
+++ b/sync/internal_api/sync_manager_impl.cc
@@ -33,13 +33,11 @@
 #include "sync/internal_api/public/internal_components_factory.h"
 #include "sync/internal_api/public/read_node.h"
 #include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/sync_context.h"
-#include "sync/internal_api/public/sync_context_proxy.h"
 #include "sync/internal_api/public/user_share.h"
 #include "sync/internal_api/public/util/experiments.h"
 #include "sync/internal_api/public/write_node.h"
 #include "sync/internal_api/public/write_transaction.h"
-#include "sync/internal_api/sync_context_proxy_impl.h"
+#include "sync/internal_api/sync_context_proxy.h"
 #include "sync/internal_api/syncapi_internal.h"
 #include "sync/internal_api/syncapi_server_connection_manager.h"
 #include "sync/protocol/proto_value_conversions.h"
@@ -313,15 +311,6 @@
       new ModelTypeRegistry(args->workers, directory(), this));
   sync_encryption_handler_->AddObserver(model_type_registry_.get());
 
-  // Bind the SyncContext WeakPtr to this thread.  This helps us crash earlier
-  // if the pointer is misused in debug mode.
-  base::WeakPtr<syncer_v2::SyncContext> weak_core =
-      model_type_registry_->AsWeakPtr();
-  weak_core.get();
-
-  sync_context_proxy_.reset(new syncer_v2::SyncContextProxyImpl(
-      base::ThreadTaskRunnerHandle::Get(), weak_core));
-
   // Build a SyncSessionContext and store the worker in it.
   DVLOG(1) << "Sync is bringing up SyncSessionContext.";
   std::vector<SyncEngineEventListener*> listeners;
@@ -938,9 +927,10 @@
   return &share_;
 }
 
-syncer_v2::SyncContextProxy* SyncManagerImpl::GetSyncContextProxy() {
+scoped_ptr<syncer_v2::SyncContext> SyncManagerImpl::GetSyncContextProxy() {
   DCHECK(initialized_);
-  return sync_context_proxy_.get();
+  return make_scoped_ptr(new syncer_v2::SyncContextProxy(
+      base::ThreadTaskRunnerHandle::Get(), model_type_registry_->AsWeakPtr()));
 }
 
 const std::string SyncManagerImpl::cache_guid() {
diff --git a/sync/internal_api/sync_manager_impl.h b/sync/internal_api/sync_manager_impl.h
index 2c51a48..a4d282dd 100644
--- a/sync/internal_api/sync_manager_impl.h
+++ b/sync/internal_api/sync_manager_impl.h
@@ -25,7 +25,6 @@
 #include "sync/internal_api/js_sync_encryption_handler_observer.h"
 #include "sync/internal_api/js_sync_manager_observer.h"
 #include "sync/internal_api/protocol_event_buffer.h"
-#include "sync/internal_api/public/sync_context_proxy.h"
 #include "sync/internal_api/public/sync_manager.h"
 #include "sync/internal_api/public/user_share.h"
 #include "sync/internal_api/sync_encryption_handler_impl.h"
@@ -36,10 +35,6 @@
 
 class GURL;
 
-namespace syncer_v2 {
-class SyncContext;
-}
-
 namespace syncer {
 
 class ModelTypeRegistry;
@@ -102,7 +97,7 @@
   void SaveChanges() override;
   void ShutdownOnSyncThread(ShutdownReason reason) override;
   UserShare* GetUserShare() override;
-  syncer_v2::SyncContextProxy* GetSyncContextProxy() override;
+  scoped_ptr<syncer_v2::SyncContext> GetSyncContextProxy() override;
   const std::string cache_guid() override;
   bool ReceivedExperiment(Experiments* experiments) override;
   bool HasUnsyncedItems() override;
@@ -295,9 +290,6 @@
   // This state changes when entering or exiting a configuration cycle.
   scoped_ptr<ModelTypeRegistry> model_type_registry_;
 
-  // Thread-safe wrapper for main interface for non-blocking sync types.
-  scoped_ptr<syncer_v2::SyncContextProxy> sync_context_proxy_;
-
   // A container of various bits of information used by the SyncScheduler to
   // create SyncSessions.  Must outlive the SyncScheduler.
   scoped_ptr<sessions::SyncSessionContext> session_context_;
diff --git a/sync/internal_api/test/fake_sync_context.cc b/sync/internal_api/test/fake_sync_context.cc
new file mode 100644
index 0000000..4022fe3d
--- /dev/null
+++ b/sync/internal_api/test/fake_sync_context.cc
@@ -0,0 +1,25 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "sync/internal_api/public/test/fake_sync_context.h"
+
+#include "sync/internal_api/public/activation_context.h"
+
+namespace syncer_v2 {
+
+FakeSyncContext::FakeSyncContext() {}
+
+FakeSyncContext::~FakeSyncContext() {}
+
+void FakeSyncContext::ConnectType(
+    syncer::ModelType type,
+    scoped_ptr<ActivationContext> activation_context) {
+  NOTREACHED() << "FakeSyncContext is not meant to be used";
+}
+
+void FakeSyncContext::DisconnectType(syncer::ModelType type) {
+  NOTREACHED() << "FakeSyncContext is not meant to be used";
+}
+
+}  // namespace syncer_v2
diff --git a/sync/internal_api/test/fake_sync_manager.cc b/sync/internal_api/test/fake_sync_manager.cc
index 2f02a18..90ffa1b 100644
--- a/sync/internal_api/test/fake_sync_manager.cc
+++ b/sync/internal_api/test/fake_sync_manager.cc
@@ -16,6 +16,7 @@
 #include "base/thread_task_runner_handle.h"
 #include "sync/internal_api/public/http_post_provider_factory.h"
 #include "sync/internal_api/public/internal_components_factory.h"
+#include "sync/internal_api/public/test/fake_sync_context.h"
 #include "sync/internal_api/public/util/weak_handle.h"
 #include "sync/syncable/directory.h"
 #include "sync/test/fake_sync_encryption_handler.h"
@@ -200,8 +201,8 @@
   return test_user_share_.user_share();
 }
 
-syncer_v2::SyncContextProxy* FakeSyncManager::GetSyncContextProxy() {
-  return &null_sync_context_proxy_;
+scoped_ptr<syncer_v2::SyncContext> FakeSyncManager::GetSyncContextProxy() {
+  return make_scoped_ptr(new syncer_v2::FakeSyncContext());
 }
 
 const std::string FakeSyncManager::cache_guid() {
diff --git a/sync/internal_api/test/null_sync_context_proxy.cc b/sync/internal_api/test/null_sync_context_proxy.cc
deleted file mode 100644
index 3695b1c..0000000
--- a/sync/internal_api/test/null_sync_context_proxy.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sync/internal_api/public/test/null_sync_context_proxy.h"
-
-#include "sync/internal_api/public/activation_context.h"
-
-namespace syncer_v2 {
-
-NullSyncContextProxy::NullSyncContextProxy() {
-}
-
-NullSyncContextProxy::~NullSyncContextProxy() {
-}
-
-void NullSyncContextProxy::ConnectTypeToSync(
-    syncer::ModelType type,
-    scoped_ptr<ActivationContext> activation_context) {
-  NOTREACHED() << "NullSyncContextProxy is not meant to be used";
-}
-
-void NullSyncContextProxy::Disconnect(syncer::ModelType type) {
-  NOTREACHED() << "NullSyncContextProxy is not meant to be used";
-}
-
-scoped_ptr<SyncContextProxy> NullSyncContextProxy::Clone() const {
-  return scoped_ptr<SyncContextProxy>(new NullSyncContextProxy());
-}
-
-}  // namespace syncer_v2
diff --git a/sync/sessions/model_type_registry.cc b/sync/sessions/model_type_registry.cc
index f80f693..c85940ae 100644
--- a/sync/sessions/model_type_registry.cc
+++ b/sync/sessions/model_type_registry.cc
@@ -137,7 +137,7 @@
                       GetEnabledNonBlockingTypes()).Empty());
 }
 
-void ModelTypeRegistry::ConnectSyncTypeToWorker(
+void ModelTypeRegistry::ConnectType(
     ModelType type,
     scoped_ptr<syncer_v2::ActivationContext> activation_context) {
   DVLOG(1) << "Enabling an off-thread sync type: " << ModelTypeToString(type);
@@ -174,7 +174,7 @@
                       GetEnabledNonBlockingTypes()).Empty());
 }
 
-void ModelTypeRegistry::DisconnectSyncWorker(ModelType type) {
+void ModelTypeRegistry::DisconnectType(ModelType type) {
   DVLOG(1) << "Disabling an off-thread sync type: " << ModelTypeToString(type);
   DCHECK(update_handler_map_.find(type) != update_handler_map_.end());
   DCHECK(commit_contributor_map_.find(type) != commit_contributor_map_.end());
diff --git a/sync/sessions/model_type_registry.h b/sync/sessions/model_type_registry.h
index 576535a8..3e38fa3 100644
--- a/sync/sessions/model_type_registry.h
+++ b/sync/sessions/model_type_registry.h
@@ -62,7 +62,7 @@
   // and its task_runner to the newly created worker.
   //
   // Expects that the proxy's ModelType is not currently enabled.
-  void ConnectSyncTypeToWorker(
+  void ConnectType(
       syncer::ModelType type,
       scoped_ptr<syncer_v2::ActivationContext> activation_context) override;
 
@@ -70,7 +70,7 @@
   //
   // Expects that the type is currently enabled.
   // Deletes the worker associated with the type.
-  void DisconnectSyncWorker(syncer::ModelType type) override;
+  void DisconnectType(syncer::ModelType type) override;
 
   // Implementation of SyncEncryptionHandler::Observer.
   void OnPassphraseRequired(
diff --git a/sync/sessions/model_type_registry_unittest.cc b/sync/sessions/model_type_registry_unittest.cc
index 1b5763c..239dc62 100644
--- a/sync/sessions/model_type_registry_unittest.cc
+++ b/sync/sessions/model_type_registry_unittest.cc
@@ -181,20 +181,20 @@
 
   EXPECT_TRUE(registry()->GetEnabledTypes().Empty());
 
-  registry()->ConnectSyncTypeToWorker(
+  registry()->ConnectType(
       syncer::THEMES, MakeActivationContext(MakeInitialDataTypeState(THEMES),
                                             std::move(themes_sync_processor)));
   EXPECT_TRUE(registry()->GetEnabledTypes().Equals(
       ModelTypeSet(syncer::THEMES)));
 
-  registry()->ConnectSyncTypeToWorker(
+  registry()->ConnectType(
       syncer::SESSIONS,
       MakeActivationContext(MakeInitialDataTypeState(SESSIONS),
                             std::move(sessions_sync_processor)));
   EXPECT_TRUE(registry()->GetEnabledTypes().Equals(
       ModelTypeSet(syncer::THEMES, syncer::SESSIONS)));
 
-  registry()->DisconnectSyncWorker(syncer::THEMES);
+  registry()->DisconnectType(syncer::THEMES);
   EXPECT_TRUE(registry()->GetEnabledTypes().Equals(
       ModelTypeSet(syncer::SESSIONS)));
 
@@ -221,7 +221,7 @@
   EXPECT_TRUE(registry()->GetEnabledTypes().Empty());
 
   // Add the themes non-blocking type.
-  registry()->ConnectSyncTypeToWorker(
+  registry()->ConnectType(
       syncer::THEMES, MakeActivationContext(MakeInitialDataTypeState(THEMES),
                                             std::move(themes_sync_processor)));
   current_types.Put(syncer::THEMES);
@@ -233,7 +233,7 @@
   EXPECT_TRUE(registry()->GetEnabledTypes().Equals(current_types));
 
   // Add sessions non-blocking type.
-  registry()->ConnectSyncTypeToWorker(
+  registry()->ConnectType(
       syncer::SESSIONS,
       MakeActivationContext(MakeInitialDataTypeState(SESSIONS),
                             std::move(sessions_sync_processor)));
@@ -241,7 +241,7 @@
   EXPECT_TRUE(registry()->GetEnabledTypes().Equals(current_types));
 
   // Remove themes non-blocking type.
-  registry()->DisconnectSyncWorker(syncer::THEMES);
+  registry()->DisconnectType(syncer::THEMES);
   current_types.Remove(syncer::THEMES);
   EXPECT_TRUE(registry()->GetEnabledTypes().Equals(current_types));
 
diff --git a/sync/sync.gyp b/sync/sync.gyp
index 2b8383c..e6725824 100644
--- a/sync/sync.gyp
+++ b/sync/sync.gyp
@@ -356,8 +356,6 @@
         'internal_api/shared_model_type_processor.cc',
         'internal_api/sync_context.cc',
         'internal_api/sync_context_proxy.cc',
-        'internal_api/sync_context_proxy_impl.cc',
-        'internal_api/sync_context_proxy_impl.h',
         'internal_api/sync_db_util.cc',
         'internal_api/sync_encryption_handler_impl.cc',
         'internal_api/sync_encryption_handler_impl.h',
diff --git a/sync/sync_tests.gypi b/sync/sync_tests.gypi
index 06c82f2..a0ab854 100644
--- a/sync/sync_tests.gypi
+++ b/sync/sync_tests.gypi
@@ -184,17 +184,17 @@
       ],
       'sources': [
         'internal_api/public/test/fake_model_type_service.h',
+        'internal_api/public/test/fake_sync_context.h',
         'internal_api/public/test/fake_sync_manager.h',
         'internal_api/public/test/model_type_store_test_util.h',
-        'internal_api/public/test/null_sync_context_proxy.h',
         'internal_api/public/test/sync_manager_factory_for_profile_sync_test.h',
         'internal_api/public/test/test_entry_factory.h',
         'internal_api/public/test/test_internal_components_factory.h',
         'internal_api/public/test/test_user_share.h',
         'internal_api/test/fake_model_type_service.cc',
+        'internal_api/test/fake_sync_context.cc',
         'internal_api/test/fake_sync_manager.cc',
         'internal_api/test/model_type_store_test_util.cc',
-        'internal_api/test/null_sync_context_proxy.cc',
         'internal_api/test/sync_manager_factory_for_profile_sync_test.cc',
         'internal_api/test/sync_manager_for_profile_sync_test.cc',
         'internal_api/test/sync_manager_for_profile_sync_test.h',
@@ -321,7 +321,7 @@
         'internal_api/public/util/proto_value_ptr_unittest.cc',
         'internal_api/public/util/weak_handle_unittest.cc',
         'internal_api/shared_model_type_processor_unittest.cc',
-        'internal_api/sync_context_proxy_impl_unittest.cc',
+        'internal_api/sync_context_proxy_unittest.cc',
         'internal_api/sync_encryption_handler_impl_unittest.cc',
         'internal_api/sync_manager_impl_unittest.cc',
         'internal_api/syncapi_server_connection_manager_unittest.cc',
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index 89e5b99..d447513 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -863,9 +863,6 @@
         "test": "net_unittests"
       },
       {
-        "test": "network_service_unittests"
-      },
-      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
diff --git a/testing/buildbot/chromium.mojo.json b/testing/buildbot/chromium.mojo.json
index 459b044a..d6235de 100644
--- a/testing/buildbot/chromium.mojo.json
+++ b/testing/buildbot/chromium.mojo.json
@@ -45,6 +45,7 @@
     "gtest_tests": [
       {
         "args": [
+          "--override-use-gl-with-osmesa-for-tests",
           "--run-in-mash",
           "--test-launcher-filter-file=src/testing/buildbot/filters/mojo.fyi.browser_tests.filter"
         ],
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index f35f59a..df96890 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -2194,9 +2194,6 @@
         "test": "mus_ws_unittests"
       },
       {
-        "test": "network_service_unittests"
-      },
-      {
         "test": "resource_provider_unittests"
       },
       {
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index 641d182d..97e3b63 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -342,7 +342,7 @@
     "label_type": "group",
     "type": "windowed_test_launcher",
     "executable": "browser_tests",
-    "args": ["--run-in-mash", "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.browser_tests.filter"],
+    "args": ["--override-use-gl-with-osmesa-for-tests", "--run-in-mash", "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.browser_tests.filter"],
   },
   "media_unittests": {
     "label": "//media:media_unittests",
@@ -421,10 +421,6 @@
     "label": "//net:net_unittests",
     "type": "console_test_launcher",
   },
-  "network_service_unittests": {
-    "label": "//mojo/services/network:unittests",
-    "type": "unknown",
-  },
   "ozone_unittests": {
     "label": "//ui/ozone:ozone_unittests",
     "type": "unknown",
diff --git a/testing/libfuzzer/README.md b/testing/libfuzzer/README.md
index 3d06f1e..5c08a77 100644
--- a/testing/libfuzzer/README.md
+++ b/testing/libfuzzer/README.md
@@ -14,7 +14,7 @@
 engineers to uncover potential security & stability problems earlier.
 
 *** note
-**Requirements:** libFuzzer in chrome is supported with GN on Linux only. 
+**Requirements:** libFuzzer in Chrome is supported with GN on Linux only. 
 ***
 
 ## Integration Status
diff --git a/testing/libfuzzer/clusterfuzz.md b/testing/libfuzzer/clusterfuzz.md
index 7332355..b8e785e8 100644
--- a/testing/libfuzzer/clusterfuzz.md
+++ b/testing/libfuzzer/clusterfuzz.md
@@ -10,7 +10,7 @@
 
 ## Status Links
 
-* [Buildbot] - status of all libFuzzer builds
+* [Buildbot] - status of all libFuzzer builds.
 * [ClusterFuzz Fuzzer Status] - fuzzing metrics, links to crashes and coverage 
 reports.
 * [Corpus GCS Bucket] - current corpus for each fuzzer. Can be used to upload
@@ -20,7 +20,7 @@
 
 The integration between libFuzzer and ClusterFuzz consists of:
 
-* Build rules definition in [fuzzer_test.gni]
+* Build rules definition in [fuzzer_test.gni].
 * [Buildbot] that automatically discovers fuzzers using `gn refs` facility, 
 builds fuzzers with multiple sanitizers and uploads binaries to a special
 GCS bucket. Build bot recipe is defined in [chromium_libfuzzer.py].
@@ -30,7 +30,7 @@
 parasitic coverage. 
 * [ClusterFuzz Fuzzer Status] displays fuzzer runtime 
 metrics as well as provides links to crashes and coverage reports. The information
-is collected once a day.
+is collected every 30 minutes.
 
 
 [Buildbot]: https://goto.google.com/libfuzzer-clusterfuzz-buildbot
diff --git a/testing/libfuzzer/efficient_fuzzer.md b/testing/libfuzzer/efficient_fuzzer.md
index cd8cf74..5eb0b6e 100644
--- a/testing/libfuzzer/efficient_fuzzer.md
+++ b/testing/libfuzzer/efficient_fuzzer.md
@@ -13,9 +13,9 @@
 
 There are several metrics you should look at to determine your fuzzer effectiveness:
 
-* fuzzer speed (exec/s)
-* corpus size
-* coverage
+* [fuzzer speed](#Fuzzer-Speed) (exec/s)
+* [corpus size](#Corpus-Size)
+* [coverage](#Coverage)
 
 You can collect these metrics manually or take them from [ClusterFuzz status]
 pages.
@@ -32,6 +32,7 @@
 as possible. You should try to get to at least 1,000 exec/s. Profile the fuzzer
 using any standard tool to see where it spends its time.
 
+
 ### Initialization/Cleanup
 
 Try to keep your fuzzing function as simple as possible. Prefer to use static
@@ -41,11 +42,39 @@
 Fuzzers don't have to shutdown gracefully (we either kill them or they crash
 because sanitizer has found a problem). You can skip freeing static resource.
 
-Of course all resources allocated withing `LLVMFuzzerTestOneInput` function
+Of course all resources allocated within `LLVMFuzzerTestOneInput` function
 should be deallocated since this function is called millions of times during
 one fuzzing session.
 
 
+### Memory Usage
+
+Avoid allocation of dynamic memory wherever possible. Instrumentation works
+faster for stack-based and static objects than for heap allocated ones.
+
+It is always a good idea to play with different versions of a fuzzer to find the
+fastest implementation.
+
+
+### Maximum Testcase Length
+
+Experiment with different values of `-max_len` parameter. This parameter often
+significantly affects execution speed, but not always.
+
+1) Define which `-max_len` value is reasonable for your target. For example, it
+may be useless to fuzz an image decoder with too small value of testcase length.
+
+2) Increase the value defined on previous step. Check its influence on execution
+speed of fuzzer. If speed doesn't drop significantly for long inputs, it is fine
+to have some bigger value for `-max_len`.
+
+In general, bigger `-max_len` value gives better coverage. Coverage is main
+priority for fuzzing. However, low execution speed may result in waste of
+resources used for fuzzing. If large inputs make fuzzer too slow you have to
+adjust value of `-max_len` and find a trade-off between coverage and execution
+speed.
+
+
 ## Corpus Size
 
 After running for a while the fuzzer would reach a plateau and won't discover
@@ -58,7 +87,7 @@
 [coverage report](#Coverage). To fix the issue you can:
 
 * change the code (e.g. disable crc checks while fuzzing)
-* prepare [corpus seed](#Corpus-Seed).
+* prepare [corpus seed](#Corpus-Seed)
 * prepare [fuzzer dictionary](#Fuzzer-Dictionary)
 
 ## Coverage
@@ -76,7 +105,7 @@
 `sancov_path` can be omitted by adding llvm bin directory to `PATH` environment
 variable.
 
-## Corpus Seed
+### Corpus Seed
 
 You can pass a corpus directory to a fuzzer that you run manually:
 
@@ -87,12 +116,15 @@
 The directory can initially be empty. The fuzzer would store all the interesting
 items it finds in the directory. You can help the fuzzer by "seeding" the corpus:
 simply copy interesting inputs for your function to the corpus directory before
-running. This works especially well for file-parsing functionality: just
-use some valid files from your test suite.
+running. This works especially well for strictly defined file formats or data
+transmission protocols.
+* For file-parsing functionality just use some valid files from your test suite.
+* For protocol processing targets put raw streams from test suite into separate
+files.
 
 After discovering new and interesting items, [upload corpus to ClusterFuzz].
 
-## Fuzzer Dictionary
+### Fuzzer Dictionary
 
 It is very useful to provide fuzzer a set of common words/values that you expect
 to find in the input. This greatly improves efficiency of finding new units and
diff --git a/testing/libfuzzer/getting_started.md b/testing/libfuzzer/getting_started.md
index f7db0dd6..62863dc 100644
--- a/testing/libfuzzer/getting_started.md
+++ b/testing/libfuzzer/getting_started.md
@@ -1,7 +1,7 @@
 # Getting Started with libFuzzer in Chrome
 
 *** note
-**Prerequisites:** libFuzzer in chrome is supported with GN on Linux only. 
+**Prerequisites:** libFuzzer in Chrome is supported with GN on Linux only. 
 ***
 
 This document will walk you through:
@@ -70,7 +70,7 @@
 
 ```bash
 ninja -C out/libfuzzer url_parse_fuzzer
-./out/libfuzzer url_parse_fuzzer
+./out/libfuzzer/url_parse_fuzzer
 ```
 
 Your fuzzer should produce output like this:
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
index 42b4d5cd..ddad0d04 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
@@ -80,6 +80,14 @@
 http/tests/xmlhttprequest/origin-whitelisting-all.html [ Failure ]
 http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ Failure ]
 
+# https://crbug.com/601584 - No OOPIF support for UserGestureIndicator triggers
+#                            cross-origin-iframe.html layout test failure
+http/tests/bluetooth/https/requestDevice/cross-origin-iframe.html [ Failure ]
+
+# https://crbug.com/601581 - m_persistedPluginWidget->isFrameView() assert
+#                            fails in --site-per-process mode
+http/tests/security/xss-DENIED-object-element.html [ Crash ]
+
 # TODO(alexmos,lukasza): Triage these failures and assign more specific bugs.
 
 # No repro (maybe flaky? maybe really fixed? maybe repros only in debug build?):
diff --git a/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-crash-expected.txt
new file mode 100644
index 0000000..9c314504
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-crash-expected.txt
@@ -0,0 +1,3 @@
+PASS if no crash or assertion failure.
+
+
diff --git a/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-crash.html b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-crash.html
new file mode 100644
index 0000000..c63a174b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-crash.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<p>PASS if no crash or assertion failure.</p>
+<dialog id="dialog">
+    <div id="dialogChild">
+        <div style="transform:rotatey(0deg);"></div>
+        <div style="position:absolute;"></div>
+    </div>
+</dialog>
+<script src="../../resources/run-after-layout-and-paint.js"></script>
+<script>
+    if (window.testRunner)
+        testRunner.dumpAsText();
+    document.getElementById("dialog").showModal();
+    runAfterLayoutAndPaint(function() {
+        document.body.style.overflowY = "-webkit-paged-x";
+        document.getElementById("dialog").style.overflowY = "-webkit-paged-x";
+        document.getElementById("dialogChild").style.overflowY = "-webkit-paged-x";
+    }, true);
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-expected.html b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-expected.html
new file mode 100644
index 0000000..01e24279
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog-expected.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<p>There should be a modal dialog on this page, with the word "PASS" inside.</p>
+<dialog id="dialog">PASS</dialog>
+<script>
+    document.getElementById("dialog").showModal();
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog.html b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog.html
new file mode 100644
index 0000000..e7bebb9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/pagination/modal-dialog.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<style>html { overflow:-webkit-paged-x; }</style>
+<p>There should be a modal dialog on this page, with the word "PASS" inside.</p>
+<dialog id="dialog">PASS</dialog>
+<script>
+    document.getElementById("dialog").showModal();
+</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/command-line-api-inspect.html b/third_party/WebKit/LayoutTests/http/tests/inspector/command-line-api-inspect.html
index 38320ea..8ee9b7d4 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/command-line-api-inspect.html
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/command-line-api-inspect.html
@@ -11,7 +11,7 @@
 
 function test()
 {
-    InspectorTest.addSniffer(WebInspector.Main.prototype, "inspect", sniffInspect, true);
+    InspectorTest.addSniffer(WebInspector.RuntimeModel.prototype, "_inspectRequested", sniffInspect, true);
 
     function sniffInspect(objectId, hints)
     {
diff --git a/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html b/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html
index 4fbc52b..131e1d05 100644
--- a/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html
+++ b/third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-avtracks.html
@@ -14,37 +14,40 @@
           {
               var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
               test.expectEvent(sourceBuffer, 'updateend', 'initSegment append ended.');
+              test.expectEvent(sourceBuffer.audioTracks, 'addtrack', 'sourceBuffer.videoTracks addtrack event');
+              test.expectEvent(sourceBuffer.videoTracks, 'addtrack', 'sourceBuffer.videoTracks addtrack event');
+              test.expectEvent(mediaElement.audioTracks, 'addtrack', 'mediaElement.videoTracks addtrack event');
+              test.expectEvent(mediaElement.videoTracks, 'addtrack', 'mediaElement.videoTracks addtrack event');
               sourceBuffer.appendBuffer(initSegment);
               test.waitForExpectedEvents(function()
               {
-                // TODO(servolk): Find a way to make tests more concise in JS
-                assert_equals(mediaElement.videoTracks.length, 1, "videoTracks.length");
-                assert_equals(mediaElement.videoTracks[0].id, "1", "videoTrack.id");
-                assert_equals(mediaElement.videoTracks[0].kind, "main", "videoTrack.kind");
-                assert_equals(mediaElement.videoTracks[0].label, "", "videoTrack.label");
-                assert_equals(mediaElement.videoTracks[0].language, "eng", "videoTrack.language");
-
-                assert_equals(mediaElement.audioTracks.length, 1, "audioTracks.length");
-                assert_equals(mediaElement.audioTracks[0].id, "2", "audioTrack.id");
-                assert_equals(mediaElement.audioTracks[0].kind, "main", "audioTrack.kind");
-                assert_equals(mediaElement.audioTracks[0].label, "", "audioTrack.label");
-                assert_equals(mediaElement.audioTracks[0].language, "eng", "audioTrack.language");
-
                 assert_equals(sourceBuffer.videoTracks.length, 1, "videoTracks.length");
                 assert_equals(sourceBuffer.videoTracks[0].id, "1", "videoTrack.id");
                 assert_equals(sourceBuffer.videoTracks[0].kind, "main", "videoTrack.kind");
                 assert_equals(sourceBuffer.videoTracks[0].label, "", "videoTrack.label");
                 assert_equals(sourceBuffer.videoTracks[0].language, "eng", "videoTrack.language");
+                assert_equals(sourceBuffer.videoTracks[0].sourceBuffer, sourceBuffer, "videoTrack.sourceBuffer");
+                // The first video track is selected by default.
+                assert_true(sourceBuffer.videoTracks[0].selected, "sourceBuffer.videoTracks[0].selected");
 
                 assert_equals(sourceBuffer.audioTracks.length, 1, "audioTracks.length");
                 assert_equals(sourceBuffer.audioTracks[0].id, "2", "audioTrack.id");
                 assert_equals(sourceBuffer.audioTracks[0].kind, "main", "audioTrack.kind");
                 assert_equals(sourceBuffer.audioTracks[0].label, "", "audioTrack.label");
                 assert_equals(sourceBuffer.audioTracks[0].language, "eng", "audioTrack.language");
+                assert_equals(sourceBuffer.audioTracks[0].sourceBuffer, sourceBuffer, "audioTrack.sourceBuffer");
+                // The first audio track is enabled by default.
+                assert_true(sourceBuffer.audioTracks[0].enabled, "sourceBuffer.audioTracks[0].enabled");
+
+                assert_equals(mediaElement.videoTracks.length, 1, "videoTracks.length");
+                assert_equals(mediaElement.videoTracks[0], sourceBuffer.videoTracks[0], "mediaElement.videoTrack == sourceBuffer.videoTrack");
+
+                assert_equals(mediaElement.audioTracks.length, 1, "audioTracks.length");
+                assert_equals(mediaElement.audioTracks[0], sourceBuffer.audioTracks[0], "mediaElement.audioTrack == sourceBuffer.audioTrack");
 
                 test.done();
               });
-          }, "MediaSource audio tracks");
+          }, "MediaSource media track properties");
         </script>
     </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/foreign-fetch-worker.js b/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/foreign-fetch-worker.js
index 0e645a1f..2be0db2 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/foreign-fetch-worker.js
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/resources/foreign-fetch-worker.js
@@ -5,5 +5,5 @@
   });
 
 self.addEventListener('foreignfetch', function(event) {
-    event.respondWith(new Response('Foreign Fetch'));
+    event.respondWith({response: new Response('Foreign Fetch')});
   });
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index 8bb2beb..7f0881a 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -251,6 +251,10 @@
     method readAsBinaryString
     method readAsDataURL
     method readAsText
+interface ForeignFetchEvent : ExtendableEvent
+    getter request
+    method constructor
+    method respondWith
 interface FormData
     method append
     method constructor
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-with-context-id-equal-zero-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-with-context-id-equal-zero-expected.txt
new file mode 100644
index 0000000..e25e8a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-with-context-id-equal-zero-expected.txt
@@ -0,0 +1,9 @@
+Tests that DevTools doesn't crash on Runtime.evaluate with contextId equals 0.
+{
+    error : {
+        code : -32000
+        message : Cannot find context with specified id
+    }
+    id : 0
+}
+
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-with-context-id-equal-zero.html b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-with-context-id-equal-zero.html
new file mode 100644
index 0000000..e2e2b98
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-with-context-id-equal-zero.html
@@ -0,0 +1,22 @@
+<html>
+<head>
+<script type="text/javascript" src="../../http/tests/inspector-protocol/inspector-protocol-test.js"></script>
+<script>
+
+function test()
+{
+    InspectorTest.sendCommand("Runtime.evaluate", { "contextId": 0, "expression": "" }, evaluateCallback);
+
+    function evaluateCallback(result)
+    {
+        result.id = 0;
+        InspectorTest.logObject(result);
+        InspectorTest.completeTest();
+    }
+}
+</script>
+</head>
+<body onLoad="runTest();">
+Tests that DevTools doesn't crash on Runtime.evaluate with contextId equals 0.
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-without-enabling-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-without-enabling-expected.txt
index d10064f..f640692a 100644
--- a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-without-enabling-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-evaluate-without-enabling-expected.txt
@@ -3,7 +3,7 @@
 {
     error : {
         code : -32000
-        message : Inspected frame has gone
+        message : Cannot find context with specified id
     }
     id : 0
 }
diff --git a/third_party/WebKit/LayoutTests/inspector/agents-enable-disable-expected.txt b/third_party/WebKit/LayoutTests/inspector/agents-enable-disable-expected.txt
index 737f428..8dba83c1 100644
--- a/third_party/WebKit/LayoutTests/inspector/agents-enable-disable-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/agents-enable-disable-expected.txt
@@ -9,7 +9,6 @@
 Debugger.disable finished successfully
 HeapProfiler.disable finished successfully
 IndexedDB.disable finished successfully
-Inspector.disable finished successfully
 LayerTree.disable finished successfully
 Network.disable finished successfully
 Page.disable finished successfully
@@ -44,9 +43,6 @@
 IndexedDB.enable finished successfully
 IndexedDB.disable finished successfully
 
-Inspector.enable finished successfully
-Inspector.disable finished successfully
-
 LayerTree.enable finished successfully
 LayerTree.disable finished successfully
 
diff --git a/third_party/WebKit/LayoutTests/inspector/agents-enable-disable.html b/third_party/WebKit/LayoutTests/inspector/agents-enable-disable.html
index 2b69627..c121d0c 100644
--- a/third_party/WebKit/LayoutTests/inspector/agents-enable-disable.html
+++ b/third_party/WebKit/LayoutTests/inspector/agents-enable-disable.html
@@ -25,7 +25,7 @@
     targets.forEach(function(target) {
         var agentNames = Object.keys(target._agentsMap).filter(function(agentName) {
             var agent = target._agentsMap[agentName];
-            return agent["enable"] && agent["disable"] && agentName !== "ServiceWorker" && agentName !== "Security";  // async wrt others.
+            return agent["enable"] && agent["disable"] && agentName !== "ServiceWorker" && agentName !== "Security" && agentName !== "Inspector";  // async wrt others.
         }).sort();
 
         function disableAgent(agentName)
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-viewport-selection.html b/third_party/WebKit/LayoutTests/inspector/console/console-viewport-selection.html
index 3a11b68..7dd3b13f 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-viewport-selection.html
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-viewport-selection.html
@@ -97,7 +97,7 @@
         function testScrollSelectionAwayDown(next)
         {
             consoleView._immediatelyScrollToBottom();
-            viewport.refresh();
+            viewport._innerRefresh(true);
             dumpSelectionModel();
             dumpViewportRenderedItems();
             next();
@@ -204,21 +204,21 @@
 
     function dumpSelectionModel()
     {
-        viewport.refresh();
+        viewport._innerRefresh(true);
         var text = String.sprintf("anchor = %s, head = %s", dumpSelectionModelElement(viewport._anchorSelection), dumpSelectionModelElement(viewport._headSelection));
         InspectorTest.addResult(text);
     }
 
     function dumpSelectionText()
     {
-        viewport.refresh();
+        viewport._innerRefresh(true);
         var text = viewport._selectedText();
         InspectorTest.addResult("Selected text:<<<EOL\n" + text + "\nEOL");
     }
 
     function dumpViewportRenderedItems()
     {
-        viewport.refresh();
+        viewport._innerRefresh(true);
         var firstVisibleIndex = viewport.firstVisibleIndex();
         var lastVisibleIndex = viewport.lastVisibleIndex();
         InspectorTest.addResult("first visible message index: " + firstVisibleIndex);
@@ -226,7 +226,7 @@
 
     function emulateShiftClickOnMessage(messageIndex)
     {
-        viewport.refresh();
+        viewport._innerRefresh(true);
         var selection = window.getSelection();
         if (!selection || !selection.rangeCount) {
             InspectorTest.addResult("FAILURE: There's no selection");
@@ -235,7 +235,7 @@
         viewport.forceScrollItemToBeFirst(Math.max(messageIndex - minimumViewportMessagesCount / 2, 0));
         var element = consoleView.itemElement(messageIndex).element();
         selection.setBaseAndExtent(selection.anchorNode, selection.anchorOffset, element, 0);
-        viewport.refresh();
+        viewport._innerRefresh(true);
     }
 
     function selectionContainerAndOffset(container, offset)
@@ -267,7 +267,7 @@
         var from = selectionContainerAndOffset(consoleView.itemElement(fromMessage).element(), fromTextOffset);
         var to = selectionContainerAndOffset(consoleView.itemElement(toMessage).element(), toTextOffset);
         window.getSelection().setBaseAndExtent(from.container, from.offset, to.container, to.offset);
-        viewport.refresh();
+        viewport._innerRefresh(true);
     }
 }
 </script>
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom-expected.txt
index 999b585..e3888ae 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom-expected.txt
@@ -1,302 +1,600 @@
-CONSOLE MESSAGE: line 9: Message #0
-CONSOLE MESSAGE: line 9: Message #1
-CONSOLE MESSAGE: line 9: Message #2
-CONSOLE MESSAGE: line 9: Message #3
-CONSOLE MESSAGE: line 9: Message #4
-CONSOLE MESSAGE: line 9: Message #5
-CONSOLE MESSAGE: line 9: Message #6
-CONSOLE MESSAGE: line 9: Message #7
-CONSOLE MESSAGE: line 9: Message #8
-CONSOLE MESSAGE: line 9: Message #9
-CONSOLE MESSAGE: line 9: Message #10
-CONSOLE MESSAGE: line 9: Message #11
-CONSOLE MESSAGE: line 9: Message #12
-CONSOLE MESSAGE: line 9: Message #13
-CONSOLE MESSAGE: line 9: Message #14
-CONSOLE MESSAGE: line 9: Message #15
-CONSOLE MESSAGE: line 9: Message #16
-CONSOLE MESSAGE: line 9: Message #17
-CONSOLE MESSAGE: line 9: Message #18
-CONSOLE MESSAGE: line 9: Message #19
-CONSOLE MESSAGE: line 9: Message #20
-CONSOLE MESSAGE: line 9: Message #21
-CONSOLE MESSAGE: line 9: Message #22
-CONSOLE MESSAGE: line 9: Message #23
-CONSOLE MESSAGE: line 9: Message #24
-CONSOLE MESSAGE: line 9: Message #25
-CONSOLE MESSAGE: line 9: Message #26
-CONSOLE MESSAGE: line 9: Message #27
-CONSOLE MESSAGE: line 9: Message #28
-CONSOLE MESSAGE: line 9: Message #29
-CONSOLE MESSAGE: line 9: Message #30
-CONSOLE MESSAGE: line 9: Message #31
-CONSOLE MESSAGE: line 9: Message #32
-CONSOLE MESSAGE: line 9: Message #33
-CONSOLE MESSAGE: line 9: Message #34
-CONSOLE MESSAGE: line 9: Message #35
-CONSOLE MESSAGE: line 9: Message #36
-CONSOLE MESSAGE: line 9: Message #37
-CONSOLE MESSAGE: line 9: Message #38
-CONSOLE MESSAGE: line 9: Message #39
-CONSOLE MESSAGE: line 9: Message #40
-CONSOLE MESSAGE: line 9: Message #41
-CONSOLE MESSAGE: line 9: Message #42
-CONSOLE MESSAGE: line 9: Message #43
-CONSOLE MESSAGE: line 9: Message #44
-CONSOLE MESSAGE: line 9: Message #45
-CONSOLE MESSAGE: line 9: Message #46
-CONSOLE MESSAGE: line 9: Message #47
-CONSOLE MESSAGE: line 9: Message #48
-CONSOLE MESSAGE: line 9: Message #49
-CONSOLE MESSAGE: line 9: Message #50
-CONSOLE MESSAGE: line 9: Message #51
-CONSOLE MESSAGE: line 9: Message #52
-CONSOLE MESSAGE: line 9: Message #53
-CONSOLE MESSAGE: line 9: Message #54
-CONSOLE MESSAGE: line 9: Message #55
-CONSOLE MESSAGE: line 9: Message #56
-CONSOLE MESSAGE: line 9: Message #57
-CONSOLE MESSAGE: line 9: Message #58
-CONSOLE MESSAGE: line 9: Message #59
-CONSOLE MESSAGE: line 9: Message #60
-CONSOLE MESSAGE: line 9: Message #61
-CONSOLE MESSAGE: line 9: Message #62
-CONSOLE MESSAGE: line 9: Message #63
-CONSOLE MESSAGE: line 9: Message #64
-CONSOLE MESSAGE: line 9: Message #65
-CONSOLE MESSAGE: line 9: Message #66
-CONSOLE MESSAGE: line 9: Message #67
-CONSOLE MESSAGE: line 9: Message #68
-CONSOLE MESSAGE: line 9: Message #69
-CONSOLE MESSAGE: line 9: Message #70
-CONSOLE MESSAGE: line 9: Message #71
-CONSOLE MESSAGE: line 9: Message #72
-CONSOLE MESSAGE: line 9: Message #73
-CONSOLE MESSAGE: line 9: Message #74
-CONSOLE MESSAGE: line 9: Message #75
-CONSOLE MESSAGE: line 9: Message #76
-CONSOLE MESSAGE: line 9: Message #77
-CONSOLE MESSAGE: line 9: Message #78
-CONSOLE MESSAGE: line 9: Message #79
-CONSOLE MESSAGE: line 9: Message #80
-CONSOLE MESSAGE: line 9: Message #81
-CONSOLE MESSAGE: line 9: Message #82
-CONSOLE MESSAGE: line 9: Message #83
-CONSOLE MESSAGE: line 9: Message #84
-CONSOLE MESSAGE: line 9: Message #85
-CONSOLE MESSAGE: line 9: Message #86
-CONSOLE MESSAGE: line 9: Message #87
-CONSOLE MESSAGE: line 9: Message #88
-CONSOLE MESSAGE: line 9: Message #89
-CONSOLE MESSAGE: line 9: Message #90
-CONSOLE MESSAGE: line 9: Message #91
-CONSOLE MESSAGE: line 9: Message #92
-CONSOLE MESSAGE: line 9: Message #93
-CONSOLE MESSAGE: line 9: Message #94
-CONSOLE MESSAGE: line 9: Message #95
-CONSOLE MESSAGE: line 9: Message #96
-CONSOLE MESSAGE: line 9: Message #97
-CONSOLE MESSAGE: line 9: Message #98
-CONSOLE MESSAGE: line 9: Message #99
-CONSOLE MESSAGE: line 9: Message #100
-CONSOLE MESSAGE: line 9: Message #101
-CONSOLE MESSAGE: line 9: Message #102
-CONSOLE MESSAGE: line 9: Message #103
-CONSOLE MESSAGE: line 9: Message #104
-CONSOLE MESSAGE: line 9: Message #105
-CONSOLE MESSAGE: line 9: Message #106
-CONSOLE MESSAGE: line 9: Message #107
-CONSOLE MESSAGE: line 9: Message #108
-CONSOLE MESSAGE: line 9: Message #109
-CONSOLE MESSAGE: line 9: Message #110
-CONSOLE MESSAGE: line 9: Message #111
-CONSOLE MESSAGE: line 9: Message #112
-CONSOLE MESSAGE: line 9: Message #113
-CONSOLE MESSAGE: line 9: Message #114
-CONSOLE MESSAGE: line 9: Message #115
-CONSOLE MESSAGE: line 9: Message #116
-CONSOLE MESSAGE: line 9: Message #117
-CONSOLE MESSAGE: line 9: Message #118
-CONSOLE MESSAGE: line 9: Message #119
-CONSOLE MESSAGE: line 9: Message #120
-CONSOLE MESSAGE: line 9: Message #121
-CONSOLE MESSAGE: line 9: Message #122
-CONSOLE MESSAGE: line 9: Message #123
-CONSOLE MESSAGE: line 9: Message #124
-CONSOLE MESSAGE: line 9: Message #125
-CONSOLE MESSAGE: line 9: Message #126
-CONSOLE MESSAGE: line 9: Message #127
-CONSOLE MESSAGE: line 9: Message #128
-CONSOLE MESSAGE: line 9: Message #129
-CONSOLE MESSAGE: line 9: Message #130
-CONSOLE MESSAGE: line 9: Message #131
-CONSOLE MESSAGE: line 9: Message #132
-CONSOLE MESSAGE: line 9: Message #133
-CONSOLE MESSAGE: line 9: Message #134
-CONSOLE MESSAGE: line 9: Message #135
-CONSOLE MESSAGE: line 9: Message #136
-CONSOLE MESSAGE: line 9: Message #137
-CONSOLE MESSAGE: line 9: Message #138
-CONSOLE MESSAGE: line 9: Message #139
-CONSOLE MESSAGE: line 9: Message #140
-CONSOLE MESSAGE: line 9: Message #141
-CONSOLE MESSAGE: line 9: Message #142
-CONSOLE MESSAGE: line 9: Message #143
-CONSOLE MESSAGE: line 9: Message #144
-CONSOLE MESSAGE: line 9: Message #145
-CONSOLE MESSAGE: line 9: Message #146
-CONSOLE MESSAGE: line 9: Message #147
-CONSOLE MESSAGE: line 9: Message #148
+CONSOLE MESSAGE: line 9: Multiline
+Message #0
+CONSOLE MESSAGE: line 9: Multiline
+Message #1
+CONSOLE MESSAGE: line 9: Multiline
+Message #2
+CONSOLE MESSAGE: line 9: Multiline
+Message #3
+CONSOLE MESSAGE: line 9: Multiline
+Message #4
+CONSOLE MESSAGE: line 9: Multiline
+Message #5
+CONSOLE MESSAGE: line 9: Multiline
+Message #6
+CONSOLE MESSAGE: line 9: Multiline
+Message #7
+CONSOLE MESSAGE: line 9: Multiline
+Message #8
+CONSOLE MESSAGE: line 9: Multiline
+Message #9
+CONSOLE MESSAGE: line 9: Multiline
+Message #10
+CONSOLE MESSAGE: line 9: Multiline
+Message #11
+CONSOLE MESSAGE: line 9: Multiline
+Message #12
+CONSOLE MESSAGE: line 9: Multiline
+Message #13
+CONSOLE MESSAGE: line 9: Multiline
+Message #14
+CONSOLE MESSAGE: line 9: Multiline
+Message #15
+CONSOLE MESSAGE: line 9: Multiline
+Message #16
+CONSOLE MESSAGE: line 9: Multiline
+Message #17
+CONSOLE MESSAGE: line 9: Multiline
+Message #18
+CONSOLE MESSAGE: line 9: Multiline
+Message #19
+CONSOLE MESSAGE: line 9: Multiline
+Message #20
+CONSOLE MESSAGE: line 9: Multiline
+Message #21
+CONSOLE MESSAGE: line 9: Multiline
+Message #22
+CONSOLE MESSAGE: line 9: Multiline
+Message #23
+CONSOLE MESSAGE: line 9: Multiline
+Message #24
+CONSOLE MESSAGE: line 9: Multiline
+Message #25
+CONSOLE MESSAGE: line 9: Multiline
+Message #26
+CONSOLE MESSAGE: line 9: Multiline
+Message #27
+CONSOLE MESSAGE: line 9: Multiline
+Message #28
+CONSOLE MESSAGE: line 9: Multiline
+Message #29
+CONSOLE MESSAGE: line 9: Multiline
+Message #30
+CONSOLE MESSAGE: line 9: Multiline
+Message #31
+CONSOLE MESSAGE: line 9: Multiline
+Message #32
+CONSOLE MESSAGE: line 9: Multiline
+Message #33
+CONSOLE MESSAGE: line 9: Multiline
+Message #34
+CONSOLE MESSAGE: line 9: Multiline
+Message #35
+CONSOLE MESSAGE: line 9: Multiline
+Message #36
+CONSOLE MESSAGE: line 9: Multiline
+Message #37
+CONSOLE MESSAGE: line 9: Multiline
+Message #38
+CONSOLE MESSAGE: line 9: Multiline
+Message #39
+CONSOLE MESSAGE: line 9: Multiline
+Message #40
+CONSOLE MESSAGE: line 9: Multiline
+Message #41
+CONSOLE MESSAGE: line 9: Multiline
+Message #42
+CONSOLE MESSAGE: line 9: Multiline
+Message #43
+CONSOLE MESSAGE: line 9: Multiline
+Message #44
+CONSOLE MESSAGE: line 9: Multiline
+Message #45
+CONSOLE MESSAGE: line 9: Multiline
+Message #46
+CONSOLE MESSAGE: line 9: Multiline
+Message #47
+CONSOLE MESSAGE: line 9: Multiline
+Message #48
+CONSOLE MESSAGE: line 9: Multiline
+Message #49
+CONSOLE MESSAGE: line 9: Multiline
+Message #50
+CONSOLE MESSAGE: line 9: Multiline
+Message #51
+CONSOLE MESSAGE: line 9: Multiline
+Message #52
+CONSOLE MESSAGE: line 9: Multiline
+Message #53
+CONSOLE MESSAGE: line 9: Multiline
+Message #54
+CONSOLE MESSAGE: line 9: Multiline
+Message #55
+CONSOLE MESSAGE: line 9: Multiline
+Message #56
+CONSOLE MESSAGE: line 9: Multiline
+Message #57
+CONSOLE MESSAGE: line 9: Multiline
+Message #58
+CONSOLE MESSAGE: line 9: Multiline
+Message #59
+CONSOLE MESSAGE: line 9: Multiline
+Message #60
+CONSOLE MESSAGE: line 9: Multiline
+Message #61
+CONSOLE MESSAGE: line 9: Multiline
+Message #62
+CONSOLE MESSAGE: line 9: Multiline
+Message #63
+CONSOLE MESSAGE: line 9: Multiline
+Message #64
+CONSOLE MESSAGE: line 9: Multiline
+Message #65
+CONSOLE MESSAGE: line 9: Multiline
+Message #66
+CONSOLE MESSAGE: line 9: Multiline
+Message #67
+CONSOLE MESSAGE: line 9: Multiline
+Message #68
+CONSOLE MESSAGE: line 9: Multiline
+Message #69
+CONSOLE MESSAGE: line 9: Multiline
+Message #70
+CONSOLE MESSAGE: line 9: Multiline
+Message #71
+CONSOLE MESSAGE: line 9: Multiline
+Message #72
+CONSOLE MESSAGE: line 9: Multiline
+Message #73
+CONSOLE MESSAGE: line 9: Multiline
+Message #74
+CONSOLE MESSAGE: line 9: Multiline
+Message #75
+CONSOLE MESSAGE: line 9: Multiline
+Message #76
+CONSOLE MESSAGE: line 9: Multiline
+Message #77
+CONSOLE MESSAGE: line 9: Multiline
+Message #78
+CONSOLE MESSAGE: line 9: Multiline
+Message #79
+CONSOLE MESSAGE: line 9: Multiline
+Message #80
+CONSOLE MESSAGE: line 9: Multiline
+Message #81
+CONSOLE MESSAGE: line 9: Multiline
+Message #82
+CONSOLE MESSAGE: line 9: Multiline
+Message #83
+CONSOLE MESSAGE: line 9: Multiline
+Message #84
+CONSOLE MESSAGE: line 9: Multiline
+Message #85
+CONSOLE MESSAGE: line 9: Multiline
+Message #86
+CONSOLE MESSAGE: line 9: Multiline
+Message #87
+CONSOLE MESSAGE: line 9: Multiline
+Message #88
+CONSOLE MESSAGE: line 9: Multiline
+Message #89
+CONSOLE MESSAGE: line 9: Multiline
+Message #90
+CONSOLE MESSAGE: line 9: Multiline
+Message #91
+CONSOLE MESSAGE: line 9: Multiline
+Message #92
+CONSOLE MESSAGE: line 9: Multiline
+Message #93
+CONSOLE MESSAGE: line 9: Multiline
+Message #94
+CONSOLE MESSAGE: line 9: Multiline
+Message #95
+CONSOLE MESSAGE: line 9: Multiline
+Message #96
+CONSOLE MESSAGE: line 9: Multiline
+Message #97
+CONSOLE MESSAGE: line 9: Multiline
+Message #98
+CONSOLE MESSAGE: line 9: Multiline
+Message #99
+CONSOLE MESSAGE: line 9: Multiline
+Message #100
+CONSOLE MESSAGE: line 9: Multiline
+Message #101
+CONSOLE MESSAGE: line 9: Multiline
+Message #102
+CONSOLE MESSAGE: line 9: Multiline
+Message #103
+CONSOLE MESSAGE: line 9: Multiline
+Message #104
+CONSOLE MESSAGE: line 9: Multiline
+Message #105
+CONSOLE MESSAGE: line 9: Multiline
+Message #106
+CONSOLE MESSAGE: line 9: Multiline
+Message #107
+CONSOLE MESSAGE: line 9: Multiline
+Message #108
+CONSOLE MESSAGE: line 9: Multiline
+Message #109
+CONSOLE MESSAGE: line 9: Multiline
+Message #110
+CONSOLE MESSAGE: line 9: Multiline
+Message #111
+CONSOLE MESSAGE: line 9: Multiline
+Message #112
+CONSOLE MESSAGE: line 9: Multiline
+Message #113
+CONSOLE MESSAGE: line 9: Multiline
+Message #114
+CONSOLE MESSAGE: line 9: Multiline
+Message #115
+CONSOLE MESSAGE: line 9: Multiline
+Message #116
+CONSOLE MESSAGE: line 9: Multiline
+Message #117
+CONSOLE MESSAGE: line 9: Multiline
+Message #118
+CONSOLE MESSAGE: line 9: Multiline
+Message #119
+CONSOLE MESSAGE: line 9: Multiline
+Message #120
+CONSOLE MESSAGE: line 9: Multiline
+Message #121
+CONSOLE MESSAGE: line 9: Multiline
+Message #122
+CONSOLE MESSAGE: line 9: Multiline
+Message #123
+CONSOLE MESSAGE: line 9: Multiline
+Message #124
+CONSOLE MESSAGE: line 9: Multiline
+Message #125
+CONSOLE MESSAGE: line 9: Multiline
+Message #126
+CONSOLE MESSAGE: line 9: Multiline
+Message #127
+CONSOLE MESSAGE: line 9: Multiline
+Message #128
+CONSOLE MESSAGE: line 9: Multiline
+Message #129
+CONSOLE MESSAGE: line 9: Multiline
+Message #130
+CONSOLE MESSAGE: line 9: Multiline
+Message #131
+CONSOLE MESSAGE: line 9: Multiline
+Message #132
+CONSOLE MESSAGE: line 9: Multiline
+Message #133
+CONSOLE MESSAGE: line 9: Multiline
+Message #134
+CONSOLE MESSAGE: line 9: Multiline
+Message #135
+CONSOLE MESSAGE: line 9: Multiline
+Message #136
+CONSOLE MESSAGE: line 9: Multiline
+Message #137
+CONSOLE MESSAGE: line 9: Multiline
+Message #138
+CONSOLE MESSAGE: line 9: Multiline
+Message #139
+CONSOLE MESSAGE: line 9: Multiline
+Message #140
+CONSOLE MESSAGE: line 9: Multiline
+Message #141
+CONSOLE MESSAGE: line 9: Multiline
+Message #142
+CONSOLE MESSAGE: line 9: Multiline
+Message #143
+CONSOLE MESSAGE: line 9: Multiline
+Message #144
+CONSOLE MESSAGE: line 9: Multiline
+Message #145
+CONSOLE MESSAGE: line 9: Multiline
+Message #146
+CONSOLE MESSAGE: line 9: Multiline
+Message #147
+CONSOLE MESSAGE: line 9: Multiline
+Message #148
 CONSOLE MESSAGE: line 10: hello %cworld
-CONSOLE MESSAGE: line 9: Message #0
-CONSOLE MESSAGE: line 9: Message #1
-CONSOLE MESSAGE: line 9: Message #2
-CONSOLE MESSAGE: line 9: Message #3
-CONSOLE MESSAGE: line 9: Message #4
-CONSOLE MESSAGE: line 9: Message #5
-CONSOLE MESSAGE: line 9: Message #6
-CONSOLE MESSAGE: line 9: Message #7
-CONSOLE MESSAGE: line 9: Message #8
-CONSOLE MESSAGE: line 9: Message #9
-CONSOLE MESSAGE: line 9: Message #10
-CONSOLE MESSAGE: line 9: Message #11
-CONSOLE MESSAGE: line 9: Message #12
-CONSOLE MESSAGE: line 9: Message #13
-CONSOLE MESSAGE: line 9: Message #14
-CONSOLE MESSAGE: line 9: Message #15
-CONSOLE MESSAGE: line 9: Message #16
-CONSOLE MESSAGE: line 9: Message #17
-CONSOLE MESSAGE: line 9: Message #18
-CONSOLE MESSAGE: line 9: Message #19
-CONSOLE MESSAGE: line 9: Message #20
-CONSOLE MESSAGE: line 9: Message #21
-CONSOLE MESSAGE: line 9: Message #22
-CONSOLE MESSAGE: line 9: Message #23
-CONSOLE MESSAGE: line 9: Message #24
-CONSOLE MESSAGE: line 9: Message #25
-CONSOLE MESSAGE: line 9: Message #26
-CONSOLE MESSAGE: line 9: Message #27
-CONSOLE MESSAGE: line 9: Message #28
-CONSOLE MESSAGE: line 9: Message #29
-CONSOLE MESSAGE: line 9: Message #30
-CONSOLE MESSAGE: line 9: Message #31
-CONSOLE MESSAGE: line 9: Message #32
-CONSOLE MESSAGE: line 9: Message #33
-CONSOLE MESSAGE: line 9: Message #34
-CONSOLE MESSAGE: line 9: Message #35
-CONSOLE MESSAGE: line 9: Message #36
-CONSOLE MESSAGE: line 9: Message #37
-CONSOLE MESSAGE: line 9: Message #38
-CONSOLE MESSAGE: line 9: Message #39
-CONSOLE MESSAGE: line 9: Message #40
-CONSOLE MESSAGE: line 9: Message #41
-CONSOLE MESSAGE: line 9: Message #42
-CONSOLE MESSAGE: line 9: Message #43
-CONSOLE MESSAGE: line 9: Message #44
-CONSOLE MESSAGE: line 9: Message #45
-CONSOLE MESSAGE: line 9: Message #46
-CONSOLE MESSAGE: line 9: Message #47
-CONSOLE MESSAGE: line 9: Message #48
-CONSOLE MESSAGE: line 9: Message #49
-CONSOLE MESSAGE: line 9: Message #50
-CONSOLE MESSAGE: line 9: Message #51
-CONSOLE MESSAGE: line 9: Message #52
-CONSOLE MESSAGE: line 9: Message #53
-CONSOLE MESSAGE: line 9: Message #54
-CONSOLE MESSAGE: line 9: Message #55
-CONSOLE MESSAGE: line 9: Message #56
-CONSOLE MESSAGE: line 9: Message #57
-CONSOLE MESSAGE: line 9: Message #58
-CONSOLE MESSAGE: line 9: Message #59
-CONSOLE MESSAGE: line 9: Message #60
-CONSOLE MESSAGE: line 9: Message #61
-CONSOLE MESSAGE: line 9: Message #62
-CONSOLE MESSAGE: line 9: Message #63
-CONSOLE MESSAGE: line 9: Message #64
-CONSOLE MESSAGE: line 9: Message #65
-CONSOLE MESSAGE: line 9: Message #66
-CONSOLE MESSAGE: line 9: Message #67
-CONSOLE MESSAGE: line 9: Message #68
-CONSOLE MESSAGE: line 9: Message #69
-CONSOLE MESSAGE: line 9: Message #70
-CONSOLE MESSAGE: line 9: Message #71
-CONSOLE MESSAGE: line 9: Message #72
-CONSOLE MESSAGE: line 9: Message #73
-CONSOLE MESSAGE: line 9: Message #74
-CONSOLE MESSAGE: line 9: Message #75
-CONSOLE MESSAGE: line 9: Message #76
-CONSOLE MESSAGE: line 9: Message #77
-CONSOLE MESSAGE: line 9: Message #78
-CONSOLE MESSAGE: line 9: Message #79
-CONSOLE MESSAGE: line 9: Message #80
-CONSOLE MESSAGE: line 9: Message #81
-CONSOLE MESSAGE: line 9: Message #82
-CONSOLE MESSAGE: line 9: Message #83
-CONSOLE MESSAGE: line 9: Message #84
-CONSOLE MESSAGE: line 9: Message #85
-CONSOLE MESSAGE: line 9: Message #86
-CONSOLE MESSAGE: line 9: Message #87
-CONSOLE MESSAGE: line 9: Message #88
-CONSOLE MESSAGE: line 9: Message #89
-CONSOLE MESSAGE: line 9: Message #90
-CONSOLE MESSAGE: line 9: Message #91
-CONSOLE MESSAGE: line 9: Message #92
-CONSOLE MESSAGE: line 9: Message #93
-CONSOLE MESSAGE: line 9: Message #94
-CONSOLE MESSAGE: line 9: Message #95
-CONSOLE MESSAGE: line 9: Message #96
-CONSOLE MESSAGE: line 9: Message #97
-CONSOLE MESSAGE: line 9: Message #98
-CONSOLE MESSAGE: line 9: Message #99
-CONSOLE MESSAGE: line 9: Message #100
-CONSOLE MESSAGE: line 9: Message #101
-CONSOLE MESSAGE: line 9: Message #102
-CONSOLE MESSAGE: line 9: Message #103
-CONSOLE MESSAGE: line 9: Message #104
-CONSOLE MESSAGE: line 9: Message #105
-CONSOLE MESSAGE: line 9: Message #106
-CONSOLE MESSAGE: line 9: Message #107
-CONSOLE MESSAGE: line 9: Message #108
-CONSOLE MESSAGE: line 9: Message #109
-CONSOLE MESSAGE: line 9: Message #110
-CONSOLE MESSAGE: line 9: Message #111
-CONSOLE MESSAGE: line 9: Message #112
-CONSOLE MESSAGE: line 9: Message #113
-CONSOLE MESSAGE: line 9: Message #114
-CONSOLE MESSAGE: line 9: Message #115
-CONSOLE MESSAGE: line 9: Message #116
-CONSOLE MESSAGE: line 9: Message #117
-CONSOLE MESSAGE: line 9: Message #118
-CONSOLE MESSAGE: line 9: Message #119
-CONSOLE MESSAGE: line 9: Message #120
-CONSOLE MESSAGE: line 9: Message #121
-CONSOLE MESSAGE: line 9: Message #122
-CONSOLE MESSAGE: line 9: Message #123
-CONSOLE MESSAGE: line 9: Message #124
-CONSOLE MESSAGE: line 9: Message #125
-CONSOLE MESSAGE: line 9: Message #126
-CONSOLE MESSAGE: line 9: Message #127
-CONSOLE MESSAGE: line 9: Message #128
-CONSOLE MESSAGE: line 9: Message #129
-CONSOLE MESSAGE: line 9: Message #130
-CONSOLE MESSAGE: line 9: Message #131
-CONSOLE MESSAGE: line 9: Message #132
-CONSOLE MESSAGE: line 9: Message #133
-CONSOLE MESSAGE: line 9: Message #134
-CONSOLE MESSAGE: line 9: Message #135
-CONSOLE MESSAGE: line 9: Message #136
-CONSOLE MESSAGE: line 9: Message #137
-CONSOLE MESSAGE: line 9: Message #138
-CONSOLE MESSAGE: line 9: Message #139
-CONSOLE MESSAGE: line 9: Message #140
-CONSOLE MESSAGE: line 9: Message #141
-CONSOLE MESSAGE: line 9: Message #142
-CONSOLE MESSAGE: line 9: Message #143
-CONSOLE MESSAGE: line 9: Message #144
-CONSOLE MESSAGE: line 9: Message #145
-CONSOLE MESSAGE: line 9: Message #146
-CONSOLE MESSAGE: line 9: Message #147
-CONSOLE MESSAGE: line 9: Message #148
+CONSOLE MESSAGE: line 9: Multiline
+Message #0
+CONSOLE MESSAGE: line 9: Multiline
+Message #1
+CONSOLE MESSAGE: line 9: Multiline
+Message #2
+CONSOLE MESSAGE: line 9: Multiline
+Message #3
+CONSOLE MESSAGE: line 9: Multiline
+Message #4
+CONSOLE MESSAGE: line 9: Multiline
+Message #5
+CONSOLE MESSAGE: line 9: Multiline
+Message #6
+CONSOLE MESSAGE: line 9: Multiline
+Message #7
+CONSOLE MESSAGE: line 9: Multiline
+Message #8
+CONSOLE MESSAGE: line 9: Multiline
+Message #9
+CONSOLE MESSAGE: line 9: Multiline
+Message #10
+CONSOLE MESSAGE: line 9: Multiline
+Message #11
+CONSOLE MESSAGE: line 9: Multiline
+Message #12
+CONSOLE MESSAGE: line 9: Multiline
+Message #13
+CONSOLE MESSAGE: line 9: Multiline
+Message #14
+CONSOLE MESSAGE: line 9: Multiline
+Message #15
+CONSOLE MESSAGE: line 9: Multiline
+Message #16
+CONSOLE MESSAGE: line 9: Multiline
+Message #17
+CONSOLE MESSAGE: line 9: Multiline
+Message #18
+CONSOLE MESSAGE: line 9: Multiline
+Message #19
+CONSOLE MESSAGE: line 9: Multiline
+Message #20
+CONSOLE MESSAGE: line 9: Multiline
+Message #21
+CONSOLE MESSAGE: line 9: Multiline
+Message #22
+CONSOLE MESSAGE: line 9: Multiline
+Message #23
+CONSOLE MESSAGE: line 9: Multiline
+Message #24
+CONSOLE MESSAGE: line 9: Multiline
+Message #25
+CONSOLE MESSAGE: line 9: Multiline
+Message #26
+CONSOLE MESSAGE: line 9: Multiline
+Message #27
+CONSOLE MESSAGE: line 9: Multiline
+Message #28
+CONSOLE MESSAGE: line 9: Multiline
+Message #29
+CONSOLE MESSAGE: line 9: Multiline
+Message #30
+CONSOLE MESSAGE: line 9: Multiline
+Message #31
+CONSOLE MESSAGE: line 9: Multiline
+Message #32
+CONSOLE MESSAGE: line 9: Multiline
+Message #33
+CONSOLE MESSAGE: line 9: Multiline
+Message #34
+CONSOLE MESSAGE: line 9: Multiline
+Message #35
+CONSOLE MESSAGE: line 9: Multiline
+Message #36
+CONSOLE MESSAGE: line 9: Multiline
+Message #37
+CONSOLE MESSAGE: line 9: Multiline
+Message #38
+CONSOLE MESSAGE: line 9: Multiline
+Message #39
+CONSOLE MESSAGE: line 9: Multiline
+Message #40
+CONSOLE MESSAGE: line 9: Multiline
+Message #41
+CONSOLE MESSAGE: line 9: Multiline
+Message #42
+CONSOLE MESSAGE: line 9: Multiline
+Message #43
+CONSOLE MESSAGE: line 9: Multiline
+Message #44
+CONSOLE MESSAGE: line 9: Multiline
+Message #45
+CONSOLE MESSAGE: line 9: Multiline
+Message #46
+CONSOLE MESSAGE: line 9: Multiline
+Message #47
+CONSOLE MESSAGE: line 9: Multiline
+Message #48
+CONSOLE MESSAGE: line 9: Multiline
+Message #49
+CONSOLE MESSAGE: line 9: Multiline
+Message #50
+CONSOLE MESSAGE: line 9: Multiline
+Message #51
+CONSOLE MESSAGE: line 9: Multiline
+Message #52
+CONSOLE MESSAGE: line 9: Multiline
+Message #53
+CONSOLE MESSAGE: line 9: Multiline
+Message #54
+CONSOLE MESSAGE: line 9: Multiline
+Message #55
+CONSOLE MESSAGE: line 9: Multiline
+Message #56
+CONSOLE MESSAGE: line 9: Multiline
+Message #57
+CONSOLE MESSAGE: line 9: Multiline
+Message #58
+CONSOLE MESSAGE: line 9: Multiline
+Message #59
+CONSOLE MESSAGE: line 9: Multiline
+Message #60
+CONSOLE MESSAGE: line 9: Multiline
+Message #61
+CONSOLE MESSAGE: line 9: Multiline
+Message #62
+CONSOLE MESSAGE: line 9: Multiline
+Message #63
+CONSOLE MESSAGE: line 9: Multiline
+Message #64
+CONSOLE MESSAGE: line 9: Multiline
+Message #65
+CONSOLE MESSAGE: line 9: Multiline
+Message #66
+CONSOLE MESSAGE: line 9: Multiline
+Message #67
+CONSOLE MESSAGE: line 9: Multiline
+Message #68
+CONSOLE MESSAGE: line 9: Multiline
+Message #69
+CONSOLE MESSAGE: line 9: Multiline
+Message #70
+CONSOLE MESSAGE: line 9: Multiline
+Message #71
+CONSOLE MESSAGE: line 9: Multiline
+Message #72
+CONSOLE MESSAGE: line 9: Multiline
+Message #73
+CONSOLE MESSAGE: line 9: Multiline
+Message #74
+CONSOLE MESSAGE: line 9: Multiline
+Message #75
+CONSOLE MESSAGE: line 9: Multiline
+Message #76
+CONSOLE MESSAGE: line 9: Multiline
+Message #77
+CONSOLE MESSAGE: line 9: Multiline
+Message #78
+CONSOLE MESSAGE: line 9: Multiline
+Message #79
+CONSOLE MESSAGE: line 9: Multiline
+Message #80
+CONSOLE MESSAGE: line 9: Multiline
+Message #81
+CONSOLE MESSAGE: line 9: Multiline
+Message #82
+CONSOLE MESSAGE: line 9: Multiline
+Message #83
+CONSOLE MESSAGE: line 9: Multiline
+Message #84
+CONSOLE MESSAGE: line 9: Multiline
+Message #85
+CONSOLE MESSAGE: line 9: Multiline
+Message #86
+CONSOLE MESSAGE: line 9: Multiline
+Message #87
+CONSOLE MESSAGE: line 9: Multiline
+Message #88
+CONSOLE MESSAGE: line 9: Multiline
+Message #89
+CONSOLE MESSAGE: line 9: Multiline
+Message #90
+CONSOLE MESSAGE: line 9: Multiline
+Message #91
+CONSOLE MESSAGE: line 9: Multiline
+Message #92
+CONSOLE MESSAGE: line 9: Multiline
+Message #93
+CONSOLE MESSAGE: line 9: Multiline
+Message #94
+CONSOLE MESSAGE: line 9: Multiline
+Message #95
+CONSOLE MESSAGE: line 9: Multiline
+Message #96
+CONSOLE MESSAGE: line 9: Multiline
+Message #97
+CONSOLE MESSAGE: line 9: Multiline
+Message #98
+CONSOLE MESSAGE: line 9: Multiline
+Message #99
+CONSOLE MESSAGE: line 9: Multiline
+Message #100
+CONSOLE MESSAGE: line 9: Multiline
+Message #101
+CONSOLE MESSAGE: line 9: Multiline
+Message #102
+CONSOLE MESSAGE: line 9: Multiline
+Message #103
+CONSOLE MESSAGE: line 9: Multiline
+Message #104
+CONSOLE MESSAGE: line 9: Multiline
+Message #105
+CONSOLE MESSAGE: line 9: Multiline
+Message #106
+CONSOLE MESSAGE: line 9: Multiline
+Message #107
+CONSOLE MESSAGE: line 9: Multiline
+Message #108
+CONSOLE MESSAGE: line 9: Multiline
+Message #109
+CONSOLE MESSAGE: line 9: Multiline
+Message #110
+CONSOLE MESSAGE: line 9: Multiline
+Message #111
+CONSOLE MESSAGE: line 9: Multiline
+Message #112
+CONSOLE MESSAGE: line 9: Multiline
+Message #113
+CONSOLE MESSAGE: line 9: Multiline
+Message #114
+CONSOLE MESSAGE: line 9: Multiline
+Message #115
+CONSOLE MESSAGE: line 9: Multiline
+Message #116
+CONSOLE MESSAGE: line 9: Multiline
+Message #117
+CONSOLE MESSAGE: line 9: Multiline
+Message #118
+CONSOLE MESSAGE: line 9: Multiline
+Message #119
+CONSOLE MESSAGE: line 9: Multiline
+Message #120
+CONSOLE MESSAGE: line 9: Multiline
+Message #121
+CONSOLE MESSAGE: line 9: Multiline
+Message #122
+CONSOLE MESSAGE: line 9: Multiline
+Message #123
+CONSOLE MESSAGE: line 9: Multiline
+Message #124
+CONSOLE MESSAGE: line 9: Multiline
+Message #125
+CONSOLE MESSAGE: line 9: Multiline
+Message #126
+CONSOLE MESSAGE: line 9: Multiline
+Message #127
+CONSOLE MESSAGE: line 9: Multiline
+Message #128
+CONSOLE MESSAGE: line 9: Multiline
+Message #129
+CONSOLE MESSAGE: line 9: Multiline
+Message #130
+CONSOLE MESSAGE: line 9: Multiline
+Message #131
+CONSOLE MESSAGE: line 9: Multiline
+Message #132
+CONSOLE MESSAGE: line 9: Multiline
+Message #133
+CONSOLE MESSAGE: line 9: Multiline
+Message #134
+CONSOLE MESSAGE: line 9: Multiline
+Message #135
+CONSOLE MESSAGE: line 9: Multiline
+Message #136
+CONSOLE MESSAGE: line 9: Multiline
+Message #137
+CONSOLE MESSAGE: line 9: Multiline
+Message #138
+CONSOLE MESSAGE: line 9: Multiline
+Message #139
+CONSOLE MESSAGE: line 9: Multiline
+Message #140
+CONSOLE MESSAGE: line 9: Multiline
+Message #141
+CONSOLE MESSAGE: line 9: Multiline
+Message #142
+CONSOLE MESSAGE: line 9: Multiline
+Message #143
+CONSOLE MESSAGE: line 9: Multiline
+Message #144
+CONSOLE MESSAGE: line 9: Multiline
+Message #145
+CONSOLE MESSAGE: line 9: Multiline
+Message #146
+CONSOLE MESSAGE: line 9: Multiline
+Message #147
+CONSOLE MESSAGE: line 9: Multiline
+Message #148
 CONSOLE MESSAGE: line 10: hello %cworld
 Verifies viewport stick-to-bottom behavior.
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom.html b/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom.html
index 1d62c5a..9a5004ec 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom.html
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-viewport-stick-to-bottom.html
@@ -6,7 +6,7 @@
 function populateConsoleWithMessages(count)
 {
     for (var i = 0; i < count - 1; ++i)
-        console.log("Message #" + i);
+        console.log("Multiline\nMessage #" + i);
     console.log("hello %cworld", "color: blue");
 }
 
@@ -66,11 +66,12 @@
 
         function testManualScrollDoesNotStickToBottom(next)
         {
+            const manualScrollValue = 3;
             var initialScrollTop = viewport.element.scrollTop;
-            viewport.element.scrollTop = initialScrollTop - 1;
-            viewport.refresh();
+            viewport.element.scrollTop = initialScrollTop - manualScrollValue;
+            viewport._innerRefresh(true);
             var newScrollTop = viewport.element.scrollTop;
-            var isScrollPreserved = initialScrollTop - newScrollTop === 1;
+            var isScrollPreserved = initialScrollTop - newScrollTop === manualScrollValue;
             InspectorTest.addResult("Scroll preserved: " + isScrollPreserved);
             next();
         },
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-console/debugger-command-line-api.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-console/debugger-command-line-api.html
index 61995fc..c736202 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-console/debugger-command-line-api.html
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-console/debugger-command-line-api.html
@@ -12,7 +12,7 @@
 
 var test = function()
 {
-    InspectorTest.addSniffer(WebInspector.Main.prototype, "inspect", inspect);
+    InspectorTest.addSniffer(WebInspector.RuntimeModel.prototype, "_inspectRequested", inspect);
     InspectorTest.addSniffer(WebInspector.Revealer, "revealPromise", oneRevealPromise, true);
 
     function oneRevealPromise(node, revealPromise)
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
index c2465ea..a0c8cab 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -10,6 +10,7 @@
 CONSOLE WARNING: 'webkitIDBDatabase' is deprecated. Please use 'IDBDatabase' instead.
 CONSOLE WARNING: 'webkitIDBCursor' is deprecated. Please use 'IDBCursor' instead.
 CONSOLE WARNING: 'webkitIndexedDB' is deprecated. Please use 'indexedDB' instead.
+CONSOLE ERROR: The 'WebBluetooth' feature is currently enabled in limited trials. Please see [Phosphor console URL] for information on enabling a trial for your site.
 CONSOLE WARNING: 'webkitURL' is deprecated. Please use 'URL' instead.
 This test documents all interface attributes and methods on the global window object and element instances.
 
@@ -3330,6 +3331,7 @@
     getter appCodeName
     getter appName
     getter appVersion
+    getter bluetooth
     getter cookieEnabled
     getter credentials
     getter doNotTrack
@@ -6416,6 +6418,13 @@
     setter search
     setter username
 [GLOBAL OBJECT]
+    attribute BluetoothAdvertisingData
+    attribute BluetoothCharacteristicProperties
+    attribute BluetoothDevice
+    attribute BluetoothRemoteGATTCharacteristic
+    attribute BluetoothRemoteGATTServer
+    attribute BluetoothRemoteGATTService
+    attribute BluetoothUUID
     attribute GCController
     attribute accessibilityController
     attribute applicationCache
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
index 30984411..c43d1cc 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -250,6 +250,7 @@
     getter kind
     getter label
     getter language
+    getter sourceBuffer
     method constructor
     setter enabled
 interface AudioTrackList : EventTarget
@@ -6366,6 +6367,7 @@
     getter label
     getter language
     getter selected
+    getter sourceBuffer
     method constructor
     setter selected
 interface VideoTrackList : EventTarget
diff --git a/third_party/WebKit/Source/config.gni b/third_party/WebKit/Source/config.gni
index e8e0050..a0bed4e 100644
--- a/third_party/WebKit/Source/config.gni
+++ b/third_party/WebKit/Source/config.gni
@@ -28,6 +28,9 @@
   # If true, enables blink logging macros (WTF_LOG and friends) unconditionally.
   # When false, blink logging macros are enabled only if assertions are enabled.
   blink_logging_always_on = false
+
+  # If true, defaults image interpolation to low quality.
+  use_low_quality_image_interpolation = is_android
 }
 
 # Whether Android build uses OpenMAX DL FFT. Currently supported only on
@@ -66,9 +69,11 @@
   feature_defines_list += [ "ENABLE_INPUT_MULTIPLE_FIELDS_UI=1" ]
 }
 
-if (is_android) {
+if (use_low_quality_image_interpolation) {
   feature_defines_list += [ "WTF_USE_LOW_QUALITY_IMAGE_INTERPOLATION=1" ]
-} else {
+}
+
+if (!is_android) {
   feature_defines_list += [
     "WTF_USE_ICCJPEG=1",
     "WTF_USE_QCMSLIB=1",
diff --git a/third_party/WebKit/Source/core/core.gypi b/third_party/WebKit/Source/core/core.gypi
index 60cee51..19b88af 100644
--- a/third_party/WebKit/Source/core/core.gypi
+++ b/third_party/WebKit/Source/core/core.gypi
@@ -246,14 +246,12 @@
             'html/TimeRanges.idl',
             'html/ValidityState.idl',
             'html/VoidCallback.idl',
-            'html/track/AudioTrack.idl',
             'html/track/AudioTrackList.idl',
             'html/track/TextTrack.idl',
             'html/track/TextTrackCue.idl',
             'html/track/TextTrackCueList.idl',
             'html/track/TextTrackList.idl',
             'html/track/TrackEvent.idl',
-            'html/track/VideoTrack.idl',
             'html/track/VideoTrackList.idl',
             'html/track/vtt/VTTCue.idl',
             'html/track/vtt/VTTRegion.idl',
@@ -410,6 +408,8 @@
             'html/HTMLInputElement.idl',
             'html/HTMLMediaElement.idl',
             'html/HTMLVideoElement.idl',
+            'html/track/AudioTrack.idl',
+            'html/track/VideoTrack.idl',
             'inspector/DevToolsHost.idl',
             'workers/DedicatedWorkerGlobalScope.idl',
             'workers/SharedWorkerGlobalScope.idl',
@@ -1825,7 +1825,6 @@
             'inspector/InspectorHistory.h',
             'inspector/InspectorInputAgent.cpp',
             'inspector/InspectorInputAgent.h',
-            'inspector/InspectorInspectorAgent.cpp',
             'inspector/InspectorInstrumentation.cpp',
             'inspector/InspectorInstrumentation.h',
             'inspector/InspectorInstrumentationCustomInl.h',
diff --git a/third_party/WebKit/Source/core/dom/DocumentParserTiming.cpp b/third_party/WebKit/Source/core/dom/DocumentParserTiming.cpp
index 19c489f3..f02c037 100644
--- a/third_party/WebKit/Source/core/dom/DocumentParserTiming.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentParserTiming.cpp
@@ -46,11 +46,14 @@
     m_parserDetached = true;
 }
 
-void DocumentParserTiming::recordParserBlockedOnScriptLoadDuration(double duration)
+void DocumentParserTiming::recordParserBlockedOnScriptLoadDuration(
+    double duration, bool scriptInsertedViaDocumentWrite)
 {
     if (m_parserDetached || m_parserStart == 0.0 || m_parserStop > 0.0)
         return;
     m_parserBlockedOnScriptLoadDuration += duration;
+    if (scriptInsertedViaDocumentWrite)
+        m_parserBlockedOnScriptLoadFromDocumentWriteDuration += duration;
     notifyDocumentParserTimingChanged();
 }
 
diff --git a/third_party/WebKit/Source/core/dom/DocumentParserTiming.h b/third_party/WebKit/Source/core/dom/DocumentParserTiming.h
index 6a2134ee..647eb34d 100644
--- a/third_party/WebKit/Source/core/dom/DocumentParserTiming.h
+++ b/third_party/WebKit/Source/core/dom/DocumentParserTiming.h
@@ -44,9 +44,12 @@
     void markParserDetached();
 
     // Record a duration of time that the parser yielded due to loading a
-    // script, in seconds. This may be called multiple times, once for each time
-    // the parser yields on a script load.
-    void recordParserBlockedOnScriptLoadDuration(double duration);
+    // script, in seconds. scriptInsertedViaDocumentWrite indicates whether the
+    // script causing blocking was inserted via document.write. This may be
+    // called multiple times, once for each time the parser yields on a script
+    // load.
+    void recordParserBlockedOnScriptLoadDuration(
+        double duration, bool scriptInsertedViaDocumentWrite);
 
     // The getters below return monotonically-increasing seconds, or zero if the
     // given parser event has not yet occurred.  See the comments for
@@ -59,6 +62,12 @@
     // recordParseBlockedOnScriptLoadDuration.
     double parserBlockedOnScriptLoadDuration() const { return m_parserBlockedOnScriptLoadDuration; }
 
+    // Returns the sum of all blocking script load durations due to
+    // document.write reported via recordParseBlockedOnScriptLoadDuration. Note
+    // that some uncommon cases are not currently covered by this method. See
+    // crbug/600711 for details.
+    double parserBlockedOnScriptLoadFromDocumentWriteDuration() const { return m_parserBlockedOnScriptLoadFromDocumentWriteDuration; }
+
     DECLARE_VIRTUAL_TRACE();
 
 private:
@@ -68,6 +77,7 @@
     double m_parserStart = 0.0;
     double m_parserStop = 0.0;
     double m_parserBlockedOnScriptLoadDuration = 0.0;
+    double m_parserBlockedOnScriptLoadFromDocumentWriteDuration = 0.0;
     bool m_parserDetached = false;
 
     Member<Document> m_document;
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.cpp b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
index 8c710b2..d4015b7 100644
--- a/third_party/WebKit/Source/core/dom/Fullscreen.cpp
+++ b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
@@ -228,7 +228,7 @@
         //   An algorithm is allowed to show a pop-up if, in the task in which the algorithm is running, either:
         //   - an activation behavior is currently being processed whose click event was trusted, or
         //   - the event listener for a trusted click event is being handled.
-        if (!UserGestureIndicator::processingUserGesture()) {
+        if (!UserGestureIndicator::utilizeUserGesture()) {
             String message = ExceptionMessages::failedToExecute("requestFullScreen",
                 "Element", "API can only be initiated by a user gesture.");
             document()->getExecutionContext()->addConsoleMessage(
diff --git a/third_party/WebKit/Source/core/editing/DOMSelection.cpp b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
index 69c0d67..423475a 100644
--- a/third_party/WebKit/Source/core/editing/DOMSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/DOMSelection.cpp
@@ -383,9 +383,12 @@
     if (!anchor.anchorNode()->isInShadowTree())
         return m_frame->selection().firstRange();
 
+    Node* node = shadowAdjustedNode(anchor);
+    if (!node) // crbug.com/595100
+        return nullptr;
     if (!visibleSelection().isBaseFirst())
-        return Range::create(*anchor.document(), focusNode(), focusOffset(), shadowAdjustedNode(anchor), anchorOffset());
-    return Range::create(*anchor.document(), shadowAdjustedNode(anchor), anchorOffset(), focusNode(), focusOffset());
+        return Range::create(*anchor.document(), focusNode(), focusOffset(), node, anchorOffset());
+    return Range::create(*anchor.document(), node, anchorOffset(), focusNode(), focusOffset());
 }
 
 void DOMSelection::removeAllRanges()
diff --git a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
index 587d7ab..3b8f1bb 100644
--- a/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
+++ b/third_party/WebKit/Source/core/editing/commands/EditorCommand.cpp
@@ -301,7 +301,7 @@
     if (source == CommandFromMenuOrKeyBinding)
         return true;
     Settings* settings = frame.settings();
-    bool defaultValue = (settings && settings->javaScriptCanAccessClipboard()) || UserGestureIndicator::processingUserGesture();
+    bool defaultValue = (settings && settings->javaScriptCanAccessClipboard()) || UserGestureIndicator::utilizeUserGesture();
     return frame.editor().client().canCopyCut(&frame, defaultValue);
 }
 
diff --git a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
index 251ff35..8aa33d1 100644
--- a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
@@ -52,11 +52,6 @@
 CSSStyleSheetResource::CSSStyleSheetResource(const ResourceRequest& resourceRequest, const ResourceLoaderOptions& options, const String& charset)
     : StyleSheetResource(resourceRequest, CSSStyleSheet, options, "text/css", charset)
 {
-    DEFINE_STATIC_LOCAL(const AtomicString, acceptCSS, ("text/css,*/*;q=0.1"));
-
-    // Prefer text/css but accept any type (dell.com serves a stylesheet
-    // as text/html; see <http://bugs.webkit.org/show_bug.cgi?id=11451>).
-    setAccept(acceptCSS);
 }
 
 CSSStyleSheetResource::~CSSStyleSheetResource()
diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.cpp b/third_party/WebKit/Source/core/fetch/ImageResource.cpp
index 0b1d213..7226477 100644
--- a/third_party/WebKit/Source/core/fetch/ImageResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/ImageResource.cpp
@@ -65,7 +65,6 @@
     , m_hasDevicePixelRatioHeaderValue(false)
 {
     WTF_LOG(Timers, "new ImageResource(ResourceRequest) %p", this);
-    setCustomAcceptHeader();
 }
 
 ImageResource::ImageResource(blink::Image* image, const ResourceLoaderOptions& options)
@@ -76,7 +75,6 @@
 {
     WTF_LOG(Timers, "new ImageResource(Image) %p", this);
     setStatus(Cached);
-    setCustomAcceptHeader();
 }
 
 ImageResource::ImageResource(const ResourceRequest& resourceRequest, blink::Image* image, const ResourceLoaderOptions& options)
@@ -85,7 +83,6 @@
 {
     WTF_LOG(Timers, "new ImageResource(ResourceRequest, Image) %p", this);
     setStatus(Cached);
-    setCustomAcceptHeader();
 }
 
 ImageResource::~ImageResource()
@@ -313,12 +310,6 @@
     setEncodedSize(0);
 }
 
-void ImageResource::setCustomAcceptHeader()
-{
-    DEFINE_STATIC_LOCAL(const AtomicString, acceptImages, ("image/webp,image/*,*/*;q=0.8"));
-    setAccept(acceptImages);
-}
-
 inline void ImageResource::createImage()
 {
     // Create the image if it doesn't yet exist.
diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.h b/third_party/WebKit/Source/core/fetch/ImageResource.h
index 4e9c37f..fec8c7c 100644
--- a/third_party/WebKit/Source/core/fetch/ImageResource.h
+++ b/third_party/WebKit/Source/core/fetch/ImageResource.h
@@ -152,7 +152,6 @@
 
     void clear();
 
-    void setCustomAcceptHeader();
     void createImage();
     void updateImage(bool allDataReceived);
     void clearImage();
diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp
index aa6e1f8..7071893 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.cpp
+++ b/third_party/WebKit/Source/core/fetch/Resource.cpp
@@ -261,8 +261,6 @@
 
     ResourceRequest& request(m_revalidatingRequest.isNull() ? m_resourceRequest : m_revalidatingRequest);
     KURL url = request.url();
-    if (!accept().isEmpty())
-        request.setHTTPAccept(accept());
     request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredCredentials);
 
     m_loader = ResourceLoader::create(fetcher, this);
diff --git a/third_party/WebKit/Source/core/fetch/Resource.h b/third_party/WebKit/Source/core/fetch/Resource.h
index e532c1a..75897eb 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.h
+++ b/third_party/WebKit/Source/core/fetch/Resource.h
@@ -198,11 +198,6 @@
 
     String reasonNotDeletable() const;
 
-    // List of acceptable MIME types separated by ",".
-    // A MIME type may contain a wildcard, e.g. "text/*".
-    AtomicString accept() const { return m_accept; }
-    void setAccept(const AtomicString& accept) { m_accept = accept; }
-
     AtomicString httpContentType() const;
 
     bool wasCanceled() const { return m_error.isCancellation(); }
@@ -303,7 +298,6 @@
 
     ResourceRequest m_resourceRequest;
     ResourceRequest m_revalidatingRequest;
-    AtomicString m_accept;
     Member<ResourceLoader> m_loader;
     ResourceLoaderOptions m_options;
 
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
index 27db48b..036617aa 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -1056,15 +1056,10 @@
 
 void ResourceFetcher::updateAllImageResourcePriorities()
 {
-    if (!m_loaders)
-        return;
-
     TRACE_EVENT0("blink", "ResourceLoadPriorityOptimizer::updateAllImageResourcePriorities");
-    for (const auto& loader : m_loaders->hashSet()) {
-        ASSERT(loader);
-        Resource* resource = loader->cachedResource();
-        ASSERT(resource);
-        if (!resource->isImage())
+    for (const auto& documentResource : m_documentResources) {
+        Resource* resource = documentResource.value.get();
+        if (!resource || !resource->isImage() || !resource->isLoading())
             continue;
 
         ResourcePriority resourcePriority = resource->priorityFromObservers();
diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoaderSet.h b/third_party/WebKit/Source/core/fetch/ResourceLoaderSet.h
index 44787c8f..7353cc0 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceLoaderSet.h
+++ b/third_party/WebKit/Source/core/fetch/ResourceLoaderSet.h
@@ -50,7 +50,6 @@
     void cancelAll();
     void setAllDefersLoading(bool);
     int size() const { return m_set.size(); }
-    const SetType& hashSet() const { return m_set; }
 
 private:
     SetType m_set;
diff --git a/third_party/WebKit/Source/core/fetch/ScriptResource.cpp b/third_party/WebKit/Source/core/fetch/ScriptResource.cpp
index a8f61a5b..9ce2ada 100644
--- a/third_party/WebKit/Source/core/fetch/ScriptResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/ScriptResource.cpp
@@ -50,12 +50,6 @@
     : TextResource(resourceRequest, Script, options, "application/javascript", charset)
     , m_integrityDisposition(ScriptIntegrityDisposition::NotChecked)
 {
-    DEFINE_STATIC_LOCAL(const AtomicString, acceptScript, ("*/*"));
-
-    // It's javascript we want.
-    // But some websites think their scripts are <some wrong mimetype here>
-    // and refuse to serve them if we only accept application/x-javascript.
-    setAccept(acceptScript);
 }
 
 ScriptResource::~ScriptResource()
diff --git a/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp b/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp
index 1abd498..4f352d8 100644
--- a/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp
@@ -35,10 +35,22 @@
 
 namespace blink {
 
+static void applyXSLRequestProperties(ResourceRequest& request)
+{
+    request.setRequestContext(WebURLRequest::RequestContextXSLT);
+    // TODO(japhet): Accept: headers can be set manually on XHRs from script,
+    // in the browser process, and... here. The browser process can't tell the
+    // difference between an XSL stylesheet and a CSS stylesheet, so it assumes
+    // stylesheets are all CSS unless they already have an Accept: header set.
+    // Should we teach the browser process the difference?
+    DEFINE_STATIC_LOCAL(const AtomicString, acceptXSLT, ("text/xml, application/xml, application/xhtml+xml, text/xsl, application/rss+xml, application/atom+xml"));
+    request.setHTTPAccept(acceptXSLT);
+}
+
 XSLStyleSheetResource* XSLStyleSheetResource::fetchSynchronously(FetchRequest& request, ResourceFetcher* fetcher)
 {
+    applyXSLRequestProperties(request.mutableResourceRequest());
     request.mutableResourceRequest().setTimeoutInterval(10);
-    request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextXSLT);
     ResourceLoaderOptions options(request.options());
     options.synchronousPolicy = RequestSynchronously;
     request.setOptions(options);
@@ -51,19 +63,13 @@
 XSLStyleSheetResource* XSLStyleSheetResource::fetch(FetchRequest& request, ResourceFetcher* fetcher)
 {
     ASSERT(RuntimeEnabledFeatures::xsltEnabled());
-    request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextXSLT);
+    applyXSLRequestProperties(request.mutableResourceRequest());
     return toXSLStyleSheetResource(fetcher->requestResource(request, XSLStyleSheetResourceFactory()));
 }
 
 XSLStyleSheetResource::XSLStyleSheetResource(const ResourceRequest& resourceRequest, const ResourceLoaderOptions& options, const String& charset)
     : StyleSheetResource(resourceRequest, XSLStyleSheet, options, "text/xsl", charset)
 {
-    ASSERT(RuntimeEnabledFeatures::xsltEnabled());
-    DEFINE_STATIC_LOCAL(const AtomicString, acceptXSLT, ("text/xml, application/xml, application/xhtml+xml, text/xsl, application/rss+xml, application/atom+xml"));
-
-    // It's XML we want.
-    // FIXME: This should accept more general xml formats */*+xml, image/svg+xml for example.
-    setAccept(acceptXSLT);
 }
 
 void XSLStyleSheetResource::didAddClient(ResourceClient* c)
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp
index efb1874..c55347d 100644
--- a/third_party/WebKit/Source/core/frame/Deprecation.cpp
+++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -148,11 +148,8 @@
     Deprecation::countDeprecation(context, feature);
 }
 
-void Deprecation::countDeprecationCrossOriginIframe(const Document& document, UseCounter::Feature feature)
+void Deprecation::countDeprecationCrossOriginIframe(const LocalFrame* frame, UseCounter::Feature feature)
 {
-    LocalFrame* frame = document.frame();
-    if (!frame)
-        return;
     // Check to see if the frame can script into the top level document.
     SecurityOrigin* securityOrigin = frame->securityContext()->getSecurityOrigin();
     Frame* top = frame->tree().top();
@@ -160,6 +157,14 @@
         countDeprecation(frame, feature);
 }
 
+void Deprecation::countDeprecationCrossOriginIframe(const Document& document, UseCounter::Feature feature)
+{
+    LocalFrame* frame = document.frame();
+    if (!frame)
+        return;
+    countDeprecationCrossOriginIframe(frame, feature);
+}
+
 String Deprecation::deprecationMessage(UseCounter::Feature feature)
 {
     switch (feature) {
@@ -362,6 +367,9 @@
     case UseCounter::ResultsAttribute:
         return willBeRemoved("'results' attribute", 53, "5738199536107520");
 
+    case UseCounter::TouchDragUserGestureUsedCrossOrigin:
+        return willBeRemoved("Performing sensitive operations in iframes on touch events which don't represent a tap gesture", 52, "https://www.chromestatus.com/features/5649871251963904");
+
     // Features that aren't deprecated don't have a deprecation message.
     default:
         return String();
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.h b/third_party/WebKit/Source/core/frame/Deprecation.h
index c6d992a1..acd458ba 100644
--- a/third_party/WebKit/Source/core/frame/Deprecation.h
+++ b/third_party/WebKit/Source/core/frame/Deprecation.h
@@ -43,6 +43,7 @@
     static void countDeprecationIfNotPrivateScript(v8::Isolate*, ExecutionContext*, UseCounter::Feature);
     // Count only features if they're being used in an iframe which does not
     // have script access into the top level document.
+    static void countDeprecationCrossOriginIframe(const LocalFrame*, UseCounter::Feature);
     static void countDeprecationCrossOriginIframe(const Document&, UseCounter::Feature);
     static String deprecationMessage(UseCounter::Feature);
 
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
index 3359b22..a9450a2 100644
--- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
@@ -272,7 +272,7 @@
 
 bool LocalDOMWindow::allowPopUp(LocalFrame& firstFrame)
 {
-    if (UserGestureIndicator::processingUserGesture())
+    if (UserGestureIndicator::utilizeUserGesture())
         return true;
 
     Settings* settings = firstFrame.settings();
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index ba5f141..273a10d 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1099,6 +1099,9 @@
         InvalidReportUriDirectiveInMetaCSP = 1281,
         InvalidSandboxDirectiveInMetaCSP = 1282,
         InvalidFrameAncestorsDirectiveInMetaCSP = 1283,
+        TouchDragUserGestureUsed = 1284,
+        TouchDragUserGestureUsedCrossOrigin = 1285,
+        DocumentCreateEventForeignFetchEvent = 1286,
 
         // Add new features immediately above this line. Don't change assigned
         // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp b/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp
index 4fc3f31..92f9d5a 100644
--- a/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp
+++ b/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp
@@ -83,7 +83,7 @@
     // Having this set is okay.
     m_playPending = true;
 
-    if (!UserGestureIndicator::processingUserGesture()) {
+    if (!UserGestureIndicator::utilizeUserGesture()) {
         autoplayMediaEncountered();
 
         if (isEligible()) {
@@ -121,7 +121,7 @@
 
 void AutoplayExperimentHelper::loadMethodCalled()
 {
-    if (UserGestureIndicator::processingUserGesture() && isUserGestureRequiredForPlay()) {
+    if (isUserGestureRequiredForPlay() && UserGestureIndicator::utilizeUserGesture()) {
         recordAutoplayMetric(AutoplayEnabledThroughLoad);
         removeUserGestureRequirement(GesturelessPlaybackEnabledByLoad);
     }
diff --git a/third_party/WebKit/Source/core/html/HTMLFormElement.cpp b/third_party/WebKit/Source/core/html/HTMLFormElement.cpp
index 6140e825..4f35e88 100644
--- a/third_party/WebKit/Source/core/html/HTMLFormElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLFormElement.cpp
@@ -417,7 +417,7 @@
 
     Frame* targetFrame = document().frame()->findFrameForNavigation(submission->target(), *document().frame());
     if (!targetFrame) {
-        if (!LocalDOMWindow::allowPopUp(*document().frame()) && !UserGestureIndicator::processingUserGesture())
+        if (!LocalDOMWindow::allowPopUp(*document().frame()) && !UserGestureIndicator::utilizeUserGesture())
             return;
         targetFrame = document().frame();
     } else {
@@ -465,7 +465,7 @@
         errorMessage = "requestAutocomplete: form is not owned by a displayed document.";
     else if (!shouldAutocomplete())
         errorMessage = "requestAutocomplete: form autocomplete attribute is set to off.";
-    else if (!UserGestureIndicator::processingUserGesture())
+    else if (!UserGestureIndicator::utilizeUserGesture())
         errorMessage = "requestAutocomplete: must be called in response to a user gesture.";
 
     if (!errorMessage.isEmpty()) {
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
index b63151e..9532e3b6 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -2048,6 +2048,7 @@
             return NotAllowedError;
         }
     } else {
+        UserGestureIndicator::utilizeUserGesture();
         // We ask the helper to remove the gesture requirement for us, so that
         // it can record the reason.
         Platform::current()->recordAction(UserMetricsAction("Media_Play_WithGesture"));
@@ -2107,7 +2108,7 @@
 
     // Only buffer aggressively on a user-initiated pause. Other types of pauses
     // (which go directly to pauseInternal()) should not cause this behavior.
-    if (webMediaPlayer() && UserGestureIndicator::processingUserGesture())
+    if (webMediaPlayer() && UserGestureIndicator::utilizeUserGesture())
         webMediaPlayer()->setBufferingStrategy(WebMediaPlayer::BufferingStrategy::Aggressive);
 
     pauseInternal();
diff --git a/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp b/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp
index 5af128b47..30924ee2 100644
--- a/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp
@@ -160,7 +160,7 @@
     if (element().isDisabledFormControl() || !element().layoutObject())
         return;
 
-    if (!UserGestureIndicator::processingUserGesture())
+    if (!UserGestureIndicator::utilizeUserGesture())
         return;
 
     ChromeClient* chromeClient = this->chromeClient();
diff --git a/third_party/WebKit/Source/core/html/forms/FileInputType.cpp b/third_party/WebKit/Source/core/html/forms/FileInputType.cpp
index 67b0a53..d76ced7 100644
--- a/third_party/WebKit/Source/core/html/forms/FileInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/FileInputType.cpp
@@ -134,7 +134,7 @@
     if (element().isDisabledFormControl())
         return;
 
-    if (!UserGestureIndicator::processingUserGesture())
+    if (!UserGestureIndicator::utilizeUserGesture())
         return;
 
     if (ChromeClient* chromeClient = this->chromeClient()) {
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp b/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp
index 6b2b0eb..4ca64b9 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp
@@ -217,7 +217,7 @@
         } else {
             ASSERT(isExecutingScript());
             if (scriptParserBlockingTime > 0.0) {
-                DocumentParserTiming::from(*m_document).recordParserBlockedOnScriptLoadDuration(monotonicallyIncreasingTime() - scriptParserBlockingTime);
+                DocumentParserTiming::from(*m_document).recordParserBlockedOnScriptLoadDuration(monotonicallyIncreasingTime() - scriptParserBlockingTime, scriptLoader->wasCreatedDuringDocumentWrite());
             }
             if (!doExecuteScript(element.get(), sourceCode, scriptStartPosition)) {
                 scriptLoader->dispatchErrorEvent();
diff --git a/third_party/WebKit/Source/core/html/track/TrackBase.cpp b/third_party/WebKit/Source/core/html/track/TrackBase.cpp
index 735987d..d4eb750e 100644
--- a/third_party/WebKit/Source/core/html/track/TrackBase.cpp
+++ b/third_party/WebKit/Source/core/html/track/TrackBase.cpp
@@ -64,6 +64,7 @@
 
 DEFINE_TRACE(TrackBase)
 {
+    Supplementable<TrackBase>::trace(visitor);
     visitor->trace(m_mediaElement);
 }
 
diff --git a/third_party/WebKit/Source/core/html/track/TrackBase.h b/third_party/WebKit/Source/core/html/track/TrackBase.h
index fd1f47f..fd37f1d 100644
--- a/third_party/WebKit/Source/core/html/track/TrackBase.h
+++ b/third_party/WebKit/Source/core/html/track/TrackBase.h
@@ -27,6 +27,7 @@
 #define TrackBase_h
 
 #include "core/CoreExport.h"
+#include "platform/Supplementable.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/WebMediaPlayer.h"
 #include "wtf/RefCounted.h"
@@ -36,7 +37,7 @@
 
 class HTMLMediaElement;
 
-class CORE_EXPORT TrackBase : public GarbageCollectedMixin {
+class CORE_EXPORT TrackBase : public Supplementable<TrackBase> {
 public:
     virtual ~TrackBase();
 
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index f0ab67f..7d09eae 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -50,11 +50,13 @@
 #include "core/events/TouchEvent.h"
 #include "core/events/WheelEvent.h"
 #include "core/fetch/ImageResource.h"
+#include "core/frame/Deprecation.h"
 #include "core/frame/EventHandlerRegistry.h"
 #include "core/frame/FrameHost.h"
 #include "core/frame/FrameView.h"
 #include "core/frame/LocalFrame.h"
 #include "core/frame/Settings.h"
+#include "core/frame/UseCounter.h"
 #include "core/frame/VisualViewport.h"
 #include "core/html/HTMLCanvasElement.h"
 #include "core/html/HTMLDialogElement.h"
@@ -992,7 +994,7 @@
         return WebInputEventResult::HandledSuppressed;
 
     UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture);
-    m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken = gestureIndicator.currentToken();
+    m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken = UserGestureIndicator::currentToken();
 
     cancelFakeMouseMoveEvent();
     if (m_eventHandlerWillResetCapturingMouseEventsNode)
@@ -3759,15 +3761,6 @@
         m_touchSequenceUserGestureToken.clear();
     }
 
-    OwnPtr<UserGestureIndicator> gestureIndicator;
-
-    if (m_touchSequenceUserGestureToken)
-        gestureIndicator = adoptPtr(new UserGestureIndicator(m_touchSequenceUserGestureToken.release()));
-    else
-        gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingUserGesture));
-
-    m_touchSequenceUserGestureToken = gestureIndicator->currentToken();
-
     ASSERT(m_frame->view());
     if (m_touchSequenceDocument && (!m_touchSequenceDocument->frame() || !m_touchSequenceDocument->frame()->view())) {
         // If the active touch document has no frame or view, it's probably being destroyed
@@ -3845,6 +3838,26 @@
         return WebInputEventResult::NotHandled;
     }
 
+    // Whether a touch should be considered a "user gesture" or not is a tricky question.
+    // https://docs.google.com/document/d/1oF1T3O7_E4t1PYHV6gyCwHxOi3ystm0eSL5xZu7nvOg/edit#
+    // TODO(rbyers): Disable user gesture in some cases but retain logging for now (crbug.com/582140).
+    OwnPtr<UserGestureIndicator> gestureIndicator;
+    if (event.touchPoints().size() == 1
+        && event.touchPoints()[0].state() == PlatformTouchPoint::TouchReleased
+        && !event.causesScrollingIfUncanceled()) {
+        // This is a touchend corresponding to a tap, definitely a user gesture.  So don't supply
+        // a UserGestureUtilizedCallback.
+        gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingUserGesture));
+    } else {
+        // This is some other touch event that perhaps shouldn't be considered a user gesture.  So
+        // use a UserGestureUtilizedCallback to get metrics / deprecation warnings.
+        if (m_touchSequenceUserGestureToken)
+            gestureIndicator = adoptPtr(new UserGestureIndicator(m_touchSequenceUserGestureToken.release(), &m_touchSequenceDocument->frame()->eventHandler()));
+        else
+            gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingUserGesture, &m_touchSequenceDocument->frame()->eventHandler()));
+        m_touchSequenceUserGestureToken = UserGestureIndicator::currentToken();
+    }
+
     // Compute and store the common info used by both PointerEvent and TouchEvent.
     HeapVector<TouchInfo> touchInfos(points.size());
 
@@ -3942,6 +3955,14 @@
     return eventResult;
 }
 
+void EventHandler::userGestureUtilized()
+{
+    // This is invoked for UserGestureIndicators created in handleTouchEvent which perhaps represent
+    // touch actions which shouldn't be considered a user-gesture.
+    UseCounter::count(m_frame, UseCounter::TouchDragUserGestureUsed);
+    Deprecation::countDeprecationCrossOriginIframe(m_frame, UseCounter::TouchDragUserGestureUsedCrossOrigin);
+}
+
 void EventHandler::setLastKnownMousePosition(const PlatformMouseEvent& event)
 {
     m_mousePositionIsUnknown = false;
diff --git a/third_party/WebKit/Source/core/input/EventHandler.h b/third_party/WebKit/Source/core/input/EventHandler.h
index a6ba68b..64676ad 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.h
+++ b/third_party/WebKit/Source/core/input/EventHandler.h
@@ -86,7 +86,9 @@
 
 enum class DragInitiator;
 
-class CORE_EXPORT EventHandler final : public GarbageCollectedFinalized<EventHandler> {
+class CORE_EXPORT EventHandler final : public GarbageCollectedFinalized<EventHandler>
+    , public UserGestureUtilizedCallback {
+
     WTF_MAKE_NONCOPYABLE(EventHandler);
 public:
     explicit EventHandler(LocalFrame*);
@@ -207,6 +209,7 @@
     void capsLockStateMayHaveChanged(); // Only called by FrameSelection
 
     WebInputEventResult handleTouchEvent(const PlatformTouchEvent&);
+    void userGestureUtilized() override;
 
     bool useHandCursor(Node*, bool isOverLink);
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.cpp
deleted file mode 100644
index e88b11b5..0000000
--- a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "core/inspector/InspectorInspectorAgent.h"
-
-#include "bindings/core/v8/DOMWrapperWorld.h"
-#include "bindings/core/v8/ScriptController.h"
-#include "core/dom/Document.h"
-#include "core/frame/LocalFrame.h"
-#include "core/loader/DocumentLoader.h"
-#include "core/page/Page.h"
-#include "platform/weborigin/SecurityOrigin.h"
-#include "wtf/text/StringBuilder.h"
-
-namespace blink {
-
-namespace InspectorAgentState {
-static const char inspectorAgentEnabled[] = "inspectorAgentEnabled";
-}
-
-InspectorInspectorAgent::InspectorInspectorAgent()
-    : InspectorBaseAgent<InspectorInspectorAgent, protocol::Frontend::Inspector>("Inspector")
-{
-}
-
-InspectorInspectorAgent::~InspectorInspectorAgent()
-{
-}
-
-void InspectorInspectorAgent::enable(ErrorString*)
-{
-    m_state->setBoolean(InspectorAgentState::inspectorAgentEnabled, true);
-}
-
-void InspectorInspectorAgent::disable(ErrorString*)
-{
-    m_state->setBoolean(InspectorAgentState::inspectorAgentEnabled, false);
-}
-
-void InspectorInspectorAgent::inspect(PassOwnPtr<protocol::Runtime::RemoteObject> objectToInspect, PassOwnPtr<protocol::DictionaryValue> hints)
-{
-    if (frontend() && m_state->booleanProperty(InspectorAgentState::inspectorAgentEnabled, false))
-        frontend()->inspect(objectToInspect, hints);
-}
-
-} // namespace blink
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.h b/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.h
deleted file mode 100644
index 3c57da30..0000000
--- a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef InspectorInspectorAgent_h
-#define InspectorInspectorAgent_h
-
-#include "core/CoreExport.h"
-#include "core/inspector/InspectorBaseAgent.h"
-#include "wtf/PassOwnPtr.h"
-#include "wtf/Vector.h"
-
-namespace blink {
-
-namespace protocol {
-class DictionaryValue;
-}
-
-class CORE_EXPORT InspectorInspectorAgent final : public InspectorBaseAgent<InspectorInspectorAgent, protocol::Frontend::Inspector>, public protocol::Backend::Inspector {
-    WTF_MAKE_NONCOPYABLE(InspectorInspectorAgent);
-public:
-    static RawPtr<InspectorInspectorAgent> create()
-    {
-        return new InspectorInspectorAgent();
-    }
-
-    ~InspectorInspectorAgent() override;
-
-    // Inspector front-end API.
-    void enable(ErrorString*) override;
-    void disable(ErrorString*) override;
-
-    void inspect(PassOwnPtr<protocol::Runtime::RemoteObject> objectToInspect, PassOwnPtr<protocol::DictionaryValue> hints);
-
-private:
-    InspectorInspectorAgent();
-};
-
-} // namespace blink
-
-#endif // !defined(InspectorInspectorAgent_h)
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
index 9655aac..631059e 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
@@ -958,21 +958,18 @@
     return flooredIntSize(getScrollableArea()->scrollOffset());
 }
 
-void LayoutBox::mapScrollingContentsRectToBoxSpace(LayoutRect& rect) const
+bool LayoutBox::mapScrollingContentsRectToBoxSpace(LayoutRect& rect, ApplyOverflowClipFlag applyOverflowClip, VisualRectFlags visualRectFlags) const
 {
-    ASSERT(hasLayer());
-    ASSERT(hasOverflowClip());
+    if (!hasOverflowClip())
+        return true;
 
     LayoutSize offset = LayoutSize(-scrolledContentOffset());
     if (UNLIKELY(hasFlippedBlocksWritingMode()))
         offset.setWidth(-offset.width());
     rect.move(offset);
-}
 
-bool LayoutBox::applyOverflowClip(LayoutRect& rect, VisualRectFlags visualRectFlags) const
-{
-    ASSERT(hasLayer());
-    ASSERT(hasOverflowClip());
+    if (applyOverflowClip == ApplyNonScrollOverflowClip && scrollsOverflow())
+        return true;
 
     flipForWritingMode(rect);
 
@@ -1986,12 +1983,9 @@
     // FIXME: We ignore the lightweight clipping rect that controls use, since if |o| is in mid-layout,
     // its controlClipRect will be wrong. For overflow clip we use the values cached by the layer.
     rect.setLocation(topLeft);
-    if (container->hasOverflowClip()) {
-        LayoutBox* containerBox = toLayoutBox(container);
-        containerBox->mapScrollingContentsRectToBoxSpace(rect);
-        if (container != ancestor && !containerBox->applyOverflowClip(rect, visualRectFlags))
-            return false;
-    }
+
+    if (container->isBox() && !toLayoutBox(container)->mapScrollingContentsRectToBoxSpace(rect, container == ancestor ? ApplyNonScrollOverflowClip : ApplyOverflowClip, visualRectFlags))
+        return false;
 
     if (ancestorSkipped) {
         // If the ancestor is below o, then we need to map the rect into ancestor's coordinates.
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.h b/third_party/WebKit/Source/core/layout/LayoutBox.h
index 1b1cb84..73beb76 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBox.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.h
@@ -49,6 +49,11 @@
     ScrollOffsetClamped
 };
 
+enum ApplyOverflowClipFlag {
+    ApplyOverflowClip,
+    ApplyNonScrollOverflowClip
+};
+
 struct LayoutBoxRareData {
     WTF_MAKE_NONCOPYABLE(LayoutBoxRareData); USING_FAST_MALLOC(LayoutBoxRareData);
 public:
@@ -835,12 +840,12 @@
     virtual bool needsPreferredWidthsRecalculation() const;
 
     IntSize scrolledContentOffset() const;
-    void mapScrollingContentsRectToBoxSpace(LayoutRect&) const;
 
-    // Returns true if the rect actually intersects the clipping region.
+    // Maps a rect in scrolling contents space to box space and apply overflow clip if needed.
+    // Returns true if no clipping applied or the rect actually intersects the clipping region.
     // If edgeInclusive is true, then this method may return true even
     // if the resulting rect has zero area.
-    bool applyOverflowClip(LayoutRect&, VisualRectFlags = DefaultVisualRectFlags) const;
+    bool mapScrollingContentsRectToBoxSpace(LayoutRect&, ApplyOverflowClipFlag, VisualRectFlags = DefaultVisualRectFlags) const;
 
     virtual bool hasRelativeLogicalWidth() const;
     virtual bool hasRelativeLogicalHeight() const;
diff --git a/third_party/WebKit/Source/core/layout/LayoutInline.cpp b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
index 25fcb4d..3fac8ec 100644
--- a/third_party/WebKit/Source/core/layout/LayoutInline.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
@@ -1101,12 +1101,9 @@
     // FIXME: We ignore the lightweight clipping rect that controls use, since if |o| is in mid-layout,
     // its controlClipRect will be wrong. For overflow clip we use the values cached by the layer.
     rect.setLocation(topLeft);
-    if (container->hasOverflowClip()) {
-        LayoutBox* containerBox = toLayoutBox(container);
-        containerBox->mapScrollingContentsRectToBoxSpace(rect);
-        if (container != ancestor && !containerBox->applyOverflowClip(rect, visualRectFlags))
-            return false;
-    }
+
+    if (container->isBox() && !toLayoutBox(container)->mapScrollingContentsRectToBoxSpace(rect, container == ancestor ? ApplyNonScrollOverflowClip : ApplyOverflowClip, visualRectFlags))
+        return false;
 
     if (ancestorSkipped) {
         // If the paintInvalidationContainer is below o, then we need to map the rect into paintInvalidationContainer's coordinates.
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
index 07d286d..d80c768 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -1624,12 +1624,8 @@
         return true;
 
     if (LayoutObject* parent = this->parent()) {
-        if (parent->hasOverflowClip()) {
-            LayoutBox* parentBox = toLayoutBox(parent);
-            parentBox->mapScrollingContentsRectToBoxSpace(rect);
-            if (parent != ancestor && !parentBox->applyOverflowClip(rect, visualRectFlags))
-                return false;
-        }
+        if (parent->isBox() && !toLayoutBox(parent)->mapScrollingContentsRectToBoxSpace(rect, parent == ancestor ? ApplyNonScrollOverflowClip : ApplyOverflowClip, visualRectFlags))
+            return false;
 
         return parent->mapToVisualRectInAncestorSpace(ancestor, rect, visualRectFlags);
     }
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.h b/third_party/WebKit/Source/core/layout/LayoutObject.h
index 2c3fd82..fbbb1ee 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.h
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.h
@@ -1150,7 +1150,7 @@
     // output as if |ancestor| was the root of the page: the rect is modified by any intervening clips, transforms
     // and scrolls between |this| and |ancestor|, but not any above |ancestor|.
     // The output is in the physical, painted coordinate pixel space of |ancestor|.
-    // Overflow clipping is *not* applied for |ancestor| itself.
+    // Overflow clipping is *not* applied for |ancestor| itself if |ancestor| scrolls overflow.
     // The output rect is suitable for purposes such as paint invalidation.
     //
     // If visualRectFlags has the EdgeInclusive bit set, clipping operations will use
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
index 2178eb5..574c7c5e 100644
--- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
+++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
@@ -321,8 +321,8 @@
 
     // Do not clip scroll layer contents because the compositor expects the whole layer
     // to be always invalidated in-time.
-    if (box.usesCompositedScrolling())
-        ASSERT(!m_clipped); // The box should establish paint invalidation container, so no m_clipped inherited.
+    if (box == m_paintInvalidationContainer && box.scrollsOverflow())
+        ASSERT(!m_clipped); // The box establishes paint invalidation container, so no m_clipped inherited.
     else
         addClipRectRelativeToPaintOffset(box.overflowClipRect(LayoutPoint()));
 
@@ -385,10 +385,7 @@
         if (m_clipped)
             rect.intersect(m_clipRect);
 #if ASSERT_SAME_RESULT_SLOW_AND_FAST_PATH
-        // TODO(crbug.com/597902): Slow path misses clipping of paintInvalidationContainer.
         LayoutRect slowPathRect = SVGLayoutSupport::clippedOverflowRectForPaintInvalidation(m_currentObject, *m_paintInvalidationContainer);
-        if (m_clipped)
-            slowPathRect.intersect(m_clipRect);
         assertRectsEqual(m_currentObject, m_paintInvalidationContainer, rect, slowPathRect);
 #endif
     } else {
@@ -404,11 +401,10 @@
 
 static void slowMapToVisualRectInAncestorSpace(const LayoutObject& object, const LayoutBoxModelObject& ancestor, LayoutRect& rect)
 {
-    if (object.isLayoutView()) {
+    if (object.isLayoutView())
         toLayoutView(object).mapToVisualRectInAncestorSpace(&ancestor, rect, InputIsInFrameCoordinates, DefaultVisualRectFlags);
-    } else {
+    else
         object.mapToVisualRectInAncestorSpace(&ancestor, rect);
-    }
 }
 
 void PaintInvalidationState::mapLocalRectToPaintInvalidationContainer(LayoutRect& rect) const
@@ -424,9 +420,6 @@
         if (m_clipped)
             rect.intersect(m_clipRect);
 #if ASSERT_SAME_RESULT_SLOW_AND_FAST_PATH
-        // TODO(crbug.com/597902): Slow path misses clipping of paintInvalidationContainer.
-        if (m_clipped)
-            slowPathRect.intersect(m_clipRect);
         assertRectsEqual(m_currentObject, *m_paintInvalidationContainer, rect, slowPathRect);
 #endif
     } else {
diff --git a/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp b/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp
index 07fc9d6..0ebd400 100644
--- a/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp
+++ b/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp
@@ -222,11 +222,11 @@
     checkPaintInvalidationStateRectMapping(rect, containerOverflowRect, *container, layoutView(), layoutView());
 }
 
-TEST_F(VisualRectMappingTest, ContainerOverflowClip)
+TEST_F(VisualRectMappingTest, ContainerOverflowScroll)
 {
     setBodyInnerHTML(
         "<div id='container' style='position: absolute; top: 111px; left: 222px;"
-        "    border: 10px solid red; overflow: hidden; width: 50px; height: 80px;'>"
+        "    border: 10px solid red; overflow: scroll; width: 50px; height: 80px;'>"
         "    <div id='target' style='box-shadow: 40px 20px black; width: 100px; height: 90px'></div>"
         "</div>");
 
@@ -250,7 +250,7 @@
     EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect));
     // 2 = target_x(0) + container_border_left(10) - scroll_left(8)
     // 3 = target_y(0) + container_border_top(10) - scroll_top(7)
-    // Rect is not clipped by container's overflow clip.
+    // Rect is not clipped by container's overflow clip because of overflow:scroll.
     EXPECT_EQ(LayoutRect(2, 3, 140, 110), rect);
 
     rect = targetOverflowRect;
@@ -276,12 +276,12 @@
     checkPaintInvalidationStateRectMapping(rect, containerOverflowRect, *container, layoutView(), layoutView());
 }
 
-TEST_F(VisualRectMappingTest, ContainerFlippedWritingModeAndOverflowClip)
+TEST_F(VisualRectMappingTest, ContainerFlippedWritingModeAndOverflowScroll)
 {
     setBodyInnerHTML(
         "<div id='container' style='writing-mode: vertical-rl; position: absolute; top: 111px; left: 222px;"
         "    border: solid red; border-width: 10px 20px 30px 40px;"
-        "    overflow: hidden; width: 50px; height: 80px'>"
+        "    overflow: scroll; width: 50px; height: 80px'>"
         "    <div id='target' style='box-shadow: 40px 20px black; width: 100px; height: 90px'></div>"
         "    <div style='width: 100px; height: 100px'></div>"
         "</div>");
@@ -311,7 +311,7 @@
     EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect));
     // -2 = target_physical_x(100) + container_border_left(40) - scroll_left(142)
     // 3 = target_y(0) + container_border_top(10) - scroll_top(7)
-    // Rect is not clipped by container's overflow clip.
+    // Rect is clipped by container's overflow clip because of overflow:scroll.
     EXPECT_EQ(LayoutRect(-2, 3, 140, 110), rect);
 
     rect = targetOverflowRect;
@@ -341,6 +341,74 @@
     checkPaintInvalidationStateRectMapping(rect, containerOverflowRect, *container, layoutView(), layoutView());
 }
 
+TEST_F(VisualRectMappingTest, ContainerOverflowHidden)
+{
+    setBodyInnerHTML(
+        "<div id='container' style='position: absolute; top: 111px; left: 222px;"
+        "    border: 10px solid red; overflow: hidden; width: 50px; height: 80px;'>"
+        "    <div id='target' style='box-shadow: 40px 20px black; width: 100px; height: 90px'></div>"
+        "</div>");
+
+    LayoutBlock* container = toLayoutBlock(getLayoutObjectByElementId("container"));
+    EXPECT_EQ(LayoutUnit(0), container->scrollTop());
+    EXPECT_EQ(LayoutUnit(0), container->scrollLeft());
+    container->setScrollTop(LayoutUnit(27));
+    container->setScrollLeft(LayoutUnit(28));
+    document().view()->updateAllLifecyclePhases();
+
+    LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target"));
+    LayoutRect targetOverflowRect = target->localOverflowRectForPaintInvalidation();
+    // 140 = width(100) + box_shadow_offset_x(40)
+    // 110 = height(90) + box_shadow_offset_y(20)
+    EXPECT_EQ(LayoutRect(0, 0, 140, 110), targetOverflowRect);
+    LayoutRect rect = targetOverflowRect;
+    EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect));
+    EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect);
+
+    rect = targetOverflowRect;
+    EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect));
+    // Rect is clipped by container's overflow clip.
+    EXPECT_EQ(LayoutRect(10, 10, 50, 80), rect);
+}
+
+TEST_F(VisualRectMappingTest, ContainerFlippedWritingModeAndOverflowHidden)
+{
+    setBodyInnerHTML(
+        "<div id='container' style='writing-mode: vertical-rl; position: absolute; top: 111px; left: 222px;"
+        "    border: solid red; border-width: 10px 20px 30px 40px;"
+        "    overflow: hidden; width: 50px; height: 80px'>"
+        "    <div id='target' style='box-shadow: 40px 20px black; width: 100px; height: 90px'></div>"
+        "    <div style='width: 100px; height: 100px'></div>"
+        "</div>");
+
+    LayoutBlock* container = toLayoutBlock(getLayoutObjectByElementId("container"));
+    EXPECT_EQ(LayoutUnit(0), container->scrollTop());
+    // The initial scroll offset is to the left-most because of flipped blocks writing mode.
+    // 150 = total_layout_overflow(100 + 100) - width(50)
+    EXPECT_EQ(LayoutUnit(150), container->scrollLeft());
+    container->setScrollTop(LayoutUnit(7));
+    container->setScrollLeft(LayoutUnit(82)); // Scroll to the right by 8 pixels.
+    document().view()->updateAllLifecyclePhases();
+
+    LayoutBlock* target = toLayoutBlock(getLayoutObjectByElementId("target"));
+    LayoutRect targetOverflowRect = target->localOverflowRectForPaintInvalidation();
+    // -40 = -box_shadow_offset_x(40) (with target's top-right corner as the origin)
+    // 140 = width(100) + box_shadow_offset_x(40)
+    // 110 = height(90) + box_shadow_offset_y(20)
+    EXPECT_EQ(LayoutRect(-40, 0, 140, 110), targetOverflowRect);
+
+    LayoutRect rect = targetOverflowRect;
+    EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(target, rect));
+    // This rect is in physical coordinates of target.
+    EXPECT_EQ(LayoutRect(0, 0, 140, 110), rect);
+
+    rect = targetOverflowRect;
+    EXPECT_TRUE(target->mapToVisualRectInAncestorSpace(container, rect));
+    // 58 = target_physical_x(100) + container_border_left(40) - scroll_left(58)
+    // The other sides of the rect are clipped by container's overflow clip.
+    EXPECT_EQ(LayoutRect(58, 10, 32, 80), rect);
+}
+
 TEST_F(VisualRectMappingTest, DifferentPaintInvalidaitionContainerForAbsolutePosition)
 {
     enableCompositing();
diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
index fb327978..352d0af 100644
--- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
+++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
@@ -39,7 +39,7 @@
 #include "core/inspector/InspectorInstrumentation.h"
 #include "core/layout/LayoutPart.h"
 #include "core/layout/LayoutVideo.h"
-#include "core/layout/LayoutView.h"
+#include "core/layout/api/LayoutViewItem.h"
 #include "core/layout/compositing/CompositedLayerMapping.h"
 #include "core/layout/compositing/CompositingInputsUpdater.h"
 #include "core/layout/compositing/CompositingLayerAssigner.h"
@@ -213,8 +213,8 @@
         // It's possible for trusted Pepper plugins to force hit testing in situations where
         // the frame tree is in an inconsistent state, such as in the middle of frame detach.
         // TODO(bbudge) Remove this check when trusted Pepper plugins are gone.
-        if (localFrame->document()->isActive() && localFrame->contentLayoutObject())
-            localFrame->contentLayoutObject()->compositor()->updateIfNeededRecursiveInternal();
+        if (localFrame->document()->isActive() && !localFrame->contentLayoutItem().isNull())
+            localFrame->contentLayoutItem().compositor()->updateIfNeededRecursiveInternal();
     }
 
     TRACE_EVENT0("blink", "PaintLayerCompositor::updateIfNeededRecursive");
@@ -253,9 +253,9 @@
         if (!child->isLocalFrame())
             continue;
         LocalFrame* localFrame = toLocalFrame(child);
-        if (localFrame->shouldThrottleRendering() || !localFrame->contentLayoutObject())
+        if (localFrame->shouldThrottleRendering() || localFrame->contentLayoutItem().isNull())
             continue;
-        localFrame->contentLayoutObject()->compositor()->assertNoUnresolvedDirtyBits();
+        localFrame->contentLayoutItem().compositor()->assertNoUnresolvedDirtyBits();
     }
 #endif
 }
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
index 143a8f5..655059a 100644
--- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
@@ -1355,7 +1355,7 @@
         m_progressTracker->progressStarted();
         return false;
     }
-    if (!LocalDOMWindow::allowPopUp(*m_frame) && !UserGestureIndicator::processingUserGesture())
+    if (!LocalDOMWindow::allowPopUp(*m_frame) && !UserGestureIndicator::utilizeUserGesture())
         return false;
     client()->loadURLExternally(request, policy, String(), replacesCurrentHistoryItem);
     return false;
diff --git a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
index 8921e669..81d26fd1 100644
--- a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
+++ b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
@@ -96,42 +96,41 @@
         const WebURLRequest::RequestContext context;
         const bool linkLoaderShouldLoadValue;
         const bool expectingLoad;
-        const char* accept;
     } cases[] = {
-        {"http://example.test/cat.jpg", "image", "", "", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*,*/*;q=0.8"},
-        {"http://example.test/cat.js", "script", "", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextScript, true, true, "*/*"},
-        {"http://example.test/cat.css", "style", "", "", ResourceLoadPriorityHigh, WebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"},
+        {"http://example.test/cat.jpg", "image", "", "", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true},
+        {"http://example.test/cat.js", "script", "", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextScript, true, true},
+        {"http://example.test/cat.css", "style", "", "", ResourceLoadPriorityHigh, WebURLRequest::RequestContextStyle, true, true},
         // TODO(yoav): It doesn't seem like the audio context is ever used. That should probably be fixed (or we can consolidate audio and video).
-        {"http://example.test/cat.wav", "media", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, ""},
-        {"http://example.test/cat.mp4", "media", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, ""},
-        {"http://example.test/cat.vtt", "track", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true, ""},
-        {"http://example.test/cat.woff", "font", "", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextFont, true, true, ""},
+        {"http://example.test/cat.wav", "media", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true},
+        {"http://example.test/cat.mp4", "media", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true},
+        {"http://example.test/cat.vtt", "track", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true},
+        {"http://example.test/cat.woff", "font", "", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextFont, true, true},
         // TODO(yoav): subresource should be *very* low priority (rather than low).
-        {"http://example.test/cat.empty", "", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, true, true, ""},
-        {"http://example.test/cat.blob", "blabla", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, false, ""},
-        {"bla://example.test/cat.gif", "image", "", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, false, false, ""},
+        {"http://example.test/cat.empty", "", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, true, true},
+        {"http://example.test/cat.blob", "blabla", "", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, false},
+        {"bla://example.test/cat.gif", "image", "", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, false, false},
         // MIME type tests
-        {"http://example.test/cat.webp", "image", "image/webp", "", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*,*/*;q=0.8"},
-        {"http://example.test/cat.svg", "image", "image/svg+xml", "", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*,*/*;q=0.8"},
-        {"http://example.test/cat.jxr", "image", "image/jxr", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, false, false, ""},
-        {"http://example.test/cat.js", "script", "text/javascript", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextScript, true, true, "*/*"},
-        {"http://example.test/cat.js", "script", "text/coffeescript", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextScript, false, false, ""},
-        {"http://example.test/cat.css", "style", "text/css", "", ResourceLoadPriorityHigh, WebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"},
-        {"http://example.test/cat.css", "style", "text/sass", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextStyle, false, false, ""},
-        {"http://example.test/cat.wav", "media", "audio/wav", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, ""},
-        {"http://example.test/cat.wav", "media", "audio/mp57", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""},
-        {"http://example.test/cat.webm", "media", "video/webm", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, ""},
-        {"http://example.test/cat.mp199", "media", "video/mp199", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""},
-        {"http://example.test/cat.vtt", "track", "text/vtt", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true, ""},
-        {"http://example.test/cat.vtt", "track", "text/subtitlething", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextTrack, false, false, ""},
-        {"http://example.test/cat.woff", "font", "font/woff2", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextFont, true, true, ""},
-        {"http://example.test/cat.woff", "font", "font/woff84", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextFont, false, false, ""},
-        {"http://example.test/cat.empty", "", "foo/bar", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, true, true, ""},
-        {"http://example.test/cat.blob", "blabla", "foo/bar", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, false, ""},
+        {"http://example.test/cat.webp", "image", "image/webp", "", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true},
+        {"http://example.test/cat.svg", "image", "image/svg+xml", "", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true},
+        {"http://example.test/cat.jxr", "image", "image/jxr", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, false, false},
+        {"http://example.test/cat.js", "script", "text/javascript", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextScript, true, true},
+        {"http://example.test/cat.js", "script", "text/coffeescript", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextScript, false, false},
+        {"http://example.test/cat.css", "style", "text/css", "", ResourceLoadPriorityHigh, WebURLRequest::RequestContextStyle, true, true},
+        {"http://example.test/cat.css", "style", "text/sass", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextStyle, false, false},
+        {"http://example.test/cat.wav", "media", "audio/wav", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true},
+        {"http://example.test/cat.wav", "media", "audio/mp57", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo, false, false},
+        {"http://example.test/cat.webm", "media", "video/webm", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true},
+        {"http://example.test/cat.mp199", "media", "video/mp199", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo, false, false},
+        {"http://example.test/cat.vtt", "track", "text/vtt", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true},
+        {"http://example.test/cat.vtt", "track", "text/subtitlething", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextTrack, false, false},
+        {"http://example.test/cat.woff", "font", "font/woff2", "", ResourceLoadPriorityMedium, WebURLRequest::RequestContextFont, true, true},
+        {"http://example.test/cat.woff", "font", "font/woff84", "", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextFont, false, false},
+        {"http://example.test/cat.empty", "", "foo/bar", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, true, true},
+        {"http://example.test/cat.blob", "blabla", "foo/bar", "", ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, false},
         // Media tests
-        {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*,*/*;q=0.8"},
-        {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 400px)", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, true, false, ""},
-        {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, false, false, "image/webp,image/*,*/*;q=0.8"},
+        {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true},
+        {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 400px)", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, true, false},
+        {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, false, false},
     };
 
     // Test the cases with a single header
@@ -168,7 +167,6 @@
                     Resource* resource = preloads->begin().get()->get();
                     ASSERT_EQ(testCase.priority, resource->resourceRequest().priority());
                     ASSERT_EQ(testCase.context, resource->resourceRequest().requestContext());
-                    ASSERT_STREQ(testCase.accept, resource->accept().getString().ascii().data());
                 }
             }
             dummyPageHolder->document().fetcher()->clearPreloads();
diff --git a/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp b/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
index 94e7e6fc..e46878f 100644
--- a/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
+++ b/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
@@ -323,7 +323,7 @@
 {
     // Non-user navigation before the page has finished firing onload should not create a new back/forward item.
     // See https://webkit.org/b/42861 for the original motivation for this.
-    if (!UserGestureIndicator::processingUserGesture() && !targetFrame->document()->loadEventFinished())
+    if (!targetFrame->document()->loadEventFinished() && !UserGestureIndicator::utilizeUserGesture())
         return true;
 
     // Navigation of a subframe during loading of an ancestor frame does not create a new back/forward item.
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp
index a37c621..8489a69 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp
@@ -43,6 +43,7 @@
 
 #include "core/paint/PaintLayerStackingNode.h"
 
+#include "core/layout/LayoutMultiColumnFlowThread.h"
 #include "core/layout/LayoutView.h"
 #include "core/layout/compositing/PaintLayerCompositor.h"
 #include "core/paint/PaintLayer.h"
@@ -136,8 +137,12 @@
     // Append layers for top layer elements after normal layer collection, to ensure they are on top regardless of z-indexes.
     // The layoutObjects of top layer elements are children of the view, sorted in top layer stacking order.
     if (layer()->isRootLayer()) {
-        LayoutView* view = layoutObject()->view();
-        for (LayoutObject* child = view->firstChild(); child; child = child->nextSibling()) {
+        LayoutBlockFlow* rootBlock = layoutObject()->view();
+        // If the viewport is paginated, everything (including "top-layer" elements) gets
+        // redirected to the flow thread. So that's where we have to look, in that case.
+        if (LayoutBlockFlow* multiColumnFlowThread = rootBlock->multiColumnFlowThread())
+            rootBlock = multiColumnFlowThread;
+        for (LayoutObject* child = rootBlock->firstChild(); child; child = child->nextSibling()) {
             Element* childElement = (child->node() && child->node()->isElementNode()) ? toElement(child->node()) : 0;
             if (childElement && childElement->isInTopLayer()) {
                 PaintLayer* layer = toLayoutBoxModelObject(child)->layer();
diff --git a/third_party/WebKit/Source/core/timing/PerformanceTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceTiming.cpp
index 8392c7e..4f7cb4c 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceTiming.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceTiming.cpp
@@ -388,6 +388,15 @@
     return toIntegerMilliseconds(timing->parserBlockedOnScriptLoadDuration());
 }
 
+unsigned long long PerformanceTiming::parseBlockedOnScriptLoadFromDocumentWriteDuration() const
+{
+    const DocumentParserTiming* timing = documentParserTiming();
+    if (!timing)
+        return 0;
+
+    return toIntegerMilliseconds(timing->parserBlockedOnScriptLoadFromDocumentWriteDuration());
+}
+
 DocumentLoader* PerformanceTiming::documentLoader() const
 {
     if (!m_frame)
diff --git a/third_party/WebKit/Source/core/timing/PerformanceTiming.h b/third_party/WebKit/Source/core/timing/PerformanceTiming.h
index 99eba79a..2ebabc9 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceTiming.h
+++ b/third_party/WebKit/Source/core/timing/PerformanceTiming.h
@@ -96,6 +96,7 @@
     unsigned long long parseStart() const;
     unsigned long long parseStop() const;
     unsigned long long parseBlockedOnScriptLoadDuration() const;
+    unsigned long long parseBlockedOnScriptLoadFromDocumentWriteDuration() const;
 
     ScriptValue toJSONForBinding(ScriptState*) const;
 
diff --git a/third_party/WebKit/Source/devtools/front_end/main/Main.js b/third_party/WebKit/Source/devtools/front_end/main/Main.js
index 5e75ce97..4af1079 100644
--- a/third_party/WebKit/Source/devtools/front_end/main/Main.js
+++ b/third_party/WebKit/Source/devtools/front_end/main/Main.js
@@ -544,42 +544,6 @@
 
     /**
      * @override
-     * @param {!RuntimeAgent.RemoteObject} payload
-     * @param {!Object=} hints
-     */
-    inspect: function(payload, hints)
-    {
-        var object = this._mainTarget.runtimeModel.createRemoteObject(payload);
-        if (object.isNode()) {
-            WebInspector.Revealer.revealPromise(object).then(object.release.bind(object));
-            return;
-        }
-
-        if (object.type === "function") {
-            WebInspector.RemoteFunction.objectAsFunction(object).targetFunctionDetails().then(didGetDetails);
-            return;
-        }
-
-        /**
-         * @param {?WebInspector.DebuggerModel.FunctionDetails} response
-         */
-        function didGetDetails(response)
-        {
-            object.release();
-
-            if (!response || !response.location)
-                return;
-
-            WebInspector.Revealer.reveal(WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(response.location));
-        }
-
-        if (hints.copyToClipboard)
-            InspectorFrontendHost.copyText(object.value);
-        object.release();
-    },
-
-    /**
-     * @override
      * @param {string} reason
      */
     detached: function(reason)
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js
index 93efddd4..5d3a91ff 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/RuntimeModel.js
@@ -218,6 +218,40 @@
         }
     },
 
+    /**
+     * @param {!RuntimeAgent.RemoteObject} payload
+     * @param {!Object=} hints
+     */
+    _inspectRequested: function(payload, hints)
+    {
+        var object = this.createRemoteObject(payload);
+
+        if (object.isNode()) {
+            WebInspector.Revealer.revealPromise(object).then(object.release.bind(object));
+            return;
+        }
+
+        if (object.type === "function") {
+            WebInspector.RemoteFunction.objectAsFunction(object).targetFunctionDetails().then(didGetDetails);
+            return;
+        }
+
+        /**
+         * @param {?WebInspector.DebuggerModel.FunctionDetails} response
+         */
+        function didGetDetails(response)
+        {
+            object.release();
+            if (!response || !response.location)
+                return;
+            WebInspector.Revealer.reveal(response.location);
+        }
+
+        if (hints.copyToClipboard)
+            InspectorFrontendHost.copyText(object.value);
+        object.release();
+    },
+
     __proto__: WebInspector.SDKModel.prototype
 }
 
@@ -256,8 +290,17 @@
     executionContextsCleared: function()
     {
         this._runtimeModel._executionContextsCleared();
-    }
+    },
 
+    /**
+     * @override
+     * @param {!RuntimeAgent.RemoteObject} payload
+     * @param {!Object=} hints
+     */
+    inspectRequested: function(payload, hints)
+    {
+        this._runtimeModel._inspectRequested(payload, hints);
+    }
 }
 
 /**
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js b/third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js
index fb920efd..c8db4db 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js
@@ -61,6 +61,7 @@
     this._headSelection = null;
     this._stickToBottom = false;
     this._scrolledToBottom = true;
+    this._itemCount = 0;
 }
 
 /**
@@ -195,7 +196,8 @@
     {
         delete this._cumulativeHeights;
         delete this._cachedProviderElements;
-        this.refresh();
+        this._itemCount = this._provider.itemCount();
+        this._innerRefresh(false);
     },
 
     /**
@@ -205,7 +207,7 @@
     _providerElement: function(index)
     {
         if (!this._cachedProviderElements)
-            this._cachedProviderElements = new Array(this._provider.itemCount());
+            this._cachedProviderElements = new Array(this._itemCount);
         var element = this._cachedProviderElements[index];
         if (!element) {
             element = this._provider.itemElement(index);
@@ -218,14 +220,13 @@
     {
         if (this._cumulativeHeights)
             return;
-        var itemCount = this._provider.itemCount();
-        if (!itemCount)
+        if (!this._itemCount)
             return;
         var firstVisibleIndex = this._firstVisibleIndex;
         var lastVisibleIndex = this._lastVisibleIndex;
         var height = 0;
-        this._cumulativeHeights = new Int32Array(itemCount);
-        for (var i = 0; i < itemCount; ++i) {
+        this._cumulativeHeights = new Int32Array(this._itemCount);
+        for (var i = 0; i < this._itemCount; ++i) {
             if (firstVisibleIndex <= i && i <= lastVisibleIndex)
                 height += this._renderedItems[i - firstVisibleIndex].element().offsetHeight;
             else
@@ -310,7 +311,7 @@
 
         if (!this._anchorSelection || !this._headSelection) {
             this._anchorSelection = this._createSelectionModel(0, this.element, 0);
-            this._headSelection = this._createSelectionModel(this._provider.itemCount() - 1, this.element, this.element.children.length);
+            this._headSelection = this._createSelectionModel(this._itemCount - 1, this.element, this.element.children.length);
             this._selectionIsBackward = false;
         }
 
@@ -375,10 +376,18 @@
 
     refresh: function()
     {
+        this._innerRefresh(false);
+    },
+
+    /**
+     * @param {boolean} isUserGesture
+     */
+    _innerRefresh: function(isUserGesture)
+    {
         if (!this._visibleHeight())
             return;  // Do nothing for invisible controls.
 
-        if (!this._provider.itemCount()) {
+        if (!this._itemCount) {
             for (var i = 0; i < this._renderedItems.length; ++i)
                 this._renderedItems[i].willHide();
             this._renderedItems = [];
@@ -404,20 +413,19 @@
                 delete this._cumulativeHeights;
         }
         this._rebuildCumulativeHeightsIfNeeded();
-        var itemCount = this._cumulativeHeights.length;
         var oldFirstVisibleIndex = this._firstVisibleIndex;
         var oldLastVisibleIndex = this._lastVisibleIndex;
 
-        var shouldStickToBottom = isInvalidating && this._stickToBottom && this._scrolledToBottom;
+        var shouldStickToBottom = !isUserGesture && this._stickToBottom && this._scrolledToBottom;
 
         if (shouldStickToBottom) {
-            this._lastVisibleIndex = itemCount - 1;
-            this._firstVisibleIndex = Math.max(itemCount - Math.ceil(visibleHeight / this._provider.minimumRowHeight()), 0);
+            this._lastVisibleIndex = this._itemCount - 1;
+            this._firstVisibleIndex = Math.max(this._itemCount - Math.ceil(visibleHeight / this._provider.minimumRowHeight()), 0);
         } else {
             this._firstVisibleIndex = Math.max(Array.prototype.lowerBound.call(this._cumulativeHeights, visibleFrom + 1), 0);
             // Proactively render more rows in case some of them will be collapsed without triggering refresh. @see crbug.com/390169
             this._lastVisibleIndex = this._firstVisibleIndex + Math.ceil(visibleHeight / this._provider.minimumRowHeight()) - 1;
-            this._lastVisibleIndex = Math.min(this._lastVisibleIndex, itemCount - 1);
+            this._lastVisibleIndex = Math.min(this._lastVisibleIndex, this._itemCount - 1);
         }
         var topGapHeight = this._cumulativeHeights[this._firstVisibleIndex - 1] || 0;
         var bottomGapHeight = this._cumulativeHeights[this._cumulativeHeights.length - 1] - this._cumulativeHeights[this._lastVisibleIndex];
@@ -443,7 +451,7 @@
         if (shouldRestoreSelection)
             this._restoreSelection(selection);
         if (shouldStickToBottom)
-            this.element.scrollTop = this.element.scrollHeight;
+            this.element.scrollTop = 10000000;
     },
 
     /**
@@ -560,7 +568,7 @@
      */
     _onScroll: function(event)
     {
-        this.refresh();
+        this._innerRefresh(event.isTrusted);
     },
 
     /**
@@ -614,7 +622,7 @@
     {
         this._rebuildCumulativeHeightsIfNeeded();
         this.element.scrollTop = index > 0 ? this._cumulativeHeights[index - 1] : 0;
-        this.refresh();
+        this._innerRefresh(false);
     },
 
     /**
@@ -624,7 +632,7 @@
     {
         this._rebuildCumulativeHeightsIfNeeded();
         this.element.scrollTop = this._cumulativeHeights[index] - this._visibleHeight();
-        this.refresh();
+        this._innerRefresh(false);
     },
 
     /**
diff --git a/third_party/WebKit/Source/devtools/protocol.json b/third_party/WebKit/Source/devtools/protocol.json
index 73f4357..e069b4d 100644
--- a/third_party/WebKit/Source/devtools/protocol.json
+++ b/third_party/WebKit/Source/devtools/protocol.json
@@ -8,22 +8,16 @@
             {
                 "name": "enable",
                 "description": "Enables inspector domain notifications.",
-                "handlers": ["browser", "renderer"]
+                "handlers": ["browser"]
             },
             {
                 "name": "disable",
-                "description": "Disables inspector domain notifications."
+                "description": "Disables inspector domain notifications.",
+                "handlers": ["browser"]
             }
         ],
         "events": [
             {
-                "name": "inspect",
-                "parameters": [
-                    { "name": "object", "$ref": "Runtime.RemoteObject" },
-                    { "name": "hints", "type": "object" }
-                ]
-            },
-            {
                 "name": "detached",
                 "description": "Fired when remote debugging connection is about to be terminated. Contains detach reason.",
                 "parameters": [
@@ -1045,6 +1039,14 @@
             {
                 "name": "executionContextsCleared",
                 "description": "Issued when all executionContexts were cleared in browser"
+            },
+            {
+                "name": "inspectRequested",
+                "parameters": [
+                    { "name": "object", "$ref": "RemoteObject" },
+                    { "name": "hints", "type": "object" }
+                ],
+                "hidden": true
             }
         ]
     },
diff --git a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
index c2b6821..989bbe1 100644
--- a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp
@@ -129,15 +129,12 @@
 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetooth-requestdevice
 ScriptPromise Bluetooth::requestDevice(ScriptState* scriptState, const RequestDeviceOptions& options, ExceptionState& exceptionState)
 {
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // Restore this logic when re-enabling the experiment:
-    //
     // By adding the "OriginTrialEnabled" extended binding, we enable the
     // requestDevice function on all platforms for whitelisted domains. Since we
     // only support Chrome OS and Android for this experiment we reject any
     // promises from other platforms unless they have the enable-web-bluetooth
     // flag on.
-#if 0 // !OS(CHROMEOS) && !OS(ANDROID)
+#if !OS(CHROMEOS) && !OS(ANDROID)
     if (!RuntimeEnabledFeatures::webBluetoothEnabled()) {
         return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, "Web Bluetooth is not enabled on this platform. To find out how to enable it and the current implementation status visit https://goo.gl/HKa2If"));
     }
diff --git a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.idl b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.idl
index 4055338..88f0d2e 100644
--- a/third_party/WebKit/Source/modules/bluetooth/Bluetooth.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/Bluetooth.idl
@@ -8,8 +8,7 @@
     GarbageCollected,
     NoInterfaceObject,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface Bluetooth {
     [CallWith=ScriptState, RaisesException] Promise<BluetoothDevice> requestDevice (
         RequestDeviceOptions options
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothAdvertisingData.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothAdvertisingData.idl
index 818e5b4..5b24c37 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothAdvertisingData.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothAdvertisingData.idl
@@ -9,8 +9,7 @@
 [
     GarbageCollected,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothAdvertisingData {
     // readonly attribute unsigned short? appearance;
     readonly attribute byte? txPower;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.idl
index ca87d7d..b848b3a7 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothCharacteristicProperties.idl
@@ -9,8 +9,7 @@
 [
     GarbageCollected,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothCharacteristicProperties {
     readonly attribute boolean broadcast;
     readonly attribute boolean read;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl
index 13ac479..3a10f7c 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.idl
@@ -15,8 +15,7 @@
     GarbageCollected,
     DependentLifetime,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothDevice : EventTarget
 // Implement ServiceEventHandlers interface: http://crbug.com/421670
 // : ServiceEventHandlers
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
index 16c2dd2..7f3d77c 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
@@ -10,8 +10,7 @@
     GarbageCollected,
     DependentLifetime,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothRemoteGATTCharacteristic : EventTarget {//: CharacteristicEventHandlers {
     // TODO(ortuno): Add test to make sure service matches the service
     // used to call getCharacteristic.
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.idl
index 5e26954..fee90a2b 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.idl
@@ -9,8 +9,7 @@
 [
     GarbageCollected,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothRemoteGATTServer
 {
     readonly attribute BluetoothDevice                   device;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.idl
index 85ce907..281e5bb 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.idl
@@ -9,8 +9,7 @@
 [
     GarbageCollected,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothRemoteGATTService { // : ServiceEventHandlers {
     readonly    attribute UUID            uuid;
     readonly    attribute boolean         isPrimary;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.idl b/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.idl
index a064b3d..f36b616 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.idl
@@ -10,8 +10,7 @@
 [
     GarbageCollected,
     RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothUUID {
     [RaisesException] static UUID getService((DOMString or unsigned long) name);
     [RaisesException] static UUID getCharacteristic((DOMString or unsigned long) name);
diff --git a/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.idl b/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.idl
index e7c777c..4c33b72 100644
--- a/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.idl
+++ b/third_party/WebKit/Source/modules/bluetooth/NavigatorBluetooth.idl
@@ -10,8 +10,5 @@
     // Experimental Framework doesn't support adding bindings to partial
     // interfaces yet, so we add it to the bluetooth attribute instead.
     // https://crbug.com/585656
-    [
-        // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-        // OriginTrialEnabled=WebBluetooth
-    ] readonly attribute Bluetooth bluetooth;
+    [OriginTrialEnabled=WebBluetooth] readonly attribute Bluetooth bluetooth;
 };
diff --git a/third_party/WebKit/Source/modules/mediasource/AudioTrackSourceBuffer.idl b/third_party/WebKit/Source/modules/mediasource/AudioTrackSourceBuffer.idl
new file mode 100644
index 0000000..35f26b9
--- /dev/null
+++ b/third_party/WebKit/Source/modules/mediasource/AudioTrackSourceBuffer.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/media-source/#audio-track-extensions
+[
+    GarbageCollected,
+    ImplementedAs=SourceBufferTrackBaseSupplement,
+    RuntimeEnabled=AudioVideoTracks
+] partial interface AudioTrack {
+    readonly attribute SourceBuffer? sourceBuffer;
+};
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
index f9f5201..9edf22ea 100644
--- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
@@ -48,6 +48,7 @@
 #include "core/html/track/VideoTrackList.h"
 #include "core/streams/Stream.h"
 #include "modules/mediasource/MediaSource.h"
+#include "modules/mediasource/SourceBufferTrackBaseSupplement.h"
 #include "platform/Logging.h"
 #include "platform/TraceEvent.h"
 #include "public/platform/WebSourceBuffer.h"
@@ -532,6 +533,7 @@
             AudioTrack* audioTrack = nullptr;
             if (!m_firstInitializationSegmentReceived) {
                 audioTrack = AudioTrack::create(id, kind, label, language, false);
+                SourceBufferTrackBaseSupplement::setSourceBuffer(*audioTrack, this);
                 audioTracks().add(audioTrack);
                 m_source->mediaElement()->audioTracks().add(audioTrack);
             } else {
@@ -544,6 +546,7 @@
             VideoTrack* videoTrack = nullptr;
             if (!m_firstInitializationSegmentReceived) {
                 videoTrack = VideoTrack::create(id, kind, label, language, false);
+                SourceBufferTrackBaseSupplement::setSourceBuffer(*videoTrack, this);
                 videoTracks().add(videoTrack);
                 m_source->mediaElement()->videoTracks().add(videoTrack);
             } else {
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBufferTrackBaseSupplement.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBufferTrackBaseSupplement.cpp
new file mode 100644
index 0000000..186335e
--- /dev/null
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBufferTrackBaseSupplement.cpp
@@ -0,0 +1,52 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/mediasource/SourceBufferTrackBaseSupplement.h"
+
+#include "core/html/track/TrackBase.h"
+#include "modules/mediasource/SourceBuffer.h"
+
+namespace blink {
+
+static const char* kSupplementName = "SourceBufferTrackBaseSupplement";
+
+// static
+SourceBufferTrackBaseSupplement* SourceBufferTrackBaseSupplement::fromIfExists(TrackBase& track)
+{
+    return static_cast<SourceBufferTrackBaseSupplement*>(Supplement<TrackBase>::from(track, kSupplementName));
+}
+
+// static
+SourceBufferTrackBaseSupplement& SourceBufferTrackBaseSupplement::from(TrackBase& track)
+{
+    SourceBufferTrackBaseSupplement* supplement = fromIfExists(track);
+    if (!supplement) {
+        supplement = new SourceBufferTrackBaseSupplement();
+        Supplement<TrackBase>::provideTo(track, kSupplementName, supplement);
+    }
+    return *supplement;
+}
+
+// static
+SourceBuffer* SourceBufferTrackBaseSupplement::sourceBuffer(TrackBase& track)
+{
+    SourceBufferTrackBaseSupplement* supplement = fromIfExists(track);
+    if (supplement)
+        return supplement->m_sourceBuffer;
+    return nullptr;
+}
+
+void SourceBufferTrackBaseSupplement::setSourceBuffer(TrackBase& track, SourceBuffer* sourceBuffer)
+{
+    from(track).m_sourceBuffer = sourceBuffer;
+}
+
+DEFINE_TRACE(SourceBufferTrackBaseSupplement)
+{
+    visitor->trace(m_sourceBuffer);
+    Supplement<TrackBase>::trace(visitor);
+}
+
+} // namespace blink
+
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBufferTrackBaseSupplement.h b/third_party/WebKit/Source/modules/mediasource/SourceBufferTrackBaseSupplement.h
new file mode 100644
index 0000000..e2ef6b7
--- /dev/null
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBufferTrackBaseSupplement.h
@@ -0,0 +1,34 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SourceBufferTrackBaseSupplement_h
+#define SourceBufferTrackBaseSupplement_h
+
+#include "platform/Supplementable.h"
+#include "wtf/Allocator.h"
+
+namespace blink {
+
+class TrackBase;
+class SourceBuffer;
+
+class SourceBufferTrackBaseSupplement : public GarbageCollected<SourceBufferTrackBaseSupplement>, public Supplement<TrackBase> {
+    USING_GARBAGE_COLLECTED_MIXIN(SourceBufferTrackBaseSupplement);
+public:
+    static SourceBuffer* sourceBuffer(TrackBase&);
+    static void setSourceBuffer(TrackBase&, SourceBuffer*);
+
+    DECLARE_VIRTUAL_TRACE();
+
+private:
+    static SourceBufferTrackBaseSupplement& from(TrackBase&);
+    static SourceBufferTrackBaseSupplement* fromIfExists(TrackBase&);
+
+    Member<SourceBuffer> m_sourceBuffer;
+};
+
+} // namespace blink
+
+#endif
+
diff --git a/third_party/WebKit/Source/modules/mediasource/VideoTrackSourceBuffer.idl b/third_party/WebKit/Source/modules/mediasource/VideoTrackSourceBuffer.idl
new file mode 100644
index 0000000..2f6662c69
--- /dev/null
+++ b/third_party/WebKit/Source/modules/mediasource/VideoTrackSourceBuffer.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/media-source/#video-track-extensions
+[
+    GarbageCollected,
+    ImplementedAs=SourceBufferTrackBaseSupplement,
+    RuntimeEnabled=AudioVideoTracks
+] partial interface VideoTrack {
+    readonly attribute SourceBuffer? sourceBuffer;
+};
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaDeviceInfo.cpp b/third_party/WebKit/Source/modules/mediastream/MediaDeviceInfo.cpp
index 11e9110..547f804f 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaDeviceInfo.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaDeviceInfo.cpp
@@ -34,7 +34,7 @@
 
 MediaDeviceInfo* MediaDeviceInfo::create(const WebMediaDeviceInfo& webMediaDeviceInfo)
 {
-    ASSERT(!webMediaDeviceInfo.isNull());
+    DCHECK(!webMediaDeviceInfo.isNull());
     return new MediaDeviceInfo(webMediaDeviceInfo);
 }
 
@@ -59,7 +59,7 @@
         return "videoinput";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp b/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp
index 556ec89..cdde579 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaDevices.cpp
@@ -102,7 +102,7 @@
     MediaErrorState errorState;
     UserMediaRequest* request = UserMediaRequest::create(document, userMedia, options, successCallback, errorCallback, errorState);
     if (!request) {
-        ASSERT(errorState.hadException());
+        DCHECK(errorState.hadException());
         if (errorState.canGenerateException()) {
             errorState.raiseException(exceptionState);
             return exceptionState.reject(scriptState);
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.cpp b/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.cpp
index 20b61f0d..fc728c24 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.cpp
@@ -63,7 +63,7 @@
 
 ScriptPromise MediaDevicesRequest::start()
 {
-    ASSERT(m_controller);
+    DCHECK(m_controller);
     m_resolver->keepAliveWhilePending();
     m_controller->requestMediaDevices(this);
     return m_resolver->promise();
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaErrorState.cpp b/third_party/WebKit/Source/modules/mediastream/MediaErrorState.cpp
index 1480b0e..8763bad 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaErrorState.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaErrorState.cpp
@@ -80,7 +80,7 @@
 {
     switch (m_errorType) {
     case NoError:
-        ASSERT_NOT_REACHED();
+        NOTREACHED();
         break;
     case TypeError:
         target.throwTypeError(m_message);
@@ -97,7 +97,7 @@
         target.throwDOMException(NotSupportedError, "Unsatisfiable constraint " + m_constraint);
         break;
     default:
-        ASSERT_NOT_REACHED();
+        NOTREACHED();
     }
 }
 
@@ -105,7 +105,7 @@
 {
     switch (m_errorType) {
     case NoError:
-        ASSERT_NOT_REACHED();
+        NOTREACHED();
         break;
     case TypeError:
     case DOMException:
@@ -118,7 +118,7 @@
         // TODO(hta): Remove this code. https://crbug.com/576581
         return "Unsatisfiable constraint " + m_constraint;
     default:
-        ASSERT_NOT_REACHED();
+        NOTREACHED();
     }
 
     return String();
@@ -126,7 +126,7 @@
 
 NavigatorUserMediaError* MediaErrorState::createError()
 {
-    ASSERT(m_errorType == ConstraintError);
+    DCHECK(m_errorType == ConstraintError);
     return NavigatorUserMediaError::create(NavigatorUserMediaError::NameConstraintNotSatisfied, m_message, m_constraint);
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp
index 1f8b443..06bf3e57 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStream.cpp
@@ -63,7 +63,7 @@
 
 MediaStream* MediaStream::create(ExecutionContext* context, MediaStream* stream)
 {
-    ASSERT(stream);
+    DCHECK(stream);
 
     MediaStreamTrackVector audioTracks;
     MediaStreamTrackVector videoTracks;
@@ -319,7 +319,7 @@
 
 void MediaStream::addRemoteTrack(MediaStreamComponent* component)
 {
-    ASSERT(component);
+    DCHECK(component);
     if (m_stopped)
         return;
 
@@ -345,7 +345,7 @@
 
 void MediaStream::removeRemoteTrack(MediaStreamComponent* component)
 {
-    ASSERT(component);
+    DCHECK(component);
     if (m_stopped)
         return;
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamRegistry.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStreamRegistry.cpp
index a1f6580..f90f9a9 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStreamRegistry.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamRegistry.cpp
@@ -33,33 +33,33 @@
 MediaStreamRegistry& MediaStreamRegistry::registry()
 {
     // Since WebWorkers cannot obtain MediaStream objects, we should be on the main thread.
-    ASSERT(isMainThread());
+    DCHECK(isMainThread());
     DEFINE_STATIC_LOCAL(MediaStreamRegistry, instance, ());
     return instance;
 }
 
 void MediaStreamRegistry::registerURL(SecurityOrigin*, const KURL& url, URLRegistrable* stream)
 {
-    ASSERT(&stream->registry() == this);
-    ASSERT(isMainThread());
+    DCHECK(&stream->registry() == this);
+    DCHECK(isMainThread());
     m_streamDescriptors.set(url.getString(), static_cast<MediaStream*>(stream)->descriptor());
 }
 
 void MediaStreamRegistry::unregisterURL(const KURL& url)
 {
-    ASSERT(isMainThread());
+    DCHECK(isMainThread());
     m_streamDescriptors.remove(url.getString());
 }
 
 bool MediaStreamRegistry::contains(const String& url)
 {
-    ASSERT(isMainThread());
+    DCHECK(isMainThread());
     return m_streamDescriptors.contains(url);
 }
 
 MediaStreamDescriptor* MediaStreamRegistry::lookupMediaStreamDescriptor(const String& url)
 {
-    ASSERT(isMainThread());
+    DCHECK(isMainThread());
     return m_streamDescriptors.get(url);
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
index 927181a..2c97b65 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
@@ -75,7 +75,7 @@
         return videoKind;
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return audioKind;
 }
 
@@ -134,7 +134,7 @@
         return "ended";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
@@ -199,6 +199,7 @@
 
 void MediaStreamTrack::propagateTrackEnded()
 {
+    // TODO(mcasas): Substitute with CHECK, see https://crbug.com/599867.
     RELEASE_ASSERT(!m_isIteratingRegisteredMediaStreams);
     m_isIteratingRegisteredMediaStreams = true;
     for (HeapHashSet<Member<MediaStream>>::iterator iter = m_registeredMediaStreams.begin(); iter != m_registeredMediaStreams.end(); ++iter)
@@ -235,6 +236,7 @@
 
 void MediaStreamTrack::registerMediaStream(MediaStream* mediaStream)
 {
+    // TODO(mcasas): Substitute with CHECK, see https://crbug.com/599867.
     RELEASE_ASSERT(!m_isIteratingRegisteredMediaStreams);
     RELEASE_ASSERT(!m_registeredMediaStreams.contains(mediaStream));
     m_registeredMediaStreams.add(mediaStream);
@@ -242,6 +244,7 @@
 
 void MediaStreamTrack::unregisterMediaStream(MediaStream* mediaStream)
 {
+    // TODO(mcasas): Substitute with CHECK, see https://crbug.com/599867.
     RELEASE_ASSERT(!m_isIteratingRegisteredMediaStreams);
     HeapHashSet<Member<MediaStream>>::iterator iter = m_registeredMediaStreams.find(mediaStream);
     RELEASE_ASSERT(iter != m_registeredMediaStreams.end());
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp
index da496985..5ac92a7 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp
@@ -58,7 +58,7 @@
 
 void MediaStreamTrackSourcesRequestImpl::requestSucceeded(const WebVector<WebSourceInfo>& webSourceInfos)
 {
-    ASSERT(m_callback);
+    DCHECK(m_callback);
 
     for (size_t i = 0; i < webSourceInfos.size(); ++i)
         m_sourceInfos.append(SourceInfo::create(webSourceInfos[i]));
diff --git a/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp b/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp
index b2291b3b..20b5464 100644
--- a/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/NavigatorMediaStream.cpp
@@ -54,7 +54,7 @@
     MediaErrorState errorState;
     UserMediaRequest* request = UserMediaRequest::create(navigator.frame()->document(), userMedia, options, successCallback, errorCallback, errorState);
     if (!request) {
-        ASSERT(errorState.hadException());
+        DCHECK(errorState.hadException());
         if (errorState.canGenerateException()) {
             errorState.raiseException(exceptionState);
         } else {
diff --git a/third_party/WebKit/Source/modules/mediastream/NavigatorUserMediaError.h b/third_party/WebKit/Source/modules/mediastream/NavigatorUserMediaError.h
index e6a856e..ec23a7b 100644
--- a/third_party/WebKit/Source/modules/mediastream/NavigatorUserMediaError.h
+++ b/third_party/WebKit/Source/modules/mediastream/NavigatorUserMediaError.h
@@ -54,7 +54,7 @@
     NavigatorUserMediaError(const String& name, const String& message, const String& constraintName)
         : m_name(name), m_message(message), m_constraintName(constraintName)
     {
-        ASSERT(!name.isEmpty());
+        DCHECK(!name.isEmpty());
     }
 
     String m_name;
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDTMFToneChangeEvent.cpp b/third_party/WebKit/Source/modules/mediastream/RTCDTMFToneChangeEvent.cpp
index d2fd38cc..ccc70846 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDTMFToneChangeEvent.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDTMFToneChangeEvent.cpp
@@ -39,7 +39,7 @@
 
 RTCDTMFToneChangeEvent* RTCDTMFToneChangeEvent::create(const AtomicString& type, const RTCDTMFToneChangeEventInit& initializer)
 {
-    ASSERT(type == EventTypeNames::tonechange);
+    DCHECK(type == EventTypeNames::tonechange);
     return new RTCDTMFToneChangeEvent(initializer);
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp b/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
index 905b242..e0101c9 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
@@ -53,7 +53,7 @@
 
 RTCDataChannel* RTCDataChannel::create(ExecutionContext* context, PassOwnPtr<WebRTCDataChannelHandler> handler)
 {
-    ASSERT(handler);
+    DCHECK(handler);
     return new RTCDataChannel(context, handler);
 }
 
@@ -142,7 +142,7 @@
         return "closed";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
@@ -169,7 +169,7 @@
     case BinaryTypeArrayBuffer:
         return "arraybuffer";
     }
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
@@ -276,7 +276,7 @@
         scheduleDispatchEvent(MessageEvent::create(buffer.release()));
         return;
     }
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
 }
 
 void RTCDataChannel::didDetectError()
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp
index ace817ff..88d6d3b 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp
@@ -108,7 +108,7 @@
 
 void asyncCallErrorCallback(RTCPeerConnectionErrorCallback* errorCallback, DOMException* exception)
 {
-    ASSERT(errorCallback);
+    DCHECK(errorCallback);
     Microtask::enqueueMicrotask(bind(&RTCPeerConnectionErrorCallback::handleEvent, errorCallback, exception));
 }
 
@@ -131,7 +131,7 @@
         return !iceCandidateInit.hasSdpMid() && !iceCandidateInit.hasSdpMLineIndex();
     }
 
-    ASSERT(candidate.isRTCIceCandidate());
+    DCHECK(candidate.isRTCIceCandidate());
     return false;
 }
 
@@ -156,7 +156,7 @@
         return WebRTCICECandidate(iceCandidateInit.candidate(), iceCandidateInit.sdpMid(), iceCandidateInit.sdpMLineIndex());
     }
 
-    ASSERT(candidate.isRTCIceCandidate());
+    DCHECK(candidate.isRTCIceCandidate());
     return candidate.getAsRTCIceCandidate()->webCandidate();
 }
 
@@ -445,7 +445,7 @@
 {
     // This checks that close() or stop() is called before the destructor.
     // We are assuming that a wrapper is always created when RTCPeerConnection is created.
-    ASSERT(m_closed || m_stopped);
+    DCHECK(m_closed || m_stopped);
 }
 
 ScriptPromise RTCPeerConnection::createOffer(ScriptState* scriptState, const RTCOfferOptions& options)
@@ -462,8 +462,8 @@
 
 ScriptPromise RTCPeerConnection::createOffer(ScriptState* scriptState, RTCSessionDescriptionCallback* successCallback, RTCPeerConnectionErrorCallback* errorCallback, const Dictionary& rtcOfferOptions)
 {
-    ASSERT(successCallback);
-    ASSERT(errorCallback);
+    DCHECK(successCallback);
+    DCHECK(errorCallback);
     ExecutionContext* context = scriptState->getExecutionContext();
     UseCounter::count(context, UseCounter::RTCPeerConnectionCreateOfferLegacyFailureCallback);
     if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback))
@@ -515,8 +515,8 @@
 
 ScriptPromise RTCPeerConnection::createAnswer(ScriptState* scriptState, RTCSessionDescriptionCallback* successCallback, RTCPeerConnectionErrorCallback* errorCallback, const Dictionary& mediaConstraints)
 {
-    ASSERT(successCallback);
-    ASSERT(errorCallback);
+    DCHECK(successCallback);
+    DCHECK(errorCallback);
     ExecutionContext* context = scriptState->getExecutionContext();
     UseCounter::count(context, UseCounter::RTCPeerConnectionCreateAnswerLegacyFailureCallback);
     if (mediaConstraints.isObject())
@@ -569,7 +569,7 @@
     if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback))
         return ScriptPromise::castUndefined(scriptState);
 
-    ASSERT(sessionDescription);
+    DCHECK(sessionDescription);
 
     RTCVoidRequest* request = RTCVoidRequestImpl::create(getExecutionContext(), this, successCallback, errorCallback);
     m_peerHandler->setLocalDescription(request, sessionDescription->webSessionDescription());
@@ -612,7 +612,7 @@
     if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback))
         return ScriptPromise::castUndefined(scriptState);
 
-    ASSERT(sessionDescription);
+    DCHECK(sessionDescription);
 
     RTCVoidRequest* request = RTCVoidRequestImpl::create(getExecutionContext(), this, successCallback, errorCallback);
     m_peerHandler->setRemoteDescription(request, sessionDescription->webSessionDescription());
@@ -692,7 +692,7 @@
         return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, "The 1st argument provided is an AlgorithmIdentifier, but the algorithm is not supported."));
         break;
     }
-    ASSERT(!keyParams.isNull());
+    DCHECK(!keyParams.isNull());
 
     OwnPtr<WebRTCCertificateGenerator> certificateGenerator = adoptPtr(
         Platform::current()->createRTCCertificateGenerator());
@@ -739,9 +739,9 @@
 
 ScriptPromise RTCPeerConnection::addIceCandidate(ScriptState* scriptState, RTCIceCandidate* iceCandidate, VoidCallback* successCallback, RTCPeerConnectionErrorCallback* errorCallback)
 {
-    ASSERT(iceCandidate);
-    ASSERT(successCallback);
-    ASSERT(errorCallback);
+    DCHECK(iceCandidate);
+    DCHECK(successCallback);
+    DCHECK(errorCallback);
 
     if (callErrorCallbackIfSignalingStateClosed(m_signalingState, errorCallback))
         return ScriptPromise::castUndefined(scriptState);
@@ -771,7 +771,7 @@
         return "closed";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
@@ -786,7 +786,7 @@
         return "complete";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
@@ -809,7 +809,7 @@
         return "closed";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
@@ -938,7 +938,7 @@
     if (throwExceptionIfSignalingStateClosed(m_signalingState, exceptionState))
         return nullptr;
 
-    ASSERT(track);
+    DCHECK(track);
 
     if (!hasLocalStreamWithTrackId(track->id())) {
         exceptionState.throwDOMException(SyntaxError, "No local stream is available for the track provided.");
@@ -961,14 +961,14 @@
 
 void RTCPeerConnection::negotiationNeeded()
 {
-    ASSERT(!m_closed);
+    DCHECK(!m_closed);
     scheduleDispatchEvent(Event::create(EventTypeNames::negotiationneeded));
 }
 
 void RTCPeerConnection::didGenerateICECandidate(const WebRTCICECandidate& webCandidate)
 {
-    ASSERT(!m_closed);
-    ASSERT(getExecutionContext()->isContextThread());
+    DCHECK(!m_closed);
+    DCHECK(getExecutionContext()->isContextThread());
     if (webCandidate.isNull())
         scheduleDispatchEvent(RTCIceCandidateEvent::create(false, false, nullptr));
     else {
@@ -979,29 +979,29 @@
 
 void RTCPeerConnection::didChangeSignalingState(SignalingState newState)
 {
-    ASSERT(!m_closed);
-    ASSERT(getExecutionContext()->isContextThread());
+    DCHECK(!m_closed);
+    DCHECK(getExecutionContext()->isContextThread());
     changeSignalingState(newState);
 }
 
 void RTCPeerConnection::didChangeICEGatheringState(ICEGatheringState newState)
 {
-    ASSERT(!m_closed);
-    ASSERT(getExecutionContext()->isContextThread());
+    DCHECK(!m_closed);
+    DCHECK(getExecutionContext()->isContextThread());
     changeIceGatheringState(newState);
 }
 
 void RTCPeerConnection::didChangeICEConnectionState(ICEConnectionState newState)
 {
-    ASSERT(!m_closed);
-    ASSERT(getExecutionContext()->isContextThread());
+    DCHECK(!m_closed);
+    DCHECK(getExecutionContext()->isContextThread());
     changeIceConnectionState(newState);
 }
 
 void RTCPeerConnection::didAddRemoteStream(const WebMediaStream& remoteStream)
 {
-    ASSERT(!m_closed);
-    ASSERT(getExecutionContext()->isContextThread());
+    DCHECK(!m_closed);
+    DCHECK(getExecutionContext()->isContextThread());
 
     if (m_signalingState == SignalingStateClosed)
         return;
@@ -1014,11 +1014,11 @@
 
 void RTCPeerConnection::didRemoveRemoteStream(const WebMediaStream& remoteStream)
 {
-    ASSERT(!m_closed);
-    ASSERT(getExecutionContext()->isContextThread());
+    DCHECK(!m_closed);
+    DCHECK(getExecutionContext()->isContextThread());
 
     MediaStreamDescriptor* streamDescriptor = remoteStream;
-    ASSERT(streamDescriptor->client());
+    DCHECK(streamDescriptor->client());
 
     MediaStream* stream = static_cast<MediaStream*>(streamDescriptor->client());
     stream->streamEnded();
@@ -1027,7 +1027,7 @@
         return;
 
     size_t pos = m_remoteStreams.find(stream);
-    ASSERT(pos != kNotFound);
+    DCHECK(pos != kNotFound);
     m_remoteStreams.remove(pos);
 
     scheduleDispatchEvent(MediaStreamEvent::create(EventTypeNames::removestream, false, false, stream));
@@ -1035,8 +1035,8 @@
 
 void RTCPeerConnection::didAddRemoteDataChannel(WebRTCDataChannelHandler* handler)
 {
-    ASSERT(!m_closed);
-    ASSERT(getExecutionContext()->isContextThread());
+    DCHECK(!m_closed);
+    DCHECK(getExecutionContext()->isContextThread());
 
     if (m_signalingState == SignalingStateClosed)
         return;
@@ -1052,7 +1052,7 @@
 
 void RTCPeerConnection::closePeerConnection()
 {
-    ASSERT(m_signalingState != RTCPeerConnection::SignalingStateClosed);
+    DCHECK(m_signalingState != RTCPeerConnection::SignalingStateClosed);
     closeInternal();
 }
 
@@ -1122,7 +1122,7 @@
 
 void RTCPeerConnection::closeInternal()
 {
-    ASSERT(m_signalingState != RTCPeerConnection::SignalingStateClosed);
+    DCHECK(m_signalingState != RTCPeerConnection::SignalingStateClosed);
     m_peerHandler->stop();
     m_closed = true;
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp b/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp
index 29463de..4909b4f 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp
@@ -54,7 +54,7 @@
     , m_errorCallback(errorCallback)
     , m_requester(requester)
 {
-    ASSERT(m_requester);
+    DCHECK(m_requester);
 }
 
 RTCSessionDescriptionRequestImpl::~RTCSessionDescriptionRequestImpl()
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestPromiseImpl.cpp b/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestPromiseImpl.cpp
index 99147b01..e4fe55a 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestPromiseImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestPromiseImpl.cpp
@@ -22,13 +22,13 @@
     : m_requester(requester)
     , m_resolver(resolver)
 {
-    ASSERT(m_requester);
-    ASSERT(m_resolver);
+    DCHECK(m_requester);
+    DCHECK(m_resolver);
 }
 
 RTCSessionDescriptionRequestPromiseImpl::~RTCSessionDescriptionRequestPromiseImpl()
 {
-    ASSERT(!m_requester);
+    DCHECK(!m_requester);
 }
 
 void RTCSessionDescriptionRequestPromiseImpl::requestSucceeded(const WebRTCSessionDescription& webSessionDescription)
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCStatsRequestImpl.cpp b/third_party/WebKit/Source/modules/mediastream/RTCStatsRequestImpl.cpp
index 0c2e38b..5773de1f 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCStatsRequestImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCStatsRequestImpl.cpp
@@ -43,7 +43,7 @@
     , m_component(selector ? selector->component() : 0)
     , m_requester(requester)
 {
-    ASSERT(m_requester);
+    DCHECK(m_requester);
 }
 
 RTCStatsRequestImpl::~RTCStatsRequestImpl()
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCStatsResponse.cpp b/third_party/WebKit/Source/modules/mediastream/RTCStatsResponse.cpp
index b859246..5130a4f8 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCStatsResponse.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCStatsResponse.cpp
@@ -51,7 +51,7 @@
 
 void RTCStatsResponse::addStatistic(size_t report, const String& name, const String& value)
 {
-    ASSERT_WITH_SECURITY_IMPLICATION(report >= 0 && report < m_result.size());
+    SECURITY_DCHECK(report >= 0 && report < m_result.size());
     m_result[report]->addStatistic(name, value);
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestImpl.cpp b/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestImpl.cpp
index 7222aa2..d20e8c2b 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestImpl.cpp
@@ -51,7 +51,7 @@
     , m_errorCallback(errorCallback)
     , m_requester(requester)
 {
-    ASSERT(m_requester);
+    DCHECK(m_requester);
 }
 
 RTCVoidRequestImpl::~RTCVoidRequestImpl()
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestPromiseImpl.cpp b/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestPromiseImpl.cpp
index 9609ee8e..c70f0aae 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestPromiseImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCVoidRequestPromiseImpl.cpp
@@ -20,13 +20,13 @@
     : m_requester(requester)
     , m_resolver(resolver)
 {
-    ASSERT(m_requester);
-    ASSERT(m_resolver);
+    DCHECK(m_requester);
+    DCHECK(m_resolver);
 }
 
 RTCVoidRequestPromiseImpl::~RTCVoidRequestPromiseImpl()
 {
-    ASSERT(!m_requester);
+    DCHECK(!m_requester);
 }
 
 void RTCVoidRequestPromiseImpl::requestSucceeded()
diff --git a/third_party/WebKit/Source/modules/mediastream/SourceInfo.cpp b/third_party/WebKit/Source/modules/mediastream/SourceInfo.cpp
index b020fb2..8af41ed3 100644
--- a/third_party/WebKit/Source/modules/mediastream/SourceInfo.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/SourceInfo.cpp
@@ -31,7 +31,7 @@
 
 SourceInfo* SourceInfo::create(const WebSourceInfo& webSourceInfo)
 {
-    ASSERT(!webSourceInfo.isNull());
+    DCHECK(!webSourceInfo.isNull());
     return new SourceInfo(webSourceInfo);
 }
 
@@ -56,7 +56,7 @@
         return "none";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
@@ -76,7 +76,7 @@
         return "environment";
     }
 
-    ASSERT_NOT_REACHED();
+    NOTREACHED();
     return String();
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/URLMediaStream.cpp b/third_party/WebKit/Source/modules/mediastream/URLMediaStream.cpp
index 997cc55..8f10116 100644
--- a/third_party/WebKit/Source/modules/mediastream/URLMediaStream.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/URLMediaStream.cpp
@@ -38,7 +38,7 @@
 String URLMediaStream::createObjectURL(ExecutionContext* executionContext, MediaStream* stream)
 {
     // Since WebWorkers cannot obtain Stream objects, we should be on the main thread.
-    ASSERT(isMainThread());
+    DCHECK(isMainThread());
 
     if (!executionContext || !stream)
         return String();
diff --git a/third_party/WebKit/Source/modules/mediastream/UserMediaRequest.cpp b/third_party/WebKit/Source/modules/mediastream/UserMediaRequest.cpp
index f2947fa..58bfe79 100644
--- a/third_party/WebKit/Source/modules/mediastream/UserMediaRequest.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/UserMediaRequest.cpp
@@ -58,7 +58,7 @@
     } else if (options.isMediaTrackConstraintSet()) {
         constraints = MediaConstraintsImpl::create(context, options.getAsMediaTrackConstraintSet(), errorState);
     } else {
-        ASSERT(options.isBoolean());
+        DCHECK(options.isBoolean());
         if (options.getAsBoolean()) {
             constraints = MediaConstraintsImpl::create();
         }
@@ -187,7 +187,7 @@
 
 void UserMediaRequest::failConstraint(const String& constraintName, const String& message)
 {
-    ASSERT(!constraintName.isEmpty());
+    DCHECK(!constraintName.isEmpty());
     if (!getExecutionContext())
         return;
     m_errorCallback->handleEvent(NavigatorUserMediaError::create(NavigatorUserMediaError::NameConstraintNotSatisfied, message, constraintName));
@@ -195,7 +195,7 @@
 
 void UserMediaRequest::failUASpecific(const String& name, const String& message, const String& constraintName)
 {
-    ASSERT(!name.isEmpty());
+    DCHECK(!name.isEmpty());
     if (!getExecutionContext())
         return;
     m_errorCallback->handleEvent(NavigatorUserMediaError::create(name, message, constraintName));
diff --git a/third_party/WebKit/Source/modules/modules.gypi b/third_party/WebKit/Source/modules/modules.gypi
index 257865b..23c88c78 100644
--- a/third_party/WebKit/Source/modules/modules.gypi
+++ b/third_party/WebKit/Source/modules/modules.gypi
@@ -187,6 +187,7 @@
       'serviceworkers/ExtendableEvent.idl',
       'serviceworkers/ExtendableMessageEvent.idl',
       'serviceworkers/FetchEvent.idl',
+      'serviceworkers/ForeignFetchEvent.idl',
       'serviceworkers/InstallEvent.idl',
       'serviceworkers/ServiceWorker.idl',
       'serviceworkers/ServiceWorkerContainer.idl',
@@ -368,6 +369,8 @@
       'mediacapturefromelement/HTMLCanvasElementCapture.idl',
       'mediacapturefromelement/HTMLMediaElementCapture.idl',
       'mediasession/HTMLMediaElementMediaSession.idl',
+      'mediasource/AudioTrackSourceBuffer.idl',
+      'mediasource/VideoTrackSourceBuffer.idl',
       'mediasource/HTMLVideoElementMediaSource.idl',
       'mediasource/URLMediaSource.idl',
       'mediastream/NavigatorMediaStream.idl',
@@ -430,6 +433,7 @@
       'serviceworkers/ExtendableEvent.idl',
       'serviceworkers/ExtendableMessageEvent.idl',
       'serviceworkers/FetchEvent.idl',
+      'serviceworkers/ForeignFetchEvent.idl',
       'serviceworkers/InstallEvent.idl',
       'serviceworkers/ServiceWorkerMessageEvent.idl',
       'speech/SpeechRecognitionError.idl',
@@ -514,7 +518,9 @@
       'serviceworkers/ExtendableEventInit.idl',
       'serviceworkers/ExtendableMessageEventInit.idl',
       'serviceworkers/FetchEventInit.idl',
+      'serviceworkers/ForeignFetchEventInit.idl',
       'serviceworkers/ForeignFetchOptions.idl',
+      'serviceworkers/ForeignFetchResponse.idl',
       'serviceworkers/RegistrationOptions.idl',
       'serviceworkers/ServiceWorkerMessageEventInit.idl',
       'speech/SpeechRecognitionErrorInit.idl',
@@ -684,8 +690,12 @@
       '<(blink_modules_output_dir)/serviceworkers/ExtendableMessageEventInit.h',
       '<(blink_modules_output_dir)/serviceworkers/FetchEventInit.cpp',
       '<(blink_modules_output_dir)/serviceworkers/FetchEventInit.h',
+      '<(blink_modules_output_dir)/serviceworkers/ForeignFetchEventInit.cpp',
+      '<(blink_modules_output_dir)/serviceworkers/ForeignFetchEventInit.h',
       '<(blink_modules_output_dir)/serviceworkers/ForeignFetchOptions.cpp',
       '<(blink_modules_output_dir)/serviceworkers/ForeignFetchOptions.h',
+      '<(blink_modules_output_dir)/serviceworkers/ForeignFetchResponse.cpp',
+      '<(blink_modules_output_dir)/serviceworkers/ForeignFetchResponse.h',
       '<(blink_modules_output_dir)/serviceworkers/RegistrationOptions.cpp',
       '<(blink_modules_output_dir)/serviceworkers/RegistrationOptions.h',
       '<(blink_modules_output_dir)/serviceworkers/ServiceWorkerMessageEventInit.cpp',
@@ -1206,6 +1216,8 @@
       'mediasource/SourceBuffer.h',
       'mediasource/SourceBufferList.cpp',
       'mediasource/SourceBufferList.h',
+      'mediasource/SourceBufferTrackBaseSupplement.cpp',
+      'mediasource/SourceBufferTrackBaseSupplement.h',
       'mediasource/TrackDefault.cpp',
       'mediasource/TrackDefault.h',
       'mediasource/TrackDefaultList.cpp',
@@ -1446,6 +1458,10 @@
       'serviceworkers/ExtendableMessageEvent.h',
       'serviceworkers/FetchEvent.cpp',
       'serviceworkers/FetchEvent.h',
+      'serviceworkers/ForeignFetchEvent.cpp',
+      'serviceworkers/ForeignFetchEvent.h',
+      'serviceworkers/ForeignFetchRespondWithObserver.cpp',
+      'serviceworkers/ForeignFetchRespondWithObserver.h',
       'serviceworkers/InstallEvent.cpp',
       'serviceworkers/InstallEvent.h',
       'serviceworkers/NavigatorServiceWorker.cpp',
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp b/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
index 17981fea..bd57629 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
@@ -97,7 +97,7 @@
     Settings* contextSettings = settings(getExecutionContext());
     bool isUserGestureRequired = !contextSettings || contextSettings->presentationRequiresUserGesture();
 
-    if (isUserGestureRequired && !UserGestureIndicator::processingUserGesture()) {
+    if (isUserGestureRequired && !UserGestureIndicator::utilizeUserGesture()) {
         resolver->reject(DOMException::create(InvalidAccessError, "PresentationRequest::start() requires user gesture."));
         return promise;
     }
diff --git a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
index e65532efe73..bfa460c 100644
--- a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
+++ b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
@@ -101,7 +101,7 @@
 
     // TODO(avayvod): should we have a separate flag to disable the user gesture
     // requirement (for tests) or reuse the one for the PresentationRequest::start()?
-    if (!UserGestureIndicator::processingUserGesture()) {
+    if (!UserGestureIndicator::utilizeUserGesture()) {
         resolver->reject(DOMException::create(InvalidAccessError, "RemotePlayback::connect() requires user gesture."));
         return promise;
     }
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.cpp
new file mode 100644
index 0000000..e2a1814
--- /dev/null
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.cpp
@@ -0,0 +1,64 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/serviceworkers/ForeignFetchEvent.h"
+
+#include "modules/fetch/Request.h"
+#include "modules/serviceworkers/ServiceWorkerGlobalScope.h"
+#include "wtf/RefPtr.h"
+
+namespace blink {
+
+ForeignFetchEvent* ForeignFetchEvent::create()
+{
+    return new ForeignFetchEvent();
+}
+
+ForeignFetchEvent* ForeignFetchEvent::create(const AtomicString& type, const ForeignFetchEventInit& initializer)
+{
+    return new ForeignFetchEvent(type, initializer, nullptr);
+}
+
+ForeignFetchEvent* ForeignFetchEvent::create(const AtomicString& type, const ForeignFetchEventInit& initializer, ForeignFetchRespondWithObserver* observer)
+{
+    return new ForeignFetchEvent(type, initializer, observer);
+}
+
+Request* ForeignFetchEvent::request() const
+{
+    return m_request;
+}
+
+void ForeignFetchEvent::respondWith(ScriptState* scriptState, ScriptPromise scriptPromise, ExceptionState& exceptionState)
+{
+    stopImmediatePropagation();
+    if (m_observer)
+        m_observer->respondWith(scriptState, scriptPromise, exceptionState);
+}
+
+const AtomicString& ForeignFetchEvent::interfaceName() const
+{
+    return EventNames::ForeignFetchEvent;
+}
+
+ForeignFetchEvent::ForeignFetchEvent()
+{
+}
+
+ForeignFetchEvent::ForeignFetchEvent(const AtomicString& type, const ForeignFetchEventInit& initializer, ForeignFetchRespondWithObserver* observer)
+    : ExtendableEvent(type, initializer)
+    , m_observer(observer)
+{
+    if (initializer.hasRequest())
+        m_request = initializer.request();
+}
+
+DEFINE_TRACE(ForeignFetchEvent)
+{
+    visitor->trace(m_observer);
+    visitor->trace(m_request);
+    ExtendableEvent::trace(visitor);
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.h b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.h
new file mode 100644
index 0000000..aac162e2
--- /dev/null
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.h
@@ -0,0 +1,51 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ForeignFetchEvent_h
+#define ForeignFetchEvent_h
+
+#include "bindings/core/v8/ScriptPromise.h"
+#include "modules/EventModules.h"
+#include "modules/ModulesExport.h"
+#include "modules/fetch/Request.h"
+#include "modules/serviceworkers/ExtendableEvent.h"
+#include "modules/serviceworkers/ForeignFetchEventInit.h"
+#include "modules/serviceworkers/ForeignFetchRespondWithObserver.h"
+#include "platform/heap/Handle.h"
+
+namespace blink {
+
+class ExceptionState;
+class Request;
+
+// A foreignfetch event is dispatched by the client to a service worker's script
+// context. ForeignFetchRespondWithObserver can be used to notify the client
+// about the service worker's response.
+class MODULES_EXPORT ForeignFetchEvent final : public ExtendableEvent {
+    DEFINE_WRAPPERTYPEINFO();
+public:
+    static ForeignFetchEvent* create();
+    static ForeignFetchEvent* create(const AtomicString& type, const ForeignFetchEventInit&);
+    static ForeignFetchEvent* create(const AtomicString& type, const ForeignFetchEventInit&, ForeignFetchRespondWithObserver*);
+
+    Request* request() const;
+
+    void respondWith(ScriptState*, ScriptPromise, ExceptionState&);
+
+    const AtomicString& interfaceName() const override;
+
+    DECLARE_VIRTUAL_TRACE();
+
+protected:
+    ForeignFetchEvent();
+    ForeignFetchEvent(const AtomicString& type, const ForeignFetchEventInit&, ForeignFetchRespondWithObserver*);
+
+private:
+    Member<ForeignFetchRespondWithObserver> m_observer;
+    Member<Request> m_request;
+};
+
+} // namespace blink
+
+#endif // ForeignFetchEvent_h
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.idl b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.idl
new file mode 100644
index 0000000..c3a256d77
--- /dev/null
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEvent.idl
@@ -0,0 +1,14 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#foreign-fetch-event-section
+[
+    Constructor(DOMString type, ForeignFetchEventInit eventInitDict),
+    Exposed=ServiceWorker,
+    RuntimeEnabled=ForeignFetch,
+] interface ForeignFetchEvent : ExtendableEvent {
+    [SameObject] readonly attribute Request request;
+
+    [CallWith=ScriptState, RaisesException] void respondWith(Promise<ForeignFetchResponse> r);
+};
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEventInit.idl b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEventInit.idl
new file mode 100644
index 0000000..d8426fe
--- /dev/null
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#dictdef-foreignfetchevent-foreignfetcheventinit
+
+dictionary ForeignFetchEventInit : ExtendableEventInit {
+  required Request request;
+};
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp
new file mode 100644
index 0000000..a707f716
--- /dev/null
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp
@@ -0,0 +1,36 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/serviceworkers/ForeignFetchRespondWithObserver.h"
+
+#include "modules/serviceworkers/ForeignFetchResponse.h"
+
+namespace blink {
+
+ForeignFetchRespondWithObserver* ForeignFetchRespondWithObserver::create(ExecutionContext* context, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode requestMode, WebURLRequest::FrameType frameType, WebURLRequest::RequestContext requestContext)
+{
+    return new ForeignFetchRespondWithObserver(context, eventID, requestURL, requestMode, frameType, requestContext);
+}
+
+void ForeignFetchRespondWithObserver::responseWasFulfilled(const ScriptValue& value)
+{
+    ASSERT(getExecutionContext());
+    TrackExceptionState exceptionState;
+    ForeignFetchResponse foreignFetchResponse = ScriptValue::to<ForeignFetchResponse>(toIsolate(getExecutionContext()), value, exceptionState);
+    if (exceptionState.hadException()) {
+        responseWasRejected(WebServiceWorkerResponseErrorNoForeignFetchResponse);
+        return;
+    }
+
+    // TODO(mek): Handle foreign fetch specific response parameters.
+    Response* response = foreignFetchResponse.response();
+    RespondWithObserver::responseWasFulfilled(ScriptValue::from(value.getScriptState(), response));
+}
+
+ForeignFetchRespondWithObserver::ForeignFetchRespondWithObserver(ExecutionContext* context, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode requestMode, WebURLRequest::FrameType frameType, WebURLRequest::RequestContext requestContext)
+    : RespondWithObserver(context, eventID, requestURL, requestMode, frameType, requestContext)
+{
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.h b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.h
new file mode 100644
index 0000000..f7e61cb34
--- /dev/null
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.h
@@ -0,0 +1,26 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ForeignFetchRespondWithObserver_h
+#define ForeignFetchRespondWithObserver_h
+
+#include "modules/serviceworkers/RespondWithObserver.h"
+
+namespace blink {
+
+// This class observes the service worker's handling of a ForeignFetchEvent and
+// notifies the client.
+class MODULES_EXPORT ForeignFetchRespondWithObserver final : public RespondWithObserver {
+public:
+    static ForeignFetchRespondWithObserver* create(ExecutionContext*, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode, WebURLRequest::FrameType, WebURLRequest::RequestContext);
+
+    void responseWasFulfilled(const ScriptValue&) override;
+
+private:
+    ForeignFetchRespondWithObserver(ExecutionContext*, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode, WebURLRequest::FrameType, WebURLRequest::RequestContext);
+};
+
+} // namespace blink
+
+#endif // ForeignFetchRespondWithObserver_h
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchResponse.idl b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchResponse.idl
new file mode 100644
index 0000000..629bd1a
--- /dev/null
+++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchResponse.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#dictdef-foreignfetchevent-foreignfetchresponse
+
+dictionary ForeignFetchResponse {
+  required Response response;
+  USVString origin;
+  sequence<ByteString> headers;
+};
diff --git a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
index 5c3f91d..0651903 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
@@ -59,6 +59,9 @@
     case WebServiceWorkerResponseErrorBodyLocked:
         errorMessage = errorMessage + "a Response whose \"body\" is locked cannot be used to respond to a request.";
         break;
+    case WebServiceWorkerResponseErrorNoForeignFetchResponse:
+        errorMessage = errorMessage + "an object that was not a ForeignFetchResponse was passed to respondWith().";
+        break;
     case WebServiceWorkerResponseErrorUnknown:
     default:
         errorMessage = errorMessage + "an unexpected error occurred.";
@@ -134,6 +137,8 @@
     ResolveType m_resolveType;
 };
 
+RespondWithObserver::~RespondWithObserver() {}
+
 RespondWithObserver* RespondWithObserver::create(ExecutionContext* context, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode requestMode, WebURLRequest::FrameType frameType, WebURLRequest::RequestContext requestContext)
 {
     return new RespondWithObserver(context, eventID, requestURL, requestMode, frameType, requestContext);
diff --git a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h
index 7fc8a51..b87cd8b 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.h
@@ -22,9 +22,11 @@
 
 // This class observes the service worker's handling of a FetchEvent and
 // notifies the client.
-class MODULES_EXPORT RespondWithObserver final : public GarbageCollectedFinalized<RespondWithObserver>, public ContextLifecycleObserver {
+class MODULES_EXPORT RespondWithObserver : public GarbageCollectedFinalized<RespondWithObserver>, public ContextLifecycleObserver {
     USING_GARBAGE_COLLECTED_MIXIN(RespondWithObserver);
 public:
+    virtual ~RespondWithObserver();
+
     static RespondWithObserver* create(ExecutionContext*, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode, WebURLRequest::FrameType, WebURLRequest::RequestContext);
 
     void contextDestroyed() override;
@@ -36,15 +38,16 @@
     void respondWith(ScriptState*, ScriptPromise, ExceptionState&);
 
     void responseWasRejected(WebServiceWorkerResponseError);
-    void responseWasFulfilled(const ScriptValue&);
+    virtual void responseWasFulfilled(const ScriptValue&);
 
     DECLARE_VIRTUAL_TRACE();
 
+protected:
+    RespondWithObserver(ExecutionContext*, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode, WebURLRequest::FrameType, WebURLRequest::RequestContext);
+
 private:
     class ThenFunction;
 
-    RespondWithObserver(ExecutionContext*, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode, WebURLRequest::FrameType, WebURLRequest::RequestContext);
-
     int m_eventID;
     KURL m_requestURL;
     WebURLRequest::FetchRequestMode m_requestMode;
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in
index f50181b..56c1455 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in
@@ -212,9 +212,7 @@
 UserSelectAll status=experimental
 WebAnimationsAPI status=experimental
 WebAnimationsSVG status=experimental
-// TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-// WebBluetooth origin_trial_feature_name=WebBluetooth
-WebBluetooth
+WebBluetooth origin_trial_feature_name=WebBluetooth
 WebGLDraftExtensions status=experimental
 WebGLImageChromium
 WebUSB status=experimental
diff --git a/third_party/WebKit/Source/platform/UserGestureIndicator.cpp b/third_party/WebKit/Source/platform/UserGestureIndicator.cpp
index 5b4c436..26619046 100644
--- a/third_party/WebKit/Source/platform/UserGestureIndicator.cpp
+++ b/third_party/WebKit/Source/platform/UserGestureIndicator.cpp
@@ -128,8 +128,9 @@
 UserGestureIndicator* UserGestureIndicator::s_topmostIndicator = 0;
 bool UserGestureIndicator::s_processedUserGestureSinceLoad = false;
 
-UserGestureIndicator::UserGestureIndicator(ProcessingUserGestureState state)
+UserGestureIndicator::UserGestureIndicator(ProcessingUserGestureState state, UserGestureUtilizedCallback* usageCallback)
     : m_previousState(DefinitelyNotProcessingUserGesture)
+    , m_usageCallback(usageCallback)
 {
     // Silently ignore UserGestureIndicators on non-main threads.
     if (!isMainThread())
@@ -158,8 +159,9 @@
     ASSERT(isDefinite(s_state));
 }
 
-UserGestureIndicator::UserGestureIndicator(PassRefPtr<UserGestureToken> token)
+UserGestureIndicator::UserGestureIndicator(PassRefPtr<UserGestureToken> token, UserGestureUtilizedCallback* usageCallback)
     : m_previousState(DefinitelyNotProcessingUserGesture)
+    , m_usageCallback(usageCallback)
 {
     // Silently ignore UserGestureIndicators on non-main threads.
     if (!isMainThread())
@@ -196,6 +198,18 @@
 }
 
 // static
+bool UserGestureIndicator::utilizeUserGesture()
+{
+    if (UserGestureIndicator::processingUserGesture()) {
+        if (s_topmostIndicator->m_usageCallback) {
+            s_topmostIndicator->m_usageCallback->userGestureUtilized();
+            s_topmostIndicator->m_usageCallback = nullptr;
+        }
+        return true;
+    }
+    return false;
+}
+
 bool UserGestureIndicator::processingUserGesture()
 {
     if (auto* token = currentToken()) {
@@ -211,9 +225,14 @@
 {
     if (auto* token = currentToken()) {
         ASSERT(isMainThread());
-        return static_cast<GestureToken*>(token)->consumeGesture();
+        if (static_cast<GestureToken*>(token)->consumeGesture()) {
+            if (s_topmostIndicator->m_usageCallback) {
+                s_topmostIndicator->m_usageCallback->userGestureUtilized();
+                s_topmostIndicator->m_usageCallback = nullptr;
+            }
+            return true;
+        }
     }
-
     return false;
 }
 
diff --git a/third_party/WebKit/Source/platform/UserGestureIndicator.h b/third_party/WebKit/Source/platform/UserGestureIndicator.h
index aa94520..3a35cb1 100644
--- a/third_party/WebKit/Source/platform/UserGestureIndicator.h
+++ b/third_party/WebKit/Source/platform/UserGestureIndicator.h
@@ -51,18 +51,53 @@
     virtual void setPauseInDebugger() = 0;
 };
 
+// Callback to be invoked when the state of a UserGestureIndicator is
+// used (only during the scope of a UserGestureIndicator, does
+// not flow with the UserGestureToken).  It's the responsibility of the
+// caller to ensure the UserGestureUtilizedCallback is kept alive as long
+// as the UserGestureIndicator it's used in.
+// Note that this doesn't currently track EVERY way in which the
+// state of a UserGesture can be read (sometimes it's just propagated
+// elsewhere, or otherwise read in a way that's hard to know if it will
+// actually be used), but should include the primary use cases.  Therefore
+// this is suitable mainly for diagnostics and measurement purposes.
+class PLATFORM_EXPORT UserGestureUtilizedCallback {
+public:
+    virtual ~UserGestureUtilizedCallback() = default;
+    virtual void userGestureUtilized() = 0;
+};
+
 class PLATFORM_EXPORT UserGestureIndicator final {
     USING_FAST_MALLOC(UserGestureIndicator);
     WTF_MAKE_NONCOPYABLE(UserGestureIndicator);
 public:
+    // Returns whether a user gesture is currently in progress.
+    // Does not invoke the UserGestureUtilizedCallback.  Consider calling
+    // utilizeUserGesture instead if you know for sure that the return value
+    // will have an effect.
     static bool processingUserGesture();
+
+    // Indicates that a user gesture (if any) is being used, without preventing it
+    // from being used again.  Returns whether a user gesture is currently in progress.
+    // If true, invokes (and then clears) any UserGestureUtilizedCallback.
+    static bool utilizeUserGesture();
+
+    // Mark the current user gesture (if any) as having been used, such that
+    // it cannot be used again.  This is done only for very security-sensitive
+    // operations like creating a new process.
+    // Like utilizeUserGesture, may invoke/clear any UserGestureUtilizedCallback.
     static bool consumeUserGesture();
+
     static UserGestureToken* currentToken();
+
+    // Reset the notion of "since load".
     static void clearProcessedUserGestureSinceLoad();
+
+    // Returns whether a user gesture has occurred since page load.
     static bool processedUserGestureSinceLoad();
 
-    explicit UserGestureIndicator(ProcessingUserGestureState);
-    explicit UserGestureIndicator(PassRefPtr<UserGestureToken>);
+    explicit UserGestureIndicator(ProcessingUserGestureState, UserGestureUtilizedCallback* = 0);
+    explicit UserGestureIndicator(PassRefPtr<UserGestureToken>, UserGestureUtilizedCallback* = 0);
     ~UserGestureIndicator();
 
 private:
@@ -71,6 +106,7 @@
     static bool s_processedUserGestureSinceLoad;
     ProcessingUserGestureState m_previousState;
     RefPtr<UserGestureToken> m_token;
+    UserGestureUtilizedCallback* m_usageCallback;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/UserGestureIndicatorTest.cpp b/third_party/WebKit/Source/platform/UserGestureIndicatorTest.cpp
index d3dcde9d..c02e468 100644
--- a/third_party/WebKit/Source/platform/UserGestureIndicatorTest.cpp
+++ b/third_party/WebKit/Source/platform/UserGestureIndicatorTest.cpp
@@ -11,7 +11,7 @@
 // Checks for the initial state of UserGestureIndicator.
 TEST(UserGestureIndicatorTest, InitialState)
 {
-    EXPECT_FALSE(UserGestureIndicator::processingUserGesture());
+    EXPECT_FALSE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_FALSE(UserGestureIndicator::processedUserGestureSinceLoad());
     EXPECT_EQ(nullptr, UserGestureIndicator::currentToken());
     EXPECT_FALSE(UserGestureIndicator::consumeUserGesture());
@@ -22,7 +22,7 @@
     UserGestureIndicator::clearProcessedUserGestureSinceLoad();
     UserGestureIndicator userGestureScope(DefinitelyProcessingNewUserGesture);
 
-    EXPECT_TRUE(UserGestureIndicator::processingUserGesture());
+    EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_TRUE(UserGestureIndicator::processedUserGestureSinceLoad());
     EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
 
@@ -34,7 +34,7 @@
     UserGestureIndicator::clearProcessedUserGestureSinceLoad();
     UserGestureIndicator userGestureScope(DefinitelyProcessingUserGesture);
 
-    EXPECT_TRUE(UserGestureIndicator::processingUserGesture());
+    EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_TRUE(UserGestureIndicator::processedUserGestureSinceLoad());
     EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
 
@@ -46,7 +46,7 @@
     UserGestureIndicator::clearProcessedUserGestureSinceLoad();
     UserGestureIndicator userGestureScope(DefinitelyNotProcessingUserGesture);
 
-    EXPECT_FALSE(UserGestureIndicator::processingUserGesture());
+    EXPECT_FALSE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_FALSE(UserGestureIndicator::processedUserGestureSinceLoad());
     EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
 
@@ -59,12 +59,12 @@
     {
         UserGestureIndicator userGestureScope(DefinitelyProcessingUserGesture);
 
-        EXPECT_TRUE(UserGestureIndicator::processingUserGesture());
+        EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
         EXPECT_TRUE(UserGestureIndicator::processedUserGestureSinceLoad());
         EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
     }
 
-    EXPECT_FALSE(UserGestureIndicator::processingUserGesture());
+    EXPECT_FALSE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_EQ(nullptr, UserGestureIndicator::currentToken());
     EXPECT_FALSE(UserGestureIndicator::consumeUserGesture());
 }
@@ -75,7 +75,7 @@
     // Root GestureIndicator and GestureToken.
     UserGestureIndicator userGestureScope(DefinitelyProcessingNewUserGesture);
 
-    EXPECT_TRUE(UserGestureIndicator::processingUserGesture());
+    EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_TRUE(UserGestureIndicator::processedUserGestureSinceLoad());
     EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
     {
@@ -83,20 +83,94 @@
         // It should share GestureToken with the root indicator.
         UserGestureIndicator innerUserGesture(DefinitelyProcessingNewUserGesture);
 
-        EXPECT_TRUE(UserGestureIndicator::processingUserGesture());
+        EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
         EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
 
         // Consume inner gesture.
         EXPECT_TRUE(UserGestureIndicator::consumeUserGesture());
     }
 
-    EXPECT_TRUE(UserGestureIndicator::processingUserGesture());
+    EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
 
     // Consume root gesture.
     EXPECT_TRUE(UserGestureIndicator::consumeUserGesture());
-    EXPECT_FALSE(UserGestureIndicator::processingUserGesture());
+    EXPECT_FALSE(UserGestureIndicator::utilizeUserGesture());
     EXPECT_NE(nullptr, UserGestureIndicator::currentToken());
 }
 
+class UsedCallback : public UserGestureUtilizedCallback {
+public:
+    UsedCallback() : m_usedCount(0)
+    {
+    }
+
+    void userGestureUtilized() override
+    {
+        m_usedCount++;
+    }
+
+    unsigned getAndResetUsedCount()
+    {
+        unsigned curCount = m_usedCount;
+        m_usedCount = 0;
+        return curCount;
+    }
+
+private:
+    unsigned m_usedCount;
+};
+
+// Tests callback invocation.
+TEST(UserGestureIndicatorTest, Callback)
+{
+    UsedCallback cb;
+
+    {
+        UserGestureIndicator userGestureScope(DefinitelyProcessingUserGesture, &cb);
+        EXPECT_EQ(0u, cb.getAndResetUsedCount());
+
+        // Untracked doesn't invoke the callback
+        EXPECT_TRUE(UserGestureIndicator::processingUserGesture());
+        EXPECT_EQ(0u, cb.getAndResetUsedCount());
+
+        // But processingUserGesture does
+        EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
+        EXPECT_EQ(1u, cb.getAndResetUsedCount());
+
+        // But only the first time
+        EXPECT_TRUE(UserGestureIndicator::utilizeUserGesture());
+        EXPECT_TRUE(UserGestureIndicator::consumeUserGesture());
+        EXPECT_EQ(0u, cb.getAndResetUsedCount());
+    }
+    EXPECT_EQ(0u, cb.getAndResetUsedCount());
+
+    {
+        UserGestureIndicator userGestureScope(DefinitelyProcessingUserGesture, &cb);
+
+        // Consume also invokes the callback
+        EXPECT_TRUE(UserGestureIndicator::consumeUserGesture());
+        EXPECT_EQ(1u, cb.getAndResetUsedCount());
+
+        // But only once
+        EXPECT_FALSE(UserGestureIndicator::utilizeUserGesture());
+        EXPECT_FALSE(UserGestureIndicator::consumeUserGesture());
+        EXPECT_EQ(0u, cb.getAndResetUsedCount());
+    }
+
+    {
+        UserGestureIndicator userGestureScope(DefinitelyNotProcessingUserGesture, &cb);
+
+        // Callback not invoked when there isn't actually a user gesture
+        EXPECT_FALSE(UserGestureIndicator::processingUserGesture());
+        EXPECT_EQ(0u, cb.getAndResetUsedCount());
+    }
+
+    // The callback isn't invoked outside the scope of the UGI
+    EXPECT_FALSE(UserGestureIndicator::utilizeUserGesture());
+    EXPECT_EQ(0u, cb.getAndResetUsedCount());
+    EXPECT_FALSE(UserGestureIndicator::consumeUserGesture());
+    EXPECT_EQ(0u, cb.getAndResetUsedCount());
+}
+
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/blink_platform.gypi b/third_party/WebKit/Source/platform/blink_platform.gypi
index fa9b042..d007d0e 100644
--- a/third_party/WebKit/Source/platform/blink_platform.gypi
+++ b/third_party/WebKit/Source/platform/blink_platform.gypi
@@ -650,6 +650,8 @@
       'graphics/StaticBitmapImage.h',
       'graphics/StrokeData.cpp',
       'graphics/StrokeData.h',
+      'graphics/ThreadSafeDataTransport.cpp',
+      'graphics/ThreadSafeDataTransport.h',
       'graphics/UnacceleratedImageBufferSurface.cpp',
       'graphics/UnacceleratedImageBufferSurface.h',
       'graphics/compositing/PaintArtifactCompositor.cpp',
@@ -795,8 +797,6 @@
       'image-decoders/ImageDecoder.h',
       'image-decoders/ImageFrame.cpp',
       'image-decoders/ImageFrame.h',
-      'image-decoders/SegmentReader.cpp',
-      'image-decoders/SegmentReader.h',
       'image-decoders/bmp/BMPImageDecoder.cpp',
       'image-decoders/bmp/BMPImageDecoder.h',
       'image-decoders/bmp/BMPImageReader.cpp',
@@ -1173,6 +1173,7 @@
       'graphics/ContiguousContainerTest.cpp',
       'graphics/GraphicsContextTest.cpp',
       'graphics/RecordingImageBufferSurfaceTest.cpp',
+      'graphics/ThreadSafeDataTransportTest.cpp',
       'graphics/compositing/PaintArtifactCompositorTest.cpp',
       'graphics/filters/FilterOperationsTest.cpp',
       'graphics/filters/ImageFilterBuilderTest.cpp',
diff --git a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
index dbcf9c1..d857ae67 100644
--- a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
@@ -30,16 +30,13 @@
 #include "platform/TraceEvent.h"
 #include "platform/graphics/ImageFrameGenerator.h"
 #include "platform/image-decoders/ImageDecoder.h"
-#include "platform/image-decoders/SegmentReader.h"
 #include "third_party/skia/include/core/SkData.h"
 
 namespace blink {
 
-DecodingImageGenerator::DecodingImageGenerator(PassRefPtr<ImageFrameGenerator> frameGenerator, const SkImageInfo& info, PassRefPtr<SegmentReader> data, bool allDataReceived, size_t index)
+DecodingImageGenerator::DecodingImageGenerator(PassRefPtr<ImageFrameGenerator> frameGenerator, const SkImageInfo& info, size_t index)
     : SkImageGenerator(info)
     , m_frameGenerator(frameGenerator)
-    , m_data(data)
-    , m_allDataReceived(allDataReceived)
     , m_frameIndex(index)
     , m_generationId(0)
     , m_canYUVDecode(false)
@@ -54,7 +51,7 @@
 {
     TRACE_EVENT0("blink", "DecodingImageGenerator::refEncodedData");
 
-    return m_allDataReceived ? m_data->getAsSkData().leakRef() : nullptr;
+    return m_frameGenerator->refEncodedData();
 }
 
 bool DecodingImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor table[], int* tableCount)
@@ -72,7 +69,7 @@
     }
 
     PlatformInstrumentation::willDecodeLazyPixelRef(m_generationId);
-    bool decoded = m_frameGenerator->decodeAndScale(m_data.get(), m_allDataReceived, m_frameIndex, getInfo(), pixels, rowBytes);
+    bool decoded = m_frameGenerator->decodeAndScale(m_frameIndex, getInfo(), pixels, rowBytes);
     PlatformInstrumentation::didDecodeLazyPixelRef();
 
     return decoded;
@@ -80,8 +77,7 @@
 
 bool DecodingImageGenerator::onQueryYUV8(SkYUVSizeInfo* sizeInfo, SkYUVColorSpace* colorSpace) const
 {
-    // YUV decoding does not currently support progressive decoding. See comment in ImageFrameGenerator.h.
-    if (!m_canYUVDecode || !m_allDataReceived)
+    if (!m_canYUVDecode)
         return false;
 
     TRACE_EVENT1("blink", "DecodingImageGenerator::queryYUV8", "sizes", static_cast<int>(m_frameIndex));
@@ -89,18 +85,17 @@
     if (colorSpace)
         *colorSpace = kJPEG_SkYUVColorSpace;
 
-    return m_frameGenerator->getYUVComponentSizes(m_data.get(), sizeInfo);
+    return m_frameGenerator->getYUVComponentSizes(sizeInfo);
 }
 
 bool DecodingImageGenerator::onGetYUV8Planes(const SkYUVSizeInfo& sizeInfo, void* planes[3])
 {
-    // YUV decoding does not currently support progressive decoding. See comment in ImageFrameGenerator.h.
-    ASSERT(m_canYUVDecode && m_allDataReceived);
+    ASSERT(m_canYUVDecode);
 
     TRACE_EVENT1("blink", "DecodingImageGenerator::getYUV8Planes", "frame index", static_cast<int>(m_frameIndex));
 
     PlatformInstrumentation::willDecodeLazyPixelRef(m_generationId);
-    bool decoded = m_frameGenerator->decodeToYUV(m_data.get(), m_frameIndex, sizeInfo.fSizes, planes, sizeInfo.fWidthBytes);
+    bool decoded = m_frameGenerator->decodeToYUV(m_frameIndex, sizeInfo.fSizes, planes, sizeInfo.fWidthBytes);
     PlatformInstrumentation::didDecodeLazyPixelRef();
 
     return decoded;
@@ -108,26 +103,26 @@
 
 SkImageGenerator* DecodingImageGenerator::create(SkData* data)
 {
+    RefPtr<SharedBuffer> buffer = SharedBuffer::create(data->bytes(), data->size());
+
     // We just need the size of the image, so we have to temporarily create an ImageDecoder. Since
     // we only need the size, it doesn't really matter about premul or not, or gamma settings.
-    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(static_cast<const char*>(data->data()), data->size(),
-        ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
+    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*buffer.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
     if (!decoder)
         return 0;
 
-    RefPtr<SegmentReader> segmentReader = SegmentReader::createFromSkData(data);
-    decoder->setData(segmentReader.get(), true);
+    decoder->setData(buffer.get(), true);
     if (!decoder->isSizeAvailable())
         return 0;
 
     const IntSize size = decoder->size();
     const SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height());
 
-    RefPtr<ImageFrameGenerator> frame = ImageFrameGenerator::create(SkISize::Make(size.width(), size.height()), false);
+    RefPtr<ImageFrameGenerator> frame = ImageFrameGenerator::create(SkISize::Make(size.width(), size.height()), buffer, true, false);
     if (!frame)
         return 0;
 
-    return new DecodingImageGenerator(frame, info, segmentReader.release(), true, 0);
+    return new DecodingImageGenerator(frame, info, 0);
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.h b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.h
index bc338d0..65407af 100644
--- a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.h
+++ b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.h
@@ -27,12 +27,10 @@
 #define DecodingImageGenerator_h
 
 #include "platform/PlatformExport.h"
-#include "platform/image-decoders/SegmentReader.h"
 #include "third_party/skia/include/core/SkImageGenerator.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 
 class SkData;
@@ -50,7 +48,7 @@
 public:
     static SkImageGenerator* create(SkData*);
 
-    DecodingImageGenerator(PassRefPtr<ImageFrameGenerator>, const SkImageInfo&, PassRefPtr<SegmentReader>, bool allDataReceived, size_t index);
+    DecodingImageGenerator(PassRefPtr<ImageFrameGenerator>, const SkImageInfo&, size_t index);
     ~DecodingImageGenerator() override;
 
     void setGenerationId(size_t id) { m_generationId = id; }
@@ -67,9 +65,7 @@
 
 private:
     RefPtr<ImageFrameGenerator> m_frameGenerator;
-    const RefPtr<SegmentReader> m_data; // Data source.
-    const bool m_allDataReceived;
-    const size_t m_frameIndex;
+    size_t m_frameIndex;
     size_t m_generationId;
     bool m_canYUVDecode;
 };
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
index 6cebd8a..f1d76fd8 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
@@ -26,12 +26,10 @@
 #include "platform/graphics/DeferredImageDecoder.h"
 
 #include "platform/RuntimeEnabledFeatures.h"
-#include "platform/SharedBuffer.h"
 #include "platform/graphics/DecodingImageGenerator.h"
 #include "platform/graphics/FrameData.h"
 #include "platform/graphics/ImageDecodingStore.h"
 #include "platform/graphics/ImageFrameGenerator.h"
-#include "platform/image-decoders/SegmentReader.h"
 #include "third_party/skia/include/core/SkImage.h"
 #include "wtf/PassOwnPtr.h"
 
@@ -56,6 +54,7 @@
 
 DeferredImageDecoder::DeferredImageDecoder(PassOwnPtr<ImageDecoder> actualDecoder)
     : m_allDataReceived(false)
+    , m_lastDataSize(0)
     , m_actualDecoder(std::move(actualDecoder))
     , m_repetitionCount(cAnimationNone)
     , m_hasColorProfile(false)
@@ -115,20 +114,15 @@
 void DeferredImageDecoder::setData(SharedBuffer& data, bool allDataReceived)
 {
     if (m_actualDecoder) {
+        m_data = RefPtr<SharedBuffer>(data);
+        m_lastDataSize = data.size();
         m_allDataReceived = allDataReceived;
         m_actualDecoder->setData(&data, allDataReceived);
         prepareLazyDecodedFrames();
     }
 
-    if (m_frameGenerator) {
-        if (!m_rwBuffer)
-            m_rwBuffer = adoptPtr(new SkRWBuffer(data.size()));
-
-        const char* segment = 0;
-        for (size_t length = data.getSomeData(segment, m_rwBuffer->size());
-            length; length = data.getSomeData(segment, m_rwBuffer->size()))
-            m_rwBuffer->append(segment, length);
-    }
+    if (m_frameGenerator)
+        m_frameGenerator->setData(&data, allDataReceived);
 }
 
 bool DeferredImageDecoder::isSizeAvailable()
@@ -236,8 +230,7 @@
     m_hasColorProfile = m_actualDecoder->hasColorProfile();
 
     const bool isSingleFrame = m_actualDecoder->repetitionCount() == cAnimationNone || (m_allDataReceived && m_actualDecoder->frameCount() == 1u);
-    const SkISize decodedSize = SkISize::Make(m_actualDecoder->decodedSize().width(), m_actualDecoder->decodedSize().height());
-    m_frameGenerator = ImageFrameGenerator::create(decodedSize, !isSingleFrame);
+    m_frameGenerator = ImageFrameGenerator::create(SkISize::Make(m_actualDecoder->decodedSize().width(), m_actualDecoder->decodedSize().height()), m_data, m_allDataReceived, !isSingleFrame);
 }
 
 void DeferredImageDecoder::prepareLazyDecodedFrames()
@@ -274,7 +267,7 @@
     if (m_allDataReceived) {
         m_repetitionCount = m_actualDecoder->repetitionCount();
         m_actualDecoder.clear();
-        // Hold on to m_rwBuffer, which is still needed by createFrameAtIndex.
+        m_data = nullptr;
     }
 }
 
@@ -289,9 +282,7 @@
     ASSERT(decodedSize.width() > 0);
     ASSERT(decodedSize.height() > 0);
 
-    RefPtr<SkROBuffer> roBuffer = adoptRef(m_rwBuffer->newRBufferSnapshot());
-    RefPtr<SegmentReader> segmentReader = SegmentReader::createFromSkROBuffer(roBuffer.release());
-    DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), segmentReader.release(), m_allDataReceived, index);
+    DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), index);
     RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator)); // SkImage takes ownership of the generator.
     if (!image)
         return nullptr;
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
index d6084c91..3338d4a 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
@@ -31,7 +31,6 @@
 #include "platform/image-decoders/ImageDecoder.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkPixelRef.h"
-#include "third_party/skia/include/core/SkRWBuffer.h"
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/OwnPtr.h"
@@ -89,10 +88,9 @@
 
     PassRefPtr<SkImage> createFrameImageAtIndex(size_t index, bool knownToBeOpaque) const;
 
-    // Copy of the data that is passed in, used by deferred decoding.
-    // Allows creating readonly snapshots that may be read in another thread.
-    OwnPtr<SkRWBuffer> m_rwBuffer;
+    RefPtr<SharedBuffer> m_data;
     bool m_allDataReceived;
+    unsigned m_lastDataSize;
     OwnPtr<ImageDecoder> m_actualDecoder;
 
     String m_filenameExtension;
diff --git a/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp b/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp
index 1fa2cce..bfea0da 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp
@@ -25,6 +25,7 @@
 
 #include "platform/graphics/ImageDecodingStore.h"
 
+#include "platform/SharedBuffer.h"
 #include "platform/graphics/ImageFrameGenerator.h"
 #include "platform/graphics/test/MockImageDecoder.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -36,7 +37,8 @@
     void SetUp() override
     {
         ImageDecodingStore::instance().setCacheLimitInBytes(1024 * 1024);
-        m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), true);
+        m_data = SharedBuffer::create();
+        m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), m_data, true);
         m_decodersDestroyed = 0;
     }
 
@@ -75,6 +77,7 @@
             ImageDecodingStore::instance().setCacheLimitInBytes(0);
     }
 
+    RefPtr<SharedBuffer> m_data;
     RefPtr<ImageFrameGenerator> m_generator;
     int m_decodersDestroyed;
 };
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
index 1decd0f7..312dba24 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
@@ -26,6 +26,7 @@
 #include "platform/graphics/ImageFrameGenerator.h"
 
 #include "SkData.h"
+#include "platform/SharedBuffer.h"
 #include "platform/TraceEvent.h"
 #include "platform/graphics/ImageDecodingStore.h"
 #include "platform/image-decoders/ImageDecoder.h"
@@ -51,7 +52,7 @@
 
 // Creates a SkPixelRef such that the memory for pixels is given by an external body.
 // This is used to write directly to the memory given by Skia during decoding.
-class ExternalMemoryAllocator final : public SkBitmap::Allocator {
+class ImageFrameGenerator::ExternalMemoryAllocator final : public SkBitmap::Allocator {
     USING_FAST_MALLOC(ExternalMemoryAllocator);
     WTF_MAKE_NONCOPYABLE(ExternalMemoryAllocator);
 public:
@@ -100,39 +101,105 @@
     return true;
 }
 
-ImageFrameGenerator::ImageFrameGenerator(const SkISize& fullSize, bool isMultiFrame)
+ImageFrameGenerator::ImageFrameGenerator(const SkISize& fullSize, PassRefPtr<SharedBuffer> data, bool allDataReceived, bool isMultiFrame)
     : m_fullSize(fullSize)
+    , m_data(adoptRef(new ThreadSafeDataTransport()))
     , m_isMultiFrame(isMultiFrame)
     , m_decodeFailed(false)
     , m_yuvDecodingFailed(false)
     , m_frameCount(0)
+    , m_encodedData(nullptr)
 {
+    setData(data.get(), allDataReceived);
 }
 
 ImageFrameGenerator::~ImageFrameGenerator()
 {
+    if (m_encodedData)
+        m_encodedData->unref();
     ImageDecodingStore::instance().removeCacheIndexedByGenerator(this);
 }
 
-bool ImageFrameGenerator::decodeAndScale(SegmentReader* data, bool allDataReceived, size_t index, const SkImageInfo& info, void* pixels, size_t rowBytes)
+void ImageFrameGenerator::setData(PassRefPtr<SharedBuffer> data, bool allDataReceived)
 {
+    m_data->setData(data.get(), allDataReceived);
+}
+
+static void sharedSkDataReleaseCallback(const void* address, void* context)
+{
+    // This gets called when m_encodedData reference count becomes 0 - and it could happen in
+    // ImageFrameGenerator destructor or later when m_encodedData gets dereferenced.
+    // In this method, we deref ThreadSafeDataTransport, as ThreadSafeDataTransport is the owner
+    // of data returned via refEncodedData.
+
+    ThreadSafeDataTransport* dataTransport = static_cast<ThreadSafeDataTransport*>(context);
+#if ENABLE(ASSERT)
+    ASSERT(dataTransport);
+    SharedBuffer* buffer = 0;
+    bool allDataReceived = false;
+    dataTransport->data(&buffer, &allDataReceived);
+    ASSERT(allDataReceived && buffer && buffer->data() == address);
+#endif
+    // Dereference m_data now.
+    dataTransport->deref();
+}
+
+SkData* ImageFrameGenerator::refEncodedData()
+{
+    // SkData is returned only when full image (encoded) data is received. This is important
+    // since DeferredImageDecoder::setData is called only once with allDataReceived set to true,
+    // and after that m_data->m_readBuffer.data() is not changed. See also RELEASE_ASSERT used in
+    // ThreadSafeDataTransport::data().
+    SharedBuffer* buffer = 0;
+    bool allDataReceived = false;
+    m_data->data(&buffer, &allDataReceived);
+    if (!allDataReceived)
+        return nullptr;
+
+    {
+        // Prevents concurrent access to m_encodedData creation.
+        MutexLocker lock(m_decodeMutex);
+        if (m_encodedData) {
+            m_encodedData->ref();
+            return m_encodedData;
+        }
+        // m_encodedData is created with initial reference count == 1. ImageFrameGenerator always holds one
+        // reference to m_encodedData, as it prevents write access in SkData::writable_data.
+        m_encodedData = SkData::NewWithProc(buffer->data(), buffer->size(), sharedSkDataReleaseCallback, m_data.get());
+        // While m_encodedData is referenced, prevent disposing m_data and its content.
+        // it is dereferenced in sharedSkDataReleaseCallback, called when m_encodedData gets dereferenced.
+        m_data->ref();
+    }
+    // Increase the reference, caller must decrease it. One reference is always kept by ImageFrameGenerator and released
+    // in destructor.
+    m_encodedData->ref();
+    return m_encodedData;
+}
+
+bool ImageFrameGenerator::decodeAndScale(size_t index, const SkImageInfo& info, void* pixels, size_t rowBytes)
+{
+    // Prevent concurrent decode or scale operations on the same image data.
+    MutexLocker lock(m_decodeMutex);
+
     if (m_decodeFailed)
         return false;
 
     TRACE_EVENT1("blink", "ImageFrameGenerator::decodeAndScale", "frame index", static_cast<int>(index));
 
-    RefPtr<ExternalMemoryAllocator> externalAllocator = adoptRef(new ExternalMemoryAllocator(info, pixels, rowBytes));
+    m_externalAllocator = adoptPtr(new ExternalMemoryAllocator(info, pixels, rowBytes));
 
     // This implementation does not support scaling so check the requested size.
     SkISize scaledSize = SkISize::Make(info.width(), info.height());
     ASSERT(m_fullSize == scaledSize);
 
-    // TODO (scroggo): Convert tryToResumeDecode() and decode() to take a
-    // PassRefPtr<SkBitmap::Allocator> instead of a bare pointer.
-    SkBitmap bitmap = tryToResumeDecode(data, allDataReceived, index, scaledSize, externalAllocator.get());
+    SkBitmap bitmap = tryToResumeDecode(index, scaledSize);
     if (bitmap.isNull())
         return false;
 
+    // Don't keep the allocator because it contains a pointer to memory
+    // that we do not own.
+    m_externalAllocator.clear();
+
     // Check to see if the decoder has written directly to the pixel memory
     // provided. If not, make a copy.
     ASSERT(bitmap.width() == scaledSize.width());
@@ -143,10 +210,11 @@
     return true;
 }
 
-bool ImageFrameGenerator::decodeToYUV(SegmentReader* data, size_t index, const SkISize componentSizes[3], void* planes[3], const size_t rowBytes[3])
+bool ImageFrameGenerator::decodeToYUV(size_t index, const SkISize componentSizes[3], void* planes[3], const size_t rowBytes[3])
 {
-    // TODO (scroggo): The only interesting thing this uses from the ImageFrameGenerator is m_decodeFailed.
-    // Move this into DecodingImageGenerator, which is the only class that calls it.
+    // Prevent concurrent decode or scale operations on the same image data.
+    MutexLocker lock(m_decodeMutex);
+
     if (m_decodeFailed)
         return false;
 
@@ -157,11 +225,18 @@
         return false;
     }
 
-    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
-    // getYUVComponentSizes was already called and was successful, so ImageDecoder::create must succeed.
-    ASSERT(decoder);
+    SharedBuffer* data = 0;
+    bool allDataReceived = false;
+    m_data->data(&data, &allDataReceived);
 
-    decoder->setData(data, true);
+    // FIXME: YUV decoding does not currently support progressive decoding.
+    ASSERT(allDataReceived);
+
+    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
+    if (!decoder)
+        return false;
+
+    decoder->setData(data, allDataReceived);
 
     OwnPtr<ImagePlanes> imagePlanes = adoptPtr(new ImagePlanes(planes, rowBytes));
     decoder->setImagePlanes(imagePlanes.release());
@@ -178,19 +253,16 @@
     return false;
 }
 
-SkBitmap ImageFrameGenerator::tryToResumeDecode(SegmentReader* data, bool allDataReceived, size_t index, const SkISize& scaledSize, SkBitmap::Allocator* allocator)
+SkBitmap ImageFrameGenerator::tryToResumeDecode(size_t index, const SkISize& scaledSize)
 {
     TRACE_EVENT1("blink", "ImageFrameGenerator::tryToResumeDecode", "frame index", static_cast<int>(index));
 
     ImageDecoder* decoder = 0;
-
-    // Lock the mutex, so only one thread can use the decoder at once.
-    MutexLocker lock(m_decodeMutex);
     const bool resumeDecoding = ImageDecodingStore::instance().lockDecoder(this, m_fullSize, &decoder);
     ASSERT(!resumeDecoding || decoder);
 
     SkBitmap fullSizeImage;
-    bool complete = decode(data, allDataReceived, index, &decoder, &fullSizeImage, allocator);
+    bool complete = decode(index, &decoder, &fullSizeImage);
 
     if (!decoder)
         return SkBitmap();
@@ -250,11 +322,14 @@
     m_hasAlpha[index] = hasAlpha;
 }
 
-bool ImageFrameGenerator::decode(SegmentReader* data, bool allDataReceived, size_t index, ImageDecoder** decoder, SkBitmap* bitmap, SkBitmap::Allocator* allocator)
+bool ImageFrameGenerator::decode(size_t index, ImageDecoder** decoder, SkBitmap* bitmap)
 {
-    ASSERT(m_decodeMutex.locked());
     TRACE_EVENT2("blink", "ImageFrameGenerator::decode", "width", m_fullSize.width(), "height", m_fullSize.height());
 
+    SharedBuffer* data = 0;
+    bool allDataReceived = false;
+    m_data->data(&data, &allDataReceived);
+
     // Try to create an ImageDecoder if we are not given one.
     ASSERT(decoder);
     bool newDecoder = false;
@@ -273,8 +348,8 @@
     if (!m_isMultiFrame && newDecoder && allDataReceived) {
         // If we're using an external memory allocator that means we're decoding
         // directly into the output memory and we can save one memcpy.
-        ASSERT(allocator);
-        (*decoder)->setMemoryAllocator(allocator);
+        ASSERT(m_externalAllocator.get());
+        (*decoder)->setMemoryAllocator(m_externalAllocator.get());
     }
 
     (*decoder)->setData(data, allDataReceived);
@@ -287,7 +362,7 @@
     if (allDataReceived)
         m_frameCount = (*decoder)->frameCount();
 
-    (*decoder)->setData(PassRefPtr<SegmentReader>(nullptr), false); // Unref SegmentReader from ImageDecoder.
+    (*decoder)->setData(0, false); // Unref SharedBuffer from ImageDecoder.
     (*decoder)->clearCacheExceptFrame(index);
     (*decoder)->setMemoryAllocator(0);
 
@@ -317,19 +392,27 @@
     return true;
 }
 
-bool ImageFrameGenerator::getYUVComponentSizes(SegmentReader* data, SkYUVSizeInfo* sizeInfo)
+bool ImageFrameGenerator::getYUVComponentSizes(SkYUVSizeInfo* sizeInfo)
 {
     TRACE_EVENT2("blink", "ImageFrameGenerator::getYUVComponentSizes", "width", m_fullSize.width(), "height", m_fullSize.height());
 
     if (m_yuvDecodingFailed)
         return false;
 
+    SharedBuffer* data = 0;
+    bool allDataReceived = false;
+    m_data->data(&data, &allDataReceived);
+
+    // FIXME: YUV decoding does not currently support progressive decoding.
+    if (!allDataReceived)
+        return false;
+
     OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
     if (!decoder)
         return false;
 
     // Setting a dummy ImagePlanes object signals to the decoder that we want to do YUV decoding.
-    decoder->setData(data, true);
+    decoder->setData(data, allDataReceived);
     OwnPtr<ImagePlanes> dummyImagePlanes = adoptPtr(new ImagePlanes);
     decoder->setImagePlanes(dummyImagePlanes.release());
 
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h
index 4b31634..73ac628 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h
+++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h
@@ -27,7 +27,7 @@
 #define ImageFrameGenerator_h
 
 #include "platform/PlatformExport.h"
-#include "platform/image-decoders/SegmentReader.h"
+#include "platform/graphics/ThreadSafeDataTransport.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkSize.h"
 #include "third_party/skia/include/core/SkTypes.h"
@@ -47,6 +47,7 @@
 namespace blink {
 
 class ImageDecoder;
+class SharedBuffer;
 
 class PLATFORM_EXPORT ImageDecoderFactory {
     USING_FAST_MALLOC(ImageDecoderFactory);
@@ -60,23 +61,27 @@
 class PLATFORM_EXPORT ImageFrameGenerator final : public ThreadSafeRefCounted<ImageFrameGenerator> {
     WTF_MAKE_NONCOPYABLE(ImageFrameGenerator);
 public:
-    static PassRefPtr<ImageFrameGenerator> create(const SkISize& fullSize, bool isMultiFrame = false)
+    static PassRefPtr<ImageFrameGenerator> create(const SkISize& fullSize, PassRefPtr<SharedBuffer> data, bool allDataReceived, bool isMultiFrame = false)
     {
-        return adoptRef(new ImageFrameGenerator(fullSize, isMultiFrame));
+        return adoptRef(new ImageFrameGenerator(fullSize, data, allDataReceived, isMultiFrame));
     }
 
     ~ImageFrameGenerator();
 
+    void setData(PassRefPtr<SharedBuffer>, bool allDataReceived);
+
+    // Return our encoded image data. Caller takes ownership and must unref the data
+    // according to the contract SkImageGenerator::refEncodedData. Returns null if
+    // the data is has not been fully received.
+    SkData* refEncodedData();
+
     // Decodes and scales the specified frame at |index|. The dimensions and output
     // format are given in SkImageInfo. Decoded pixels are written into |pixels| with
     // a stride of |rowBytes|. Returns true if decoding was successful.
-    bool decodeAndScale(SegmentReader*, bool allDataReceived, size_t index, const SkImageInfo&, void* pixels, size_t rowBytes);
+    bool decodeAndScale(size_t index, const SkImageInfo&, void* pixels, size_t rowBytes);
 
     // Decodes YUV components directly into the provided memory planes.
-    // Must not be called unless getYUVComponentSizes has been called and returned true.
-    // YUV decoding does not currently support progressive decoding. In order to support it, ImageDecoder needs something
-    // analagous to its ImageFrame cache to hold partial planes, and the GPU code needs to handle them.
-    bool decodeToYUV(SegmentReader*, size_t index, const SkISize componentSizes[3], void* planes[3], const size_t rowBytes[3]);
+    bool decodeToYUV(size_t index, const SkISize componentSizes[3], void* planes[3], const size_t rowBytes[3]);
 
     const SkISize& getFullSize() const { return m_fullSize; }
 
@@ -85,12 +90,10 @@
 
     bool hasAlpha(size_t index);
 
-    // Must not be called unless the SkROBuffer has all the data.
-    // YUV decoding does not currently support progressive decoding. See comment above on decodeToYUV.
-    bool getYUVComponentSizes(SegmentReader*, SkYUVSizeInfo*);
+    bool getYUVComponentSizes(SkYUVSizeInfo*);
 
 private:
-    ImageFrameGenerator(const SkISize& fullSize, bool isMultiFrame);
+    ImageFrameGenerator(const SkISize& fullSize, PassRefPtr<SharedBuffer>, bool allDataReceived, bool isMultiFrame);
 
     friend class ImageFrameGeneratorTest;
     friend class DeferredImageDecoderTest;
@@ -99,18 +102,26 @@
 
     void setHasAlpha(size_t index, bool hasAlpha);
 
-    SkBitmap tryToResumeDecode(SegmentReader*, bool allDataReceived, size_t index, const SkISize& scaledSize, SkBitmap::Allocator*);
-    // This method should only be called while m_decodeMutex is locked.
-    bool decode(SegmentReader*, bool allDataReceived, size_t index, ImageDecoder**, SkBitmap*, SkBitmap::Allocator*);
+    // These methods are called while m_decodeMutex is locked.
+    SkBitmap tryToResumeDecode(size_t index, const SkISize& scaledSize);
+    bool decode(size_t index, ImageDecoder**, SkBitmap*);
 
-    const SkISize m_fullSize;
+    SkISize m_fullSize;
 
-    const bool m_isMultiFrame;
+    // ThreadSafeDataTransport is referenced by this class and m_encodedData.
+    // In case that ImageFrameGenerator get's deleted before m_encodedData,
+    // m_encodedData would hold the reference to it (and underlying data).
+    RefPtr<ThreadSafeDataTransport> m_data;
+
+    bool m_isMultiFrame;
     bool m_decodeFailed;
     bool m_yuvDecodingFailed;
     size_t m_frameCount;
     Vector<bool> m_hasAlpha;
 
+    class ExternalMemoryAllocator;
+    OwnPtr<ExternalMemoryAllocator> m_externalAllocator;
+
     OwnPtr<ImageDecoderFactory> m_imageDecoderFactory;
 
     // Prevents multiple decode operations on the same data.
@@ -118,6 +129,13 @@
 
     // Protect concurrent access to m_hasAlpha.
     Mutex m_alphaMutex;
+
+    // Our encoded image data returned in refEncodedData.
+    SkData* m_encodedData;
+
+#if COMPILER(MSVC)
+    friend struct ::WTF::OwnedPtrDeleter<ExternalMemoryAllocator>;
+#endif
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp
index 4b9d1b7..aef5863c 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp
@@ -29,7 +29,6 @@
 #include "platform/ThreadSafeFunctional.h"
 #include "platform/graphics/ImageDecodingStore.h"
 #include "platform/graphics/test/MockImageDecoder.h"
-#include "platform/image-decoders/SegmentReader.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebTaskRunner.h"
 #include "public/platform/WebThread.h"
@@ -55,9 +54,8 @@
     void SetUp() override
     {
         ImageDecodingStore::instance().setCacheLimitInBytes(1024 * 1024);
-        m_generator = ImageFrameGenerator::create(fullSize(), false);
         m_data = SharedBuffer::create();
-        m_segmentReader = SegmentReader::createFromSharedBuffer(m_data);
+        m_generator = ImageFrameGenerator::create(fullSize(), m_data, false);
         useMockImageDecoderFactory();
         m_decodersDestroyed = 0;
         m_decodeRequestCount = 0;
@@ -103,9 +101,10 @@
         m_generator->setImageDecoderFactory(MockImageDecoderFactory::create(this, fullSize()));
     }
 
-    void addNewData()
+    void addNewData(bool allDataReceived = false)
     {
         m_data->append("g", 1u);
+        m_generator->setData(m_data, allDataReceived);
     }
 
     void setFrameStatus(ImageFrame::Status status)  { m_status = m_nextFrameStatus = status; }
@@ -115,13 +114,12 @@
         m_frameCount = count;
         if (count > 1) {
             m_generator.clear();
-            m_generator = ImageFrameGenerator::create(fullSize(), true);
+            m_generator = ImageFrameGenerator::create(fullSize(), m_data, true, true);
             useMockImageDecoderFactory();
         }
     }
 
     RefPtr<SharedBuffer> m_data;
-    RefPtr<SegmentReader> m_segmentReader;
     RefPtr<ImageFrameGenerator> m_generator;
     int m_decodersDestroyed;
     int m_decodeRequestCount;
@@ -136,11 +134,11 @@
     setFrameStatus(ImageFrame::FramePartial);
 
     char buffer[100 * 100 * 4];
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(1, m_decodeRequestCount);
 
     addNewData();
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(2, m_decodeRequestCount);
     EXPECT_EQ(0, m_decodersDestroyed);
 }
@@ -150,26 +148,35 @@
     setFrameStatus(ImageFrame::FramePartial);
 
     char buffer[100 * 100 * 4];
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(1, m_decodeRequestCount);
     EXPECT_EQ(0, m_decodersDestroyed);
 
     setFrameStatus(ImageFrame::FrameComplete);
     addNewData();
 
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(2, m_decodeRequestCount);
     EXPECT_EQ(1, m_decodersDestroyed);
 
     // Decoder created again.
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(3, m_decodeRequestCount);
 }
 
-static void decodeThreadMain(ImageFrameGenerator* generator, SegmentReader* segmentReader)
+static void decodeThreadMain(ImageFrameGenerator* generator)
 {
     char buffer[100 * 100 * 4];
-    generator->decodeAndScale(segmentReader, false, 0, imageInfo(), buffer, 100 * 4);
+    generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
+}
+
+static void decodeThreadWithRefEncodedMain(ImageFrameGenerator* generator)
+{
+    // Image must be complete - refEncodedData otherwise returns null.
+    char buffer[100 * 100 * 4];
+    SkData* data = generator->refEncodedData();
+    generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
+    data->unref();
 }
 
 TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesCompleteMultiThreaded)
@@ -177,27 +184,52 @@
     setFrameStatus(ImageFrame::FramePartial);
 
     char buffer[100 * 100 * 4];
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(1, m_decodeRequestCount);
     EXPECT_EQ(0, m_decodersDestroyed);
+    SkData* data = m_generator->refEncodedData();
+    EXPECT_EQ(nullptr, data);
 
     // LocalFrame can now be decoded completely.
     setFrameStatus(ImageFrame::FrameComplete);
     addNewData();
+    // addNewData is calling m_generator->setData with allDataReceived == false, which means that
+    // refEncodedData should return null.
+    data = m_generator->refEncodedData();
+    EXPECT_EQ(nullptr, data);
     OwnPtr<WebThread> thread = adoptPtr(Platform::current()->createThread("DecodeThread"));
-    thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&decodeThreadMain, AllowCrossThreadAccess(m_generator.get()), AllowCrossThreadAccess(m_segmentReader.get())));
+    thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&decodeThreadMain, AllowCrossThreadAccess(m_generator.get())));
     thread.clear();
     EXPECT_EQ(2, m_decodeRequestCount);
     EXPECT_EQ(1, m_decodersDestroyed);
 
     // Decoder created again.
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(3, m_decodeRequestCount);
 
-    addNewData();
+    addNewData(true);
+    data = m_generator->refEncodedData();
+    ASSERT_TRUE(data);
+    // To prevent data writting, SkData::unique() should be false.
+    ASSERT_TRUE(!data->unique());
 
-    // Delete generator.
+    // Thread will also ref and unref the data.
+    thread = adoptPtr(Platform::current()->createThread("RefEncodedDataThread"));
+    thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&decodeThreadWithRefEncodedMain, AllowCrossThreadAccess(m_generator.get())));
+    thread.clear();
+    EXPECT_EQ(4, m_decodeRequestCount);
+
+    data->unref();
+    // m_generator is holding the only reference to SkData now.
+    ASSERT_TRUE(data->unique());
+
+    data = m_generator->refEncodedData();
+    ASSERT_TRUE(data && !data->unique());
+
+    // Delete generator, and SkData should have the only reference.
     m_generator = nullptr;
+    ASSERT_TRUE(data->unique());
+    data->unref();
 }
 
 TEST_F(ImageFrameGeneratorTest, frameHasAlpha)
@@ -205,7 +237,7 @@
     setFrameStatus(ImageFrame::FramePartial);
 
     char buffer[100 * 100 * 4];
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_TRUE(m_generator->hasAlpha(0));
     EXPECT_EQ(1, m_decodeRequestCount);
 
@@ -217,7 +249,7 @@
     EXPECT_EQ(2, m_decodeRequestCount);
 
     setFrameStatus(ImageFrame::FrameComplete);
-    m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(3, m_decodeRequestCount);
     EXPECT_FALSE(m_generator->hasAlpha(0));
 }
@@ -228,14 +260,14 @@
     setFrameStatus(ImageFrame::FrameComplete);
 
     char buffer[100 * 100 * 4];
-    m_generator->decodeAndScale(m_segmentReader.get(), true, 0, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(1, m_decodeRequestCount);
     EXPECT_EQ(0, m_decodersDestroyed);
     EXPECT_EQ(0U, m_requestedClearExceptFrame);
 
     setFrameStatus(ImageFrame::FrameComplete);
 
-    m_generator->decodeAndScale(m_segmentReader.get(), true, 1, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(1, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(2, m_decodeRequestCount);
     EXPECT_EQ(0, m_decodersDestroyed);
     EXPECT_EQ(1U, m_requestedClearExceptFrame);
@@ -245,7 +277,7 @@
     // Decoding the last frame of a multi-frame images should trigger clearing
     // all the frame data, but not destroying the decoder.  See comments in
     // ImageFrameGenerator::tryToResumeDecode().
-    m_generator->decodeAndScale(m_segmentReader.get(), true, 2, imageInfo(), buffer, 100 * 4);
+    m_generator->decodeAndScale(2, imageInfo(), buffer, 100 * 4);
     EXPECT_EQ(3, m_decodeRequestCount);
     EXPECT_EQ(0, m_decodersDestroyed);
     EXPECT_EQ(kNotFound, m_requestedClearExceptFrame);
diff --git a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp
index 5a4d008..e5ff225 100644
--- a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp
+++ b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp
@@ -38,9 +38,7 @@
 #include "platform/graphics/skia/ImagePixelLocker.h"
 #include "platform/image-decoders/ImageDecoder.h"
 #include "platform/image-decoders/ImageFrame.h"
-#include "platform/image-decoders/SegmentReader.h"
 #include "platform/image-encoders/skia/PNGImageEncoder.h"
-#include "third_party/skia/include/core/SkData.h"
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
 #include "third_party/skia/include/core/SkStream.h"
@@ -58,14 +56,11 @@
 
 static bool decodeBitmap(const void* data, size_t length, SkBitmap* result)
 {
-    OwnPtr<ImageDecoder> imageDecoder = ImageDecoder::create(static_cast<const char*>(data), length,
-        ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored);
+    RefPtr<SharedBuffer> buffer = SharedBuffer::create(static_cast<const char*>(data), length);
+    OwnPtr<ImageDecoder> imageDecoder = ImageDecoder::create(*buffer, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored);
     if (!imageDecoder)
         return false;
-
-    // No need to copy the data; this decodes immediately.
-    RefPtr<SegmentReader> segmentReader = SegmentReader::createFromSkData(adoptRef(SkData::NewWithoutCopy(data, length)));
-    imageDecoder->setData(segmentReader.release(), true);
+    imageDecoder->setData(buffer.get(), true);
     ImageFrame* frame = imageDecoder->frameBufferAtIndex(0);
     if (!frame)
         return true;
diff --git a/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransport.cpp b/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransport.cpp
new file mode 100644
index 0000000..f191017a
--- /dev/null
+++ b/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransport.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "platform/graphics/ThreadSafeDataTransport.h"
+
+#include "platform/SharedBuffer.h"
+
+namespace blink {
+
+ThreadSafeDataTransport::ThreadSafeDataTransport()
+    : m_readBuffer(SharedBuffer::create())
+    , m_allDataReceived(false)
+    , m_readPosition(0)
+{
+}
+
+ThreadSafeDataTransport::~ThreadSafeDataTransport()
+{
+}
+
+void ThreadSafeDataTransport::setData(SharedBuffer* buffer, bool allDataReceived)
+{
+    ASSERT(buffer->size() >= m_readPosition);
+    Vector<RefPtr<SharedBuffer>> newBufferQueue;
+
+    const char* segment = 0;
+    while (size_t length = buffer->getSomeData(segment, m_readPosition)) {
+        m_readPosition += length;
+        newBufferQueue.append(SharedBuffer::create(segment, length));
+    }
+
+    MutexLocker locker(m_mutex);
+
+    // If all data was previously received, don't append more to it.
+    RELEASE_ASSERT(!(m_allDataReceived && newBufferQueue.size()));
+
+    m_newBufferQueue.appendVector(newBufferQueue);
+    newBufferQueue.clear();
+    m_allDataReceived = allDataReceived;
+}
+
+void ThreadSafeDataTransport::data(SharedBuffer** buffer, bool* allDataReceived)
+{
+    ASSERT(buffer);
+    ASSERT(allDataReceived);
+    Vector<RefPtr<SharedBuffer>> newBufferQueue;
+    {
+        MutexLocker lock(m_mutex);
+        m_newBufferQueue.swap(newBufferQueue);
+        *allDataReceived = m_allDataReceived;
+    }
+    for (size_t i = 0; i < newBufferQueue.size(); ++i)
+        m_readBuffer->append(newBufferQueue[i].get());
+    *buffer = m_readBuffer.get();
+}
+
+bool ThreadSafeDataTransport::hasNewData()
+{
+    MutexLocker lock(m_mutex);
+    return !m_newBufferQueue.isEmpty();
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransport.h b/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransport.h
new file mode 100644
index 0000000..3aae947
--- /dev/null
+++ b/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransport.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ThreadSafeDataTransport_h
+#define ThreadSafeDataTransport_h
+
+#include "platform/PlatformExport.h"
+#include "wtf/Allocator.h"
+#include "wtf/Noncopyable.h"
+#include "wtf/OwnPtr.h"
+#include "wtf/PassOwnPtr.h"
+#include "wtf/RefPtr.h"
+#include "wtf/ThreadSafeRefCounted.h"
+#include "wtf/ThreadingPrimitives.h"
+#include "wtf/Vector.h"
+
+namespace blink {
+
+class SharedBuffer;
+
+// The purpose of this class is to allow the transfer of data stored in
+// SharedBuffer in a thread-safe manner, and to minimize memory copies
+// and thread contention.
+//
+// This class is designed such that there is only one producer and
+// one consumer.
+
+class PLATFORM_EXPORT ThreadSafeDataTransport final : public ThreadSafeRefCounted<ThreadSafeDataTransport> {
+    WTF_MAKE_NONCOPYABLE(ThreadSafeDataTransport);
+public:
+    ThreadSafeDataTransport();
+    ~ThreadSafeDataTransport();
+
+    // This method is being called subsequently with an expanding
+    // SharedBuffer.
+    void setData(SharedBuffer*, bool allDataReceived);
+
+    // Get the data submitted to this class so far.
+    void data(SharedBuffer**, bool* allDataReceived);
+
+    // Return true of there is new data submitted to this class
+    // since last time data() was called.
+    bool hasNewData();
+
+private:
+    Mutex m_mutex;
+
+    Vector<RefPtr<SharedBuffer>> m_newBufferQueue;
+    RefPtr<SharedBuffer> m_readBuffer;
+    bool m_allDataReceived;
+    size_t m_readPosition;
+};
+
+} // namespace blink
+
+#endif
diff --git a/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransportTest.cpp b/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransportTest.cpp
new file mode 100644
index 0000000..69462ec
--- /dev/null
+++ b/third_party/WebKit/Source/platform/graphics/ThreadSafeDataTransportTest.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "platform/graphics/ThreadSafeDataTransport.h"
+
+#include "platform/SharedBuffer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace blink {
+
+TEST(ThreadSafeDataTransportTest, hasNewData)
+{
+    ThreadSafeDataTransport transport;
+
+    const char testString[] = "123456789";
+    RefPtr<SharedBuffer> buffer = SharedBuffer::create(testString, sizeof(testString));
+
+    transport.setData(buffer.get(), false);
+    EXPECT_TRUE(transport.hasNewData());
+
+    SharedBuffer* tempBuffer = 0;
+    bool allDataReceived = false;
+    transport.data(&tempBuffer, &allDataReceived);
+    EXPECT_FALSE(transport.hasNewData());
+
+    transport.setData(buffer.get(), false);
+    EXPECT_FALSE(transport.hasNewData());
+}
+
+TEST(ThreadSafeDataTransportTest, setData)
+{
+    ThreadSafeDataTransport transport;
+
+    const char testString1[] = "123";
+    RefPtr<SharedBuffer> buffer1 = SharedBuffer::create(testString1, sizeof(testString1) - 1);
+    const char testString2[] = "12345";
+    RefPtr<SharedBuffer> buffer2 = SharedBuffer::create(testString2, sizeof(testString2) - 1);
+    const char testString3[] = "1234567890";
+    RefPtr<SharedBuffer> buffer3 = SharedBuffer::create(testString3, sizeof(testString3) - 1);
+
+    transport.setData(buffer1.get(), false);
+    transport.setData(buffer2.get(), false);
+    transport.setData(buffer3.get(), true);
+    EXPECT_TRUE(transport.hasNewData());
+
+    SharedBuffer* tempBuffer = 0;
+    bool allDataReceived = false;
+    transport.data(&tempBuffer, &allDataReceived);
+    EXPECT_TRUE(allDataReceived);
+    EXPECT_FALSE(memcmp(testString3, tempBuffer->data(), tempBuffer->size()));
+}
+
+} // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.cpp b/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.cpp
index ba2f2390..63a380a 100644
--- a/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.cpp
@@ -32,7 +32,7 @@
 
 namespace blink {
 
-FastSharedBufferReader::FastSharedBufferReader(PassRefPtr<SegmentReader> data)
+FastSharedBufferReader::FastSharedBufferReader(PassRefPtr<SharedBuffer> data)
     : m_data(data)
     , m_segment(0)
     , m_segmentLength(0)
@@ -40,7 +40,7 @@
 {
 }
 
-void FastSharedBufferReader::setData(PassRefPtr<SegmentReader> data)
+void FastSharedBufferReader::setData(PassRefPtr<SharedBuffer> data)
 {
     if (data == m_data)
         return;
diff --git a/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.h b/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.h
index e82beaa..c1bf3f91 100644
--- a/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.h
+++ b/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReader.h
@@ -32,7 +32,7 @@
 #define FastSharedBufferReader_h
 
 #include "platform/PlatformExport.h"
-#include "platform/image-decoders/SegmentReader.h"
+#include "platform/SharedBuffer.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/PassRefPtr.h"
@@ -48,9 +48,9 @@
     DISALLOW_NEW();
     WTF_MAKE_NONCOPYABLE(FastSharedBufferReader);
 public:
-    FastSharedBufferReader(PassRefPtr<SegmentReader> data);
+    FastSharedBufferReader(PassRefPtr<SharedBuffer> data);
 
-    void setData(PassRefPtr<SegmentReader>);
+    void setData(PassRefPtr<SharedBuffer>);
 
     // Returns a consecutive buffer that carries the data starting
     // at |dataPosition| with |length| bytes.
@@ -60,7 +60,7 @@
     // Caller must ensure there are enough bytes in |m_data| and |buffer|.
     const char* getConsecutiveData(size_t dataPosition, size_t length, char* buffer) const;
 
-    // Wraps SegmentReader::getSomeData().
+    // Wraps SharedBuffer::getSomeData().
     size_t getSomeData(const char*& someData, size_t dataPosition) const;
 
     // Returns a byte at |dataPosition|.
@@ -76,14 +76,14 @@
     }
 
     // This class caches the last access for faster subsequent reads. This
-    // method clears that cache in case the SegmentReader has been modified
-    // (e.g. with mergeSegmentsIntoBuffer on a wrapped SharedBuffer).
+    // method clears that cache in case the SharedBuffer has been modified
+    // (i.e. with mergeSegmentsIntoBuffer).
     void clearCache();
 
 private:
     void getSomeDataInternal(size_t dataPosition) const;
 
-    RefPtr<SegmentReader> m_data;
+    RefPtr<SharedBuffer> m_data;
 
     // Caches the last segment of |m_data| accessed, since subsequent reads are
     // likely to re-access it.
diff --git a/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp
index 2e74a89..3ea9aa0 100644
--- a/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp
@@ -29,7 +29,6 @@
  */
 
 #include "platform/image-decoders/FastSharedBufferReader.h"
-#include "platform/image-decoders/SegmentReader.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -45,34 +44,6 @@
         buffer[i] = static_cast<char>(i);
 }
 
-PassRefPtr<SegmentReader> copyToROBufferSegmentReader(PassRefPtr<SegmentReader> input)
-{
-    SkRWBuffer rwBuffer;
-    const char* segment = 0;
-    size_t position = 0;
-    while (size_t length = input->getSomeData(segment, position)) {
-        rwBuffer.append(segment, length);
-        position += length;
-    }
-    return SegmentReader::createFromSkROBuffer(adoptRef(rwBuffer.newRBufferSnapshot()));
-}
-
-PassRefPtr<SegmentReader> copyToDataSegmentReader(PassRefPtr<SegmentReader> input)
-{
-    return SegmentReader::createFromSkData(input->getAsSkData());
-}
-
-struct SegmentReaders {
-    RefPtr<SegmentReader> segmentReaders[3];
-
-    SegmentReaders(PassRefPtr<SharedBuffer> input)
-    {
-        segmentReaders[0] = SegmentReader::createFromSharedBuffer(input);
-        segmentReaders[1] = copyToROBufferSegmentReader(segmentReaders[0]);
-        segmentReaders[2] = copyToDataSegmentReader(segmentReaders[0]);
-    }
-};
-
 } // namespace
 
 TEST(FastSharedBufferReaderTest, nonSequentialReads)
@@ -82,17 +53,15 @@
     RefPtr<SharedBuffer> data = SharedBuffer::create();
     data->append(referenceData, sizeof(referenceData));
 
-    SegmentReaders readerStruct(data);
-    for (auto segmentReader : readerStruct.segmentReaders) {
-        FastSharedBufferReader reader(segmentReader);
-        // Read size is prime such there will be a segment-spanning
-        // read eventually.
-        char tempBuffer[17];
-        for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(referenceData); dataPosition += sizeof(tempBuffer)) {
-            const char* block = reader.getConsecutiveData(
-                dataPosition, sizeof(tempBuffer), tempBuffer);
-            ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuffer)));
-        }
+    FastSharedBufferReader reader(data);
+
+    // Read size is prime such there will be a segment-spanning
+    // read eventually.
+    char tempBuffer[17];
+    for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(referenceData); dataPosition += sizeof(tempBuffer)) {
+        const char* block = reader.getConsecutiveData(
+            dataPosition, sizeof(tempBuffer), tempBuffer);
+        ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuffer)));
     }
 }
 
@@ -103,17 +72,15 @@
     RefPtr<SharedBuffer> data = SharedBuffer::create();
     data->append(referenceData, sizeof(referenceData));
 
-    SegmentReaders readerStruct(data);
-    for (auto segmentReader : readerStruct.segmentReaders) {
-        FastSharedBufferReader reader(segmentReader);
-        // Read size is prime such there will be a segment-spanning
-        // read eventually.
-        char tempBuffer[17];
-        for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceData); dataOffset += sizeof(tempBuffer)) {
-            const char* block = reader.getConsecutiveData(
-                sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer);
-            ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataOffset, sizeof(tempBuffer)));
-        }
+    FastSharedBufferReader reader(data);
+
+    // Read size is prime such there will be a segment-spanning
+    // read eventually.
+    char tempBuffer[17];
+    for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceData); dataOffset += sizeof(tempBuffer)) {
+        const char* block = reader.getConsecutiveData(
+            sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer);
+        ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataOffset, sizeof(tempBuffer)));
     }
 }
 
@@ -124,12 +91,9 @@
     RefPtr<SharedBuffer> data = SharedBuffer::create();
     data->append(referenceData, sizeof(referenceData));
 
-    SegmentReaders readerStruct(data);
-    for (auto segmentReader : readerStruct.segmentReaders) {
-        FastSharedBufferReader reader(segmentReader);
-        for (size_t i = 0; i < sizeof(referenceData); ++i) {
-            ASSERT_EQ(referenceData[i], reader.getOneByte(i));
-        }
+    FastSharedBufferReader reader(data);
+    for (size_t i = 0; i < sizeof(referenceData); ++i) {
+        ASSERT_EQ(referenceData[i], reader.getOneByte(i));
     }
 }
 
@@ -143,97 +107,11 @@
     RefPtr<SharedBuffer> data = SharedBuffer::create();
     data->append(referenceData, dataSize);
 
-    SegmentReaders readerStruct(data);
-    for (auto segmentReader : readerStruct.segmentReaders) {
-        FastSharedBufferReader reader(segmentReader);
-        char buffer[dataSize];
-        reader.getConsecutiveData(0, dataSize, buffer);
-        ASSERT_FALSE(memcmp(buffer, referenceData, dataSize));
-    }
-}
+    char buffer[dataSize];
+    FastSharedBufferReader reader(data);
+    reader.getConsecutiveData(0, dataSize, buffer);
 
-// Verify that reading past the end of the buffer does not break future reads.
-TEST(SegmentReaderTest, readPastEndThenRead)
-{
-    const unsigned dataSize = 2 * SharedBuffer::kSegmentSize;
-    char referenceData[dataSize];
-    prepareReferenceData(referenceData, dataSize);
-    RefPtr<SharedBuffer> data = SharedBuffer::create();
-    data->append(referenceData, dataSize);
-
-    SegmentReaders readerStruct(data);
-    for (auto segmentReader : readerStruct.segmentReaders) {
-        const char* contents;
-        size_t length = segmentReader->getSomeData(contents, dataSize);
-        EXPECT_EQ(0u, length);
-
-        length = segmentReader->getSomeData(contents, 0);
-        EXPECT_LE(SharedBuffer::kSegmentSize, length);
-    }
-}
-
-TEST(SegmentReaderTest, getAsSkData)
-{
-    const unsigned dataSize = 4 * SharedBuffer::kSegmentSize;
-    char referenceData[dataSize];
-    prepareReferenceData(referenceData, dataSize);
-    RefPtr<SharedBuffer> data = SharedBuffer::create();
-    data->append(referenceData, dataSize);
-
-    SegmentReaders readerStruct(data);
-    for (auto segmentReader : readerStruct.segmentReaders) {
-        RefPtr<SkData> skdata = segmentReader->getAsSkData();
-        EXPECT_EQ(data->size(), skdata->size());
-
-        const char* segment;
-        size_t position = 0;
-        for (size_t length = segmentReader->getSomeData(segment, position);
-            length; length = segmentReader->getSomeData(segment, position)) {
-            ASSERT_FALSE(memcmp(segment, skdata->bytes() + position, length));
-            position += length;
-        }
-        EXPECT_EQ(position, dataSize);
-    }
-}
-
-TEST(SegmentReaderTest, variableSegments)
-{
-    const size_t dataSize = 3.5 * SharedBuffer::kSegmentSize;
-    char referenceData[dataSize];
-    prepareReferenceData(referenceData, dataSize);
-
-    RefPtr<SegmentReader> segmentReader;
-    {
-        // Create a SegmentReader with difference sized segments, to test that
-        // the SkROBuffer implementation works when two consecutive segments
-        // are not the same size. This test relies on knowledge of the
-        // internals of SkRWBuffer: it ensures that each segment is at least
-        // 4096 (though the actual data may be smaller, if it has not been
-        // written to yet), but when appending a larger amount it may create a
-        // larger segment.
-        SkRWBuffer rwBuffer;
-        rwBuffer.append(referenceData, SharedBuffer::kSegmentSize);
-        rwBuffer.append(referenceData + SharedBuffer::kSegmentSize, 2 * SharedBuffer::kSegmentSize);
-        rwBuffer.append(referenceData + 3 * SharedBuffer::kSegmentSize, .5 * SharedBuffer::kSegmentSize);
-
-        segmentReader = SegmentReader::createFromSkROBuffer(adoptRef(rwBuffer.newRBufferSnapshot()));
-    }
-
-    const char* segment;
-    size_t position = 0;
-    size_t lastLength = 0;
-    for (size_t length = segmentReader->getSomeData(segment, position);
-        length; length = segmentReader->getSomeData(segment, position)) {
-        // It is not a bug to have consecutive segments of the same length, but
-        // it does mean that the following test does not actually test what it
-        // is intended to test.
-        ASSERT_NE(length, lastLength);
-        lastLength = length;
-
-        ASSERT_FALSE(memcmp(segment, referenceData + position, length));
-        position += length;
-    }
-    EXPECT_EQ(position, dataSize);
+    ASSERT_FALSE(memcmp(buffer, referenceData, dataSize));
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
index c008c4b..663f0d5d 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
@@ -32,51 +32,67 @@
 
 namespace blink {
 
-inline bool matchesJPEGSignature(const char* contents)
+static size_t copyFromSharedBuffer(char* buffer, size_t bufferLength, const SharedBuffer& sharedBuffer, size_t offset)
+{
+    size_t bytesExtracted = 0;
+    const char* moreData;
+    while (size_t moreDataLength = sharedBuffer.getSomeData(moreData, offset)) {
+        size_t bytesToCopy = std::min(bufferLength - bytesExtracted, moreDataLength);
+        memcpy(buffer + bytesExtracted, moreData, bytesToCopy);
+        bytesExtracted += bytesToCopy;
+        if (bytesExtracted == bufferLength)
+            break;
+        offset += bytesToCopy;
+    }
+    return bytesExtracted;
+}
+
+inline bool matchesJPEGSignature(char* contents)
 {
     return !memcmp(contents, "\xFF\xD8\xFF", 3);
 }
 
-inline bool matchesPNGSignature(const char* contents)
+inline bool matchesPNGSignature(char* contents)
 {
     return !memcmp(contents, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8);
 }
 
-inline bool matchesGIFSignature(const char* contents)
+inline bool matchesGIFSignature(char* contents)
 {
     return !memcmp(contents, "GIF87a", 6) || !memcmp(contents, "GIF89a", 6);
 }
 
-inline bool matchesWebPSignature(const char* contents)
+inline bool matchesWebPSignature(char* contents)
 {
     return !memcmp(contents, "RIFF", 4) && !memcmp(contents + 8, "WEBPVP", 6);
 }
 
-inline bool matchesICOSignature(const char* contents)
+inline bool matchesICOSignature(char* contents)
 {
     return !memcmp(contents, "\x00\x00\x01\x00", 4);
 }
 
-inline bool matchesCURSignature(const char* contents)
+inline bool matchesCURSignature(char* contents)
 {
     return !memcmp(contents, "\x00\x00\x02\x00", 4);
 }
 
-inline bool matchesBMPSignature(const char* contents)
+inline bool matchesBMPSignature(char* contents)
 {
     return !memcmp(contents, "BM", 2);
 }
 
-PassOwnPtr<ImageDecoder> ImageDecoder::create(const char* contents, size_t length, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
+PassOwnPtr<ImageDecoder> ImageDecoder::create(const SharedBuffer& data, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
 {
     const size_t longestSignatureLength = sizeof("RIFF????WEBPVP") - 1;
     ASSERT(longestSignatureLength == 14);
 
-    if (length < longestSignatureLength)
-        return nullptr;
-
     size_t maxDecodedBytes = Platform::current() ? Platform::current()->maxDecodedImageBytes() : noDecodedImageByteLimit;
 
+    char contents[longestSignatureLength];
+    if (copyFromSharedBuffer(contents, longestSignatureLength, data, 0) < longestSignatureLength)
+        return nullptr;
+
     if (matchesJPEGSignature(contents))
         return adoptPtr(new JPEGImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
 
@@ -98,20 +114,6 @@
     return nullptr;
 }
 
-PassOwnPtr<ImageDecoder> ImageDecoder::create(const SharedBuffer& data, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
-{
-    const char* contents;
-    const size_t length = data.getSomeData<size_t>(contents);
-    return create(contents, length, alphaOption, colorOptions);
-}
-
-PassOwnPtr<ImageDecoder> ImageDecoder::create(const SegmentReader& data, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
-{
-    const char* contents;
-    const size_t length = data.getSomeData(contents, 0);
-    return create(contents, length, alphaOption, colorOptions);
-}
-
 size_t ImageDecoder::frameCount()
 {
     const size_t oldSize = m_frameBufferCache.size();
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
index 7da3b9b..55eec65 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
@@ -33,7 +33,6 @@
 #include "platform/graphics/ImageOrientation.h"
 #include "platform/image-decoders/ImageAnimation.h"
 #include "platform/image-decoders/ImageFrame.h"
-#include "platform/image-decoders/SegmentReader.h"
 #include "public/platform/Platform.h"
 #include "wtf/Assertions.h"
 #include "wtf/PassOwnPtr.h"
@@ -123,29 +122,22 @@
     // we can't sniff a supported type from the provided data (possibly
     // because there isn't enough data yet).
     // Sets m_maxDecodedBytes to Platform::maxImageDecodedBytes().
-    static PassOwnPtr<ImageDecoder> create(const char* data, size_t length, AlphaOption, GammaAndColorProfileOption);
-    static PassOwnPtr<ImageDecoder> create(const SharedBuffer&, AlphaOption, GammaAndColorProfileOption);
-    static PassOwnPtr<ImageDecoder> create(const SegmentReader&, AlphaOption, GammaAndColorProfileOption);
+    static PassOwnPtr<ImageDecoder> create(const SharedBuffer& data, AlphaOption, GammaAndColorProfileOption);
 
     virtual String filenameExtension() const = 0;
 
     bool isAllDataReceived() const { return m_isAllDataReceived; }
 
-    void setData(PassRefPtr<SegmentReader> data, bool allDataReceived)
+    void setData(SharedBuffer* data, bool allDataReceived)
     {
         if (m_failed)
             return;
         m_data = data;
         m_isAllDataReceived = allDataReceived;
-        onSetData(m_data.get());
+        onSetData(data);
     }
 
-    void setData(PassRefPtr<SharedBuffer> data, bool allDataReceived)
-    {
-        setData(SegmentReader::createFromSharedBuffer(data), allDataReceived);
-    }
-
-    virtual void onSetData(SegmentReader* data) { }
+    virtual void onSetData(SharedBuffer* data) { }
 
     bool isSizeAvailable()
     {
@@ -318,7 +310,7 @@
     // Decodes the requested frame.
     virtual void decode(size_t) = 0;
 
-    RefPtr<SegmentReader> m_data; // The encoded data.
+    RefPtr<SharedBuffer> m_data; // The encoded data.
     Vector<ImageFrame, 1> m_frameBufferCache;
     bool m_premultiplyAlpha;
     bool m_ignoreGammaAndColorProfile;
diff --git a/third_party/WebKit/Source/platform/image-decoders/SegmentReader.cpp b/third_party/WebKit/Source/platform/image-decoders/SegmentReader.cpp
deleted file mode 100644
index e412952..0000000
--- a/third_party/WebKit/Source/platform/image-decoders/SegmentReader.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "platform/image-decoders/SegmentReader.h"
-
-#include "platform/SharedBuffer.h"
-#include "third_party/skia/include/core/SkData.h"
-#include "wtf/Assertions.h"
-#include "wtf/Noncopyable.h"
-#include "wtf/PassRefPtr.h"
-#include "wtf/RefPtr.h"
-
-namespace blink {
-
-// SharedBufferSegmentReader ---------------------------------------------------
-
-// Interface for ImageDecoder to read a SharedBuffer.
-class SharedBufferSegmentReader final : public SegmentReader {
-    WTF_MAKE_NONCOPYABLE(SharedBufferSegmentReader);
-public:
-    SharedBufferSegmentReader(PassRefPtr<SharedBuffer>);
-    size_t size() const override;
-    size_t getSomeData(const char*& data, size_t position) const override;
-    PassRefPtr<SkData> getAsSkData() const override;
-private:
-    RefPtr<SharedBuffer> m_sharedBuffer;
-};
-
-SharedBufferSegmentReader::SharedBufferSegmentReader(PassRefPtr<SharedBuffer> buffer)
-    : m_sharedBuffer(buffer) {}
-
-size_t SharedBufferSegmentReader::size() const
-{
-    return m_sharedBuffer->size();
-}
-
-size_t SharedBufferSegmentReader::getSomeData(const char*& data, size_t position) const
-{
-    return m_sharedBuffer->getSomeData(data, position);
-}
-
-PassRefPtr<SkData> SharedBufferSegmentReader::getAsSkData() const
-{
-    return m_sharedBuffer->getAsSkData();
-}
-
-// DataSegmentReader -----------------------------------------------------------
-
-// Interface for ImageDecoder to read an SkData.
-class DataSegmentReader final : public SegmentReader {
-    WTF_MAKE_NONCOPYABLE(DataSegmentReader);
-public:
-    DataSegmentReader(PassRefPtr<SkData>);
-    size_t size() const override;
-    size_t getSomeData(const char*& data, size_t position) const override;
-    PassRefPtr<SkData> getAsSkData() const override;
-private:
-    RefPtr<SkData> m_data;
-};
-
-DataSegmentReader::DataSegmentReader(PassRefPtr<SkData> data)
-    : m_data(data) {}
-
-size_t DataSegmentReader::size() const
-{
-    return m_data->size();
-}
-
-size_t DataSegmentReader::getSomeData(const char*& data, size_t position) const
-{
-    if (position >= m_data->size())
-        return 0;
-
-    data = reinterpret_cast<const char*>(m_data->bytes() + position);
-    return m_data->size() - position;
-}
-
-PassRefPtr<SkData> DataSegmentReader::getAsSkData() const
-{
-    return m_data.get();
-}
-
-// ROBufferSegmentReader -------------------------------------------------------
-
-class ROBufferSegmentReader final : public SegmentReader {
-    WTF_MAKE_NONCOPYABLE(ROBufferSegmentReader);
-public:
-    ROBufferSegmentReader(PassRefPtr<SkROBuffer>);
-
-    size_t size() const override;
-    size_t getSomeData(const char*& data, size_t position) const override;
-    PassRefPtr<SkData> getAsSkData() const override;
-
-private:
-    RefPtr<SkROBuffer> m_roBuffer;
-};
-
-ROBufferSegmentReader::ROBufferSegmentReader(PassRefPtr<SkROBuffer> buffer)
-    : m_roBuffer(buffer)
-    {}
-
-size_t ROBufferSegmentReader::size() const
-{
-    return m_roBuffer ? m_roBuffer->size() : 0;
-}
-
-size_t ROBufferSegmentReader::getSomeData(const char*& data, size_t position) const
-{
-    if (!m_roBuffer)
-        return 0;
-
-    SkROBuffer::Iter iter(m_roBuffer.get());
-    for (size_t sizeOfBlock = iter.size(), positionOfBlock = 0; sizeOfBlock != 0; positionOfBlock += sizeOfBlock, sizeOfBlock = iter.size()) {
-        ASSERT(positionOfBlock <= position);
-
-        if (positionOfBlock + sizeOfBlock > position) {
-            // |position| is in this block.
-            const size_t positionInBlock = position - positionOfBlock;
-            data = static_cast<const char*>(iter.data()) + positionInBlock;
-            return sizeOfBlock - positionInBlock;
-        }
-
-        // Move to next block.
-        if (!iter.next()) {
-            return 0;
-        }
-    }
-
-    return 0;
-}
-
-static void unrefROBuffer(const void* ptr, void* context)
-{
-    static_cast<SkROBuffer*>(context)->unref();
-}
-
-PassRefPtr<SkData> ROBufferSegmentReader::getAsSkData() const
-{
-    if (!m_roBuffer)
-        return nullptr;
-
-    // Check to see if the data is already contiguous.
-    SkROBuffer::Iter iter(m_roBuffer.get());
-    const bool multipleBlocks = iter.next();
-    iter.reset(m_roBuffer.get());
-
-    if (!multipleBlocks) {
-        // Contiguous data. No need to copy.
-        m_roBuffer->ref();
-        return adoptRef(SkData::NewWithProc(iter.data(), iter.size(), &unrefROBuffer, m_roBuffer.get()));
-    }
-
-    RefPtr<SkData> data = adoptRef(SkData::NewUninitialized(m_roBuffer->size()));
-    char* dst = static_cast<char*>(data->writable_data());
-    do {
-        size_t size = iter.size();
-        memcpy(dst, iter.data(), size);
-        dst += size;
-    } while (iter.next());
-    return data.release();
-}
-
-// SegmentReader ---------------------------------------------------------------
-
-PassRefPtr<SegmentReader> SegmentReader::createFromSharedBuffer(PassRefPtr<SharedBuffer> buffer)
-{
-    return adoptRef(new SharedBufferSegmentReader(buffer));
-}
-
-PassRefPtr<SegmentReader> SegmentReader::createFromSkData(PassRefPtr<SkData> data)
-{
-    return adoptRef(new DataSegmentReader(data));
-}
-
-PassRefPtr<SegmentReader> SegmentReader::createFromSkROBuffer(PassRefPtr<SkROBuffer> buffer)
-{
-    return adoptRef(new ROBufferSegmentReader(buffer));
-}
-
-} // namespace blink
-
diff --git a/third_party/WebKit/Source/platform/image-decoders/SegmentReader.h b/third_party/WebKit/Source/platform/image-decoders/SegmentReader.h
deleted file mode 100644
index 13c28ce..0000000
--- a/third_party/WebKit/Source/platform/image-decoders/SegmentReader.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SegmentReader_h
-#define SegmentReader_h
-
-#include "platform/SharedBuffer.h"
-#include "third_party/skia/include/core/SkData.h"
-#include "third_party/skia/include/core/SkRWBuffer.h"
-#include "wtf/Noncopyable.h"
-#include "wtf/PassRefPtr.h"
-#include "wtf/ThreadSafeRefCounted.h"
-
-namespace blink {
-
-// Interface that looks like SharedBuffer. Used by ImageDecoders to use various
-// sources of input including:
-// - SharedBuffer
-//   - for when the caller already has a SharedBuffer
-// - SkData
-//   - for when the caller already has an SkData
-// - SkROBuffer
-//   - for when the caller wants to read/write in different threads
-//
-// Unlike SharedBuffer, this is a read-only interface. There is no way to
-// modify the underlying data source.
-class PLATFORM_EXPORT SegmentReader : public ThreadSafeRefCounted<SegmentReader> {
-    WTF_MAKE_NONCOPYABLE(SegmentReader);
-public:
-    // This version is thread-safe so long as no thread is modifying the
-    // underlying SharedBuffer. This class does not modify it, so that would
-    // mean modifying it in another way.
-    static PassRefPtr<SegmentReader> createFromSharedBuffer(PassRefPtr<SharedBuffer>);
-
-    // These versions use thread-safe input, so they are always thread-safe.
-    static PassRefPtr<SegmentReader> createFromSkData(PassRefPtr<SkData>);
-    static PassRefPtr<SegmentReader> createFromSkROBuffer(PassRefPtr<SkROBuffer>);
-
-    SegmentReader() {}
-    virtual ~SegmentReader() {}
-    virtual size_t size() const = 0;
-    virtual size_t getSomeData(const char*& data, size_t position) const = 0;
-    virtual PassRefPtr<SkData> getAsSkData() const = 0;
-};
-
-} // namespace blink
-#endif // SegmentReader_h
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp
index 01815ab..998faac6 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp
@@ -46,7 +46,7 @@
 {
 }
 
-void BMPImageDecoder::onSetData(SegmentReader* data)
+void BMPImageDecoder::onSetData(SharedBuffer* data)
 {
     if (m_reader)
         m_reader->setData(data);
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h
index e4a6bd1..c2053a5 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h
@@ -43,7 +43,7 @@
 
     // ImageDecoder:
     String filenameExtension() const override { return "bmp"; }
-    void onSetData(SegmentReader*) override;
+    void onSetData(SharedBuffer*) override;
     // CAUTION: setFailed() deletes |m_reader|.  Be careful to avoid
     // accessing deleted memory, especially when calling this from inside
     // BMPImageReader!
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h
index d150a56..7bfa563 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageReader.h
@@ -65,7 +65,7 @@
     BMPImageReader(ImageDecoder* parent, size_t decodedAndHeaderOffset, size_t imgDataOffset, bool isInICO);
 
     void setBuffer(ImageFrame* buffer) { m_buffer = buffer; }
-    void setData(SegmentReader* data)
+    void setData(SharedBuffer* data)
     {
         m_data = data;
         m_fastReader.setData(data);
@@ -290,7 +290,7 @@
     ImageFrame* m_buffer;
 
     // The file to decode.
-    RefPtr<SegmentReader> m_data;
+    RefPtr<SharedBuffer> m_data;
     FastSharedBufferReader m_fastReader;
 
     // An index into |m_data| representing how much we've already decoded.
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
index 457666d2..824764c5 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
@@ -42,7 +42,7 @@
 {
 }
 
-void GIFImageDecoder::onSetData(SegmentReader* data)
+void GIFImageDecoder::onSetData(SharedBuffer* data)
 {
     if (m_reader)
         m_reader->setData(data);
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h
index 98941e68..f9aa02c4 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h
@@ -47,7 +47,7 @@
 
     // ImageDecoder:
     String filenameExtension() const override { return "gif"; }
-    void onSetData(SegmentReader* data) override;
+    void onSetData(SharedBuffer* data) override;
     int repetitionCount() const override;
     bool frameIsCompleteAtIndex(size_t) const override;
     float frameDurationAtIndex(size_t) const override;
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h
index bfa9897..6172377 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h
@@ -40,6 +40,7 @@
 
 // Define ourselves as the clientPtr.  Mozilla just hacked their C++ callback class into this old C decoder,
 // so we will too.
+#include "platform/SharedBuffer.h"
 #include "platform/image-decoders/FastSharedBufferReader.h"
 #include "platform/image-decoders/gif/GIFImageDecoder.h"
 #include "wtf/Allocator.h"
@@ -298,7 +299,7 @@
     {
     }
 
-    void setData(PassRefPtr<blink::SegmentReader> data) { m_data = data; }
+    void setData(PassRefPtr<blink::SharedBuffer> data) { m_data = data; }
     bool parse(blink::GIFImageDecoder::GIFParseQuery);
     bool decode(size_t frameIndex);
 
@@ -355,7 +356,7 @@
 
     Vector<OwnPtr<GIFFrameContext>> m_frames;
 
-    RefPtr<blink::SegmentReader> m_data;
+    RefPtr<blink::SharedBuffer> m_data;
     bool m_parseCompleted;
 };
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
index a189f81..592eb96 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
@@ -54,7 +54,7 @@
 {
 }
 
-void ICOImageDecoder::onSetData(SegmentReader* data)
+void ICOImageDecoder::onSetData(SharedBuffer* data)
 {
     m_fastReader.setData(data);
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
index 3df9ba1..73759ba 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
@@ -46,7 +46,7 @@
 
     // ImageDecoder:
     String filenameExtension() const override { return "ico"; }
-    void onSetData(SegmentReader*) override;
+    void onSetData(SharedBuffer*) override;
     IntSize size() const override;
     IntSize frameSizeAtIndex(size_t) const override;
     bool setSize(unsigned width, unsigned height) override;
diff --git a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
index 03b465d8..79434ab 100644
--- a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
@@ -361,19 +361,19 @@
         return true;
     }
 
-    void setData(SegmentReader* data)
+    void setData(SharedBuffer* data)
     {
         if (m_data.get() == data)
             return;
 
         m_data = data;
 
-        // If a restart is needed, the next call to fillBuffer will read from the new SegmentReader.
+        // If a restart is needed, the next call to fillBuffer will read from the new SharedBuffer.
         if (m_needsRestart)
             return;
 
         // Otherwise, empty the buffer, and leave the position the same, so fillBuffer continues
-        // reading from the same position in the new SegmentReader.
+        // reading from the same position in the new SharedBuffer.
         m_nextReadPosition -= m_info.src->bytes_in_buffer;
         clearBuffer();
     }
@@ -637,7 +637,7 @@
         m_lastSetByte = nullptr;
     }
 
-    RefPtr<SegmentReader> m_data;
+    RefPtr<SharedBuffer> m_data;
     JPEGImageDecoder* m_decoder;
 
     // Input reading: True if we need to back up to m_restartPosition.
@@ -723,7 +723,7 @@
     return true;
 }
 
-void JPEGImageDecoder::onSetData(SegmentReader* data)
+void JPEGImageDecoder::onSetData(SharedBuffer* data)
 {
     if (m_reader)
         m_reader->setData(data);
diff --git a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h
index 74a0681..704a7cca 100644
--- a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h
@@ -40,7 +40,7 @@
 
     // ImageDecoder:
     String filenameExtension() const override { return "jpg"; }
-    void onSetData(SegmentReader* data) override;
+    void onSetData(SharedBuffer* data) override;
     IntSize decodedSize() const override { return m_decodedSize; }
     bool setSize(unsigned width, unsigned height) override;
     IntSize decodedYUVSize(int component) const override;
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
index 5f787b5..bff97c2 100644
--- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -110,7 +110,7 @@
         m_readOffset = 0;
     }
 
-    bool decode(const SegmentReader& data, bool sizeOnly)
+    bool decode(const SharedBuffer& data, bool sizeOnly)
     {
         m_decodingSizeOnly = sizeOnly;
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp
index fae908a7..2672862d 100644
--- a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.cpp
@@ -144,7 +144,6 @@
 {
     WebPDemuxDelete(m_demux);
     m_demux = 0;
-    m_consolidatedData.clear();
     clearDecoder();
 }
 
@@ -156,7 +155,7 @@
     m_frameBackgroundHasAlpha = false;
 }
 
-void WEBPImageDecoder::onSetData(SegmentReader*)
+void WEBPImageDecoder::onSetData(SharedBuffer*)
 {
     m_haveAlreadyParsedThisData = false;
 }
@@ -196,14 +195,10 @@
         return false; // Await VP8X header so WebPDemuxPartial succeeds.
 
     WebPDemuxDelete(m_demux);
-    m_consolidatedData = m_data->getAsSkData();
-    WebPData inputData = { reinterpret_cast<const uint8_t*>(m_consolidatedData->data()), m_consolidatedData->size() };
+    WebPData inputData = { reinterpret_cast<const uint8_t*>(m_data->data()), m_data->size() };
     m_demux = WebPDemuxPartial(&inputData, &m_demuxState);
-    if (!m_demux || (isAllDataReceived() && m_demuxState != WEBP_DEMUX_DONE)) {
-        if (!m_demux)
-            m_consolidatedData.clear();
+    if (!m_demux || (isAllDataReceived() && m_demuxState != WEBP_DEMUX_DONE))
         return setFailed();
-    }
 
     ASSERT(m_demuxState > WEBP_DEMUX_PARSING_HEADER);
     if (!WebPDemuxGetI(m_demux, WEBP_FF_FRAME_COUNT))
diff --git a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.h
index 718ae30..c991671 100644
--- a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoder.h
@@ -30,10 +30,8 @@
 #define WEBPImageDecoder_h
 
 #include "platform/image-decoders/ImageDecoder.h"
-#include "third_party/skia/include/core/SkData.h"
 #include "webp/decode.h"
 #include "webp/demux.h"
-#include "wtf/RefPtr.h"
 
 namespace blink {
 
@@ -45,7 +43,7 @@
 
     // ImageDecoder:
     String filenameExtension() const override { return "webp"; }
-    void onSetData(SegmentReader* data) override;
+    void onSetData(SharedBuffer* data) override;
     int repetitionCount() const override;
     bool frameIsCompleteAtIndex(size_t) const override;
     float frameDurationAtIndex(size_t) const override;
@@ -85,9 +83,6 @@
 
     void clear();
     void clearDecoder();
-
-    // FIXME: Update libwebp's API so it does not require copying the data on each update.
-    RefPtr<SkData> m_consolidatedData;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/network/ResourceRequest.h b/third_party/WebKit/Source/platform/network/ResourceRequest.h
index 3594ce1..c47898a 100644
--- a/third_party/WebKit/Source/platform/network/ResourceRequest.h
+++ b/third_party/WebKit/Source/platform/network/ResourceRequest.h
@@ -148,7 +148,6 @@
     void setHTTPUserAgent(const AtomicString& httpUserAgent) { setHTTPHeaderField(HTTPNames::User_Agent, httpUserAgent); }
     void clearHTTPUserAgent();
 
-    const AtomicString& httpAccept() const { return httpHeaderField(HTTPNames::Accept); }
     void setHTTPAccept(const AtomicString& httpAccept) { setHTTPHeaderField(HTTPNames::Accept, httpAccept); }
 
     EncodedFormData* httpBody() const;
diff --git a/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.cpp b/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.cpp
index 193b646..a301b38 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.cpp
+++ b/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.cpp
@@ -34,6 +34,7 @@
 #include "platform/inspector_protocol/Values.h"
 #include "platform/v8_inspector/V8DebuggerAgentImpl.h"
 #include "platform/v8_inspector/V8InspectorSessionImpl.h"
+#include "platform/v8_inspector/V8RuntimeAgentImpl.h"
 #include "platform/v8_inspector/public/V8Debugger.h"
 
 namespace blink {
@@ -53,25 +54,16 @@
 {
 }
 
-void InjectedScriptHost::disconnect()
-{
-    m_debugger = nullptr;
-    m_session = nullptr;
-    m_inspectedObjects.clear();
-}
-
 void InjectedScriptHost::inspectImpl(PassOwnPtr<protocol::Value> object, PassOwnPtr<protocol::Value> hints)
 {
-    if (m_session && m_session->inspectCallback()) {
-        protocol::ErrorSupport errors;
-        OwnPtr<protocol::Runtime::RemoteObject> remoteObject = protocol::Runtime::RemoteObject::parse(object.get(), &errors);
-        (*m_session->inspectCallback())(remoteObject.release(), protocol::DictionaryValue::cast(hints));
-    }
+    protocol::ErrorSupport errors;
+    OwnPtr<protocol::Runtime::RemoteObject> remoteObject = protocol::Runtime::RemoteObject::parse(object.get(), &errors);
+    m_session->runtimeAgentImpl()->inspect(remoteObject.release(), protocol::DictionaryValue::cast(hints));
 }
 
 void InjectedScriptHost::clearConsoleMessages()
 {
-    if (m_session && m_session->clearConsoleCallback())
+    if (m_session->clearConsoleCallback())
         (*m_session->clearConsoleCallback())();
 }
 
@@ -96,14 +88,12 @@
 
 void InjectedScriptHost::debugFunction(const String16& scriptId, int lineNumber, int columnNumber)
 {
-    if (m_session)
-        m_session->debuggerAgentImpl()->setBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::DebugCommandBreakpointSource);
+    m_session->debuggerAgentImpl()->setBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::DebugCommandBreakpointSource);
 }
 
 void InjectedScriptHost::undebugFunction(const String16& scriptId, int lineNumber, int columnNumber)
 {
-    if (m_session)
-        m_session->debuggerAgentImpl()->removeBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::DebugCommandBreakpointSource);
+    m_session->debuggerAgentImpl()->removeBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::DebugCommandBreakpointSource);
 }
 
 void InjectedScriptHost::monitorFunction(const String16& scriptId, int lineNumber, int columnNumber, const String16& functionName)
@@ -115,14 +105,12 @@
     else
         builder.append(functionName);
     builder.append(" called\" + (arguments.length > 0 ? \" with arguments: \" + Array.prototype.join.call(arguments, \", \") : \"\")) && false");
-    if (m_session)
-        m_session->debuggerAgentImpl()->setBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::MonitorCommandBreakpointSource, builder.toString());
+    m_session->debuggerAgentImpl()->setBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::MonitorCommandBreakpointSource, builder.toString());
 }
 
 void InjectedScriptHost::unmonitorFunction(const String16& scriptId, int lineNumber, int columnNumber)
 {
-    if (m_session)
-        m_session->debuggerAgentImpl()->removeBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::MonitorCommandBreakpointSource);
+    m_session->debuggerAgentImpl()->removeBreakpointAt(scriptId, lineNumber, columnNumber, V8DebuggerAgentImpl::MonitorCommandBreakpointSource);
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.h b/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.h
index 46300f5..19ccc041f 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.h
+++ b/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptHost.h
@@ -56,8 +56,6 @@
     static PassOwnPtr<InjectedScriptHost> create(V8DebuggerImpl*, V8InspectorSessionImpl*);
     ~InjectedScriptHost();
 
-    void disconnect();
-
     void addInspectedObject(PassOwnPtr<V8RuntimeAgent::Inspectable>);
     void clearInspectedObjects();
     V8RuntimeAgent::Inspectable* inspectedObject(unsigned num);
@@ -81,8 +79,6 @@
 
     V8DebuggerImpl* m_debugger;
     V8InspectorSessionImpl* m_session;
-    OwnPtr<V8RuntimeAgent::InspectCallback> m_inspectCallback;
-    OwnPtr<V8RuntimeAgent::ClearConsoleCallback> m_clearConsoleCallback;
     protocol::Vector<OwnPtr<V8RuntimeAgent::Inspectable>> m_inspectedObjects;
     v8::Global<v8::FunctionTemplate> m_wrapperTemplate;
 };
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp
index 70eeef74..8856807 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp
+++ b/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.cpp
@@ -32,7 +32,6 @@
     , m_debuggerAgent(adoptPtr(new V8DebuggerAgentImpl(this)))
     , m_heapProfilerAgent(adoptPtr(new V8HeapProfilerAgentImpl(this)))
     , m_profilerAgent(adoptPtr(new V8ProfilerAgentImpl(this)))
-    , m_inspectCallback(nullptr)
     , m_clearConsoleCallback(nullptr)
 {
 }
@@ -89,9 +88,14 @@
 
 InjectedScript* V8InspectorSessionImpl::findInjectedScript(ErrorString* errorString, int contextId)
 {
+    if (!contextId) {
+        *errorString = "Cannot find context with specified id";
+        return nullptr;
+    }
+
     const V8DebuggerImpl::ContextByIdMap* contexts = m_debugger->contextGroup(m_contextGroupId);
     if (!contexts || !contexts->contains(contextId)) {
-        *errorString = "Inspected frame has gone";
+        *errorString = "Cannot find context with specified id";
         return nullptr;
     }
 
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.h b/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.h
index c8b47ce..1915382a 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.h
+++ b/third_party/WebKit/Source/platform/v8_inspector/V8InspectorSessionImpl.h
@@ -54,8 +54,6 @@
 
     void setClearConsoleCallback(PassOwnPtr<V8RuntimeAgent::ClearConsoleCallback> callback) { m_clearConsoleCallback = callback; }
     V8RuntimeAgent::ClearConsoleCallback* clearConsoleCallback() { return m_clearConsoleCallback.get(); }
-    void setInspectObjectCallback(PassOwnPtr<V8RuntimeAgent::InspectCallback> callback) { m_inspectCallback = callback; }
-    V8RuntimeAgent::InspectCallback* inspectCallback() { return m_inspectCallback.get(); }
 
 private:
     V8InspectorSessionImpl(V8DebuggerImpl*, int contextGroupId);
@@ -70,7 +68,6 @@
     OwnPtr<V8HeapProfilerAgentImpl> m_heapProfilerAgent;
     OwnPtr<V8ProfilerAgentImpl> m_profilerAgent;
 
-    OwnPtr<V8RuntimeAgent::InspectCallback> m_inspectCallback;
     OwnPtr<V8RuntimeAgent::ClearConsoleCallback> m_clearConsoleCallback;
 };
 
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp
index e7b111aa..af523eff 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp
+++ b/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp
@@ -469,11 +469,6 @@
     m_session->setClearConsoleCallback(callback);
 }
 
-void V8RuntimeAgentImpl::setInspectObjectCallback(PassOwnPtr<V8RuntimeAgent::InspectCallback> callback)
-{
-    m_session->setInspectObjectCallback(callback);
-}
-
 PassOwnPtr<RemoteObject> V8RuntimeAgentImpl::wrapObject(v8::Local<v8::Context> context, v8::Local<v8::Value> value, const String16& groupName, bool generatePreview)
 {
     ErrorString errorString;
@@ -555,4 +550,10 @@
     }
 }
 
+void V8RuntimeAgentImpl::inspect(PassOwnPtr<protocol::Runtime::RemoteObject> objectToInspect, PassOwnPtr<protocol::DictionaryValue> hints)
+{
+    if (m_enabled)
+        m_frontend->inspectRequested(objectToInspect, hints);
+}
+
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.h b/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.h
index 935af12b..1eccf5e 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.h
+++ b/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.h
@@ -117,9 +117,9 @@
     void reset();
     void reportExecutionContextCreated(InspectedContext*);
     void reportExecutionContextDestroyed(InspectedContext*);
+    void inspect(PassOwnPtr<protocol::Runtime::RemoteObject> objectToInspect, PassOwnPtr<protocol::DictionaryValue> hints);
 
     void setClearConsoleCallback(PassOwnPtr<ClearConsoleCallback>) override;
-    void setInspectObjectCallback(PassOwnPtr<InspectCallback>) override;
     PassOwnPtr<protocol::Runtime::RemoteObject> wrapObject(v8::Local<v8::Context>, v8::Local<v8::Value>, const String16& groupName, bool generatePreview = false) override;
     PassOwnPtr<protocol::Runtime::RemoteObject> wrapTable(v8::Local<v8::Context>, v8::Local<v8::Value> table, v8::Local<v8::Value> columns) override;
     void disposeObjectGroup(const String16&) override;
diff --git a/third_party/WebKit/Source/platform/v8_inspector/public/V8RuntimeAgent.h b/third_party/WebKit/Source/platform/v8_inspector/public/V8RuntimeAgent.h
index 4beef808..c3b0d59 100644
--- a/third_party/WebKit/Source/platform/v8_inspector/public/V8RuntimeAgent.h
+++ b/third_party/WebKit/Source/platform/v8_inspector/public/V8RuntimeAgent.h
@@ -31,8 +31,6 @@
     // Embedder API.
     using ClearConsoleCallback = Function<void()>;
     virtual void setClearConsoleCallback(PassOwnPtr<ClearConsoleCallback>) = 0;
-    using InspectCallback = Function<void(PassOwnPtr<protocol::Runtime::RemoteObject>, PassOwnPtr<protocol::DictionaryValue>)>;
-    virtual void setInspectObjectCallback(PassOwnPtr<InspectCallback>) = 0;
     virtual PassOwnPtr<protocol::Runtime::RemoteObject> wrapObject(v8::Local<v8::Context>, v8::Local<v8::Value>, const String16& groupName, bool generatePreview = false) = 0;
     // FIXME: remove when console.table moves into V8 inspector.
     virtual PassOwnPtr<protocol::Runtime::RemoteObject> wrapTable(v8::Local<v8::Context>, v8::Local<v8::Value> table, v8::Local<v8::Value> columns) = 0;
diff --git a/third_party/WebKit/Source/web/BUILD.gn b/third_party/WebKit/Source/web/BUILD.gn
index 5f5dc1c..149c162 100644
--- a/third_party/WebKit/Source/web/BUILD.gn
+++ b/third_party/WebKit/Source/web/BUILD.gn
@@ -96,6 +96,7 @@
     "//base/test:test_support",
     "//content/test:test_support",
     "//gpu:test_support",
+    "//mojo/edk/system:system",
     "//testing/gmock",
     "//testing/gtest",
     "//third_party/WebKit/Source/core",
diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp
index 3628ab9..6cc85ee 100644
--- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp
+++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp
@@ -51,6 +51,7 @@
 #include "modules/serviceworkers/ExtendableEvent.h"
 #include "modules/serviceworkers/ExtendableMessageEvent.h"
 #include "modules/serviceworkers/FetchEvent.h"
+#include "modules/serviceworkers/ForeignFetchEvent.h"
 #include "modules/serviceworkers/InstallEvent.h"
 #include "modules/serviceworkers/ServiceWorkerClient.h"
 #include "modules/serviceworkers/ServiceWorkerGlobalScope.h"
@@ -138,12 +139,30 @@
 
 void ServiceWorkerGlobalScopeProxy::dispatchFetchEvent(int eventID, const WebServiceWorkerRequest& webRequest)
 {
-    dispatchFetchEventImpl(eventID, webRequest, EventTypeNames::fetch);
+    RespondWithObserver* observer = RespondWithObserver::create(workerGlobalScope(), eventID, webRequest.url(), webRequest.mode(), webRequest.frameType(), webRequest.requestContext());
+    Request* request = Request::create(workerGlobalScope(), webRequest);
+    request->getHeaders()->setGuard(Headers::ImmutableGuard);
+    FetchEventInit eventInit;
+    eventInit.setCancelable(true);
+    eventInit.setRequest(request);
+    eventInit.setClientId(webRequest.isMainResourceLoad() ? WebString() : webRequest.clientId());
+    eventInit.setIsReload(webRequest.isReload());
+    FetchEvent* fetchEvent = FetchEvent::create(EventTypeNames::fetch, eventInit, observer);
+    DispatchEventResult dispatchResult = workerGlobalScope()->dispatchEvent(fetchEvent);
+    observer->didDispatchEvent(dispatchResult);
 }
 
 void ServiceWorkerGlobalScopeProxy::dispatchForeignFetchEvent(int eventID, const WebServiceWorkerRequest& webRequest)
 {
-    dispatchFetchEventImpl(eventID, webRequest, EventTypeNames::foreignfetch);
+    ForeignFetchRespondWithObserver* observer = ForeignFetchRespondWithObserver::create(workerGlobalScope(), eventID, webRequest.url(), webRequest.mode(), webRequest.frameType(), webRequest.requestContext());
+    Request* request = Request::create(workerGlobalScope(), webRequest);
+    request->getHeaders()->setGuard(Headers::ImmutableGuard);
+    ForeignFetchEventInit eventInit;
+    eventInit.setCancelable(true);
+    eventInit.setRequest(request);
+    ForeignFetchEvent* fetchEvent = ForeignFetchEvent::create(EventTypeNames::foreignfetch, eventInit, observer);
+    DispatchEventResult dispatchResult = workerGlobalScope()->dispatchEvent(fetchEvent);
+    observer->didDispatchEvent(dispatchResult);
 }
 
 void ServiceWorkerGlobalScopeProxy::dispatchGeofencingEvent(int eventID, WebGeofencingEventType eventType, const WebString& regionID, const WebCircularGeofencingRegion& region)
@@ -295,19 +314,4 @@
     return m_workerGlobalScope;
 }
 
-void ServiceWorkerGlobalScopeProxy::dispatchFetchEventImpl(int eventID, const WebServiceWorkerRequest& webRequest, const AtomicString& eventTypeName)
-{
-    RespondWithObserver* observer = RespondWithObserver::create(workerGlobalScope(), eventID, webRequest.url(), webRequest.mode(), webRequest.frameType(), webRequest.requestContext());
-    Request* request = Request::create(workerGlobalScope(), webRequest);
-    request->getHeaders()->setGuard(Headers::ImmutableGuard);
-    FetchEventInit eventInit;
-    eventInit.setCancelable(true);
-    eventInit.setRequest(request);
-    eventInit.setClientId(webRequest.isMainResourceLoad() ? WebString() : webRequest.clientId());
-    eventInit.setIsReload(webRequest.isReload());
-    RawPtr<FetchEvent> fetchEvent(FetchEvent::create(eventTypeName, eventInit, observer));
-    DispatchEventResult dispatchResult = workerGlobalScope()->dispatchEvent(fetchEvent.release());
-    observer->didDispatchEvent(dispatchResult);
-}
-
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h
index 3061e95..7ad55ea 100644
--- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h
+++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h
@@ -112,8 +112,6 @@
     Document& document() const;
     ServiceWorkerGlobalScope* workerGlobalScope() const;
 
-    void dispatchFetchEventImpl(int eventID, const WebServiceWorkerRequest&, const AtomicString& eventTypeName);
-
     // Non-null until the WebEmbeddedWorkerImpl explicitly detach()es
     // as part of its finalization.
     WebEmbeddedWorkerImpl* m_embeddedWorker;
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
index aa6b0d6b..5b838784 100644
--- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
+++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
@@ -44,7 +44,6 @@
 #include "core/inspector/InspectorDebuggerAgent.h"
 #include "core/inspector/InspectorHeapProfilerAgent.h"
 #include "core/inspector/InspectorInputAgent.h"
-#include "core/inspector/InspectorInspectorAgent.h"
 #include "core/inspector/InspectorInstrumentation.h"
 #include "core/inspector/InspectorLayerTreeAgent.h"
 #include "core/inspector/InspectorMemoryAgent.h"
@@ -396,10 +395,6 @@
     m_v8Session = mainThreadDebugger->debugger()->connect(mainThreadDebugger->contextGroupId(m_inspectedFrames->root()));
     V8RuntimeAgent* runtimeAgent = m_v8Session->runtimeAgent();
 
-    RawPtr<InspectorInspectorAgent> inspectorAgent = InspectorInspectorAgent::create();
-    InspectorInspectorAgent* inspectorAgentPtr = inspectorAgent.get();
-    m_agents.append(inspectorAgent.release());
-
     m_agents.append(PageRuntimeAgent::create(this, runtimeAgent, m_inspectedFrames.get()));
 
     RawPtr<InspectorDOMAgent> domAgent = InspectorDOMAgent::create(isolate, m_inspectedFrames.get(), runtimeAgent, m_overlay.get());
@@ -455,7 +450,6 @@
     m_agents.append(pageAgent.release());
 
     runtimeAgent->setClearConsoleCallback(bind<>(&InspectorConsoleAgent::clearAllMessages, pageConsoleAgentPtr));
-    runtimeAgent->setInspectObjectCallback(bind<PassOwnPtr<protocol::Runtime::RemoteObject>, PassOwnPtr<protocol::DictionaryValue>>(&InspectorInspectorAgent::inspect, inspectorAgentPtr));
     m_tracingAgent->setLayerTreeId(m_layerTreeId);
     if (m_overlay)
         m_overlay->init(cssAgentPtr, debuggerAgentPtr, m_domAgent);
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
index 9166284..821bc348 100644
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -1526,8 +1526,7 @@
 
     bool enableWebBluetooth = RuntimeEnabledFeatures::webBluetoothEnabled();
 #if OS(CHROMEOS) || OS(ANDROID)
-// TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-// enableWebBluetooth = true;
+    enableWebBluetooth = true;
 #endif
 
     if (enableWebBluetooth)
diff --git a/third_party/WebKit/Source/web/WebPerformance.cpp b/third_party/WebKit/Source/web/WebPerformance.cpp
index 7d7bfe5..45d2a685 100644
--- a/third_party/WebKit/Source/web/WebPerformance.cpp
+++ b/third_party/WebKit/Source/web/WebPerformance.cpp
@@ -205,6 +205,11 @@
     return millisecondsToSeconds(m_private->timing()->parseBlockedOnScriptLoadDuration());
 }
 
+double WebPerformance::parseBlockedOnScriptLoadFromDocumentWriteDuration() const
+{
+    return millisecondsToSeconds(m_private->timing()->parseBlockedOnScriptLoadFromDocumentWriteDuration());
+}
+
 WebPerformance::WebPerformance(const RawPtr<Performance>& performance)
     : m_private(performance)
 {
diff --git a/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp b/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
index f650f41..869fcb38 100644
--- a/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
+++ b/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
@@ -694,7 +694,7 @@
     setWantsWheelEvents(false);
 
     if (m_webPlugin) {
-        CHECK(!m_webPlugin->container() || m_webPlugin->container() == this);
+        CHECK(m_webPlugin->container() == this);
         m_webPlugin->destroy();
         m_webPlugin = nullptr;
     }
diff --git a/third_party/WebKit/Source/web/tests/DEPS b/third_party/WebKit/Source/web/tests/DEPS
index 54af370..304aca3 100644
--- a/third_party/WebKit/Source/web/tests/DEPS
+++ b/third_party/WebKit/Source/web/tests/DEPS
@@ -7,4 +7,5 @@
     "+base/test/launcher/unit_test_launcher.h",
     "+base/test/test_suite.h",
     "+content/test/blink_test_environment.h",
+    "+mojo/edk/embedder/embedder.h",
 ]
diff --git a/third_party/WebKit/Source/web/tests/RunAllTests.cpp b/third_party/WebKit/Source/web/tests/RunAllTests.cpp
index b23f3df..ebd49150 100644
--- a/third_party/WebKit/Source/web/tests/RunAllTests.cpp
+++ b/third_party/WebKit/Source/web/tests/RunAllTests.cpp
@@ -35,6 +35,7 @@
 #include "base/test/test_suite.h"
 #include "bindings/core/v8/V8GCController.h"
 #include "content/test/blink_test_environment.h"
+#include "mojo/edk/embedder/embedder.h"
 #include "platform/weborigin/SchemeRegistry.h"
 #include <v8.h>
 
@@ -65,6 +66,8 @@
 
 int main(int argc, char** argv)
 {
+    mojo::edk::Init();
+
     base::TestSuite testSuite(argc, argv);
     return base::LaunchUnitTests(argc, argv, base::Bind(&runHelper, base::Unretained(&testSuite)));
 }
diff --git a/third_party/WebKit/Source/wtf/Assertions.h b/third_party/WebKit/Source/wtf/Assertions.h
index d609fa3..a6917d6 100644
--- a/third_party/WebKit/Source/wtf/Assertions.h
+++ b/third_party/WebKit/Source/wtf/Assertions.h
@@ -51,14 +51,12 @@
 // Users must test "#if ENABLE(ASSERT)", which helps ensure that code
 // testing this macro has included this header.
 #ifndef ENABLE_ASSERT
-#if DCHECK_IS_ON() && !defined(DCHECK_IS_DUMP_WITHOUT_CRASH)
-/* ASSERT* will currently crash the process if enabled, so which is not
-   the desired behaviour if DCHECK_IS_DUMP_WITHOUT_CRASH. */
-#define ENABLE_ASSERT 1
-#else
+#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
 /* Disable ASSERT* macros in release mode by default. */
 #define ENABLE_ASSERT 0
-#endif /* DCHECK_IS_ON() */
+#else
+#define ENABLE_ASSERT 1
+#endif /* defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) */
 #endif
 
 #ifndef ASSERT_MSG_DISABLED
diff --git a/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerResponseError.h b/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerResponseError.h
index c27cda13..63d9b63e 100644
--- a/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerResponseError.h
+++ b/third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerResponseError.h
@@ -21,7 +21,8 @@
     WebServiceWorkerResponseErrorResponseTypeOpaqueForClientRequest,
     WebServiceWorkerResponseErrorResponseTypeOpaqueRedirect,
     WebServiceWorkerResponseErrorBodyLocked,
-    WebServiceWorkerResponseErrorLast = WebServiceWorkerResponseErrorBodyLocked,
+    WebServiceWorkerResponseErrorNoForeignFetchResponse,
+    WebServiceWorkerResponseErrorLast = WebServiceWorkerResponseErrorNoForeignFetchResponse,
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/public/web/WebPerformance.h b/third_party/WebKit/public/web/WebPerformance.h
index d32daaa..dbe7620 100644
--- a/third_party/WebKit/public/web/WebPerformance.h
+++ b/third_party/WebKit/public/web/WebPerformance.h
@@ -93,6 +93,7 @@
     BLINK_EXPORT double parseStart() const;
     BLINK_EXPORT double parseStop() const;
     BLINK_EXPORT double parseBlockedOnScriptLoadDuration() const;
+    BLINK_EXPORT double parseBlockedOnScriptLoadFromDocumentWriteDuration() const;
 
 #if BLINK_IMPLEMENTATION
     WebPerformance(const RawPtr<Performance>&);
diff --git a/third_party/WebKit/public/web/WebPlugin.h b/third_party/WebKit/public/web/WebPlugin.h
index e9c7292..eb89147 100644
--- a/third_party/WebKit/public/web/WebPlugin.h
+++ b/third_party/WebKit/public/web/WebPlugin.h
@@ -61,23 +61,34 @@
 
 class WebPlugin {
 public:
-    // Perform any initialization work given the container this plugin will use to
-    // communicate with renderer code. Plugins that return false here must
-    // subsequently return nullptr for the container() method.
+    // Initializes the plugin using |container| to communicate with the renderer
+    // code. |container| must own this plugin. |container| must not be nullptr.
+    //
+    // Returns true if a plugin (not necessarily this one) has been successfully
+    // initialized into |container|.
+    //
+    // NOTE: This method is subtle. This plugin may be marked for deletion via
+    // destroy() during initialization. When this occurs, container() will
+    // return nullptr. Because deletions during initialize() must be
+    // asynchronous, this object is still alive immediately after initialize().
+    //   1) If container() == nullptr and this method returns true, this plugin
+    //      has been replaced by another during initialization. This new plugin
+    //      may be accessed via container->plugin().
+    //   2) If container() == nullptr and this method returns false, this plugin
+    //      and the container have both been marked for deletion.
     virtual bool initialize(WebPluginContainer*) = 0;
 
     // Plugins must arrange for themselves to be deleted sometime during or after this
-    // method is called. This method is generally called by the owning
-    // WebPluginContainer. If the plugin has been detatched from a WebPluginContainer,
-    // i.e. been replaced by another plugin, it must be destroyed separately.
+    // method is called. This method is only called by the owning WebPluginContainer.
+    // The exception is if the plugin has been detached by a WebPluginContainer,
+    // i.e. been replaced by another plugin. Then it must be destroyed separately.
+    // Once this method has been called, container() must return nullptr.
     virtual void destroy() = 0;
 
     // Returns the container that this plugin has been initialized with.
+    // Must return nullptr if this plugin is scheduled for deletion.
     //
-    // Must return nullptr if the initialize() method returns false.
-    // Must also return nullptr this plugin is scheduled for deletion.
-    //
-    // Note: This container doesn't necessarily own this plugin. For example,
+    // NOTE: This container doesn't necessarily own this plugin. For example,
     // if the container has been assigned a new plugin, then the container will
     // own the new plugin, not this old plugin.
     virtual WebPluginContainer* container() const { return nullptr; }
diff --git a/tools/OWNERS b/tools/OWNERS
index 37c4f6c..fc7d22826 100644
--- a/tools/OWNERS
+++ b/tools/OWNERS
@@ -5,6 +5,7 @@
 # If you're changing existing tools, have your change reviewed by the
 # OWNERS of the existing tool.
 
+dpranke@chromium.org
 scottmg@chromium.org
 thakis@chromium.org
 
diff --git a/tools/android/memdump/memdump.cc b/tools/android/memdump/memdump.cc
index 7f135ee..572a838d 100644
--- a/tools/android/memdump/memdump.cc
+++ b/tools/android/memdump/memdump.cc
@@ -56,9 +56,8 @@
     size_t end = data_.size();
     while (end > 0 && data_[end - 1] == '\0')
       --end;
-    std::string bits(&data_[0], end);
     std::string b64_string;
-    base::Base64Encode(bits, &b64_string);
+    base::Base64Encode(base::StringPiece(data_.data(), end), &b64_string);
     return b64_string;
   }
 
diff --git a/tools/clang/scripts/upload_revision.py b/tools/clang/scripts/upload_revision.py
index cd900fe..b6331df6 100755
--- a/tools/clang/scripts/upload_revision.py
+++ b/tools/clang/scripts/upload_revision.py
@@ -70,9 +70,9 @@
       clang_old_revision, clang_revision, commit_message)])
 
   Git(["cl", "upload"])
-  Git(["cl", "try", "-b", "linux_chromium_clang_upload", "-r", git_revision])
-  Git(["cl", "try", "-b", "mac_chromium_clang_upload", "-r", git_revision])
-  Git(["cl", "try", "-b", "win_chromium_clang_upload", "-r", git_revision])
+  Git(["cl", "try", "-b", "linux_upload_clang", "-r", git_revision])
+  Git(["cl", "try", "-b", "mac_upload_clang", "-r", git_revision])
+  Git(["cl", "try", "-b", "win_upload_clang", "-r", git_revision])
 
   print ("Please, wait until the try bots succeeded "
          "and then push the binaries to goma.")
diff --git a/tools/gn/binary_target_generator.cc b/tools/gn/binary_target_generator.cc
index 923d0edd..7c81232 100644
--- a/tools/gn/binary_target_generator.cc
+++ b/tools/gn/binary_target_generator.cc
@@ -31,6 +31,9 @@
   if (!FillOutputName())
     return;
 
+  if (!FillOutputPrefixOverride())
+    return;
+
   if (!FillOutputExtension())
     return;
 
@@ -85,6 +88,16 @@
   return true;
 }
 
+bool BinaryTargetGenerator::FillOutputPrefixOverride() {
+  const Value* value = scope_->GetValue(variables::kOutputPrefixOverride, true);
+  if (!value)
+    return true;
+  if (!value->VerifyTypeIs(Value::BOOLEAN, err_))
+    return false;
+  target_->set_output_prefix_override(value->boolean_value());
+  return true;
+}
+
 bool BinaryTargetGenerator::FillOutputExtension() {
   const Value* value = scope_->GetValue(variables::kOutputExtension, true);
   if (!value)
diff --git a/tools/gn/binary_target_generator.h b/tools/gn/binary_target_generator.h
index 4674f96..40ed432 100644
--- a/tools/gn/binary_target_generator.h
+++ b/tools/gn/binary_target_generator.h
@@ -26,6 +26,7 @@
  private:
   bool FillCompleteStaticLib();
   bool FillOutputName();
+  bool FillOutputPrefixOverride();
   bool FillOutputExtension();
   bool FillAllowCircularIncludesFrom();
 
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md
index 70cc6b3..22cbee0 100644
--- a/tools/gn/docs/reference.md
+++ b/tools/gn/docs/reference.md
@@ -2845,6 +2845,10 @@
         is not already there. The result will show up in the
         {{output_name}} substitution pattern.
 
+        Individual targets can opt-out of the output prefix by setting:
+          output_prefix_override = true
+        (see "gn help output_prefix_override").
+
         This is typically used to prepend "lib" to libraries on
         Posix systems:
           output_prefix = "lib"
@@ -4664,9 +4668,11 @@
   override the name (for example to use "libfreetype.so.6" instead
   of libfreetype.so on Linux).
 
-  This value should not include a leading dot. If undefined or empty,
-  the default_output_extension specified on the tool will be used.
-  The output_extension will be used in the "{{output_extension}}"
+  This value should not include a leading dot. If undefined, the default
+  specified on the tool will be used. If set to the empty string, no
+  output extension will be used.
+
+  The output_extension will be used to set the "{{output_extension}}"
   expansion which the linker tool will generally use to specify the
   output file name. See "gn help tool".
 
@@ -4724,6 +4730,35 @@
 
 
 ```
+## **output_prefix_override**: Don't use prefix for output name.
+
+```
+  A boolean that overrides the output prefix for a target. Defaults to
+  false.
+
+  Some systems use prefixes for the names of the final target output
+  file. The normal example is "libfoo.so" on Linux for a target
+  named "foo".
+
+  The output prefix for a given target type is specified on the linker
+  tool (see "gn help tool"). Sometimes this prefix is undesired.
+
+  See also "gn help output_extension".
+
+```
+
+### **Example**
+
+```
+  shared_library("doom_melon") {
+    # Normally this will produce "libdoom_melon.so" on Linux, setting
+    # Setting this flag will produce "doom_melon.so".
+    output_prefix_override = true
+    ...
+  }
+
+
+```
 ## **outputs**: Output files for actions and copy targets.
 
 ```
@@ -5131,6 +5166,29 @@
 
 
 ```
+## **write_runtime_deps**: Writes the target's runtime_deps to the given path.
+
+```
+  Does not synchronously write the file, but rather schedules it
+  to be written at the end of generation.
+
+  If the file exists and the contents are identical to that being
+  written, the file will not be updated. This will prevent unnecessary
+  rebuilds of targets that depend on this file.
+
+  Path must be within the output directory.
+
+  See "gn help runtime_deps" for how the runtime dependencies are
+  computed.
+
+  The format of this file will list one file per line with no escaping.
+  The files will be relative to the root_build_dir. The first line of
+  the file will be the main output file of the target itself. The file
+  contents will be the same as requesting the runtime deps be written on
+  the command line (see "gn help --runtime-deps-list-file").
+
+
+```
 ## **Build Arguments Overview**
 
 ```
@@ -5561,8 +5619,8 @@
 ```
   Runtime dependencies of a target are exposed via the "runtime_deps"
   category of "gn desc" (see "gn help desc") or they can be written
-  at build generation time via "--runtime-deps-list-file"
-  (see "gn help --runtime-deps-list-file").
+  at build generation time via write_runtime_deps(), or
+  --runtime-deps-list-file (see "gn help --runtime-deps-list-file").
 
   To a first approximation, the runtime dependencies of a target are
   the set of "data" files, data directories, and the shared libraries
diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc
index 727be54..72097f2b 100644
--- a/tools/gn/function_toolchain.cc
+++ b/tools/gn/function_toolchain.cc
@@ -534,6 +534,10 @@
     "        is not already there. The result will show up in the\n"
     "        {{output_name}} substitution pattern.\n"
     "\n"
+    "        Individual targets can opt-out of the output prefix by setting:\n"
+    "          output_prefix_override = true\n"
+    "        (see \"gn help output_prefix_override\").\n"
+    "\n"
     "        This is typically used to prepend \"lib\" to libraries on\n"
     "        Posix systems:\n"
     "          output_prefix = \"lib\"\n"
diff --git a/tools/gn/ninja_binary_target_writer.cc b/tools/gn/ninja_binary_target_writer.cc
index b1bf8032..eaae098 100644
--- a/tools/gn/ninja_binary_target_writer.cc
+++ b/tools/gn/ninja_binary_target_writer.cc
@@ -854,15 +854,9 @@
 }
 
 void NinjaBinaryTargetWriter::WriteOutputExtension() {
-  out_ << "  output_extension = ";
-  if (target_->output_extension().empty()) {
-    // Use the default from the tool.
-    out_ << tool_->default_output_extension();
-  } else {
-    // Use the one specified in the target. Note that the one in the target
-    // does not include the leading dot, so add that.
-    out_ << "." << target_->output_extension();
-  }
+  out_ << "  output_extension = "
+       << SubstitutionWriter::GetLinkerSubstitution(
+              target_, tool_, SUBSTITUTION_OUTPUT_EXTENSION);
   out_ << std::endl;
 }
 
diff --git a/tools/gn/ninja_binary_target_writer_unittest.cc b/tools/gn/ninja_binary_target_writer_unittest.cc
index c9b3ebe..0b87883 100644
--- a/tools/gn/ninja_binary_target_writer_unittest.cc
+++ b/tools/gn/ninja_binary_target_writer_unittest.cc
@@ -241,10 +241,12 @@
 
   setup.build_settings()->SetBuildDir(SourceDir("//out/Debug/"));
 
-  // This test is the same as ProductExtension, except that
-  // we call set_output_extension("") and ensure that we still get the default.
+  // This test is the same as ProductExtension, except that we call
+  // set_output_extension("") and ensure that we get an empty one and override
+  // the output prefix so that the name matches the target exactly.
   Target target(setup.settings(), Label(SourceDir("//foo/"), "shlib"));
   target.set_output_type(Target::SHARED_LIBRARY);
+  target.set_output_prefix_override(true);
   target.set_output_extension(std::string());
   target.sources().push_back(SourceFile("//foo/input1.cc"));
   target.sources().push_back(SourceFile("//foo/input2.cc"));
@@ -263,16 +265,16 @@
       "cflags_cc =\n"
       "root_out_dir = .\n"
       "target_out_dir = obj/foo\n"
-      "target_output_name = libshlib\n"
+      "target_output_name = shlib\n"
       "\n"
-      "build obj/foo/libshlib.input1.o: cxx ../../foo/input1.cc\n"
-      "build obj/foo/libshlib.input2.o: cxx ../../foo/input2.cc\n"
+      "build obj/foo/shlib.input1.o: cxx ../../foo/input1.cc\n"
+      "build obj/foo/shlib.input2.o: cxx ../../foo/input2.cc\n"
       "\n"
-      "build ./libshlib.so: solink obj/foo/libshlib.input1.o "
-          "obj/foo/libshlib.input2.o\n"
+      "build ./shlib: solink obj/foo/shlib.input1.o "
+          "obj/foo/shlib.input2.o\n"
       "  ldflags =\n"
       "  libs =\n"
-      "  output_extension = .so\n";
+      "  output_extension = \n";
 
   std::string out_str = out.str();
   EXPECT_EQ(expected, out_str);
diff --git a/tools/gn/substitution_writer.cc b/tools/gn/substitution_writer.cc
index 99abced1e..23d6914 100644
--- a/tools/gn/substitution_writer.cc
+++ b/tools/gn/substitution_writer.cc
@@ -448,7 +448,7 @@
           result);
       break;
     case SUBSTITUTION_TARGET_OUTPUT_NAME:
-      *result = target->GetComputedOutputName(true);
+      *result = target->GetComputedOutputName();
       break;
     default:
       return false;
@@ -547,11 +547,13 @@
   // Fall-through to the linker-specific ones.
   switch (type) {
     case SUBSTITUTION_OUTPUT_EXTENSION:
-      // Use the extension provided on the target if nonempty, otherwise
+      // Use the extension provided on the target if specified, otherwise
       // fall back on the default. Note that the target's output extension
       // does not include the dot but the tool's does.
-      if (target->output_extension().empty())
+      if (!target->output_extension_set())
         return tool->default_output_extension();
+      if (target->output_extension().empty())
+        return std::string();  // Explicitly set to no extension.
       return std::string(".") + target->output_extension();
 
     default:
diff --git a/tools/gn/substitution_writer_unittest.cc b/tools/gn/substitution_writer_unittest.cc
index 36d027b..77374f1 100644
--- a/tools/gn/substitution_writer_unittest.cc
+++ b/tools/gn/substitution_writer_unittest.cc
@@ -268,4 +268,14 @@
   OutputFile output = SubstitutionWriter::ApplyPatternToLinkerAsOutputFile(
       &target, tool, pattern);
   EXPECT_EQ("./libbaz.so", output.value());
+
+  // Output extensions can be overridden.
+  target.set_output_extension("extension");
+  EXPECT_EQ(".extension",
+            SubstitutionWriter::GetLinkerSubstitution(
+                &target, tool, SUBSTITUTION_OUTPUT_EXTENSION));
+  target.set_output_extension("");
+  EXPECT_EQ("",
+            SubstitutionWriter::GetLinkerSubstitution(
+                &target, tool, SUBSTITUTION_OUTPUT_EXTENSION));
 }
diff --git a/tools/gn/target.cc b/tools/gn/target.cc
index 005dd97..18c353e 100644
--- a/tools/gn/target.cc
+++ b/tools/gn/target.cc
@@ -212,6 +212,8 @@
 Target::Target(const Settings* settings, const Label& label)
     : Item(settings, label),
       output_type_(UNKNOWN),
+      output_prefix_override_(false),
+      output_extension_set_(false),
       all_headers_public_(true),
       check_includes_(true),
       complete_static_lib_(false),
@@ -358,7 +360,7 @@
       &public_deps_, &private_deps_, &data_deps_));
 }
 
-std::string Target::GetComputedOutputName(bool include_prefix) const {
+std::string Target::GetComputedOutputName() const {
   DCHECK(toolchain_)
       << "Toolchain must be specified before getting the computed output name.";
 
@@ -366,14 +368,14 @@
                                                  : output_name_;
 
   std::string result;
-  if (include_prefix) {
-    const Tool* tool = toolchain_->GetToolForTargetFinalOutput(this);
-    if (tool) {
-      // Only add the prefix if the name doesn't already have it.
-      if (!base::StartsWith(name, tool->output_prefix(),
-                            base::CompareCase::SENSITIVE))
-        result = tool->output_prefix();
-    }
+  const Tool* tool = toolchain_->GetToolForTargetFinalOutput(this);
+  if (tool) {
+    // Only add the prefix if the name doesn't already have it and it's not
+    // being overridden.
+    if (!output_prefix_override_ &&
+        !base::StartsWith(name, tool->output_prefix(),
+                          base::CompareCase::SENSITIVE))
+      result = tool->output_prefix();
   }
   result.append(name);
   return result;
@@ -536,7 +538,7 @@
       // entry in the outputs. These stamps are named
       // "<target_out_dir>/<targetname>.stamp".
       dependency_output_file_ = GetTargetOutputDirAsOutputFile(this);
-      dependency_output_file_.value().append(GetComputedOutputName(true));
+      dependency_output_file_.value().append(GetComputedOutputName());
       dependency_output_file_.value().append(".stamp");
       break;
     }
diff --git a/tools/gn/target.h b/tools/gn/target.h
index c3fed012..fdd6f1a 100644
--- a/tools/gn/target.h
+++ b/tools/gn/target.h
@@ -89,16 +89,29 @@
   void set_output_name(const std::string& name) { output_name_ = name; }
 
   // Returns the output name for this target, which is the output_name if
-  // specified, or the target label if not. If the flag is set, it will also
-  // include any output prefix specified on the tool (often "lib" on Linux).
+  // specified, or the target label if not.
   //
   // Because this depends on the tool for this target, the toolchain must
   // have been set before calling.
-  std::string GetComputedOutputName(bool include_prefix) const;
+  std::string GetComputedOutputName() const;
 
+  bool output_prefix_override() const { return output_prefix_override_; }
+  void set_output_prefix_override(bool prefix_override) {
+    output_prefix_override_ = prefix_override;
+  }
+
+  // The output extension is really a tri-state: unset (output_extension_set
+  // is false and the string is empty, meaning the default extension should be
+  // used), the output extension is set but empty (output should have no
+  // extension) and the output extension is set but nonempty (use the given
+  // extension).
   const std::string& output_extension() const { return output_extension_; }
   void set_output_extension(const std::string& extension) {
     output_extension_ = extension;
+    output_extension_set_ = true;
+  }
+  bool output_extension_set() const {
+    return output_extension_set_;
   }
 
   const FileList& sources() const { return sources_; }
@@ -318,7 +331,9 @@
 
   OutputType output_type_;
   std::string output_name_;
+  bool output_prefix_override_;
   std::string output_extension_;
+  bool output_extension_set_;
 
   FileList sources_;
   bool all_headers_public_;
diff --git a/tools/gn/target_unittest.cc b/tools/gn/target_unittest.cc
index b3a85b7..8629ff21 100644
--- a/tools/gn/target_unittest.cc
+++ b/tools/gn/target_unittest.cc
@@ -270,30 +270,32 @@
   // no prefix) or output name.
   TestTarget basic(setup, "//foo:bar", Target::EXECUTABLE);
   ASSERT_TRUE(basic.OnResolved(&err));
-  EXPECT_EQ("bar", basic.GetComputedOutputName(false));
-  EXPECT_EQ("bar", basic.GetComputedOutputName(true));
+  EXPECT_EQ("bar", basic.GetComputedOutputName());
 
   // Target with no prefix but an output name.
   TestTarget with_name(setup, "//foo:bar", Target::EXECUTABLE);
   with_name.set_output_name("myoutput");
   ASSERT_TRUE(with_name.OnResolved(&err));
-  EXPECT_EQ("myoutput", with_name.GetComputedOutputName(false));
-  EXPECT_EQ("myoutput", with_name.GetComputedOutputName(true));
+  EXPECT_EQ("myoutput", with_name.GetComputedOutputName());
 
   // Target with a "lib" prefix (the static library tool in the TestWithScope
   // should specify a "lib" output prefix).
   TestTarget with_prefix(setup, "//foo:bar", Target::STATIC_LIBRARY);
   ASSERT_TRUE(with_prefix.OnResolved(&err));
-  EXPECT_EQ("bar", with_prefix.GetComputedOutputName(false));
-  EXPECT_EQ("libbar", with_prefix.GetComputedOutputName(true));
+  EXPECT_EQ("libbar", with_prefix.GetComputedOutputName());
 
   // Target with a "lib" prefix that already has it applied. The prefix should
   // not duplicate something already in the target name.
   TestTarget dup_prefix(setup, "//foo:bar", Target::STATIC_LIBRARY);
   dup_prefix.set_output_name("libbar");
   ASSERT_TRUE(dup_prefix.OnResolved(&err));
-  EXPECT_EQ("libbar", dup_prefix.GetComputedOutputName(false));
-  EXPECT_EQ("libbar", dup_prefix.GetComputedOutputName(true));
+  EXPECT_EQ("libbar", dup_prefix.GetComputedOutputName());
+
+  // Target with an output prefix override should not have a prefix.
+  TestTarget override_prefix(setup, "//foo:bar", Target::SHARED_LIBRARY);
+  override_prefix.set_output_prefix_override(true);
+  ASSERT_TRUE(dup_prefix.OnResolved(&err));
+  EXPECT_EQ("bar", override_prefix.GetComputedOutputName());
 }
 
 // Test visibility failure case.
diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc
index 88e0ed1..4c5fae1 100644
--- a/tools/gn/variables.cc
+++ b/tools/gn/variables.cc
@@ -1092,9 +1092,11 @@
     "  override the name (for example to use \"libfreetype.so.6\" instead\n"
     "  of libfreetype.so on Linux).\n"
     "\n"
-    "  This value should not include a leading dot. If undefined or empty,\n"
-    "  the default_output_extension specified on the tool will be used.\n"
-    "  The output_extension will be used in the \"{{output_extension}}\"\n"
+    "  This value should not include a leading dot. If undefined, the default\n"
+    "  specified on the tool will be used. If set to the empty string, no\n"
+    "  output extension will be used.\n"
+    "\n"
+    "  The output_extension will be used to set the \"{{output_extension}}\"\n"
     "  expansion which the linker tool will generally use to specify the\n"
     "  output file name. See \"gn help tool\".\n"
     "\n"
@@ -1145,6 +1147,33 @@
     "    output_name = \"fluffy_bunny\"\n"
     "  }\n";
 
+const char kOutputPrefixOverride[] = "output_prefix_override";
+const char kOutputPrefixOverride_HelpShort[] =
+    "output_prefix_override: [boolean] Don't use prefix for output name.";
+const char kOutputPrefixOverride_Help[] =
+    "output_prefix_override: Don't use prefix for output name.\n"
+    "\n"
+    "  A boolean that overrides the output prefix for a target. Defaults to\n"
+    "  false.\n"
+    "\n"
+    "  Some systems use prefixes for the names of the final target output\n"
+    "  file. The normal example is \"libfoo.so\" on Linux for a target\n"
+    "  named \"foo\".\n"
+    "\n"
+    "  The output prefix for a given target type is specified on the linker\n"
+    "  tool (see \"gn help tool\"). Sometimes this prefix is undesired.\n"
+    "\n"
+    "  See also \"gn help output_extension\".\n"
+    "\n"
+    "Example\n"
+    "\n"
+    "  shared_library(\"doom_melon\") {\n"
+    "    # Normally this will produce \"libdoom_melon.so\" on Linux, setting\n"
+    "    # Setting this flag will produce \"doom_melon.so\".\n"
+    "    output_prefix_override = true\n"
+    "    ...\n"
+    "  }\n";
+
 const char kOutputs[] = "outputs";
 const char kOutputs_HelpShort[] =
     "outputs: [file list] Output files for actions and copy targets.";
@@ -1609,6 +1638,7 @@
     INSERT_VARIABLE(LibDirs)
     INSERT_VARIABLE(OutputExtension)
     INSERT_VARIABLE(OutputName)
+    INSERT_VARIABLE(OutputPrefixOverride)
     INSERT_VARIABLE(Outputs)
     INSERT_VARIABLE(PrecompiledHeader)
     INSERT_VARIABLE(PrecompiledSource)
diff --git a/tools/gn/variables.h b/tools/gn/variables.h
index 27bde5ab..08fea1a 100644
--- a/tools/gn/variables.h
+++ b/tools/gn/variables.h
@@ -191,6 +191,10 @@
 extern const char kOutputName_HelpShort[];
 extern const char kOutputName_Help[];
 
+extern const char kOutputPrefixOverride[];
+extern const char kOutputPrefixOverride_HelpShort[];
+extern const char kOutputPrefixOverride_Help[];
+
 extern const char kOutputs[];
 extern const char kOutputs_HelpShort[];
 extern const char kOutputs_Help[];
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index f0cd4fa..c371698 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -728,7 +728,6 @@
         'swarming_chromeos_gyp_release_trybot',
       'linux_chromium_chromeos_rel_ng': 'swarming_chromeos_gyp_release_trybot',
       'linux_chromium_chromeos_variable_chrome': 'findit',
-      'linux_chromium_clang_upload': 'gn_release_bot',
       'linux_chromium_clobber_rel_ng': 'gn_release_trybot',
       'linux_chromium_compile_dbg_32_ng': 'swarming_gyp_debug_trybot_x86',
       'linux_chromium_compile_dbg_ng': 'swarming_gn_debug_trybot',
@@ -759,6 +758,7 @@
       'linux_optional_gpu_tests_rel':
         'swarming_gpu_fyi_tests_gn_release_trybot',
       'linux_site_isolation': 'gn_release_trybot',
+      'linux_upload_clang': 'gn_release_bot',
       'linux_valgrind': 'gyp_valgrind_release_bot',
     },
 
@@ -779,7 +779,6 @@
       'ios_rel_device': 'ios_gyp',
       'ios_rel_device_gn': 'ios_gn',
       'ios_rel_device_ninja': 'ios_gyp',
-      'mac_chromium_clang_upload': 'gn_release_bot',
       'mac_chromium_gn_dbg': 'gn_debug_static_bot',
       'mac_chromium_gn_rel': 'gn_release_trybot',
       'mac_chromium_gn_upload': 'gn_release_bot',
@@ -792,6 +791,7 @@
       'mac_chromium_variable_layout': 'findit',
       'mac_nacl_sdk': 'nacl_annotator',
       'mac_nacl_sdk_build': 'nacl_annotator',
+      'mac_upload_clang': 'gn_release_bot',
     },
 
     'tryserver.chromium.perf': {
@@ -844,7 +844,6 @@
       'win8_chromium_gn_upload': 'gn_release_bot_minimal_symbols_x86',
       'win8_chromium_ng': 'gn_release_trybot_x86',
       'win_archive': 'noswarming_gyp_release_trybot_minimal_symbols_x86',
-      'win_chromium_clang_upload': 'gn_release_bot',
       'win_chromium_compile_dbg_ng':
         'swarming_gyp_debug_bot_minimal_symbols_x86',
       'win_chromium_compile_rel_ng':
@@ -878,6 +877,7 @@
       'win_optional_gpu_tests_rel':
         'swarming_gpu_tests_deqp_gles_gyp_release_trybot_minimal_symbols_x86',
       'win_pgo': 'gyp_official_winpgo',
+      'win_upload_clang': 'gn_release_bot',
     },
 
     'tryserver.v8': {
@@ -1636,7 +1636,8 @@
     # build.
     'blimp': {
       'gn_args': ('use_aura=true use_ozone=true use_alsa=false '
-                  'use_pulseaudio=false use_cups=false use_glib=false'),
+                  'use_pulseaudio=false use_cups=false use_glib=false '
+                  'use_low_quality_image_interpolation=true'),
       'gyp_defines': ('use_aura=1 use_ozone=1 use_alsa=0 '
                       'use_pulseaudio=0 use_cups=0 use_glib=0'),
     },
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 62f4b2ac..c6acac4 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -1355,6 +1355,15 @@
   </summary>
 </histogram>
 
+<histogram name="Ash.Wallpaper.Source" enum="WallpaperType">
+  <owner>xdai@chromium.org</owner>
+  <summary>
+    Recorded when a new wallpaper is set, either by the built-in Wallpaper
+    Picker App, or by a third party App. Note the wallpaper change triggered by
+    Sync file system event doesn't count.
+  </summary>
+</histogram>
+
 <histogram name="Ash.Wallpaper.Type" enum="WallpaperType">
   <owner>kuscher@google.com</owner>
   <summary>The wallpaper type. Recorded at user login.</summary>
@@ -34560,6 +34569,28 @@
   </summary>
 </histogram>
 
+<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"
+    units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts
+    inserted from document.write, for main frame documents that started parsing.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"
+    units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts
+    inserted from document.write, for main frame documents that finished
+    parsing.
+  </summary>
+</histogram>
+
 <histogram name="PageLoad.Timing2.ParseDuration" units="ms">
   <owner>bmcquade@chromium.org</owner>
   <owner>csharrison@chromium.org</owner>
@@ -46178,6 +46209,17 @@
   </summary>
 </histogram>
 
+<histogram name="Search.ContextualSearchMandatoryPromoOutcomeByGesture"
+    enum="ContextualSearchOutcomeByGesture">
+  <owner>donnd@chromium.org</owner>
+  <owner>pedrosimonetti@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The outcome of the mandatory Promo broken down by original triggering
+    gesture. Logged for each view of the promo. Implemented for Android.
+  </summary>
+</histogram>
+
 <histogram name="Search.ContextualSearchNormalPrioritySearchRequestStatus"
     enum="ContextualSearchSearchRequestStatus">
   <owner>donnd@chromium.org</owner>
@@ -46375,6 +46417,19 @@
   </summary>
 </histogram>
 
+<histogram name="Search.ContextualSearchResultsSeenSelectionWasUrl"
+    enum="ContextualSearchSeenByGesture">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen (Contextual Search panel was opened) when
+    the selection was part of a URL, broken down by original triggering gesture.
+    Includes both users that have enabled Contextual Search and users that are
+    undecided (have neither enabled or disabled the feature). Implemented for
+    Android.
+  </summary>
+</histogram>
+
 <histogram name="Search.ContextualSearchSelectionValid"
     enum="ContextualSearchSelectionValid">
   <owner>donnd@chromium.org</owner>
@@ -50110,6 +50165,16 @@
   </summary>
 </histogram>
 
+<histogram name="SSL.ExpectCTReportFailure" enum="NetErrorCodes">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Sites can opt in to Expect CT, a reporting feature that sends a report
+    whenever a TLS connection does not have valid Certificate Transparency
+    information associated with it. This records the error code when Chrome
+    fails to send an Expect CT report.
+  </summary>
+</histogram>
+
 <histogram name="SSL.InsecureContent" enum="InsecureContentType">
   <owner>lgarron@chromium.org</owner>
   <summary>
@@ -60602,6 +60667,41 @@
   <int value="17" label="Volume decibels"/>
   <int value="18" label="Volume scalar"/>
   <int value="19" label="Mute"/>
+  <int value="20" label="Plugin"/>
+  <int value="21" label="Uses variable buffer fram sizes"/>
+  <int value="22" label="IO cycle usage"/>
+  <int value="23" label="IO proc stream usage"/>
+  <int value="24" label="Configuration application"/>
+  <int value="25" label="Device UID"/>
+  <int value="26" label="Mode UID"/>
+  <int value="27" label="Transport type"/>
+  <int value="28" label="Related devices"/>
+  <int value="29" label="Clock domain"/>
+  <int value="30" label="Device can be default device"/>
+  <int value="31" label="Device can be default system device"/>
+  <int value="32" label="Latency"/>
+  <int value="33" label="Streams"/>
+  <int value="34" label="Control list"/>
+  <int value="35" label="Safety offset"/>
+  <int value="36" label="Available nominal sample rates"/>
+  <int value="37" label="Icon"/>
+  <int value="38" label="Is hidden"/>
+  <int value="39" label="Preferred channels for stereo"/>
+  <int value="40" label="Preferred channel layout"/>
+  <int value="41" label="Volume range decibels"/>
+  <int value="42" label="Volume scalar to decibels"/>
+  <int value="43" label="Volume decibel to scalar"/>
+  <int value="44" label="Stereo pan"/>
+  <int value="45" label="Stereo pan channels"/>
+  <int value="46" label="Solo"/>
+  <int value="47" label="Phantom power"/>
+  <int value="48" label="Phase invert"/>
+  <int value="49" label="Clip light"/>
+  <int value="50" label="Talkback"/>
+  <int value="51" label="Listenback"/>
+  <int value="52" label="Clock source"/>
+  <int value="53" label="Clock sources"/>
+  <int value="54" label="Sub mute"/>
 </enum>
 
 <enum name="AudioFramesPerBuffer" type="int">
@@ -68355,6 +68455,7 @@
   <int value="1111" label="INPUT_IME_SHOWWINDOW"/>
   <int value="1112" label="INPUT_IME_HIDEWINDOW"/>
   <int value="1113" label="INPUTMETHODPRIVATE_SHOWINPUTVIEW"/>
+  <int value="1114" label="WALLPAPERPRIVATE_RECORDWALLPAPERUMA"/>
 </enum>
 
 <enum name="ExtensionInstallCause" type="int">
@@ -70267,6 +70368,9 @@
   <int value="1281" label="InvalidReportUriDirectiveInMetaCSP"/>
   <int value="1282" label="InvalidSandboxDirectiveInMetaCSP"/>
   <int value="1283" label="InvalidFrameAncestorsDirectiveInMetaCSP"/>
+  <int value="1284" label="TouchDragUserGestureUsed"/>
+  <int value="1285" label="TouchDragUserGestureUsedCrossOrigin"/>
+  <int value="1286" label="DocumentCreateEventForeignFetchEvent"/>
 </enum>
 
 <enum name="FetchRequestMode" type="int">
@@ -90252,6 +90356,10 @@
   <affected-histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad"/>
   <affected-histogram
       name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
   <affected-histogram name="PageLoad.Timing2.ParseDuration"/>
 </histogram_suffixes>
 
diff --git a/tools/perf/chrome_telemetry_build/telemetry_chrome_test.isolate b/tools/perf/chrome_telemetry_build/telemetry_chrome_test.isolate
index 86b8e249..86bce4b 100644
--- a/tools/perf/chrome_telemetry_build/telemetry_chrome_test.isolate
+++ b/tools/perf/chrome_telemetry_build/telemetry_chrome_test.isolate
@@ -6,6 +6,7 @@
   # that run in Chromium.
   'includes': [
     '../../../chrome/breakpad.isolate',
+    '../../../chrome/cdb.isolate',
     '../../../chrome/chrome.isolate',
     'telemetry_binary_manager.isolate',
   ],
diff --git a/tools/perf/core/stacktrace_unittest.py b/tools/perf/core/stacktrace_unittest.py
index 59baa65..9ab0625 100644
--- a/tools/perf/core/stacktrace_unittest.py
+++ b/tools/perf/core/stacktrace_unittest.py
@@ -14,8 +14,8 @@
 
   # TODO(dyen): For now this doesn't work on Android but continue to
   # expand this.
-  # TODO(kbr): this test doesn't work on the Windows Swarming bots
-  # yet. http://crbug.com/561763
+  # TODO(kbr): currently failing on Windows because the symbolized
+  # stack trace format is unexpected. http://crbug.com/561763
   @decorators.Enabled('mac', 'linux')
   # Stack traces do not currently work on 10.6, but they are also being
   # disabled shortly so just disable it for now.
@@ -26,9 +26,7 @@
       self.assertIn('Thread 0 (crashed)', '\n'.join(c.exception.stack_trace))
 
   # Stack traces aren't working on Android yet.
-  # TODO(kbr): this test doesn't work on the Windows Swarming bots
-  # yet. http://crbug.com/561763
-  @decorators.Enabled('mac', 'linux')
+  @decorators.Enabled('mac', 'linux', 'win')
   @decorators.Disabled('snowleopard')
   def testCrashSymbols(self):
     with self.assertRaises(exceptions.DevtoolsTargetCrashException) as c:
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
index c8dc2c3..db554383 100644
--- a/ui/base/BUILD.gn
+++ b/ui/base/BUILD.gn
@@ -13,6 +13,8 @@
 if (is_android) {
   import("//build/config/android/config.gni")
   import("//build/config/android/rules.gni")
+} else if (is_mac) {
+  import("//build/config/mac/rules.gni")
 }
 
 build_ime = !is_ios
@@ -891,8 +893,8 @@
 
   if (is_mac) {
     deps += [
+      ":ui_unittests Framework",
       "//third_party/mozilla",
-      #'ui_base_tests_bundle',  TODO(GYP)
     ]
   }
 
@@ -947,4 +949,13 @@
     }
   }
 }
-# TODO(GYP) Mac (ui_base_tests_bundle)
+
+if (is_mac) {
+  mac_framework("ui_unittests Framework") {
+    testonly = true
+    deps = [
+      "//ui/resources:ui_test_pak_bundle_data",
+    ]
+    info_plist = "test/framework-Info.plist"
+  }
+}
diff --git a/ui/compositor/test/in_process_context_factory.cc b/ui/compositor/test/in_process_context_factory.cc
index 6d84255..af58ac5 100644
--- a/ui/compositor/test/in_process_context_factory.cc
+++ b/ui/compositor/test/in_process_context_factory.cc
@@ -102,23 +102,6 @@
 
 void InProcessContextFactory::CreateOutputSurface(
     base::WeakPtr<Compositor> compositor) {
-  gpu::gles2::ContextCreationAttribHelper attribs;
-  attribs.alpha_size = 8;
-  attribs.blue_size = 8;
-  attribs.green_size = 8;
-  attribs.red_size = 8;
-  attribs.depth_size = 0;
-  attribs.stencil_size = 0;
-  attribs.samples = 0;
-  attribs.sample_buffers = 0;
-  attribs.fail_if_major_perf_caveat = false;
-  attribs.bind_generates_resource = false;
-
-  scoped_refptr<InProcessContextProvider> context_provider =
-      InProcessContextProvider::Create(attribs, &gpu_memory_buffer_manager_,
-                                       &image_factory_,
-                                       compositor->widget(), "UICompositor");
-
   // Try to reuse existing shared worker context provider.
   bool shared_worker_context_provider_lost = false;
   if (shared_worker_context_provider_) {
@@ -131,7 +114,7 @@
   }
   if (!shared_worker_context_provider_ || shared_worker_context_provider_lost) {
     shared_worker_context_provider_ = InProcessContextProvider::CreateOffscreen(
-        &gpu_memory_buffer_manager_, &image_factory_);
+        &gpu_memory_buffer_manager_, &image_factory_, nullptr);
     if (shared_worker_context_provider_ &&
         !shared_worker_context_provider_->BindToCurrentThread())
       shared_worker_context_provider_ = nullptr;
@@ -139,6 +122,23 @@
       shared_worker_context_provider_->SetupLock();
   }
 
+  gpu::gles2::ContextCreationAttribHelper attribs;
+  attribs.alpha_size = 8;
+  attribs.blue_size = 8;
+  attribs.green_size = 8;
+  attribs.red_size = 8;
+  attribs.depth_size = 0;
+  attribs.stencil_size = 0;
+  attribs.samples = 0;
+  attribs.sample_buffers = 0;
+  attribs.fail_if_major_perf_caveat = false;
+  attribs.bind_generates_resource = false;
+  scoped_refptr<InProcessContextProvider> context_provider =
+      InProcessContextProvider::Create(
+          attribs, shared_worker_context_provider_.get(),
+          &gpu_memory_buffer_manager_, &image_factory_, compositor->widget(),
+          "UICompositor");
+
   scoped_ptr<cc::OutputSurface> real_output_surface;
 
   if (use_test_surface_) {
@@ -190,7 +190,7 @@
     return shared_main_thread_contexts_;
 
   shared_main_thread_contexts_ = InProcessContextProvider::CreateOffscreen(
-      &gpu_memory_buffer_manager_, &image_factory_);
+      &gpu_memory_buffer_manager_, &image_factory_, nullptr);
   if (shared_main_thread_contexts_.get() &&
       !shared_main_thread_contexts_->BindToCurrentThread())
     shared_main_thread_contexts_ = NULL;
diff --git a/ui/compositor/test/in_process_context_provider.cc b/ui/compositor/test/in_process_context_provider.cc
index 11f9d28..1eac2df 100644
--- a/ui/compositor/test/in_process_context_provider.cc
+++ b/ui/compositor/test/in_process_context_provider.cc
@@ -23,19 +23,22 @@
 // static
 scoped_refptr<InProcessContextProvider> InProcessContextProvider::Create(
     const gpu::gles2::ContextCreationAttribHelper& attribs,
+    InProcessContextProvider* shared_context,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
     gpu::ImageFactory* image_factory,
     gfx::AcceleratedWidget window,
     const std::string& debug_name) {
-  return new InProcessContextProvider(
-      attribs, gpu_memory_buffer_manager, image_factory, window, debug_name);
+  return new InProcessContextProvider(attribs, shared_context,
+                                      gpu_memory_buffer_manager, image_factory,
+                                      window, debug_name);
 }
 
 // static
 scoped_refptr<InProcessContextProvider>
 InProcessContextProvider::CreateOffscreen(
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-    gpu::ImageFactory* image_factory) {
+    gpu::ImageFactory* image_factory,
+    InProcessContextProvider* shared_context) {
   gpu::gles2::ContextCreationAttribHelper attribs;
   attribs.alpha_size = 8;
   attribs.blue_size = 8;
@@ -47,18 +50,20 @@
   attribs.sample_buffers = 0;
   attribs.fail_if_major_perf_caveat = false;
   attribs.bind_generates_resource = false;
-  return new InProcessContextProvider(attribs, gpu_memory_buffer_manager,
-                                      image_factory,
+  return new InProcessContextProvider(attribs, shared_context,
+                                      gpu_memory_buffer_manager, image_factory,
                                       gfx::kNullAcceleratedWidget, "Offscreen");
 }
 
 InProcessContextProvider::InProcessContextProvider(
     const gpu::gles2::ContextCreationAttribHelper& attribs,
+    InProcessContextProvider* shared_context,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
     gpu::ImageFactory* image_factory,
     gfx::AcceleratedWidget window,
     const std::string& debug_name)
     : attribs_(attribs),
+      shared_context_(shared_context),
       gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
       image_factory_(image_factory),
       window_(window),
@@ -81,19 +86,16 @@
   if (!context_) {
     gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
     context_.reset(gpu::GLInProcessContext::Create(
-        nullptr,                           /* service */
-        nullptr,                           /* surface */
-        !window_,                          /* is_offscreen */
-        window_, gfx::Size(1, 1), nullptr, /* share_context */
-        true,                              /* share_resources */
-        attribs_, gpu_preference, gpu::GLInProcessContextSharedMemoryLimits(),
+        nullptr,  /* service */
+        nullptr,  /* surface */
+        !window_, /* is_offscreen */
+        window_, gfx::Size(1, 1),
+        (shared_context_ ? shared_context_->context_.get() : nullptr), attribs_,
+        gpu_preference, gpu::GLInProcessContextSharedMemoryLimits(),
         gpu_memory_buffer_manager_, image_factory_));
 
     if (!context_)
       return false;
-
-    context_->SetContextLostCallback(base::Bind(
-        &InProcessContextProvider::OnLostContext, base::Unretained(this)));
   }
 
   capabilities_.gpu = context_->GetImplementation()->capabilities();
@@ -168,15 +170,7 @@
 
 void InProcessContextProvider::SetLostContextCallback(
     const LostContextCallback& lost_context_callback) {
-  lost_context_callback_ = lost_context_callback;
-}
-
-void InProcessContextProvider::OnLostContext() {
-  DCHECK(context_thread_checker_.CalledOnValidThread());
-  if (!lost_context_callback_.is_null())
-    base::ResetAndReturn(&lost_context_callback_).Run();
-  if (gr_context_)
-    gr_context_->abandonContext();
+  // Pixel tests do not test lost context.
 }
 
 }  // namespace ui
diff --git a/ui/compositor/test/in_process_context_provider.h b/ui/compositor/test/in_process_context_provider.h
index b7c8565..5e0447c 100644
--- a/ui/compositor/test/in_process_context_provider.h
+++ b/ui/compositor/test/in_process_context_provider.h
@@ -30,6 +30,7 @@
  public:
   static scoped_refptr<InProcessContextProvider> Create(
       const gpu::gles2::ContextCreationAttribHelper& attribs,
+      InProcessContextProvider* shared_context,
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
       gpu::ImageFactory* image_factory,
       gfx::AcceleratedWidget window,
@@ -38,7 +39,8 @@
   // Uses default attributes for creating an offscreen context.
   static scoped_refptr<InProcessContextProvider> CreateOffscreen(
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-      gpu::ImageFactory* image_factory);
+      gpu::ImageFactory* image_factory,
+      InProcessContextProvider* shared_context);
 
   // cc::ContextProvider:
   bool BindToCurrentThread() override;
@@ -57,14 +59,13 @@
  private:
   InProcessContextProvider(
       const gpu::gles2::ContextCreationAttribHelper& attribs,
+      InProcessContextProvider* shared_context,
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
       gpu::ImageFactory* image_factory,
       gfx::AcceleratedWidget window,
       const std::string& debug_name);
   ~InProcessContextProvider() override;
 
-  void OnLostContext();
-
   base::ThreadChecker main_thread_checker_;
   base::ThreadChecker context_thread_checker_;
 
@@ -72,14 +73,13 @@
   skia::RefPtr<class GrContext> gr_context_;
 
   gpu::gles2::ContextCreationAttribHelper attribs_;
+  InProcessContextProvider* shared_context_;
   gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager_;
   gpu::ImageFactory* image_factory_;
   gfx::AcceleratedWidget window_;
   std::string debug_name_;
   cc::ContextProvider::Capabilities capabilities_;
 
-  LostContextCallback lost_context_callback_;
-
   base::Lock context_lock_;
 
   DISALLOW_COPY_AND_ASSIGN(InProcessContextProvider);
diff --git a/ui/display/BUILD.gn b/ui/display/BUILD.gn
index 20ed6af..226485b3 100644
--- a/ui/display/BUILD.gn
+++ b/ui/display/BUILD.gn
@@ -37,6 +37,10 @@
     "display_export.h",
     "display_switches.cc",
     "display_switches.h",
+    "manager/display_layout.cc",
+    "manager/display_layout.h",
+    "manager/display_layout_builder.cc",
+    "manager/display_layout_builder.h",
     "win/display_info.cc",
     "win/display_info.h",
     "win/screen_win.cc",
@@ -146,6 +150,7 @@
     "chromeos/update_display_configuration_task_unittest.cc",
     "chromeos/x11/display_util_x11_unittest.cc",
     "chromeos/x11/native_display_event_dispatcher_x11_unittest.cc",
+    "manager/display_layout_builder_unittest.cc",
     "util/display_util_unittest.cc",
     "util/edid_parser_unittest.cc",
     "win/screen_win_unittest.cc",
diff --git a/ui/display/display.gyp b/ui/display/display.gyp
index 2e1426f..a5c46448 100644
--- a/ui/display/display.gyp
+++ b/ui/display/display.gyp
@@ -76,6 +76,10 @@
         'display_export.h',
         'display_switches.cc',
         'display_switches.h',
+        'manager/display_layout.cc',
+        'manager/display_layout.h',
+        'manager/display_layout_builder.cc',
+        'manager/display_layout_builder.h',
         'win/display_info.cc',
         'win/display_info.h',
         'win/screen_win.cc',
@@ -216,6 +220,7 @@
         'chromeos/update_display_configuration_task_unittest.cc',
         'chromeos/x11/display_util_x11_unittest.cc',
         'chromeos/x11/native_display_event_dispatcher_x11_unittest.cc',
+        'manager/display_layout_builder_unittest.cc',
         'util/display_util_unittest.cc',
         'util/edid_parser_unittest.cc',
         'win/screen_win_unittest.cc',
diff --git a/ash/display/display_layout.cc b/ui/display/manager/display_layout.cc
similarity index 96%
rename from ash/display/display_layout.cc
rename to ui/display/manager/display_layout.cc
index 1cc7b7f..88128885 100644
--- a/ash/display/display_layout.cc
+++ b/ui/display/manager/display_layout.cc
@@ -1,22 +1,19 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2016 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ash/display/display_layout.h"
+#include "ui/display/manager/display_layout.h"
 
 #include <algorithm>
 #include <sstream>
 
-#include "ash/ash_switches.h"
-#include "ash/display/display_pref_util.h"
-#include "ash/shell.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
 #include "ui/gfx/display.h"
 
-namespace ash {
+namespace display {
 namespace  {
 
 // DisplayPlacement Positions
@@ -256,4 +253,4 @@
                                         : DisplayPlacement(*iter);
 }
 
-}  // namespace ash
+}  // namespace display
diff --git a/ash/display/display_layout.h b/ui/display/manager/display_layout.h
similarity index 88%
rename from ash/display/display_layout.h
rename to ui/display/manager/display_layout.h
index fd056130..7f5c99c8 100644
--- a/ash/display/display_layout.h
+++ b/ui/display/manager/display_layout.h
@@ -1,19 +1,19 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2016 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef ASH_DISPLAY_DISPLAY_LAYOUT_H_
-#define ASH_DISPLAY_DISPLAY_LAYOUT_H_
+#ifndef UI_DISPLAY_MANAGER_DISPLAY_LAYOUT_H_
+#define UI_DISPLAY_MANAGER_DISPLAY_LAYOUT_H_
 
 #include <stdint.h>
 
 #include <string>
 #include <vector>
 
-#include "ash/ash_export.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string_piece.h"
+#include "ui/display/display_export.h"
 
 namespace base {
 class Value;
@@ -24,7 +24,7 @@
 class Display;
 }
 
-namespace ash {
+namespace display {
 
 // An identifier used to manage display layout in DisplayManager /
 // DisplayLayoutStore.
@@ -45,7 +45,7 @@
 //                        |        |
 //                        +--------+
 //
-struct ASH_EXPORT DisplayPlacement {
+struct DISPLAY_EXPORT DisplayPlacement {
   // The id of the display this placement will be applied to.
   int64_t display_id;
 
@@ -73,7 +73,7 @@
                                Position* position);
 };
 
-class ASH_EXPORT DisplayLayout final {
+class DISPLAY_EXPORT DisplayLayout final {
  public:
   DisplayLayout();
   ~DisplayLayout();
@@ -109,6 +109,6 @@
   DISALLOW_COPY_AND_ASSIGN(DisplayLayout);
 };
 
-}  // namespace ash
+}  // namespace display
 
-#endif
+#endif  // UI_DISPLAY_MANAGER_DISPLAY_LAYOUT_H_
diff --git a/ash/display/display_layout_builder.cc b/ui/display/manager/display_layout_builder.cc
similarity index 94%
rename from ash/display/display_layout_builder.cc
rename to ui/display/manager/display_layout_builder.cc
index 579337f..8376e74 100644
--- a/ash/display/display_layout_builder.cc
+++ b/ui/display/manager/display_layout_builder.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ash/display/display_layout_builder.h"
+#include "ui/display/manager/display_layout_builder.h"
 
 #include <algorithm>
 
-namespace ash {
+namespace display {
 
 DisplayLayoutBuilder::DisplayLayoutBuilder(const DisplayLayout& layout)
     : layout_(layout.Copy()) {}
@@ -65,4 +65,4 @@
   return std::move(layout_);
 }
 
-}  // namespace ash
+}  // namespace display
diff --git a/ash/display/display_layout_builder.h b/ui/display/manager/display_layout_builder.h
similarity index 77%
rename from ash/display/display_layout_builder.h
rename to ui/display/manager/display_layout_builder.h
index 5391a02..9b3caef 100644
--- a/ash/display/display_layout_builder.h
+++ b/ui/display/manager/display_layout_builder.h
@@ -2,24 +2,25 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef ASH_DISPLAY_DISPLAY_LAYOUT_BUILDER_H_
-#define ASH_DISPLAY_DISPLAY_LAYOUT_BUILDER_H_
+#ifndef UI_DISPLAY_MANAGER_DISPLAY_LAYOUT_BUILDER_H_
+#define UI_DISPLAY_MANAGER_DISPLAY_LAYOUT_BUILDER_H_
 
-#include "ash/display/display_layout.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
+#include "ui/display/display_export.h"
+#include "ui/display/manager/display_layout.h"
 
-namespace ash {
+namespace display {
 
 class DisplayLayout;
 
 // A utility class to create a DisplayLayout instance.
-class ASH_EXPORT DisplayLayoutBuilder final {
+class DISPLAY_EXPORT DisplayLayoutBuilder final {
  public:
   // Creates a builder that uses a copy of the |layout| as a source.
   explicit DisplayLayoutBuilder(const DisplayLayout& layout);
 
-  // Ccreates a builder with the primary display id.
+  // Creates a builder with the primary display id.
   explicit DisplayLayoutBuilder(int64_t primary_id);
 
   ~DisplayLayoutBuilder();
@@ -51,6 +52,6 @@
   DISALLOW_COPY_AND_ASSIGN(DisplayLayoutBuilder);
 };
 
-}  // namespace ash
+}  // namespace display
 
-#endif  // ASH_DISPLAY_DISPLAY_LAYOUT_BUILDER_H_
+#endif  // UI_DISPLAY_MANAGER_DISPLAY_LAYOUT_BUILDER_H_
diff --git a/ash/display/display_layout_builder_unittest.cc b/ui/display/manager/display_layout_builder_unittest.cc
similarity index 87%
rename from ash/display/display_layout_builder_unittest.cc
rename to ui/display/manager/display_layout_builder_unittest.cc
index 159790cd..591a16c 100644
--- a/ash/display/display_layout_builder_unittest.cc
+++ b/ui/display/manager/display_layout_builder_unittest.cc
@@ -2,15 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ash/display/display_layout_builder.h"
+#include "ui/display/manager/display_layout_builder.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace ash {
+namespace display {
 
-typedef testing::Test DisplayLayoutBuilderTest;
-
-TEST_F(DisplayLayoutBuilderTest, SecondaryPlacement) {
+TEST(DisplayLayoutBuilderTest, SecondaryPlacement) {
   DisplayLayoutBuilder builder(1);
   builder.SetSecondaryPlacement(2, DisplayPlacement::LEFT, 30);
   scoped_ptr<DisplayLayout> layout(builder.Build());
@@ -22,7 +20,7 @@
   EXPECT_EQ(DisplayPlacement::LEFT, layout->placement_list[0].position);
 }
 
-TEST_F(DisplayLayoutBuilderTest, MultiplePlacement) {
+TEST(DisplayLayoutBuilderTest, MultiplePlacement) {
   DisplayLayoutBuilder builder(1);
   builder.AddDisplayPlacement(5, 1, DisplayPlacement::TOP, 30);
   builder.AddDisplayPlacement(3, 5, DisplayPlacement::LEFT, 20);
@@ -48,4 +46,4 @@
   EXPECT_EQ(DisplayPlacement::TOP, layout->placement_list[2].position);
 }
 
-}  // namespace ash
+}  // namespace display
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc
index 267d7399..68fe308 100644
--- a/ui/events/blink/input_handler_proxy.cc
+++ b/ui/events/blink/input_handler_proxy.cc
@@ -1110,6 +1110,14 @@
   input_handler_->SetSynchronousInputHandlerRootScrollOffset(root_offset);
 }
 
+void InputHandlerProxy::SynchronouslyZoomBy(float magnify_delta,
+                                            const gfx::Point& anchor) {
+  DCHECK(synchronous_input_handler_);
+  input_handler_->PinchGestureBegin();
+  input_handler_->PinchGestureUpdate(magnify_delta, anchor);
+  input_handler_->PinchGestureEnd();
+}
+
 void InputHandlerProxy::HandleOverscroll(
     const gfx::Point& causal_event_viewport_point,
     const cc::InputHandlerScrollResult& scroll_result) {
diff --git a/ui/events/blink/input_handler_proxy.h b/ui/events/blink/input_handler_proxy.h
index a1ccc83..4ef107fb 100644
--- a/ui/events/blink/input_handler_proxy.h
+++ b/ui/events/blink/input_handler_proxy.h
@@ -80,6 +80,8 @@
   void SynchronouslyAnimate(base::TimeTicks time) override;
   void SynchronouslySetRootScrollOffset(
       const gfx::ScrollOffset& root_offset) override;
+  void SynchronouslyZoomBy(float magnify_delta,
+                           const gfx::Point& anchor) override;
 
   // blink::WebGestureCurveTarget implementation.
   bool scrollBy(const blink::WebFloatSize& offset,
diff --git a/ui/events/blink/synchronous_input_handler_proxy.h b/ui/events/blink/synchronous_input_handler_proxy.h
index 36485f0..cafd7ce6 100644
--- a/ui/events/blink/synchronous_input_handler_proxy.h
+++ b/ui/events/blink/synchronous_input_handler_proxy.h
@@ -8,6 +8,7 @@
 #include "base/time/time.h"
 
 namespace gfx {
+class Point;
 class ScrollOffset;
 class SizeF;
 }
@@ -65,6 +66,12 @@
   // from what was sent.
   virtual void SynchronouslySetRootScrollOffset(
       const gfx::ScrollOffset& root_offset) = 0;
+
+  // Similar to SetRootScrollOffset above, to control the zoom level, ie scale
+  // factor. Note |magnify_delta| is an incremental rather than absolute value.
+  // SynchronousInputHandler should be given back the resulting absolute value.
+  virtual void SynchronouslyZoomBy(float magnify_delta,
+                                   const gfx::Point& anchor) = 0;
 };
 
 }  // namespace ui
diff --git a/ui/ozone/ozone.gni b/ui/ozone/ozone.gni
index 2287c1ef..768ddf7 100644
--- a/ui/ozone/ozone.gni
+++ b/ui/ozone/ozone.gni
@@ -41,22 +41,21 @@
       ozone_platform_cast = true
 
       # For visual desktop Chromecast builds, override the default "headless"
-      # platform with --ozone-platform=egltest
+      # platform with --ozone-platform=x11.
       # TODO(halliwell): Create a libcast_graphics implementation for desktop
-      # using X11, and disable these two platforms.
+      # using X11, and disable this platform.
       if (is_cast_desktop_build && !disable_display) {
-        ozone_platform_egltest = true
-        ozone_platform_ozonex = true
+        ozone_platform_x11 = true
       } else {
         ozone_platform = "cast"
       }
     } else if (is_chromeos) {
       ozone_platform_gbm = true
-      ozone_platform_egltest = true
+      ozone_platform_x11 = true
     } else {
       # Build all platforms whose deps are in install-build-deps.sh.
       # Only these platforms will be compile tested by buildbots.
-      ozone_platform_egltest = true
+      ozone_platform_x11 = true
     }
   }
 }
diff --git a/ui/resources/BUILD.gn b/ui/resources/BUILD.gn
index 6cd65373..1b407f37 100644
--- a/ui/resources/BUILD.gn
+++ b/ui/resources/BUILD.gn
@@ -75,8 +75,9 @@
   # This needs to be a separate target from ui_test_pak as ui_base_unittests
   # wants the generate .pak file in the bundle to be named en.lpro/locale.pak
   # while components_unittests wants it to be named ui_test.pak.
-  bundle_data("ui_test_pak_bundle_data") {
+  bundle_data("ui_test_pak_bundle_data_locale") {
     testonly = true
+    visibility = [ ":ui_test_pak_bundle_data" ]
     public_deps = [
       ":ui_test_pak",
     ]
@@ -87,6 +88,43 @@
       "{{bundle_resources_dir}}/en.lproj/locale.pak",
     ]
   }
+
+  bundle_data("ui_test_pak_bundle_data_test_pak") {
+    testonly = true
+    visibility = [ ":ui_test_pak_bundle_data" ]
+    public_deps = [
+      ":ui_test_pak",
+    ]
+    sources = [
+      "$root_out_dir/ui_test.pak",
+    ]
+    outputs = [
+      "{{bundle_resources_dir}}/ui_test.pak",
+    ]
+  }
+
+  bundle_data("ui_test_pak_bundle_data_100_percent") {
+    testonly = true
+    visibility = [ ":ui_test_pak_bundle_data" ]
+    public_deps = [
+      ":ui_test_pak",
+    ]
+    sources = [
+      "$root_out_dir/ui_test.pak",
+    ]
+    outputs = [
+      "{{bundle_resources_dir}}/chrome_100_percent.pak",
+    ]
+  }
+
+  group("ui_test_pak_bundle_data") {
+    testonly = true
+    public_deps = [
+      ":ui_test_pak_bundle_data_100_percent",
+      ":ui_test_pak_bundle_data_locale",
+      ":ui_test_pak_bundle_data_test_pak",
+    ]
+  }
 } else {
   copy("ui_test_pak") {
     sources = [
diff --git a/ui/views/controls/menu/menu_runner_cocoa_unittest.mm b/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
index d25a662..73e02ec 100644
--- a/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
+++ b/ui/views/controls/menu/menu_runner_cocoa_unittest.mm
@@ -23,6 +23,10 @@
 
   void set_checked_command(int command) { checked_command_ = command; }
 
+  void set_menu_open_callback(const base::Closure& callback) {
+    menu_open_callback_ = callback;
+  }
+
  private:
   class Delegate : public ui::SimpleMenuModel::Delegate {
    public:
@@ -37,6 +41,10 @@
     }
     void ExecuteCommand(int command_id, int event_flags) override {}
 
+    void MenuWillShow(SimpleMenuModel* source) override {
+      model_->menu_open_callback_.Run();
+    }
+
    private:
     TestModel* model_;
 
@@ -46,6 +54,7 @@
  private:
   int checked_command_ = -1;
   Delegate delegate_;
+  base::Closure menu_open_callback_;
 
   DISALLOW_COPY_AND_ASSIGN(TestModel);
 };
@@ -89,14 +98,13 @@
     ViewsTestBase::TearDown();
   }
 
-  // Runs the menu after scheduling |block| on the run loop.
-  MenuRunner::RunResult RunMenu(dispatch_block_t block) {
-    CFRunLoopPerformBlock(CFRunLoopGetCurrent(), kCFRunLoopCommonModes, ^{
-        EXPECT_TRUE(runner_->IsRunning());
-        block();
-    });
-    return runner_->RunMenuAt(parent_, NULL, gfx::Rect(), MENU_ANCHOR_TOPLEFT,
-                              MenuRunner::CONTEXT_MENU);
+  // Runs the menu after registering |callback| as the menu open callback.
+  MenuRunner::RunResult RunMenu(const base::Closure& callback) {
+    menu_->set_menu_open_callback(
+        base::Bind(&MenuRunnerCocoaTest::RunMenuWrapperCallback,
+                   base::Unretained(this), callback));
+    return runner_->RunMenuAt(parent_, nullptr, gfx::Rect(),
+                              MENU_ANCHOR_TOPLEFT, MenuRunner::CONTEXT_MENU);
   }
 
   // Runs then cancels a combobox menu and captures the frame of the anchoring
@@ -107,12 +115,10 @@
     // Should be one child (the compositor layer) before showing, and it should
     // go up by one (the anchor view) while the menu is shown.
     EXPECT_EQ(1u, [[parent_->GetNativeView() subviews] count]);
-    CFRunLoopPerformBlock(CFRunLoopGetCurrent(), kCFRunLoopCommonModes, ^{
-      NSArray* subviews = [parent_->GetNativeView() subviews];
-      EXPECT_EQ(2u, [subviews count]);
-      last_anchor_frame_ = [[subviews objectAtIndex:1] frame];
-      runner_->Cancel();
-    });
+
+    menu_->set_menu_open_callback(base::Bind(
+        &MenuRunnerCocoaTest::RunMenuAtCallback, base::Unretained(this)));
+
     MenuRunner::RunResult result = runner_->RunMenuAt(
         parent_, nullptr, anchor, MENU_ANCHOR_TOPLEFT, MenuRunner::COMBOBOX);
 
@@ -121,6 +127,16 @@
     return result;
   }
 
+  void MenuCancelCallback() {
+    runner_->Cancel();
+    EXPECT_FALSE(runner_->IsRunning());
+  }
+
+  void MenuDeleteCallback() {
+    runner_->Release();
+    runner_ = nullptr;
+  }
+
  protected:
   scoped_ptr<TestModel> menu_;
   internal::MenuRunnerImplCocoa* runner_ = nullptr;
@@ -128,16 +144,26 @@
   NSRect last_anchor_frame_ = NSZeroRect;
 
  private:
+  void RunMenuWrapperCallback(const base::Closure& callback) {
+    EXPECT_TRUE(runner_->IsRunning());
+    callback.Run();
+  }
+
+  void RunMenuAtCallback() {
+    NSArray* subviews = [parent_->GetNativeView() subviews];
+    EXPECT_EQ(2u, [subviews count]);
+    last_anchor_frame_ = [[subviews objectAtIndex:1] frame];
+    runner_->Cancel();
+  }
+
   DISALLOW_COPY_AND_ASSIGN(MenuRunnerCocoaTest);
 };
 
 TEST_F(MenuRunnerCocoaTest, RunMenuAndCancel) {
   base::TimeDelta min_time = ui::EventTimeForNow();
 
-  MenuRunner::RunResult result = RunMenu(^{
-      runner_->Cancel();
-      EXPECT_FALSE(runner_->IsRunning());
-  });
+  MenuRunner::RunResult result = RunMenu(base::Bind(
+      &MenuRunnerCocoaTest::MenuCancelCallback, base::Unretained(this)));
 
   EXPECT_EQ(MenuRunner::NORMAL_EXIT, result);
   EXPECT_FALSE(runner_->IsRunning());
@@ -151,19 +177,15 @@
 }
 
 TEST_F(MenuRunnerCocoaTest, RunMenuAndDelete) {
-  MenuRunner::RunResult result = RunMenu(^{
-      runner_->Release();
-      runner_ = NULL;
-  });
-
+  MenuRunner::RunResult result = RunMenu(base::Bind(
+      &MenuRunnerCocoaTest::MenuDeleteCallback, base::Unretained(this)));
   EXPECT_EQ(MenuRunner::MENU_DELETED, result);
 }
 
 TEST_F(MenuRunnerCocoaTest, RunMenuTwice) {
   for (int i = 0; i < 2; ++i) {
-    MenuRunner::RunResult result = RunMenu(^{
-        runner_->Cancel();
-    });
+    MenuRunner::RunResult result = RunMenu(base::Bind(
+        &MenuRunnerCocoaTest::MenuCancelCallback, base::Unretained(this)));
     EXPECT_EQ(MenuRunner::NORMAL_EXIT, result);
     EXPECT_FALSE(runner_->IsRunning());
   }
diff --git a/ui/views/mus/BUILD.gn b/ui/views/mus/BUILD.gn
index 6ad07292..a900576 100644
--- a/ui/views/mus/BUILD.gn
+++ b/ui/views/mus/BUILD.gn
@@ -62,7 +62,6 @@
     "//mojo/converters/geometry",
     "//mojo/converters/ime",
     "//mojo/converters/input_events",
-    "//mojo/converters/network",
     "//mojo/converters/surfaces",
     "//mojo/platform_handle:for_component",
     "//mojo/public/c/system:for_component",
diff --git a/ui/views/mus/window_manager_connection.cc b/ui/views/mus/window_manager_connection.cc
index 8b6398a3..fc41913 100644
--- a/ui/views/mus/window_manager_connection.cc
+++ b/ui/views/mus/window_manager_connection.cc
@@ -11,7 +11,6 @@
 #include "components/mus/public/cpp/window_tree_connection.h"
 #include "components/mus/public/interfaces/window_tree.mojom.h"
 #include "mojo/converters/geometry/geometry_type_converters.h"
-#include "mojo/converters/network/network_type_converters.h"
 #include "mojo/shell/public/cpp/connection.h"
 #include "mojo/shell/public/cpp/connector.h"
 #include "ui/views/mus/native_widget_mus.h"
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index 1e4fc76..74d5cd6e 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -8,7 +8,6 @@
 #include <oleacc.h>
 #include <shellapi.h>
 #include <tchar.h>
-#include <tpcshrd.h>
 
 #include <utility>
 
@@ -385,9 +384,7 @@
     direct_manipulation_helper_->Initialize(hwnd());
 
   // Disable pen flicks (http://crbug.com/506977)
-  ::SetProp(hwnd(), MICROSOFT_TABLETPENSERVICE_PROPERTY,
-            reinterpret_cast<HANDLE>(TABLET_DISABLE_FLICKS |
-                                     TABLET_DISABLE_FLICKFALLBACKKEYS));
+  base::win::DisableFlicks(hwnd());
 }
 
 void HWNDMessageHandler::InitModalType(ui::ModalType modal_type) {
@@ -414,9 +411,8 @@
   // they can activate as foreground windows upon this window's destruction.
   RestoreEnabledIfNecessary();
 
-  // Remove the property which disables pen flicks (http://crbug.com/506977)
-  // for this window.
-  ::RemoveProp(hwnd(), MICROSOFT_TABLETPENSERVICE_PROPERTY);
+  // Re-enable flicks which removes the window property.
+  base::win::EnableFlicks(hwnd());
 
   if (!waiting_for_close_now_) {
     // And we delay the close so that if we are called from an ATL callback,
diff --git a/ui/views_content_client/views_content_browser_client.cc b/ui/views_content_client/views_content_browser_client.cc
index e5f4f388..29b6dec 100644
--- a/ui/views_content_client/views_content_browser_client.cc
+++ b/ui/views_content_client/views_content_browser_client.cc
@@ -4,9 +4,6 @@
 
 #include "ui/views_content_client/views_content_browser_client.h"
 
-#include <utility>
-
-#include "content/shell/browser/shell_browser_context.h"
 #include "ui/views_content_client/views_content_client_main_parts.h"
 
 namespace ui {
@@ -27,15 +24,4 @@
   return views_content_main_parts_;
 }
 
-net::URLRequestContextGetter*
-ViewsContentBrowserClient::CreateRequestContext(
-    content::BrowserContext* content_browser_context,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector request_interceptors) {
-  content::ShellBrowserContext* shell_context =
-      views_content_main_parts_->browser_context();
-  return shell_context->CreateRequestContext(protocol_handlers,
-                                             std::move(request_interceptors));
-}
-
 }  // namespace ui
diff --git a/ui/views_content_client/views_content_browser_client.h b/ui/views_content_client/views_content_browser_client.h
index 98d9ee4..408fb8a 100644
--- a/ui/views_content_client/views_content_browser_client.h
+++ b/ui/views_content_client/views_content_browser_client.h
@@ -8,10 +8,6 @@
 #include "base/macros.h"
 #include "content/public/browser/content_browser_client.h"
 
-namespace content {
-class ShellBrowserContext;
-}
-
 namespace ui {
 
 class ViewsContentClient;
@@ -26,10 +22,6 @@
   // content::ContentBrowserClient:
   content::BrowserMainParts* CreateBrowserMainParts(
       const content::MainFunctionParams& parameters) override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::BrowserContext* browser_context,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
 
  private:
   ViewsContentClientMainParts* views_content_main_parts_;