Automated merge with https://hg.mozilla.org/mozilla-central
authorMike Conley <mconley@mozilla.com>
Tue, 23 Apr 2013 10:50:24 -0400
changeset 169769 a988839df683fa8c76a1fbddaa2a8523c2439f78
parent 140508 aa620f3fc2f7116e6fad91915cb273160a2f5f0a (current diff)
parent 169768 58409a99aa1e3c1a8b91df0b9e823c8e74e7b593 (diff)
child 169770 1db126465f337bf11f53f574e5c35615d002aaef
push id3224
push userlsblakk@mozilla.com
push dateTue, 04 Feb 2014 01:06:49 +0000
treeherdermozilla-beta@60c04d0987f1 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone23.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Automated merge with https://hg.mozilla.org/mozilla-central
browser/base/content/browser.js
browser/base/content/tabbrowser.xml
browser/themes/osx/tabbrowser/tab-bottom-hover-active.png
browser/themes/osx/tabbrowser/tab-bottom-normal-active.png
browser/themes/osx/tabbrowser/tab-bottom-selected-active.png
browser/themes/osx/tabbrowser/tab-top-hover-active.png
browser/themes/osx/tabbrowser/tab-top-hover-active@2x.png
browser/themes/osx/tabbrowser/tab-top-normal-active.png
browser/themes/osx/tabbrowser/tab-top-normal-active@2x.png
browser/themes/osx/tabbrowser/tab-top-selected-active.png
browser/themes/osx/tabbrowser/tab-top-selected-active@2x.png
widget/cocoa/nsChildView.h
widget/cocoa/nsChildView.mm
widget/cocoa/nsCocoaWindow.h
widget/cocoa/nsCocoaWindow.mm
--- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js
@@ -410,8 +410,63 @@ var LightWeightThemeWebInstaller = {
     return pm.testPermission(uri, "install") == pm.ALLOW_ACTION;
   },
 
   _getThemeFromNode: function (node) {
     return this._manager.parseTheme(node.getAttribute("data-browsertheme"),
                                     node.baseURI);
   }
 }
+
+/*
+ * Listen for Lightweight Theme styling changes and update the browser's theme accordingly.
+ */
+let LightweightThemeListener = {
+  _modifiedStyles: [],
+
+  init: function () {
+    XPCOMUtils.defineLazyGetter(this, "styleSheet", function() {
+      for (let i = document.styleSheets.length - 1; i >= 0; i--) {
+        let sheet = document.styleSheets[i];
+        if (sheet.href == "chrome://browser/skin/browser-lightweightTheme.css")
+          return sheet;
+      }
+    });
+
+    Services.obs.addObserver(this, "lightweight-theme-styling-update", false);
+    if (document.documentElement.hasAttribute("lwtheme"))
+      this.updateStyleSheet(document.documentElement.style.backgroundImage);
+  },
+
+  uninit: function () {
+    Services.obs.removeObserver(this, "lightweight-theme-styling-update");
+  },
+
+  /**
+   * Append the headerImage to the background-image property of all rulesets in
+   * browser-lightweightTheme.css.
+   *
+   * @param headerImage - a string containing a CSS image for the lightweight theme header.
+   */
+  updateStyleSheet: function(headerImage) {
+    if (!this.styleSheet)
+      return;
+    for (let i = 0; i < this.styleSheet.cssRules.length; i++) {
+      let rule = this.styleSheet.cssRules[i];
+      if (!rule.style.backgroundImage)
+        continue;
+
+      if (!this._modifiedStyles[i])
+        this._modifiedStyles[i] = { backgroundImage: rule.style.backgroundImage };
+
+      rule.style.backgroundImage = this._modifiedStyles[i].backgroundImage + ", " + headerImage;
+    }
+  },
+
+  // nsIObserver
+  observe: function (aSubject, aTopic, aData) {
+    if (aTopic != "lightweight-theme-styling-update" || !this.styleSheet)
+      return;
+
+    let themeData = JSON.parse(aData);
+    this.updateStyleSheet("url(" + themeData.headerURL + ")");
+  },
+};
new file mode 100644
--- /dev/null
+++ b/browser/base/content/browser-customization.js
@@ -0,0 +1,102 @@
+# -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+/**
+ * Customization handler prepares this browser window for entering and exiting
+ * customization mode by handling CustomizationStart and CustomizationEnd
+ * events.
+ */
+let CustomizationHandler = {
+  handleEvent: function(aEvent) {
+    switch(aEvent.type) {
+      case "CustomizationStart":
+        this._customizationStart();
+        break;
+      case "CustomizationEnd":
+        this._customizationEnd(aEvent.detail);
+        break;
+    }
+  },
+
+  _customizationStart: function() {
+    // Disable the toolbar context menu items
+    let menubar = document.getElementById("main-menubar");
+    for (let childNode of menubar.childNodes)
+      childNode.setAttribute("disabled", true);
+
+    let cmd = document.getElementById("cmd_CustomizeToolbars");
+    cmd.setAttribute("disabled", "true");
+
+    let splitter = document.getElementById("urlbar-search-splitter");
+    if (splitter) {
+      splitter.parentNode.removeChild(splitter);
+    }
+
+    CombinedStopReload.uninit();
+    PlacesToolbarHelper.customizeStart();
+    BookmarksMenuButton.customizeStart();
+    DownloadsButton.customizeStart();
+    TabsInTitlebar.allowedBy("customizing-toolbars", false);
+  },
+
+  _customizationEnd: function(aDetails) {
+    // Update global UI elements that may have been added or removed
+    if (aDetails.changed) {
+      gURLBar = document.getElementById("urlbar");
+
+      gProxyFavIcon = document.getElementById("page-proxy-favicon");
+      gHomeButton.updateTooltip();
+      gIdentityHandler._cacheElements();
+      XULBrowserWindow.init();
+
+#ifndef XP_MACOSX
+      updateEditUIVisibility();
+#endif
+
+      // Hacky: update the PopupNotifications' object's reference to the iconBox,
+      // if it already exists, since it may have changed if the URL bar was
+      // added/removed.
+      if (!window.__lookupGetter__("PopupNotifications")) {
+        PopupNotifications.iconBox =
+          document.getElementById("notification-popup-box");
+      }
+
+    }
+
+    PlacesToolbarHelper.customizeDone();
+    BookmarksMenuButton.customizeDone();
+    DownloadsButton.customizeDone();
+
+    // The url bar splitter state is dependent on whether stop/reload
+    // and the location bar are combined, so we need this ordering
+    CombinedStopReload.init();
+    UpdateUrlbarSearchSplitterState();
+    setUrlAndSearchBarWidthForConditionalForwardButton();
+
+    // Update the urlbar
+    if (gURLBar) {
+      URLBarSetURI();
+      XULBrowserWindow.asyncUpdateUI();
+      PlacesStarButton.updateState();
+      SocialShareButton.updateShareState();
+    }
+
+    TabsInTitlebar.allowedBy("customizing-toolbars", true);
+
+    // Re-enable parts of the UI we disabled during the dialog
+    let menubar = document.getElementById("main-menubar");
+    for (let childNode of menubar.childNodes)
+      childNode.setAttribute("disabled", false);
+    let cmd = document.getElementById("cmd_CustomizeToolbars");
+    cmd.removeAttribute("disabled");
+
+    // make sure to re-enable click-and-hold
+    if (!getBoolPref("ui.click_hold_context_menus", false)) {
+      SetClickAndHoldHandlers();
+    }
+
+    gBrowser.selectedBrowser.focus();
+  }
+}
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -4,16 +4,20 @@
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 @namespace html url("http://www.w3.org/1999/xhtml");
 
 searchbar {
   -moz-binding: url("chrome://browser/content/search/search.xml#searchbar");
 }
 
+#nav-bar {
+  -moz-binding: url("chrome://browser/content/toolbar.xml#toolbar");
+}
+
 tabbrowser {
   -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser");
 }
 
 .tabbrowser-tabs {
   -moz-binding: url("chrome://browser/content/tabbrowser.xml#tabbrowser-tabs");
 }
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -86,16 +86,22 @@ this.__defineSetter__("PluralForm", func
 });
 
 XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch",
   "resource://gre/modules/TelemetryStopwatch.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "AboutHomeUtils",
   "resource:///modules/AboutHomeUtils.jsm");
 
+XPCOMUtils.defineLazyGetter(this, "gCustomizeMode", function() {
+  let scope = {};
+  Cu.import("resource:///modules/CustomizeMode.jsm", scope);
+  return new scope.CustomizeMode(window);
+});
+
 #ifdef MOZ_SERVICES_SYNC
 XPCOMUtils.defineLazyModuleGetter(this, "Weave",
   "resource://services-sync/main.js");
 #endif
 
 XPCOMUtils.defineLazyGetter(this, "PopupNotifications", function () {
   let tmp = {};
   Cu.import("resource://gre/modules/PopupNotifications.jsm", tmp);
@@ -142,16 +148,17 @@ let gInitialPages = [
   "about:blank",
   "about:newtab",
   "about:home",
   "about:privatebrowsing",
   "about:sessionrestore"
 ];
 
 #include browser-addons.js
+#include browser-customization.js
 #include browser-feeds.js
 #include browser-fullScreen.js
 #include browser-fullZoom.js
 #include browser-places.js
 #include browser-plugins.js
 #include browser-safebrowsing.js
 #include browser-social.js
 #include browser-tabPreviews.js
@@ -1030,17 +1037,19 @@ var gBrowserInit = {
     Services.obs.addObserver(gXPInstallObserver, "addon-install-failed", false);
     Services.obs.addObserver(gXPInstallObserver, "addon-install-complete", false);
     Services.obs.addObserver(gFormSubmitObserver, "invalidformsubmit", false);
 
     BrowserOffline.init();
     OfflineApps.init();
     IndexedDBPromptHelper.init();
     gFormSubmitObserver.init();
+    PanelUI.init();
     SocialUI.init();
+    LightweightThemeListener.init();
     AddonManager.addAddonListener(AddonsMgrListener);
     WebrtcIndicator.init();
 
     // Ensure login manager is up and running.
     Services.logins;
 
     if (mustLoadSidebar) {
       let sidebar = document.getElementById("sidebar");
@@ -1265,16 +1274,21 @@ var gBrowserInit = {
         appMenuOpening = null;
         Services.telemetry.getHistogramById("FX_APP_MENU_OPEN_MS").add(duration);
       }, false);
     }
 
     window.addEventListener("mousemove", MousePosTracker, false);
     window.addEventListener("dragover", MousePosTracker, false);
 
+    window.addEventListener("CustomizationStart", CustomizationHandler, false);
+    window.addEventListener("CustomizationEnd", CustomizationHandler, false);
+
+    gCustomizeMode.init();
+
     // End startup crash tracking after a delay to catch crashes while restoring
     // tabs and to postpone saving the pref to disk.
     try {
       const startupCrashEndDelay = 30 * 1000;
       setTimeout(Services.startup.trackStartupCrashEnd, startupCrashEndDelay);
     } catch (ex) {
       Cu.reportError("Could not end startup crash tracking: " + ex);
     }
@@ -1360,16 +1374,19 @@ var gBrowserInit = {
         Cu.reportError(ex);
       }
 
       BrowserOffline.uninit();
       OfflineApps.uninit();
       IndexedDBPromptHelper.uninit();
       AddonManager.removeAddonListener(AddonsMgrListener);
       SocialUI.uninit();
+      LightweightThemeListener.uninit();
+      gCustomizeMode.uninit();
+      PanelUI.uninit();
     }
 
     // Final window teardown, do this last.
     window.XULBrowserWindow.destroy();
     window.XULBrowserWindow = null;
     window.QueryInterface(Ci.nsIInterfaceRequestor)
           .getInterface(Ci.nsIWebNavigation)
           .QueryInterface(Ci.nsIDocShellTreeItem).treeOwner
@@ -3307,128 +3324,23 @@ function OpenBrowserWindow(options)
   else // forget about the charset information.
   {
     win = window.openDialog("chrome://browser/content/", "_blank", "chrome,all,dialog=no" + extraFeatures, defaultArgs);
   }
 
   return win;
 }
 
-var gCustomizeSheet = false;
+//XXXunf Are these still useful to keep around?
 function BrowserCustomizeToolbar() {
-  // Disable the toolbar context menu items
-  var menubar = document.getElementById("main-menubar");
-  for (let childNode of menubar.childNodes)
-    childNode.setAttribute("disabled", true);
-
-  var cmd = document.getElementById("cmd_CustomizeToolbars");
-  cmd.setAttribute("disabled", "true");
-
-  var splitter = document.getElementById("urlbar-search-splitter");
-  if (splitter)
-    splitter.parentNode.removeChild(splitter);
-
-  CombinedStopReload.uninit();
-
-  PlacesToolbarHelper.customizeStart();
-  BookmarksMenuButton.customizeStart();
-  DownloadsButton.customizeStart();
-
-  TabsInTitlebar.allowedBy("customizing-toolbars", false);
-
-  var customizeURL = "chrome://global/content/customizeToolbar.xul";
-  gCustomizeSheet = getBoolPref("toolbar.customization.usesheet", false);
-
-  if (gCustomizeSheet) {
-    let sheetFrame = document.createElement("iframe");
-    let panel = document.getElementById("customizeToolbarSheetPopup");
-    sheetFrame.id = "customizeToolbarSheetIFrame";
-    sheetFrame.toolbox = gNavToolbox;
-    sheetFrame.panel = panel;
-    sheetFrame.setAttribute("style", panel.getAttribute("sheetstyle"));
-    panel.appendChild(sheetFrame);
-
-    // Open the panel, but make it invisible until the iframe has loaded so
-    // that the user doesn't see a white flash.
-    panel.style.visibility = "hidden";
-    gNavToolbox.addEventListener("beforecustomization", function onBeforeCustomization() {
-      gNavToolbox.removeEventListener("beforecustomization", onBeforeCustomization, false);
-      panel.style.removeProperty("visibility");
-    }, false);
-
-    sheetFrame.setAttribute("src", customizeURL);
-
-    panel.openPopup(gNavToolbox, "after_start", 0, 0);
-  } else {
-    window.openDialog(customizeURL,
-                      "CustomizeToolbar",
-                      "chrome,titlebar,toolbar,location,resizable,dependent",
-                      gNavToolbox);
-  }
+  gCustomizeMode.enter();
 }
 
 function BrowserToolboxCustomizeDone(aToolboxChanged) {
-  if (gCustomizeSheet) {
-    document.getElementById("customizeToolbarSheetPopup").hidePopup();
-    let iframe = document.getElementById("customizeToolbarSheetIFrame");
-    iframe.parentNode.removeChild(iframe);
-  }
-
-  // Update global UI elements that may have been added or removed
-  if (aToolboxChanged) {
-    gURLBar = document.getElementById("urlbar");
-
-    gProxyFavIcon = document.getElementById("page-proxy-favicon");
-    gHomeButton.updateTooltip();
-    gIdentityHandler._cacheElements();
-    window.XULBrowserWindow.init();
-
-#ifndef XP_MACOSX
-    updateEditUIVisibility();
-#endif
-
-    // Hacky: update the PopupNotifications' object's reference to the iconBox,
-    // if it already exists, since it may have changed if the URL bar was
-    // added/removed.
-    if (!window.__lookupGetter__("PopupNotifications"))
-      PopupNotifications.iconBox = document.getElementById("notification-popup-box");
-  }
-
-  PlacesToolbarHelper.customizeDone();
-  BookmarksMenuButton.customizeDone();
-  DownloadsButton.customizeDone();
-
-  // The url bar splitter state is dependent on whether stop/reload
-  // and the location bar are combined, so we need this ordering
-  CombinedStopReload.init();
-  UpdateUrlbarSearchSplitterState();
-  setUrlAndSearchBarWidthForConditionalForwardButton();
-
-  // Update the urlbar
-  if (gURLBar) {
-    URLBarSetURI();
-    XULBrowserWindow.asyncUpdateUI();
-    PlacesStarButton.updateState();
-    SocialShareButton.updateShareState();
-  }
-
-  TabsInTitlebar.allowedBy("customizing-toolbars", true);
-
-  // Re-enable parts of the UI we disabled during the dialog
-  var menubar = document.getElementById("main-menubar");
-  for (let childNode of menubar.childNodes)
-    childNode.setAttribute("disabled", false);
-  var cmd = document.getElementById("cmd_CustomizeToolbars");
-  cmd.removeAttribute("disabled");
-
-  // make sure to re-enable click-and-hold
-  if (!getBoolPref("ui.click_hold_context_menus", false))
-    SetClickAndHoldHandlers();
-
-  gBrowser.selectedBrowser.focus();
+  gCustomizeMode.exit(aToolboxChanged);
 }
 
 function BrowserToolboxCustomizeChange(aType) {
   switch (aType) {
     case "iconsize":
     case "mode":
       retrieveToolbarIconsizesFromTheme();
       break;
@@ -3589,16 +3501,18 @@ function mimeTypeIsTextBased(aMimeType)
 var XULBrowserWindow = {
   // Stored Status, Link and Loading values
   status: "",
   defaultStatus: "",
   overLink: "",
   startTime: 0,
   statusText: "",
   isBusy: false,
+  // The pages in this array should be kept in sync with what pages that
+  // panelUIOverlay.xul is set to overlay in /browser/base/jar.mn
   inContentWhitelist: ["about:addons", "about:downloads", "about:permissions",
                        "about:sync-progress", "about:preferences"],
 
   QueryInterface: function (aIID) {
     if (aIID.equals(Ci.nsIWebProgressListener) ||
         aIID.equals(Ci.nsIWebProgressListener2) ||
         aIID.equals(Ci.nsISupportsWeakReference) ||
         aIID.equals(Ci.nsIXULBrowserWindow) ||
@@ -4558,139 +4472,243 @@ var TabsOnTop = {
 }
 
 var TabsInTitlebar = {
   init: function () {
 #ifdef CAN_DRAW_IN_TITLEBAR
     this._readPref();
     Services.prefs.addObserver(this._prefName, this, false);
 
-    // Don't trust the initial value of the sizemode attribute; wait for
-    // the resize event (handled in tabbrowser.xml).
-    this.allowedBy("sizemode", false);
-
+    // We need to update the appearance of the titlebar when the menu changes
+    // from the active to the inactive state. We can't, however, rely on
+    // DOMMenuBarInactive, because the menu fires this event and then removes
+    // the inactive attribute after an event-loop spin.
+    //
+    // Because updating the appearance involves sampling the heights and margins
+    // of various elements, it's important that the layout be more or less
+    // settled before updating the titlebar. So instead of listening to
+    // DOMMenuBarActive and DOMMenuBarInactive, we use a MutationObserver to
+    // watch the "invalid" attribute directly.
+    let menu = document.getElementById("toolbar-menubar");
+    this._menuObserver = new MutationObserver(this._onMenuMutate);
+    this._menuObserver.observe(menu, {attributes: true});
     this._initialized = true;
 #endif
   },
 
   allowedBy: function (condition, allow) {
 #ifdef CAN_DRAW_IN_TITLEBAR
     if (allow) {
       if (condition in this._disallowed) {
         delete this._disallowed[condition];
-        this._update();
+        this._update(true);
       }
     } else {
       if (!(condition in this._disallowed)) {
         this._disallowed[condition] = null;
-        this._update();
+        this._update(true);
       }
     }
 #endif
   },
 
+  updateAppearance: function updateAppearance(aForce) {
+#ifdef CAN_DRAW_IN_TITLEBAR
+    this._update(aForce);
+#endif
+  },
+
   get enabled() {
     return document.documentElement.getAttribute("tabsintitlebar") == "true";
   },
 
 #ifdef CAN_DRAW_IN_TITLEBAR
   observe: function (subject, topic, data) {
     if (topic == "nsPref:changed")
       this._readPref();
   },
 
+  _onMenuMutate: function (aMutations) {
+    // We don't care about restored windows, since the menu shouldn't be
+    // pushing the tab-strip down.
+    if (document.documentElement.getAttribute("sizemode") == "normal") {
+      return;
+    }
+
+    for (let mutation of aMutations) {
+      if (mutation.attributeName == "inactive" ||
+          mutation.attributeName == "autohide") {
+        TabsInTitlebar._update(true);
+        return;
+      }
+    }
+  },
+
   _initialized: false,
   _disallowed: {},
   _prefName: "browser.tabs.drawInTitlebar",
+  _lastSizeMode: null,
 
   _readPref: function () {
     this.allowedBy("pref",
                    Services.prefs.getBoolPref(this._prefName));
   },
 
-  _update: function () {
+  _update: function (aForce=false) {
     if (!this._initialized || window.fullScreen)
       return;
 
     let allowed = true;
+
+    if (!aForce) {
+      // _update is called on resize events, because the window is not ready
+      // after sizemode events. However, we only care about the event when the
+      // sizemode is different from the last time we updated the appearance of
+      // the tabs in the titlebar.
+      let sizemode = document.documentElement.getAttribute("sizemode");
+      if (this._lastSizeMode == sizemode) {
+        return;
+      }
+      this._lastSizeMode = sizemode;
+    }
+
     for (let something in this._disallowed) {
       allowed = false;
       break;
     }
 
-    if (allowed == this.enabled)
-      return;
-
     function $(id) document.getElementById(id);
+
     let titlebar = $("titlebar");
+    let titlebarContent = $("titlebar-content");
+    let menubar = $("toolbar-menubar");
+
+    // Reset the margins that _update modifies so that we can take accurate
+    // measurements.
+    titlebarContent.style.marginBottom = "";
+    titlebar.style.marginBottom = "";
+    menubar.style.marginBottom = "";
 
     if (allowed) {
+      // We set the tabsintitlebar attribute first so that our CSS for
+      // tabsintitlebar manifests before we do our measurements.
+      document.documentElement.setAttribute("tabsintitlebar", "true");
+
       function rect(ele)   ele.getBoundingClientRect();
 
-      let tabsToolbar       = $("TabsToolbar");
-
 #ifdef MENUBAR_CAN_AUTOHIDE
       let appmenuButtonBox  = $("appmenu-button-container");
       this._sizePlaceholder("appmenu-button", rect(appmenuButtonBox).width);
 #endif
       let captionButtonsBox = $("titlebar-buttonbox");
       this._sizePlaceholder("caption-buttons", rect(captionButtonsBox).width);
 
-      let tabsToolbarRect = rect(tabsToolbar);
-      let titlebarTop = rect($("titlebar-content")).top;
-      titlebar.style.marginBottom = - Math.min(tabsToolbarRect.top - titlebarTop,
-                                               tabsToolbarRect.height) + "px";
-
-      document.documentElement.setAttribute("tabsintitlebar", "true");
-
-      if (!this._draghandle) {
+      let titlebarContentHeight = rect(titlebarContent).height;
+      let menuHeight = this._outerHeight(menubar);
+
+      // If the titlebar is taller than the menubar, add more padding to the
+      // bottom of the menubar so that it matches.
+      if (menuHeight && titlebarContentHeight > menuHeight) {
+        let menuTitlebarDelta = titlebarContentHeight - menuHeight;
+        menubar.style.marginBottom = menuTitlebarDelta + "px";
+        menuHeight += menuTitlebarDelta;
+      }
+
+      // Next, we calculate how much we need to stretch the titlebar down to
+      // go all the way to the bottom of the tab strip.
+      let tabsToolbar = $("TabsToolbar");
+      let tabAndMenuHeight = this._outerHeight(tabsToolbar) + menuHeight;
+      titlebarContent.style.marginBottom = tabAndMenuHeight + "px";
+
+      // Finally, we have to determine how much to bring up the elements below
+      // the titlebar. We start with a baseHeight of tabAndMenuHeight, to offset
+      // the amount we added to the titlebar content. Then, we have two cases:
+      //
+      // 1) The titlebar is larger than the tabAndMenuHeight. This can happen in
+      //    large font mode with the menu autohidden. In this case, we want to
+      //    add tabAndMenuHeight, since this should line up the bottom of the
+      //    tabstrip with the bottom of the titlebar.
+      //
+      // 2) The titlebar is equal to or smaller than the tabAndMenuHeight. This
+      //    is the more common case, and occurs with normal font sizes. In this
+      //    case, we want to bring the menu and tabstrip right up to the top of
+      //    the titlebar, so we add the titlebarContentHeight to the baseHeight.
+      let baseHeight = tabAndMenuHeight;
+      baseHeight += (titlebarContentHeight > tabAndMenuHeight) ? tabAndMenuHeight
+                                                               : titlebarContentHeight;
+      titlebar.style.marginBottom = "-" + baseHeight + "px";
+
+      if (!this._draghandles) {
+        this._draghandles = {};
         let tmp = {};
         Components.utils.import("resource://gre/modules/WindowDraggingUtils.jsm", tmp);
-        this._draghandle = new tmp.WindowDraggingElement(tabsToolbar);
-        this._draghandle.mouseDownCheck = function () {
+
+        let mouseDownCheck = function () {
           return !this._dragBindingAlive && TabsInTitlebar.enabled;
         };
+
+        this._draghandles.tabsToolbar = new tmp.WindowDraggingElement(tabsToolbar);
+        this._draghandles.tabsToolbar.mouseDownCheck = mouseDownCheck;
+
+        this._draghandles.navToolbox = new tmp.WindowDraggingElement(gNavToolbox);
+        this._draghandles.navToolbox.mouseDownCheck = mouseDownCheck;
       }
     } else {
       document.documentElement.removeAttribute("tabsintitlebar");
-
-      titlebar.style.marginBottom = "";
     }
   },
 
   _sizePlaceholder: function (type, width) {
     Array.forEach(document.querySelectorAll(".titlebar-placeholder[type='"+ type +"']"),
                   function (node) { node.width = width; });
   },
+
+  /**
+   * Retrieve the height of an element, including its top and bottom
+   * margins.
+   *
+   * @param ele
+   *        The element to measure.
+   * @return
+   *        The height and margins as an integer. If the height of the element
+   *        is 0, then this returns 0, regardless of what the margins are.
+   */
+  _outerHeight: function (ele) {
+    let cstyle = document.defaultView.getComputedStyle(ele);
+    let margins = parseInt(cstyle.marginTop) + parseInt(cstyle.marginBottom);
+    let height = ele.getBoundingClientRect().height;
+    return height > 0 ? Math.abs(height + margins) : 0;
+  },
 #endif
 
   uninit: function () {
 #ifdef CAN_DRAW_IN_TITLEBAR
     this._initialized = false;
     Services.prefs.removeObserver(this._prefName, this);
+    this._menuObserver.disconnect();
 #endif
   }
 };
 
 #ifdef MENUBAR_CAN_AUTOHIDE
 function updateAppButtonDisplay() {
   var displayAppButton =
     !gInPrintPreviewMode &&
     window.menubar.visible &&
     document.getElementById("toolbar-menubar").getAttribute("autohide") == "true";
 
 #ifdef CAN_DRAW_IN_TITLEBAR
-  document.getElementById("titlebar").hidden = !displayAppButton;
-
-  if (displayAppButton)
+  document.getElementById("titlebar").hidden = gInPrintPreviewMode;
+
+  if (!gInPrintPreviewMode)
     document.documentElement.setAttribute("chromemargin", "0,2,2,2");
   else
     document.documentElement.removeAttribute("chromemargin");
 
-  TabsInTitlebar.allowedBy("drawing-in-titlebar", displayAppButton);
+  TabsInTitlebar.allowedBy("drawing-in-titlebar", !gInPrintPreviewMode);
 #else
   document.getElementById("appmenu-toolbar-button").hidden =
     !displayAppButton;
 #endif
 }
 #endif
 
 #ifdef CAN_DRAW_IN_TITLEBAR
@@ -6725,22 +6743,16 @@ let gPrivateBrowsingUI = {
       return;
     }
 
     // Disable the Clear Recent History... menu item when in PB mode
     // temporary fix until bug 463607 is fixed
     document.getElementById("Tools:Sanitize").setAttribute("disabled", "true");
 
     if (window.location.href == getBrowserURL()) {
-#ifdef XP_MACOSX
-      if (!PrivateBrowsingUtils.permanentPrivateBrowsing) {
-        document.documentElement.setAttribute("drawintitlebar", true);
-      }
-#endif
-
       // Adjust the window's title
       let docElement = document.documentElement;
       if (!PrivateBrowsingUtils.permanentPrivateBrowsing) {
         docElement.setAttribute("title",
           docElement.getAttribute("title_privatebrowsing"));
         docElement.setAttribute("titlemodifier",
           docElement.getAttribute("titlemodifier_privatebrowsing"));
       }
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -4,39 +4,43 @@
 #
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 <?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/devtools/common.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/panelUIOverlay.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/browser-lightweightTheme.css" type="text/css"?>
 
 <?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
 <?xul-overlay href="chrome://browser/content/baseMenuOverlay.xul"?>
 <?xul-overlay href="chrome://browser/content/places/placesOverlay.xul"?>
 
 # All DTD information is stored in a separate file so that it can be shared by
 # hiddenWindow.xul.
 #include browser-doctype.inc
 
 <window id="main-window"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:svg="http://www.w3.org/2000/svg"
+        xmlns:html="http://www.w3.org/1999/xhtml"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="gBrowserInit.onLoad()" onunload="gBrowserInit.onUnload()" onclose="return WindowIsClosing();"
         title="&mainWindow.title;@PRE_RELEASE_SUFFIX@"
         title_normal="&mainWindow.title;@PRE_RELEASE_SUFFIX@"
 #ifdef XP_MACOSX
         title_privatebrowsing="&mainWindow.title;@PRE_RELEASE_SUFFIX@&mainWindow.titlemodifiermenuseparator;&mainWindow.titlePrivateBrowsingSuffix;"
         titledefault="&mainWindow.title;@PRE_RELEASE_SUFFIX@"
         titlemodifier=""
         titlemodifier_normal=""
         titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;"
+        chromemargin="0,-1,-1,-1"
 #else
         title_privatebrowsing="&mainWindow.titlemodifier;@PRE_RELEASE_SUFFIX@ &mainWindow.titlePrivateBrowsingSuffix;"
         titlemodifier="&mainWindow.titlemodifier;@PRE_RELEASE_SUFFIX@"
         titlemodifier_normal="&mainWindow.titlemodifier;@PRE_RELEASE_SUFFIX@"
         titlemodifier_privatebrowsing="&mainWindow.titlemodifier;@PRE_RELEASE_SUFFIX@ &mainWindow.titlePrivateBrowsingSuffix;"
 #endif
         titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
         lightweightthemes="true"
@@ -459,16 +463,17 @@
         <separator/>
         <description id="mixed-content-blocked-moreinfo">&mixedContentBlocked.moreinfo;</description>
         <separator/>
         <label id="mixed-content-blocked-helplink" class="text-link"
                value="&mixedContentBlocked.helplink;"/>
       </popupnotificationcontent>
     </popupnotification>
 
+#include panelUI.inc
   </popupset>
 
 #ifdef CAN_DRAW_IN_TITLEBAR
 <vbox id="titlebar">
   <hbox id="titlebar-content">
 #ifdef MENUBAR_CAN_AUTOHIDE
     <hbox id="appmenu-button-container">
       <button id="appmenu-button"
@@ -519,16 +524,17 @@
 #endif
     </toolbar>
 
     <toolbar id="nav-bar" class="toolbar-primary chromeclass-toolbar"
              toolbarname="&navbarCmd.label;" accesskey="&navbarCmd.accesskey;"
              fullscreentoolbar="true" mode="icons" customizable="true"
              iconsize="large"
              defaultset="unified-back-forward-button,urlbar-container,reload-button,stop-button,search-container,webrtc-status-button,downloads-button,home-button,bookmarks-menu-button-container,window-controls"
+             customizationtarget="nav-bar-customizationtarget"
              context="toolbar-context-menu">
 
       <toolbaritem id="unified-back-forward-button" class="chromeclass-toolbar-additional"
                    context="backForwardMenu" removable="true"
                    forwarddisabled="true"
                    title="&backForwardItem.title;">
         <toolbarbutton id="back-button" class="toolbarbutton-1"
                        label="&backCmd.label;"
@@ -650,175 +656,39 @@
                      onclick="checkForMiddleClick(this, event);"
                      tooltiptext="&reloadButton.tooltip;"/>
 
       <toolbarbutton id="stop-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
                      label="&stopCmd.label;" removable="true"
                      command="Browser:Stop"
                      tooltiptext="&stopButton.tooltip;"/>
 
-      <toolbaritem id="search-container" title="&searchItem.title;"
-                   align="center" class="chromeclass-toolbar-additional"
-                   flex="100" persist="width" removable="true">
-        <searchbar id="searchbar" flex="1"/>
-      </toolbaritem>
+      <hbox id="nav-bar-customizationtarget" class="customization-target" flex="100"/>
 
       <toolbarbutton id="webrtc-status-button"
                      class="toolbarbutton-1 chromeclass-toolbar-additional"
                      type="menu"
                      hidden="true"
                      orient="horizontal"
                      label="&webrtcIndicatorButton.label;"
                      tooltiptext="&webrtcIndicatorButton.tooltip;">
         <menupopup onpopupshowing="WebrtcIndicator.fillPopup(this);"
                    onpopuphiding="WebrtcIndicator.clearPopup(this);"
                    oncommand="WebrtcIndicator.menuCommand(event.target);"/>
       </toolbarbutton>
 
-      <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-                     persist="class" removable="true"
-                     label="&homeButton.label;"
-                     ondragover="homeButtonObserver.onDragOver(event)"
-                     ondragenter="homeButtonObserver.onDragOver(event)"
-                     ondrop="homeButtonObserver.onDrop(event)"
-                     ondragexit="homeButtonObserver.onDragExit(event)"
-                     onclick="BrowserGoHome(event);"
-                     aboutHomeOverrideTooltip="&abouthome.pageTitle;"/>
-
-      <toolbaritem id="social-toolbar-item"
+      <toolbaritem id="PanelUI-button"
                    class="chromeclass-toolbar-additional"
                    removable="false"
-                   title="&socialToolbar.title;"
-                   hidden="true"
-                   skipintoolbarset="true"
-                   observes="socialActiveBroadcaster">
-        <toolbarbutton id="social-provider-button"
-                       class="toolbarbutton-1"
-                       type="menu">
-          <menupopup id="social-statusarea-popup">
-            <menuitem class="social-statusarea-user menuitem-iconic" pack="start" align="center"
-                      observes="socialBroadcaster_userDetails"
-                      oncommand="SocialUI.showProfile(); document.getElementById('social-statusarea-popup').hidePopup();">
-              <image class="social-statusarea-user-portrait"
-                     observes="socialBroadcaster_userDetails"/>
-              <vbox>
-                <label class="social-statusarea-loggedInStatus"
-                       observes="socialBroadcaster_userDetails"/>
-              </vbox>
-            </menuitem>
-#ifndef XP_WIN
-            <menuseparator class="social-statusarea-separator"/>
-#endif
-            <menuitem class="social-toggle-sidebar-menuitem"
-                      type="checkbox"
-                      autocheck="false"
-                      command="Social:ToggleSidebar"
-                      label="&social.toggleSidebar.label;"
-                      accesskey="&social.toggleSidebar.accesskey;"/>
-            <menuitem class="social-toggle-notifications-menuitem"
-                      type="checkbox"
-                      autocheck="false"
-                      command="Social:ToggleNotifications"
-                      label="&social.toggleNotifications.label;"
-                      accesskey="&social.toggleNotifications.accesskey;"/>
-            <menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
-            <menuseparator class="social-statusarea-separator"/>
-            <menuseparator class="social-provider-menu" hidden="true"/>
-            <menuitem class="social-addons-menuitem" command="Social:Addons"
-                      label="&social.addons.label;"/>
-            <menuitem label="&social.learnMore.label;"
-                      accesskey="&social.learnMore.accesskey;"
-                      oncommand="SocialUI.showLearnMore();"/>
-          </menupopup>
-        </toolbarbutton>
-      </toolbaritem>
-
-      <toolbaritem id="bookmarks-menu-button-container"
-                   class="chromeclass-toolbar-additional"
-                   removable="true"
-                   title="&bookmarksMenuButton.label;">
-        <toolbarbutton id="bookmarks-menu-button"
-                       type="menu"
+                   title="&appmenu.title;">
+        <toolbarbutton id="PanelUI-menu-button"
                        class="toolbarbutton-1"
-                       label="&bookmarksMenuButton.label;"
-                       tooltiptext="&bookmarksMenuButton.tooltip;"
-                       ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
-                       ondragover="PlacesMenuDNDHandler.onDragOver(event);"
-                       ondragexit="PlacesMenuDNDHandler.onDragExit(event);"
-                       ondrop="PlacesMenuDNDHandler.onDrop(event);">
-          <menupopup id="BMB_bookmarksPopup"
-                     placespopup="true"
-                     context="placesContext"
-                     openInTabs="children"
-                     oncommand="BookmarksEventHandler.onCommand(event, this.parentNode._placesView);"
-                     onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
-                     onpopupshowing="BookmarksMenuButton.onPopupShowing(event);
-                                     if (!this.parentNode._placesView)
-                                       new PlacesMenu(event, 'place:folder=BOOKMARKS_MENU');"
-                     tooltip="bhTooltip" popupsinherittooltip="true">
-            <menuitem id="BMB_viewBookmarksToolbar"
-                      placesanonid="view-toolbar"
-                      toolbarId="PersonalToolbar"
-                      type="checkbox"
-                      oncommand="onViewToolbarCommand(event)"
-                      label="&viewBookmarksToolbar.label;"/>
-            <menuseparator/>
-            <menuitem id="BMB_bookmarksShowAll"
-                      label="&showAllBookmarks2.label;"
-                      command="Browser:ShowAllBookmarks"
-                      key="manBookmarkKb"/>
-            <menuseparator/>
-            <menuitem id="BMB_bookmarkThisPage"
-#ifndef XP_MACOSX
-                      class="menuitem-iconic"
-#endif
-                      label="&bookmarkThisPageCmd.label;"
-                      command="Browser:AddBookmarkAs"
-                      key="addBookmarkAsKb"/>
-            <menuitem id="BMB_subscribeToPageMenuitem"
-#ifndef XP_MACOSX
-                      class="menuitem-iconic"
-#endif
-                      label="&subscribeToPageMenuitem.label;"
-                      oncommand="return FeedHandler.subscribeToFeed(null, event);"
-                      onclick="checkForMiddleClick(this, event);"
-                      observes="singleFeedMenuitemState"/>
-            <menu id="BMB_subscribeToPageMenupopup"
-#ifndef XP_MACOSX
-                  class="menu-iconic"
-#endif
-                  label="&subscribeToPageMenupopup.label;"
-                  observes="multipleFeedsMenuState">
-              <menupopup id="BMB_subscribeToPageSubmenuMenupopup"
-                         onpopupshowing="return FeedHandler.buildFeedList(event.target);"
-                         oncommand="return FeedHandler.subscribeToFeed(null, event);"
-                         onclick="checkForMiddleClick(this, event);"/>
-            </menu>
-            <menuseparator/>
-            <menu id="BMB_bookmarksToolbar"
-                  placesanonid="toolbar-autohide"
-                  class="menu-iconic bookmark-item"
-                  label="&personalbarCmd.label;"
-                  container="true">
-              <menupopup id="BMB_bookmarksToolbarPopup"
-                         placespopup="true"
-                         context="placesContext"
-                         onpopupshowing="if (!this.parentNode._placesView)
-                                           new PlacesMenu(event, 'place:folder=TOOLBAR');"/>
-            </menu>
-            <menuseparator/>
-            <!-- Bookmarks menu items -->
-            <menuseparator builder="end"
-                           class="hide-if-empty-places-result"/>
-            <menuitem id="BMB_unsortedBookmarks"
-                      label="&bookmarksMenuButton.unsorted.label;"
-                      oncommand="PlacesCommandHook.showPlacesOrganizer('UnfiledBookmarks');"
-                      class="menuitem-iconic"/>
-          </menupopup>
-        </toolbarbutton>
+                       label="&brandShortName;"
+                       tooltiptext="&appmenu.title;"
+                       oncommand="PanelUI.toggle(event);"/>
       </toolbaritem>
 
       <hbox id="window-controls" hidden="true" pack="end">
         <toolbarbutton id="minimize-button"
                        tooltiptext="&fullScreenMinimize.tooltip;"
                        oncommand="window.minimize();"/>
 
         <toolbarbutton id="restore-button"
@@ -965,16 +835,165 @@
 #endif
     </toolbar>
 
     <toolbarpalette id="BrowserToolbarPalette">
 
 # Update primaryToolbarButtons in browser/themes/shared/browser.inc when adding
 # or removing default items with the toolbarbutton-1 class.
 
+      <toolbaritem id="search-container" title="&searchItem.title;"
+                   align="center" class="chromeclass-toolbar-additional"
+                   flex="100" persist="width" removable="true">
+        <searchbar id="searchbar" flex="1"/>
+      </toolbaritem>
+
+      <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
+                     persist="class" removable="true"
+                     label="&homeButton.label;"
+                     ondragover="homeButtonObserver.onDragOver(event)"
+                     ondragenter="homeButtonObserver.onDragOver(event)"
+                     ondrop="homeButtonObserver.onDrop(event)"
+                     ondragexit="homeButtonObserver.onDragExit(event)"
+                     onclick="BrowserGoHome(event);"
+                     aboutHomeOverrideTooltip="&abouthome.pageTitle;"/>
+
+      <toolbaritem id="social-toolbar-item"
+                   class="chromeclass-toolbar-additional"
+                   removable="false"
+                   title="&socialToolbar.title;"
+                   hidden="true"
+                   skipintoolbarset="true"
+                   observes="socialActiveBroadcaster">
+        <toolbarbutton id="social-provider-button"
+                       class="toolbarbutton-1"
+                       type="menu">
+          <menupopup id="social-statusarea-popup">
+            <menuitem class="social-statusarea-user menuitem-iconic" pack="start" align="center"
+                      observes="socialBroadcaster_userDetails"
+                      oncommand="SocialUI.showProfile(); document.getElementById('social-statusarea-popup').hidePopup();">
+              <image class="social-statusarea-user-portrait"
+                     observes="socialBroadcaster_userDetails"/>
+              <vbox>
+                <label class="social-statusarea-loggedInStatus"
+                       observes="socialBroadcaster_userDetails"/>
+              </vbox>
+            </menuitem>
+#ifndef XP_WIN
+            <menuseparator class="social-statusarea-separator"/>
+#endif
+            <menuitem class="social-toggle-sidebar-menuitem"
+                      type="checkbox"
+                      autocheck="false"
+                      command="Social:ToggleSidebar"
+                      label="&social.toggleSidebar.label;"
+                      accesskey="&social.toggleSidebar.accesskey;"/>
+            <menuitem class="social-toggle-notifications-menuitem"
+                      type="checkbox"
+                      autocheck="false"
+                      command="Social:ToggleNotifications"
+                      label="&social.toggleNotifications.label;"
+                      accesskey="&social.toggleNotifications.accesskey;"/>
+            <menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
+            <menuseparator class="social-statusarea-separator"/>
+            <menuseparator class="social-provider-menu" hidden="true"/>
+            <menuitem class="social-addons-menuitem" command="Social:Addons"
+                      label="&social.addons.label;"/>
+            <menuitem label="&social.learnMore.label;"
+                      accesskey="&social.learnMore.accesskey;"
+                      oncommand="SocialUI.showLearnMore();"/>
+          </menupopup>
+        </toolbarbutton>
+      </toolbaritem>
+
+      <toolbaritem id="bookmarks-menu-button-container"
+                   class="chromeclass-toolbar-additional"
+                   removable="true"
+                   title="&bookmarksMenuButton.label;">
+        <toolbarbutton id="bookmarks-menu-button"
+                       type="menu"
+                       class="toolbarbutton-1"
+                       label="&bookmarksMenuButton.label;"
+                       tooltiptext="&bookmarksMenuButton.tooltip;"
+                       ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
+                       ondragover="PlacesMenuDNDHandler.onDragOver(event);"
+                       ondragexit="PlacesMenuDNDHandler.onDragExit(event);"
+                       ondrop="PlacesMenuDNDHandler.onDrop(event);">
+          <menupopup id="BMB_bookmarksPopup"
+                     placespopup="true"
+                     context="placesContext"
+                     openInTabs="children"
+                     oncommand="BookmarksEventHandler.onCommand(event, this.parentNode._placesView);"
+                     onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
+                     onpopupshowing="BookmarksMenuButton.onPopupShowing(event);
+                                     if (!this.parentNode._placesView)
+                                       new PlacesMenu(event, 'place:folder=BOOKMARKS_MENU');"
+                     tooltip="bhTooltip" popupsinherittooltip="true">
+            <menuitem id="BMB_viewBookmarksToolbar"
+                      placesanonid="view-toolbar"
+                      toolbarId="PersonalToolbar"
+                      type="checkbox"
+                      oncommand="onViewToolbarCommand(event)"
+                      label="&viewBookmarksToolbar.label;"/>
+            <menuseparator/>
+            <menuitem id="BMB_bookmarksShowAll"
+                      label="&showAllBookmarks2.label;"
+                      command="Browser:ShowAllBookmarks"
+                      key="manBookmarkKb"/>
+            <menuseparator/>
+            <menuitem id="BMB_bookmarkThisPage"
+#ifndef XP_MACOSX
+                      class="menuitem-iconic"
+#endif
+                      label="&bookmarkThisPageCmd.label;"
+                      command="Browser:AddBookmarkAs"
+                      key="addBookmarkAsKb"/>
+            <menuitem id="BMB_subscribeToPageMenuitem"
+#ifndef XP_MACOSX
+                      class="menuitem-iconic"
+#endif
+                      label="&subscribeToPageMenuitem.label;"
+                      oncommand="return FeedHandler.subscribeToFeed(null, event);"
+                      onclick="checkForMiddleClick(this, event);"
+                      observes="singleFeedMenuitemState"/>
+            <menu id="BMB_subscribeToPageMenupopup"
+#ifndef XP_MACOSX
+                  class="menu-iconic"
+#endif
+                  label="&subscribeToPageMenupopup.label;"
+                  observes="multipleFeedsMenuState">
+              <menupopup id="BMB_subscribeToPageSubmenuMenupopup"
+                         onpopupshowing="return FeedHandler.buildFeedList(event.target);"
+                         oncommand="return FeedHandler.subscribeToFeed(null, event);"
+                         onclick="checkForMiddleClick(this, event);"/>
+            </menu>
+            <menuseparator/>
+            <menu id="BMB_bookmarksToolbar"
+                  placesanonid="toolbar-autohide"
+                  class="menu-iconic bookmark-item"
+                  label="&personalbarCmd.label;"
+                  container="true">
+              <menupopup id="BMB_bookmarksToolbarPopup"
+                         placespopup="true"
+                         context="placesContext"
+                         onpopupshowing="if (!this.parentNode._placesView)
+                                           new PlacesMenu(event, 'place:folder=TOOLBAR');"/>
+            </menu>
+            <menuseparator/>
+            <!-- Bookmarks menu items -->
+            <menuseparator builder="end"
+                           class="hide-if-empty-places-result"/>
+            <menuitem id="BMB_unsortedBookmarks"
+                      label="&bookmarksMenuButton.unsorted.label;"
+                      oncommand="PlacesCommandHook.showPlacesOrganizer('UnfiledBookmarks');"
+                      class="menuitem-iconic"/>
+          </menupopup>
+        </toolbarbutton>
+      </toolbaritem>
+
       <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
                      label="&printButton.label;" command="cmd_print"
                      tooltiptext="&printButton.tooltip;"/>
 
       <!-- This is a placeholder for the Downloads Indicator.  It is visible
            during the customization of the toolbar, in the palette, and before
            the Downloads Indicator overlay is loaded. -->
       <toolbarbutton id="downloads-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
@@ -1071,55 +1090,59 @@
                      command="Browser:ToggleTabView"
                      tooltiptext="&tabGroupsButton.tooltip;"
                      observes="tabviewGroupsNumber"/>
     </toolbarpalette>
   </toolbox>
 
   <hbox id="fullscr-toggler" collapsed="true"/>
 
-  <hbox flex="1" id="browser">
-    <vbox id="browser-border-start" hidden="true" layer="true"/>
-    <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
-      <sidebarheader id="sidebar-header" align="center">
-        <label id="sidebar-title" persist="value" flex="1" crop="end" control="sidebar"/>
-        <image id="sidebar-throbber"/>
-        <toolbarbutton class="tabs-closebutton" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="toggleSidebar();"/>
-      </sidebarheader>
-      <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true"
-                style="min-width: 14em; width: 18em; max-width: 36em;"/>
-    </vbox>
+  <deck id="content-deck" flex="1">
+    <hbox flex="1" id="browser">
+      <vbox id="browser-border-start" hidden="true" layer="true"/>
+      <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
+        <sidebarheader id="sidebar-header" align="center">
+          <label id="sidebar-title" persist="value" flex="1" crop="end" control="sidebar"/>
+          <image id="sidebar-throbber"/>
+          <toolbarbutton class="tabs-closebutton" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="toggleSidebar();"/>
+        </sidebarheader>
+        <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true"
+                  style="min-width: 14em; width: 18em; max-width: 36em;"/>
+      </vbox>
 
-    <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/>
-    <vbox id="appcontent" flex="1">
-      <tabbrowser id="content" disablehistory="true"
-                  flex="1" contenttooltip="aHTMLTooltip"
-                  tabcontainer="tabbrowser-tabs"
-                  contentcontextmenu="contentAreaContextMenu"
-                  autocompletepopup="PopupAutoComplete"/>
-      <chatbar id="pinnedchats" layer="true" mousethrough="always" hidden="true"/>
-      <statuspanel id="statusbar-display" inactive="true"/>
-    </vbox>
-    <splitter id="social-sidebar-splitter"
-              class="chromeclass-extrachrome sidebar-splitter"
-              observes="socialSidebarBroadcaster"/>
-    <vbox id="social-sidebar-box"
-          class="chromeclass-extrachrome"
-          observes="socialSidebarBroadcaster"
-          persist="width">
-      <browser id="social-sidebar-browser"
-               type="content"
-               context="contentAreaContextMenu"
-               disableglobalhistory="true"
-               tooltip="aHTMLTooltip"
-               flex="1"
-               style="min-width: 14em; width: 18em; max-width: 36em;"/>
-    </vbox>
-    <vbox id="browser-border-end" hidden="true" layer="true"/>
-  </hbox>
+      <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/>
+      <vbox id="appcontent" flex="1">
+        <tabbrowser id="content" disablehistory="true"
+                    flex="1" contenttooltip="aHTMLTooltip"
+                    tabcontainer="tabbrowser-tabs"
+                    contentcontextmenu="contentAreaContextMenu"
+                    autocompletepopup="PopupAutoComplete"
+                    onclick="contentAreaClick(event, false);"/>
+        <chatbar id="pinnedchats" layer="true" mousethrough="always" hidden="true"/>
+        <statuspanel id="statusbar-display" inactive="true"/>
+      </vbox>
+      <splitter id="social-sidebar-splitter"
+                class="chromeclass-extrachrome sidebar-splitter"
+                observes="socialSidebarBroadcaster"/>
+      <vbox id="social-sidebar-box"
+            class="chromeclass-extrachrome"
+            observes="socialSidebarBroadcaster"
+            persist="width">
+        <browser id="social-sidebar-browser"
+                 type="content"
+                 context="contentAreaContextMenu"
+                 disableglobalhistory="true"
+                 tooltip="aHTMLTooltip"
+                 flex="1"
+                 style="min-width: 14em; width: 18em; max-width: 36em;"/>
+      </vbox>
+      <vbox id="browser-border-end" hidden="true" layer="true"/>
+    </hbox>
+#include customize.inc
+  </deck>
 
   <hbox id="full-screen-warning-container" hidden="true" fadeout="true">
     <hbox style="width: 100%;" pack="center"> <!-- Inner hbox needed due to bug 579776. -->
       <vbox id="full-screen-warning-message" align="center">
         <description id="full-screen-domain-text"/>
         <description class="full-screen-description" value="&fullscreenExitHint.value;"/>
         <vbox id="full-screen-approval-pane" align="center">
           <description class="full-screen-description" value="&fullscreenApproval.value;"/>
@@ -1179,48 +1202,44 @@
              key="key_toggleAddonBar">
       <toolbarbutton id="addonbar-closebutton"
                      tooltiptext="&addonBarCloseButton.tooltip;"
                      oncommand="setToolbarVisibility(this.parentNode, false);"/>
       <statusbar id="status-bar" ordinal="1000"/>
     </toolbar>
   </vbox>
 
+  <svg:svg height="0">
+    <svg:clipPath id="tab-curve-clip-path-start" clipPathUnits="userSpaceOnUse">
+      <svg:path d="M 30,2 C 17.049,2.104,15.508,11.669,14.511,17 c -1.565,8.376,-4.276,13,-13,13 L 0,31 H 31 V 2 z"/>
+    </svg:clipPath>
+    <svg:clipPath id="tab-curve-clip-path-end" clipPathUnits="userSpaceOnUse">
+      <svg:path d="M -1,2 C 12.951,2.104,14.492,11.669,15.489,17 c +1.565,8.376,+4.276,13,+13,13 L 30,31 H -1 V 2 z"/>
+    </svg:clipPath>
+    <svg:clipPath id="tab-clip-path-outer" clipPathUnits="userSpaceOnUse">
+      <svg:path d="M 30,0 C 24,0 17.78,2.58 15.10,8.09 12.05,13.46 13.14,20.37 9.18,25.3 7.1,27.7 3.8,28 0.8,28 c -0.4,0.6 -2.09,1.11 -1.46,1.80 l 2.45,2.72 61.60,0 2.59,-3.06 C 65.15,28.96 64.57,27.80 63.5,28 60.13,28.13 56.33,27.03 54.74,23.78 51.85,18.44 52.65,11.81 49.09,6.73 45.88,1.65 39.54,-0.26 33.8,0 32.5,0 31.7,0 30,0 z"/>
+    </svg:clipPath>
+
 #ifndef XP_UNIX
-  <svg:svg height="0">
     <svg:clipPath id="windows-keyhole-forward-clip-path" clipPathUnits="objectBoundingBox">
       <svg:path d="M 0,0 C 0.16,0.11 0.28,0.29 0.28,0.5 0.28,0.71 0.16,0.89 0,1 L 1,1 1,0 0,0 z"/>
     </svg:clipPath>
     <svg:clipPath id="windows-urlbar-back-button-clip-path" clipPathUnits="userSpaceOnUse">
       <svg:path d="M 0,0 0,7.8 C 2.5,11 4,14 4,18 4,22 2.5,25 0,28 l 0,22 10000,0 0,-50 L 0,0 z"/>
     </svg:clipPath>
-  </svg:svg>
 #endif
 #ifdef XP_MACOSX
-  <svg:svg height="0">
     <svg:clipPath id="osx-keyhole-forward-clip-path" clipPathUnits="objectBoundingBox">
       <svg:path d="M 0,0 C 0.15,0.12 0.25,0.3 0.25,0.5 0.25,0.7 0.15,0.88 0,1 L 1,1 1,0 0,0 z"/>
     </svg:clipPath>
     <svg:clipPath id="osx-urlbar-back-button-clip-path" clipPathUnits="userSpaceOnUse">
       <svg:path d="m 0,-5 0,4.03 C 3.6,1.8 6,6.1 6,11 6,16 3.6,20 0,23 l 0,27 10000,0 0,-55 L 0,-5 z"/>
     </svg:clipPath>
-    <svg:clipPath id="osx-tab-ontop-left-curve-clip-path" clipPathUnits="userSpaceOnUse">
-      <svg:path d="M 9,0 C 7.3,0 6,1.3 6,3 l 0,14 c 0,3 -2.2,5 -5,5 l -1,0 0,1 12,0 0,-1 0,-19 0,-3 -3,0 z"/>
-    </svg:clipPath>
-    <svg:clipPath id="osx-tab-ontop-right-curve-clip-path" clipPathUnits="userSpaceOnUse">
-      <svg:path d="m 0,0 0,3 0,19 0,1 12,0 0,-1 -1,0 C 8.2,22 6,20 6,17 L 6,3 C 6,1.3 4.7,0 3,0 L 0,0 z"/>
-    </svg:clipPath>
-    <svg:clipPath id="osx-tab-onbottom-left-curve-clip-path" clipPathUnits="userSpaceOnUse">
-      <svg:path d="m 0,0 0,1 1,0 c 2.8,0 5,2.2 5,5 l 0,14 c 0,2 1.3,3 3,3 l 3,0 0,-3 L 12,1 12,0 0,0 z"/>
-    </svg:clipPath>
-    <svg:clipPath id="osx-tab-onbottom-right-curve-clip-path" clipPathUnits="userSpaceOnUse">
-      <svg:path d="m 0,0 0,1 0,19 0,3 3,0 c 1.7,0 3,-1 3,-3 L 6,6 C 6,3.2 8.2,1 11,1 L 12,1 12,0 0,0 z"/>
-    </svg:clipPath>
+#endif
   </svg:svg>
-#endif
 
 </vbox>
 # <iframe id="tab-view"> is dynamically appended as the 2nd child of #tab-view-deck.
 #     Introducing the iframe dynamically, as needed, was found to be better than
 #     starting with an empty iframe here in browser.xul from a Ts standpoint.
 </deck>
 
 </window>
new file mode 100644
--- /dev/null
+++ b/browser/base/content/customize.inc
@@ -0,0 +1,48 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<vbox id="customization-container" flex="1" style="background: #DBEAF9;">
+  <hbox flex="1">
+    <richlistbox id="customization-categories"
+                 onselect="document.getElementById('customization-content').selectedIndex = this.selectedIndex;">
+      <richlistitem>
+        <label value="&customizeMode.menuAndToolbars.label;"/>
+        </richlistitem>
+        <richlistitem>
+        <label value="&customizeMode.appearance.label;"/>
+      </richlistitem>
+    </richlistbox>
+    <deck id="customization-content" flex="1">
+      <hbox id="customization-widgets">
+        <vbox flex="1">
+          <label value="&customizeMode.menuAndToolbars.header;"/>
+          <vbox id="customization-palette" flex="1"/>
+        </vbox>
+        <vbox>
+          <vbox id="customization-panelWrapper">
+            <html:style html:type="text/html" scoped="scoped">
+              @import url(chrome://global/skin/popup.css);
+            </html:style>
+            <box class="panel-arrowbox">
+              <box flex="1"/>
+              <image class="panel-arrow" side="top"/>
+            </box>
+            <box class="panel-arrowcontent" flex="1">
+              <hbox id="customization-panelHolder"/>
+              <box class="panel-inner-arrowcontentfooter" hidden="true"/>
+            </box>
+          </vbox>
+          <spacer flex="1"/>
+        </vbox>
+      </hbox>
+      <vbox id="customization-appearance">
+        <label value="&customizeMode.appearance.header;"/>
+      </vbox>
+    </deck>
+  </hbox>
+  <hbox pack="end">
+    <button oncommand="gCustomizeMode.reset();" label="&customizeMode.restoreDefaults;"/>
+    <button oncommand="BrowserToolboxCustomizeDone();" label="&customizeMode.done;"/>
+  </hbox>
+</vbox>
new file mode 100644
--- /dev/null
+++ b/browser/base/content/customizing.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<!DOCTYPE html [
+  <!ENTITY % htmlDTD
+    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "DTD/xhtml1-strict.dtd">
+  %htmlDTD;
+  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
+  %brandDTD;
+  <!ENTITY % browserDTD SYSTEM "chrome://browser/locale/browser.dtd">
+  %browserDTD;
+]>
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>&customizeMode.tabTitle;</title>
+	</head>
+	<body></body>
+</html>
--- a/browser/base/content/global-scripts.inc
+++ b/browser/base/content/global-scripts.inc
@@ -4,10 +4,11 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 <script type="application/javascript" src="chrome://global/content/printUtils.js"/>
 <script type="application/javascript" src="chrome://global/content/viewZoomOverlay.js"/>
 <script type="application/javascript" src="chrome://browser/content/places/browserPlacesViews.js"/>
 <script type="application/javascript" src="chrome://browser/content/browser.js"/>
 <script type="application/javascript" src="chrome://browser/content/downloads/downloads.js"/>
 <script type="application/javascript" src="chrome://browser/content/downloads/indicator.js"/>
+<script type="application/javascript" src="chrome://browser/content/panelUI.js"/>
 <script type="application/javascript" src="chrome://global/content/inlineSpellCheckUI.js"/>
 <script type="application/javascript" src="chrome://global/content/viewSourceUtils.js"/>
new file mode 100644
--- /dev/null
+++ b/browser/base/content/panelUI.inc
@@ -0,0 +1,91 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<panel id="PanelUI-popup"
+       role="group"
+       type="arrow"
+       level="top"
+       consumeoutsideclicks="true">
+  <box id="PanelUI-container">
+    <stack id="PanelUI-viewStack" view="main">
+      <vbox id="PanelUI-mainView">
+        <vbox class="PanelUI-pageControls" pack="center">
+          <hbox class="PanelUI-editControls">
+            <toolbarbutton id="PanelUI-cut-btn" flex="1"
+                           label="&cutCmd.label;"
+                           tooltiptext="&cutButton.tooltip;"
+                           command="cmd_cut"/>
+            <toolbarbutton id="PanelUI-copy-btn" flex="1"
+                           label="&copyCmd.label;"
+                           tooltiptext="&copyButton.tooltip;"
+                           command="cmd_copy"/>
+            <toolbarbutton id="PanelUI-paste-btn" flex="1"
+                           label="&pasteCmd.label;"
+                           tooltiptext="&pasteButton.tooltip;"
+                           command="cmd_paste"/>
+          </hbox>
+          <hbox class="PanelUI-zoomControls">
+            <toolbarbutton id="PanelUI-zoomOut-btn" flex="1"
+                           noautoclose="true" label="&fullZoomReduceCmd.label;"
+                           command="cmd_fullZoomReduce"
+                           tooltiptext="&zoomOutButton.tooltip;"/>
+            <toolbarbutton id="PanelUI-zoomReset-btn" flex="1"
+                           noautoclose="true" label="&zoomReset.label;"
+                           tooltiptext="&zoomReset.tooltip;"
+                           command="cmd_fullZoomReset"/>
+            <toolbarbutton id="PanelUI-zoomIn-btn" flex="1"
+                           noautoclose="true" label="&fullZoomEnlargeCmd.label;"
+                           command="cmd_fullZoomEnlarge"
+                           tooltiptext="&zoomInButton.tooltip;"/>
+          </hbox>
+        </vbox>
+
+        <vbox id="PanelUI-contents" type="grid"/>
+
+        <vbox id="PanelUI-mainView-spring"/>
+
+        <hbox class="PanelUI-footer" align="center">
+          <toolbarbutton id="PanelUI-help-btn" label="&helpMenu.label;"
+                         command="openHelpLink('firefox-help');"/>
+          <spacer flex="1"/>
+          <toolbarbutton id="PanelUI-customize-btn" label="&appMenuCustomize.label;"
+                         command="cmd_CustomizeToolbars"/>
+        </hbox>
+      </vbox>
+
+      <!-- Used to capture click events over the PanelUI-mainView if we're in
+           subview mode. That way, any click on the PanelUI-mainView causes us
+           to revert to the mainView mode, whereupon PanelUI-click-capture then
+           allows click events to go through it. -->
+      <box id="PanelUI-clickCapturer">
+      </box>
+
+      <!-- We manually set display: none (via a CSS attribute selector) on the
+           subviews that are not being displayed. We're using this over a deck
+           because a deck assumes the size of its largest child, regardless of
+           whether or not it is shown. That's not good for our case, since we
+           want to allow each subview to be uniquely sized. -->
+      <box id="PanelUI-subViews">
+        <vbox id="PanelUI-bookmarks" class="PanelUI-subView" flex="1">
+          <label value="&appMenuBookmarks.label;"/>
+          <vbox flex="1">
+            <toolbarbutton label="&bookmarkThisPageCmd.label;"/>
+            <toolbarbutton label="&viewBookmarksToolbar.label;"/>
+            <toolbarbutton label="&showAllBookmarks2.label;"/>
+            <spacer flex="1"/>
+          </vbox>
+          <vbox id="PanelUI-bookmarks-tall-maker"/>
+        </vbox>
+        <vbox id="PanelUI-history" flex="1">
+          <label value="&appMenuHistory.label;"/>
+          <vbox id="PanelUI-historyItems"/>
+          <label value="&appMenuHistoryMore.label;"
+                 id="PanelUI-historyMore"
+                 class="text-link"
+                 onclick="PlacesCommandHook.showPlacesOrganizer('History'); PanelUI.hide();"/>
+        </vbox>
+      </box>
+    </stack>
+  </box>
+</panel>
new file mode 100644
--- /dev/null
+++ b/browser/base/content/panelUI.js
@@ -0,0 +1,281 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
+                                  "resource:///modules/CustomizableUI.jsm");
+/**
+ * Maintains the state and dispatches events for the main menu panel.
+ */
+
+const PanelUI = {
+  /** Panel events that we listen for. **/
+  get kEvents() ["popupshowing", "popupshown", "popuphiding", "popuphidden"],
+  /**
+   * Used for lazily getting and memoizing elements from the document. Lazy
+   * getters are set in init, and memoizing happens after the first retrieval.
+   */
+  get kElements() {
+    return {
+      clickCapturer: "PanelUI-clickCapturer",
+      container: "PanelUI-container",
+      contents: "PanelUI-contents",
+      mainView: "PanelUI-mainView",
+      mainViewSpring: "PanelUI-mainView-spring",
+      menuButton: "PanelUI-menu-button",
+      panel: "PanelUI-popup",
+      subViews: "PanelUI-subViews",
+      viewStack: "PanelUI-viewStack"
+    };
+  },
+
+  /**
+   * Returns whether we're in subview mode. This can return true even if
+   * the transition to subview mode is not yet complete.
+   **/
+  get _showingSubView() {
+    return (this.viewStack.hasAttribute("view") &&
+            this.viewStack.getAttribute("view") == "subview");
+  },
+
+  init: function() {
+    for (let [k, v] of Iterator(this.kElements)) {
+      // Need to do fresh let-bindings per iteration
+      let getKey = k;
+      let id = v;
+      this.__defineGetter__(getKey, function() {
+        delete this[getKey];
+        return this[getKey] = document.getElementById(id);
+      });
+    }
+
+    for (let event of this.kEvents) {
+      this.panel.addEventListener(event, this);
+    }
+
+    this.clickCapturer.addEventListener("click", this._onCapturerClick,
+                                        true);
+
+    // Get a MutationObserver ready to react to subview size changes. We
+    // only attach this MutationObserver when a subview is being displayed.
+    this._subViewObserver = new MutationObserver(function(aMutations) {
+      this._syncContainerWithSubView();
+    }.bind(this));
+  },
+
+  uninit: function() {
+    for (let event of this.kEvents) {
+      this.panel.removeEventListener(event, this);
+    }
+
+    this.clickCapturer.removeEventListener("click", this._onCapturerClick,
+                                           true);
+  },
+
+  /**
+   * Customize mode extracts the mainView and puts it somewhere else while the
+   * user customizes. Upon completion, this function can be called to put the
+   * panel back to where it belongs in normal browsing mode.
+   *
+   * @param aMainView
+   *        The mainView node to put back into place.
+   */
+  replaceMainView: function(aMainView) {
+    this.viewStack.insertBefore(aMainView, this.viewStack.firstChild);
+    this._syncContainerWithMainView();
+  },
+
+  /**
+   * Opens the menu panel if it's closed, or closes it if it's
+   * open. If the event target has a child with the toolbarbutton-icon
+   * attribute, the panel will be anchored on that child. Otherwise, the panel
+   * is anchored on the event target itself.
+   *
+   * @param aEvent the event that triggers the toggle.
+   */
+  toggle: function(aEvent) {
+    if (this.panel.state == "open") {
+      this.hide();
+    } else if (this.panel.state == "closed") {
+      let anchor = aEvent.target;
+      let iconAnchor =
+        document.getAnonymousElementByAttribute(anchor, "class",
+                                                "toolbarbutton-icon");
+      this.panel.openPopup(iconAnchor || anchor, "bottomcenter topright");
+    }
+  },
+
+  /**
+   * If the menu panel is being shown, hide it.
+   */
+  hide: function() {
+    this.panel.hidePopup();
+  },
+
+  handleEvent: function(aEvent) {
+    switch (aEvent.type) {
+      case "popupshowing":
+        this.ensureRegistered();
+        let cstyle = window.getComputedStyle(this.viewStack, null);
+        this.container.style.height = cstyle.getPropertyValue("height");
+        this.container.style.width = cstyle.getPropertyValue("width");
+        // Fall through
+      case "popupshown":
+        // Fall through
+      case "popuphiding":
+        // Fall through
+      case "popuphidden": {
+        this.showMainView();
+        this._updatePanelButton(aEvent.target);
+        break;
+      }
+    }
+  },
+
+  /**
+   * Registering the menu panel is done lazily for performance reasons. This
+   * method is exposed so that CustomizationMode can force registration in the
+   * event that customization mode is started before the panel has had a chance
+   * to register itself.
+   */
+  ensureRegistered: function() {
+    CustomizableUI.registerMenuPanel(this.contents);
+  },
+
+  /**
+   * Switch the panel to the main view if it's not already
+   * in that view.
+   */
+  showMainView: function() {
+    // Are we showing a subview? If so, fire the ViewHiding event on it.
+    if (this._showingSubView) {
+      let viewNode = this._currentSubView;
+      let evt = document.createEvent("CustomEvent");
+      evt.initCustomEvent("ViewHiding", true, true, viewNode);
+      viewNode.dispatchEvent(evt);
+
+      viewNode.removeAttribute("current");
+      this._currentSubView = null;
+      this._subViewObserver.disconnect();
+    }
+
+    this.viewStack.setAttribute("view", "main");
+    this._syncContainerWithMainView();
+
+    this._shiftMainView();
+  },
+
+  /**
+   * Shows a subview in the panel with a given ID.
+   *
+   * @param aViewId the ID of the subview to show.
+   */
+  showSubView: function(aViewId, aAnchor) {
+    let viewNode = document.getElementById(aViewId);
+    if (!viewNode) {
+      Cu.reportError("Could not show panel subview with id: " + aViewId);
+      return;
+    }
+
+    if (!aAnchor) {
+      Cu.reportError("Expected an anchor when opening subview with id: " + aViewId);
+      return;
+    }
+
+    let oldHeight = this.mainView.clientHeight;
+    viewNode.setAttribute("current", true);
+    this._currentSubView = viewNode;
+
+    // Emit the ViewShowing event so that the widget definition has a chance
+    // to lazily populate the subview with things.
+    let evt = document.createEvent("CustomEvent");
+    evt.initCustomEvent("ViewShowing", true, true, viewNode);
+    viewNode.dispatchEvent(evt);
+
+    this.viewStack.setAttribute("view", "subview");
+    this.mainViewSpring.style.height = this.subViews.scrollHeight - oldHeight + "px";
+    this.container.style.height = this.subViews.scrollHeight + "px";
+
+    // Now we have to transition to transition the panel. There are a few parts
+    // to this:
+    //
+    // 1) The main view content gets shifted so that the center of the anchor
+    //    node is at the left-most edge of the panel.
+    // 2) The subview deck slides in so that it takes up almost all of the
+    //    panel.
+    // 3) If the subview is taller then the main panel contents, then the panel
+    //    must grow to meet that new height. Otherwise, it must shrink.
+    //
+    // All three of these actions make use of CSS transformations, so they
+    // should all occur simultaneously.
+    this._shiftMainView(aAnchor);
+    this._subViewObserver.observe(viewNode, {
+      attributes: true,
+      characterData: true,
+      childList: true,
+      subtree: true
+    });
+  },
+
+  /**
+   * Ensures that the container has the same height as the main view, minus
+   * any spring height. This is usually done after customization completes, or
+   * when switching back from a subview.
+   */
+  _syncContainerWithMainView: function() {
+    let springHeight = this.mainViewSpring.getBoundingClientRect().height;
+    this.container.style.height = (this.mainView.scrollHeight - springHeight) + "px";
+    this.mainViewSpring.style.height = "";
+  },
+
+  /**
+   * Ensures that the container has the same height as the subview holder.
+   * This is usually done when switching to a subview, or if a subview changes
+   * in size.
+   */
+  _syncContainerWithSubView: function() {
+    let springHeight = this.mainViewSpring.getBoundingClientRect().height;
+    let mainViewHeight = this.mainView.clientHeight - springHeight;
+    this.container.style.height = this.subViews.scrollHeight + "px";
+    this.mainViewSpring.style.height = (this.subViews.scrollHeight - mainViewHeight) + "px";
+  },
+
+  /**
+   * Sets the anchor node into the open or closed state, depending
+   * on the state of the panel.
+   */
+  _updatePanelButton: function() {
+    this.menuButton.open = this.panel.state == "open" ||
+                           this.panel.state == "showing";
+  },
+
+  /**
+   * If aAnchor is not null, this shifts the main view content so that it is
+   * partially clipped by the panel boundaries, placing the center of aAnchor
+   * at the clipping edge. If aAnchor is undefined or null, the main view
+   * content is shifted back to its original position.
+   */
+  _shiftMainView: function(aAnchor) {
+    if (aAnchor) {
+      // We need to find the left edge of the anchor, relative to the main
+      // panel. Then we need to add half the width of the anchor. This is the
+      // target that we need to transition to.
+      let anchorRect = aAnchor.getBoundingClientRect();
+      let mainViewRect = this.mainView.getBoundingClientRect();
+      let leftEdge = anchorRect.left - mainViewRect.left;
+      let center = (anchorRect.width / 2);
+      let target = leftEdge + center;
+      this.mainView.style.transform = "translateX(-" + target + "px)";
+    } else {
+      this.mainView.style.transform = "";
+    }
+  },
+
+  /**
+   * When viewing a subview, any click on the main view gets intercepted by our
+   * capturer, and then we switch to the main view.
+   */
+  _onCapturerClick: function(aEvent) {
+    PanelUI.showMainView();
+  },
+};
new file mode 100644
--- /dev/null
+++ b/browser/base/content/panelUI.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<bindings id="browserPanelUIBindings"
+          xmlns="http://www.mozilla.org/xbl"
+          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+          xmlns:xbl="http://www.mozilla.org/xbl">
+
+  <binding id="toolbarbutton" display="xul:button"
+           extends="chrome://global/content/bindings/button.xml#button-base">
+    <resources>
+      <stylesheet src="chrome://global/skin/toolbarbutton.css"/>
+    </resources>
+    
+    <content>
+      <children includes="observes|template|menupopup|panel|tooltip"/>
+      <xul:hbox align="center" flex="1">
+	      <xul:image class="toolbarbutton-icon" xbl:inherits="validate,src=image,label"/>
+	      <xul:vbox flex="1">
+	  	    <xul:label class="toolbarbutton-text" crop="right" flex="1"
+  	  	             xbl:inherits="value=label,accesskey,crop"/>
+  	  	  <xul:hbox pack="end">
+	  	  	  <xul:label class="toolbarbutton-acceltext" crop="middle"
+  		  	  	         xbl:inherits="value=acceltext"/>
+  		  	</xul:hbox>
+  		  </xul:vbox>
+  		</xul:hbox>
+    </content>
+    
+    <implementation implements="nsIAccessibleProvider">
+      <property name="accessibleType" readonly="true">
+        <getter>
+          return Components.interfaces.nsIAccessibleProvider.XULToolbarButton;
+        </getter>
+      </property>
+    </implementation>
+  </binding>
+</bindings>
new file mode 100644
--- /dev/null
+++ b/browser/base/content/panelUIOverlay.js
@@ -0,0 +1,9 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+if (typeof XPCOMUtils == "undefined")
+  Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
+                                  "resource:///modules/CustomizableUI.jsm");
new file mode 100644
--- /dev/null
+++ b/browser/base/content/panelUIOverlay.xul
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<!DOCTYPE overlay [
+  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
+  %brandDTD;
+  <!ENTITY % browserDTD SYSTEM "chrome://browser/locale/browser.dtd" >
+  %browserDTD;
+]>
+
+<?xml-stylesheet href="chrome://browser/skin/panelUIOverlay.css" type="text/css"?>
+
+<overlay id="panelUIOverlay"
+         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+  <script type="application/javascript" src="chrome://browser/content/panelUIOverlay.js"/>
+
+  <hbox id="app-extension-point-end">
+    <toolbarbutton id="PanelUI-menu-button"
+                   class="toolbarbutton-1"
+                   label="&brandShortName;"
+                   tooltiptext="&appmenu.title;"
+                   oncommand="CustomizableUI.showPanel(this);"/>
+  </hbox>
+</overlay>
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -3459,19 +3459,17 @@
           switch (aEvent.type) {
             case "load":
               this.updateVisibility();
               break;
             case "resize":
               if (aEvent.target != window)
                 break;
 
-              let sizemode = document.documentElement.getAttribute("sizemode");
-              TabsInTitlebar.allowedBy("sizemode",
-                                       sizemode == "maximized" || sizemode == "fullscreen");
+              TabsInTitlebar.updateAppearance();
 
               var width = this.mTabstrip.boxObject.width;
               if (width != this.mTabstripWidth) {
                 this.adjustTabstrip();
                 this._fillTrailingGap();
                 this._handleTabSelect();
                 this.mTabstripWidth = width;
               }
new file mode 100644
--- /dev/null
+++ b/browser/base/content/toolbar.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<bindings id="browserToolbarBindings"
+          xmlns="http://www.mozilla.org/xbl"
+          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+          xmlns:xbl="http://www.mozilla.org/xbl">
+
+  <binding id="toolbar">
+    <implementation implements="nsIAccessibleProvider">
+      <property name="accessibleType" readonly="true">
+        <getter>
+          return Components.interfaces.nsIAccessibleProvider.XULToolbar;
+        </getter>
+      </property>
+
+      <constructor><![CDATA[
+          if (document.readyState == "complete") {
+            this._init();
+          } else {
+            // Need to wait until XUL overlays are loaded. See bug 554279.
+            let self = this;
+            document.addEventListener("readystatechange", function onReadyStateChange() {
+              if (document.readyState != "complete")
+                return;
+              document.removeEventListener("readystatechange", onReadyStateChange, false);
+              self._init();
+            }, false);
+          }
+      ]]></constructor>
+
+      <method name="_init">
+        <body><![CDATA[
+          let scope = {};
+          Cu.import("resource:///modules/CustomizableUI.jsm", scope);
+          let CustomizableUI = scope.CustomizableUI;
+
+          // Searching for the toolbox palette in the toolbar binding because
+          // toolbars are constructed first.
+          let toolbox = this.toolbox;
+          if (toolbox && !toolbox.palette) {
+            for (let node of toolbox.children) {
+              if (node.localName == "toolbarpalette") {
+                // Hold on to the palette but remove it from the document.
+                toolbox.palette = node;
+                toolbox.removeChild(node);
+              }
+            }
+          }
+
+          CustomizableUI.registerToolbar(this);
+        ]]></body>
+      </method>
+
+      <property name="toolbarName"
+                onget="return this.getAttribute('toolbarname');"
+                onset="this.setAttribute('toolbarname', val); return val;"/>
+
+      <property name="customizationTarget" readonly="true">
+        <getter><![CDATA[
+          if (this._customizationTarget)
+            return this._customizationTarget;
+
+          let id = this.getAttribute("customizationtarget");
+          if (id)
+            this._customizationTarget = document.getElementById(id);
+          
+          if (!this._customizationTarget)
+            this._customizationTarget = this;
+
+          return this._customizationTarget;
+        ]]></getter>
+      </property>
+
+      <property name="toolbox" readonly="true">
+        <getter><![CDATA[
+          if (this._toolbox)
+            return this._toolbox;
+
+          let toolboxId = this.getAttribute("toolboxid");
+          if (toolboxId) {
+            let toolbox = document.getElementById(toolboxId);
+            if (toolbox) {
+              if (toolbox.externalToolbars.indexOf(this) == -1)
+                toolbox.externalToolbars.push(this);
+
+              this._toolbox = toolbox;
+            }
+          }
+
+          if (!this._toolbox && this.parentNode &&
+              this.parentNode.localName == "toolbox") {
+            this._toolbox = this.parentNode;
+          }
+
+          return this._toolbox;
+        ]]></getter>
+      </property>
+    </implementation>
+  </binding>
+
+</bindings>
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -8,18 +8,24 @@ browser.jar:
 %  overlay chrome://global/content/console.xul chrome://browser/content/jsConsoleOverlay.xul
 %  overlay chrome://mozapps/content/update/updates.xul chrome://browser/content/softwareUpdateOverlay.xul
 #endif
 #ifdef XP_WIN
 %  overlay chrome://browser/content/browser.xul chrome://browser/content/win6BrowserOverlay.xul os=WINNT osversion>=6
 #endif
 %  overlay chrome://global/content/viewSource.xul chrome://browser/content/viewSourceOverlay.xul
 %  overlay chrome://global/content/viewPartialSource.xul chrome://browser/content/viewSourceOverlay.xul
-%  style chrome://global/content/customizeToolbar.xul chrome://browser/content/browser.css
-%  style chrome://global/content/customizeToolbar.xul chrome://browser/skin/
+
+# These overlays should be kept in sync with what pages are in 
+# XULBrowserWindow.inContentWhitelist in browser.js
+% overlay about:addons                                chrome://browser/content/panelUIOverlay.xul
+% overlay about:preferences                           chrome://browser/content/panelUIOverlay.xul
+% overlay about:permissions                           chrome://browser/content/panelUIOverlay.xul
+% overlay about:sync-progress                         chrome://browser/content/panelUIOverlay.xul
+
 *       content/browser/aboutDialog.xul               (content/aboutDialog.xul)
 *       content/browser/aboutDialog.js                (content/aboutDialog.js)
         content/browser/aboutDialog.css               (content/aboutDialog.css)
         content/browser/aboutRobots.xhtml             (content/aboutRobots.xhtml)
         content/browser/abouthome/aboutHome.xhtml     (content/abouthome/aboutHome.xhtml)
         content/browser/abouthome/aboutHome.js        (content/abouthome/aboutHome.js)
 *       content/browser/abouthome/aboutHome.css       (content/abouthome/aboutHome.css)
         content/browser/abouthome/noise.png           (content/abouthome/noise.png)
@@ -55,28 +61,32 @@ browser.jar:
         content/browser/aboutRobots-icon.png          (content/aboutRobots-icon.png)
         content/browser/aboutRobots-widget-left.png   (content/aboutRobots-widget-left.png)
         content/browser/aboutSocialError.xhtml        (content/aboutSocialError.xhtml)
 *       content/browser/browser.css                   (content/browser.css)
 *       content/browser/browser.js                    (content/browser.js)
 *       content/browser/browser.xul                   (content/browser.xul)
 *       content/browser/browser-tabPreviews.xml       (content/browser-tabPreviews.xml)
         content/browser/content.js                    (content/content.js)
+        content/browser/customizing.xhtml             (content/customizing.xhtml)
         content/browser/newtab/newTab.xul             (content/newtab/newTab.xul)
 *       content/browser/newtab/newTab.js              (content/newtab/newTab.js)
         content/browser/newtab/newTab.css             (content/newtab/newTab.css)
         content/browser/newtab/preload.xhtml          (content/newtab/preload.xhtml)
 *       content/browser/pageinfo/pageInfo.xul         (content/pageinfo/pageInfo.xul)
         content/browser/pageinfo/pageInfo.js          (content/pageinfo/pageInfo.js)
         content/browser/pageinfo/pageInfo.css         (content/pageinfo/pageInfo.css)
         content/browser/pageinfo/pageInfo.xml         (content/pageinfo/pageInfo.xml)
         content/browser/pageinfo/feeds.js             (content/pageinfo/feeds.js)
         content/browser/pageinfo/feeds.xml            (content/pageinfo/feeds.xml)
         content/browser/pageinfo/permissions.js       (content/pageinfo/permissions.js)
         content/browser/pageinfo/security.js          (content/pageinfo/security.js)
+        content/browser/panelUI.js                    (content/panelUI.js)
+        content/browser/panelUIOverlay.xul            (content/panelUIOverlay.xul)
+        content/browser/panelUIOverlay.js             (content/panelUIOverlay.js)
 #ifdef MOZ_SERVICES_SYNC
         content/browser/sync/aboutSyncTabs.xul        (content/sync/aboutSyncTabs.xul)
         content/browser/sync/aboutSyncTabs.js         (content/sync/aboutSyncTabs.js)
         content/browser/sync/aboutSyncTabs.css        (content/sync/aboutSyncTabs.css)
         content/browser/sync/aboutSyncTabs-bindings.xml  (content/sync/aboutSyncTabs-bindings.xml)
 *       content/browser/sync/setup.xul                (content/sync/setup.xul)
         content/browser/sync/addDevice.js             (content/sync/addDevice.js)
         content/browser/sync/addDevice.xul            (content/sync/addDevice.xul)
@@ -86,16 +96,18 @@ browser.jar:
         content/browser/sync/key.xhtml                (content/sync/key.xhtml)
         content/browser/sync/notification.xml         (content/sync/notification.xml)
         content/browser/sync/quota.xul                (content/sync/quota.xul)
         content/browser/sync/quota.js                 (content/sync/quota.js)
         content/browser/sync/utils.js                 (content/sync/utils.js)
         content/browser/sync/progress.js              (content/sync/progress.js)
         content/browser/sync/progress.xhtml           (content/sync/progress.xhtml)
 #endif
+        content/browser/panelUI.xml                   (content/panelUI.xml)
+        content/browser/toolbar.xml                   (content/toolbar.xml)
         content/browser/openLocation.js               (content/openLocation.js)
         content/browser/openLocation.xul              (content/openLocation.xul)
         content/browser/safeMode.css                  (content/safeMode.css)
         content/browser/safeMode.js                   (content/safeMode.js)
         content/browser/safeMode.xul                  (content/safeMode.xul)
 *       content/browser/sanitize.js                   (content/sanitize.js)
 *       content/browser/sanitize.xul                  (content/sanitize.xul)
 *       content/browser/sanitizeDialog.js             (content/sanitizeDialog.js)
--- a/browser/branding/nightly/branding.nsi
+++ b/browser/branding/nightly/branding.nsi
@@ -3,17 +3,17 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # NSIS branding defines for nightly builds.
 # The official release build branding.nsi is located in other-license/branding/firefox/
 # The unofficial build branding.nsi is located in browser/branding/unofficial/
 
 # BrandFullNameInternal is used for some registry and file system values
 # instead of BrandFullName and typically should not be modified.
-!define BrandFullNameInternal "Nightly"
+!define BrandFullNameInternal "UX"
 !define CompanyName           "mozilla.org"
 !define URLInfoAbout          "http://www.mozilla.org"
 !define URLUpdateInfo         "http://www.mozilla.org/projects/firefox"
 
 !define URLStubDownload "http://download.mozilla.org/?product=firefox-nightly-latest&os=win&lang=${AB_CD}"
 !define URLManualDownload "https://www.mozilla.org/firefox/installer-help/?channel=nightly"
 !define Channel "nightly"
 
--- a/browser/branding/nightly/configure.sh
+++ b/browser/branding/nightly/configure.sh
@@ -1,5 +1,5 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-MOZ_APP_DISPLAYNAME=Nightly
+MOZ_APP_DISPLAYNAME=UX
--- a/browser/branding/nightly/locales/en-US/brand.dtd
+++ b/browser/branding/nightly/locales/en-US/brand.dtd
@@ -1,8 +1,8 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
-<!ENTITY  brandShortName        "Nightly">
-<!ENTITY  brandFullName         "Nightly">
+<!ENTITY  brandShortName        "UX">
+<!ENTITY  brandFullName         "UX">
 <!ENTITY  vendorShortName       "Mozilla">
 <!ENTITY  trademarkInfo.part1   " ">
--- a/browser/branding/nightly/locales/en-US/brand.properties
+++ b/browser/branding/nightly/locales/en-US/brand.properties
@@ -1,9 +1,9 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-brandShortName=Nightly
-brandFullName=Nightly
+brandShortName=UX
+brandFullName=UX
 vendorShortName=Mozilla
 
 syncBrandShortName=Sync
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -79,16 +79,18 @@ static RedirEntry kRedirMap[] = {
   { "preferences", "chrome://browser/content/preferences/in-content/preferences.xul",
     nsIAboutModule::ALLOW_SCRIPT },
   { "downloads", "chrome://browser/content/downloads/contentAreaDownloadsView.xul",
     nsIAboutModule::ALLOW_SCRIPT },
 #ifdef MOZ_SERVICES_HEALTHREPORT
   { "healthreport", "chrome://browser/content/abouthealthreport/abouthealth.xhtml",
     nsIAboutModule::ALLOW_SCRIPT },
 #endif
+  { "customizing", "chrome://browser/content/customizing.xhtml",
+    nsIAboutModule::ALLOW_SCRIPT },
 };
 static const int kRedirTotal = NS_ARRAY_LENGTH(kRedirMap);
 
 static nsAutoCString
 GetAboutModuleName(nsIURI *aURI)
 {
   nsAutoCString path;
   aURI->GetPath(path);
--- a/browser/components/build/nsModule.cpp
+++ b/browser/components/build/nsModule.cpp
@@ -102,16 +102,17 @@ static const mozilla::Module::ContractID
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "home", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "newtab", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "permissions", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "preferences", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "downloads", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
 #ifdef MOZ_SERVICES_HEALTHREPORT
     { NS_ABOUT_MODULE_CONTRACTID_PREFIX "healthreport", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
 #endif
+    { NS_ABOUT_MODULE_CONTRACTID_PREFIX "customizing", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
 #if defined(XP_WIN)
     { NS_IEHISTORYENUMERATOR_CONTRACTID, &kNS_WINIEHISTORYENUMERATOR_CID },
 #elif defined(XP_MACOSX)
     { NS_SHELLSERVICE_CONTRACTID, &kNS_SHELLSERVICE_CID },
 #endif
     { NULL }
 };
 
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -10,16 +10,18 @@
 <!-- LOCALIZATION NOTE (mainWindow.titlemodifier) : DONT_TRANSLATE -->
 <!ENTITY mainWindow.titlemodifier "&brandFullName;">
 <!-- LOCALIZATION NOTE (mainWindow.titlemodifiermenuseparator): DONT_TRANSLATE -->
 <!ENTITY mainWindow.titlemodifiermenuseparator " - ">
 <!-- LOCALIZATION NOTE (mainWindow.titlePrivateBrowsingSuffix): This will be appended to the window's title
                                                                 inside the private browsing mode -->
 <!ENTITY mainWindow.titlePrivateBrowsingSuffix "(Private Browsing)">
 
+<!ENTITY appmenu.title                       "Customize and Control &brandFullName;">
+
 <!-- Tab context menu -->
 <!ENTITY  reloadTab.label                    "Reload Tab">
 <!ENTITY  reloadTab.accesskey                "R">
 <!ENTITY  reloadAllTabs.label                "Reload All Tabs">
 <!ENTITY  reloadAllTabs.accesskey            "A">
 <!ENTITY  closeOtherTabs.label               "Close Other Tabs">
 <!ENTITY  closeOtherTabs.accesskey           "o">
 
@@ -314,16 +316,20 @@ These should match what Safari and other
 <!ENTITY appMenuToolbarLayout.label "Toolbar Layout…">
 <!ENTITY appMenuSidebars.label "Sidebars">
 <!ENTITY appMenuFind.label "Find…">
 <!ENTITY appMenuUnsorted.label "Unsorted Bookmarks">
 <!ENTITY appMenuWebDeveloper.label "Web Developer">
 <!ENTITY appMenuGettingStarted.label "Getting Started">
 <!ENTITY appMenuSafeMode.label "Restart with Add-ons Disabled…">
 <!ENTITY appMenuSafeMode.accesskey "R">
+<!ENTITY appMenuBack.label "Back">
+<!ENTITY appMenuBookmarks.label "Bookmarks">
+<!ENTITY appMenuHistory.label "History">
+<!ENTITY appMenuHistoryMore.label "More…">
 
 <!ENTITY openCmd.commandkey           "l">
 <!ENTITY urlbar.placeholder2          "Search or enter address">
 <!ENTITY urlbar.accesskey             "d">
 <!ENTITY urlbar.switchToTab.label     "Switch to tab:">
 
 <!-- 
   Comment duplicated from browser-sets.inc:
@@ -525,16 +531,19 @@ you can use these alternative items. Oth
 <!ENTITY copyButton.tooltip             "Copy">
 <!ENTITY pasteButton.tooltip            "Paste">
 
 <!ENTITY fullScreenButton.tooltip       "Display the window in full screen">
 
 <!ENTITY zoomOutButton.tooltip          "Zoom out">
 <!ENTITY zoomInButton.tooltip           "Zoom in">
 <!ENTITY zoomControls.label             "Zoom Controls">
+<!ENTITY zoomReset.tooltip              "Reset Zoom">
+<!-- LOCALIZATION NOTE(zoomReset.label): the &#37; is the percent symbol. -->
+<!ENTITY zoomReset.label                "100&#37;">
 
 <!ENTITY quitApplicationCmdWin.label       "Exit"> 
 <!ENTITY quitApplicationCmdWin.accesskey   "x">
 <!ENTITY goBackCmd.commandKey "[">
 <!ENTITY goForwardCmd.commandKey "]">
 <!ENTITY quitApplicationCmd.label       "Quit"> 
 <!ENTITY quitApplicationCmd.accesskey   "Q">
 <!ENTITY quitApplicationCmdMac.label    "Quit &brandShortName;">
@@ -634,16 +643,26 @@ just addresses the organization to follo
 
 <!ENTITY social.activated.description "Services from <label/> have been enabled. You can change your settings for services in the <label class='text-link'>Add-on Manager</label>.">
 <!ENTITY social.activated.undo.label "Oops, undo this!">
 <!ENTITY social.activated.undo.accesskey "U">
 <!ENTITY social.learnMore.label "Learn more…">
 <!ENTITY social.learnMore.accesskey "l">
 <!ENTITY social.closeNotificationItem.label "Not Now">
 
+
+
+<!ENTITY customizeMode.tabTitle "Customize &brandShortName;">
+<!ENTITY customizeMode.menuAndToolbars.label "Menu and toolbars">
+<!ENTITY customizeMode.menuAndToolbars.header "More tools to add to the menu and toolbar">
+<!ENTITY customizeMode.appearance.label "Appearance">
+<!ENTITY customizeMode.appearance.header "Bling!">
+<!ENTITY customizeMode.restoreDefaults "Restore Defaults">
+<!ENTITY customizeMode.done "Done">
+
 <!ENTITY social.chatBar.commandkey "c">
 <!ENTITY social.chatBar.label "Focus chats">
 <!ENTITY social.chatBar.accesskey "c">
 
 <!ENTITY getUserMedia.selectCamera.label "Camera to share:">
 <!ENTITY getUserMedia.selectCamera.accesskey "C">
 <!ENTITY getUserMedia.selectMicrophone.label "Microphone to share:">
 <!ENTITY getUserMedia.selectMicrophone.accesskey "M">
new file mode 100644
--- /dev/null
+++ b/browser/modules/CustomizableUI.jsm
@@ -0,0 +1,1682 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["CustomizableUI"];
+
+const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/NetUtil.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
+  "resource://gre/modules/PlacesUtils.jsm");
+
+const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+
+const kPrefCustomizationState        = "browser.uiCustomization.state";
+const kPrefCustomizationAutoAdd      = "browser.uiCustomization.autoAdd";
+const kPrefCustomizationDebug        = "browser.uiCustomization.debug";
+
+/**
+ * Lazily returns the definitions for the set of built-in widgets. This might
+ * not be the final resting place for this stuff, but it'll do for now.
+ */
+XPCOMUtils.defineLazyGetter(this, "gBuiltInWidgets", function() {
+  return [{
+    id: "bookmarks-panelmenu",
+    type: "view",
+    viewId: "PanelUI-bookmarks",
+    name: "Bookmarks...",
+    description: "Bookmarks, yo!",
+    defaultArea: CustomizableUI.AREA_PANEL,
+    //XXXunf Need to enforce this, and make it optional.
+    allowedAreas: [CustomizableUI.AREA_PANEL],
+    icons: {
+      "16": "chrome://branding/content/icon16.png",
+      "32": "chrome://branding/content/icon48.png",
+      "48": "chrome://branding/content/icon48.png"
+    },
+    // These are automatically bound to the ViewShowing and ViewHiding events
+    // that the Panel will dispatch, targetted at the view referenced by
+    // viewId.
+    // XXXmconley: Is this too magical?
+    onViewShowing: function(aEvent) {
+      LOG("Bookmark view is being shown!");
+    },
+    onViewHiding: function(aEvent) {
+      LOG("Bookmark view is being hidden!");
+    }
+  }, {
+    id: "weather-indicator",
+    name: "Weather",
+    description: "Don't look out the window, look at your browser!",
+    defaultArea: CustomizableUI.AREA_PANEL,
+    //XXXunf Need to enforce this, and make it optional.
+    allowedAreas: [CustomizableUI.AREA_PANEL],
+    icons: {
+      "16": "chrome://branding/content/icon16.png",
+      "32": "chrome://branding/content/icon48.png",
+      "48": "chrome://branding/content/icon48.png"
+    }
+  }, {
+    id: "share-page",
+    name: "Share 1",
+    shortcut: "Ctrl+Alt+S",
+    description: "Share this page",
+    defaultArea: CustomizableUI.AREA_NAVBAR,
+    allowedAreas: [CustomizableUI.AREA_PANEL, CustomizableUI.AREA_NAVBAR],
+    icons: {
+      "16": "chrome://branding/content/icon16.png",
+      "32": "chrome://branding/content/icon48.png",
+      "48": "chrome://branding/content/icon48.png"
+    }
+  }, {
+    id: "share-page-2",
+    name: "Share 2",
+    shortcut: "Ctrl+Alt+S",
+    description: "Share this page",
+    defaultArea: CustomizableUI.AREA_PANEL,
+    allowedAreas: [CustomizableUI.AREA_PANEL],
+    icons: {
+      "16": "chrome://branding/content/icon16.png",
+      "32": "chrome://branding/content/icon48.png",
+      "48": "chrome://branding/content/icon48.png"
+    }
+  }, {
+    id: "share-page-3",
+    name: "Share 3",
+    shortcut: "Ctrl+Alt+S",
+    description: "Share this page",
+    allowedAreas: [CustomizableUI.AREA_PANEL],
+    icons: {
+      "16": "chrome://branding/content/icon16.png",
+      "32": "chrome://branding/content/icon48.png",
+      "48": "chrome://branding/content/icon48.png"
+    }
+  }, {
+    id: "share-page-4",
+    name: "Share 4",
+    shortcut: "Ctrl+Alt+S",
+    description: "Share this page",
+    defaultArea: CustomizableUI.AREA_PANEL,
+    allowedAreas: [CustomizableUI.AREA_PANEL],
+    icons: {
+      "16": "chrome://branding/content/icon16.png",
+      "32": "chrome://branding/content/icon48.png",
+      "48": "chrome://branding/content/icon48.png"
+    }
+  }, {
+    id: "history-panelmenu",
+    type: "view",
+    viewId: "PanelUI-history",
+    name: "History...",
+    description: "History repeats itself!",
+    defaultArea: CustomizableUI.AREA_PANEL,
+    allowedAreas: [CustomizableUI.AREA_PANEL],
+    icons: {
+      "16": "chrome://branding/content/icon16.png",
+      "32": "chrome://branding/content/icon48.png",
+      "48": "chrome://branding/content/icon48.png"
+    },
+    onViewShowing: function(aEvent) {
+      // Populate our list of history
+      const kMaxResults = 10;
+      let doc = aEvent.detail.ownerDocument;
+
+      let options = PlacesUtils.history.getNewQueryOptions();
+      options.excludeQueries = true;
+      options.includeHidden = false;
+      options.resultType = options.RESULTS_AS_URI;
+      options.queryType = options.QUERY_TYPE_HISTORY;
+      options.sortingMode = options.SORT_BY_DATE_DESCENDING;
+      options.maxResults = kMaxResults;
+      let query = PlacesUtils.history.getNewQuery();
+
+      let items = doc.getElementById("PanelUI-historyItems");
+      // Clear previous history items.
+      while (items.firstChild) {
+        items.removeChild(items.firstChild);
+      }
+
+      PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
+                         .asyncExecuteLegacyQueries([query], 1, options, {
+        handleResult: function (aResultSet) {
+          let fragment = doc.createDocumentFragment();
+          for (let row, i = 0; (row = aResultSet.getNextRow()); i++) {
+            try {
+              let uri = row.getResultByIndex(1);
+              let title = row.getResultByIndex(2);
+              let icon = row.getResultByIndex(6);
+
+              let item = doc.createElementNS(kNSXUL, "toolbarbutton");
+              item.setAttribute("label", title || uri);
+              item.addEventListener("click", function(aEvent) {
+                if (aEvent.button == 0) {
+                  doc.defaultView.openUILink(uri, aEvent);
+                  doc.defaultView.PanelUI.hide();
+                }
+              });
+              if (icon)
+                item.setAttribute("image", "moz-anno:favicon:" + icon);
+              fragment.appendChild(item);
+            } catch (e) {
+              Cu.reportError("Error while showing history subview: " + e);
+            }
+          }
+          items.appendChild(fragment);
+        },
+        handleError: function (aError) {
+          LOG("History view tried to show but had an error: " + aError);
+        },
+        handleCompletion: function (aReason) {
+          LOG("History view is being shown!");
+        },
+      });
+    },
+    onViewHiding: function(aEvent) {
+      LOG("History view is being hidden!");
+    }
+  }];
+});
+
+/**
+ * The keys are the handlers that are fired when the event type (the value)
+ * is fired on the subview. A widget that provides a subview has the option
+ * of providing onViewShowing and onViewHiding event handlers.
+ */
+const kSubviewEvents = [
+  "ViewShowing",
+  "ViewHiding"
+];
+
+/**
+ * gPalette is a map of every widget that CustomizableUI.jsm knows about, keyed
+ * on their IDs.
+ */
+let gPalette = new Map();
+
+/**
+ * gAreas maps area IDs to Sets of properties about those areas. An area is a
+ * place where a widget can be put.
+ */
+let gAreas = new Map();
+
+/**
+ * gPlacements maps area IDs to Arrays of widget IDs, indicating that the widgets
+ * are placed within that area (either directly in the area node, or in the
+ * customizationTarget of the node).
+ */
+let gPlacements = new Map();
+
+/**
+ * gFuturePlacements represent placements that will happen for areas that have
+ * not yet loaded (due to lazy-loading). This can occur when add-ons register
+ * widgets.
+ */
+let gFuturePlacements = new Map();
+
+/**
+ * If the user does not have any state saved, this is the default set of
+ * placements to use.
+ */
+let gDefaultPlacements = new Map([
+  ["nav-bar", [
+    "search-container",
+    "bookmarks-menu-button-container",
+    "downloads-button",
+    "social-toolbar-button",
+    "PanelUI-button",
+    "share-page"
+  ]],
+  ["PanelUI-contents", [
+    "new-window-button",
+    "print-button",
+    "history-button",
+    "fullscreen-button",
+    "history-panelmenu",
+    "bookmarks-panelmenu",
+  ]]
+]);
+
+//XXXunf Temporary. Need a nice way to abstract functions to build widgets
+//       of these types.
+let gSupportedWidgetTypes = new Set(["button", "view"]);
+
+/**
+ * gSeenWidgets remembers which widgets the user has seen for the first time
+ * before. This way, if a new widget is created, and the user has not seen it
+ * before, it can be put in its default location. Otherwise, it remains in the
+ * palette.
+ */
+let gSeenWidgets = new Set();
+
+let gSavedState = null;
+let gRestoring = false;
+let gDirty = false;
+let gInBatch = false;
+
+/**
+ * gBuildAreas maps area IDs to actual area nodes within browser windows.
+ */
+let gBuildAreas = new Map();
+let gNewElementCount = 0;
+let gWrapperCache = new WeakMap();
+let gListeners = new Set();
+
+let gDebug = false;
+try {
+  gDebug = Services.prefs.getBoolPref(kPrefCustomizationDebug);
+} catch (e) {}
+
+function LOG(aMsg) {
+  if (gDebug) {
+    Services.console.logStringMessage("[CustomizableUI] " + aMsg);
+  }
+}
+function ERROR(aMsg) Cu.reportError("[CustomizableUI] " + aMsg);
+
+
+let CustomizableUIInternal = {
+  initialize: function() {
+    LOG("Initializing");
+
+    this.addListener(this);
+    this._defineBuiltInWidgets();
+    this.loadSavedState();
+
+    this.registerArea(CustomizableUI.AREA_PANEL);
+    this.registerArea(CustomizableUI.AREA_NAVBAR, ["legacy"]);
+  },
+
+  _defineBuiltInWidgets: function() {
+    //XXXunf Need to figure out how to auto-add new builtin widgets in new
+    //       app versions to already customized areas.
+    for (let widgetDefinition of gBuiltInWidgets) {
+      this.createBuiltinWidget(widgetDefinition);
+    }
+  },
+
+  wrapWidget: function(aWidgetId) {
+    let provider = this.getWidgetProvider(aWidgetId);
+    if (!provider) {
+      return null;
+    }
+
+    if (provider == CustomizableUI.PROVIDER_API) {
+      let widget = gPalette.get(aWidgetId);
+      if (!widget.wrapper) {
+        widget.wrapper = new WidgetGroupWrapper(widget);
+      }
+      return widget.wrapper;
+    }
+
+    // PROVIDER_SPECIAL gets treated the same as PROVIDER_XUL.
+    return new XULWidgetGroupWrapper(aWidgetId);
+  },
+
+  registerArea: function(aName, aProperties) {
+    if (typeof aName != "string" || !/^[a-z0-9-_]{1,}$/i.test(aName)) {
+      throw new Error("Invalid area name");
+    }
+    if (gAreas.has(aName)) {
+      throw new Error("Area already registered");
+    }
+
+    let props = new Set(aProperties);
+    gAreas.set(aName, props);
+
+    if (props.has("legacy")) {
+      // Guarantee this area exists in gFuturePlacements, to avoid checking it in
+      // various places elsewhere.
+      gFuturePlacements.set(aName, new Set());
+    } else {
+      this.restoreStateForArea(aName);
+    }
+  },
+
+  registerToolbar: function(aToolbar) {
+    let document = aToolbar.ownerDocument;
+    let area = aToolbar.id;
+
+    if (!gAreas.has(area)) {
+      throw new Error("Unknown customization area");
+    }
+
+    if (this.isBuildAreaRegistered(area, aToolbar)) {
+      return;
+    }
+
+    let areaProperties = gAreas.get(area);
+
+    if (!gPlacements.has(area) && areaProperties.has("legacy")) {
+      let legacyState = aToolbar.getAttribute("currentset");
+      if (legacyState) {
+        legacyState = legacyState.split(",");
+      }
+      //XXXunf should the legacy attribute be purged?
+      //       kinda messes up switching to older builds
+      //XXXmconley No, I don't think so - I think we want to make it easy to
+      //           switch back and forth between builds until this thing hits
+      //           release.
+      //aToolbar.removeAttribute("currentset");
+
+      // Manually restore the state here, so the legacy state can be converted. 
+      this.restoreStateForArea(area, legacyState);
+    }
+
+    this.registerBuildArea(area, aToolbar);
+
+    let placements = gPlacements.get(area);
+    this.buildArea(area, placements, aToolbar);
+
+    // We register this window to have its customization data cleaned up when
+    // unloading.
+    this.registerBuildWindow(document.defaultView);
+  },
+
+  buildArea: function(aArea, aPlacements, aAreaNode) {
+    let document = aAreaNode.ownerDocument;
+    let container = aAreaNode.customizationTarget;
+
+    if (!container) {
+      throw new Error("Expected area " + aArea
+                      + " to have a customizationTarget attribute.");
+    }
+
+    let currentNode = container.firstChild;
+    for (let id of aPlacements) {
+      if (currentNode && currentNode.id == id) {
+        currentNode = currentNode.nextSibling;
+        continue;
+      }
+
+      let [provider, node] = this.getWidgetNode(id, document, aAreaNode.toolbox);
+      if (!node) {
+        LOG("Unknown widget: " + id);
+        continue;
+      }
+
+      if (provider == CustomizableUI.PROVIDER_XUL &&
+          aArea == CustomizableUI.AREA_PANEL) {
+        this.ensureButtonClosesPanel(node);
+      }
+
+      container.insertBefore(node, currentNode);
+      this._addParentFlex(node);
+    }
+
+    if (currentNode) {
+      let palette = aAreaNode.toolbox ? aAreaNode.toolbox.palette : null;
+      let limit = currentNode.previousSibling;
+      let node = container.lastChild;
+      while (node != limit) {
+        // XXXunf Deprecating the old "removable" attribute, is this right?
+        // XXXmconley I think we need to hear from UX about this.
+        if (palette) {
+          palette.appendChild(node);
+        } else {
+          container.removeChild(node);
+        }
+        node = container.lastChild;
+      }
+    }
+  },
+
+  ensureButtonClosesPanel: function(aNode) {
+    //XXXunf This seems kinda hacky, but I can't find any other reliable method.
+    //XXXunf Is it worth going to the effort to remove these when appropriate?
+    // The "command" event only gets fired if there's not an attached command
+    // (via the "command" attribute). For menus, this is handled natively, but
+    // since the panel isn't implemented as a menu, we have to handle it
+    // ourselves.
+
+    aNode.addEventListener("mouseup", this.maybeAutoHidePanel, false);
+    aNode.addEventListener("keypress", this.maybeAutoHidePanel, false);
+  },
+
+  getWidgetProvider: function(aWidgetId) {
+    if (this.isSpecialWidget(aWidgetId)) {
+      return CustomizableUI.PROVIDER_SPECIAL;
+    }
+    if (gPalette.has(aWidgetId)) {
+      return CustomizableUI.PROVIDER_API;
+    }
+
+    // We fall back to the XUL provider, but we don't know for sure (at this
+    // point) whether it exists there either. So the API is technically lying.
+    // Ideally, it would be able to return an error value (or throw an
+    // exception) if it really didn't exist. Our code calling this function
+    // handles that fine, but this is a public API.
+    return CustomizableUI.PROVIDER_XUL;
+  },
+
+  getWidgetNode: function(aWidgetId, aDocument, aToolbox) {
+    if (this.isSpecialWidget(aWidgetId)) {
+      return [ CustomizableUI.PROVIDER_SPECIAL,
+               this.createSpecialWidget(aWidgetId, aDocument) ];
+    }
+
+    let widget = gPalette.get(aWidgetId);
+    if (widget) {
+      // If we have an instance of this widget already, just use that.
+      if (widget.instances.has(aDocument)) {
+        LOG("An instance of widget " + aWidgetId + " already exists in this "
+            + "document. Reusing.");
+        return [ CustomizableUI.PROVIDER_API,
+                 widget.instances.get(aDocument) ];
+      }
+
+      return [ CustomizableUI.PROVIDER_API,
+               this.buildWidget(aDocument, null, widget) ];
+    }
+
+    let node = this.findWidgetInToolbox(aWidgetId, aToolbox, aDocument);
+    if (node) {
+      return [ CustomizableUI.PROVIDER_XUL, node ];
+    }
+
+    return [];
+  },
+
+  registerMenuPanel: function(aPanel) {
+    if (this.isBuildAreaRegistered(CustomizableUI.AREA_PANEL, aPanel)) {
+      return;
+    }
+
+    let document = aPanel.ownerDocument;
+
+    for (let btn of aPanel.querySelectorAll("toolbarbutton")) {
+      if (!btn.hasAttribute("noautoclose")) {
+        this.ensureButtonClosesPanel(btn);
+      }
+    }
+
+    aPanel.toolbox = document.getElementById("navigator-toolbox");
+    aPanel.customizationTarget = aPanel;
+
+    let placements = gPlacements.get(CustomizableUI.AREA_PANEL);
+    this.buildArea(CustomizableUI.AREA_PANEL, placements, aPanel);
+    this.registerBuildArea(CustomizableUI.AREA_PANEL, aPanel);
+  },
+
+  onWidgetAdded: function(aWidgetId, aArea, aPosition) {
+    let areaNodes = gBuildAreas.get(aArea);
+    if (!areaNodes) {
+      return;
+    }
+
+    let placements = gPlacements.get(aArea);
+    if (!placements) {
+      Cu.reportError("Could not find any placements for " + aArea +
+                     " when adding a widget.");
+      return;
+    }
+
+    let nextNodeId = placements[aPosition + 1];
+
+    // Go through each of the nodes associated with this area and move the
+    // widget to the requested location.
+    for (let areaNode of areaNodes) {
+      let container = areaNode.customizationTarget;
+      let [provider, widgetNode] = this.getWidgetNode(aWidgetId,
+                                                      container.ownerDocument,
+                                                      areaNode.toolbox);
+
+      if (provider == CustomizableUI.PROVIDER_XUL &&
+          aArea == CustomizableUI.AREA_PANEL) {
+        this.ensureButtonClosesPanel(widgetNode);
+      }
+
+      let nextNode = container.querySelector("#" + nextNodeId);
+      container.insertBefore(widgetNode, nextNode);
+      this._addParentFlex(widgetNode);
+    }
+  },
+
+  onWidgetRemoved: function(aWidgetId, aArea) {
+    let areaNodes = gBuildAreas.get(aArea);
+    if (!areaNodes) {
+      return;
+    }
+
+    for (let areaNode of areaNodes) {
+      let container = areaNode.customizationTarget;
+      let widgetNode = container.ownerDocument.getElementById(aWidgetId);
+      if (!widgetNode) {
+        ERROR("Widget not found, unable to remove");
+        continue;
+      }
+
+      this._removeParentFlex(widgetNode);
+
+      if (gPalette.has(aWidgetId) || this.isSpecialWidget(aWidgetId)) {
+        container.removeChild(widgetNode);
+      } else {
+        areaNode.toolbox.palette.appendChild(widgetNode);
+      }
+    }
+  },
+
+  onWidgetMoved: function(aWidgetId, aArea, aOldPosition, aNewPosition) {
+    let areaNodes = gBuildAreas.get(aArea);
+    if (!areaNodes) {
+      return;
+    }
+
+    let placements = gPlacements.get(aArea);
+    if (!placements) {
+      Cu.reportError("Could not find any placements for " + aArea +
+                     " when moving a widget.");
+      return;
+    }
+
+    let nextNodeId = placements[aNewPosition + 1];
+
+    for (let areaNode of areaNodes) {
+      let container = areaNode.customizationTarget;
+      let widgetNode = container.ownerDocument.getElementById(aWidgetId);
+      if (!widgetNode) {
+        ERROR("Widget not found, unable to move");
+        continue;
+      }
+
+      let nextNode = container.querySelector("#" + nextNodeId);
+      container.insertBefore(widgetNode, nextNode);
+    }
+  },
+
+  isBuildAreaRegistered: function(aArea, aInstance) {
+    if (!gBuildAreas.has(aArea)) {
+      return false;
+    }
+    return gBuildAreas.get(aArea).has(aInstance);
+  },
+
+  registerBuildArea: function(aArea, aNode) {
+    if (!gBuildAreas.has(aArea)) {
+      gBuildAreas.set(aArea, new Set());
+    }
+
+    gBuildAreas.get(aArea).add(aNode);
+  },
+
+  registerBuildWindow: function(aWindow) {
+    aWindow.addEventListener("unload", this, false);
+  },
+
+  unregisterBuildWindow: function(aWindow) {
+    let document = aWindow.document;
+
+    for (let [, area] of gBuildAreas) {
+      for (let node of area) {
+        if (node.ownerDocument == document) {
+          area.delete(node);
+        }
+      }
+    }
+
+    for (let [,widget] of gPalette)
+      widget.instances.delete(document);
+  },
+
+  handleEvent: function(aEvent) {
+    switch (aEvent.type) {
+      case "unload": {
+        let window = aEvent.target;
+        window.removeEventListener("unload", this);
+        this.unregisterBuildWindow(window);
+        break;
+      }
+    }
+  },
+
+  isSpecialWidget: function(aId) {
+    //XXXunf Need to double check these are getting handled correctly
+    //       everywhere, notably save/restore.
+    return (aId.startsWith("separator") ||
+            aId.startsWith("spring") ||
+            aId.startsWith("spacer"));
+  },
+
+  createSpecialWidget: function(aId, aDocument) {
+    let node = aDocument.createElementNS(kNSXUL, "toolbar" + aId);
+    // Due to timers resolution Date.now() can be the same for
+    // elements created in small timeframes.  So ids are
+    // differentiated through a unique count suffix.
+    node.id = aId + Date.now() + (++gNewElementCount);
+    if (aId == "spring") {
+      node.flex = 1;
+    }
+    return node;
+  },
+
+  findWidgetInToolbox: function(aId, aToolbox, aDocument) {
+    if (!aToolbox) {
+      return null;
+    }
+
+    // look for a node with the same id, as the node may be
+    // in a different toolbar.
+    let node = aDocument.getElementById(aId);
+    if (node) {
+      let parent = node.parentNode;
+      while (parent && parent.localName != "toolbar")
+        parent = parent.parentNode;
+
+      if (parent &&
+          parent.toolbox == aToolbox &&
+          parent.customizationTarget == node.parentNode) {
+        return node;
+      }
+    }
+
+    if (aToolbox.palette) {
+      // Attempt to locate a node with a matching ID within
+      // the palette.
+      return aToolbox.palette.querySelector("#" + aId);
+    }
+    return null;
+  },
+
+  // Depending on aMenu here is a hack that should be fixed.
+  buildWidget: function(aDocument, aMenu, aWidget) {
+    if (typeof aWidget == "string") {
+      aWidget = gPalette.get(aWidget);
+    }
+    if (!aWidget) {
+      throw new Error("buildWidget was passed a non-widget to build.");
+    }
+
+    LOG("Building " + aWidget.id);
+
+    let node = aDocument.createElementNS(kNSXUL, "toolbarbutton");
+
+    node.setAttribute("id", aWidget.id);
+    node.setAttribute("widget-id", aWidget.id);
+    node.setAttribute("widget-type", aWidget.type);
+    if (aWidget.disabled) {
+      node.setAttribute("disabled", true);
+    }
+    node.setAttribute("label", aWidget.name);
+    node.setAttribute("tooltiptext", aWidget.description);
+    //XXXunf Need to hook this up to a <key> element or something.
+    if (aWidget.shortcut) {
+      node.setAttribute("acceltext", aWidget.shortcut);
+    }
+    node.setAttribute("class", "toolbarbutton-1 chromeclass-toolbar-additional");
+
+    if (aMenu) {
+      node.setAttribute("image", aWidget.icons["32"]);
+    } else {
+      node.setAttribute("image", aWidget.icons["16"]);
+    }
+
+    let handler = this.handleWidgetClick.bind(this, aWidget, node);
+    node.addEventListener("command", handler, false);
+
+    // If the widget has a view, and has view showing / hiding listeners,
+    // hook those up to this widget.
+    if (aWidget.type == "view" &&
+        (aWidget.onViewShowing || aWidget.onViewHiding)) {
+      LOG("Widget " + aWidget.id + " has a view with showing and hiding events. Auto-registering event handlers.");
+      let viewNode = aDocument.getElementById(aWidget.viewId);
+
+      if (!viewNode) {
+        ERROR("Could not find the view node with id: " + aWidget.viewId);
+        throw new Error("Could not find the view node with id: " + aWidget.viewId);
+      }
+
+      for (let eventName of kSubviewEvents) {
+        let handler = "on" + eventName;
+        if (typeof aWidget[handler] == "function") {
+          viewNode.addEventListener(eventName, aWidget[handler], false);
+        }
+      }
+
+      LOG("Widget " + aWidget.id + " showing and hiding event handlers set.");
+    }
+
+    aWidget.instances.set(aDocument, node);
+    return node;
+  },
+
+  handleWidgetClick: function(aWidget, aNode, aEvent) {
+    LOG("handleWidgetClick");
+
+    if (aWidget.type == "button") {
+      this.maybeAutoHidePanel(aEvent);
+
+      if (aWidget.onCommand) {
+        try {
+          aWidget.onCommand.call(null, aEvent);
+        } catch (e) {
+          Cu.reportError(e);
+        }
+      } else {
+        //XXXunf Need to think this through more, and formalize.
+        Services.obs.notifyObservers(aNode,
+                                     "customizedui-widget-click",
+                                     aWidget.id);
+      }
+    } else if (aWidget.type == "view") {
+      let ownerWindow = aNode.ownerDocument.defaultView;
+      ownerWindow.PanelUI.showSubView(aWidget.viewId, aNode);
+    }
+  },
+
+  maybeAutoHidePanel: function(aEvent) {
+    if (aEvent.type == "keypress" && 
+        !(aEvent.keyCode == aEvent.DOM_VK_ENTER ||
+          aEvent.keyCode == aEvent.DOM_VK_RETURN)) {
+      return;
+    }
+
+    if (aEvent.type == "mouseup" && aEvent.button != 0) {
+      return;
+    }
+
+    let ownerWindow = aEvent.target.ownerDocument.defaultView;
+    ownerWindow.PanelUI.hide();
+  },
+
+  getUnusedWidgets: function(aWindowPalette) {
+    // We use a Set because there can be overlap between the widgets in
+    // gPalette and the items in the palette, especially after the first
+    // customization, since programmatically generated widgets will remain
+    // in the toolbox palette.
+    let widgets = new Set();
+
+    // It's possible that some widgets have been defined programmatically and
+    // have not been overlayed into the palette. We can find those inside
+    // gPalette.
+    for (let [id, widget] of gPalette) {
+      if (!widget.currentArea) {
+        widgets.add(id);
+      }
+    }
+
+    LOG("Iterating the actual nodes of the window palette");
+    for (let node of aWindowPalette.children) {
+      LOG("In palette children: " + node.id);
+      if (!this.getPlacementOfWidget(node.id)) {
+        widgets.add(node.id);
+      }
+    }
+
+    return [i for (i of widgets)];
+  },
+
+  getPlacementOfWidget: function(aWidgetId) {
+    let widget = gPalette.get(aWidgetId);
+
+    for (let [area, placements] of gPlacements) {
+      let index = placements.indexOf(aWidgetId);
+      if (index != -1) {
+        return { area: area, position: index };
+      }
+    }
+
+    return null;
+  },
+
+  addWidgetToArea: function(aWidgetId, aArea, aPosition) {
+    if (!gAreas.has(aArea)) {
+      throw new Error("Unknown customization area");
+    }
+
+    // If this is a lazy area that hasn't been restored yet, we can't yet modify
+    // it - would would at least like to add to it. So we keep track of it in
+    // gFuturePlacements,  and use that to add it when restoring the area. We
+    // throw away aPosition though, as that can only be bogus if the area hasn't
+    // yet been restorted (caller can't possibly know where its putting the
+    // widget in relation to other widgets).
+    if (this.isAreaLazy(aArea)) {
+      gFuturePlacements.get(aArea).set(aWidgetId);
+      return;
+    }
+
+    let oldPlacement = this.getPlacementOfWidget(aWidgetId);
+    if (oldPlacement && oldPlacement.area == aArea) {
+      this.moveWidgetWithinArea(aWidgetId, aPosition);
+      return;
+    }
+
+    if (oldPlacement) {
+      this.removeWidgetFromArea(aWidgetId);
+    }
+
+    if (!gPlacements.has(aArea)) {
+      gPlacements.set(aArea, [aWidgetId]);
+      aPosition = 0;
+    } else {
+      let placements = gPlacements.get(aArea);
+      if (typeof aPosition != "number") {
+        aPosition = placements.length;
+      }
+      if (aPosition < 0) {
+        aPosition = 0;
+      }
+      placements.splice(aPosition, 0, aWidgetId);
+    }
+
+    let widget = gPalette.get(aWidgetId);
+    if (widget) {
+      widget.currentArea = aArea;
+      widget.currentPosition = aPosition;
+    }
+
+    gDirty = true;
+    this.saveState();
+
+    this.notifyListeners("onWidgetAdded", aWidgetId, aArea, aPosition);
+  },
+
+  removeWidgetFromArea: function(aWidgetId) {
+    let oldPlacement = this.getPlacementOfWidget(aWidgetId);
+    if (!oldPlacement) {
+      return;
+    }
+
+    let placements = gPlacements.get(oldPlacement.area);
+    let position = placements.indexOf(aWidgetId);
+    if (position != -1) {
+      placements.splice(position, 1);
+    }
+
+    let widget = gPalette.get(aWidgetId);
+    if (widget) {
+      widget.currentArea = null;
+      widget.currentPosition = null;
+    }
+
+    gDirty = true;
+    this.saveState();
+
+    this.notifyListeners("onWidgetRemoved", aWidgetId, oldPlacement.area);
+  },
+
+  moveWidgetWithinArea: function(aWidgetId, aPosition) {
+    let oldPlacement = this.getPlacementOfWidget(aWidgetId);
+    if (!oldPlacement) {
+      return;
+    }
+
+    let placements = gPlacements.get(oldPlacement.area);
+    if (aPosition < 0) {
+      aPosition = 0;
+    } else if (aPosition > placements.length - 1) {
+      aPosition = placements.length - 1;
+    }
+
+    if (aPosition == oldPlacement.position) {
+      return;
+    }
+
+    placements.splice(oldPlacement.position, 1);
+    placements.splice(aPosition, 0, aWidgetId);
+
+    let widget = gPalette.get(aWidgetId);
+    if (widget) {
+      widget.currentPosition = aPosition;
+    }
+
+    gDirty = true;
+    this.saveState();
+
+    this.notifyListeners("onWidgetMoved", aWidgetId, oldPlacement.area,
+                         oldPlacement.position, aPosition);
+  },
+
+  // Note that this does not populate gPlacements, which is done lazily so that
+  // the legacy state can be migrated, which is only available once a browser
+  // window is openned.
+  // The panel area is an exception here, since it has no legacy state and is 
+  // built lazily - and therefore wouldn't otherwise result in restoring its
+  // state immediately when a browser window opens, which is important for
+  // other consumers of this API.
+  loadSavedState: function() {
+    let state = null;
+    try {
+      state = Services.prefs.getCharPref(kPrefCustomizationState);
+    } catch (e) {
+      LOG("No saved state found");
+      // This will fail if nothing has been customized, so silently fall back to
+      // the defaults.
+    }
+
+    if (!state) {
+      return;
+    }
+    try {
+      gSavedState = JSON.parse(state);
+    } catch(e) {
+      LOG("Error loading saved UI customization state, falling back to defaults.");
+    }
+
+    if (!("placements" in gSavedState)) {
+      gSavedState.placements = {};
+    }
+
+    gSeenWidgets = new Set(gSavedState.seen || []);
+  },
+
+  restoreStateForArea: function(aArea, aLegacyState) {
+    if (gPlacements.has(aArea)) {
+      // Already restored.
+      return;
+    }
+
+    this.beginBatchUpdate();
+    gRestoring = true;
+
+    let restored = false;
+    gPlacements.set(aArea, []);
+
+    if (gSavedState && aArea in gSavedState.placements) {
+      LOG("Restoring " + aArea + " from saved state");
+      let placements = gSavedState.placements[aArea];
+      for (let id of placements)
+        this.addWidgetToArea(id, aArea);
+      gDirty = false;
+      restored = true;
+    }
+
+    if (!restored && aLegacyState) {
+      LOG("Restoring " + aArea + " from legacy state");
+      for (let id of aLegacyState)
+        this.addWidgetToArea(id, aArea);
+      // Don't override dirty state, to ensure legacy state is saved here and
+      // therefore only used once.
+      restored = true;
+    }
+
+    if (!restored) {
+      LOG("Restoring " + aArea + " from default state");
+      if (gDefaultPlacements.has(aArea)) {
+        let defaults = gDefaultPlacements.get(aArea);
+        for (let id of defaults)
+          this.addWidgetToArea(id, aArea);
+      }
+      gDirty = false;
+    }
+
+    // Finally, add widgets to the area that were added before the it was able
+    // to be restored. This can occur when add-ons register widgets for a
+    // lazily-restored area before it's been restored.
+    if (gFuturePlacements.has(aArea)) {
+      for (let id of gFuturePlacements.get(aArea))
+        this.addWidgetToArea(id, aArea);
+    }
+
+    LOG("Placements for " + aArea + ":\n\t" + gPlacements.get(aArea).join("\n\t"));
+
+    gRestoring = false;
+    this.endBatchUpdate();
+  },
+
+  saveState: function() {
+    if (gInBatch || !gDirty) {
+      return;
+    }
+    let state = { placements: gPlacements,
+                  seen: gSeenWidgets };
+
+    LOG("Saving state.");
+    let serialized = JSON.stringify(state, this.serializerHelper);
+    LOG("State saved as: " + serialized);
+    Services.prefs.setCharPref(kPrefCustomizationState, serialized);
+    gDirty = false;
+  },
+
+  serializerHelper: function(aKey, aValue) {
+    if (typeof aValue == "object" && aValue.constructor.name == "Map") {
+      let result = {};
+      for (let [mapKey, mapValue] of aValue)
+        result[mapKey] = mapValue;
+      return result;
+    }
+
+    if (typeof aValue == "object" && aValue.constructor.name == "Set") {
+      return [i for (i of aValue)];
+    }
+
+    return aValue;
+  },
+
+  beginBatchUpdate: function() {
+    gInBatch = true;
+  },
+
+  endBatchUpdate: function(aForceSave) {
+    gInBatch = false;
+    if (aForceSave === true) {
+      gDirty = true;
+    }
+    this.saveState();
+  },
+
+  addListener: function(aListener) {
+    gListeners.add(aListener);
+  },
+
+  removeListener: function(aListener) {
+    if (aListener == this) {
+      return;
+    }
+
+    gListeners.delete(aListener);
+  },
+
+  notifyListeners: function(aEvent, ...aArgs) {
+    if (gRestoring) {
+      return;
+    }
+
+    for (let listener of gListeners) {
+      try {
+        if (aEvent in listener) {
+          listener[aEvent].apply(listener, aArgs);
+        }
+      } catch (e) {
+        Cu.reportError(e + " -- " + e.fileName + ":" + e.lineNumber);
+      }
+    }
+  },
+
+  createWidget: function(aProperties) {
+    let widget = this.normalizeWidget(aProperties, CustomizableUI.SOURCE_EXTERNAL);
+    //XXXunf This should probably throw.
+    if (!widget) {
+      return;
+    }
+
+    gPalette.set(widget.id, widget);
+    this.notifyListeners("onWidgetCreated", widget.id);
+
+    if (widget.defaultArea) {
+      let area = widget.defaultArea;
+      if (gDefaultPlacements.has(area)) {
+        gDefaultPlacements.get(area).push(widget.id);
+      } else {
+        gDefaultPlacements.set(area, [widget.id]);
+      }
+    }
+
+    // Look through previously saved state to see if we're restoring a widget.
+    let seenAreas = new Set();
+    for (let [area, placements] of gPlacements) {
+      seenAreas.add(area);
+      let index = gPlacements.get(area).indexOf(widget.id);
+      if (index != -1) {
+        widget.currentArea = area;
+        widget.currentPosition = index;
+        break;
+      }
+    }
+
+    // Also look at saved state data directly in areas that haven't yet been
+    // restored. Can't rely on this for restored areas, as they may have
+    // changed.
+    if (!widget.currentArea && gSavedState) {
+      for (let area of Object.keys(gSavedState.placements)) {
+        if (seenAreas.has(area)) {
+          continue;
+        }
+
+        let index = gSavedState.placements[area].indexOf(widget.id);
+        if (index != -1) {
+          widget.currentArea = area;
+          widget.currentPosition = index;
+          break;
+        }
+      }
+    }
+
+    // If we're restoring the widget to it's old placement, fire off the
+    // onWidgetAdded event - our own handler will take care of adding it to
+    // any build areas.
+    if (widget.currentArea) {
+      this.notifyListeners("onWidgetAdded", widget.id, widget.currentArea,
+                           widget.currentPosition);
+    } else {
+      let autoAdd = true;
+      try {
+        autoAdd = Services.prefs.getBoolPref(kPrefCustomizationAutoAdd);
+      } catch (e) {}
+
+      // If the widget doesn't have an existing placement, and it hasn't been
+      // seen before, then add it to its default area so it can be used.
+      if (autoAdd && !widget.currentArea && !gSeenWidgets.has(widget.id)) {
+        this.beginBatchUpdate();
+        gSeenWidgets.add(widget.id);
+
+        if (widget.defaultArea) {
+          if (this.isAreaLazy(widget.defaultArea)) {
+            gFuturePlacements.get(widget.defaultArea).set(widget.id);
+          } else {
+            this.addWidgetToArea(widget.id, widget.defaultArea);
+          }
+        }
+
+        this.endBatchUpdate(true);
+      }
+    }
+
+    return widget.id;
+  },
+
+  createBuiltinWidget: function(aData) {
+    // This should only ever be called on startup, before any windows are
+    // openned - so we know there's no build areas to handle. Also, builtin
+    // widgets are expected to be (mostly) static, so shouldn't affect the
+    // current placement settings.
+    let widget = this.normalizeWidget(aData, CustomizableUI.SOURCE_BUILTIN);
+    if (!widget) {
+      ERROR("Error creating builtin widget: " + aData.id);
+      return;
+    }
+
+    LOG("Creating built-in widget with id: " + widget.id);
+    gPalette.set(widget.id, widget);
+  },
+
+  // Returns true if the area will eventually lazily restore (but hasn't yet).
+  isAreaLazy: function(aArea) {
+    if (gPlacements.has(aArea)) {
+      return false;
+    }
+    return gAreas.get(aArea).has("legacy");
+  },
+
+  //XXXunf Log some warnings here, when the data provided isn't up to scratch.
+  normalizeWidget: function(aData, aSource) {
+    let widget = {
+      source: aSource || "addon",
+      instances: new Map(),
+      currentArea: null,
+      defaultArea: null,
+      allowedAreas: [],
+      shortcut: null,
+      description: null,
+      icons: {}
+    };
+
+    if (typeof aData.id != "string" || !/^[a-z0-9-_]{1,}$/i.test(aData.id)) {
+      ERROR("Given an illegal id in normalizeWidget: " + aData.id);
+      return null;
+    }
+
+    const kReqStringProps = ["id", "name"];
+    for (let prop of kReqStringProps) {
+      if (typeof aData[prop] != "string") {
+        return null;
+      }
+      widget[prop] = aData[prop];
+    }
+
+    const kOptStringProps = ["description", "shortcut"];
+    for (let prop of kOptStringProps) {
+      if (typeof aData[prop] == "string") {
+        widget[prop] = aData[prop];
+      }
+    }
+
+    if (aData.defaultArea && gAreas.has(aData.defaultArea)) {
+      widget.defaultArea = aData.defaultArea;
+    }
+
+    if (Array.isArray(aData.allowedAreas)) {
+      widget.allowedAreas =
+        [area for (area of aData.allowedAreas) if (gAreas.has(area))];
+    }
+
+    if ("type" in aData && gSupportedWidgetTypes.has(aData.type)) {
+      widget.type = aData.type;
+    } else {
+      widget.type = "button";
+    }
+
+    widget.disabled = aData.disabled === true;
+
+    if (typeof aData.icons == "object") {
+      let sizes = Object.keys(aData.icons);
+      for (let size of sizes) {
+        if (size == parseInt(size, 10)) {
+          widget.icons[size] = aData.icons[size];
+        }
+      }
+    }
+
+    if (widget.type == "button") {
+      widget.onCommand = typeof aData.onCommand == "function" ?
+                           aData.onCommand :
+                           null;
+    } else if (widget.type == "view") {
+      if (typeof aData.viewId != "string") {
+        ERROR("Expected a string for widget " + widget.id + " viewId, but got "
+              + aData.viewId);
+        return null;
+      }
+      widget.viewId = aData.viewId;
+
+      widget.onViewShowing = typeof aData.onViewShowing == "function" ?
+                                 aData.onViewShowing :
+                                 null;
+      widget.onViewHiding = typeof aData.onViewHiding == "function" ? 
+                                 aData.onViewHiding :
+                                 null;
+    }
+
+    if (gPalette.has(widget.id)) {
+      return null;
+    }
+
+    return widget;
+  },
+
+  destroyWidget: function(aWidgetId) {
+    let widget = gPalette.get(aWidgetId);
+    if (!widget) {
+      return;
+    }
+
+    // This will not remove the widget from gPlacements - we want to keep the
+    // setting so the widget gets put back in it's old position if/when it
+    // returns.
+
+    let area = widget.currentArea;
+    if (area) {
+      let buildArea = gBuildAreas.get(area);
+      for (let buildNode of buildArea) {
+        let widgetNode = buildNode.ownerDocument.getElementById(aWidgetId);
+        if (widgetNode) {
+          widgetNode.parentNode.removeChild(widgetNode);
+        }
+        for (let eventName of kSubviewEvents) {
+          let handler = "on" + eventName;
+          if (typeof widget[handler] == "function") {
+            viewNode.removeEventListener(eventName, widget[handler], false);
+          }
+        }
+      }
+    }
+
+    gPalette.delete(aWidgetId);
+
+    this.notifyListeners("onWidgetDestroyed", aWidgetId);
+  },
+
+  registerManifest: function(aBaseLocation, aData) {
+    let tokens = aData.split(/\s+/);
+    let directive = tokens.shift();
+    if (directive != "widget") {
+      return;
+    }
+
+    for (let [id, widget] of gPalette) {
+      if (widget.source == aBaseLocation.spec) {
+        return; // Already registered.
+      }
+    }
+
+    let uri = NetUtil.newURI(tokens.shift(), null, aBaseLocation);
+
+    dump("\tNew widget! " + uri.spec + "\n");
+
+    let data = "";
+    try {
+      if (uri.schemeIs("jar")) {
+        data = this.readManifestFromJar(uri);
+      } else {
+        data = this.readManifestFromFile(uri);
+      }
+    }
+    catch (e) {
+      Cu.reportError(e);
+      return;
+    }
+    data = JSON.parse(data);
+    data.source = aBaseLocation.spec;
+
+    this.createWidget(data);
+  },
+
+  // readManifestFromJar and readManifestFromFile from ChromeManifestParser.jsm.
+  readManifestFromJar: function(aURI) {
+    let data = "";
+    let entries = [];
+    let readers = [];
+
+    try {
+      // Deconstrict URI, which can be nested jar: URIs. 
+      let uri = aURI.clone();
+      while (uri instanceof Ci.nsIJARURI) {
+        entries.push(uri.JAREntry);
+        uri = uri.JARFile;
+      }
+
+      // Open the base jar.
+      let reader = Cc["@mozilla.org/libjar/zip-reader;1"]
+                     .createInstance(Ci.nsIZipReader);
+      reader.open(uri.QueryInterface(Ci.nsIFileURL).file);
+      readers.push(reader);
+
+      // Open the nested jars.
+      for (let i = entries.length - 1; i > 0; i--) {
+        let innerReader = Cc["@mozilla.org/libjar/zip-reader;1"].
+                          createInstance(Ci.nsIZipReader);
+        innerReader.openInner(reader, entries[i]);
+        readers.push(innerReader);
+        reader = innerReader;
+      }
+
+      // First entry is the actual file we want to read.
+      let zis = reader.getInputStream(entries[0]);
+      data = NetUtil.readInputStreamToString(zis, zis.available());
+    }
+    finally {
+      // Close readers in reverse order.
+      for (let i = readers.length - 1; i >= 0; i--) {
+        readers[i].close();
+        //XXXunf Don't think this is needed, but need to double check.
+        //flushJarCache(readers[i].file);
+      }
+    }
+
+    return data;
+  },
+
+  readManifestFromFile: function(aURI) {
+    let file = aURI.QueryInterface(Ci.nsIFileURL).file;
+    if (!file.exists() || !file.isFile()) {
+      return "";
+    }
+
+    let data = "";
+    let fis = Cc["@mozilla.org/network/file-input-stream;1"]
+                .createInstance(Ci.nsIFileInputStream);
+    try {
+      fis.init(file, -1, -1, false);
+      data = NetUtil.readInputStreamToString(fis, fis.available());
+    } finally {
+      fis.close();
+    }
+    return data;
+  },
+
+  getCustomizeTargetForArea: function(aArea, aWindow) {
+    let buildAreaNodes = gBuildAreas.get(aArea);
+    if (!buildAreaNodes) {
+      throw new Error("No build area nodes registered for " + aArea);
+    }
+
+    for (let node of buildAreaNodes) {
+      if (node.ownerDocument.defaultView === aWindow) {
+        return node.customizationTarget ? node.customizationTarget : node;
+      }
+    }
+
+    throw new Error("Could not find any window nodes for area " + aArea);
+  },
+
+  reset: function() {
+    Services.prefs.clearUserPref(kPrefCustomizationState);
+    LOG("State reset");
+  },
+
+  _addParentFlex: function(aElement) {
+    // If necessary, add flex to accomodate new child.
+    if (aElement.hasAttribute("flex")) {
+      let parent = aElement.parentNode;
+      let parentFlex = parent.hasAttribute("flex") ? parseInt(parent.getAttribute("flex"), 10) : 0;
+      let elementFlex = parseInt(aElement.getAttribute("flex"), 10);
+      parent.setAttribute("flex", parentFlex + elementFlex);
+    }
+  },
+
+  _removeParentFlex: function(aElement) {
+    if (aElement.parentNode.hasAttribute("flex") && aElement.hasAttribute("flex")) {
+      let parent = aElement.parentNode;
+      let parentFlex = parseInt(parent.getAttribute("flex"), 10);
+      let elementFlex = parseInt(aElement.getAttribute("flex"), 10);
+      parent.setAttribute("flex", Math.max(0, parentFlex - elementFlex));
+    }
+  }
+};
+Object.freeze(CustomizableUIInternal);
+
+this.CustomizableUI = {
+  get AREA_PANEL() "PanelUI-contents",
+  get AREA_NAVBAR() "nav-bar",
+
+  get PROVIDER_XUL() "xul",
+  get PROVIDER_API() "api",
+  get PROVIDER_SPECIAL() "special",
+
+  get SOURCE_BUILTIN() "builtin",
+  get SOURCE_EXTERNAL() "external",
+
+  get TYPE_BUTTON() "button",
+
+  addListener: function(aListener) {
+    CustomizableUIInternal.addListener(aListener);
+  },
+  removeListener: function(aListener) {
+    CustomizableUIInternal.removeListener(aListener);
+  },
+  registerArea: function(aName, aProperties) {
+    CustomizableUIInternal.registerArea(aName, aProperties);
+  },
+  //XXXunf registerToolbarNode / registerToolbarInstance ?
+  registerToolbar: function(aToolbar) {
+    CustomizableUIInternal.registerToolbar(aToolbar);
+  },
+  registerMenuPanel: function(aPanel) {
+    CustomizableUIInternal.registerMenuPanel(aPanel);
+  },
+  addWidgetToArea: function(aWidgetId, aArea, aPosition) {
+    CustomizableUIInternal.addWidgetToArea(aWidgetId, aArea, aPosition);
+  },
+  removeWidgetFromArea: function(aWidgetId) {
+    CustomizableUIInternal.removeWidgetFromArea(aWidgetId);
+  },
+  moveWidgetWithinArea: function(aWidgetId, aPosition) {
+    CustomizableUIInternal.moveWidgetWithinArea(aWidgetId, aPosition);
+  },
+  beginBatchUpdate: function() {
+    CustomizableUIInternal.beginBatchUpdate();
+  },
+  endBatchUpdate: function(aForceSave) {
+    CustomizableUIInternal.endBatchUpdate(aForceSave);
+  },
+  createWidget: function(aProperties) {
+    return CustomizableUIInternal.wrapWidget(
+      CustomizableUIInternal.createWidget(aProperties)
+    );
+  },
+  destroyWidget: function(aWidgetId) {
+    CustomizableUIInternal.destroyWidget(aWidgetId);
+  },
+  getWidget: function(aWidgetId) {
+    return CustomizableUIInternal.wrapWidget(aWidgetId);
+  },
+  getUnusedWidgets: function(aWindowPalette) {
+    return CustomizableUIInternal.getUnusedWidgets(aWindowPalette).map(
+      CustomizableUIInternal.wrapWidget,
+      CustomizableUIInternal
+    );
+  },
+  getWidgetsInArea: function(aArea) {
+    if (!gAreas.has(aArea)) {
+      throw new Error("Unknown customization area");
+    }
+    if (!gPlacements.has(aArea)) {
+      throw new Error("Area not yet restored");
+    }
+
+    return gPlacements.get(aArea).map(
+      CustomizableUIInternal.wrapWidget,
+      CustomizableUIInternal
+    );
+  },
+  get areas() {
+    return [area for ([area, props] of gAreas)];
+  },
+  getCustomizeTargetForArea: function(aArea, aWindow) {
+    return CustomizableUIInternal.getCustomizeTargetForArea(aArea, aWindow);
+  },
+  reset: function() {
+    CustomizableUIInternal.reset();
+  },
+  getPlacementOfWidget: function(aWidgetId) {
+    return CustomizableUIInternal.getPlacementOfWidget(aWidgetId);
+  }
+};
+Object.freeze(this.CustomizableUI);
+
+
+/**
+ * All external consumers of widgets are really interacting with these wrappers
+ * which provide a common interface.
+ */
+
+/**
+ * WidgetGroupWrapper is the common interface for interacting with an entire
+ * widget group - AKA, all instances of a widget across a series of windows.
+ * This particular wrapper is only used for widgets created via the provider
+ * API.
+ */
+function WidgetGroupWrapper(aWidget) {
+  this.isGroup = true;
+
+  const kBareProps = ["id", "source", "type", "disabled", "name", "description"];
+  for (let prop of kBareProps) {
+    let propertyName = prop;
+    this.__defineGetter__(propertyName, function() aWidget[propertyName]);
+  }
+
+  this.__defineGetter__("provider", function() CustomizableUI.PROVIDER_API);
+
+  this.__defineSetter__("disabled", function(aValue) {
+    aValue = !!aValue;
+    aWidget.disabled = aValue;
+    for (let [,instance] of aWidget.instances) {
+      instance.disabled = aValue;
+    }
+  });
+  
+  this.forWindow = function WidgetGroupWrapper_forWindow(aWindow) {
+    let instance = aWidget.instances.get(aWindow.document);
+    if (!instance) {
+      instance = CustomizableUIInternal.buildWidget(aWindow.document,
+                                                    null,
+                                                    aWidget);
+    }
+
+    let wrapper = gWrapperCache.get(instance);
+    if (!wrapper) {
+      wrapper = new WidgetSingleWrapper(aWidget, instance);
+      gWrapperCache.set(instance, wrapper);
+    }
+    return wrapper;
+  };
+
+  Object.freeze(this);
+}
+
+/**
+ * A WidgetSingleWrapper is a wrapper around a single instance of a widget in
+ * a particular window.
+ */
+function WidgetSingleWrapper(aWidget, aNode) {
+  this.isGroup = false;
+
+  this.node = aNode;
+  this.provider = CustomizableUI.PROVIDER_API;
+
+  const kGlobalProps = ["id", "type"];
+  for (let prop of kGlobalProps) {
+    this[prop] = aWidget[prop];
+  }
+
+  const nodeProps = ["label", "description"];
+  for (let prop of nodeProps) {
+    let propertyName = prop;
+    // Look at the node for these, instead of the widget data, to ensure the
+    // wrapper always reflects this live instance.
+    this.__defineGetter__(propertyName,
+                          function() aNode.getAttribute(propertyName));
+  }
+
+  this.__defineGetter__("disabled", function() aNode.disabled);
+  this.__defineSetter__("disabled", function(aValue) {
+    aNode.disabled = !!aValue;
+  });
+
+  Object.freeze(this);
+}
+
+/**
+ * XULWidgetGroupWrapper is the common interface for interacting with an entire
+ * widget group - AKA, all instances of a widget across a series of windows.
+ * This particular wrapper is only used for widgets created via the old-school
+ * XUL method (overlays, or programmatically injecting toolbaritems, or other
+ * such things).
+ */
+//XXXunf Going to need to hook this up to some events to keep it all live.
+function XULWidgetGroupWrapper(aWidgetId) {
+  this.isGroup = true;
+
+  let nodes = [];
+
+  let placement = CustomizableUIInternal.getPlacementOfWidget(aWidgetId);
+  if (placement) {
+    let buildAreas = gBuildAreas.get(placement.area) || [];
+    for (let areaNode of buildAreas)
+      nodes.push(areaNode.ownerDocument.getElementById(aWidgetId));
+  }
+
+  this.id = aWidgetId;
+  this.type = "custom";
+  this.provider = CustomizableUI.PROVIDER_XUL;
+
+  this.forWindow = function XULWidgetGroupWrapper_forWindow(aWindow) {
+    let instance = aWindow.document.getElementById(aWidgetId);
+    if (!instance) {
+      // Toolbar palettes aren't part of the document, so elements in there
+      // won't be found via document.getElementById().
+      instance = aWindow.gNavToolbox.palette.querySelector("#" + aWidgetId);
+    }
+
+    let wrapper = gWrapperCache.get(instance);
+    if (!wrapper) {
+      wrapper = new XULWidgetSingleWrapper(aWidgetId, instance);
+      gWrapperCache.set(instance, wrapper);
+    }
+    return wrapper;
+  };
+
+  Object.freeze(this);
+}
+
+/**
+ * A XULWidgetSingleWrapper is a wrapper around a single instance of a XUL 
+ * widget in a particular window.
+ */
+function XULWidgetSingleWrapper(aWidgetId, aNode) {
+  this.isGroup = false;
+
+  this.id = aWidgetId;
+  this.type = "custom";
+  this.provider = CustomizableUI.PROVIDER_XUL;
+
+  this.node = aNode;
+
+  Object.freeze(this);
+}
+
+
+CustomizableUIInternal.initialize();
new file mode 100644
--- /dev/null
+++ b/browser/modules/CustomizeMode.jsm
@@ -0,0 +1,724 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["CustomizeMode"];
+
+const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+
+const kPrefCustomizationDebug = "browser.uiCustomization.debug";
+const kPaletteId = "customization-palette";
+const kAboutURI = "about:customizing";
+
+let gDebug = false;
+try {
+  gDebug = Services.prefs.getBoolPref(kPrefCustomizationDebug);
+} catch (e) {}
+
+function LOG(str) {
+  if (gDebug) {
+    Services.console.logStringMessage(str);
+  }
+}
+
+function ERROR(aMsg) Cu.reportError("[CustomizeMode] " + aMsg);
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource:///modules/CustomizableUI.jsm");
+
+function CustomizeMode(aWindow) {
+  this.window = aWindow;
+  this.document = aWindow.document;
+  this.browser = aWindow.gBrowser;
+};
+
+CustomizeMode.prototype = {
+  _changed: false,
+  window: null,
+  document: null,
+  // areas is used to cache the customizable areas when in customization mode.
+  areas: null,
+  // When in customizing mode, we swap out the reference to the invisible
+  // palette in gNavToolbox.palette for our visiblePalette. This way, for the
+  // customizing browser window, when widgets are removed from customizable
+  // areas and added to the palette, they're added to the visible palette.
+  // _stowedPalette is a reference to the old invisible palette so we can
+  // restore gNavToolbox.palette to its original state after exiting
+  // customization mode.
+  _stowedPalette: null,
+  _dragOverItem: null,
+  _customizing: false,
+
+  init: function() {
+    // There are two palettes - there's the palette that can be overlayed with
+    // toolbar items in browser.xul. This is invisible, and never seen by the
+    // user. Then there's the visible palette, which gets populated and displayed
+    // to the user when in customizing mode.
+    this.visiblePalette = this.document.getElementById(kPaletteId);
+
+    this.browser.tabContainer.addEventListener("TabSelect", this, false);
+    this.browser.addTabsProgressListener(this);
+  },
+
+  uninit: function() {
+    this.browser.tabContainer.removeEventListener("TabSelect", this, false);
+    this.browser.removeTabsProgressListener(this);
+  },
+
+  enter: function() {
+    let window = this.window;
+    let document = this.document;
+
+    // We don't need to switch to kAboutURI, or open a new tab at
+    // kAboutURI if we're already on it.
+    if (this.browser.selectedBrowser.currentURI.spec != kAboutURI) {
+      this.window.switchToTabHavingURI(kAboutURI, true);
+    }
+
+    CustomizableUI.addListener(this);
+
+    // The menu panel is lazy, and registers itself when the popup shows. We
+    // need to force the menu panel to register itself, or else customization
+    // is really not going to work.
+    window.PanelUI.ensureRegistered();
+
+    // Add a keypress listener and click listener to the tab-view-deck so that
+    // we can quickly exit customization mode when pressing ESC or clicking on
+    // the blueprint outside the customization container.
+    let deck = document.getElementById("tab-view-deck");
+    deck.addEventListener("keypress", this, false);
+    deck.addEventListener("click", this, false);
+
+    // Same goes for the menu button - if we're customizing, a click to the
+    // menu button means a quick exit from customization mode.
+    window.PanelUI.menuButton.addEventListener("click", this, false);
+    window.PanelUI.menuButton.disabled = true;
+
+    // Let everybody in this window know that we're about to customize.
+    let evt = document.createEvent("CustomEvent");
+    evt.initCustomEvent("CustomizationStart", true, true, window);
+    window.dispatchEvent(evt);
+
+    let customizer = document.getElementById("customization-container");
+    customizer.parentNode.selectedPanel = customizer;
+
+    window.PanelUI.hide();
+    // Move the mainView in the panel to the holder so that we can see it
+    // while customizing.
+    let panelHolder = document.getElementById("customization-panelHolder");
+    panelHolder.appendChild(window.PanelUI.mainView);
+
+
+    let self = this;
+    deck.addEventListener("transitionend", function customizeTransitionEnd() {
+      deck.removeEventListener("transitionend", customizeTransitionEnd);
+
+      // Add drag-and-drop event handlers to all of the customizable areas.
+      self.areas = [];
+      for (let area of CustomizableUI.areas) {
+        let target = CustomizableUI.getCustomizeTargetForArea(area, window);
+        target.addEventListener("dragstart", self);
+        target.addEventListener("dragover", self);
+        target.addEventListener("dragexit", self);
+        target.addEventListener("drop", self);
+        for (let child of target.children) {
+          self.wrapToolbarItem(child, getPlaceForItem(child));
+        }
+        self.areas.push(target);
+      }
+
+      self.populatePalette();
+    });
+
+    this.visiblePalette.addEventListener("dragstart", this);
+    this.visiblePalette.addEventListener("dragover", this);
+    this.visiblePalette.addEventListener("dragexit", this);
+    this.visiblePalette.addEventListener("drop", this);
+
+    document.documentElement.setAttribute("customizing", true);
+    this._customizing = true;
+  },
+
+  exit: function() {
+    CustomizableUI.removeListener(this);
+
+    let deck = this.document.getElementById("tab-view-deck");
+    deck.removeEventListener("keypress", this, false);
+    deck.removeEventListener("click", this, false);
+    this.window.PanelUI.menuButton.removeEventListener("click", this, false);
+    this.window.PanelUI.menuButton.disabled = false;
+
+    this.depopulatePalette();
+
+    this.visiblePalette.removeEventListener("dragstart", this);
+    this.visiblePalette.removeEventListener("dragover", this);
+    this.visiblePalette.removeEventListener("dragexit", this);
+    this.visiblePalette.removeEventListener("drop", this);
+
+    let window = this.window;
+    let document = this.document;
+
+    if (this._changed) {
+      // XXXmconley: At first, it seems strange to also persist the old way with
+      //             currentset - but this might actually be useful for switching
+      //             to old builds. We might want to keep this around for a little
+      //             bit.
+      this.persistCurrentSets();
+    }
+
+    document.documentElement.removeAttribute("customizing");
+
+    for (let target of this.areas) {
+      for (let toolbarItem of target.children) {
+        this.unwrapToolbarItem(toolbarItem);
+      }
+      target.removeEventListener("dragstart", this);
+      target.removeEventListener("dragover", this);
+      target.removeEventListener("dragexit", this);
+      target.removeEventListener("drop", this);
+    }
+
+    // And drop all area references.
+    this.areas = [];
+
+    // Let everybody in this window know that we're finished customizing.
+    let evt = document.createEvent("CustomEvent");
+    evt.initCustomEvent("CustomizationEnd", true, true, {changed: this._changed});
+    window.dispatchEvent(evt);
+
+    window.PanelUI.replaceMainView(window.PanelUI.mainView);
+
+    let browser = document.getElementById("browser");
+    browser.parentNode.selectedPanel = browser;
+
+    if (this.browser.selectedBrowser.currentURI.spec == kAboutURI) {
+      let custBrowser = this.browser.selectedBrowser;
+      if (custBrowser.canGoBack) {
+        // If there's history to this tab, just go back.
+        custBrowser.goBack();
+      } else {
+        let customizationTab = this.browser.selectedTab;
+        if (this.browser.browsers.length == 1) {
+          this.window.BrowserOpenTab();
+        }
+        this.browser.removeTab(customizationTab);
+      }
+    }
+
+    this._changed = false;
+    this._customizing = false;
+  },
+
+  populatePalette: function() {
+    let toolboxPalette = this.window.gNavToolbox.palette;
+
+    let unusedWidgets = CustomizableUI.getUnusedWidgets(toolboxPalette);
+    for (let widget of unusedWidgets) {
+      let paletteItem = this.makePaletteItem(widget, "palette");
+      this.visiblePalette.appendChild(paletteItem);
+    }
+
+    this._stowedPalette = this.window.gNavToolbox.palette;
+    this.window.gNavToolbox.palette = this.visiblePalette;
+  },
+
+  //XXXunf Maybe this should use -moz-element instead of wrapping the node?
+  //       Would ensure no weird interactions/event handling from original node,
+  //       and makes it possible to put this in a lazy-loaded iframe/real tab
+  //       while still getting rid of the need for overlays.
+  makePaletteItem: function(aWidget, aPlace) {
+    let widgetNode = aWidget.forWindow(this.window).node;
+    let wrapper = this.createWrapper(widgetNode, aPlace);
+    wrapper.appendChild(widgetNode);
+    return wrapper;
+  },
+
+  depopulatePalette: function() {
+    let wrapper = this.visiblePalette.firstChild;
+
+    while (wrapper) {
+      let widgetNode = wrapper.firstChild;
+
+      let provider = CustomizableUI.getWidget(widgetNode.id);
+      // If provider is PROVIDER_SPECIAL, then it just gets thrown away.
+      if (provider = CustomizableUI.PROVIDER_XUL) {
+        if (wrapper.hasAttribute("itemdisabled")) {
+          widgetNode.disabled = true;
+        }
+
+        if (wrapper.hasAttribute("itemchecked")) {
+          widgetNode.checked = true;
+        }
+
+        if (wrapper.hasAttribute("itemcommand")) {
+          let commandID = wrapper.getAttribute("itemcommand");
+          widgetNode.setAttribute("command", commandID);
+
+          // Ensure node is in sync with its command after customizing.
+          let command = this.document.getElementById(commandID);
+          if (command && command.hasAttribute("disabled")) {
+            widgetNode.setAttribute("disabled",
+                                    command.getAttribute("disabled"));
+          }
+        }
+
+        this._stowedPalette.appendChild(widgetNode);
+      } else if (provider = CustomizableUI.PROVIDER_API) {
+        //XXXunf Currently this doesn't destroy the (now unused) node. It would
+        //       be good to do so, but we need to keep strong refs to it in
+        //       CustomizableUI (can't iterate of WeakMaps), and there's the
+        //       question of what behavior wrappers should have if consumers
+        //       keep hold of them.
+        //widget.destroyInstance(widgetNode);
+      }
+
+      this.visiblePalette.removeChild(wrapper);
+      wrapper = this.visiblePalette.firstChild;
+    }
+    this.window.gNavToolbox.palette = this._stowedPalette;
+  },
+
+  wrapToolbarItem: function(aNode, aPlace) {
+    let wrapper = this.createWrapper(aNode, aPlace);
+    // It's possible that this toolbar node is "mid-flight" and doesn't have
+    // a parent, in which case we skip replacing it. This can happen if a
+    // toolbar item has been dragged into the palette. In that case, we tell
+    // CustomizableUI to remove the widget from its area before putting the
+    // widget in the palette - so the node will have no parent.
+    if (aNode.parentNode) {
+      aNode = aNode.parentNode.replaceChild(wrapper, aNode);
+    }
+    wrapper.appendChild(aNode);
+    return wrapper;
+  },
+
+  createWrapper: function(aNode, aPlace) {
+    let wrapper = this.document.createElement("toolbarpaletteitem");
+
+    // "place" is used by toolkit to add the toolbarpaletteitem-palette
+    // binding to a toolbarpaletteitem, which gives it a label node for when
+    // it's sitting in the palette.
+    wrapper.setAttribute("place", aPlace);
+
+    // Ensure the wrapped item doesn't look like it's in any special state, and
+    // can't be interactved with when in the customization palette.
+    if (aNode.hasAttribute("command")) {
+      wrapper.setAttribute("itemcommand", aNode.getAttribute("command"));
+      aNode.removeAttribute("command");
+    }
+
+    if (aNode.checked) {
+      wrapper.setAttribute("itemchecked", "true");
+      aNode.checked = false;
+    }
+
+    if (aNode.disabled) {
+      wrapper.setAttribute("itemdisabled", "true");
+      aNode.disabled = false;
+    }
+
+    if (aNode.hasAttribute("id")) {
+      wrapper.setAttribute("id", "wrapper-" + aNode.getAttribute("id"));
+    }
+
+    if (aNode.hasAttribute("title")) {
+      wrapper.setAttribute("title", aNode.getAttribute("title"));
+    } else if (aNode.hasAttribute("label")) {
+      wrapper.setAttribute("title", aNode.getAttribute("label"));
+    }
+
+    if (aNode.hasAttribute("flex")) {
+      wrapper.setAttribute("flex", aNode.getAttribute("flex"));
+    }
+
+    wrapper.addEventListener("mousedown", this);
+    wrapper.addEventListener("mouseup", this);
+
+    return wrapper;
+  },
+
+  unwrapToolbarItem: function(aWrapper) {
+    aWrapper.removeEventListener("mousedown", this);
+    aWrapper.removeEventListener("mouseup", this);
+
+    let toolbarItem = aWrapper.firstChild;
+
+    if (aWrapper.hasAttribute("itemdisabled")) {
+      toolbarItem.disabled = true;
+    }
+
+    if (aWrapper.hasAttribute("itemchecked")) {
+      toolbarItem.checked = true;
+    }
+
+    if (aWrapper.hasAttribute("itemcommand")) {
+      let commandID = aWrapper.getAttribute("itemcommand");
+      toolbarItem.setAttribute("command", commandID);
+
+      //XXX Bug 309953 - toolbarbuttons aren't in sync with their commands after customizing
+      let command = this.document.getElementById(commandID);
+      if (command && command.hasAttribute("disabled")) {
+        toolbarItem.setAttribute("disabled", command.getAttribute("disabled"));
+      }
+    }
+
+    if (aWrapper.parentNode) {
+      aWrapper.parentNode.replaceChild(toolbarItem, aWrapper);
+    }
+    return toolbarItem;
+  },
+
+  //XXXjaws This doesn't handle custom toolbars.
+  //XXXmconley While CustomizableUI.jsm uses prefs to preserve state, we might
+  //           also want to (try) persisting with currentset as well to make it
+  //           less painful to switch to older builds.
+  persistCurrentSets: function()  {
+    //XXXjaws The toolbar bindings that are included in this changeset (/browser/base/content/toolbar.xml)
+    //        don't implement currentSet. They probably need to inherit the toolkit bindings.
+    return;
+
+    let document = this.document;
+    let toolbar = document.getElementById("nav-bar");
+
+    // Calculate currentset and store it in the attribute.
+    let currentSet = toolbar.currentSet;
+    toolbar.setAttribute("currentset", currentSet);
+
+    // Persist the currentset attribute directly on hardcoded toolbars.
+    document.persist(toolbar.id, "currentset");
+  },
+
+  reset: function() {
+    CustomizableUI.reset();
+  },
+
+  onWidgetMoved: function(aWidgetId, aArea, aOldPosition, aNewPosition) {
+    this._changed = true;
+  },
+
+  onWidgetAdded: function(aWidgetId, aArea, aPosition) {
+    this._changed = true;
+  },
+
+  onWidgetRemoved: function(aWidgetId, aArea) {
+    this._changed = true;
+  },
+
+  onWidgetCreated: function(aWidgetId) {
+  },
+
+  onWidgetDestroyed: function(aWidgetId) {
+  },
+
+  handleEvent: function(aEvent) {
+    switch(aEvent.type) {
+      case "dragstart":
+        this._onDragStart(aEvent);
+        break;
+      case "dragover":
+        this._onDragOver(aEvent);
+        break;
+      case "drop":
+        this._onDragDrop(aEvent);
+        break;
+      case "dragexit":
+        this._onDragExit(aEvent);
+        break;
+      case "mousedown":
+        this._onMouseDown(aEvent);
+        break;
+      case "mouseup":
+        this._onMouseUp(aEvent);
+        break;
+      case "keypress":
+        if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE) {
+          this.exit();
+        }
+        break;
+      case "click":
+        if (aEvent.button == 0 &&
+            (aEvent.originalTarget == this.window.PanelUI.menuButton) ||
+            (aEvent.originalTarget == this.document.getElementById("tab-view-deck"))) {
+          this.exit();
+          aEvent.preventDefault();
+        }
+        break;
+      case "TabSelect":
+        this._onTabSelect(aEvent);
+        break;
+    }
+  },
+
+  _onDragStart: function(aEvent) {
+    __dumpDragData(aEvent);
+    let item = aEvent.target;
+    while (item && item.localName != "toolbarpaletteitem") {
+      if (item.localName == "toolbar") {
+        return;
+      }
+      item = item.parentNode;
+    }
+
+    let dt = aEvent.dataTransfer;
+    let documentId = aEvent.target.ownerDocument.documentElement.id;
+    dt.setData("text/toolbarwrapper-id/" + documentId, item.firstChild.id);
+    dt.effectAllowed = "move";
+  },
+
+  _onDragOver: function(aEvent) {
+    __dumpDragData(aEvent);
+
+    let document = aEvent.target.ownerDocument;
+    let documentId = document.documentElement.id;
+    if (!aEvent.dataTransfer.types.contains("text/toolbarwrapper-id/"
+                                            + documentId.toLowerCase())) {
+      return;
+    }
+
+    let draggedItemId = aEvent.dataTransfer.getData("text/toolbarwrapper-id/" + documentId);
+    let draggedWrapper = document.getElementById("wrapper-" + draggedItemId);
+    let targetNode = aEvent.target;
+    let targetParent = targetNode.parentNode;
+    let targetArea = this._getCustomizableParent(targetNode);
+    let originArea = this._getCustomizableParent(draggedWrapper);
+
+    // Do nothing if the target or origin are not customizable.
+    if (!targetArea || !originArea) {
+      gCurrentDragOverItem = null;
+      return;
+    }
+
+    // We need to determine the place that the widget is being dropped in
+    // the target.
+    let position = Array.indexOf(targetParent.children, targetNode);
+    let dragOverItem = position == -1 ? targetParent.lastChild : targetParent.children[position];
+
+    if (this._dragOverItem && dragOverItem != this._dragOverItem) {
+      this._setDragActive(this._dragOverItem, false);
+    }
+
+    // XXXjaws Only handling the toolbar case first.
+    if (targetArea.localName == "toolbar") {
+      this._setDragActive(dragOverItem, true);
+    }
+    this._dragOverItem = dragOverItem;
+
+    aEvent.preventDefault();
+    aEvent.stopPropagation();
+  },
+
+  _onDragDrop: function(aEvent) {
+    __dumpDragData(aEvent);
+
+    this._setDragActive(this._dragOverItem, false);
+
+    let document = aEvent.target.ownerDocument;
+    let documentId = document.documentElement.id;
+    let draggedItemId = aEvent.dataTransfer.getData("text/toolbarwrapper-id/" + documentId);
+    let draggedWrapper = document.getElementById("wrapper-" + draggedItemId);
+
+    draggedWrapper.removeAttribute("mousedown");
+
+    let targetNode = aEvent.target;
+    let targetParent = targetNode.parentNode;
+    let targetArea = this._getCustomizableParent(targetNode);
+    let originArea = this._getCustomizableParent(draggedWrapper);
+
+    // Do nothing if the target area or origin area are not customizable.
+    if (!targetArea || !originArea) {
+      return;
+    }
+
+    // Is the target area the customization palette? If so, we have two cases -
+    // either the originArea was the palette, or a customizable area.
+    if (targetArea.id == kPaletteId) {
+      if (originArea.id !== kPaletteId) {
+        let widget = this.unwrapToolbarItem(draggedWrapper);
+        CustomizableUI.removeWidgetFromArea(draggedItemId);
+        draggedWrapper = this.wrapToolbarItem(widget, "palette");
+      }
+
+      // If the targetNode is the palette itself, just append
+      if (targetNode == this.visiblePalette) {
+        this.visiblePalette.appendChild(draggedWrapper);
+      } else {
+        this.visiblePalette.insertBefore(draggedWrapper, targetNode);
+      }
+      return;
+    }
+
+    // Is the target the customization area itself? If so, we just add the
+    // widget to the end of the area.
+    if (targetNode == targetArea.customizationTarget) {
+      let widget = this.unwrapToolbarItem(draggedWrapper);
+      CustomizableUI.addWidgetToArea(draggedItemId, targetArea.id);
+      this.wrapToolbarItem(widget, getPlaceForItem(targetNode));
+      return;
+    }
+
+    // We need to determine the place that the widget is being dropped in
+    // the target.
+    let placement = CustomizableUI.getPlacementOfWidget(targetNode.firstChild.id);
+    if (!placement) {
+      ERROR("Could not get a position for " + targetNode.firstChild.id);
+      return;
+    }
+
+    let position = placement.position;
+
+    // Is the target area the same as the origin? Since we've already handled
+    // the possibility that the target is the customization palette, we know
+    // that the widget is moving within a customizable area.
+    if (targetArea == originArea) {
+      let properPlace = getPlaceForItem(targetNode);
+      // We unwrap the moving widget, as well as the widget that we're dropping
+      // on (the target) so that moveWidgetWithinArea can correctly insert the
+      // moving widget before the target widget.
+      let widget = this.unwrapToolbarItem(draggedWrapper);
+      let targetWidget = this.unwrapToolbarItem(targetNode);
+      CustomizableUI.moveWidgetWithinArea(draggedItemId, position);
+      this.wrapToolbarItem(targetWidget, properPlace);
+      this.wrapToolbarItem(widget, properPlace);
+      return;
+    }
+
+    // A little hackery - we quickly unwrap the item and use CustomizableUI's
+    // addWidgetToArea to move the widget to the right place for every window,
+    // then we re-wrap the widget. We have to unwrap the target widget too so
+    // that addWidgetToArea inserts the new widget into the right place.
+    let properPlace = getPlaceForItem(targetNode);
+    let widget = this.unwrapToolbarItem(draggedWrapper);
+    let targetWidget = this.unwrapToolbarItem(targetNode);
+    CustomizableUI.addWidgetToArea(draggedItemId, targetArea.id, position);
+    this.wrapToolbarItem(targetWidget, properPlace);
+    draggedWrapper = this.wrapToolbarItem(widget, properPlace);
+  },
+
+  _onDragExit: function(aEvent) {
+    if (this._dragOverItem) {
+      this._setDragActive(this._dragOverItem, false);
+    }
+  },
+
+  // XXXjaws Show a ghost image or blank area where the item could be added, instead of black bar
+  _setDragActive: function(aItem, aValue) {
+    let node = aItem;
+    let window = aItem.ownerDocument.defaultView;
+    let direction = window.getComputedStyle(aItem, null).direction;
+    let value = direction == "ltr"? "left" : "right";
+    if (aItem.localName == "toolbar") {
+      node = aItem.lastChild;
+      value = direction == "ltr"? "right" : "left";
+    }
+
+    if (!node) {
+      return;
+    }
+
+    if (aValue) {
+      if (!node.hasAttribute("dragover")) {
+        node.setAttribute("dragover", value);
+      }
+    } else {
+      node.removeAttribute("dragover");
+    }
+  },
+
+  _getCustomizableParent: function(aElement) {
+    let areas = CustomizableUI.areas;
+    areas.push(kPaletteId);
+    while (aElement) {
+      if (areas.indexOf(aElement.id) != -1) {
+        return aElement;
+      }
+      aElement = aElement.parentNode;
+    }
+    return null;
+  },
+
+  _onMouseDown: function(aEvent) {
+    let item = this._getWrapper(aEvent.target);
+    if (item) {
+      item.setAttribute("mousedown", "true");
+    }
+  },
+
+  _onMouseUp: function(aEvent) {
+    let item = this._getWrapper(aEvent.target);
+    if (item) {
+      item.removeAttribute("mousedown");
+    }
+  },
+
+  _getWrapper: function(aElement) {
+    while (aElement && aElement.localName != "toolbarpaletteitem") {
+      if (aElement.localName == "toolbar")
+        return null;
+      aElement = aElement.parentNode;
+    }
+    return aElement;
+  },
+
+  _onTabSelect: function(aEvent) {
+    this._toggleCustomizationModeIfNecessary();
+  },
+
+  onLocationChange: function(aBrowser, aProgress, aRequest, aLocation, aFlags) {
+    if (this.browser.selectedBrowser != aBrowser) {
+      return;
+    }
+
+    this._toggleCustomizationModeIfNecessary();
+  },
+
+  /**
+   * Looks at the currently selected browser tab, and if the location
+   * is set to kAboutURI and we're not customizing, enters customize mode.
+   * If we're not at kAboutURI and we are customizing, exits customize mode.
+   */
+  _toggleCustomizationModeIfNecessary: function() {
+    let browser = this.browser.selectedBrowser;
+    if (browser.currentURI.spec == kAboutURI &&
+        !this._customizing) {
+      this.enter();
+    } else if (browser.currentURI.spec != kAboutURI &&
+               this._customizing) {
+      this.exit();
+    }
+  }
+};
+
+function getPlaceForItem(aElement) {
+  let place;
+  let node = aElement;
+  while (node && !place) {
+    if (node.localName == "toolbar")
+      place = "toolbar";
+    else if (node.id == CustomizableUI.AREA_PANEL)
+      place = "panel";
+    else if (node.id == kPaletteId)
+      place = "palette";
+
+    node = node.parentNode;
+  }
+  return place;
+}
+
+function __dumpDragData(aEvent, caller) {
+  let str = "Dumping drag data (CustomizeMode.jsm) {\n";
+  str += "  type: " + aEvent["type"] + "\n";
+  for (let el of ["target", "currentTarget", "relatedTarget"]) {
+    if (aEvent[el]) {
+      str += "  " + el + ": " + aEvent[el] + "(localName=" + aEvent[el].localName + "; id=" + aEvent[el].id + ")\n";
+    }
+  }
+  for (let prop in aEvent.dataTransfer) {
+    if (typeof aEvent.dataTransfer[prop] != "function") {
+      str += "  dataTransfer[" + prop + "]: " + aEvent.dataTransfer[prop] + "\n";
+    }
+  }
+  str += "}";
+  LOG(str);
+}
--- a/browser/modules/Makefile.in
+++ b/browser/modules/Makefile.in
@@ -8,16 +8,18 @@ srcdir    = @srcdir@
 VPATH   = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 include $(topsrcdir)/config/config.mk
 
 EXTRA_JS_MODULES = \
 	BrowserNewTabPreloader.jsm \
+	CustomizableUI.jsm \
+	CustomizeMode.jsm \
 	openLocationLastURL.jsm \
 	NetworkPrioritizer.jsm \
 	offlineAppCache.jsm \
 	SignInToWebsite.jsm \
 	webappsUI.jsm \
 	webrtcUI.jsm \
 	Social.jsm \
 	SharedFrame.jsm \
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4d0f12492fe643ade04a8ffaf333f7c729fa2f33
GIT binary patch
literal 247
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%``#fD7Ln>~ay|9<>AcIKT!^dVh
zPL~`nny9FX3QF0_hAc6;6tcysgRf4^t^C677rbS5HPZ`DB~%<wuk4)Jec#12dB&70
zX5l8mB0M@P+otl$&VQS#!NoRhkAa_i-U;LXK(-kF7yrj|Uf%a#Q@&=&9fQb=)r%4m
zJYV}6S8siM^qCG&@t?z{rA;&T{*4vkc_Z(0<&5Vdlix9>I)Mfou1K9RHs4iHP}kMe
uxHR{V$Mxmx?%StpNZgq3<I+0kqV!JNQte+wg;Rk(VeoYIb6Mw<&;$VPyJO}6
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -7,17 +7,18 @@
 @import url("chrome://global/skin/");
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 @namespace html url("http://www.w3.org/1999/xhtml");
 
 %include ../shared/browser.inc
 %filter substitution
 %define toolbarHighlight rgba(255,255,255,.3)
-%define selectedTabHighlight rgba(255,255,255,.8) 1px, rgba(255,255,255,.5) 3px
+%define fgTabTexture linear-gradient(transparent 0px, transparent 1px, hsla(0,0%,100%,0.35) 1px, hsla(0,0%,100%,0.35) 2px, hsla(0,0%,100%,0.65) 2px, hsla(0,0%,100%,0.65) 3px, @toolbarHighlight@)
+%define fgTabBackgroundMiddle @fgTabTexture@, linear-gradient(transparent 0px, transparent 2px, -moz-dialog 2px, -moz-dialog)
 %define forwardTransitionLength 150ms
 %define conditionalForwardWithUrlbar       window:not([chromehidden~=toolbar]) :-moz-any(#nav-bar[currentset*="unified-back-forward-button,urlbar-container"][mode=icons],                #nav-bar:not([currentset])[mode=icons])                 > #unified-back-forward-button
 %define conditionalForwardWithUrlbar_small window:not([chromehidden~=toolbar]) :-moz-any(#nav-bar[currentset*="unified-back-forward-button,urlbar-container"][mode=icons][iconsize=small],#nav-bar:not([currentset])[mode=icons][iconsize=small]) > #unified-back-forward-button
 %define conditionalForwardWithUrlbarWidth 32
 %define conditionalForwardWithUrlbarWidth_small 24
 
 #menubar-items {
   -moz-box-orient: vertical; /* for flex hack */
@@ -1568,109 +1569,42 @@ richlistitem[type~="action"][actiontype=
 
 #navigator-throbber,
 #wrapper-navigator-throbber > #navigator-throbber {
   list-style-image: url("chrome://global/skin/icons/notloading_16.png");
 }
 
 /* Tabstrip */
 
+%include ../shared/tabs.inc.css
+
 #TabsToolbar {
   min-height: 0;
   padding: 0;
 }
 
 #TabsToolbar[tabsontop=true]:not(:-moz-lwtheme) {
   -moz-appearance: menubar;
   color: -moz-menubartext;
   box-shadow: 0 -1px 0 rgba(0,0,0,.1) inset;
 }
 
 #TabsToolbar[tabsontop=true]:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
   -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag");
 }
 
+#TabsToolbar[tabsontop=true]:not(:-moz-lwtheme) > #tabbrowser-tabs > .tabbrowser-tab:not([selected]) {
+  color: -moz-menubartext;
+}
+
 #TabsToolbar[tabsontop=false] {
   background-image: linear-gradient(to top, rgba(0,0,0,.3) 1px, rgba(0,0,0,.05) 1px, transparent 50%);
 }
 
-.tabbrowser-tab,
-.tabs-newtab-button {
-  position: static;
-  -moz-appearance: none;
-  background: linear-gradient(hsla(0,0%,100%,.2), hsla(0,0%,45%,.2) 2px, hsla(0,0%,32%,.2) 80%);
-  background-origin: border-box;
-  background-position: 1px 2px;
-  background-size: 100% calc(100% - 2px);
-  background-repeat: no-repeat;
-  color: inherit;
-  margin: 0;
-  padding: 0;
-  border-width: 4px 5px 3px 6px;
-  border-style: solid;
-  border-image: url(tabbrowser/tab.png) 4 5 3 6 fill repeat stretch;
-  border-radius: 10px 8px 0 0;
-  min-height: 25px; /* reserve space for the sometimes hidden close button */
-}
-
-.tabbrowser-tab:hover,
-.tabs-newtab-button:hover {
-  background-image: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.2) 4px, hsla(0,0%,75%,.2) 80%);
-}
-
-.tabbrowser-tab[selected="true"] {
-  background-image: linear-gradient(@selectedTabHighlight@, @toolbarHighlight@ 32%),
-                    linear-gradient(-moz-dialog, -moz-dialog);
-  color: -moz-dialogtext;
-}
-
-#main-window[tabsontop=false]:not([disablechrome]) .tabbrowser-tab[selected=true]:not(:-moz-lwtheme) {
-  background-image: linear-gradient(to top, rgba(0,0,0,.3) 1px, transparent 1px),
-                    linear-gradient(@selectedTabHighlight@, @toolbarHighlight@ 32%),
-                    linear-gradient(-moz-dialog, -moz-dialog);
-}
-
-.tabbrowser-tab[selected="true"]:-moz-lwtheme {
-  background-image: linear-gradient(@selectedTabHighlight@, @toolbarHighlight@ 32%);
-  color: inherit;
-}
-
-.tabbrowser-tab:-moz-lwtheme-brighttext:not([selected="true"]),
-.tabs-newtab-button:-moz-lwtheme-brighttext {
-  background-image: linear-gradient(hsla(0,0%,60%,.6), hsla(0,0%,40%,.6) 4px, hsla(0,0%,30%,.6) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-brighttext:not([selected="true"]):hover,
-.tabs-newtab-button:-moz-lwtheme-brighttext:hover {
-  background-image: linear-gradient(hsla(0,0%,80%,.6), hsla(0,0%,60%,.6) 4px, hsla(0,0%,45%,.6) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-darktext:not([selected="true"]),
-.tabs-newtab-button:-moz-lwtheme-darktext {
-  background-image: linear-gradient(hsla(0,0%,100%,.5), hsla(0,0%,60%,.5) 4px, hsla(0,0%,45%,.5) 80%);
-}
-
-.tabbrowser-tab:-moz-lwtheme-darktext:not([selected="true"]):hover,
-.tabs-newtab-button:-moz-lwtheme-darktext:hover {
-  background-image: linear-gradient(hsla(0,0%,100%,.5), hsla(0,0%,80%,.5) 4px, hsla(0,0%,60%,.5) 80%);
-}
-
-.tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) {
-  background-image: radial-gradient(circle farthest-corner at 50% 3px, rgba(233,242,252,1) 3%, rgba(172,206,255,.75) 40%, rgba(87,151,201,.5) 80%, rgba(87,151,201,0));
-}
-.tabbrowser-tab[pinned][titlechanged]:not([selected="true"]):hover {
-  background-image: linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.6) 2px, hsla(0,0%,75%,.2) 80%),
-                    radial-gradient(circle farthest-corner at 50% 3px, rgba(233,242,252,1) 3%, rgba(172,206,255,.75) 40%, rgba(87,151,201,.5) 80%, rgba(87,151,201,0));
-}
-
-#tabbrowser-tabs[positionpinnedtabs] > .tabbrowser-tab > .tab-stack > .tab-content[pinned] {
-  min-height: 18px; /* corresponds to the max. height of non-textual tab contents, i.e. the tab close button */
-}
-
-.tabbrowser-tab:focus > .tab-stack {
+.tabbrowser-tab:focus > .tab-stack > .tab-content > .tab-label {
   outline: 1px dotted;
 }
 
 .tab-throbber,
 .tab-icon-image {
   width: 16px;
   height: 16px;
   -moz-margin-end: 3px;
@@ -2227,16 +2161,22 @@ toolbar[iconsize="small"] .toolbarbutton
   background-image: radial-gradient(circle farthest-corner at center 3px, rgb(233,242,252) 3%, rgba(172,206,255,0.75) 40%, rgba(87,151,201,0.5) 80%, rgba(87,151,201,0));
 }
 
 chatbox {
   border-top-left-radius: 2.5px;
   border-top-right-radius: 2.5px;
 }
 
+/* Customization mode */
+
+%include ../shared/customization.inc.css
+
+/* End customization mode */
+
 .click-to-play-plugins-notification-content {
   margin: -10px;
 }
 
 .click-to-play-plugins-notification-icon-box {
   -moz-border-end: 1px solid hsla(0,0%,100%,.2);
   padding-top: 16px;
   -moz-padding-start: 16px;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..465cdb71f9bff80e491341780634956f8921d254
GIT binary patch
literal 92662
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
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -13,18 +13,20 @@ browser.jar:
   skin/classic/browser/aboutCertError_sectionCollapsed.png
   skin/classic/browser/aboutCertError_sectionCollapsed-rtl.png
   skin/classic/browser/aboutCertError_sectionExpanded.png
   skin/classic/browser/aboutSocialError.css
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/aboutSyncTabs.css
 #endif
   skin/classic/browser/actionicon-tab.png
+  skin/classic/browser/appmenu.png
 * skin/classic/browser/browser.css
   skin/classic/browser/click-to-play-warning-stripes.png
+  skin/classic/browser/customization/customization-mode-background.jpg (customization/customization-mode-background.jpg)
 * skin/classic/browser/engineManager.css
   skin/classic/browser/Geolocation-16.png
   skin/classic/browser/Geolocation-64.png
   skin/classic/browser/Go-arrow.png
   skin/classic/browser/identity.png
   skin/classic/browser/identity-icons-generic.png
   skin/classic/browser/identity-icons-https.png
   skin/classic/browser/identity-icons-https-ev.png
@@ -34,16 +36,17 @@ browser.jar:
   skin/classic/browser/mixed-content-blocked-64.png
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
   skin/classic/browser/notification-16.png
   skin/classic/browser/notification-64.png
 * skin/classic/browser/pageInfo.css
   skin/classic/browser/pageInfo.png
   skin/classic/browser/page-livemarks.png
+* skin/classic/browser/panelUIOverlay.css
   skin/classic/browser/pointerLock-16.png
   skin/classic/browser/pointerLock-64.png
   skin/classic/browser/Privacy-16.png
   skin/classic/browser/Privacy-48.png
   skin/classic/browser/privatebrowsing-mask.png
   skin/classic/browser/searchbar.css
   skin/classic/browser/Secure.png
   skin/classic/browser/Security-broken.png
@@ -103,18 +106,25 @@ browser.jar:
   skin/classic/browser/preferences/applications.css   (preferences/applications.css)
   skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
   skin/classic/browser/social/services-16.png         (social/services-16.png)
   skin/classic/browser/social/services-64.png         (social/services-64.png)
   skin/classic/browser/social/chat-close.png          (social/chat-close.png)
   skin/classic/browser/tabbrowser/connecting.png      (tabbrowser/connecting.png)
   skin/classic/browser/tabbrowser/loading.png         (tabbrowser/loading.png)
   skin/classic/browser/tabbrowser/tab.png             (tabbrowser/tab.png)
-  skin/classic/browser/tabbrowser/tab-overflow-border.png (tabbrowser/tab-overflow-border.png)
-  skin/classic/browser/tabbrowser/tabDragIndicator.png (tabbrowser/tabDragIndicator.png)
+  skin/classic/browser/tabbrowser/tab-active-middle.png     (tabbrowser/tab-active-middle.png)
+  skin/classic/browser/tabbrowser/tab-background-end.png    (tabbrowser/tab-background-end.png)
+  skin/classic/browser/tabbrowser/tab-background-middle.png (tabbrowser/tab-background-middle.png)
+  skin/classic/browser/tabbrowser/tab-background-start.png  (tabbrowser/tab-background-start.png)
+  skin/classic/browser/tabbrowser/tab-overflow-border.png   (tabbrowser/tab-overflow-border.png)
+  skin/classic/browser/tabbrowser/tab-stroke-end.png        (tabbrowser/tab-stroke-end.png)
+  skin/classic/browser/tabbrowser/tab-stroke-start.png      (tabbrowser/tab-stroke-start.png)
+  skin/classic/browser/tabbrowser/tabDragIndicator.png      (tabbrowser/tabDragIndicator.png)
+  skin/classic/browser/tabbrowser/tab-separator.png         (tabbrowser/tab-separator.png)
   skin/classic/browser/tabview/edit-light.png         (tabview/edit-light.png)
   skin/classic/browser/tabview/search.png             (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png     (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png            (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css            (tabview/tabview.css)
 * skin/classic/browser/devtools/common.css            (devtools/common.css)
   skin/classic/browser/devtools/dark-theme.css        (devtools/dark-theme.css)
   skin/classic/browser/devtools/light-theme.css       (devtools/light-theme.css)
new file mode 100644
--- /dev/null
+++ b/browser/themes/linux/panelUIOverlay.css
@@ -0,0 +1,41 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+%filter substitution
+%define menuPanelWidth 21em
+
+%include ../shared/panelUIOverlay.inc.css
+
+#PanelUI-cut-btn {
+  list-style-image: url("moz-icon://stock/gtk-cut?size=toolbar");
+}
+#PanelUI-cut-btn[disabled="true"] {
+  list-style-image: url("moz-icon://stock/gtk-cut?size=toolbar&state=disabled");
+}
+
+#PanelUI-copy-btn {
+  list-style-image: url("moz-icon://stock/gtk-copy?size=toolbar");
+}
+#PanelUI-copy-btn[disabled="true"] {
+  list-style-image: url("moz-icon://stock/gtk-copy?size=toolbar&state=disabled");
+}
+
+#PanelUI-paste-btn {
+  list-style-image: url("moz-icon://stock/gtk-paste?size=toolbar");
+}
+#PanelUI-paste-btn[disabled="true"] {
+  list-style-image: url("moz-icon://stock/gtk-paste?size=toolbar&state=disabled");
+}
+
+#PanelUI-zoomOut-btn {
+  list-style-image: url("moz-icon://stock/gtk-zoom-out?size=toolbar");
+  padding-left: 12px;
+  padding-right: 12px;
+}
+
+#PanelUI-zoomIn-btn {
+  list-style-image: url("moz-icon://stock/gtk-zoom-in?size=toolbar");
+  padding-left: 12px;
+  padding-right: 12px;
+}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6c903ae15688e88e50e9ce817afdc0cbab17ea24
GIT binary patch
literal 96
zc%17D@N?(olHy`uVBq!ia0vp^j6f{U!3HGNPA*RZQtF;Ajv*Dd&K}>$$-uzDd~iL>
u_6>e-W!~-gWm&$#(jvz>jNhZM_7GE+SNM9@YkC<#EexKnelF{r5}E*7of}&K
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..78a4f1f1cbb8d9395750d1e2cef78ae9e82838b9
GIT binary patch
literal 721
zc$@*z0xtcDP)<h;3K|Lk000e1NJLTq0015U0018d1^@s6@N9ht0007*Nkl<Zc-pns
z+e?#i9LMoTx4DCdG`CrsJGi+y+M3!<Z93;{t5!Ol;*t@RL_!1+6?oxAH{Apg1YPtW
zL_r6lf-nk-4&+4?SW=NmRQ3-Tj2-%X;dx*eq3-uQUA%smdq2PL@8P$NlW7bZo(hzp
z06En1YIvNKXz_s;+~5EMG=K^eAQK*-R4Q>&q2=(e)!$Q}zkJO;e)4Q=cJ9KSMy)-7
zP#5Sy1#%%yBncM^g+WL_5{8S#;>6n8pWO2ouQQqKbd;Y$Gt@~L=MWnBhd8A2`TU`q
zx9+7IT5UnZOhR0$aC99p82PsHJ?n6XBM7!j6{m3j2BMI}J22VO*0q~IcZJwEg(I8L
z2Z@)j7BYx=Kn-%S;qWF!AT@LHTmnIh*pX8>RD}peKB{ao(|Ol}TueAng&@SIXHF*(
zG>SQE3j3-Qy8m$gAb;Db#DsTM$%hLjxkcxQ@mH&iHQd7>JT`fh#%&PB%@X!9@L#@i
z?Er!<P_m4h!X5_QkLI7!jsvXcOv?@io*zF~qlgWH24pN@7bCyb>EDN73n*B^4n{k(
zx#KAWtt>AXEp|q(i<hp_j=Nc2Fj_hob-r16JAhc6<(z4;FtUQz<_gj+rmc3|w3tM&
zpE@&_;;&Dou<LTU%x#3iMiI;(mp+B-8ck^g8!NvwHWN08)R{YSg2vqoYGK!8qwqG7
zjLXX_A$_}h6fs-H$ZOYo09y1CFkQcKXGq;_8Ar$g>dHR@yc&TJ)=EGJ*4uX<#PL&@
z;yus+YEV`_gb=52t3<S5dG~&?e`4y`Fg|<)0?-LYXsS4Wj>0VxYXj%vho!!=v*-5@
z?j28idSjXG7Vi*(Zm1W+&HsrGI=}@UaDo}ptrY$Xsi^vbGE;I800000NkvXXu0mjf
Dz`;ej
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c0b65dad63471961c4aa942a69f4733372c2c7cf
GIT binary patch
literal 161
zc%17D@N?(olHy`uVBq!ia0vp^Y(Ol}0V0ox?vVykk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5XoIPC}Lp07OCqA3>DCq!GL_>t|>Lc&<{Wp03`ThO9VHl^I
z+p+&U-YCRAlK)!rN4lnr;c!>U;(wP8J~!dl-c;kaG=zyk^n_B^;swh4fW|R+y85}S
Ib4q9e0C=@I!T<mO
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..300dc1d757171af84e84267853aba9c450388b8f
GIT binary patch
literal 705
zc$@*j0zUnTP)<h;3K|Lk000e1NJLTq0015U0018d1^@s6@N9ht0007rNkl<Zc-pns
z-Ahwp90%~VIp^kPTh3XVdvSVnv~|?nW}D7!wq<KN-NYp$D2ap!A}a90i*C9JA_%(Z
zKZt@}hzi0;D0(3;qQH`hOd_>^z+mj9ukgrOLT%?cr;E?U9?tW8&+qqp7@I_<GKy^*
zAtkCn4hpCN)doqSP!LT?pbX?BNDW3{zzHmLix>!`LK0|zc8$KpGd**0|C6WBMn8Y~
znqFP|Ie|S##15?nEilRSWZ?OW*U9zuUzvP9KbFhoh9C+N2#FKSg__m%cJHm*_Y>J{
z_Amlt5QhG(#0+g>oId}z<?m@6JPbhy{EZl)axmx`+xKCH<2W=*4)6OHp}|$41lP+~
z^GO^SfnM;JBSwp@Q>V^H$UObvtAx;MYZY}CKUzFOLVGGDbhf6+sWVY>bG_iHl#t*W
zU>`i1jgu<6`JfG!fqHub6T}xplpMB~5B|Yin~kI6$D-u2bn->pW(7E|T)ln>hq!^|
zOUQgZk7wsLD((OmU$pa8LFmWIS^(=V*v%JBupD%@HuoUb+~A-=d$DZk%!wG*_5eeJ
z_F{Ehx_oVrynPD|+WCgx%)jl&dMh;3plP$-?(oL3#)1v3G$h4hv7FLs6~LZ8I};-<
zGt;Upl&e-#tuZG)E`IW1vjt4F%7=2*DxoWL^kkgO)+j`|Kxs*f?S>}j$kNhs4|(gI
zLU2JG>6RbmN??>)YwE_$y90RM3<jaN&_BZzBv1{V_{o~ObMIjo8*I=3dZ9}H@5rDI
zOwbA*7#^EAKJ@PWLLVNsl1=qu*bJ@(=PoNd;OYt{LkCicbJG_NE__(*#Y1h-2s$xs
n2JgTJ3kh+71DZ)&wg1C!qPhBl8*`*i00000NkvXXu0mjfgAqxS
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..63f77f1b760b2e66e2fab7e739979b7cdede2116
GIT binary patch
literal 192
zc%17D@N?(olHy`uVBq!ia0vp^%s?#1!3HE>CM@{{q$EpRBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~-c6(xDPIEGZ*O8WEvzdbXLfuRE9vh(lf8+&zsHf+wAz@sd%
zxhX@Uo%a}HqL@H$XdAB@^C6iNr*2G~T9^>pb}-TXSwYfM1Lv;>$)*jHEvhXFqq^=|
nO8iSata-RghnX+10qCqHCR~QDO&0Ay+Za4u{an^LB{Ts5X9_^D
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b1b7cc0145523cc8141b939a10b34fe8dda1a445
GIT binary patch
literal 439
zc%17D@N?(olHy`uVBq!ia0vp^azHH4!3-piZ|XG#QjEnx?oJHr&dIz4a#+$GeH|GX
zHuiJ>Nn{1`djotzTp6Gsl!3vXK}(B4-kw2RPgq!8NX1N0$(UbGmsiS^N5z0!Nsmj;
zh*L(NQ`(F}!H`{EpIy$3Pu7T6!GuT7fLq3hThS1x0IbG@Q_+}H!H8GhkVn>-N70B!
z!IWDbsKA&@!H7%VluO<isuHMI!I(!LXo3m1f)Tg8@t4V#F+jKImjw9*GcYo<uyJtn
z^6?7_i;77~%g8GzDywVh>KPfEnweYL*xEU|x_fwe`}p|>1&2j0*z<Wd$WNXwjv*3~
ztp~fA8Vwj&FYMknMXn<&#a7q!*#G)@`Y){5>n*HjSsfGGYCq-d=`b#rd%Kiplw_)Q
zJh0;uSY)2CME5|79)od6!Y1_<ri_c%CwyX;_&G7*8Bfp315;#YR4_gjo$-!mnZyAP
z`KC;h882j;E-FhHN-`?FSkBV2V@>efcOu(5F6Wm0i*D|G!@uD>N3pQthb5o@_H^}g
JS?83{1OVkFad-d#
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..08941c8a783419fd8c0e743c3cafbfaaf6b43ea5
GIT binary patch
literal 433
zc%17D@N?(olHy`uVBq!ia0vp^azHH4!3-piZ|XG#QjEnx?oJHr&dIz4a#+$GeH|GX
zHuiJ>Nn{1`+XH+;Tp6Gsl!3vXK}(B4MTJ3JPgq!8P|28IPM258luO=}OU{T>MxRsK
zj9p%zPu7S}#*kORgh$?(N6vs-#t0}2QlMzesbIt_Z^$cW!Xs<UqhQJ{Z_F)k#4TsY
zEoZ{5Xw0Qx1TsqA7^)s<f`T!Ryb%vjy_|7Uf3_{q6}lxse!&ck%q(o|+`RmP!V;3w
zG78En>Ka<QM#g65mR2@)4vx+)uI?UQ-adZ*fx)5N*6(HjHTHYDIEF|_&OMmT<m4d1
zdf~U>Ck{p5%9J3@#Q(3enT@}<7jFoz*mrln@tP1zz3WEZA~~COT5`!O`KeOy+L}M_
z7RQ}SC);QHNOnA8O!IMUv1bg-HgM)k<92X~H&`y$v+lqiA%S~p3PsGzbRAZhG6Zf_
zxFXd2!sL!iKhyFXJa%iYD6Tvk#JNWA^`C1y+im|vJG0lfDG8c^g4Wa3&t;ucLK6UQ
CX>CRT
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..aab0a02c84d63603ec1fc3a385a08c5cf5360fd2
GIT binary patch
literal 15667
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
Z%Ktt2F}8~Q0|)>B002ovPDHLkV1jXE7}o#*
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4d0f12492fe643ade04a8ffaf333f7c729fa2f33
GIT binary patch
literal 247
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%``#fD7Ln>~ay|9<>AcIKT!^dVh
zPL~`nny9FX3QF0_hAc6;6tcysgRf4^t^C677rbS5HPZ`DB~%<wuk4)Jec#12dB&70
zX5l8mB0M@P+otl$&VQS#!NoRhkAa_i-U;LXK(-kF7yrj|Uf%a#Q@&=&9fQb=)r%4m
zJYV}6S8siM^qCG&@t?z{rA;&T{*4vkc_Z(0<&5Vdlix9>I)Mfou1K9RHs4iHP}kMe
uxHR{V$Mxmx?%StpNZgq3<I+0kqV!JNQte+wg;Rk(VeoYIb6Mw<&;$VPyJO}6
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -1,16 +1,18 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 @import url("chrome://global/skin/");
 
 %include shared.inc
 %filter substitution
+%define fgTabTexture linear-gradient(hsla(0,0%,100%,0.6), hsla(0,0%,100%,0.6) 0px, hsl(0,0%,99%) 1px, hsl(0,0%,92%))
+%define fgTabBackgroundMiddle linear-gradient(transparent, transparent)
 %define forwardTransitionLength 150ms
 %define conditionalForwardWithUrlbar window:not([chromehidden~=toolbar]) #navigator-toolbox[iconsize=large][mode=icons] > :-moz-any(#nav-bar[currentset*="unified-back-forward-button,urlbar-container"],#nav-bar:not([currentset])) > #unified-back-forward-button
 %define conditionalForwardWithUrlbarWidth 27
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 @namespace html url("http://www.w3.org/1999/xhtml");
 
 #urlbar:-moz-lwtheme:not([focused="true"]),
@@ -33,83 +35,97 @@
   border-color: transparent !important;
 }
 
 #main-window {
   -moz-appearance: none;
   background-color: #eeeeee;
 }
 
-#titlebar-buttonbox-container,
-#main-window:not([drawintitlebar=true]) > #titlebar {
+#titlebar-buttonbox-container {
   display: none;
 }
 
 #titlebar {
   height: 22px;
 }
 
+#main-window:not(:-moz-lwtheme):not([privatebrowsingmode=temporary]) > #titlebar {
+  -moz-appearance: -moz-window-titlebar;
+}
+
 #main-window[chromehidden~="toolbar"][chromehidden~="location"][chromehidden~="directories"] {
   border-top: 1px solid rgba(0,0,0,0.65);
 }
 
 #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar) {
   -moz-box-align: center;
   padding: 2px 4px;
 }
 
 /* Because of -moz-box-align: center above, separators will be invisible unless
    we set their min-height. See bug 583510 for more information. */
 toolbarseparator {
   min-height: 22px;
 }
 
+toolbox[tabsontop=true] > toolbar:not(#TabsToolbar):not(#nav-bar):not(#toolbar-menubar),
+toolbox[tabsontop=false] > toolbar:not(#nav-bar) {
+  margin-top: -2px; /* overlay the bottom border of the toolbar above us */
+  padding-top: 1px !important;
+}
+
+toolbox[tabsontop=true] > toolbar:not(#TabsToolbar):not(#nav-bar):not(:-moz-lwtheme) {
+  -moz-appearance: none;
+  background: url(chrome://browser/skin/Toolbar-background-noise.png) hsl(0,0%,83%);
+}
+
 /* We need more height when toolbar buttons show both icon and text. */
 toolbar[mode="full"] toolbarseparator {
   min-height: 36px;
 }
 
 #nav-bar {
   padding-bottom: 4px !important;
 }
 
 #PersonalToolbar {
   -moz-appearance: none;
-  margin-top: -2px; /* overlay the bottom border of the toolbar above us */
-  padding-top: 1px !important;
   background-color: -moz-mac-chrome-active;
-  border-bottom: 1px solid rgba(0, 0, 0, 0.57);
+  border-bottom: 2px solid;
+  -moz-border-bottom-colors: hsla(0,0%,0%,.15) hsla(0,0%,100%,.15);
 }
 
 #nav-bar[tabsontop=true],
 #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + toolbar,
 #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + #customToolbars + #PersonalToolbar {
   -moz-appearance: none;
   margin-top: 0; /* don't overlay the bottom border of the tabs toolbar */
   padding-top: 4px !important;
-  border-bottom: 1px solid rgba(0, 0, 0, 0.57);
-  background-color: -moz-mac-chrome-active;
-  background-image: linear-gradient(rgba(255,255,255,.43), rgba(255,255,255,0)) !important; /* override lwtheme style */
+  border-bottom: 2px solid;
+  -moz-border-bottom-colors: hsla(0,0%,0%,.15) hsla(0,0%,100%,.15);
+  background: url(chrome://browser/skin/Toolbar-background-noise.png),
+              linear-gradient(hsl(0,0%,93%), hsl(0,0%,83%)); !important; /* override lwtheme style */
+  background-clip: border-box;
   background-origin: border-box !important;
 }
 
 #PersonalToolbar:-moz-lwtheme,
 #nav-bar[tabsontop=true]:-moz-lwtheme,
 #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + toolbar:-moz-lwtheme,
 #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + #customToolbars + #PersonalToolbar:-moz-lwtheme {
   background-color: transparent;
   border-bottom-color: transparent;
 }
 
 #PersonalToolbar:not(:-moz-lwtheme):-moz-window-inactive,
 #nav-bar[tabsontop=true]:not(:-moz-lwtheme):-moz-window-inactive,
 #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + toolbar:not(:-moz-lwtheme):-moz-window-inactive,
 #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + #customToolbars + #PersonalToolbar:not(:-moz-lwtheme):-moz-window-inactive {
   background-color: -moz-mac-chrome-inactive;
-  border-bottom-color: rgba(0, 0, 0, 0.32);
 }
 
 /* ----- BOOKMARK TOOLBAR ----- */
 
 #personal-bookmarks {
   min-height: 17px; /* 16px button height + 1px margin-bottom */
 }
 
@@ -2163,16 +2179,18 @@ toolbarbutton.chevron > .toolbarbutton-m
 }
 
 /* ::::: tabbrowser ::::: */
 
 .tabbrowser-tabbox {
   margin: 0;
 }
 
+%include ../shared/tabs.inc.css
+
 .tab-throbber,
 .tab-icon-image {
   width: 16px;
   height: 16px;
   list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
 }
 
 .tab-throbber {
@@ -2194,337 +2212,130 @@ toolbarbutton.chevron > .toolbarbutton-m
   }
 
   .tab-throbber[progress] {
     list-style-image: url("chrome://browser/skin/tabbrowser/loading@2x.png");
   }
 }
 
 .tabbrowser-tab:not(:hover) > .tab-stack > .tab-content > .tab-icon-image:not([selected="true"]) {
-  opacity: .8;
+  opacity: .9;
+}
+
+.tab-label:not([selected="true"]) {
+  opacity: .7;
 }
 
 .tabbrowser-tab:not([pinned]):not([fadein]) {
   transition: min-width 200ms ease-out /* copied from browser/base/content/browser.css */,
               max-width 250ms ease-out /* copied from browser/base/content/browser.css */,
               opacity 50ms ease-out 100ms /* hide the tab for the last 100ms of the max-width transition */;
 }
 
-.tab-stack {
-  /* ensure stable tab height with and without toolbarbuttons on the tab bar */
-  height: 26px;
-}
-
 .tabbrowser-tab,
 .tabs-newtab-button {
   -moz-appearance: none;
   font: message-box;
   font-weight: bold;
   text-shadow: @loweredShadow@;
-  margin: 0;
-  padding: 0;
   border: none;
-  text-align: center;
   -moz-box-align: stretch;
 }
 
-%define TABSONTOP_TAB #tabbrowser-tabs[tabsontop="true"] > .tabbrowser-tab
-%define TABSONBOTTOM_TAB #tabbrowser-tabs[tabsontop="false"] > .tabbrowser-tab
-%define TABSONTOP_TAB_STACK #tabbrowser-tabs[tabsontop="true"] > .tabbrowser-tab > .tab-stack
-%define TABSONBOTTOM_TAB_STACK #tabbrowser-tabs[tabsontop="false"] > .tabbrowser-tab > .tab-stack
+.tabbrowser-tab {
+  color: #333;
+}
+
 %define TABSONTOP_NEWTAB_BUTTON #tabbrowser-tabs[tabsontop="true"] > .tabbrowser-arrowscrollbox > .tabs-newtab-button
 %define TABSONBOTTOM_NEWTAB_BUTTON #tabbrowser-tabs[tabsontop="false"] > .tabbrowser-arrowscrollbox > .tabs-newtab-button
 
-@TABSONTOP_TAB_STACK@ > .tab-background {
-  margin-top: 3px;
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-background {
-  margin-bottom: 3px;
-}
-
-@TABSONTOP_TAB_STACK@ > .tab-background:not([selected="true"]):not(:-moz-lwtheme) {
-  margin-bottom: 2px;
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-background:not([selected="true"]) {
-  margin-top: 2px;
-}
-
-.tab-background,
-.tab-content,
-.tabs-newtab-button > .toolbarbutton-icon {
-  -moz-margin-start: -5px;
-  -moz-margin-end: -4px;
-  pointer-events: none;
-}
-
-.tab-close-button {
-  pointer-events: auto;
+.tab-background-start[selected=true]::before,
+.tab-background-end[selected=true]::before {
+  /* The fill is in the image of ::after on OS X */
+  background: none;
 }
 
 .tabbrowser-tabs[closebuttons="hidden"] > * > * > * > .tab-close-button:not([pinned]) {
   display: -moz-box;
   visibility: hidden;
 }
 
-.tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox {
-  -moz-padding-start: 5px;
-  -moz-padding-end: 4px;
-}
-
-.tab-content,
 .tabs-newtab-button > .toolbarbutton-icon {
   -moz-box-align: center;
   border: solid transparent;
   border-width: 0 11px;
 }
 
-.tab-background-start,
-.tab-background-end {
-  width: 12px;
-  height: 21px;
-}
-
-.tab-background-middle {
-  -moz-box-flex: 1;
-}
-
-@TABSONTOP_TAB_STACK@ > .tab-background > .tab-background-start:-moz-locale-dir(ltr),
-@TABSONTOP_TAB_STACK@ > .tab-background > .tab-background-end:-moz-locale-dir(rtl) {
-  clip-path: url(chrome://browser/content/browser.xul#osx-tab-ontop-left-curve-clip-path);
-}
-
-@TABSONTOP_TAB_STACK@ > .tab-background > .tab-background-end:-moz-locale-dir(ltr),
-@TABSONTOP_TAB_STACK@ > .tab-background > .tab-background-start:-moz-locale-dir(rtl) {
-  clip-path: url(chrome://browser/content/browser.xul#osx-tab-ontop-right-curve-clip-path);
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-background > .tab-background-start:-moz-locale-dir(ltr),
-@TABSONBOTTOM_TAB_STACK@ > .tab-background > .tab-background-end:-moz-locale-dir(rtl) {
-  clip-path: url(chrome://browser/content/browser.xul#osx-tab-onbottom-left-curve-clip-path);
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-background > .tab-background-end:-moz-locale-dir(ltr),
-@TABSONBOTTOM_TAB_STACK@ > .tab-background > .tab-background-start:-moz-locale-dir(rtl) {
-  clip-path: url(chrome://browser/content/browser.xul#osx-tab-onbottom-right-curve-clip-path);
-}
-
-.tab-background-start[selected="true"]:not(:-moz-lwtheme),
-.tab-background-middle[selected="true"]:not(:-moz-lwtheme),
-.tab-background-end[selected="true"]:not(:-moz-lwtheme) {
-  background-color: -moz-mac-chrome-active;
-}
-
-.tab-background-start[selected="true"]:not(:-moz-lwtheme):-moz-window-inactive,
-.tab-background-middle[selected="true"]:not(:-moz-lwtheme):-moz-window-inactive,
-.tab-background-end[selected="true"]:not(:-moz-lwtheme):-moz-window-inactive {
-  background-color: -moz-mac-chrome-inactive;
-}
-
-.tab-background-start[pinned][titlechanged]:not([selected="true"]),
-.tab-background-end[pinned][titlechanged]:not([selected="true"]) {
-  background-image: linear-gradient(rgba(148,205,253,.2), rgba(148,205,253,.2)) !important;
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-background > .tab-background-middle[pinned][titlechanged]:not([selected="true"]) {
-  background-image: radial-gradient(circle farthest-corner at 50% 99%, rgba(254,254,255,1) 3%, rgba(210,235,255,.9) 12%, rgba(148,205,253,.6) 30%, rgba(148,205,253,.2) 70%);
-}
-
-@TABSONTOP_TAB_STACK@ > .tab-background > .tab-background-middle[pinned][titlechanged]:not([selected="true"]) {
-  background-image: radial-gradient(circle farthest-corner at 50% 2px, rgba(254,254,255,1) 3%, rgba(210,235,255,.9) 12%, rgba(148,205,253,.6) 30%, rgba(148,205,253,.2) 70%);
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-start:-moz-lwtheme-brighttext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-middle:-moz-lwtheme-brighttext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-end:-moz-lwtheme-brighttext:not([selected="true"]) {
-  background-image: linear-gradient(hsla(0,0%,40%,.6), hsla(0,0%,30%,.6) 50%);
-}
-
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-start:-moz-lwtheme-darktext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-middle:-moz-lwtheme-darktext:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-background > .tab-background-end:-moz-lwtheme-darktext:not([selected="true"]) {
-  background-image: linear-gradient(hsla(0,0%,60%,.5), hsla(0,0%,45%,.5) 50%);
-}
-
-@TABSONTOP_TAB_STACK@ > .tab-content,
-@TABSONTOP_NEWTAB_BUTTON@ > .toolbarbutton-icon {
-  border-image: url(chrome://browser/skin/tabbrowser/tab-top-normal-active.png) 0 11 fill repeat stretch;
-}
-
-@TABSONTOP_TAB@:hover > .tab-stack > .tab-content:not([selected="true"]),
-@TABSONTOP_NEWTAB_BUTTON@:hover > .toolbarbutton-icon {
-  border-image: url(chrome://browser/skin/tabbrowser/tab-top-hover-active.png) 0 11 fill repeat stretch;
-}
-
-@TABSONTOP_TAB_STACK@ > .tab-content[selected="true"] {
-  border-image: url(chrome://browser/skin/tabbrowser/tab-top-selected-active.png) 0 11 fill repeat stretch;
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-content,
-@TABSONBOTTOM_NEWTAB_BUTTON@ > .toolbarbutton-icon {
-  border-image: url(chrome://browser/skin/tabbrowser/tab-bottom-normal-active.png) 0 11 fill repeat stretch;
-}
-
-@media (min-resolution: 2dppx) {
-  @TABSONTOP_TAB_STACK@ > .tab-content,
-  @TABSONTOP_NEWTAB_BUTTON@ > .toolbarbutton-icon {
-    border-image: url(chrome://browser/skin/tabbrowser/tab-top-normal-active@2x.png) 0 22 fill repeat stretch;
-  }
-
-  @TABSONTOP_TAB@:hover > .tab-stack > .tab-content:not([selected="true"]),
-  @TABSONTOP_NEWTAB_BUTTON@:hover > .toolbarbutton-icon {
-    border-image: url(chrome://browser/skin/tabbrowser/tab-top-hover-active@2x.png) 0 22 fill repeat stretch;
-  }
-
-  @TABSONTOP_TAB_STACK@ > .tab-content[selected="true"] {
-    border-image: url(chrome://browser/skin/tabbrowser/tab-top-selected-active@2x.png) 0 22 fill repeat stretch;
-  }
-}
-
-@TABSONBOTTOM_TAB@:hover > .tab-stack > .tab-content:not([selected="true"]),
-@TABSONBOTTOM_NEWTAB_BUTTON@:hover > .toolbarbutton-icon {
-  border-image: url(chrome://browser/skin/tabbrowser/tab-bottom-hover-active.png) 0 11 fill repeat stretch;
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-content[selected="true"] {
-  border-image: url(chrome://browser/skin/tabbrowser/tab-bottom-selected-active.png) 0 11 fill repeat stretch;
-}
-
-/* preloading hack */
-#TabsToolbar::after {
-  content: '';
-  display: block;
-  background-image:
-    url(chrome://browser/skin/tabbrowser/tab-top-normal-active.png),
-    url(chrome://browser/skin/tabbrowser/tab-top-hover-active.png),
-    url(chrome://browser/skin/tabbrowser/tab-top-selected-active.png),
-    url(chrome://browser/skin/tabbrowser/tab-bottom-normal-active.png),
-    url(chrome://browser/skin/tabbrowser/tab-bottom-hover-active.png),
-    url(chrome://browser/skin/tabbrowser/tab-bottom-selected-active.png),
-    url(chrome://browser/skin/tabbrowser/tabbar-top-bg-active.png),
-    url(chrome://browser/skin/tabbrowser/tabbar-top-bg-inactive.png),
-    url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-active.png),
-    url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-inactive.png);
-}
-
-@media (min-resolution: 2dppx) {
-  #TabsToolbar::after {
-    content: '';
-    display: block;
-    background-image:
-      url(chrome://browser/skin/tabbrowser/tab-top-normal-active@2x.png),
-      url(chrome://browser/skin/tabbrowser/tab-top-hover-active@2x.png),
-      url(chrome://browser/skin/tabbrowser/tab-top-selected-active@2x.png),
-      url(chrome://browser/skin/tabbrowser/tab-bottom-normal-active.png),
-      url(chrome://browser/skin/tabbrowser/tab-bottom-hover-active.png),
-      url(chrome://browser/skin/tabbrowser/tab-bottom-selected-active.png),
-      url(chrome://browser/skin/tabbrowser/tabbar-top-bg-active.png),
-      url(chrome://browser/skin/tabbrowser/tabbar-top-bg-inactive.png),
-      url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-active.png),
-      url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-inactive.png);
-  }
-}
-
-.tabbrowser-tab:focus > .tab-stack {
+.tabbrowser-tab:focus > .tab-stack > .tab-content > .tab-label {
   box-shadow: @focusRingShadow@;
 }
 
-.tabbrowser-tab:not([selected="true"]):not(:hover):not(:-moz-lwtheme) {
-  color: #222;
-}
-
-.tabbrowser-tab[selected="true"] {
-  color: #000;
-  z-index: 1;
-  position: relative;
-}
-
 .tabbrowser-tab:-moz-lwtheme {
   color: inherit;
   text-shadow: inherit;
 }
 
 #main-window:not([privatebrowsingmode=temporary]) #navigator-toolbox[tabsontop="true"]:not(:-moz-lwtheme)::before {
   /* We want the titlebar to be unified, but we still want to be able
    * to give #TabsToolbar a background. So we can't set -moz-appearance:
    * toolbar on #TabsToolbar itself. Instead, we set it on a box of the
    * right size which is put underneath #TabsToolbar.
    */
   content: '';
   display: block;
   -moz-appearance: toolbar;
-  height: 25px;
-  margin-bottom: -25px;
+  height: calc(@tabHeight@ + 1px);
+  margin-bottom: calc(-1px - @tabHeight@);
 }
 
 #TabsToolbar {
+  position: relative;
   -moz-appearance: none;
-  height: 26px;
   background-repeat: repeat-x;
 }
 
 #TabsToolbar[tabsontop="false"] {
   margin-top: -2px;
   padding-top: 2px;
 }
 
-/* For tabs-on-top, only fill the bottom 2px with the chrome background
- * color, so that the borders in tabbar-top-bg-*.png can mix with it.
- * In the top 24px the unified toolbar (from the ::before above) will show.
+/*
+ * Draw the bottom border of the tabstrip:
  */
-#TabsToolbar[tabsontop="true"]:not(:-moz-lwtheme) {
-  padding-bottom: 2px;
-  background: url(chrome://browser/skin/tabbrowser/tabbar-top-bg-active.png),
-              linear-gradient(to top, -moz-mac-chrome-active 2px, transparent 2px);
-}
-
-#TabsToolbar[tabsontop="true"]:not(:-moz-lwtheme):-moz-window-inactive {
-  background: url(chrome://browser/skin/tabbrowser/tabbar-top-bg-inactive.png),
-              linear-gradient(to top, -moz-mac-chrome-inactive 2px, transparent 2px);
+#TabsToolbar[tabsontop="true"]:not(:-moz-lwtheme)::after {
+  content: '';
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 0;
+  border-bottom: 1px solid hsla(0,0%,0%,.22);
 }
 
 /* In tabs-on-bottom mode, fill the whole toolbar with the chrome
  * background color.
  */
 #TabsToolbar[tabsontop="false"]:not(:-moz-lwtheme) {
-  background: url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-active.png) -moz-mac-chrome-active;
+  background: -moz-mac-chrome-active;
 }
 
 #TabsToolbar[tabsontop="false"]:not(:-moz-lwtheme):-moz-window-inactive {
-  background: url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-inactive.png) -moz-mac-chrome-inactive;
+  background: -moz-mac-chrome-inactive;
 }
 
 #tabbrowser-tabs {
   -moz-box-align: stretch;
-  height: 26px;
-}
-
-#tabbrowser-tabs[tabsontop="true"] > .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox:not(:-moz-lwtheme) {
-  margin-bottom: -2px;
-}
-
-#tabbrowser-tabs[tabsontop="false"] > .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox {
-  margin-top: -2px;
 }
 
 @TABSONTOP_NEWTAB_BUTTON@ > .toolbarbutton-icon {
-  padding: 4px 0 2px;
-}
-
-@TABSONTOP_TAB_STACK@ > .tab-content {
-  padding-top: 2px;
+  padding: 6px 0 4px;
 }
 
 @TABSONBOTTOM_NEWTAB_BUTTON@ > .toolbarbutton-icon {
-  padding: 2px 0 4px;
-}
-
-@TABSONBOTTOM_TAB_STACK@ > .tab-content {
-  padding-bottom: 2px;
+  padding: 4px 0 6px;
 }
 
 /**
  * Tab Drag and Drop
  */
 
 .tab-drop-indicator {
   list-style-image: url(chrome://browser/skin/tabbrowser/tabDragIndicator.png);
@@ -3792,16 +3603,22 @@ toolbar[mode="icons"] > *|* > .toolbarbu
   background-image: radial-gradient(circle farthest-corner at center 2px, rgb(254,254,255) 3%, rgba(210,235,255,0.9) 12%, rgba(148,205,253,0.6) 30%, rgba(148,205,253,0.2) 70%);
 }
 
 chatbox {
   border-top-left-radius: @toolbarbuttonCornerRadius@;
   border-top-right-radius: @toolbarbuttonCornerRadius@;
 }
 
+/* Customization mode */
+
+%include ../shared/customization.inc.css
+
+/* End customization mode */
+
 panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="top"],
 panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="bottom"] {
   list-style-image: url("chrome://global/skin/arrow/panelarrow-light-vertical.png");
 }
 @media (min-resolution: 2dppx) {
   panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="top"],
   panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="bottom"] {
     list-style-image: url("chrome://global/skin/arrow/panelarrow-light-vertical@2x.png");
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..465cdb71f9bff80e491341780634956f8921d254
GIT binary patch
literal 92662
zc$}QM2UJsCw=Nu|3(`BGBOO8j=|#G9f`BwZ2%$*}MT#H_(wp=uAV`Y>(mN<EKoq1S
zp$H)&VrbH&-r)Pa=fC5Q^PfA$U4ucg*Is4LXFl^;b7x=9U9JF_wSwH70RUZHVE`%M
z|7(}O05qBb&_}_5YXCz0wLZRUg#hmA@9(1k0(tp~J2-he!o;E8o}eHH9}rkv0t8S}
z4f1h-K7#pkIl^4ryp(yiJ9>Dy+?<qo?%y_)F!a%Yxw_pA@rB(BF*1XOJc7zQ@u;eB
zDFrD6dHQ(5{2jQ0JUzVp6oQm_{w}V7|9;gC;^F!`#Q%{pkJ{A@E=xlbE)8#A7}sra
z2{EXI446wsS{y7bAula2$|WfQmH>ezK@zfJU<rlWvI-JluKzS1{BFKZ&I+cQ+W*-L
zf2GXxAEyEX1H}WS#Jzo8Kwx=!d60x8NK#S^KSIne*vsD`NX*NR_umyXVSZ3wHy?jD
zZ!fN^YX?W~0Dom3o_}5N^f5I2uZ90xv^+gQ|Bm+aH-$O>&!hd!f_-2hQ<$H3fG-q=
zAI|%~ZS_A-y&8zOM#0$E4IdN-4^3}qfG5n$UsqF^2Y*N0$;}B5k(>k=EGsP`D=8r(
z2L{W7CFC`3YpThBrNOtQv}ONY<G-7$EhR56t)-zRBQK)?25W)UWF=(eC1ka<q@*Qo
ztAoM+&eiqu^LOxq!v3A>hMy|~mX(p0){w@}mH+>ptDxZvbMW`}HS_lN_?H1DuHOFM
zey-j=TpIUoi-Wlg9iVPrS3Oq&`j4$JU$@6FCv9JEPp-cRE4ckP7X05m|7Wh#{|jm$
zyfL8vgD(Ge;W>Eq^}ooEzxc28fqCI`#uuL)ms<eJzYYVOKH!t^+9ewB0zh#6s^R|=
z5D^d%5D^g)5D*d(6J0f8QeqN(BPJy!yK&<N87alzMtRk!|EpaiAS5IvCZ-@IrJ$vx
zprob0>ZGUndynRy4{93f|Dj!e0ML+Lw<P#MaE%6Vo#q+=&9%#ZKrZ0gKkdIX<oY!L
z0TD6bwg0mpaP2zYViM|WfNKN<*9i%Tul|St<oMONuY=WSAp{Qa=RB#e>2~Tqu1FG&
ztMd}?n$kO_N%0Xe`bJD>l&s!^GWbPG*Y{4ErDHTpX|5K(M)be!ag7GT4ZcoGN1*2L
z`f?sXL2wOkCjkvW74Z8sT)z<-Edy@cJap`_d208g=su?(jilX8K@f*VvZnq@7Y)4s
zJ4uyuq#TQ6@)}cYgQl%7*rf3eTXUq|>*~fFo8vo6CAShpjgt4t0Z$?^tZZ74;9SQ7
zPb_PwJ2{~vVX!W7Bcm^zP4E4{I}<OU0bDib73i>uX0loSJJZzZx!YZF`Q|a5d%^CA
z$~f7ditSpO5{H<K?&)l!Y(Z{5!vj;#Khx^CkBhYZd7HHfS`gHMvDN+Zc4;kOU6xTD
zlZz{Y5hT7Koc5`Eqlw5jZT9qH$=qc3zNjWIA9|*wat;0=H$rBEMjF<px$839KNIod
zTcHq%ji;I#{oql<BL*uEEfkX*PxuW)u~T~3y9*98?WxJV<7sucE&1H=>_}xF8W~q?
z9nkT|M3m}n4$PCUlYyai4`^fG7gDk-&LPvFDNDd*HOoW3FH9Cs&KOJZ_=}sFQur#Z
zfx^MkLFOYy%UA3_lCBS9>KaY_*I;NPnQT+(<0*P7H<}5)h_@m!0!sdwAgnrf3?0zW
zm){}(5)eh-y633$bbg!+sd6nVZ7k1(am~2$V4{)J<7gE{5YSR(nv}xDe^RCDR>DWD
zXSq9T&q@L!5KlI(eU4Eh5!Fh6r}cGSxa4rjinfvu6`U4<&3I|QT@|a>tS)KT<rXoj
zE$0w?>_6ci2Nnm7p{#`-CzSWSo~dT030gYzbS&X<#Z4ZY-;jsr|FqiKFkv@j-a%u`
zY~dNN>TkcM%VPdm=QeW*Sh;iWr;SJeh={%**kOR@f^CYZ|I2RLXFO+6U>8gEb3s5(
zr8U=0v|5=ttn0Jv&P>GI2gX|t%kIxUG<<jUq$dYrlV#FfCox*g&0IPeFHLlZ+i2VK
ztSdX^R-y%d>zD0|a3N(B!a1!GbC@DggU0+nUx2T9!gK=5h;B++kiF{C<JEIWTr9}Q
zcMWx?bZ4oNQ3{wrG>Z(Og1y>9f4uhnjiGt`I9`~F=VzX5=X@kA<8Y{JSy^S?#Gu~)
z3JTY%$kZ%mI+>k~HxmOSf`y>Wv!>!_gKAik`@IOEcn;Lk=XVe-M)u~jE>{_@BXEAZ
z)y4`0njcoQvRln7HylRtB%pYqBM1{WZe)F44bf65tA|zv2{Ov<1vR%#hCGAC&fyV(
z04Z`^e96Cf+4@9$`QX}2p!ZDdyYzBZ_0P8tiSN{jz1kEO6#bKjPo6f?e{zRcpn;lq
z<j#2IYk9FW7n7#S(iHCmJSKLI7me<G^7GQiPo*{CV+M^2ORkjnd-?Yk0@ZmC@7>b6
zzh>(PnX!@ZiaH-<<Ub8y7#;M|s=H#y#O)!}n??W4QZ;iVS-N>_hoY7ifw<Q6O<3oA
z<w6<H(ZOl386sE2i9irt_9IRn=)?aosa?}ht)P_ik!;}J%rk;5WeTI(D269N<qlC>
z8jlzl#*`>_kL;P8PP<$|QbJ(1?uBgQyH#;Ds$J)o0Pl;U`CscrZd-mRX^Kzb#!P3m
z*1A=pZ&F4s0lrVa@|~C8>p7^K?)f8Pmz|}&elzBX3HP){>eQeqk`ocIvA?kqth`QH
zgzug1Kd(_!c=apP_~Mnah|2Hi@YWuW%~RW1_R$TJz8l>cM+M+><Y^GoVXplppxq5N
z*>Z29wsXaPOBKxm>~Sli-96ATKFiqetms^UU#$M}{iyor)i030e(;L1-jh*ssx8%d
zOa;z2!Xwbo{w(j_#Gbu;Z}@_JGm<&nCGQe&qA_+gyKrX=zoH!S#P&FCx!oiDTSeL0
zQDV67V~U`jrcuk7P0kbHvu&YmIVIILRga3Z8r%Bkg-72Uj9+2HR$=FTr@=-0xnp}V
zLBCbg3bWIfd~}XTaCOjgaqZy)UE+B;{Jw?1BUCpp0Zs58oL{nmaZrc%q0H4T1>E@Q
z-s2Z3ypNv@Tmmiu1=D|)jDtU7@P3E-fl-IKI`(fJEiVBANyhra+f1rkoajryIloQX
zQQfZUNkA9~Z<hCI!r@3b%9#_Tj6t5qU*X1i{&8;Q67VaxzWL;hVb5HbvHr-D0pw}q
z;c?wXy8Ok%tryytfRe)OwBS*4&Mm6>wUiT&gzZIT)wJ3xvp{&W>^+{&Ds^^LTtpNp
zjyxG<xcGM7Di>Zh%#v8R!g+yJ3B-FkcI7GFAdiIRC+(gWdZF6_o!{^swHJ%<@CodQ
z%vRBflKWrq#Fx*X95%2#Mf3B7BOYB~mGOPhi;h!I)d}po+UZNc+S`p_<KSM*CBW|d
zz0j%01nAt+{^CZ6-MuBBo{J}SAFy~1bsoWYX20USIUS|D`1T9Nui89<tAA3~MIm&>
zD<V8PHHX3YHN;XW(id;zDOrezgYFVwf8MNF)HD)!QPp(`7}i}0Hh!~`a&m+-h&dP6
zy|BkKv$wVktCAjrr<(HIDkcS256(8)z+UL#L%JcSbJ2C`atSzSunh^ktHO*AX_&yx
znDg+u18~tiRy2I;cy#XGda(VQ75kG*0Pa)QauX^p=%lpbLa#@01V8o?uzpG?fNO|W
ze^O#Ib|Z9KXup8vuUT@bryi~GYKym1&REUx(Z8|_zr^m~C7|(h_&N9bf0iIYU*Wne
ziaD3@u{)piKFjENwRV*veP6*8J&!W#!r!S~0zO``a-IAV;B&Dka4uu}D*T;sUzAE<
z#)%O*=w#cG@Vq9_l5+Q3-U{AamGo%U&7S6gn8UAZ0@Hk)O2Q|0_cpFV<$XBna8V?P
z_1<I(UzpGCy>d6@Jn(RD<szN;$&tn-;3`W_j2NzLT4=U!LM3e<KyAX)2a6Pkx8+1H
z0h_Oq1<q>jn?9{kv0tlF0trm`s9rod+*I9Ypu!ez;Mv#o8=tsWY^ixnuR8G^p>`mq
z;MTj3PspomDQX!|#rowQk@)b)o--(e@ObfF0&MYNyaZGX{ocw8Z@WK%A9)G*-P43g
zIcpBK_gYa1|5mke6@{XcZCqc<iEV0*9X=0AYDfQdVBMDry(al+QB39%a7!gH^Qb^v
z^<cDr^%78y%J5uN-4B{v4|dtWQ?u>#p+S##8tWy%Z1#Kv&+G{w`wQ>GGvhxVO;%5e
z&NBWi-QSR-yJ$J}xp(+y!|!L>C13{+Dn5XCpQ;a?@Wk-X-NLwqU-ep@7?I%dhYC@l
zv5&uosV_w{JPpJXOXH&DYx;$~Am|c6kKYE5-hKgx{lOTzm4&kfWr0r>m$Sw{OZccz
zT>|7!q1=}M!?f`1pPZyC_pbsNiM(i<!y-A+Yqa58c^emce^;QqTA}3<V4R1UY**Xq
z#rxl*`=RGx8U6VZ;F(c@_i6IJfza>HBHi8|{7@Ry;a8tqDF_9U)7wR_@Np%&iVCSQ
z+9jB1E6!U9uYY*=Tf=9=J(DeCaP`;F?T;?LXI!!M8|TS7F3}q=+n0ceze<T8iNquQ
zNB1IMg<EzjpYs^MQSHQ464yWO1EFE!MKekYD^`DJ|4o<4OTgE9Y-a8@K2f*K|KjS6
z_jb;Y?(pm4VT}Jj!nz^Hgx3oXyc!y&)`zL%$v$k1w>3OAd{)&n;}U>!qWg!ge?@rg
zJpAy?Ky`xuXzP{gRRrvVsE(*`V_x=+BcSlNoR<KSB>Srb62S}3FJI)veV*OnEzDZ@
zExfvnP57*5<41oFpS+UQiRH7aXf64Gjz}Ci|JZ&-|NOeYVth55=@L-*%Mp4B5XnIe
zDL$uRDrES}DtYXcj@97FTK*4NEuIEuo)|H4;x)&%E(Ptp&@-*N&j7lL;q!3(+0YF3
zxdiB^OOY?A?*C2A=ctRGQx9K_!>?32?Ka+f=2s^}Z_&Xe06oYOUWUp<1sYQwD!E++
z@xxX3d?Y@KTy~26W2b*3b4A12r|6fQO(?7Ej=yMO@ysT`OBtTAUpM?VY4MCT|2vcu
z9|manJPf0}@YLnTUm5qk($_@J=8;XLKzopf!(Vy(2FI_7r#9M2r{e+~e(}%Hu`MdJ
zQ|hU0x$Z^P+wi@qD@*(GuhgyT<t3nOSQ>L++!6IJ+V;QnlU19C1nzaDWd9Kk-M;m^
zKqh>Fv&Bah+Yt0l$3HUc{ok`uUUfmWB{$sdimvxPALH;x<NYN@d}p&_PVUo56+YEn
z{PCYzgcrPz7pv#3ai_K`FAINU{qFs%K^pjDajyBi#^gVz|9Y@;1;JHNlfPa9gbKzk
z0VX@)!+#HPPJB(^gh#)KI{(Np<&6F>($I6{TsqTXTLSgDqv};=qU?4hFV@Z*QZ51Y
zYhv{mjj9A!I=)Q;!n@z1`lz7ijUqDlN*D0n;~i@5zXTlG#zIu8xRAE^<H<hwpD;Ct
zdlne>)I7KZ__=pqQMDDX)=$x?F(*n%Y)8iDbXNPFwVi(9ZK~c$_2-4Q-r;ZYBDA)9
zbv_0yj{RE#6ciq+=v*u+gZO^OWgl_kzTmk^yIZ*HeQ~2OGi)93_Xx;6FZaM5+<l-r
ze1BrE`*%d&Y0TmAdhF9l`68b{I9^%V-R;Tor#o;DkKh$s%Z6s{b}LQ`8NxsUohv=~
z3d&m5t<dfPK1H?u9=l8+e6hsdO@))x$pHBzQ61uwyKr|5v}HVxNyn$b%l#(<&HvHX
z6uhN|mw?L0;XmmXaEJA{^?9Fxqg)%IB(Q>oQYXAB0G;i@aX;c{`q*rMB9$<O;;pFC
z_7-mnuE*_cyeKHND{rP#aVE4w$#jU~*4*CCPECzI8jO;19kPE=nG~1N7fTq<ZcSJW
z2DfikM43s*B@2F9XnqX|k9)kfWOWI+!R?UJL-|7gXv54iX3W#ItbZu3F?4ySgbjbs
z8K%2jGxcf^e0^(AAS$o&LC@a8p!&>snWYjpJcBK&hxK)$F=MD_N~E_nw^9&s>^ofZ
zXSKM;Gcbj-07P;tG%kzp)OqXoMwgn@6k~{<wR>zEto%1P=wQEiW9x~t%4>E4jHZ=F
z7ORzIOBpQ_?8w)U-SOntw0R6e+GsXn1XCgUDzvosIgFoJBp5ZLNB+zyaj`M4YOh2A
z`tnGFW@dfWkW_YP#vyiQiuwKbI~&L`=h#QMcB_Ew3TsVm>boH@^9K@g*p%NIR2kbQ
z>YBu~zk)rxGa+^05yvkHn=RF5T&TE&Sk7;ocPgkIHG*fccRDPKOyD|d{xd}%Uu*I2
zjUAh7tyJ9UINDIVH>a>H)-(~3lY31jMWkm%)Bi(j&9366q8Sf!v}|Ci%1xq_jn)OE
zzE#t846|l2g3WWLcwSyZMMjBDC&^3+nnNh#;#NHOOS?hH+gO35kCqC%xD+N^nXqs!
zmmup^_CkoBLw8+@DaHCrkgqL#Pv8Idd~8XKsDFJ&2!xIum~Qwp>gB4vmg9vv@!+~>
z`2}R<PF;a7QRY)AEdvK_?>AdzW&+&9U`|@k&Nt&M1@C7x1d}}71)ouBvT1iGQAd5Z
zox&G)td1W>Xz%WfAR3uteygWsCu#D)!O^R=A10nf%adBu9BgQMea)7D^DHB+n;;R6
z8UeG$H^>HmCrCaJt7fqICSaR;>|ZHBym)<kxr|WNLcC=|>gKg?Ft;n>AcVC=y9s(8
zAb8>ZxU{X35aTH0pKT2v2fr&=e?~OULC=jOBZfR{lguMdZCgvnCqFg@jnnb9ojh=H
z+jA$YAxRO^w_8$}GBdcVnjILtzl5mo+-0<4F`YE9#N?-MN->?fnM1I|c<xZK>v7A=
z9e%2tfI(4ukvU&cyoS9ODVY#8WUKD=)R0V*$t-=Ui~zyNv@9#{O@SzLM@b3iy|hPM
zHf6NUR={+c{Nde<yl3f!Pz5J;PxH!a1i8cu0kh7rBTLv$^vM_C3NDVdF1ycK@MCPa
zwBVnhFQR;7)DA4ro&75FQSgxZmz1|n^crHoJ3RQB*qXi`uJ|}7%jE%OCW#7Pjo`3<
zbD6pAtxr)MQkyGQCO&OnK*t+q6mf~2hcm+Qt8#<~$2}_$i1J&h_uI4X5s!EKhqB>x
zy`NbbgXHR=W$)%=f!B1^TCG+5S)lX-Y%O(PJhd3bT{jht)6Hye56-vfhvj`HLei2Q
zZf&dNe=++0zW%_p&m=NG{rM^upJXKoBNSok3c)xvElEkF?!bel`I5Gq1@+R)A(dZ&
zzD^BgKM+qNMYA?1WL)LfDw<$D@5b%c4~JkWVK%>irMbT@DubW1hjJ8JQR>Dn-}A)s
z)p+vhiz};#E1*Ch&j+H7apCT=@<*|;jSkj3+m?Gc4(|AdWKl298$Z{&I_)%`$etb*
zSGXPVOYYy@)bwcUFN=LHMrRJ6Ok4r<gN7o6Nm;CrOdkv{%(VN5hf-7PC=7oha=r`j
z3fyWP&G){u+o!r$zqRSrs17$;k}KsEHf-EnQELqhDqLns=xz$(UP%t>b;MQ9i%Ijy
zIWI9gY8G{j<RKig9{XTeL-w1fF@nnVbe{LHYOS!?Xv(tB3IVTvzIKRqG*}&e7;tQ6
zaS{xBlWlf4g(}JH9`Lw1u+iVWv^3e+WAM<NXPOv?$w}X=sYaA@@W7I*w-q>9MWD$c
z1j#$c(*{!Ma(n~1;@cC#Qb|;kt#v`;^U{d20k8)1&3JB1N(U_?8_mUSVkDthyz6!Q
zchls_7DFtuaX-vpt=Rq~y6}-oe)0S8pPbH!b_{w%S4=V0^QXHkMLB#Rsc*&1!^hhN
zxsAx^&a$;sp7_dL9{Xy@tnM|NAw@tRTb3ig_lj%r+-iSLg_`Ui2oaLs$;FYmbNb7I
zA0|cINN-d&Bf;B5R03rr+Fl!DeM<=rhqE-qmz83!z>~Wu;!q1ux{gUrsteN|caPZp
z-1qp1?U#RHhW1L9-7IMea-!1G_vA&I&8I&mE);by2d12IHfG#Qc0S1tG(GRA)e~-o
zWpUk2HsHIJoJojDO>lW4pjYWEFKG9vxw%Oj4_hQ2wkoZ}#`XjMB5TP(dH6H9v%_wD
ze1*trdINvQetgNdTYL1t`<~3gqAtXoZo~r**b<+Uv(og8*1UG)XQas|3(IX%lf!z{
z^6#q9kH4n_e<kn9qz^*j*%#5(SpX4xqiLO(%}4_D6pl%xC;ZsmzPw$Wb2uqaKDy>@
z{;+e!aWKO3wiZ0~TI{O}8Y@N)=GQZX-AiWorH6A_=A!xc+30xN60(JC5;vL;G$lsX
z8AE!KXnd)`+IP*+m=%bRFS2caS8mBU(0?huz!&3TAL-eMs7{ubCkOM57A27aeMgLF
z*p<QrBlc`o-*^UYm74Nf!jgdo51e(AQWOwCDe_UVcQ==#80v5}mLFcC_;h+RDBh1H
z;P5QlFaGL~2aiF(TjmdlkibuBAkmjUKbGB*M2c}+ExbROHtVDKgpynEHhrt@{w=);
zb+ExeO(!lKZ?*Bw&Dz$s&S<fY%Z6SPp2H1Qm;E!v))K+v`0|;;rj%Z5GK-C%(~>}M
zEYO!lTAgVRL7pP2i#+?dvs==D9-$E{Pc>u$+G$&^zBo<EY9f&$KG~#N)?#WbD9{bz
z3n-6USl>sv)qCFh(V8sG1*Yri6_g?A046?cB*Sc&*2p_K4JH24p#99+4<9wM&7A7`
z+=7Ve69+hcs_)L5F|#!RYk#SfIX*Tq@YymFNqS>jvYl`K1_k`|aNt-b!A)DOuPt+B
z9$!asWD@$Il;n0^*cbQ<ei`%&HA`wzF{AGjwfy!|DriPn)ORJv4(^E~-tI;4qETXm
zUM1?GO77%Y^5=3fw$&UaQxFs|JyH2yQul1}VyTppOZCBYl^GsF@rE`i#*Bbs`zlqx
zs0PvzW<b(Tm3gA&`AsUzI;AJ|L>4X<2NYG?-aESBOWotml%k-`Z~F_Hq&Z)bE&`$p
zKE1bU!awBxepmmyr`6?L_SYZJ?BHSV7O$3-rMmU6D<dyng`7Qlo9d80#__g_sMD2(
zs*Py8$5=S=ZP~VB){WO1$%MKmCH5`W@v(caECl-8D}z$A2nRkh=MhOYNa$^@1eI{D
zrC0gvsrEj{W{VPg2_myH8SVk^Kmflx7$9}c4~w%b{PRT3zT^)!segQ*c3k)F7$WrU
z@ecm+LaNd8287U@q!)dTgG?DT3_SLd6{eB&dBx@7zxTVEEU7esF-73lw8*<$TBXhw
zF$lFJ%HCDs=>tIphxB;nEU1pn@f4#Z_-N5v_UzH!($t~;PIUG5>=q)5k9n-#s^~_<
z>PKh38NuY7y_al5p@OAM@~m6idx#fAC>lOv3r`3cibF0Bl^Ht~w;WPRDbjS5>mGyV
zur!JkMp>2UU4i2&3rZ+a^JcC5p@EiE^Y@<YuZ-WQ>BzcKX&F}tR-rv_AAhZr@v}}f
zz~VkPg^^l$awEH>%k@uN?Z<Y4#NxVQsOUr0-pY*x6nENP=F>`TIG9Y6_xk`1Ex(C6
z!z<zBxL^G?OQ%1~*w`uJem8e#S}8GQ0mDB}DAB(rVF^l!(LHldj)$Gp(n<N&i`xS4
za<zR6dTK_<by(-B#Mxk`M6*S`H!--fS4j%X>Ynpf^%POldzkZ*f3$}+)=Qqfv=C9h
zQU2S6E_Dc5-F|)v2rv`n{0WUcb;>L$9^6$N%(!u8;{7I=f!NqfDaqp8UjbrDp2ah+
z?CoBXthB3Yiha$RbaDF{Hh#>ia~k%XH?w!MnkW;8xwS6d!z$ROQj^MRVoQSpzO<nb
zABz(F>bBnYuvjpvLTeDu8WC6mbM<u3hf01YXxxzW_{=-{u(_}KdYiil`6p=)#5wF8
z5%qhWY1YdDYJOlOg+c1gu!ngGz}dtRQuT&1SJU8!VmR>w)(`BGw?baOJ2uxGj^t1d
z(TVt?YYV3fe^6S@P;XF!lav*dSQ%sHdawAXOixGRIvDEq<2<kA>#$B{lI#s0ZL5dI
z&64)1dzB?Ma;@L2e&Dwkms=B1Hgi5ao^k(B5XnpX+pDF=zWrI1k_)=?*xWqlLo~lv
zArTGBYNRjeo**Sj4~KS5%~5iOtK)`)7~OQfi9vyl3f6|EswR1#E=$Q!9NUwr#e5g*
z)86vO#MT_19?qG>D8FYfdpBarqTW|+q%X`d#7t{!9~zwL)M#0PREnV;v05ENSDW8?
zTBC?CUc^Eku5tebsWSJU+zR1&(w)<8q_(EBQ(2lmgmn`|E~;q&eFsfR|I}&ujm#In
z5K(}z@v3_>5OO-p)4hH7$SaeT;o0gowmPFYN2HM8QDOKK$iwe@9gRZ^h!Lk1g*$VP
z_kJTvK1TD4x(BN|m+JDSrHHV4LFg#0V2P(t;Y^KNNc#Q;&+sH-_|Tx=bmy;7SLwBf
z&pX)tIeG#Z@Jbn;9k8i}y99WG(dPr-e1G-k*(hL60t0qJQp5!%H#oHXJY7U%19MfD
z7_vCLk8W_boWIU{w1lCIeb{etrZ}T?s-*mMe)j%t+@92cRU7GCv7RH-eqiGi%$C@t
zxUcaKgBI}RD0VR*pWYNn$!GAnMCDIqv|O&k=Y(ux(Bl`5-`f>rl}^kxT||K%=mYn&
z9~>%MbL~!*Xzd#!B+N?3g{;#WxPDCB$|H{{W|oP-$05@e$ktq|<;4lt<TkozP}a`!
zwexr`V~)9&><Lh{tN+IW<SlX8@nv^W<A4%mVj+W8Km0RNWc1}&%(A9`0hE>tmLhmO
zWsGqc5zn&`jN8qM-IxbU-3p-dyLUWo(Lc~`|D^dwrOuC>6lDbnxhS+Lj;*9Ny1Y!S
zf@g(pqlyi}F41?A6DQH%EmKl1>(CgNc;;oUjTC#}qP|{6GvNXZYY6o9qG$BIvng{L
zWTJwOE0kO3{MA<?#ULo9;3m7fsR>ODklbZscs(mX*OIhoqd4cz)p}#up?h-8T>azl
z7W5VB<kJAF2Y3~pn|~+ZH)7anl|)8KEn%^^PL65ZvvRISk4)UM^=or`j{<Ln%VMg6
zQ(Soh>qM!hT66Iub2HLNyB8kQqyu2){94WN%0%bAhOQGs>RsjIoWTmAN&As!V}J3w
zHB;FTJgi~i|CE8?h}rRn-jY!!VGOXqw@2HhZyUiusd|r=%ON?{#K7g9{|HZ*^@I$U
ztX<dB`Eg@(7O`%y^9ciuYMQCiehH&oUs4OnabAYm@X(j%XLs{Wykw(y`P!GJ=(DLk
zl}f_cGOuCZEtks*M@7hEaQO%P`=v&@?9O^O<#M&*)Vnd7ohBYduE*WYg7T;3_p|SM
zgykU|S)hTYqo-3`trTNwF>d>nd|0Ke;7tV+UJm63mRuVhlT9s(g@@n!y(sLhr?mSH
zpevc5ja4$u>>pFggwM}z7xUb@1mu0suQM@tgQVU}Bd#N|{E|9&GfW0i9W7KSsjp)2
zNRMR7plNw=-9URNAIga{96qJDL?P>v4c7%ml-$GBth!ADUa<w4I1G)k$1P0@f9p%u
z%{-A(;S7UhGrV}tub{K6c`y4~VO_=}jMxq49F)}5!l_+`ErspwJzwuKEs_iNvE*06
zky+qaorv?{Dm6b}F!gi$95xds@<Gl1wBz~6$Ji}LnS7{<pKqq^AI;C-AGXa*S=<vm
zM6Ex$1Vj-R6cD`4?B<MeV(Ev<#UA#R*a;`vi$bf`rrhO6p~5P>*R(te;N)YFrAbYX
z9iZ;-u2tx32sCZ2b1Ps|<+fQz5PS&vmWDm_CqaHJaBdf$c$E|?NuP}xCMv(`&#$=H
zKdy<f9*I_2J%N>a&LLzt7ItLvIatTF@2)=LV3XF17Ozs}yIm<DLmHl2nC>ne+dQZ`
zpP#O*EFu`$Kj1ANqS-#>9_VM)t>-lww_&Ym8=FA1?M_h;)@EnHQW&!g(SlpXvc+UC
zYuPP}2Q8znlCDfgVi022rH6P4^Z(r)rDlK3lizIvv90d~Q)!(U>QVWf1`OdYu%rd2
z;GfQ(wxOr($I7zgeLm^w)i_(U@kT*itE*eMq6K6<+~-`h=h3MW1hu$y;fc918xw-e
z@4q(G&xKy_-gr=uO{p|wYqhy*uNNr~RRGgShTo8U9Y@8o6wGGMPU>iAF?j>+TfETW
zY<z7udO3hPvBS%<H_yGOw{q!|`0D#u!{j)8$<Y1ru8ZN_(@sHgD~J7WU+>t1ghjoA
zu*vCVZ^Tc`b!;6l@e+^x-kLxYpe&)o8&Ax&vFJ7qoO4KsiHfC<07Gu$;?n_!>=p?J
zTJ@y3FB7p3GJNTn+u9!eF?~(tN(Z!24izXPx+qkXJ7(cvfQ%zsl9@kBc6#{>SeF9H
z;aZ(zeb%i}=piX2-GNZ><_d#wW4gp?jh)>q;n&&<7$u#+yL(EmpvFGx0iM8FeFHP5
zlVG}=6*y^)4@hya5I0`l${4y50q-xeO)tzLye*NxSWw3Po?(>=MaFTdO6EKR)o(I1
zFN!+YqNB5aH<>A^WEn9pi)3TF^xhGq#_AZud&+3K8r%jp!N(Sn*c9q$af<YoD9wlc
zF^Sufp5|1PAfKk$>e-3XyD+p=5LKegQ*)Eq<~(G4UZ^lPtdD|dz@b1lc7k2WoeY<u
z?LV`OuU>rnUb0E(tM<l@TCTZ)*`k*9guWu<1>J`+>*kE3a?w&XYrpKK*s{H7mFGY0
z@4t<0g}q1<?t2U?8i}a&df3a4k`d6*YmJPy{0ZeKtHs_Yf#6=XA{kLVFZSJq!wsYj
z?@B5OCd8qE4|9z~lkON15X&1isNU2o$tCEYUJ5xeCqvCioMw{Y6%{vcU{sU37Bo&y
zNo*M{m>N7gBTR9wl#rNCPYXto-9p~Y31KrQpTopbnsm=TXo-I&;7u|wxv`bhiHJcf
zhSm)g3bVPb+!BmKC;mgudzD2KL*N(?ht0S(F*x>CWNJ^@wL_d-my3NS1P(vR>Cg8~
zT}J68(1N)!GWlz+CN{pU%WhF&g1p(@oD&KSR56PNM5yMiLgDZml@%1e9I`Y-b>owR
z@gN#a7emh@Lux-1rJzCLgG;~-VOW;@O7eP+9x}=zmxMX$rdQCPadLofKa%a0O^4mI
z;Cec`t80GfSBMEquefkJom4pJ2Et0Yfm$Li%|#cj7g<QDS~;k!Z~xBRbO1*RO>n8j
zT3J#}%3NWnBpi!Dlaq_(D!V5AlAshtZ0^jIJb$TV_+Y*E1>`>cn#5@;NQL2=furuK
ztN@;h?uaL%%x|n+?8)Lwuzlilr7nWU0q>sWV56e&Kn5y6Y&a+_0q=kOv>%CIPep$`
zq`+3R%XCk%Dmpp&uA)7a_)7R~<>b<!K9hacf<5|N15B5I+X_i>$_sExFqu4C`-awY
zT)q+L0yGkzY-yBen=7zYDw>mn$!3|(m5G-woE1qr%&#reRKvaMd)~F}-Cpu>7*}4`
zSyj>dtcJOuwYe3a+0K<?)Z|;5sVz}jep|2@dj3yWSiYr30T&#1ulOj;g&CkHuMa|p
z@Nm6^f^vn*a3%)zxSh#G5veyiQS>gP-NIPRTNN|bC!u{n?uS^JTa$V(d<SlWle<@E
z_YiNDiw)o&2NRPM#ko5YqS+p@^Cgif9)rE3*__JmNihUmU@dLu(6?MH1pV#X%3;C?
zp?9*ah9~~TUrERYgA!nqMo|o7b9Wrk!Lz-N2<2tm63gRo-#-2at;a65N~cJBk}_s&
zQW+jpLk;&nk5AfaLF6B9`RTkm|Cso6?64|4Fz~<)N~O1qm&Kypm36sdO|AR^e_y-B
zj+{@_>1-XrUmjvSY_>grM2UiHmN_y_W+b@zAPLrAzBsEP*&P?@ix)d9cm)C<@LU3f
z5gl3GxOQ`OGnmRf*~t*eckmpg6r&9Dex811yC%I2BqxF>4%Ch8EzzE(OApkY?B$7w
zmIvBTzwK&=unU~%h}YYNm;epAx*8{s&8eDMToP&L{g-=-EmvzfnN3xNE8k|x#ao@>
zLNxitp5-j0muyTlzJs-YN(FlgSW9li%0r2d^D1J>7<u4FOvz~+AzDO{=}+&Ga|#om
zJ_*X1-w02-1Mhz*b`fZJ=3d(3dF05)r>jSXHj=AgIqgiCmOk*V{Zsy#x>SW<NVLIQ
zXd;zmg1M9E8_)B@Izs)0S#1@wQWv>?9cJ#%U<fnKTx`zbnR_%)0z43v+gx2K{l0&6
z$!{Vy2rX)0>csrVjMo-;({Zvr$i%}pcX(m;?gay6k_(em^RD@a8H+>4F`euIBIyPD
zM*>&nP(g8ttd<0GawRy{+iiDF_(T3--P+GOl{_sqUSP87=blWHT`%9C{HIfD{Xgu`
z=wplMNWp}<MsH0CTa5uR4jL^N(L`-AZz}!cDK<J4%W_$<@!8%8%1xO#bWM|%TC4)w
zD`P#PROB^r{WsCG8+XDwi@xVr{xPQ_0~&}0_2?FJ@wr`iCs8Msn$kw(@XI--2G(TF
zRZ88=I$e`NX!qqWkhU%@-78}xm&o;Y+#ypl;AH@nx7*ZAYj07?VQAQ7ld4Uq4Id`d
z_3Re60{!|2CzjBkwRFAdR(8)S6Fc?!vK(jTE5Cv!S09B7@w$r?2^GA$1mxeX=7wGZ
z=*aE7%k=6bAsHz=&KFJ8%$bpDDLd7|A3x0FmU&8=gD@jYlT|+;Ol+;b0e6c=iYevR
z;1{0OCE=oL{<>YnR9+Hx0r{cQB@rxq50XkP;#<jcJi)G&uhUaw2Xb~c-2u7%ISY-h
zJvS<A?0T(o1w3#5l#W$kzj?23B9eJ`449DKSlA^@&Ahgm(Tf~Gl*&C%YVOgW)_#tA
z{;2bC1ETFoM(U<zAYrgWdrO5Q1Mv>jalY}qQr^kA1}t<^y*m+sy#!FO&w;L8gP070
zO)mk*jZmznHhhc&Jou%7bwj&YU6F>4ttCZ)0O*-OUfqI-uO&BFQc+eGEO~Fm*T7hq
zNlb45p2glmi27os(z{P|cHTzWHb-o=dqLQ4gC*e!9R?c{?jnV@ULPg6H&@J|4;`_I
z)+b$_dZmSOdo7Kx^xH{#OL#+#3>O8AGl}7nxE#DJ&JGUH-$y?!u`8D2oEjt_4nC#7
zFTFPZ%ii#ZpjdMb6nn=H#oLmibqOHAKq{n1`H=dL0$0@FVXF-iMimd-sj2<{Qim*c
zaJ^&1*e=6jXi)XD=-0hssut=&w0+qR<sMw|6Z=;3C#OnRzfEOd{Wf(#Jj;DksdF>m
z<KZfZ@iePwu&s3T5>N}xJ_(;Mu);1{9LasdKPJwqs*JC+IyVe(q`E3~io7ipXNDyQ
zy<eP=Rv0%M;4qTsi2Dwq?~{=7u}opDY{k$d8sBp1ow9oa%}|-);cPV1Lbl{C44{~p
zL@2<uSTzd8R1cQ%Mo^}!igF)UzXK_O`KGp+VmYzIPy=fpR@$_$C66~b8~VHC-iI-C
zexjyfF<E}2S~51ryT&BV9Q?HKZq-{yR_@(Ty^yRy?r%C#kf3#NW}<&Vn2R2B5Hvj}
z=ZPnac1x!rq?N~MwOl6R+&id5M!BikbZG}{sAE8gTyjFR8K-JcBgJfO4pd}bC%@{R
z39Zw;m4<$FPy310t_xYxD&Oz7!Zay9a;*)tiu)UyNDW}CHjiHQE6a^LcnfIQN#~zh
ze?i(R217I8&^OAiS}WNb`dNIjy9oIl7-_tl#58*lc5tE|6+o4#*)M^jIc(W*J9Cfu
z+9&R``Z>32?3Es3B`+bKAFYO6(S%ae-DShEGMKDV+y~Zq^YPcYmxH74IDM<*xJ}(*
z$$X?X_*F`UzGQc}=n)fp&kaO{xBQV~vIR2~=gz%@+ISv0^4s<CMC^iM^c@N(YU1jI
zX)PRPp-)slSqN17;*02$;8MAbK;(#P3{r*I){%UE9HW-5!u)>8MbOK-DsKPxDjrnM
z?mR~3?@sb$5`_LL3_?lB+lh@xU1b+NUb(gAUNkpilR+IGv|6(34_aFi<d=h$tK%WP
zb86Z8T|QUpB%|uiN>+`CvT+j8iPb#cE3U6SQPKiU*^@CWTK-eb)z?;X;BY6tz*EGJ
z4YZ^rFFm6LyHg3(<mc<Wui2imPLDq=)QlF@e)&a!q7@oXD^&W3sZyR9M)tD8(mf_w
zo+atv{C=I(ikciOw$o<6{z94!D0vAG0atHnsrmLvE5DCNMwLK&iwh(Nxx8Pqa^5Ie
zNdfK-4<HR+&R_{wUb4su>Lgvmu(a+L-Y>d=h)a*zaI{J>zERxu?$47t9Xve`o1|?e
zJ{fy{|Eam`o_SAHF<LD)f||G{Qw_Ye3Xh)e4s)*xQ(9V(TQE;yuH;P)rD*MUA1Jl?
z0yOwk=g?_n5*cE`v1BB!3p@OJ`lGr}&NliRGcu;PvPQl&+8*_$kZ8ZMG)ulkqWP11
z`v8J0S*TE+m-#hG^)@|3(JNQ~$%g^6>STGkPs8?86(i4DYj{>$JW?lIznqKWt{c7d
ztd_pll(EcClk;5Q@iRH+yQ{-~I0o||tRK+S>;2C^kPIJ`D0q<9a!^|JMm)%y#|V$+
zv^kO@u@1?rO~#|-PH8K-8e5)zlL6?<(7wEQBW9$;aTmq0yy4Yu<$q9FmCWLuaD^uw
zU9z_y!ypU&{LQ(YGIxS#%YMgY*DpJju^1`=VBNm@sfia0Gc-NE?>kQWS+As#)X47@
zlb>^#Y$0vc+(~1-w*=xdp<Q#OnbFM4$L3QUEWJKD`p>$}%;8%=c)!CJSxb<KA7&AW
zrbs#uEk~>#o(9);u+!M@mKC?Ie?TRwO^jnq2uEk|IUiwe>+yaVhid;wxf@(b0$dqp
zd*;Ya6-D6zANvXX1!XN_(o5iiCF^^L)w6aCQ0UM{(GQZ|+I%vgL9)?lVCD6R!qd<?
z2lKM?Q|7r|XeGbgn%vsz;sQFvJaWIGQCC5&A^b+3)ch#T05m90=?A~%_lJ(F!=Oa)
ziirkr3mR`Y!|tkFi~A(`M75Pic`;vm3IAXZ|GmxL$x({dm8)abutjT#%f+Mpa4VKD
z{2>GPxda%W+F9A6I*l)EMV_*6a)gx*NT;s($L`kDz|c@71)G@&BYxAg^hfRUmGAqK
zC42ld6~pA%D6N0GsR7^h+uMBc$F1dJhK|UH=Z`n;1j|cEb{8s6tAk=;HKnZ(cF96w
z8xc@Uq~={x@cZnWpmhtO!%KiI!j4?GK@%F!y`^#qVE$bq65qyhk+mH&SgDWWC$;+V
z5<*J;k&-XY%$E6+VJ)Gnxj8JGlPY0F`>v@SWF|l`9!beV`wrLKbbSDsq09Nn#Q!5w
zv`$N34+jp<q&BE)dGp{Pe_Z#8hO>9j2L8F)n}c~5^;mX75S*Scki-u<9;a$Zm7~?j
z7+u*Zv;X-q>mJ|6ai&Qyu~23aa=4^@4a1zuG@>Le9UmKkNqomvl+ue}B&Ku`t*sD#
zgJ7IZo!}iT)}WbCk!D!Eo;G?<cIrkcVY1xF`Dcp<ie8cg4hcWKO@Q?vQlpkr|B^y^
zbrySGb<f`u2vaNysFrDeGr3W_AuieQfW5c!hg6~bXceet7(y~{!$#&au{(oc6bgVk
zdIc2wC7`dZ>Gwp}twSKU3@!osfqfV=4`2C+EZrZUuk)~JBx5xh783Mb(Ib^s`iYp?
z?;p#EfpH^H1kRj|-WN=r;o=!sF3LT4Csr&=C4j~=bJr}PHaTS^Vz`ep^QgIz1XM25
zA)B1FTWpCG1^O<bx7Flfc!-Eu&Rmm{HLw4Cx5c2L!R0Bd^8J}SF-Sxe^y<3Yxxw9p
zGZ4G5C=HybuI+FKk;Lql9>(}Q9GAVO?`o8UuMzi-r?n-K9N*UL{9!Xw1Ig~C$-+J0
zYRATxku<k{WoVCa^^OOy{V}tU)Wn7+5TZv;AZ)-2C5M8Xr0x^P2vQc=uM5J6wXtrG
zpO*mQ$~O4PLrZ53ePr1kewd{+|GM?fgoM<%EyBi442M5gYb~$p#Ny8JxR#-$y6U}|
z=dXLO1D$CPNJP`^(mt{Uo4cufmpkCRwNt595arCi?p`Uc&egy4Sn0=G0U*55J_|2H
zStF~>?Km*i$g@=pit}#A@17|0=S7ojc1OuYtR*l;cxcPj+aFOdv24=`ySqrvOLCai
zk_tnasD}8Kf?-Pky9xP9$GwKbO*KgjH_f{s&o?G^woihp<6KtGgaJD}qBYjmH=|pZ
zQx!D5Zwtp|=-l0R&G3awW@H_j&rDgy{lX-OcEjR@jg%hV;p?v0sfzHWIIr_(n;wW9
z;SB#N&A)Vi0zsahP9U;zG-cs{gC^gtFKsKM_k*p=1cWNlzR-xv;+J7A%!k|wu#k~e
z7^j76a;W_U$O6U0Ep;x8n#5?RJ${%Ja!c(!r6x6|#Pn^xn_*dm%wBPBg18FfZm5U|
ztuHt?p+V8@4z(t8{^(MZ)__X+t&)ZK1me+zvRSu;v&s@V^iab2QSl<O*-=BZft_o&
zk{IH`gbJYwJbffu*LTERchVu_gjQ+l8#~_owx3w{EMFL(XYXWkl1&qxJkCV&l*YFB
zuB1oxuzqXw^zr6j<tY>pjks^dbbS9lPrvQ1!Mm~^W8)j-DJ=DK%T;QchDy>Gw@p${
zg5)DcDs6L$=dj?|v%q}>qv|dg$>^}8RG7h*Xr$IC)cGLg2KPg^_<lFnrvaw<l++5k
z98qcn8RE7H?RDk*_iYJ3^@t1Me)piQd9pp~H^`J9BSr+@N-;slwu(dRPJ%jN^qDd4
zYApA>9w=<yE`FchhWn{*h%#qj0(mZWiZMV6TsTZ^YFFq<;fioteUPETIE5oH_cZ7d
zz)BLgMLTa;O9vtB*?`zU*Vk{WW4F0!L>W7<n*K2xy{9lbUxg{nxV!CWjFh>4^ON0(
zUNWv=x0#5(B$TyF2(K|sAV`&pxN<WV{))){rgW2L^|QA(`@(*{eps-Z@;&bOi_u+u
z+Tsgyv-(Ur5yhwZQ{?FWsEB}_cv3#b9|oZT2!)4FI=p@8wbj?AG$nKTk2|)Hr|I|#
z<#02c#L|eGPUDIpg+%Xb;1viPMR;bTWd!FdH!6Vd^EyH^;!P10TYFWhCLab2;>7;$
zB2ix<7w*;EP&8r4jM4R6KQbpLTu&HuAPbm@7fMU_GAylW&=k}WR~2fbSJ$FcKym(>
z6C#9TQ*MdPRy{IT|47(CYaBBe-$&h|vh3*^H7(|qZvw+UAAs2eBdsc>GS)PCi><da
zO?Ei6&g*sC*xdnRJmSr}ou46ciD1WJE_-*vQMpvdU)vidy3Ye|6$$RR$Dm2%C+?w8
zsF7m1w8}y4v8c-1Z!Q6@F(Kqxx@bmF=7qHh#f%FuCwy<F1mghQO)Ro2W74o}sa>u%
zGlMcoKr(OgM;eQQ1p*)ZGBfeW$&Q;*%C~+FO=*QIP<XEfnM5Xoah`+}8n?~UG^I)7
zDUvOdjd^?np!f$Dx*j|%l?mt`pQub8+7O&YB`iRzX>R@!5I|V)(AHT@<Yr!}i?|$a
z*ngAYHa(lX)~hrxEe8D~BW_8ZQ$-UJ7G%c8Y+o4-6CHhm_o3_Ca=ASht7A@2chW4=
znXX!T5=P(t0o}VwXWtPC|Dr?V_^EsGiZ^s(-~_~pQR97CnrKlgK9WAYl2y6&#5<3~
z+h^R{YVp)jfvgzN6FuO+U_ze>CXy#6@_pSG78Kk#8#pRymgl#8r=P0WoyjPV73Q~i
ze102JC<S}AT&1NA1ULV(mJzTP=40;qV3kR}6f37x-^a4h(Nkt!6D*5KI{3?;N(@~V
z|F|c{a;H*4n_sL%E%x!|9Y;+W9zlNDF@|6|g}P1Cw|oXyulz<2Xvmwb{9_9{Aom2&
zl3y)U<{?Dz=NPb?r8}wq0@6#j;(>FLnv-v|g62Ye@p@=ionnx+uqZGNm#Yh#oz%nE
z9YT!DeHarD%P|(G7WA(v_Z#k6O}Hk&?0%JEc;d9hm=K0K@q>-!hRFq=Raaxu&_8b(
zQ#cp2W>v;_rSdQ*fyql$T13osPA@rcD$L3ZqbO~Vzs0r7+V9KQ*&i_mUA<~dtg#Aw
zjpZBURQUVjmFuobh1YKU$1U6Zv9iZVUL5v$mV`n-#lRWj;g}x*57B1O+lVnwc|tP2
zhPT-JG?M~!)cqkpgS_bp$8G|xE*zGzcTR&3gQ1y=VhS=dQ_Lue^kj0%&u5LhB|<sT
zKpR^Dot5!oBg>ps{&$i^LPC+gy%yA=IyU>eZzC(*`ieTzsjPU7GHKczWTaaSo-+8@
zSzaSZ%i>eL(fUFT_B`#*+Q(bvkt~l3NC(8d&HM*?;XJSo*Vzw<M7WWaV|4$<UWtsn
zW1ev0672=PJPXnm7F(X`V0TPq^+9n?iXXL^fvTe3Bk9}tKAj;Pn1DOc<Aeq$OH=)}
zz8~&!XN`l8&HF{`KYX}}ru)V=Ndw31?>Zzc*=I_KN_{}>H#her-lH$rk@Nwl@*Z#m
zz_TQAIq4~HE+AS;zWseP$TM`-ctAY=+d{fduQt}K4b6!@C3(!Cix`KgAp@`@Fwug_
zxBc@yePD+J*Z%XI*}mR#{w%A9av$nD{y;1hUDrtY;zw&U&1NC}C_0)>UV&x${x8@_
zCue1(<^GcUsyimzktl1HZ)Q@aTs&LU)(76}U9V5W6feBTj7;z(8$b4UO^9b%<*$_7
z54lBXduy00R0mm+WXr@ste?%V<UH?ReoIzV?wOmQ!BZNO8Q=a`U`8GHu|=j2swK;^
zj^O2stXINhV@>^ursq%Rr#04Js2gnha+*{|p_m9n>w-|%H}DT{a!2?|)7g3F96b|b
z;QMim>XGErvX+rpN=vzmxbXbN@CGy6j#l_evY@qYt_uB!-7yZL#x$28w)t{lXyNr-
zisrZ^WuaJYOO|UqZ|sk!K7uj(gUp?sJ;J5(kB1N6+t?2ZKQsy=p<`iDy>Bx~$T3Hk
zuzObWN*#xd%OYVu;9A@;;E_N4<IO6PTIH4T!EW0ltW@50FD*RD)(q7anN(+)Yu-6v
z3z7Q3&+$_7d>T$aM$nN$1Dnmtl+eYsfYtc!zr~u_*7pakDoP0~GZfH_Q38_BlIu7a
z;CHqjd(_XbWqs*FVDSX;`-miKgYPAEy2U3uLsA&$=}LEgOcMGH&b78Q2+cYOfBOoH
zVY$n&VAD4_SWY148|>?N^0{%tfDQQmyPEF`xF^FzM-=dUSf7?Nim-4=hwr(Eu3K^P
zgNmj^Qo~xT7OYp?;O8(Wb@5zl8w)Iv&cXi=M4F;5iSbh(+1^s55`Aj;uJ}?WlNBc0
z<M8uW{!@s*-x#Gh^J>(a-1HSQJ9G-qIAiXz&3uL*kW7-rla4jS#GruOtNao$SUhtg
z_rAXci(N6-8f&I%YRbO=tHH<UTA|5O5|3sM3V?qee=B$zo?-Fc;X|VBgCnKI_y}wv
zwL25b&{T_FPK{Am+hHQMM~FWM0YhVP1CF;WKpXc+fgM4=w(fii?G%cY50v<Rr@PL;
z!WJmc{9#1@$%*-Z!QO{NI6GkvhQ1df^-+!G!eNOM#OnCG$eD<#>Q*DjowOA;fF$a)
zx-~%-PnM;DMsg^~2xwDLX5J*~H@IiXV*E1mz6}#)XbDl$l{UPaj`hhLOW)*ko2V+m
zMh`~Cr6`x=$XGpeNQfJ8CcD{*xQ1#;6}mo`HhGT_sWRIVTeu2(bdS|VlxKDHUFvQ;
zSB==-z|FWxtQMW9ExG7kj)U~hQatKKdi<Z-Wd>>;ih5qQ&)dG4t@1|_tN)=bgG8cB
z)X<l>^atMVtr4)eL?_8%a#o!vu!g{OcxM$MzT$~oxcHi~e+g(+qYQhyw=>q;dXfI_
z@lJ?Q*!!?|jNZoseuK#7=Vaxh$S6P9_e+2;u*dUMC;RtNviPUR2i3=c?}875nA360
z(PP$IYa8=@$w76uY6YxgD@5U0%yBXZnUCedYI`LGzJ0)Y1`EcSCYt9%fifY%5UOUS
zKTNHl`(wQ&&BgpPNn?ruh!;AyTiAES_?tBD_AyWRzO0O;cEbr^%v7cqG^b^n8%>uJ
zH#S$^Kr&OX%H?+7*)$)SGn;UAedn_HYz~@y?Sk}9qM2+VkMH^Xy1eYp6ECI2`}<3$
zf2<H0qe@*BEq;TsqxO?rhp3u)bFyUKVX!BsU$vRt^xh!<&VZI{w0+<oXb>Xitp1N4
z4y!36)$i=WFHlC!I5Qa>Us~ab{P{;FVR@p=w11Gh!+{;t#A5GC*e9ceGiM?@+<sYB
z(Hq~@Dw^l<D+rRe5huU8cj36CBF(i*)i}c4l4LF_vAWP=rSQf7$N|mB?B&_qM6Lb-
z&Cn8)Y37eBXh4d_Sxi1MG<Wr7|D4DBNS-Mll=A9&2fF`%v2fn;RQ~_}R|?tNIUFi7
zJLn)QDdX7d<eWNoj!m47y(`K*jy*GvbsUksN9M81E@YpC$R?zp_vicj>-zV)-CvLA
zcwE=(`Seb^ERAk8PFfx&0)e{PWk9gjAoCZupnBqMEVmN$WK&&VOV`iLl(_CDBrRv-
z4tC;5a`b$d@6F>>qEeCApdwxqa^zgoPf`^MW?4hfLi&I$-F!(rTmaJbzhce$t&XCk
z#P0fizWYFl+3nu>Z}(@C%wrw*^vpEpHW6&VX#IX78x|!x@JnNtgChZw8gNMm!H(VM
zNbZaL3BM&#Qgq6JP+vXd<Uc;ZgKQ4E%z6&mCg7RR!+@1*&L}zO;BuyYdh}GX7evoq
zU)EbmY+1-AQOJzMm+cvq=|D*-0ZHUuFytnNflQ{^{1i{Vm<zL~O(Z&pykMy8uMeA~
z!jQN7lE+-pSyY<f`w7TkE@FPKpWqgqYv4xAEJt^cz$-Ja!l!SBU3r#G^&KPPsoqH4
zbaiyO<9%?1d$t=Anl;8|MdyMr1e~U=C<^z-@aIOJw-*e~bvbUpAGe7|pQyNV6H7=}
z8J;cic_r)KD*JJZ7&C)8O+&R8rught>j>AU)*St#fUG=LFzq0boTL0m<2|csM9og_
z(9Ftfb7^G^k-Qy23*=Z@ns{vU%rmsu>owqadou$vyL-@EC-9IjOx?gR)Uoxihy;~V
zr2R?UdJuuShQ|6mpEr?FYSk^J=KLq;z2__in{^pa;ZnWm0bqpx$s~0hqwk^}*X_+#
zo&2ttF@q|EO563Nh(xrh*rT0Y84@^cXY6&u-m$IDdM!a#Ai+()>VkulsyfbKaB?4C
zl>1PeC);}yCPwyM_v@~SlX(;p&+<H7`4zXAHP#lg)$?cK*+b0RX~()6j>r{7r}nUT
zxa|?(B2f_O%4|+hkg`Lab#ql~q_W|BJM8`_*K!KR_4`DK;85<6S1G?^Q)-?Zb#xyM
z3S-$RlWUGnw)CFXEDxY6x&J6ml!AuE<%B}+NM&Z_cSbdu)ky5=Y&kRf_4=4R9Upre
zU^R<AXm?LlII_3-+w_0Eo)Lze3ahcaNbbkK>~jDi-}8Fzmy7IOrYFp{-I>*lNJ*;K
z0q#4xtJUUnjj!e;)3{4v%iU@mC&1?(CKDOgAC2JXaF@DXo1*%5a%Ij&n9q_MLEnK@
zS4B!Lsc!PN<f`g3*lr>e%K<*hdGXkC%jpv%<TenAR*V^GSM-Fw{0#TByEENMZ0a>)
z4yo#N;$W8dVWu~8oDck{GEV;>Z7n8kfZr>(9B8<2W)b{zQ^UU`+#~gtZalSxi;j6f
zrmmfXIJ$lb!L#loMM|X-7d#fbeRSrhhu0DMm<83Ne{G}NXL(lx80Jo<Es@QkmHOzS
zESrpcy#pM@=f(Q)tc2c)Gnk#!^Il0zPeSAB&RmRQV$qFRSVSzhvnWo#qb>3{X>|Pi
zCwdFBlUZl!DDSiAQ`b$0k#hV|#pg_0WyQmo5>vJM_bHI*o5S!<QeFJkxGI>9tbV6|
z3$W~59kVt*kr%aciE7bntW-YeLjVp*j;l!Z*T1G*!8gmsxl{V3XX*Q=haVg((F0kO
z7;}t@S7h9*X~bMWx`y^(N%2So5|uS%t7kuRnA;2Ne)}%Q_Ipu2z(>jtFwizV?(F<N
z_9X?+hi_?P!JhC-pk`8Y=p_X2OQ{EMBSgVMG0e(2UKBlbS%Dv)sRsBhhd`1?Dj#Rh
z8*x>YEV&XOu^y=+s#>8Arni@H_Ry*~@Bh}}I|39|-4}Zb+Sa~5gFaAD+tO|<4H{^Y
z5Yhlt7XETH%`F1bC5aXEE3-pMwdrY{L>4~1pI;0fe#(4lf21Ub=k&Fo7g~B%AH&?1
z<Do<eLbO}HlVJnB4>^c!Da|iZdh6Sidf4(st#;1L=6G{WpA94p@AKT<o5{Evrj14Y
z9t=>?XXBfBC6vLevR9M^mpWRBv=e`2$|6NlNaXTW=0HHY8WNT(o7aprE<RF3GwR2H
zjSP$DJ_&QmxH>x)@twPeci7&~W5c~r^7E2u&*D&i-v=_9wd%~^8uw+^0=o!))VIv_
zu69oZKAXw1ac+8tQ^*=JQb7w8TV+AtWCNw}-`IJ77g}gwG~{zPI-MSyKS;NZ?1@KF
z=S@Y809URmZ&91#vs!RVr)3|L4oV96ct_0NNT~BDj>CPA?_=?&3tQ~)!P;z#%Egn^
zIc0<=TWyjgyIH(sy7~+HO3c8m+i72v)}K*d3e)R}ZTd{e!}8S%u@08i14n)zOsAfS
z0y2xHRZ+|bvMm?cV6}8I8S1^WZ5IzHPi@tqxBV$z#(9|gS^lqN4(`Ge(w2ki#`?H=
z1LO!-!ZGHsvC}`UP&NAbADpNWI8x}wd0CCDB>Azi9HV@Scgv~&D3_8uB~IeQWxRjr
zd2RE3U|a0{3F2wjM!Jn)nCG}bt!QWp@0=>e7#a;T26G7raMY%#ojd2t|5&zN8Tb{?
zB5WER;yp^uE<2SW`>;Oco)$zd(K|-ruhLwj4R-KXkZdkaAswl`q3HBT@kTaKe$HxA
z)HP6~qz9nRi_{kbgz@%tFVAZ1ll`M9!4E>2&uX$9g)CZ%9!^c0oobrqW46t1>CPzL
ze&l8Af!X#PkSx0xMIg5v66|`e3LF2P!FQaRsCJ4ETS*aq04a9Ij$~-XEfvy+#K?Ya
zJrn^!g9WA6G!q|8{$v#P0ln?1%Twf;a?zh7$?nwCtsk|jhgi>z=wZx!zc}`PdgB$b
z8=ZV@Fi9nPZ7S^H!dCYDE5l={#}40oYOCiPE^<g#T=_U4QK0Z}Z>CWeg45!*xe{4A
z*2pAx7A^fVc(lD)dFyz*-a_gB{;KL?<$nGgJi1$hd0~y75IjNjz-VH)4o=?t!e|YU
z*m%F0H*(8O3@sbc0keJHGs7&+hD~gSW+T)1axgYts4&(l1`c+AF1@cmLydiy3*@{o
zdI8s|R7x4&5?AIhe#R7xY?OQATFdn;MHDc|%GaK3t|r~<AYdQ7(GcAS*=0YWD&>Gz
z=soV;tsMU~VV~+m0`K&K?@(oIJ|QyRNW`7?pF9nfUPVGT|G;SamLe*>jkQrBD{*$y
zT+lx-I?!5km>O;LD{gCGU#4X|Z}91J1N)}ouX0f+ZlL$>V9y(Ix8_l<c*>Y2#zWZ4
z95>{4mj3zA>ShB46R>mYmw6@Py98#2qNRdtPqjgoE!E-Kb0w#e5-M$O8w#Gu`{T9g
zhYW71?<WXjuk%Mob7~OOw=njKx;w=35Wotzg7N~ZG6ze|AWH&+7hXbcdwENql%*<D
zQP~=9Gg2d~@Ob8yO~9thWVh!(idoxGA2rwD`y2{&q=(>j@AB)jeMUVn?Qui?G&Ux|
znloKk5}Ukx<cnG72DTK*7m#F7=#*$wk?&`4O!`>~_9Ob<kfb!XXXsN=R5lRsiH(O>
zd04}Y3lta4MQNx=tPZni{Nz?8oHD_d!`~_X@o}@C&1WF$SYJ{{R)O+?V9rA^yj@O1
zpNiXjuA3%^%l^BklB29i#%43suAXYQ)F6EwYrl&ZL4DOMriJ%(lKUAW@^@*m6*nyz
zhrEh3!~Wz|A~5>BMajPJP2AMxz$_Om=>DS!Rb{FNzy9+2hF57w`pRHHck|zm##iB8
zoJX*+qs!QQxjf|8PD?}zgKab=#}03DKbLavZoD?!O4}gY=%*eu!C=fFheA!sI5XPA
zq}2I*rlw1y8tk?k61l)GekT)^)bC$-%(H(l4FQ6lC%OIc<G>&^ue;ujbXqs2NW5iX
z#XwvvLN-!Kby3d_6oCzVKdd6-&q`kJUElHCVVDvrfP@Ljy{kP4JsG9I7z4&1k10;-
z>zPYA+?aSD%wDFl*7q8^d9Fia7xT`bq@ac?o?5r_6v{EE^tV@yv1}vC4!GES$Lnl^
zGR4-Qx~x8yn<35?=;^6zR(^2by>BU&$D(>2rjiY+Tp0g|n_!~`?RV>HLxPlAO5h%~
zMdKb$cp)TCflm36eJ)N&15yMAB#KAmYuUO_3j4KQC#5Jn&nGBK{f%NF-P5osXs5la
zrS8~XOe(yG5V(>c^t<T7>z)TX=^$bsU#^%k_hx+winBM8Quj~X#TR@_5HGQrUQstd
z(_^;LcU|fT`F)r-u<60Rv5*zUCo{&Z<E>Df@dzm4k`hru6cCkg8G_82IDzzH(LWrS
zpvG&5<BJ-*&$uP#Y_f&q-qweI%jF!P8C!HJuaOY|RrZsDTu+Q9Es+$e<!#CAcSdc9
zPU5g;N1q$xcKfwDE-8KiZ>=X=IfV?OIU_cYznE7YG1fn2Sll%E<UybJ)l=7)^D;>l
zoLV(t>f5U+TdT_-75_Jtl)N;^dpNP#G7WyA+cve0H9eYd%pbm3uHR~RAiZdA2W-vM
zFU>dpIr62Y$5ol>277%Q+WE9<lh|Ok>O0BuJX`~ycp;-kujLM%_cs!Se8Ot=*bFEI
za?>hMn2C<cevjfm`s2~7-Jq^<_QfHR^`K=^wTFb2+c0|Mt%6f;6l0lEG&0BJ1UL|e
z;pT!vtccp$Rv1Rh#DVl{7+%`z`3T;d?TzPl|FjJK#-MBoccNxS=Weh`@8T7`-)PGZ
zmVYj)73s#h)|e9cK-S_(Y?3AFh1BCD<}nACH!4))DW7g1Bk1bNjoEI<Z*m<LGPnno
zD*oP77nCREa`QbfLh8}{mHOlAxQCZo7YZFL+{mvJIi}gr{(x2w?VStPx7jM>(xumq
z+vxedSuiTv7@&Fc2XaiD<BH^|Srf!%*8fY;M>pSwE%sc3^g~@I^hiV?(|DpH-`JSr
zL+A236Ag;G^w6;j8Fol@f&%(Ml3FkQF4oXlGxcMrkxJjyp*sEgG69<hDPWeH+=LeZ
z8;K(a7vC=^`QB$fmtgd&wyD$`1z4sB2o1{@EoCdx>SlG?7UE@p9pB0CydVB`>Nm_G
zKN7x?cDAJsHZWP~juFOXoEWKGX$#v`Ja>At3^I`)`Rh!j9XVz{<eB>w6Rw9h3DTW}
zegai=%S0YT!%!@&zd)hr8W=DQ$vn-Ax~O3i7G~r4?lr9uDhe{FpbG!4{^HsY)A-=f
z#JNaWVnK$XurrG5c7N=Rh2Dwo?ml@S{nfdHKd=G_SBmgc$>T%3ghBx6<`37giJlOv
zgZe=6SBm&$b&XN3g+i)<uh@;Yr?@s5;8r|IxN`<gsrY50_Zy%rm6O5YV+^M-B|-sB
zhEMh}KpwUi5B4j<p_y0+c%a)gUu7t(|0_T6=eZabBh_oM8$LafR$-uI-P|S!V-v(i
znypupALHg0?Z2hK(jD_@3v{a)ezT}lXx`>@l|HgBgsr%64cHhyK(Hv7u_}fo0WqX{
z%3^V^*{R|Kz)=;3+-}uNNYkDZcj5;SN@DrI8b(^}H26ErC~mHqwL*lpJfo$SA16Mf
zqT+VBV$WYkksoWgyK<YGFlzAIWvk~hO5Q|T!Ps$S`zFm~4v(O;ewM*hecFLK6I#;S
zjNSu&Q~)+6t8E4WBeB>jRtB7|%h-YHAHCP-Uw8-AmCv+tujnbKI)GnmQ@+WUM5PAF
zLhjVBK|_|x6&}*@WH6a>E8J6^8KNEuX;|svx?^JRQ>pO=>&fJnZP~_gt)p*{b*MnN
zcT%iz!K0J^A@_|OR>7axFOld1hTk4b&})O>eEz39S%HM&FeU-nfz<Sjw;m4a$z${P
zRT8#-$hGfg(4{DUqFb#j4oi9_Lw=#P$&Ef2k!2KuDSAy?#fVZdf-~*W)sGZk4=D4f
zvD2&^EPqqSpNla%nz6ZhH`a383+mju%Hs>q&(`(6bDxB4MZCz&aUN+t{Q^#0PfKmO
zQZ$c9#`Hli31uAY;aeBBNT;tF-fLKtTgZ(3uVbPn;wzVgDqPGnK<=ODt#lIuI(slq
zKVD%PUKReu+oW#%R&AxfKlQ(a^pAq?W|g_MoZYv*^6k5`FQvOv{JhS~%3#fIQY&<u
zb?=jOT6W+xvu0*x1hv5n06C`8WW1|0lo50*>#6<yX=lQEhzGlWesaW~Na$xkn*XQ4
z@nX{k3E=Y$yJZEdC3a1yJg07jslyV?WRU&EAF$y-gm0Q%d{X@sxecKq-D@vZqw_#h
zhtTknOp2N@F<eqFPYmJfKbB<;-UvxsO3MApXuLUYnum&xy$xaMM$;{^1DDC$y_nkY
z;zDH1F9Qupja{E{Q^GGPR&Br58YQt?Bl2H+&O9@S77YPuDCRi5n6*LYYnWHXv|%mn
zVzj$btHZSpm>rR5`M*+r^euLBwFoP_Ic)Kt<Y_V@p$p``ZA01rdN66>3qe*wND~Ba
z2}5YAfrX=^61tAWuH!T;s(I>dvlgqJ1%TG4W(SR}OSN!w^E-O(Gg2n8@<f({$xZ=p
zi^NX6gyf5=Dv5s-$;9aB2n@8jtuSUoCiBcEMD|8)(+p9OxqIc__t`Gz2;uP+CyDBZ
zK_Wmd_nz;X;>y?Imc9*iST{=W?8g{bWq@0e-iG)E3tY(;C#$>e>d;3JGC@V(P^7*2
z4i=OS`q(m8KM>*O`>D$<HeBb{N~dq<_P{IJyv3zM2v&H`&1<iS9$+UTOPO?GI;p;@
z*`TL|;py5iW}m~p83YQetd~#T)9z4E8x@i`b%A?zST5Zm#k6fiuySGo7e<JpjL2n{
zn!bglS_UxIoL-{-?O>Uj$(z-5meL2Y$!umc<{BCXay7#YnlXQXj2BzM2m~buv!Byo
z(glY;OaRcMZ7a322}2IvSY9ru_#5>h6)hkPvYuE7a6u)j4_<`??+0`_KOcXqjk9!7
z^om09bjo)+R~<4Y!9Wa8?H0~$O!K{~7}o$#^^e91*|O>1@Tkvxch%#P9BV}7m7?{D
zS6kbQ)W4hL;3l|-8kykk<7D^*32gq3e_2f~JKIaWr_1Ax7pR@4Gz7w$?sut1qZj*p
z^GjelUL`S+RqOZ>iyvz{d8IhyelL|)%LNDfy(I`qTrg>RqEy3NAvm(_Gg-xkz9P-l
z&3Mt*Ma}$ctZ!QCr5Jy};47&<9KG5y{>tzRW<DBn&(A@wp!>waa=jJB;jQB2YsMh8
zn8GtlJQh_1;nBlg!1Z7FDy+<e$LC+3cLf`td3;^{Tp(?3i~M@rmWO{-<I5!lpkB2^
zlP~<4vb=&;K+X^HAH>s+?rj?qu(eAp)V;%3z6AUTg?$qr-}{e(_f(cR?oJAmuWv2a
z|4qjZGZ%=*S$d3rFnZw|WFRMl@F(d+tqopj>TAAuN{o!6i@Lj3Qgp}x+QC$E$II56
z!C?a@BS?bFiL0s*BU>akbt*8h1W|zK^MMT-zESt^=xN6K(znVfj>2CqYA4+lNWS2>
zVvhQu(cv1*ejiln&Z-+H!gYY}=-VRyPW5X%7jkq~Sdj*5voVG1yv8xx&{{OPP`^WP
zbPOJdA6*8xIiw3*!1LJdQA(|7xsGsy?<Gm55{-0>duC-~?zwkvbm**9*v6fnuRHka
zz-;wz?`I9gD5GprZbz4V%!$#to{6;<czS7I;hIr9O`%MZ1Nb^4D#vg3XOT-L&qTX$
z>5S8I_}0%`ZIbBYC$>UC>CddDm&{)ot`vukui*4T`|Bl)PxReg?;W*?x@Z<+Ed1K%
z49`FQI?6o5>TS)|dhYx-KR;7qc<<!kJKwCpcWsr8KXv_hl1<MjS#FF7pppfgz&I_h
zADErX;42fOso&0s<$bbc!^Gy0RfUi}h5NH>2!;XhpR}2IJ{e5|o3}$2>Eg14`)S=?
z@%%w%likJwpxsx=+TwZw54&IAdC{{VzL8&KV$%oV1-u?F(1&n=8UeDOo(cr`!k;Gf
zkoaeMT$s=NP<DNrb+sZ3M*UM3RXGi&gmTq%_1@y$jJ%;EY?>-;28q9wmO69VJ!;52
z2&Nk48#h@uO4{K9LnFLw6G|1kdRD<sg2eKKhDE`@qpmgWF$@OKp65JrOxz8))(`W(
zyERpwn@_s++^M6njCnk<rVT79az7Z2A5re+K395`v8h-~+aM$vW!kZh$WoG0c<v+t
z)=RqLC7}DDhkdmVEuZJ%h!@K-7`NLwBUFU4@#qC|6TY{!F4nPL7)<n7I(AE2yBPyt
zEN0r1BhGvgbV@c9NzIJ2UIj8$Bj9fn;^@ma87u;(+e=?dRCF=sWVj?&rG8pZ6w;1<
zG|-)31a3~ZneC3`05sRu7XeJ<_v!V^com^Qx7oqQ&==4Ixf292F0BY!tV5Vmu)WFP
znQJ~&$&&nhAh3orWG`(%m=K7TBZSAyxeqYEb+ahZ3PUdYCe%kB5Yq^@RA$f^hk`F&
z5M!X>#HLWsV<wkAqp_(ny4ZSt$!#hbMP->!PvI8V!qs{|ge+HY)hv`umD93>31Dga
z%Zp>6x>o55hD!)KdIg`C$br2F6U4MI$tXX61iO~djHxXF+ddvKs_8q5kD^Hw;8Ic?
zWv^2ICRucVi~}Hj&$(~uPV1l7L^TwYL<Ayn$q?#$jdI|iR<Tc5%6q9#c-y?R(knlv
zc?uhH(~zZxc>0~wY~)7(%XY*_wo30qcByLVEwco(Jt9#7_*@-V)RufNCKDJYG^A+|
z4+DMnm+dwYc=gT+)^mzUcS4@PVVObSxSDOu*ttMM&1u!(?Dccbv<lEW=Ip$aVRK+A
z--}yXKXsu{66nS^3zREN^G@IOh*+l&2gH8w{%vb;K&@^4w-UsVZ_B%wJM}umsAcW#
z1~c?c?ohjQQdEUD!|+FqaM0dOyQ2MiQ;r8O93ob(Ca|20<*vr<3yYq`_NJ9k#$A*S
z{cfe|fpo{1L{sa+jN_@s>GhJX1&wmwo|1%8u?T7i;)R~}MAjF7hr${ADOpb*JbhJK
zu5<W&VNi?M)L@&wOevefU!`zN!Rm%Q^G9eKEAfwI@wRzdNc@0>349=!&Y1P)O1`v9
zlS`QBfaq0su}r>=JVZlreyga@dzE)mh(Z?K-B&d&{>l*~F{ByPgKmv%1lP%`kcmwa
zAlh+Z32q&ZgBGA>Ckn2UzQ-4bHNl|Ubd$59XYYz6Bur4tc3dfjVb#X$oCbQgw6?@q
zAcG)xQb!i*GQGQFUt0*wxICoAhxQ3cmI~_7ZFTn{lM=owPMK0+6z9bAR{nPr<k9%w
zzOt$<t_HIQ(@f(nUOWB`jZ9VJ!NsPlv+{OH2H?WIM*4O0T0W~|&bw#mnE-_QZ>n*(
zuV@RU2UCG(N+Nz{yb=|8XvyAY1?!_TzjSNYk*9~bVZhyR>Y^;#F+O>R8$GIaQ4!`3
zBBOiWx8<PnwXEl20P~|9urJbUQK-~8L+qs9&Eoh3K>n4&oEYYYwX6_1q2mOCJ<yh#
z1Ce&%gBSQV7`K8o$S*cVa}$FqNsTz8xS=~w@L4q-^3n;R+=Kd1$cT7Y-QfW-MG>Q?
zMY?<P;JUhj0+5enwyB)M-BdjLpy8N46U9?8I~Exo?$Qw2GqZa%Q-sf|_1k@JqwoCF
zcPVu|$#|~!M^>N?A&hs#Ks&ymySs<lV8P7;yesf~hx<mX>#eY<h_j$WPo;_>bTtc8
zZv<@a6m#$`84zt+5<`;x)x^f-m}XHe*z>kA_rkMCj*<K!zDDLt<(7}o?RAJRZ^rEg
zA1M;Ox#fpA^K(M!!CoIV=M&D=hoXdr=Z(wwA#RPB`rX{PLBP6~Ae~>Z%suRbw`Nw8
zXwxDV9NLitwm{ZDo-aP+0!hDxJlX5IuiC}9rsV$8+fbBPh66T3nwi-U?{APA`BA@F
zt=63B4!*A7B*m3(VvQ^n)}HSQ9pgCx<kXj$h$l8HtuU!yKgjYdinuKO7N<Na4f8j(
z%VKl~<24{){{X*9TJD@jv~^jlH{SYa7rTpfZ}FN569!@bQK-3k{Rwo&?{3FRaO+iU
zmM8rTk9B!e99x^7Y*;t(B{)&3p%PM5!&E;zpcjvkB=7F!3i0;4zy1CuGAa+CcLrbQ
zIc2zh&({VkrhR2Gs5ZCJCaHHh{-$CPCzVGaFdh)CPqmW0_f^>Y_3kiDk5c$P@oua~
zq%9Ps{9Q!oVcVKG$C&T02QoBWO4Xk*sDT2m{ahT-u3WtDecVVAbMLEUc&MvP?uQP*
zoZZwIAJ3n0dNsyHW*7VUT8%FHUv^P!<Ha!?^wPG=c~U(;BfA>%JF<dkuUY3%gh|TA
zpmNh~vWp~k1ur}ykPcD<mB`H5BS2BPG|q2EspvSPh>5;x@PK%*S$@DJF#?OdD$)1n
zMy<@_zQLr2D3P?UM{}w#-DWLo*+CwLqh+mzVl};sF_i<m)tnz9Q-Bm0TNBB`_84~G
z<BGvlx<udL4Z!!dDK}(`g|^LBEj!=r=}9F7vSbQ>;J51z?fs2C{R1Bb1;mTs2zq+K
z_pdAs1eL~WO&)L;!@FwZQ?AO!v@HaQ!w2abt?c=4#z57#F@{AW`79?!J(%H7>E2lf
z^Z3Ty&$p`lA7#PIaJ(bF6>+ia{$sDb&oXN)YFZeF5t{XL{Uk0<xdgh2N%LkuyVvs7
z?rv&h845ek4v2B4LOkdd=;Pqrw4YJ)m!iC{&AfF?5&DmUqt%g#ehy@gocT^0vhx`W
zASmc^&EUfsmt#4-lnAl_hdx-eyC>~1wX{N=#IC?2#RBU3%P6nDvbZ@VQkbH!_L^!#
z|I~LvQ;xoBK%RJTGI{M6`4EEPKju|@uW{gf%PzX_rU>CVc~(y#R6!!N8LA07VF@EX
zdPkedrsv-9V(Xcao;#^IwzfJb*or$wW#zln>QccVV;h{BZyG}#T|2&2d*5umaxj`o
zyZ8<4ahLr6CkkT&1>_j@v+|=*!3fS9v*|}A+^=4L*$_ta)3`cDy>SRL;)zoCv&45`
zws-%B)A_%PyP%7lZS&$oZ|#H6rc0+jxHjJGR8XcCTOXQS=HcniYaL%>v2#`$rPRJ{
z@(6uq{)A2W>>owfY}DqT;}3pEu}rKgS%AbY!*^cp$}=|ELd5Q7%L!KDgE+UM$pR&N
z-QuDg+6dS$QtUbq&=x*G$X*d;6!X*UB=}x@(7*9;)_ikQ?X)PLFwa!`GfFp8uhC^{
zo<o%sIooEc-^$?3VE}V%i~rx2eHV(E1M2HM|0r(8&}u+L27WtQ#lV%G|Jri}N_maz
z@UMjJ%pWPC-W+ugnI#046~fS<DWBT@ohbeeD%QeZo725S@b1>~pG~eYLPJR`AVf%}
zMaFKt4z(7|&Hv}z`N@q%r&1TTb@=VRguXdf$Mms?S0^=G+al7Dsl4}_Dj&*BMYJ}$
zKguvR<aGqRN}v9G;=7KxL2pZ%bBqno(Yb9G{LRCYnh<>dTJN|Y5A?ikBX7Cb2dgH%
zZn(sHCw(+FEE%RQE>)MZ8vwJoHAvANViI@@b=mr~cLs0pF9uXDpQ-EN|4}SK4Kc}~
z97_31@E0{yy?<OiK9<48%`sja&-aw?vs`zN%r<>L+ewskiHvLXH(P_6`$6%6VtE^Q
zUxttBFKoNB%WB8&<3F;o4waTNw{ze24!!A(Q?TM|gXi<Mj<)`Cs+&;lhMMJcbw<28
z3!L_<?XQbh*SggS|9J^1<Y-=kZqdr0#z4LsS|qdiIFvW$_TkAW@E=9kmFD0KKbX4v
zohmujT|PwK%XUw4Zc@*r%1TlFGs_GY^-;lp6wYXL7W=nF_d%1*rKP>x^Z-9hBVL&=
zNGuxLXd^m7#}(U)zumg($`z=*QIy};-z(`eCiXUQmLxiUCr4cD#;L2EtHgJa=m-Un
z)}3U0o-|Q2EQeMA^N&IdQ)SnFV&sr=o0{r^rC28lxXuu>H?wACTB*x49Zkrm9vlg=
z7&IY&EUY2Ypy<hY#k;w%)T{iPEURcJ7hFHrH2_9kQ|tjm9T1gJ)+t^!j}&Rl>Q?_z
z+<mz)fKMGiqL+J0iZ^1`{tpfzEmq+Eylta&4eWUbNKn<*YjXw4XRhXgzBbBwa)d?6
z#mM3dYzR(FAA1RD!5^MCw(Fk4iHY$7G;>}N&4pJ?hRL~IQ1drk3_>Q)EClqO8DG}@
zHRcZ7$U`Z03?etrl@Xj&uvn2xJiHEtFsY=8&B%wZ6hmdVHu(!IPj7lbJqF_wv1&f$
zQ^c}23N}gWafX&Tv{!^=O-ux53$Lj>EZ}MK?NPb05;Ml-wC)1aj6VNZ^L9Y;f}MvC
zc}yeUPSgI5Q{jiH>^};*^y#Un?>qv&vg>OI?q8OE;KLgDBb?>zh?&#5V`;dAI&|!6
zRLq`j&EuKF_|F`CIjJWIr%b&7cd60<i~5+yH1{lHM%ob2E~a3xoIMHq)H$aAKT09e
zj4nHk$}CWO<!pJK#N;ghlZmUo%gWpjCfTk_(Zm484mkukmkR#|%TT-U1z$Ub!_6Bs
z@Ptj4AVTg%aY|SX-|wS&f!W`4*_YPx9|g#%%<mt?rMnD2{8?3bT3kF*vB8p%n!MXS
z(onVksA2CPMe5(|r<Os>lwI`}j})f<+fHVk+7hz$O_E7x3uo{>A)w)xsMETU#`2J9
z&kv%6^r?mg>a0E4C=$X~6*L0_jNGIdCz)OkGvOUFFBi?1q5JLuLh0L}X>ZGuPt8sy
z^<lmXCf|3s#S&xh()2MN8tc~QfGSqRdu&{cG!IJb?Jop>I#-y^4l{U3VINwHL~*Sq
zDt?B~h>WD#`>j;l;S#xPo%2QeB5Fs<jOHLcUOS=Xhitl{r^rw0r9q3Oe>M1oZ%>ym
zcoFlS<9t^p!?Z{7Jr=ia?Mwwaipuphy!d-)G`bR{zh}Lm8Zr0xx1=OccB)*66I8kV
zT+c@EH)JPw9MFADacFi3&#Ca$3@JFhCG%+y+1*!DKXZ8H*e*_IB(;5n5Y*CMf-?e#
zT&E)48d|n!D*P*gOJhr^jNKuQB*eN6xlpdcyxs*>OEhm^z*V=(A9ie_vnMRnL>wH`
zcBhCgI?~CXshrE3lp5rh)rXfEYVght^*w?1k)^YLpH1pp-Pp||7)V<KDa(v?K_{Wu
z<`2BI{N#TWH2Y>JZzn9AR$S2H)CTiTneQ7SYawi$=LrrgqBV$)m+sNuCilioQ4%^w
zLv<-P*+rxPBW=u<2Wlk2mzAvI#{`*<zCd(68F76is1<IT#oa(8|LVPZJ(gFlG-|pH
zy5jJ=G@@Z|Ed(8ZGwh(Fv1Q)UxaGaeGb)8h-(I%`wN5dV*gp!r-m9FPd#;7%aFP(i
z2iDD_jOWO~Y$|90E|oxUU$j~Hd!HC3M{bL|DfYZqvyQHcsHra+vaDN1kN~eL8@U((
zJz33qj$et1;M5*!o$24Rghgxx_<k!AlTh0}X3_{0TWr{q!eSyPqpxkL3TeQAE|bK_
zeuuL1KZY?7lYSBd1lq^+PLE<66Atu2&P={kY2-{oPfitqx9|2uqh&huzS#J(meZXV
zX-hw1-}$iIxJ+(M`01H8Ni6ds-BpjvGPR}#t6a*b<iwcGSa2B`WA@va%5_$Xck0ZE
z>?|UhTKiqy01JD@weXg+XTALWgdi0<-gonO6b5AT{v0+tdEb2D2U>LHj+tfhmE+}v
zGY7LFKPa;X2t)C<X(&6{l<fhX%eAJzMG@Z=v~2x6Te&nPoML`Fl?-C6g?K6iG@|j;
z1LX{}eWzbl0`c&03nG%hmZZnCP{=wu9ItD-;03k6?0JW$gH}#pk26g+G*66PxZ{36
z3e$Ge@t@!hcVjgi346zYc%e#WUl^B?`%;e&`X_w!b7^aBpioqUfr2CdCpb|FtJ3=n
z5tEy{7Qcm>et)Pt3Gbs<iE+<Ke(Z+<%u_|RR;=Ol*M9FrC7bu}dD#?Ye9<dZVBvhb
zi?2h52{lzx8@1Yg86JFdh12XeJQ@d!kDK?IxkxEN4EGJrPTCv9z@!EQB2<<>oJ;^M
zLD8Mx_9UUxvbOrO555Gn&zj60OJ4+!Wb`?>`afeD^Y+^Lb@2COl?_m~*Oq<lnVgCq
zb%eAlZ~j1oz~IHoz5hm-q<I3Gdy9VXkluOj{6_A#^4&bx>bB8$9WV68jBmB(E6<xF
zdG3;_k~tK-f6ITJH#FAC!vPYslm&m25i}STd&$P74;(DT^l2D1v+BJl{L%ck6n?oE
z!-v^Pbo6I>71@QC1&?5WloH@t*vk#9#4+c#%jc%q%~C<X&KiHhD|*ifL50Lu9Pzh~
z_L^hYTRtzq!5&*f0(ZC~T@|6`jF@}fo3c;r0|}69wmvqJTQl7D%x_W3Ogo}}Ae!@K
zTCeU_O3Geo<fvZr3rxCO;`mrO71;)f#qS3A!W4zUK-kWm>7~nFOi3YB$k+!ZH})n+
z$L6-MZj^BH&kPbZ(C&V6>t7L;6d}O!azP~>#2Ifx;z5a4*&;LzW<%#lGxe<d!Sy0B
z;o~>Q$bQp?$*ja>7W$u|RSS-JbTig~j1sn@#4?V|m(0|zHz_+KEUKAGBHzZ~e_Xae
zM$gufR5w|bw}|;b@5+?~5zA)-GYD1kET-)qlhsw72Ii$m{%$YHS7O&^2Dus}->upV
z(IW3HB?3`l^|tNrSSkaaO7%3mESOA*h1ty*7^V6&&4e^AM#l9VpA+*|QXUy~MeQ2q
zyi<L?yol<n3)wAMM973QN)-GOehW1yDg5>M3g)lW=2Gi*sa_P2?WLJP{C%SeMr6D<
zxTu;8{o0ERZqS-vc*ll(NguZ#alxT>lxw5dWLFUWPVM<;w>f*W?t=roqD|@{M8b4>
zp*)#^&(~7pRZ^ny*j*%}$<eoTuBZO!Li1<O)&XIvI@==S#2X#G?x}ue3uA<@c5hc=
zIqpPw$K`(A?ZHB2^<u=Lqu(xY%(cwlZ&U{dr}0g;Z04hBDHC6-OIzO=Mb{XCLFy2R
zN;>NdnlvEv$IOF3(W2stK1g*@(M1xSWHE_PfHmU;zL7UrgXsrI{HII}5*W0ten)yQ
zBDZZw8~mR#A8T@C*6b^L=UNWE9%L7E8=0Uu{U67~51Sm%bnA}hR$1O#Ss5hp$T8cZ
zj?&K`iiE7Xzg(^?J3Te}8O}zx+#42F{02I4)KzvQV1b{wkGc2xHl|HvbKlwc@k>CM
zmc-i`&qyMEmm<1ZR9YFXD4n9Dw{!!&Qa;J<K!J?5<X;dgN`VaBOCS$L8x}HL-->5b
zyd+7CAa9S3M)zEBaOK;jfCPCh?_|U;ab#N1S9k6UG?UwsKE)O|L`0O(4+t#z_lqzx
zDzE!o%2TX7H0288UEG&yPDKRw%TE+2q{f9fyPx;mN1OrqIL6J$ZDIUDc&(e_&)Lq@
z$Ac2zuxhfb`m<Z?J<x6e)~!6xlL;OHif&<xtlS-ZV-YCyMwXENU$GKubP7n*vhIw7
zT6D{XB*($Pu@|aCDX%*SU|1_JN;1~NeA1Za*Ii$n0FgMzDdCa(A%rx{;604)@V7r`
zSnfq86|&y{KY8MrT%WQ{w3Cf2e;{|>qTFl#7|bVg3JWBLbHwsy+?ajII?}PZ`qVjU
ziDArJz)T$hvz+(AjGcbb1j~oW+E`x(J4JtYjmzY`Yb{6RAfx^B)M>X`vBv#RNlGi|
zWU5S|dkJTD1*b6BVEv~RsZzG_u_DS82k~V<+dm5023dvYt0w94i7kKNmF9b&>;2-t
zzh`Mn8n}B<B*nAt?z(DRQu0@>23+uAm>f%+rSBp2Nxq?^_BZEF?(w5KbIjJoYPU^}
zGn>HQw&bpZ|Ax+U7s-Lo+|Ldh&A)>>g(zhF{5d*OQ~#2ZE@qEj>p9G?7kFQAv@;&Y
zDvvJ4C9J#RU78a=x`B3e=LM|V@VEI*a(-;OiV+(|s+EPUXbA=eNRWHetRa&re`mwa
zxDRO!ZaGDzaK%wyQihB7apSZO!O<=udx0irAmk!@{?11A9=?)}Gj-eX9q!QtiAfX>
zapga9*s4L$9o|xYGXK{(zo<wd^?JlXGC|@Fd7$5;D5sam2T4)gSPig~RCjdmPTk%k
z-jxP2)xOD2CGuuIZ&+>fSAo&UiA$2EE^Sw=Br-l_g80;0(QID_ThS{zu~~}{KDcqK
zsdoyk1qQ~o<vPMr4d!e!UuYdH_#1%=gQ`-H#L^H`-S^s%T9(O2g|R$Roz8kjkKaVd
z`uTRiE$1!wZrGk(z?qj5eNQ-4tKC`7&<NV+y+eb8<)bp3!Y0}AE(<z@hSkPQ_hV6R
z8KhCUlFa?}M~c`wc|e@&2TMn%1>9|Sv%2*uq8uAIss61YSzThGvODWZ;7>3R8CgGq
zt$sHo8~uKsU{}F^8<rz*Vq`V(=>S*1`M4sr5oaHQiGA=<hyQI=r{yj;>;^X6@0CF+
z;Y0LHr^S5s^=kv3eXiD7{QGb)+r|}l?S%lN2%EOeU1AxQ-(T-D7QsMGZ_}%6TF6X?
z%F@?FE9Th*hO6qg*dNkF*sIP=3+UkEQ<SF|UiC(lqbX<a;fs^GsCknbYZBR+STcQQ
zRyFGLsBWPsHB<9cur0z%#Y-w5j(XBgJc%W)TEX)&&<@-WS$hKu*Fp}E!zB##I~Gu8
zyTKDOOYzD0RVay(TUTNnt@t`EEmF~c*r?)FNo35RMcswW75b_t^V}B*4FP6htF~N%
z-D?)PKRpzfM%<`Jz?T=dJ_Dk2KhAb08;cHH+1r#frKC;IxLKg=0+o=CnB{jDQoPQz
zXa_WmE-3sdE48z_?YT!ZSV|hQcl`8OcM?|9;pd<-j|T-X6blD=6BN#@9}3ykE=M&a
zW=kdoqD6Ho2lb3i?q@J0lOts7X6B>5QCU=2$uo#umQC4l%fvM}=vn#}+`2x7^ERik
zu6iN|m7!Db$Y_ZS{1r5}NvV}KO2}9?ZEt)Bk7JZTe(27=u0zMrXIO8_@0eoy_dgu&
zy%-^TGtHC<(Efmx+a-|vKclE+Ne@PDt@81Gd}A7*&vo;@vB_5nukqgmS(SLf@>z>m
zotWzt6uO&xxnH~DSY-c9l!B^yfABzue?xg?qQB+TjjEfsp1hqun@3JX-4IRB%MF~$
zZAhH!snXN)ypS;(km8*jBmcZAajo4anQBB&O#n*euLh;l<r1>kD0v=GIXj0gJDtci
zfW)s$%jk$N?VRZt*?%W&%H@bfiT8imd+*{OI(IQk-)z-*bKl#I(s86AIERF$CTJkf
z?C-}Y-ya?w-da_ot4obhe0Js1Q@B5Gul<|f*=w<tK3*?g`hSz-Ea4bG`MSxIgR$m@
z6yBEI&%oXry;PpL4NFOeT%F^ES0US;HrkQRKMsiR4)(B^d$vg9os%z`_3`H)<kCD(
zV7w1}?d>0b6O_dZgF@&{{!!dNKQ2?F14+~9dq?nc-<G%cKG}Uyjmxmaf8<-d67^w_
z2X=3VBq08q(stf4rVE_KMlej7%)?62r#XDGN`!k~|8&FJ;<iRa81Tc2tkUX1ZiDy!
zgRsX52^vW}EGm6APe$63jp@StOnNj<{aw}N=;yy}*>7hft}l1n-a8Sz;1$a|I&%Z>
z&U5ez`#YBdjs>wVboVzAU}MG~N(NFIBrDq6OW~edD}XkPxAlCKF#664>$!kEQ8CSy
zyxj`~h1wF-mr^p>p5C^qRCl2NRyDk65x8Z_%Q$aUASg7=z@(UQH%$Fr<<{8JPHw}|
zyoLb_4pI%4(<0o)c?^c4C->J2jp^3cumP@a0{4w}drp1NOj4c3BH<4b^SO2O7c7%u
zn5|VG2)zl9?fQrHU82g%zJ^=dj5)N#pVpbVvXN1d??@7WWz<l8yRJ*&HBx<=s?<LU
zuu5HBX`XeMZ;Nl8n^V3Fl<~(s0P(wxW4^ow5QKNrh?sx#(!Kk(<jWjNXZ|3i(7V!$
zlKoMPY1rjZO6h_aRYv(AWO@Bqg@<B4TcpX>%>`(6e#?0=Q;T{-T249oD#@srZGTq;
zd)Ix^%t$pSzE25&4ZA6I>bVX#t_j)of@&IaJ0e$dcu=1{1j^-xqm_I!ZSTK1b2X)_
z4S%`3YaQKNpJ8M$WdgE!CH`WPV~d=$*TdUoI~HMOC?O;P9%$%nM`aL}GVl^Rl4Nzu
z1@xm5MmYh3*~*jAs{gcl-eg%a$v69v&StT!Hliq+B+P<oC^sw)OM;)8tgywDbvx)d
zOS({D%q_G~o=ym?$Isq`M4ze1kfS|ji0!Ch*NRFtNq~hW8QC+wgg|cn5MjVS$%u)J
zTLDxHH=S7p-N(O~-R6w(j`%sQ5)d@xz$gAb!^uCd*aHOV?s<yX2@wN;q=n7m@p6}y
z9ni3pVv_P$`^F}ZuQ6QtJ@DR072Tdwo_xjQ%AngCxnV%zI#*@cdY#;dEkgx7TRf9b
zI~_n(fP~%lLMR{5&KBlis85JEI>QOqrlm*2IY_70aa|9+D#r`igEQ!QkA--Z9Lr`&
z(o&F$!QD+0;v++)=PUAIBr7HzyiK@gx1QM>h&TEeer1cCLIv^Li@X|@Zk=K*pHJjf
zo!|mVtul(z7f8;CIRdRS>MRy5oHrK#Dz7A9+DnRiqrNSst=LVB?Oqv+0(wtvbCNpV
zyRfK0q}Ol;ikiYJI|Rzv&w$MTB#NMyio^s0(!+AKb67{pmff<0L~Igg`_w?d**o=J
zD;kL*wvej>J^4#2ZP}<#GeRObr=%;<579x#goZikd)Fp|D%q?Fc`3leSk9SCo^+9O
zB(TBVrW3O=Xq>#gL493ntA)zq>X5KejySPY-qw3oT4J!W8fFG|kEUza=8gc^yq}Zm
zb=`C#<{s@!#c9vT<-X3vXB)I7)0<Zeg0HY6#`|XQp|jh<>-P7fVb4I8$bEp9wWP9z
zm=WLn<06R?k#%)8M)C^hjagC|M}q?n5Pw^dR}HP>967ta%f?mE^ZkN-bnDfNqrCvD
zM%ME)WtJDc4HwA^9UJ5@KfPt#(u8=SyKApKss1zBe^Kf4w&sP^QP^Db=(xe$)c@_$
zmXZs4)#*|lb=0V^h-HPq-E{LIL0{XF=n}8_O0%AR5%mq}{@_&D9s@TPq#t^J$n=iz
zZgx<z1e>X=y;er=IG`6kH{23*R|^SlAFgE?4SHKiw^G1y?P%ae;i(H;dEP{UF+<IT
zL+oBzp>~Ai@gx*f8QoR)kAhb$%(hqL_uZP?>gJj5=BKk|KW{n(=dpOB3o{tx?H+J>
z))K1<41w$8g|$Q{AV`6pb>UMKgMy9Q`z9xLP0IyIg0x!`8p>z#T;p>}c$O1Wwn@NS
zO?a)kx%uv=UID>023P0@cl2C!RI?xKKBnIT<W8mQSfAS)Oa_un+9uVcj`qM!xC5G?
zw6YYvf+>N*>r%*Qzw?jkN?aQm&{(=nC`w#eE_V07k4ja_v-ke^BD&=SNdWuJW<K_g
zM%ge=d%@id6qjpok<>=qJ>)+MZUKGlQ0;fcCes=@p&$}Za3TqryH1Z<K1<Gd;Q1jM
zSAOQC;ko-)y^=<61ZxB!%`whrBv(4zSv4zqT1zQqu4kvM^-ys_{gToAXgf)VdbU3x
zt=Jr~<Af5@9t1bdmR%<)6^;6#3khu53eT-dUq)X?bd!Un$BT7c;5}PE6o9A>#nT?q
z$p1KP6(DF>VD(-8{Ec?8FM3_Yw{m%%7e`E#mu^qy^yJ0Ntc7VnXqP|fO%lJRKiUN^
zmw$f8Qk6!=sVub}&<u1+8PxxTLsI`li!aTGNxGTuKINb<_T9@1?SBqlf3>1gNM1y)
z`xk*SG3k@-T_d>y$?>&mfdpBFa^EhwUDT;jhx_C3!euMdqC3?-7D9AE8Fc*tzV>#+
z4L{T9*W|cP4FAcWO#~gKWGPP7Jxj@<vv}9Y#9?mTb)!gDClw`LQcFN7`R2aII@Pk9
zSM|Azqj*fiBp3~RLxpdJx{MsM>s9qiGA?8%X-L^)T<rq6@yAj<pez#si>UaQ^yxL0
z7o0>P1?v>MEot|u+!Qj~f0)$OZiB)Y+qhvSnJ=04%8tH>e4uG$$hY7>WPzAVL1z3j
z_`Fi$pUv@$kDt`ShRBg5EchPxq=ln7Q;7p8bz6)ZIJ`%?<?l8D?|QUxBM=_r${`k=
z+{kI+;7^n)_#mFczK1VOSi+iaE$DABx*3Y+R*s#Ha?y~nBTeV$j$c4uHR$gBL9q0r
z_S=5x%!D{3b^$g&=x#z84eyf66S;#jo_}3!v`$a-Y~o7o%w0>->V%fN200T2l-{mx
z_@2TM9KFX)K|SiD{ncP-ZI-x^o<Qb}ih~LKPYJyyCx#D3Kr6?7$n}d;u@U4_%u)+_
z+(Jx5L0VwUB2Nr&AnB3V+BD30BT;t#_)AoX0%}lpm!?uBb%w1yTo+a>t)M{98z>^d
zh+K<Q6g*ltsZ`w~%Wf7O8kuKmecSu8k1sco5K@(@S|2Zix`TF)x-aRBS{@&LYW+AD
zq$|HR<NuE$v;1a$edyTm#S3@pqV3w@iYZ7Fa&T34s%2&P;>RQMBZm}$)3cdB-rrih
z{x|jgkAm;oo<OHV_jze`<l>`ed}eaqv028Z^etPim)2j%iu`3huUK@p3zp(vz@ZP5
z<k54o7pp=F%=Ll|ghxVtsuj<Ot83g*!^QbdMr{rUAWwTondkAs57NS$|2U^1g_SUs
z#S7~yFW&U>D^KU&9Ta9>soc&ICO>0i0_W4~lT4aSXN>d^ZJ*0rD0?h_D3Q!K?uqBU
zKXfgGq>zMqLmvhY!?Z{@R;(={(uKsg3c-<Kt`9xOA~t7*8?hUCkGyme@_O_luJ)#?
z5;xr;^sI`LY9oJJ?6uLcnHB^glK=_Mn%}&Vk1LkRAue|`vy7i=4u6v@gHL9Itq5LG
zLOFX>go@#WtI;KLE3{@w{tUH5#g)LyK}ruR?7ZTHwpyw{?7Ib)3l4aDIyvt&E1zUq
zQgl|)J3Hk0Jhxcf_a|CImwp_~6O}lr<f`JwwNlgNii&7?$6Wh%zZEv2R>zp|w;SHA
zAs&Yj-z^O-0!p$C$VS*7sE|FFk6($`%!Ha9+<T}zIz@1NSh2*s{?qNt1UWGRGx2bI
znhaNR$L{c|H+>f#D7qE0;9y!*efRgxtBx7#@qeYc5MHi@&@b#16`xJVHjY+6@4DYS
ztbFigGP7O1tL9uLugFT&>v>L7#9Sq&=hh9`mg`sk$LH^lWVQ5{6G`>iTQZR;mfz`2
zeQ?RfW;46`HM9~5XN<&elGSQ3>)7Pq?E2<6edRQ!tDK+{PrrT_f8^onn9<1U-t9fz
zx$nEF26L$4-h9RSh*nIkpPVOk68JL%nVIR|?-+sqxjW$bWfJeK1K4<QXvl+*nOJhF
zPUQu6z+~7>z{uDKlRaad-zW=ml1udI8-~JJY4(XtBPQ};qg10@t!l>Ld=Q2@sl~Nu
zqG$9Uh5cC2f<%o><@N3r<`oyX%rjxY3g^S|f^%YI3JkCj@7H9Ifw=YkllRkLxCO_v
zdF5;Kcqf!O@A%UhqtPTvmF#wV!c~-RB&8C{p)<<B<Rv7{F7o6lq8451l=DtqPpW6z
zCi(T_v2`-kWANT3qf_&-4{Y}_LfVnSKPCknGLI_FbwwZal=*)?RKZx^pAnG-|6nBE
zOP$Jp{4LVecauY(v8bf*R|d?hY5)UiGHfQxPUYpNHe@mg{3oOFYn|Kj2hk_7JB5zM
zb9-O14Z}wwOOk9k!=@s_e|<^Lmykd6eBTD;QZ?#nI3MqwxQ{VVx8!lM4^7y!twbq_
z$<)z!o<Rv23M7y_<DHH*qX`dl8^^j!RM$xIpFyhoTlIx{$REY)FLHba%J16U0P*uL
ztmyH8_X3caK@Mel&y=bnNbZtymz=uw1P8h7T6MmNwe9Z6715=xFaMsbOTKpb<m8g<
zj8TY;Xn7&sD?IiFMIP$4P7ofEA<*jvndzO2Fx9HRmKj@zg61E#y!?M8orPOd@BhY8
zLM5eZAfe<K4x~mX-M!IBj7FG@8VI6vcQ>QP6cmsy1x5|&kdA?Xh|*HxkI(n_2b^=R
z>visPpZh+~d9Jrc+fz^m6SX(VpzLdr|Mm_wT|8|zXbevErwRUG^;DnmA#75|OxG{=
z`?k#H{J<S%dJgk!;PD3;PMbfxb0MymGTB?p;I1e{mF0gQ?e{pDo@x#AxQlLf_<2<>
z;G2g38b5sg^$LroanY8VI9%}%ij;3Ne|p5mnXW3{6XP8F?o}?z0JLoOay)ZbKKQ1p
z9rb4`VO2I~-sJclIfz-W9Tgid<ai|@AfG4zBe&tMD#ktCSh~|@A|W>&6uZInm(O?r
zcP8I;kr1VP8&T~?-0_ZzsKaNqum6Z5pgv-Ky7ty|^C*LBY8rRiTRBrc$FUQpddt>b
zRWXSotLEd`<@C%=$%Q%e6K~<i_ydoFrgBJWN#?y@`7zJ@viH&8EKi+5DN#0<x(?tD
zG0@2Go8LV8At4FS+#ctqcg?6K#_qt?q2DU>u13c1pc|Qo4ZIU&5o7Snmhi&7;UAGS
zHrs4-;X7A;L9l<N0rhwOAA<)ES0=D)tEZcN8=kd)IM~E>y}(>=O+j_a5Q7(oH@zn=
zCh`5Y`3}sq@if0SX9m3UA%T>7sV-92@!-lOx5Bz@RB--4>d>ts<#Rtf*L!+FFj<DF
z#^c6{#!X759W_5u1W=*4hw5aqB0|8riJG3WgB`!4SLK>RfCz2txa+8j^*mOz+}?F7
zMehAbsopZJzTXx+96%dSM_Cy;uGMi5-_U!@*a-f49xVl$`x)sm^p8j|mIB|n7EM8K
z*Zyrsk-6zH?aV)-?oWvY?H@1tKDK^M%FyDYak<Z$rKVsAg@eY^;c>sX+trpJ##nGB
zs~xecPQpg4@B^JLrg`m<*0*a}h#a0&l4bsGq1DAUE&qEEZ8l?C=f+#fX;qROjTID`
zW`syqr438Vzf(ObqfCQzClAtLUnU!}T!xT2<~LTGX{_?gZ(T7*^c-h}KHSqwlxsR!
zo*GIxc?_0u_%SFC@6N7@w65}Mxt{1>8-M3W`BJPuhD@i!$;qcGGBMz^j+eW)-?YTJ
z++2tsG-5HT6X?EfTvh&8fn}2_)A8`~hpz<XrD>sYZQ07;yL2ng6}e}c8Y?D!=^qhr
z((A`xc2tO4!naHP{wTn_^eJmE_?nC@@tlm}7=G_taqmjx-Bz=m7e<?<b7U+CR|3`e
zCaekq(f|o{j+kVUO7ALzeXf6HqjAg51N_McLj#&)=@CG-TuD|?C0aKDpP6av9dQU|
z*gBkUMXOuhbWdy_Dp+^jGKcBhn66ROrTbQ)USh5;`pu||GQc#20?eG4mp;Ug04=2J
ztrk848gkCP7Wq`*v7_o~rafS+z05bmQ(R;HslQp%S8_tg7GzydpD8G-8|6`zu4k6B
zmJ&A*X7fPEz9q+gf&0;qrvmTZ!n53IkvX1$fxcDIN!~OS((xl*RO=N2GJfCf`ZKTF
z=4(KSGWL#1zyeRft`bAr^|c_+kWaOTi3!wUSsc;qn=`{B>DDnz_&ZH8nIJylfU&n7
zn2%4(QvwpeJM`-?*yp{&e&Oh4n+JVpm&3g@xk`_UYh9wk#Z1K;qfpiolmmEy+?grv
zWGIdn(#=Kg{R*nO>Ggf!8Iy<p!9p-<RPIo#_Dn2UaQk7hiKOpLws00AzSliqI<Dcd
zw|MU)yUXGwx<+UeF;C2+3Epf_ebY=EF7Db@Q42GA<-!ujuDhj|en$bIqXhbT)e61;
z^7~xG0?&#N+V46inOLr&K%S=_s$b!_hx>ECo_TWX*&WKV<AK6-*WgHETwQO|LU(cg
z$Glh<ZLmTHNk3>|v0qG0Bdb)4BI^Y)&~on~^@1@b(G1=%5WqB5)LJ3rjr&Z?&o_ZW
zK@G+C;2`4w?c?MB1_TstA-1o#5`jlQm;MorwwuySw)^b|1~|@dqLC}JuS_LZ3jPtf
zbBR92^_RcoMEsHZM^yiMY^5l`<iY0NjWkxamTR}><?caoGn;-$pP!@P!Ikp+J}*>I
z?9)tN##zo`>YCU2!*!Jru~aUE9k#QeAAQ!Z%xS!t%ndqAwcd+As!+J}P_YutPuqI-
z-d^cPqD5rhGM1JuM||q&YCB@#bTh`?L0_LO!-C*PcEr|T_<o&`v|`{hL<zoq&k1)d
zDq+auWX*miQGEHr|D*lA3Ek5YI=h&h_7_1vBH^-<O%FsN+?<Oxl*Kf>-Lb_@Gfp&}
z?}X<8NG=U+{%Qd@aJ~2E*|eiw9|Uo*W00QG`=}9QIv3rMi;Zg2ut^F(K|eqwaX-~5
z3><rLALq0?BPTF)I7{pJ@k~Np_mv&RuOYsB^8V=CA$eS)f>UmZ*%U=Ai?FT*txy@D
z{aI!;X?RbjXIcZT4-wD9vBl!5Xdi92V{Bsff=muHi3*c&+iUTY``QtfHbq>Z5fc9z
z+A9MfMh2@7)$x0t|6V`F8g)~zQD9`;IGc*gv<IQH{XeJGc-bvRD-#$ezDwhYfhQh@
zq<6jge`A>>@c^ZJ9dXN|Pw1GOovx`2vo0cvCDVe*(Zgh7&&{5Q1pkPomz-GinH+iR
zw^wjFz;$y6d2atBY7oCu*r0NU?$)96NLWR4qGU$>I)jSJ@+3`vxj`-9RW_bzX)fWL
z3neJ|Y<ErGEiRro+0u0U0L>}j*XL+*v}sT(a=>Is6JfB=4^*?9x8GF!dN022ZjO5C
z#3xZJ+X7hUGAE1_FW3XHcIH`DCF!&C_9?*d(fQxy;c7-`z0dAJsc{4v(m#4+ZY?M9
zE?t`Cw;<cz*_dYDkZ#PB(pz{?_e9Xv5IT~12tj}eo0*x7<IPSw49&oQ#Qpqdp0dT#
z*{i-^_Bp`53oRH{t!MVX5;FYyKPqwQL?q04%=5>rxR+h$Ir}c?&cktb&CaPiWU`Us
z)vIIY6Ysoo>fOB#k1*Vx%5_9fGf1NnLFmmp`MRpea4weZqymGFUEa)0kAP=m4EiD~
z&(mq8n<iPaoTTav*f*n->(0&s#tov4b+4a%1Wnu>u6qs-{HiV`n6H|-*e+20$=#0+
z6u9ipTZp<O2ENI!kjR52#PSear+pU=v0OE%^&eoRTT(Yb8nC2&y{ez2(3xudFXkAQ
zXE3E{bi>u7R2Y>$KrL>@USj{X1Y4L?4g&oXM=L>(I#+<wv-bpBUI|HDQBY8f;|)$a
zNV{b&bDXZb3fL&@)z$vWx!n_dM;x%L0w~=%fV6f(p+lel$K%N01?fOR9sifySmEE2
z`)R@0Hy_J})5umJLd};HlE#U-0aLfPxPK6ZM3C&oE%pR>98|%E?}vKSEBLTFp4LK=
z5*X_MFZ)i@Ut5|$Y5Rq@5%uhI*d+f;`@da_WeV3{PZq=iXKBV4zWku|`3t#XTi@PF
zLIC$W?*`}wjBoxU@+K5r*vv%&kABtC=q>qPUCzk0$<a40rh*6dTWKpYmcC9>&sfz;
z*YXRp%%J%JXCDA>TM%m&Q+*c!zhl|VqR(I)VqaDPmcSHL(@k0mt-rTMUw*$0<(P=N
zM2b#46ofrrb~3VG-d{gn763>2(c-$Ee^S@4WSO@!=Lr(<wR&Y9Cfx)oZ7|X4mwT0s
z+2eV!8+c!D#vgUQTUu?+LEO5;)l92QlW0z)N#2bzqz8x(Ox!v>hbiyb=GaPq3zY0y
z)1{|GM$Hel`czXF{_M!kU04!7W2C>=)6$Eh%^37In+Ss^Iz1!*O*YveAqZa>zysE1
zw`RiBRH%WizI<4_W`9xVkxQuRMZgAa9N#izyaJ5RqVvG|%(!cy=yDzkDbPa3zTlfO
zmDA$(c;uR}q9pcW_E**ls>GD>cfa_03QJ-$CFR@eyU(~cpORxxgq)PUxWvRXCGf(p
zdn}ttktLH_CBeW|=~{&~HnG=#n&gZeqZ6Vh&~SKUpmaI9SG`JCU5`f0OPL|{$sLP_
zGmkSB?@jRQHI(UB7DC`D?=ASkN+TW29nI7$4hY67kAHQ0`L2A>!t6xSW~bp|iXv3w
z{p!|7MDUnBQ$u7A_~CQ3Uh5d5Jli$EbTGD+#orRm%p;K9Y?o<0?90uhjan&Jq!iaA
z5MBB=xV(53V9CtxLF^{XvS9}>$4x^>4TI-ifhC$+o%e4JT3Zw+(ax_6>=49$BP@zF
z3fF{{O&S(1JGVX<k*J7B$pUC(T1)Un3MU~C75wM1aJ$F=|2wft`nskEXoA-eihgf#
z=l!&fr#Py0Z~`(7uDf9g5^dCzf6~DSpp7=WHYL=mSb=rIaS5KnkA&9Yk>++m_YZR`
zB+dTteB(=uQKpCt@&e;P3kD)=P%!86OMqn)Yehm#empmC8EWjyT4ADKL$tn8Y|H6F
zB9KX=or)GU^6;K-bWy^si-0ti4INwqmPy*lUp>yx?m<43ILeO|H~YFnD50A<zGrvM
z5cy#ezq7(<p2HFPW;4-V<5;D@7tP1fKKz}B)i>I5+(fo|f+Cq=J3C*@Qj`6WA*DB-
zW|F9Olf)O(EPZ;&<(1~bZj_x3Pf2brjkOl>@GG}+E_^<$y(2@pvI^A!v;_|m?*1bZ
zOPDQZrcbm5z_OIx?w%h0brRiTn}o$9#XqY#B$kcEWOCpK&R5*H<l7I2bj%ytJ+CET
z&6|LGRwnRL$}wh+b;hE*yUN&?rfG@K7t}STF;jP%lKYtj_~Q<~RTb|KJ^Z5UDa>Ea
zrreYnocdD3x^hkRrwn}YACVBE6h;q_jYK_Lx0rw9TCP>gIr9==?J3S+sB`v#Ault=
zZvsttIr@gj%`AKp87s4jmHueKvoCS?8~k^_fRb(n4?1dccoL9cKR>O4Zz>X8|Nlpt
zpL*-=`f%$>gRbGrh?ppkAfXQ?Jq^imaluf(D(HVw3{u&xz9ZGNn6*&8WY0#*F?(Ah
zQHAsr1J6qgkW7VSqSsINzpBUI_6iby;w>9s=G8bRJ3Y<GdS}OB31Vmp@+4zP6Mp}d
z;BKOW#5XNv6H>07B%WvZnl?pwbADHtjw&sisvxs&AN7j+^IT{fB=c?kU3rbJgcq`>
zrJH-Y<23e-e9d=rOEQhKr7M@4yp@k!yUe#c-I~uT`R(+-MbgpwDX&yicl{cNds=Cx
z46u~TYKN2YdvAcvVh+t-h$Bg)_14f*eYM}!<?K_1QQ{NQ&IdG{8FP4RS(iW5)@tR<
z?1~WABxOysyA=_S-;9R^O<E62Z{OYuPbePg++%VHb2#`%6wL}R-JPB&Ayc9HgcSwW
zwT_%c{5PX%doyjJKlQ-W1mcT{-~16P<5SJ;cldlO)#CfnQLgRKutOK&fiG0fX3K0>
zYGx!0O`B<MPuzx^7(+o}{ON<#tuUoMhk{|$!jkiq%j55A8am(hb1^%KIvOh*R|0Wq
zS(HXYooO@)BuqNC;|)z%$myZpFX>@Ada{)@6+pgMqhu0wXF7u^J3q&FiQ=H63zW9N
zx9zj(FN&jr^1L;lo_zd^(utp2=DV0C=OCImdUseV+><Wdcr>fUrWv=;WunB3AQ;T_
zix@AG9!MsUPZ;eTcz56HbH;mq!i;kxY_gKHTr2mS(}DwW*ht#QhugJ@AI);_3J^Wp
zdq4k<|9^`jWKyC!;4B`^<LS<2m_gmNSRZ`-*N%!S=d$#k;2%TFOwITIh#oUHEvd+f
zSsjQ4W0h+EO!VTAx0V@@J335=^cRZ`30pHRLhZ_r4o;F<LkZW82~LRWT+BCz%^ch!
zcz%T(s2HFVy<2H9_RX0UAmYp6cYuaaJFz%~e~q4B5&)-K%{n`;so3EQL6XqpytA=r
zeO{I)9&Qzw4aZ*F34?`@jK@}K0AhBPAHL*lS=tIqTh&x@VnZ((%z<p;9Y8uj-A>B`
zwu*+1dfvv-#0Fhp_-CSJXH$Lh(3jb23oB+?t+{3-i_2@Y)k;v-^kz4oByu#Ziwx;i
zV=P;ZTpQ|3o8UI;7`^)nwuu?6)Z+F#i2ul}zL2D3?*@t(xJ}u3BQ3T3vUt>4gVK-=
zWT~;bd-@h0if2uV{jsB}gJdR}P@b8>F$3#Bqer)11yAd$4mRpHOqdlVJgdWhQx?or
z&e9d)T3I|x6+>P9NQnF0JLoI2^}v_PZuU_^PG_TAv5aG$a~Z@!t}5Y4F%M6DWyCYD
zK{08IpO8I*4l}irnZujGJK<B<{M7GlvQNovWn|pUUmJ(8*`vXU;19x<mWD>(t<<O<
zQ8g85*-j?P<a>B~e(EMY>>KR&-G%Czdp*jsoja(C6p|sEMMYUkFn+x@Pph=yaKUO8
za*?G$nhvWp09K_y%Ya>E>?o&<zGb-j{4ss{+N18^4j#$k@6Gdzq1Tpb4Y06GGexP{
z8M#2HnJ8m`dsU?tCGG8<3$Ga}z7llp+vsQ24S7%(e!)gQQ44b9cSNuRqTw!UYYtnG
z^=ZYep=S$P*g3~c>$)R<E>ZVDr~z{DuQu*S|B9-yz`(Lt6evRwFx`sM^zPq!hBS}Q
zLgWWe!LF4h;!35aB8%xZKK~<HyHONX7{{<Vx9ViIR*jR!h-7PGS1?Q;#mXhm;~_!1
znesN}eeHPdL<MyKsCn)`PQrepKkVWIp~ZEM{mN&ELoAt<*Wa5*CPDc1I8CE@;YX-0
zr#VY1-i4}&4f7|Y5sd8rBYGK}#j^X`ee~i_;x%*WWT;mTN26ZrEWf&7ubzqm<%MZ}
zK+$53`b`;had_suR0}^oU2nY(-sSWzLuu*ICR9rWyVu9A+Hb|nrhKq=QSAphu>bh-
z1nf1M^<zKz4A$G7UpOX}rB}wNy3xAxv;zCU4LQo{d3J_V@z~<<?VL6YP^KvV&2DJT
zNQhs||8!hD98v81dK{Lzhfl%1cuQj7IxzmoPM<S@)~nG-afW6M%D<4v<%ZUOD{C-;
zlTO^*b38^r@bvm+zj+a!HuGjZjc~eaL2hNRN1)$@aqxj3Og9{Vg0el^uo$UngDLfh
zz7`buDyMK^2F?-<T8!c`?GDXf+ohRzxvBF@F6My-ydt+pmgIb~Q44lo`uzB<Ekbj|
z);-^dxZWMaFGwyO=SEj0-TsMp9dBSZQ|3*f`s6%;h4>v_7dzT&yKX8vjD;019pp9-
znNR#>zY228-H|@%_0-e*OMWlWD(_4qNT|ebF`XTsP-&E*VdAX$7Xo$k%8zSOn<VHe
zNA!Blm|R*!mi5qAnl0R<u=t$yCVm9uo(%DQ&znAxASP#O8!AAbsYaswOZCavcvbAT
zc4R7b?KzA=x#bPp$Fxlkp_FJaKddlr2gY``i5K3iPzjEui1+G$-{n4SV#?A_X^)uQ
zE4R{7Sm5~b*O>IUL7P&WB-#Dl4vaxF54(5T@z~^y_3L-!^tOTR2<OL(i?J8-gF~~T
zW4R6XyR^>E74_A$pYE`3Lw27{d#$@|yy=9JSry89Ug*-+f;X&lL?Gg-30(QnL9DZG
zRk4o0;)|mj^DIijH@t3xXQ*sgOWyQZ1eyo?VBbZW6%4EW$v%fZ<aE+epnE`GK?BS;
z<U`F{W|&e9;@NjZKQ(FbkqIULNGO89tnQ66Ogo(jQ64Dz>@t91pSn>7R%Lthq_A_8
z0clFaH?By`w~ZV^A9J!``Nb3SI}bc9IpBxIIb3ht9g2oR2agYaY&1?!y1iKeRLX8%
z_0LbSHvtZg&Q|&|R8zq{EO{rFu8N<WPs~Ku6q9A0RJ%-S8p&gYUuo5>xKFF}owI)3
zVivI>2Xe|hXJ46}iHt>Zn*2BxXl>z*<aXcW<nVouF(WzT@Wq0J{!r>dZv{#)k-R7T
zrx;KubH{~#AJz>6PZAc}KDR)JU#1E0h?JCL$@%4!z!PM@+Q#9TR@U+oXXA!=+VC8c
z$+IcwMWk8UE@uSeXr>-84eUB~4x<1p)<0Z1E+V%B;P5AIi3c5I)?a<QEbQZQSqhkK
z?#5<Ur4BdA35Kp$sN4c}JrK%($6^jFpD9w2K>vcp$x&xxMxVd6fp;eAO48v(sD~G7
z>Fka9wf;!C6)j_>vkjTor6&weM0P_Ow%?@_BKcT)-_4w2TG@oFLqpfIH)DO5j;q3d
z0b=s%CoP)M^}pGZH>~%oLMv=^c7I(a{Gc|Mi^?c{o#FNTAJJ)d@Y6+HVQ}{T-{2dA
z85vpTD6DvsHs(9i0{0Yi6a*vr^)mwIw~wB-c;EO-<==D-<ZsKYC{MqdqN2e5BIi)&
zc^}-)MZyEEpX)md>&^)U4$k@+R55s>Mj38#nxqV<vBK1sShe>>l0u2ue;)T!Y7CJY
zEpswxjRd#D!0>-Ww3||LLJ<qU{QlO)`NXJQN2uV$_K?k`Rs1WAhP9(jw{WSrzf>5A
z9?R)L-{tQBc=y!(mjj6+?*SctkV)FfJ2X{E4IrJ35ORAdAd;(JI3R?4h7V-;*nU*A
zev8DI7}*mk$^@Z#yQv{qNa>98i9zgZHAh971?xN;bcibJG*(qkOcZE4yqn7_7hs_;
zb%=$q+I<EX0HX7zwI*Xn8Iz{H&kQLz9~emgSU#N{imc7@=;S+9z|re7H!goq^R{5q
zGn4+dOA@uFs=1dV=hSQdGy*!gw;8r5!rZ^~l&VTetS3o%{7NAATSpx+`*G@PRb!pi
zRXKB*=oL9%5_fub3w_Bx*2kx(W#J;bd9dP8=iC5MwNT_Ks<DCCfl+#a5`VQKCgO{L
zdUO4Z_p%YSit(4;e1cSS3NK)v+pLGdqjX|*pn^bEZBp;gP+ZrgrOS=LqAP-%Zi5li
ztgjh9pP#Pgtyh=LQ0+u#Z$;gY%M_hd*TSHrS>X}i$9@c*TVzubQUK52;%DL223gdm
z^dFkfVM@=<h#YSpZzC8VZ_B7uG6m{p?~-^x<&a<SfaY44JNpe_-xk};VWbI<<rQ5G
zUlVABD?WXEu}BkJ=Cw)<tS(ffXOQ3&#s+j{SU+j=q*lc7itzn9A;~vERsWs6p)_%-
z!?Ig_lY-eP3aMGXTn#^<A*YmYN!8`sEYjkuTHI@S6JT{sD)wH_x}HCNenzY6z2m|r
zl0vR>Ki2Wdx!-k;B>$Ih`xR`w^B<YFd#|ddrhCGYv+K|{{X^+v8xA)De%Lfr1HxT&
z)N}V~hvfAS<rqHS^5~7Xw$${H6O2tIsh_nLkr#LYG|-dAxCbmlpptiheBa7{4IbH7
zRVShdB#!Q_!Q(Iqq*p&H8S6EI+Y<$)&jir82R~X_gIZZpuSqd1&MY%h5d*oT7i&Y5
zjjG<sw<}Y;cbDoa$J(JQ%)HjKo^5U%@521V)`re1&GGbW&>5T<o|DfcNZ}0g0&qYo
z-D&JRLe9?m5`l{Z@?A$zy{P;0c^GG2E45H%%mBCy3KcU}M+WoN2%VlCQa`Su;fje(
zAIHbuMB?*nC=0&n{(5p9)%A~1$3j6l6XuLj8uD7wwL$4!zkfs-q&=X8OgZ%vvujCo
zNtU~1u5R~rdMmZ{$g&o3Y4dARRdvwZh0{G?A%nrz0#YRupZ<@Cu7)Dgy5(u+mRfo2
z7QVq&bVBpon8N6lmz<%e&EdOfYBe)KImg>R=g_{KUw-jXtRj`74}`M0Z|+z!<OHan
zp<^a`Kigk>$8|?_+@S9p#{I?%nAL$F!MqF+nR<D(##Hn`aGWFQ($fgTC}Npj^WCg?
zkx_DB37+~+!+w_Onj)Yrs77P?;r_BftK7#6)cktHRjC`OY?X|8VtDyF6YY{H;{eCy
zgkHCCxQl2{GgF)5AeTuQ*a|cuBTU%6av#&d{uoRRs;)HKB{9)`n;G253AE@Axm_a+
z&!jfnfTxduMXqU$-fS%-|4+4Aw!D$a_|gF$*9=R3PQLOb8&UFXwBy1!j@u#c@3e~8
zmtXeTH@fA1%_wX{e)?UyX=ZD`SguX?%dCE_ius-wi}vywN{BkZdBNn4UgbXa!>da;
zXfEnkKFJ?HZGN3A;r}Asjl))g7SU=+f>-a-O5bK7Som-)?*4}#9v}WAYAJ2GM9d@M
zE6Zv2ORYQqza^ZE%*!K$YPap}Dtz?5|HRk3`Knzp?$gYGw@TwKD;iI*5YbPKKRaF+
zD91R)jIWdv@AWM9k35l#C3kX+^=e9YJt!q*>J^!E5sH$Lh9j-AcWluyN%R11WIOJ9
z2J7C0SXt~nP`HQ&XXZRa%vfNIcyuq4jK*Occh?fNOVe9@CPG=cbWe;t&Zm|3xEJX)
zC1!2dGN3loTfUR4(~hcr=8#_N0`yx}<mU`cC(8tE?AAkfwU-B`TuNfP?M~r}!Obg5
zl7}(axRFO<%d>|iiP_5G?1H^NaOB^T+Y#dpu_bmFwGJ^7R|10l56%4Q&tQ&a`uk0N
zv6}LAr((W`SV<Yb0Ww^r<v*f``<Hf$15E6iD2%I0qDcAv@;k^!7u28==A{D#WCI+`
z6a8(2;=T%PTW$G`Qz?}2ZC*)WYUP{f?0x*Pq79}RY09?6JHz+}fCp&2vM+juQfb*p
zQ3bSYE<?BnQoX{&!^xzJzWT=ft%mY0_iLZMexjz+Os2_P1i=dN=q~m9%zt`-I9baQ
zrdnB3j8EpfsFJ+ej+f5S19C!k*T-Z~IeLkv1y2qz+*x!E9QL4*ansv-4vs0nRNY@<
z#$<S~NJ!IymMykXdGXpuDZPgh@ic|@$>#u)=K9y27Sj};^b9|Ra|BhXk-(V(C2OH-
z`+MV8@@`QtYWomX&OPPN81#pm`Y_FDnNqbW)nsCOgkBC2$jX%fFUR0UuiFcQCxt6a
z%Ucx(1`K_xC#hczy?XI2u_tjh8UozOIu=}1O9?`&BPu)KuE<YnsO;Ol?`8K?8F41c
z#>%#6CXO%ggtGZ3XOoo7=elxbVHU(Ppt6xRi`aJQ)BWCSSD(%ZW#bd@#6Kbrx44)r
zIh|C#Ymd9+JUSifKE;z2#`caAOIpHOcJa&SV9BwwaV0OYwBxhg4+W%O0ti{^u*uaK
zw<LaA2dU^bSyd=!Q20j0;j)J**(i7~<yDt2*xYG=On*z|1r$%II)C9a;RZ|eG?X*n
z38A;JFSg_@f3vIV60axKM)lqT-BNSu6GC2M$Ljw$Zy9*Jk4bb>E4tg%-;Isc^y}%W
zhCR1#_xikDDdHLNjOEws3P>I!6;M$J+0?w#p;co}Hfm{(!K^#_`HP@Rst3TKca5Z8
zkfjqpEa2k^%w5J-0Cc|CTgvV-3Vk**JNPy)K#`N2;^C7-FzALy-g58I5K;V!2bFy-
zs5Vrml-_(3B5~X`KUJ-gsN;hscdXE4Kc6xg<=%TURNaqp)&CKtli54Gum*iTpR*>_
zUbb*lr7kF=2`{bbeBvs4k;MLC-vwCt!eQE{?Y}9>LmDut%p*6dMB_~GtHKb3PzFY*
z@tIf%gh$J(Hz%y8BFzAh{W;1%M8u_-EzbvXZdB9pk7&<MHl&qs{d!okmUTAo<Tpo<
zti0r(Jf9F6i=NW7ByT}5`%bFs&T}}Y=^svxmE)B<?#AGsoz`7z|NDXC=l-I&w*AQI
za$ED7-@e{2;e<+!z_IR&U_2o@{P-9<)X~0_(O>*!A4{7U<dtupIkw~MCbU1Ih+BWo
z?Nj<FlA}jXESw+O(7s)r$hyA3L{;j)kNpZ_Wx0+F*`HK;JlM@0YNl?xqXOsL_QErn
zMY*x;ENl)KG0N!V8fDM<wdH1Su0Eg(hc{#bm0lzdNK{kqfrt|7;JDB*7Uv6;+8;JC
zGgd;jV^WhJov4L51!&nT$a?USL6wl3seJC>Vkh6e$c=OKpnPGh+TT<ty5r<YqJl6r
ze2E*xIdp!XRAvryVIDx+?+^4RG3Jo=Vd)%WZc)~WdyoqeBDE9ML<PQG`l6W;B*ER`
z`URx20V-aBSP5TtfLN~q+*=jR3^=2Y{5fm^HwyFm<;ceyET-2<3RReq?~&sh8~)@t
z-Vcl+^KY`TsLj{Am$H|p%<`JCWV%O+nNovv@_7a$K-`z{24LqD_+`I%OYHix1P7m=
z0NiU}ApiNJV{0Mw!LL^acFC#Q0n^5hy*}T%^@6=}$v}@49xpBYk0@%kJ39D1(mNU-
z<EM@gGW3$oM{ULdmDg0d|L|qu%~Q@8oY@tYUAWWnx3)7Jp|a-oy?ld|VWvuZepzBF
zlpV~6<)tr2k6$MIf=#&$pKeBcK<U%;VFK22-l%QAcfIeSLFxD?`Pw|Uf>U~HAf?rU
z<p>k&cZ8FFKiYgZdKohUQcL;n@vQk0{MK{ZMqevTdV?C^;Ka-hW5M-{jU$~r8p!%7
zw*bxUr3RP2Sa28(x3byNnSp4<J~ar78KZAX)_~Z&gIc{D%><cwBF!59G~DtU6};7%
z!&ewV)=#~WIdScAN2eC~Suw|SM&QlrAu}t;D{75_1|Yt5izo|Ck*HVKe9R&>Ulp43
z^}y2;;@-f_3`Cyh*dH)z6x@!ap<ct09nxtcAZ@qz2$?dO&jJxwLKekqDe+#;|A=VL
zjMW|wri!i8dwnaeUA#c8$9MT+?;h&P&$)|B9%A7yM|090tCOf)KI+Yw)pFirCaa0|
z%Y4zhfV;xFy^FMxzF~)gj?v3`WHNQENnwQ})yzh~sExiN@^Ejj!2vs(%^a+~eEV9y
ziC-ieiQi#w|NL<Ko9O5c39G{|19@31duzJPfZ%VBn<W1ck;jD+lBEyKS*%>h%r-<y
z4)Q!yjVVjXIQ_FF8zhwfhi`Wu6Bo%!tuSj2b&<(-BBxaS%7m??Tt5pK2%aVz7zIj)
z`NpSdCd9ts=v+;e?6^%xjej)Q(0MU5u(5i`DdyVupcONUXg%yr-j`Qk_*R`M)0`$8
zyX`79pCBW>C53Bg-Vv{bLHl`Il7P>7AbJ@YiJtO!u0<tHku4}3P&>&)9r=6Bp!em#
zUKEpK5h6pCTE?MRPRUc2!RiI|>bheb(8m5+f|*n-fpv(_c^_l%JU@EkHFR;Ow<3je
z*=+rOa-A|)1OxSmUManY=QYf*wnxE9j*GT=s#@dTV&9x?znQKJ+<9U2s!B}znlV+<
z>^mVLIV&cR8i8mYUa$Wo^$y$7xs3V)&NnRbp{4E6B91htzgJUE^3wM7Lpi0+$Kkzf
zFLPvD(py~@fH>3mYC>aG>GJh#k2v)uZWCXRnmm~;I=+@g`F+q2rQx=1_dPR}Qr|Ls
z7*zq=;<Wh#?msQ6OY(7Ec_6U2Yx&<Y=%xA_jpP;6!<t|G3sH|nSQ%A%@hS~niJu&{
z?%V6te;C3tyi#W$POB&}G_%&+eYytq*(3b!DWUr>q4*WaV^~-%JRV4036;M4M|8J+
zNzTu&RDj6(fVcarLE9_J>;bR`+k=_jsdV<Jv+=ujL#zk2H>WU;b{QI(Bqi&+u1Bso
zVIg+W&Tkdwy3CK4qjTIS<R6JZ6J#8MoJ0+L0_5Ahj+ErcL$v_46GJybLZ90B^E+Fg
zV6k%nE<1tmYoufxr4D0B2Hybdv)*T@b<0q$=rbz7)UCuh*Lpn{uMmb@D<XfQXQoxT
z0HaZ>(^ST^srdJ2zGz^gn0h2sd2bz_`4GwXKybNQ38%tG_j{8;m6$tDDJam8nI6PN
zAi4Uvt15Uah8Q-xsREk&tBA{q@tH}tH_~jczrOL~dt;!#7l!wuZXNi|@L)gC^URsa
z`G#~y@4USST;vaScH=*xeAc$E9+8Xb8pr}q3`=5p<Kc9nm>|fwiQ)k54G>rwP9`!T
zXJJb<+GfVn0?Q20e{t#WU!=PovG`Xy4cJ;9E_nBQi=<Re9L`n$4nNTAP&>F<5s<u@
zm}z=uNY6B4&W7lKNh)0kGaq93fS2{zL1-+KkaP6VXrBw89CE<vLhpyi1eQK~BReVP
zpyf#qtJOzQPffP@DZ~2!yhp#apIZq$t3AEW_sWep^<m0d2CVNdx978-P1$jBV}N2f
zEQwe5hd@d)uH<PqW~m-zOCZTQ|1p8B;p&Y%`Y;q<lCZ_(FsrL2RJZzY$^6WxINxWR
z`So7`$*1oab|)<|?7hTz{LZ`9V2oi*=JWo$4T@Z{4sErZVKBo&YGC$`yChbUCDINE
zjA%WZ!p2cQ8%;<ekB+w*pYb~%Hwli4OD}JQDk>k3Hu(n}FNZxn0P}f1ERPKLwkk5u
zZV#L`2~d9!(aI@nU{$9>Sv%qQnhk2@jjPX8={pESrzIgb)8nShq=%4S?RIIQI+b)x
ze@=3REqU3OjdY>pp^iC&Z}S!iNVm1H_|4?u%TS31HmW;f5cSnDRnMy3rwNMnNfnaQ
z@tuqe_j~^lJu$!9mh$xa1*hZ%zGf5(hi7qpdU$qbz=Bt2xqG(zPW45;j>x0A-I9se
zEoLhO-^>)cLhQTR&#yvZkp;JZpFvf8isT#6HHw+H<X?-PK@IiY0~Y#grd0RVS>d2{
z^)Kay`tXEdpN2dG?*Y<YGtUPELl~Sw-0#BYN%2-Hoy+bM_NJiP1J4~JOmjH>-pcz6
zgrfL2^X)48SeX{bH`F!8%;!_L(g{CkCr4tNt1@NaWwCqJS~7&vRM!p$<mtvpVpehe
zU+`dE2d`VKjNU_$-@6J>&fljW9g}{sb}0-JxC>tX4N1J_D6B9~)Qn#7XiCrhKKUjt
zgyn-!`^qo)wecx(p(rRiq0Re$Hu76zUp>fYQGs#kbDQRH*AekSt`L!q_4Y!wYXLtW
zWAqa_zPDA!pUv71MHp!*KWY1LHYoMT40AYyxnkb|mjWP3x=q-)_~S0qgW_HALO)~k
zaGu%jnwpV!7(uqPL0tzB#qz_W%#aL;P)NAVEUThc*qN@bhoDEEg8ojKq$f+UE|fz-
z3n`i6Sxnjt=-1UOp3CF=*a#Vx&c+ig#4+_W)E^ob{K33eM{Gbd7*dUmh}4(U%tVx9
zxSF~+elwPgjW{!L<jj7^p!*=Yv;4gSqL$9o2Ykj(3!@;}eEa?(1GjAoUmJDnSA(wk
zyu4i%!+7oFlaL5iMKMQF6gIKhjlwlLy1@kMWc42h!`h**f1-Yu=*g$Li{wFRM<3=X
z&X!I0`t)!Qkj6btH&7O#TOyM<hp~=0SpM_?PEso90~{UA<+u{IBjPgiT0am}<iz4@
zaXwxSpMrt})MR?khI2a`)R3qze_R_Aj9HN{nLM{I0*=uH8rg?8IA8|*gBRIf@xdpQ
zo_aiFn|&ioPFOev+kpqXrb8$^|08!K65&wmmiy?ev+)ocX?<_mNaVwo5+C`)%B0x&
z2-kVXypb@)kksXc_uw_Cv0y&SPO$YACLvNK4(Sz$a4VI>MTb3$#f&mg!Ij>=@f+az
zN!=#SKwl~)braW?8pT0MY@G@W2K0R2hxNCh4^Pnx8qtjz#Mg@biVpJRM5=Sk4?08F
zq8%U2jW?d?0_yBN$igPv!kf_)v`^EaY<et}@idhgcjW3=Is7CZ<u;ec{?%~|5agZo
z*a@XCvtHWYHE<%r`9$d6T!nG-_@HrDwiThOs$;9bmuJY%isY=~Jq<K0`TP1?^i{Ax
z*vOw2c6S|S!T!5cCwUN#AeS0{igwFadY_o-Gf_RvnHsSISo_h04wsnJ=H4Bjq$Ugd
zMj?1~#ryM*hN^hiOaz3c`f=}<fbfInWq}EAL>Tq(?(7iy&QrH0;PGK`iz7#y3WdF#
z!0l*yaLH*d*1A!QZkEV*#?1gwH1!{oVnE7N_@~M>RdofkwCkxL0SrE2!L`g%i!@9o
z5u(Yx#VGLo(eL)B!BA$_jjTXP%uGeVO}c(6DD*^z_hBu4SBc7akEoyE8Zn0}Y!q0b
zZk?dn!N{2Rf!}ba@r1PN_H5?wlxhakX!}-WzLf{$6k$a`kLJ-Wt!H>(ylqiro~r@r
zApd)famz>e#(Vc`cR3juNAsjw*x1Ibpu@!HaX*&@O=K292Z0<erRlAYmm<ga(L5V|
z9mu9`bcI$5#NGYBZLJ)`niBk9tL)?Q%J5y9ClvyCRO3GG_U2D89O`VHJMewe(ewWC
z;Y948e?*NBwy$?Jw&va>o$f~MEX$(grQ%42T~JrMnT_9_=dC4*z8Ccb9tjU!Zz`X5
z)olnku2_yNweGAf*KW<N9^ypf6hh?xo3F;Yz7<bdouc4lWel3vj&EeaSEg7xwAisJ
z*wY?j!b{!~Gbj0P5}uiI8pYR2U16i*Vlr>J=Q@7)Tp}p5T2v_*ht-dqayA=?S;uvM
zFQOr@$SY*E1$${cpn6jLVWN*;N$N+x7GEYc8ET&1_u#O2^6hQ$nGm6>cZsO`kv8-n
zGORdc*8TRqST=sMEA1H5Quf_p9@4yWH>=6siZqXl?+I|YtcqSSZUEz`_&het!7O+p
z>6qH!2T=)zlZE%VHdi0vQL12)VZ4<AXID53Cnx)+kEJQ;`@vzAZ9U6nq=^&Oowc7A
zV4i1{Hw}Ss40H8yitS!A(#9V^(%P;W4Gsos<A=lb^|fdzYiaRh*0a{FFiJe>1l=IM
zde4n)Yr(7cCJTPdO?k>@`|XdccSSvo;FSQr(xbnS?y=arrvmR{s__i`OhMOyFtx3?
zdQfr%rb1epRT^JPqc6lQW5*`7_)G!n=oJRE)%Yu%wMl?xh$SkM|A#YIpQYEMBFFs@
z<6fF6M<L!?c4hx2Cq<zAt6G0$gu%fmppK=*{i%rHlrv~q(v$W-n7S&+K2IxJQ$&PW
zt9DEz<m;c7$_T0#-raM=2NFf(%}ny2@zlH*?G1J5U#M3<6ZSP<U(AqZq8x)FVsie2
zY3{tR{>s1s!pZrX@v$=S8NppWZU5k1^iGuboffXmG9{}s<6B~4bA6m$nHh#w2mK5^
zO!Uq+89MixUU;*@nB5UiAl&&#Fm7hH%jOfT7bw<KC>@5=4e8G2&g3`pvF?Pu1gSId
z`OKDV>Zn<v2zaJl-&uWfAw6cE|A&gHKza8@m?}!J?-(<wY%N$z{3CJ;A#cv^wos$M
zekDb6E{n&#>l)RH74>FzGLP03DzVF?R?`#Dh+3K)ik))~cd2jw9E8ahVxx-W7sdBs
zk6(;O@L8^W-bYthDbwpd!P{iq7Q^8mxJhPc`^=-CeOKwul3?d7WH9mW7slbu&t0F@
zy+W<UZ=;s?WevQMy|V@p)}4&1;xhKnJp!&U|J4ZM?|t=arX=3I;C0BkyQ7FP*>~x6
z>CX^N*?>t#@liknyF0MRmrS;x6V)g9m>PFn6$d!Czr!j*di<JG;=M$`Dwf)Whi<D|
z$Tq*lR%4x_>qfpM-e4RU7u9c*0haKZ+7K%huFRj&y+^GWC+@!dkH`ZXy%~ORC-Lwa
z_Sn-bn=R~dr+S1*ik^VZ4*l36+GTxhl+&!Pb)+dVgIV=udUTvRsHp+VCgZ&DV!f`B
z-q<F=%4BQ)ZG!1}d%LiVV!j72>74UER#FCzXT|00BIJdH^A>UKVmo&&`>;(wIxEMI
zm#qPeWTSE@rn>jhstF#(jHAHf+H{h*tWD+O!4t6k58dN)n7O*teX1vuBCknRU(|iM
zwkiiz?KC{rQ(j<Z<mYNB;pAj+L5@;>U>5m+*Rt)iZb$a+Fc-e}sj}|}*7bT?)zz$!
z+s;YPtHI5$u=bU5R^S1S=eY~zs$Y=Z)Vv?e_Kl|KDWl}51-+5485za#jY~LtCv$}#
zT+Ugp9-&lm-_G5Y_&@fr&>M6n_4J`jvpk@H>N=}4!#j5}QI}S5k(F+NF&TKGU?MQ!
z8m4BzsVwq6L?}!q^1l5K+~C5VTlO6}K5jyLR|fd`pVLlM!H31(v?3>FcjvX|A+u+D
z=N+cJvGfp?W4U*kl7z3%cEwC{p6mZnKovFqO-WY={Uc)W32Vgp{_l^i@m1u5#)i3p
zwg9;U6HnI?RZ}^y+cx~KbX_y*E+|7HZhvoPwQAdv#3Upn%KOD)b|TGK*9POVA|VrH
ziVxI>k9MHun{f$695w~?Gz_mCw%_ZkkyFaqo^dk1^x1Pj_ChinztXd_7Ca@xf)@ka
zyV^#ugwhKzIN`Z5(&I`XM(!okVSnU_x(@3ovmgk#eI?|Qma>W(w78p(BxGDX4-#^t
z&y@4xAvHUsNqC}T)rzZ5SGi~?Qy5PYGc}Zws8W^Q^f}))%zUa+7Cf!2u?LqobnY=W
ziYwdrsdD|$14cs`QWd?(lC`EX)n~%4(R<|y)9UjQe;v^sR#gaMxpd4bTNHfDD!}2i
zf*{8Pw;#x66AFv))LGeResD|KN*@-SY8`;eeZWSY;~cZl_p7?#=M!2oCm;3|3ygK=
z`XBJn=ARj-NYF!CaoIZuXk%nIv80?`EYH9y3Yh2dI-Nd!mEg4U?s<XR`i@_rIYos=
zLX&;Ep4wxZ&k%Rh+hTN7!Bm28>FmK$&tvRL(EjwovMXgXAAS1H;e8S^J~>wyt^D{`
z_RBUJSr$Bpc^j353C5aukn~UOwTZ|Q>5UwlQt>s|lLI`noW|QoIqbdIT`-#?t%BIJ
zgcqUpL`u%Z)%>&3;qMYd`m8!*LZ#N2S@OEtYFA8^lE3<sW|cFw#ylAL<UR1i)?>6_
z>N=agK#|(!GleqU3ZK5Ma+sVL-~cr&@7Pt8q1fV(GUK75_v~PVNB-jub1eC$G$$fe
zQS~0)KP&nhmh(ooX4X^n0n6dcw~DwUFV0~SG7jy(f{&iXqfUo?GkD~v8=h7)>T!9)
zds#3Eu`=-0Wl#0z>DHwAR%RYGA4aOG5|wOpn&7Ij&F(;W%%_j2XJeW?G(B!qZ-4hq
zhVWMlZ3nAo6#U*&MD9d~G(dE&p=x*q`Ftco20S6>76JvFi>DVjs|RD>!85H6zNJ|j
zj6au=-VB&HT7!;TIk8g_@W0WRcCx@eL;CVf47Hs9^NOwc6Dli!)qyb*QDXFF^Jn(i
z4pfCw8zs8#2D7$0(ox|t?J<zV+@_~m*9`Jd@mw}uB%8c&9`S_MT3uJX+qM!~uLMF-
zqg7H>Z)HSZKw2!<%yHDHc;_-XyYZQtyG}Ced;DoSW?O@x`i*bs#sEURbr8qilP_YF
zwO#pAF|ng3%Bk(Ye0L#+mQ6{3T7Kv!-=lIjYQ4udnAm86g?hP#!2;E3_=di(3%irm
zYHvE0#9AtT8mn|K4O88#T{BeD2&;^oq7$u*t5@ZG!F=r$v}fo==Mf*$aC%()O%7H4
zw?AF)MCc!pGO*%Yvkmf;oR1<^wfLYx)p4C=L-(6gAS2DH%zEwprxC{NO=+X-=Z>^e
zyGA`kg!YqNsJ^?;QRg%>J^zI=d+ScEGT@M_W%VBsy%ARaAJJZXTGJ(lcV+H8=lFxv
z?v>xwrMxM74=UA$-IQOQpRyF_$>v%ez_{^`$a{73(q;}$@%y*u@!qV>=>G=fO0O*;
z!RwLB4NJY3C?|jLEPGa$QK;95kFsVgx}bBjkfOblfkQ_&8em!dLEJN4D<3I_T0fgs
z?g6yeFOsx+s5n#BKKjzo&9aXbjD+7ko|rZ`EUK`l%#l>@4t-Tep_iw+qQ$bi&@a<F
zU>gI+9ToS<d}P6IzRto9^;}!-KHh`&MD3)-Vrwb8T#CoGZPOgdCU;c2f94#Ct%s+r
z1;$$0>UiN-uYJor1zxAm^tC~$zR22A_=&6<-tXaAL^2(PXpIFIRV8@?><@*hFL$)E
zs}^V27wb3GyqcXca@vb8I5TuWtS@`P4mpjj2DtUIQr9?`SP=qnxV}vCiC38cXG<D&
zTnd>q9~wmfZCvm>O&QkUu`jC+4{lzI;Ij0|cPx&-`qnCP&v#(?a^TI(+ama{f)eqv
zHC8&tmDQx+5fAAOL?CyC!Tn!4zOiVI_5sw$(JJf)(sgmE&%WtID4Cjer0~oWtes8o
z#DPkWm)B=26V|(v8oF*&Jzx!IwV7(3MU6agNUf4$z!s`N4m52Al4<T1aO*EBFd#@#
zdJ#mv&&Dxh5}J168?ybdj=+Zlo3X=E5?!0h%&5l^+ygB9T2(Po@~Hl`KqkmDKLWr~
z^m)2oHSS*czPv<n^BNBLL+xPJB3zlFiODxRSON=@>rec(|GP8&-uHF$))LC&;(W1L
z*7fJKp8^;SKH|js=TqqVIzO@E2C_ZCZkRq+$M{r2nUXv?*2)?1%*-@a%+=t|ojc#e
zcB+~(4EFoP`h^dYCq&jBY4OJWkJjI5wRHy;^p%S!;9D=xUi%*m4WME&ZWn455Ulee
zGQV`sjaJ%0xz9s<6~>(CY0ADAV51c#`Iq+{xFY?IV8STNJf@70k{0KnIF`T`&J2j4
zEnv66$P6h;+S6YN#bp6M_DynT*~jLKdxaZ-Zb;F-6x)pH^T`3_J};&|{p0?4Pf>n6
z$TZ{F(dAu6Eipx%fMkJ?aG~4@p{x4@-Q5fJh;!Q8W5)QhB%~Qp`4x+LP|%AuuCNJv
z;iJ8rOkZctpksznzh^l93fMm|&Mx)wS<nJTuN4*_NUDu*7;ws%fgSc|yD=^Hn+q%s
z$c1h+4dr2<qAm~ZC8jD-xKPr}iEi^^+}3dc&pdy_>2x9&9Qx`lp(15JwIU&t<_>$r
zSBctc#;-le_HkEk+s$^1ud-8mX}jX8wP9a-WInB*bZj?+Wc1>#veD~*<<9I6GJlsa
z7Pv|~51lm~WgJ%(6B5;Z6l1#dK6xtQ8Gj(kDPPp$>8zM&@77KT0i6NyI)*taaUKT!
z3TvrclJ<mi!}mHmhj=ES+IV1kvXwXi#~=Y89jVFAmyIVA-+7%?Q6nZtoYZP!m&#L7
za|eJv!|qYd=h}xl$J;SKioEBlDV!+%M*^JGeLPc}Z>#gtWA*r?sw$%nCu?`lPuUs+
zFSKqC{q}yx4ZGAXCf+|EAHOnbk^W_Ek(2xN$KSe-kv(l6nEr?~W-zmZR=nR5-yTkg
zGoWVuwt6LjO$xb$Qx=Z?%3_*3ZQTDl)4uWnwR_&7Us-7O&B`ZQ9ogKt+88N%3w8Iy
z<HL}aH-C$Mju(Xl{(ie~T+>w)xV1H}5W>ep#}$PTI+lU>C6BU(Zk$h`U+3AMkAYOz
z+ARssresmw8l_A-3@rHhb$8BGi+7I}hP}o7wRbug)0?c1v9TLj`fp`-I-r96Zx&wp
zPL`AK4qbdwx6*lC1Gd-B+ELBWj^g{3_A~-&&<{j)y$j?;|0B{UIuZ=nfdc$OPgi~#
zC`>sn_JI~E_GmRd2q>&ui-WySuw2}jY1+d5ai#seiMa9jggJYD&(`I4plss8`-m7U
z%0La=Jer<zW|EvJ{y{Jz>7W?N(XM0GYE!NPKy6si94R!YKc9L2Q*Hc#`<RY~S3ej3
zuj7t8=1fc%hb(Mj&wp_(<yR~lm-C3*vpC&8<!PXuY`o1YC9!{QRJ_rvqBb(6%7P&A
zS*a{A7<IZ8M_G>$;yJ8m+dJ5SJ+6fV?H($|1sFtQqzUf>HKEFafP$|+Noz3c2b1xh
z^_5D+H5x;Ky<h*j)iqa6;lkVl&kSu-I3U$7z}o(d_tfPV3>tx_2OB?X6$*r?_67)7
zxcQ1gs(w)EhlE?W=+M(kAFODTh(r?AHVcT`!<x5SAbK-XI^JTL!vkt1b4bs@GQ)Ju
zz%sCu!{c{0c|X|)!d7V%Z4P)zn{EB@WJi%&F7Ghi%!P?_mY(9d=!9G7ZAHWp1Oep^
z-QZsc<k^pZiKBFU&GZfZqgD#>L9l`L<K_vm2?8NFfi5j`WPa050#hTxX&)De92R$s
zdP?`IjVxFs(?)Kq=y>jJSum6I%jsDA9_7a7zwc`c3WVvrs0$s0fDuB%4qf_*kd<kk
zVn7+ve?{Y(Q3)qQC>w-8&E~*9=Q@9n6|J0JJhr?NO7J9`)eIJJbM8-Pg6xi!Ftaxw
z`f3!=L@1HKQ~J-F4zXgFi2tMMyu;ai-@mVm)~wpZRx@a9iq@_zB=+87CPr<oO^jNx
zcM-AornO?#9<3-PXi<u)+I@V!zvKD)K8}05&T*aZ>$tD;T=dO(7@B9j=JXR>6d@>{
zSb{dzEMR}1qw?PlP{W|@SD!r?Z#kH~tW&r@e$sOGw}`*9Cm2k~_QS)M_ZfVOy5}@C
zvS_gH6L0+$FQ-&WVr!q~4C9m=iN)42y2QctUCy-IGp)lR4uf?$;tVrhv$lT(V#_7>
z#=uMd@-k4Sr$IIuTj7V4)UJ;QLD_|Jg2$Ccl>XmixlDzIJ0UQ_q(SB3iy`m}?FJj)
z-z8P)e)~1}D*=JGD8mTOQdaIn<sq#E_!72KzuJ3~Gj*>w1zPQvXFvOTHvY>NJ+a5x
zN$VdXZf^Ht&%>g2HCexo*Ry5L-sBeK75$N_XL<QPg=0mdNfu44+o;e74k{sSyHB^#
z%pDh5#Q~CShn1$(TV<aQ7mA*>UiLy%KaK3$4rP?;xS+}<1vhT<Juc*IT$Cur0tTl4
z{KJ)n=FS*N!ntXDHhjY>z3G@Y{Bwfw@-=Vr>r2Sce(1K~ub;>N2=KQ>(SMs-9(sz3
z?l<D2-J$v*TJar+E7!?n;me#Cvp17VTdSFs*tYK$FXaDBO*IGq7LbvXh#2qh>R|N%
z9oTK`%%TTkk0Z}rTT~&<_Gy%Oh3SnuHx5qy!~*KC-PbWOxEGbl0@7?gi?M@4$Q=o~
zF^u3u1oM;OJqY{Ae%55RXwd%mm-Xq&vp-+>8tS&Lkv2zuj?MqU!@VlA#W*b>h1p%6
zXQsQb?X17=BgbE&b@N_ohi6Kocs+Fcndz$#PioaXw>G3gXfH%%P|T#~TZ>-gGii+~
z(M=bya-zirwg$Y^f}DD2Yo_cX&d-^c!Yw%);;K0DI8!L31pVX19I3m2aAGI;e!DH`
zX~Q8###+^ec4tqSLogoImO%+}8)xr<`o8;+P=0Q?OM6@jRONKHs1aAwnc5p(YPrbK
zFA?A@m2oG^jDm11N#e@x<!Nc9h#&62SO<X&%7gwh6pb6NwXC)sgZT}rUQKC!+Q10Y
zhO90LFk+YIDgF_--93)~(CMO3Yfs;*cn=CI^*bI191Z)7WPUot)FhN}XX<0<_y)&c
z9p067j;|v%S#aWA(kNBlsH$=WlMt;4R1<Q!1@kA4S|L<r)PK)n__IZ5kvtX~@t#zq
zh^6><R*SJ&S*^EVY~P-y0VWYsyQX>%7sU67^7Rs!l&EA>b7n|@VHF4)&-bX+=<*oq
z4)1*$rTyM-!?W>c4a&?fvwrx8(x~W&xHCc?>CkVykEd!uPJ1(PjJ{tm7~q`<(3IJY
zynqlX9IZ6ph^t_+#!Hnf%_?JO8$ZU~i;@bc!JM?X{aLiJRQ?1)jhQ@mrAUSl%+4aF
zihY}IvK5ezeqTXB^63gqtaQLWHqf>_ukz9UE<=>H?{X1;Ho=#NWNVBZ3=VO_9+Ex3
zwv6bg>DodvJhv2hK0CZ;ewfVoC`lK{u*k#vwns%d59;fta^H-9_f8xWD{;wIX0ymk
z9)k~=8u1JwpIb+}PcRa^PDnKSgNxN8m2g$0WH&A5VdU=&-@<<0YV4iBPHf~ncw?D9
zJ2sJ#yH@Hlj{C`l_HBitWg=X88c!yn<u21JpH9is76<a9APMFdOJe6T6)S4T0^$0~
z6vXN9R7&^v3x>Xy`hPle&%n@xpx0kLOnv^Kr^&AD%vNU<8v4BHR5kze7RPE5yYkbd
zbi+KgRH>^TUi3eL0j$)!;0uT=!G=BF)AxISQF{gZvS(nT8rNSPWohG`Kupd<x|wM!
zem)VqxTK`$Jy`5L6c0oD>OX>hXGst9I5Cyz43&^_Q-$eRbWu$~=N99<xp_mud~FBl
zke{Hls+v$f-P}!h1)HkMM|-}bkG3DT#ewQFAP>0AA|G4T{Gv9Di01h8C48A0%vPXZ
zTcxMPS-=m=!PYpUrCL>aULEy70S%2@XFELkgkkI9mXN)+C`y^5=H0ViC~45z^5$t6
zLM!M};_&bP{WIB10UqQcQO)?&2Jpr{0h9eY_o)*Q=D94~2`j%Y<h!;ww*N;U?9mw-
zvR7E>d?=SvlFu#YQ+x0fH%=w%w%@_(>r5xKG9JI@VG+X1i+{)<T#(!!QN4aLk_Bk-
za9LNTlNG)fcG|~ZTIVVYKd|E*dnHX-7iU=Njpcr1G%SA{+Z6Ly)t7<mTu(O7pTUx*
z``nX8`IMIM`icB5dS`i@4%FfQG|j0@Bf%l^CEq^+q}6lZBFhCWEVAb094gj<|FHGG
zDa7ZnNR1?#cf;)l;@}0}N+8P?3VmSOK<yN}-}@`-al=R#eAVC#{OH@a`(Mpkas8M&
zAlIGbZJxTa$6W!|TgfbD7Cu>rhZs<%$Lf-1Q168;|Ecx^$G^*H*BDa&$!c>CwWtRo
zgp||G{|KI7SUrW-fFxhD)6O6&2_hpl`QlfYQp5lNJS3+b0!!+UYbWRPlNCEGzOs{r
zKYhGXSdgxW-9boe?T8wn2NJZ8WnA#H)hZ%`NEu&YQ<`xCI+|WXlX>21Wo~YR@9;Bl
zrp~IdI+f!ipSk{U=?#rX5+Q3D=1SO(xQmz+>rJ%@Oyssh>=Vo{CT5LCQb(X$ejUd}
z{-r4C73%J@Ga5sR`g*pXTp<evMs$RZ+HuNzvsnx%3b#8WsJU(!uEyNZzgE@Ob}vN!
zDZ>xrt>kC1kp;<P;d$%{;KAk>84&fsTnW@@TM7hNm#`tT^SoH^M>!a{>6@vWL7s?2
zzI&n}(z+C+CuEFx*qTjMJwrWyzfDl6&bYULMrA98)a}et*d-_2{#13gYYo<;I5dEg
zbuzQ`fN~;0{^iTUN4)t=bPq|snxrbNL&OGnZU2fN2SV<l2>IS6EpY^=qMhb0vhws#
z54&Bc*|P28c%wIOEO^EI`f}`>M-@W4$q+QH`3$oW4Av_7GMShJxjwY4Nj|M_3$^>B
z*t&e|y7IynF2+o~l4mU33B^q-zVvl#U7e18;)S6wr{b$~R5>@dG=o#DW*XD2HRI*6
zRMbx3+(P~bsiEyQ3xyrTC9<Rhj~%fIz8ob*c;7Tzu*?Z25gGnQ@YA28*gbuWtPv+@
zV=rv%jkH~W*y5>f6i630a8jBuC{IJg1Jnk&3zm9vVCpBGC@Ces9+pg~$9X&-3nOMG
z5~5@0{w?vR<pE+KR;AV<;ZJ<NLLRfUi?2`qNeMTD%{Y^&b!Nb74UACN(M_P|w3rg!
zlz`JrURN+bdy^1`3MMa8`9Wy>Qq<Q`Jvj<u?*DydnA^>DZ?@#a)>|Zpykl>R>CotY
z0$khn!hN=6B(LGQZLB8OS%43Ey244T+$Z}*l!6z2oSxP~?lz?Ao$hk^>{@Msy%0g(
zLi}ki`60Zs?EN5y^hG>Tl<scZ$$FEEP--xm2dI_A-Eg&*p)pSfe1!#Cs>X20*`s~D
z5d+-)b;(EkRkHFZ4jJ?)cL5DGVw~<P>GR1|Qm_FFp>b9mUr!wi4gW`guv;QBZmCQ~
zegFNvl-oc)-cx9dp`Y-t>Y0jDxxEvD)9lMRSd#_tVF=)(8b%C3j064XpT3ni=0|TP
z95Jb0wmi`5_pr#;bXf<RAAcKBm&|UfK?_OS`~eLL@^A!RKuiEjL^_tDnO3^QMaTQg
zlc>KTC#s)*X1x>qdPN*jphJt7^JVQX`umTdr73Cc03P$l57^7_r|!kx^XLAKa^U?B
zmb=wyti+qRV?6)B0U0ZaQU0g@x;bpUXt~b#M__32tE=t*>a3>k=UY#9%U;9#`z^PH
z1q}wuzz@H)-5Lcf=xJQi8Mgmzo7ldJP7EFE@JzR=uM8r~x@(st855T0qHWx8KYGR;
ze~3ZGH4Yj#i)s8=YrFS8<p-GXpgPmHHFrTxX9ZsX^4Imu-;EUc;xMOv4vsdfZtbFh
zoacf3C-_4AiUd-l^E!PO(L1=&ix@fthlgpp%IMhg{<?F~L<Qem-8w{6Y9Ezqa>ndT
znQFxiYc$pc3BJd<U=%jDY&_cvhu?aeBV%`Hm&RiEgy*7~d+mMEFikFtFlJW;zpW{1
zAlu3dVhD7^y}XZ@9Ra6PMuoCat0|t1ysvxJ0i~jQ>iMXN1;YG1An52H0gNYPC&GK|
zsmJ>nhRqTOC(k*E4`&=PRxp?Y-OuiM7pIo^_;88bx<rJIH-+>)h}9@eqm+-E6SOFs
zHH(JRzw#CACM=*Kb2B?KPGpOzaiJjDyl4BcNYVzeX|cHM37J*Sa!NivUyZAcEF$4Q
z$tQwEmy9(o{|s166k1i2HDZ38Y2nN{s@?J2chRS)JH^hT#6txlfgqQ3NG5sk(k$<N
zn^ix5RP@V8Q}x5M>6?aB#m11{<%L10jjG`6krq=L>Q4MveE`;^T)^9WMA=X9^;j+Y
zx9&K1uG|zY1%!Q^;Tl6uyV#f~tp{t2>HSUon*!i3Evg*NXPJdD5k~j+oASmqcS8F5
z%ie5Mmp*FhUGVaF-S(TsXV9o41;?bBaRZsGibI*yXPe+o*49lwdWD<~Yxtk(e+W=N
z8(wYxXp&(5Q57N_7~yRW8h-8Z%MM1+1{%uRW6^R^0V<Cu6}#h&#v%b0D9%^x=hG%&
z!jF^?2Xl~l2US{ijwe`UQ%eAQ9{fvLXt`&?#^F_LK^FwW;NXjzZTSAz;Qsc@qpapu
zmk9e!e9}s$PQ55p1#EL1*FjC4*{<5CcKICg)Z0N?oyUqiMafi&8fi9%*E2}~ZH|Vu
z7m@a(+BAn~o&`9?#gCzW|ITT#l@3azoEEIhxZf?A_G%@mC4GMUB!$27Xc4`=Drh^(
zzN3nKBsvUqm2ZZTWK!;GzMvo$XMAeGeZyk4ZUBvgr*ue!5RWD7gv|#`y9H%4*j5TD
z&%<7hj@pk~^y#ic_2+8312bq0gZyzmS<B?jL#lRk&n)a^rnS8D4u@Y0{W58&1R(r|
zkCxWmc^gHz%4%p=#ZO8`Qhq*&H4bOSh=(__7b)v$@c@sEQbcPoP_4-Pv;FUS>V^+8
z$3h{7qj{=k{Md@IcmNWFnB4<E&g_V*;F_y#HYP=q`YdijDKiC>Z$k+!p?o^=zHx8I
z#F-29sts2|*#&coU)`Lo%I!4$DuKxn?o#Pp4Pzw9-5+MBiO^Omd&!_`=HU}h@%qx#
zKXhBD<22L>@xSxMs}x{v`qsn`z01C}+U@1$&30Oum9XE>j$d?aUbp=`+ZZnl!)W>K
zReWFVIG;==6mbL@3pH8BJlVg+b7XB3F&rT~5j%8LUM@_UGBU)Ks^*80v3E+M$0rF}
zX?iMfiuD5j5rBqz9(Nf|0aAQ&16-9bS>IEozSXaiG(e0Gw&;)C%c#h(9Rrj@3n{X#
zMJwK2Lqtp1BTQCEwdnJRcVF^PW@A4VeBLR3bZ(d+B>k4YPLX#~7|^(%%#3hnBvqjy
zwdAtRY$?PWY55M2PBeh$QG#`E|Ld9}|Fd4n_K%MpDgFdA@rAWX8?-PW32>ruXq4lt
zywYK)_|ba}+hv&0($Y(PWx~J1fsYQ`a#OzgrR@OP-xda%xIZq8vY-HpJ_B{vrp)sS
z$#qW<A(>{x4zZl<8_|OQ2!`V;M0r?5*`Q9;LmN7R5FgOQ0Kng)l9ARjU1KKw$MD{K
z3#sKArwF0NL7@y~$Wnr#xJi#Q=ey9%_jiXLA8*4q1lRf_=r=DDtktP^haf(KQ-C8<
zi|ngiu83c58<QKZtizSaq%mPLm-6O0K2;s5qkbDll1>#;`U8hsbY45B0;;q;-he}Z
zuR^L=um;($UL9Wf-WQ3Gek`DDQy8nwn*~pcqu=4BElSCvjIXrih^8gfG2X=AOYulO
zUwCr$>LWYH)Dgy4YV6LClbP8DwMxRu(~pm={Tj}uUw#rZVThx;f>o7EeV?Kk@(3+%
z_Mdrx6}x`&YZ2YyjUNC!ZhqIOH-H74-IvI{5=W=Q2RO7E9GVqfc1#}*01+f(xnYcy
z4f}tkC}<^NB~qKZ4K0O7B{}v0Qb+eAbhu6C6ZlEY75@*5Zc&jBUWqtk@j(5VJVZYI
z*FaQx9G3kwq3bJmj*xM;9RSLc7P67Uo@AU#mj0%&HN%H(<N$xKQotFld=bErRTQtj
zP*t)O?T@3JcE5tbh#fvqrUsD9?EGC=(1OQ;199V~E(>rhk1W6|Hx;W~iFvd#0@_$!
z4+@Fz<V;2kB(=WUnbvTl10wLCyS*|4+K^|HMxxxpUG999HF23DAmB;jk9w+SY|!cW
zM_6Ez&NHEu_ZJI>Ve7W^Wf$@+Vls_Rlq52^BjVW4_}mnfF}n!)0xf}KVVS)nm+ldU
z-@c+H?1+4U6woj(^yMeYL{hBckAb9+5FxMWt^ciaoK7UfaRB?IVc-cY=$7I#)nSoz
zHY(Z}Hy23XEgB@%ZJZGbeNjWqcFAP&kAP8}V`K9*sg}FlQ5o#z#z(1;-d$vZT^`Z>
zB~PO=QuBnOCc2C>LsO!6!<^EdJ~={$q#Xqdv71dajPLB8T?^I_EF<GmvQy~mOo5T>
zX^~m)$J7^zbIAR-gW$|WKj(~y0En%Gja>x5Y(RhE;Y`%7T86e|3BEuNAKtG;*LF68
z&bC__Cxvf((d%jcuRZ%?sXa&C&T<Ss+I%7fWc7k|xQs1CwhV#gmOYupAftoq%KE8}
zOKOd`ZDQ?4drD*=fE7f@<TJt8S!eDCN2l+(r;aM2dEWmB_$OPh(Bb%8X(>=cU^JKG
zH-O1sozk{7a5bRelloBbFviv{2_Y-VQ=?Iwmgn_M2|?@316V(86+d6inIv_zBL_A)
z2g~vc5gKo+lQy&+Vd}yzjYy|(H(PL}LPraU$?ksyb^d$b{!p=nRMUnHx3?va;uJ@Z
zJ|EUSPaC`0;W_PV3<!G>ICaCa+OqWfzY%4u&lBWlV&{f?$i?Sc5?+H+)g@)-wOuzf
zY2zeHfS<*N+#zyaSYRA9u?AM&;9c3IERXvo@~B-nIiHfWhC);A=nsYt7{FJ)oz?@M
zd*^r5nxr2{O>gaP8!D!<za?$Uy}h^?J}T>UbU2HlM77_fbdhzBp}R|;kbOx!aRx?5
z^{$Gk>8vWD1nLASL`tF=@FT2SUHGjUy@>|I8$0-((c`?Sa?1Toi{|qC6_n}NS4&4#
zu|0X$p9fbNje!G#`>^&X9){quFyi*8RHxWmeJ>~YGQcEa(zcdc#;;MnHj`O4gdbv%
zgp?uO3BeS{5<HtM@T++c;pTZj-Bza9`VbZzMl5Op;*qrkBPLgUW(g>oZBGLin}P6+
zTj$YmMy%tw={?+wYY3SLvufhmzagdojZbrR)r%Pc+aB(j8tim=$Yr`=41b*~rOcp*
zS&(lP4asJgXIw`OME2qM!)Xt_m*IBHy2I$G5#5XyjLd|stqjo9l~IMV;yg?}<ForV
zn5ixO^+REsSh47u_(r?p8&*aUrFin+kD*L}hTDbbxGLnTrJP2M#d0PQTSMt}plXc6
zad$!W5mE`|f~5z(CEU`FdPYx*%oE`BTh(fB{HKkcJ=l5DcdK2zvGUu%wvk(dehi8z
z{tki|$Ogz$OlCz%g*@x6pUhk?TB*NF?WFr0`Y}j4`8CO;qKn+?O6x2~TD8%gbt6iI
z>Q&p!7nwOS8vv=Q5H_hm%;F{9$DlgHK$En6D`6;A8)MuUBXUp65Ub1IjvN{P`mT1)
z)qoJO^|k{D+A^RH&?-AMb2TCy;DgIk&P^?r3;zKmxwf9=<}3^@A|8ehj%pd|eXw~u
zj)z%)AA6;%-BK0r?~pu?WysR@xTU1=&gd3XW=HhQVniXAo0Wg~DXbE0lfcyX@He_r
zs_5*8i!#fi|FstAHpqa#wrT{_$LRz}J^W{g@|#c3_Elu(b~cW+95~m>6eh+rwMXO2
zTO}r}eD_&s9!g7O25IbXy+kB@F{|lDH{|t%`#R|oOK>Lh*t^s9l~LD&HW}9_^MzY9
z=1ZkM`rl%L5YcS<3c|!n=<oV2xr<dMk}I#FF2Wdrl{g|<IDH4>YLjWK9qC~7vEE`Y
zSA%mJ>`~gatTqT?y;G(-^f#!H#^<<1h~;No2bXxxG-BaVv#`-*77?G+a8z2Dm8sa+
z%N$Mij(gy+@CM4V&7v&!6i1@(;7Y*eE8WaQ7q}56UMBF&g(h9=-G>*tPmSG+5hWec
zO14&tX5vsUC0XmWUw<kU^7Jj76yM-cBIHZ<OTW<VwZ_GRwkERHmC@4DDHUy4So?b(
zAcH?zwHdv|Vd|5G1{*tBrt~}*O<EM_Oznjd$(C|EI<#dF^<3BXY5oO!7dkq=z}@P%
zRhct6m%(wqFU^)W8KZ66diHy^OLd~i(VOjn(796+Nv+GJLh`SESC@+~bY^}JyD_TV
z>>g}{bYNvwH^cWeM2ALH-5nZ~*$aIO$#`S-LBqyRk>}8GLXf?-tWJww*Xx6gcav(g
zp}Qo{aA9qDWhd;g!5NfU8ldFjF!!pYY(-J*QiXDk#3}I~fxgPG8p?P1X0A6ZzS{Z$
z2zsvAqeTp$oUlRKHRN_dL&=6OrUqsh=(Z)vCT39K1EZ6q2_#ysi800>CdS^k9%EuC
zquU@6vzOEJnNP6#M0SCt<-qSr29hMR@7<gP?q9(o?PWw~1b3lI-tyVoYwLJrbKhn)
z{C6mypWW`=liag22z_VpFBz!)(FT)0ZFqF<yVC|Nb(H(zY*F{yH0`8L=%CQtI1u6a
zC}0`(&?%i!f$tC#6|4kr+&^0kA4euhlkSn&!N|t!xJCBbCNVO8XV+SUgDHU#0NatM
zM5kd4=yeKl?_#h-k%t~-=Rbnv$;vCWq^d>z<pnh@k--C7En>~`#K%H!+)Mj1cB9@~
z{c#rDE#3s^dOH*{OZ+a1Jl+H$II*TB-!6|9dHh3XAQ9M<F+mre%D+(R!DzQO&hIZ1
z2HKFW0`9Rg(+#g!4EWO|4@(82<&PO4Y$w6a^-e%_lGTB^zy}$>9KYkfE3<ij2siul
zLr<Mqj_MbGQkFe}ZKdx^Ip^J-id!&LOtr$=OLb8X;;;{QkNaMhv_4a5o^GbYL`Cc4
zllX|u!ZeUPhGrvXcD3osfX2U)iHqp&-xvNnRO!LQ?bgG_kt;K>s5s=x0LO*m=fy|{
z<I#l9oZuh4c3hvA{}J>Tb?a6nDC#Iw?*zs_-pT|j8ZBSALx6%S!;--szUT8dcd{gV
z6Utf+Ye?ALiHx*)xfM^3?x`eo()OrO<6W*zb(-lOUu30z=}Wu_m^bG74-Zvo4W&FN
z#Pc*BlWjNN>_CfB-=zj`a7vivo=<zMDxk=U)JDpzcAby2A=!OVFU@UiGMZU3OI!t#
z?lMXn2R`^wnJd}k)rT97V``J$RuJr*uez_THY$INM2^$XEjl+o*5OVO9>&ePOhl<H
z|2<j8wBG;w?6<UK8SK&EjyuUqFn9!xk5_8F$)HsnlS)|#Uz#m_DT451s!LSyST#Xl
zU*!hiYE<h@1~av3(b7^K4?k76^7B`(CuuqOExSR$r|Li^t240KJr@5GwvW|k^HqQi
zOJ)8`D{VA-&sEpr6VG=O$b=N>uZ$_iL}fiYM;>?nEGZJy9dzc}*a_?|JTA;Ibv4}n
z-bHRm^KY~WuRZ9%=J%tL?`o2Z!ZkND3iSgh<1N}$^*wzwoPF6NRQ%36GQl7p{#sEt
zRR=`(nl-uzPeoc&x-V{E@Bk}oJu`i{+5{1GJeHxuq&yn?C|sie39^4)Uy#X9FQjaS
zSH@0<!H~G?$&{(4qlCY=spZP|Fwjm&aerwJw)x{K1*d->^oGb}4)$A0w(cOfD{QCF
zaUl3|DfgyeEhh2*{}-vlCM29VepNNS`8kWvb=3D{N29(W$o}!*4tF21NZ*_Y*BEZ}
z?~pQ2IIXRF$khhAcO<0lO~oMwx$Gq(SIMZs^$BWj&JNIDo?v~Q$iNA7a}?Si4TUHI
zSmy7>ANa`fV}?oV(`<jAK`C0-3ydp6<QGfCPG>>1T*BvI((yJ?l$_&DJ}*+PiHsp#
z$c?EC?BzB5d846u|L_Qt-W8?`Jd|pE#l5^&cK;?-NUD$OOwZ(F8?|NK76i1P-|f4Q
z?#}BEW}<u4UOsjM)oU21>xwr4hpfs&X+_o@#Ag3us8Edkll3{+481whdMvNC8HhHX
zQ-^j#Uc+h&N<l8aM42IZRQ94~yd{Mk$T)1!_I4dg!gF`<BmNv}Ki7J?-t)OHLuK)%
zK>gl*f)^QjmjO0^2sg^UAC~~}2|EAL>*kG12^Z0s?ak*;iijb7*~Wu=p0cjclh;7W
z8Nh*|C8Y4O3%32EdOENl`~Voto0w!AA=P@6yC6e}B4;h5AS5ey$Ez4{eBPGqLRe)$
zgmB?m8@%P)1qvErMi-t>pSW4ZVo5)0ww|2nJ^i>J&CwrqfsN6)FW2KeO!Dbk229ub
z&B-P^e0#Aw3Tp2E*cRyHcjiBX8r*M4rd_7;l;cM-SF}kb)zqv*P2sOLkPBDnD4f?;
z!pNtY=GGmB1}|n7q4+BaOdQJiSOnM>vX=1-*oaL6Ixqj7F6wZIu5a>_!NwUqZg_T^
ziW5g@S6Re3bskE^eJi_xf@}KWOlQOU<Vd;hdLky0(&wHJ2tR#j07>$MMX?p*jMeSq
zoHZ9X+frYCBp`3vfr@Kg1~+?FNfv3@Mf1y)dYkF}_?{Ah<cX}S&{)ztym0h?>m<k%
za9l=p5!{f%wy3+VrxuYu&}?;Fq@Fx?EmTcxI(($(4Y-r1PbegLn1gBeLR|BK0wOH-
z@hUpXgtiB(zs4$Oc<w8L7Y%gT&_b%@#Bl;~eH!r;r0XMHo-G(;l0_TaAjI0~cn55Y
z7%*>W*}iqb2r1iECvENI#~6$kmQ+h6s(zp7sEB9I8t(4J6tJTJy3mv&t*m~*k1Uni
zROa{-#?PVaF(A*oY^CAA2oG07f`l`ppx&d{loW@qgDW&fiotql5V_i9$gRVQ;i=8R
z#;KM{t-o_1@8o0kr7<F>KYH?$*k5OXnvO-bfoU&LSQRU@YH}|@(cB476s7V`)QgRq
zNB!n0V<JkfjaDUi7dE7`Y<F+an(z|htkrc3v3u<REd)w3Hkr>>wTg*SNiy+LRbMtb
z#>{)}ERzWD<WFgobaOs>!hP)TNkez%8DeJnHtK3Wy-nr-Ile++$I3YKzL9REfZ#nE
zb3yD<MLGXPvAv~2G`C%VogX%eX6p0CoASS6$HbWStd1#ady>f;XimeY^>@;Ap<j8e
zw@z@jz*knsrTR}!&ytKkZ%H1@K(xFIzDPJ}>*S8ASbm9?-mn#s(OIKl`~>(%P(Cbc
zW=^;o2v&Ihs(s^1x04@JOW}4}Qd@g^h`xXNQ*<M-?4$zX1|Z*-u$i%}X+_&5=>QVq
zn5|xKsc7W^OV<M*pp3ofQ%sWT{q?B#w-}V1)Hx6Sw^P0%pLyV~{_E!#P23CO-#3L=
zE28qF^>NDHwxpI%GiPd7HD3i?&zG{d1755g-_}~@VN<JTSdahu<Q49G`8^2^SX`y~
z0rweT^^@8>pgkv}HcuUQedfFOa^x#r0A{q>TA>7+&I}`UNFi)0fvW6xcw;9xI0H-h
zT*lv9VrT_R1$uZ{I|fCBYI?}iRf+yo%c;7)3h6HJPu3UT(@$`y0-iWWYL;JwoECX@
z-Ak;UkSNM~<5_gR2a%sUppNtXQq*6-Jv{_5*B9R+tgBRhaor7)Fu}dVu%pgp=qNhT
z7Tt~89*?B<=*mFmjUi1kzxJT1TU@Tqj4aRfxV6ah3aMPdCgbYMj+p1`@BTjARj;;$
ziGYZJemka$gWNV>k!wpeklNcC-J{{XsQ?G#m#$LU9*F#WHlB%R7>RBOSPZT)B}r`G
zJP~}KL#@pt^?~+LmK-mTb`#k>LqaGze0P+^vX`2J!TwHlt9DxrskE_&3nfb;81ifw
zu{v=MHURY0uT{=sSQs2Ky{QB+pzm7>3Qpp>l%^b$rZSzbK?_Qvr&>)yy@ianEngpQ
zRoo_E3P1lNj?Dpg7?;jV$!Xsut3=nkgLx)Wlh=+V!16oI%k(=?BkJgFa6pI#$9i!6
z;4+UpM>vBS%8ZD!A_`m<6_*HK6yAf#Hh%gr<altS&DI^c5ui|vZ!sRX8=0V(lXI^v
zB*tXhFT39xLwo2~K35lDnjf_HXCOybq$o5z-DEaK-Sjv|MSIHHLEALN8kCJrwnDO6
z_96P3c!_vUhjeSvPJj1THMID&_oTjJjI*G$aZ0yRqUApzThmGP=Tn+cRbw~fx$(uK
z?#Ac-Ib;3qr7Dlc!+2wh+KW-5sI#Ff=Xzy4+1JSoFwJN}ZCAiKSVP216w(z?kUOsj
zZPeOv{2Naet;UXWuPdA^gG9}pH(%~UDFZ@NWd_{;5kwIp$XENemn?c<yoF`@JfY31
z16)&7E*$h_;34*obW1D!Hz$KQi&`jSNJM5rObRTXBvn`&z7*OFqeOW)3P|qlnbf>W
z(pT+Ls90ACA7#IA3>Lqkfi#6=P2e(xa%dP+@}g}0(u`M&<C5fmA|(7OO(T-HMtp7m
z{@J^ADev><SwXPb`9qItkZY7`WZTX%FI$W^)9z67BJx51q_iA~zq1}7i{0IkyeHTh
zgC#Xjame0zp!!xxNn5tZS%}yvuKK;&aFeO`U&gd%<zU#O^vBYcGePq(u73otM0Q6H
zG1Iark*9vYkBclCwjIBunpo^Yz0I?kE#yH^FDFCrkLx-G@He&J(rTkEFIjyXIICT5
z-7P}o!gt9u!=4OoAGcO>KfM*FM6I8;19PYn?l0*8S%2<b2B+`$UO{KMcEHu%hO}Jb
z;%kc$_M4Z6PT0jbWZE^`;t#^y00?OODYw|~w0&x$p6mKP-T#Ky&!5c6tY6&fwHS8e
z{P$f<OWcJCBCUM#`JQ9}1x_i~Gf7rEFC6H%E-wG7<Jzi?tfqRrfA6#0!Ht>wm;cNa
z{{fd@lxDzlI+dRCmDohv;)g;c<^o|0peZ-InPgL#U1<z_pDMEdQ}@G4bd0Bv#L()I
zk($mb^Q0Y$FF@6u#+N7=@$}<~@M%t`Ek4?#z4z(vt_*x?Cx+Ic+0uR8K+6g6rP1dJ
z|E>)l_h}qZeAFV&_&iP4gv0G*$5hK4G-((93lSwYl_Wo!kWVodLGL(b`z{n6I;U(-
z{v8;wkrf*b1e+zp$G=9Rnhm2sQ=FMZC5jd$zP|Xcitwy0iPosc{(m*S&R_6VP0O#!
zO;x@fW`CL}4Dn!|ni<kt#L$s%PSFidmMZg3?QBSu0L^M-$gmRUcIgKLfj#&3Z3^dy
zHWCW<=1cI&UTOfY?#P8jt>?(0ew}Vp808<!FUfRJ<N@QfT|wNIN0*oukaQvjN&A<x
z&GZ454~}QH-`g@WG1o$Jiu}BRLjzHO3IFzSp=Fe0vB8?xutcogVr5bmekEm`$@Vg<
z?JJmr-eGv42VY|$lgYAOD;yWtLs<~~2pjOm$WB)VlZ8*K75u}x4v_^-!1MH(Im4m|
zwPqA}6gW-M-J&B~WW(-dk5~0fQo6}gW@8`&fNiPTpBef)-yHsc%(+D*iWhWN-MVcF
zwkVci<;|}-zsB2IJ)xz2TkeeLSD)tf9b8XEY@GNC-H7Ydw%dKZh(L)jj>2LAL0P!y
z0@h&+UkrR?a9AQMf2X+Jal>z2-&28Q4G|#Kx-<d%(QcQuQNp2|zM#X<G)`J^UJ=-t
zc+zA7`Wu#WGNa{9>c1{&&r>EIhGdu`dL&FiTlEz89GS$sE7W;5i=p3E{hwDtcJmN%
zpz)77`LKNL{mndE2E#!1*&=QR#tCH8`H-{aqICYGkO1PSHFq{VTZDdihSaR)K~Tt~
z{7-IiyY&`rhL0C7$vb3Jv@I*K9ks^KM}yQd#I!;y*x|^;y1t{5Z&{mr$Pl$Ns7wX<
zW@zS^<e7oWRBlvcmwlpQIlA3GuekeDW#t0g`yzs@M9=5A(vVQfv0>=7eO0Azd(%Gx
za?herh)h+qiH)1jjdQTPuekY2P~0!7Cugzs3%8$nk=0?tg(6SXHU^03n6o66tqs@a
zYsUDF<~f<PG*_aN<Oc3hG1JWEOdlTb#YL)=^91tW28RE)gxq-#PTYa6kT7yX3=E$X
z;%w<$fWf33zag-EbeTyRjJjnxI9BhgrAo|ayA^Clybae1zhTL+_fWs)8WIe;*PiF!
ztG9;-S9^w$!qvN4e)&7MZ{rKfrTuyLb&yff3?VP!NTiGsGe7j5)V2vjrqfTb7aZFz
zBqZ=-r~Jg+t)m?d`r0f<<|=6GfIB$KtIt}(of~MmJsW{HQi)Rb?1@*?k?(&e!dQ9o
z({JNfmSTzo=6;nLuOPkw41X48++Jq+W<__)6k@KlD^2=zoQt}O%^^AfP`v7{tsMG(
ziuTo)o!OlBVTL1efhzA0)w|!?zrQ%#zUC{JVD4U-Xm3sSk@ppR26&!wFtlMsNy}Fi
zd-~hTkJyLUIol=;$3kA6xytYSLbr2sQq<Aioi{7Xra&71vpF}65z1Pzf*==Gk6R6w
z>;6Ze6kqIkLIo5Bu?V8vdobiW3}r`ZuHgT=h4y*AD7&lx>WluI`1Fs!!s|K+t4maM
z;%x#7ka2kZyEYJa_$}+atXWQA;<&r+AR+mrupu|-vbB)>tM66Uf6deLH!YXVY61Zk
z&(vf+IWjAijp=jsI7r<<hZs8E4?Sgl{pG|?w6afQF{6|dl8@!ZX+<8C{a$X)(E-<G
znXc04tzhqDb%~bGtEMEVI*zi+!8U}X)x7B(xLOFkUva2eT=N&(=S5Jts_F8hmBs-~
zw)`nQN$F1>E4Ma4<d?lgWD5C_ROy{-)i-2dC#}+nTb-FybLpt1z<b3T;T9rXtqq=|
zLK$n8m<8-;bJ~h%*Ht~Wa7gxScb{*uV19~i^*lhjm;HD)h_s&R_^#~xvm->ye_3C~
zw-O9WiG92D?GNU0&i9Lo1Kw!6k)dlNlO-5ga!dX!E)c48yA+W<9iG$R;dsJiRt?n>
z;BMsZh3cW6`{fG$;3K5XI@5+M3<!rx`U>y0fQ%2M>dEJvt75-6Bz_tX>80_CNuiJI
zY{S7AJDh08CL3J+p-Kaw3CBm=K8tU@B&eBj1>+W&fC(lqG*(ixm{xRFxzy7Wtja3G
zw+dt<C}(Hp#+=7an?w$*ag_FnH#E?WAh4h)4LHEg=jsF#`Iod_7}$`0?kuR{p`5Lj
z{kwZXaX<i{`%v+@rXr8%lZ#AGR{mmPw(RC0ZKq;opCSKmz@S31c$=U*c_Kg;o-z;x
z>Di{|0f~Ev3zBG;j^@ppMtf8;ywJV;h8gy)Tn(T`PxJ2hsGJ|cxuRq6mo?Gc{t}+~
zn&^+EQy^5!fNn^zcn8X#9UEwBUo@%qFna9ya5@D1#J*+s*2Z_0>kF9XO}<u8F_8xI
z1hOG^Ti4E@LqaaGRL>ijX!7ofaji6*o)lNz$<nM0K{u8MMCJREm<<ePr4)P{d*&(Q
zQ%+hMEtL%`Q9kJkMAimu+D;vJqFVI%R<!ClR3~q8=ZE47)OZJdY{@#67Y5&On~>5Y
zxty=~G1Y#h9J39c#PLGLYn-}dKILRdjusOps8?gbezYYYy#>>?U<Q;T<G9gCq34!a
zqA5xDcLl1oD-%ny2}UXHOm@I_6`nWT_dNYNAvMy7Xq7~+8nN-=tpnQWBXkYQiCpyk
zp112fL^KRF7e?N~=rQ+e5FV~Bd$kLV-L#m<yY;2%o9dWbOrhyeDgb%)aEvB|D#fK0
zmCes@lfHeYg#3tfw&g*jdI~ZfJodRkVod`{&e^Cu*vl;NV!=DJuI?)}bb#x?mT<Fy
zMgTnZtfRwje@7)lw4W>U<1&)}FZ~CR-C|c4*ceul4`sdTlZ~0RBlowJsZaS`sqH<w
z@sFUfO;AB(ob6#sQ(xK3u2}jvzbNO%N+u_jrr29KMwza7XV)(xIA%c_L_m+if^_Ae
ztj+P)S95<!^t2iQpb<%@twrRUMud-$ypQStC*bJNp<A1l9Q;m`vi0|DY;Nk%pCTdf
zo5V6fj|^%N|9p>IH2;%zg*!Jt3`x6WR_2~B75=%A@s~3IR(x^k=veG%zS452-P9fl
zG|Jxc|3~l@V6}WR9x&dklSbqrP`CBpR4n-*lqmO7p~ipbRB8%Xtgrv@^BfOU9P&nc
zz^DWv0*6DZR#BKL@=MPaA}!Wk8)kQzs~;&q`>3pBBD^x6$gE868Xii5LvinR28u%g
zItKAnjaTv)<(+;_<lDR}VT=j&ws!9^Yc;#^_A240I15biBscw0Zruof;)qD%R2yDd
zXjT2|P)lyFJe2UmyWraEPN=w!z?4gPyxlc>HV@CHZ?T>U!ZODflayaeZf~Bt+S{y5
z5FRXs;ZO6sP=WYtUbEo?z;k7fV?qszMQaQ-o0E)HYD3!4&w9blP(|z?U)=PM1p|ix
zQp@VeOyUSWRA+go(kzC~6}fU-{osN;Av(sNN|r2a*W7oD?bz=7U!N#0H9zV)rjX&l
zm$+%Qyf^3BwH?~j<trM*Mqffz4c#m+_MjSUZ(`KHoXvzq$<}zhU;X`E)vL=T^EH)u
z`rPE}GO*X*AnW|XxW5bYvm&4|)y-uzIC=KrwT@n9c6d?$P@;Ql8AN`C0Y7}3G{Uv)
z)xXz`<Ds;Op>#o!vva5tmTqUG$M@17!ml9PnpH!ze66^~kY9aq4k@}U8%<MB<mN91
zn5-ne_yCKyrMK1DFa3a#FtqWp<uA70Vjs$;j9ra1$+wLBQ^J;g-)zkD?*cSTfi|i+
z0BSh+H@F%1F$ZmY*)%|hZYtZQq#v8yM5IUiU=qB7ArUU!Ow&BFZ1^W4ojI)Tu#E<5
zqK}t95+guK7NNUPCFOZ;Q?^xA;mS=tfu6?G?)_>#0805JKh&47pL~bbee=q>y4;U#
zr{}x2^IL8cWsQ@wUn*{g^>`OE;WvdLs(lgTNYTZ4m4U}dEAE+|AAK{q#)~+Zo-3m^
zeoLXzdUzT52X{8Fw}les{f`Bhu2r@^So6A@UntzRyOnV|I!XJeYx5sLoPr5{^bdKx
zp_x*|^FogZ)wEVXJr80=zm1A(%WpFU;sk6jP5i^m&)4?B(669Xyt>-EK%s@v4G~%n
za@JH!)R=!9;EU7zh*wcYz=!4xefsiM%<FK2tD8GyH7fUze!B{7s1p~jaaOeQtAxF?
zP;vgjha~x|y+vtK13N#!8f&^}Y0bmxs+=lNNH?arr*9!yQwKL+MFgyS+7j3F8(nln
zEuQ?)caMg;ab)V@lc&f}`*@X<A+6)x9!?8b6+NpF9sSexE8X5QW7)SUNAdB(RAfTc
zfh~lHf-kna?$y-JPE_jM!RWYf=9R$2U#ENe&9Z5HwsXSC8OkH<&(5v(*P&q0hEp5Y
zIW<A7N$Rh<x(v$tKCjW1p+xSI1nbG~y3I3yecNC$bX6Ywsraiiy$AlixLp}AtI{=Q
z%Jr}QRA0TWnUiJMQn$}xVA=@BszF%qZRYTAPkWMB;&ixU>6Eb<<||d$c3mzcDf+AP
zA3+oD@c$ok3;H}jmbFx#Yg9ba72r2<#Gdii1c`&Co9u4}!Ik{N_(hD{C*xSG`Z07(
z(Xwi>=wEGP=z^JRA&FhHEr_|fRs*|mHBP4iuTdXE<iPZyu)nC>SlZaqbgiNcVz86-
zq-$B*dT|~KuqE~VQP|%c6A`h(LuYN@Hx`@akgyW^BIC(BztOi{)tS!Ga!pNRtRC7G
z7Gf>n_R~N36v@T_AB>A%`)_Kq+~hG{v30=A9tTeuI$o~*nL}J-+ESU`xvk%k&B_De
ziYOI@51jF)gV=RbH60x8dxGs3W^EU6%)?gUJXBu_lp4-MZ3libv#BTDztT`&UZK<<
zj&(s=dh+d*x0uK;(TNc8X?~*AVf`d|bcHFY^JI9dJ#@L>a?hOQ%kG<e3Sv?zswasp
zh2;7CG0_SuppB8qrmYs<0h}jUR`yQ$LSUn+MYmf*qsGp0k?x$A)J9}e*uDO6JW90G
zvvmj}v_=H<|C}PS@Q;8voL2%HpRY)vi1E>Czpu!&CDE}c>#7mDD%HSIO*wtoqo777
zc)k1|LCdwdO^fBl^BLoR1olfMDh9>J{U$>l_nzKB92&-1xZ?cgwrbEVN(B1Qz)V=N
z-`SmXE{FGf$HmtM0P&60Q(d7910%X85Q7O^KX3jc_&29_yR97(v-3}ayli~B<8>_)
z^|}IV9U@3^kiM}DCORq>S^YUGx-;m*3*F<L5N&7V&u^+im#Dc9m}ikGobX$KP#Ga|
z3ZK+Fj|#^kc--->pO!eT#TM%zRLG|ElhEge>DS#Ma{<U+7HZ|t0?|POcwj&-l!Qef
z8T&;0T4p*{$_nC6^&$%5K$_>@s96`2K_0d5g%$Xi>N=;533qsF4^1`F$<;IWm$t)F
zcktgpILWCxSghVE$Q6#szETT2ENOhBDl5LisS`z4WWP=j>zTg%-T0`;82&w;ig)lz
zqDO&;j<;*v?BoRf@H8%CPF>!Ic!iw1s>DYU-9zcMIVto`#A*vn)x7Z<)M!<G<-QKp
zf5y#iWWw$;KO?e_k4TsB$q%jpL!WJM^YJgslBbK2OM*kRdw3I($($07zCv324`?Y)
zzV+_}@yP{>D{m#S4ZODyK1R>!@VH48S8G|yqUUs7!ZclXUBL!KEDA}$+)>wa8Ub~7
zu2(De%>mRhT;Db)ffQC_iL_SQ10)`wKDjfxg6;A)rdr1A)bK4#K&g&2$yZ&T8IIL}
zf-mE-<r^n^+zT|B59eI&NS^GexO^D!fy5ol_>_ci*you%T^blm6e1)y-U_m(5-ra)
zgncad;_T2|TgV@uJg4iy>oK`TEY^gK<Gg#}B11!MN3liE&U~}aTa&;%3)(nG^}W@v
zDhSiLOEnyrZ#SIys^F82>LJfzkBZ6=0m{(BorPNOCQDStg=ca>rC*wmyYg|0KDy2W
zJTyzFIaQ{D1@(K#8=QmT=3dV@Of1G*(M2JmM7*y&bb1Yo+VL^62Gl6OMY}Q$=}V!K
z0>@QKr3dR5GruW$`WI9}3+J$e`iRD~rWv&K@drX?NzE&?q-QcviF#%!EQ*@0r4{H}
zS)<HqZ$`IadZR)EdG;^`(&4<MSp23P;Y3S8bq3Cy4s*?KYq>;P6*?IWNX?o4zUjNw
zZ52`{h=Szd4vF7qn`Mi^p1<p!j~$0~hF#~L>RerJuvm2NpZ~43s&Jaz7*>Y;sXY*%
zYu5FC;?A`;9PTbk+W>utx^t8)QNqB@DY$vrToe(2D|4YB;_QgW@Rf=gV>z_6eeDh~
zF+=UWEmWH4vJMM}jQmfuqaBH7W&9cw4)FpUeZ)oo2n1-aegGrLT5>q+c=uDf!ZIK)
zZybOB#YR2u5}jhsrW>;}<!#Js{Zey(J#NWRa51hn;TjmI(Y8t)hk1!$O<GXdFD;Pz
zW0O`2g*L0k;7rl)*97hA)|AEkZPS9Y_KNY!I=T{86qY&DKKsYdv#97t!y1%b6vbjp
zaFfl*_>Vy2r<cA(Kav4j&8Q2y_*hVSrpZwcc&_yyfdQaRFXEsmtM{1D0taOV@d&zq
zpN(~sYoK2wJK-<6ccFTL&4mcf=T8`VdgkBXEC7S>5SI}rZnaWzrN8v>LG|1-GYxjB
ztze@?jH}=G?4Z%AJr!GcKIJ?9lI-@FM;3+>;jwjB9Q2)6im>Ko)4)%Zb8R^eJm$(}
z^h;?0g$e#p2QSO|-E)_k2V<6B-YpyJpur}C*t$sOuqenJHhq0orT2u#FH4#N3qz;L
zuQrPKz@qC&?X-*zS0ey*?<RaNcZ+Rb7~Id@R8r)T%oUEQ({{GK9Ha&9g~*m*__1!o
z93q}IHM8;2h78F2eI6}(M}?JdGxaa%oD~w%JL{AS^TDcDoy&J)OM<K&a^L&RBCpKh
znPvee<&7VtAGx!YSHHS3$><xpLO+yhnom9~!3^_g;)Xxnv3C+kR&^HQR)xo=^`?YW
z8gd(N1sevN=Hy8B{BpN?gvN|Uk96Ew98zHkR!ZoqD>kBhkSYl8ON8dHEYe#xDFkp~
zBh%@$v~s5eebWz%=<Cv|n8g+&G`5nIT!egKEe{5nuh{nb${tP$@o1a<0;64-o7lfD
z&25>uOse4)Rn=!oP{Mr#)4I*`u%`!^Nqr&I;8gDYUfNQPtp!J`SlY!>tHFdw6liaK
zi{}1N3_w#=W!qhzhA~`5l=S`#n1;0ZjIIP@k561Q3i<&qp4qB;Pc&B2=5o^t5-AmI
zt6s4Fk3$I(?kETY8ip3IjSH~AZy!#X?V&>BH6}VN*2E$zR`ZHMnsgI=;`pZA=uYo7
z1#!HI?ICG)S6Gz&l6+eqa$U@@A3mkf6J2IZXl^rX1Wo4Wt!PPpk<@HBlAy4ceud$k
z(C}AR9{zAsE)eu<X|~KrBskxAr%Vr#zSTO4S3nFt<Mth6+ohpX;)Bb;)&e;;h83UZ
z><1zN#vwfr`yUGoNCmt78U^r0FtUGdCs3fkxRL8?(~fco(P^zG>(}wC>$G8|=dS<t
zR@zx-skY~8NVcNjtrdJhLH_L{vNd1O^7U<<<g;FQ5%$F{F4W?>Grx21{B><;NTK|C
zVOtU~z_dq*3@0Kw0Bo>!1n)x3J><qGS?U)Q@hgMx?8b*<9p$i3)B?_3!SvXUwBW~!
zcvF>qyA+gc!<z9?zOw{3tlMDD6b=8%4Yzy$q8}rp_Bt+xCMs731U3K!y_qCw@VM0z
zt8xSEksT7p7)kPNBd^&Daj;fU4&0r|750F6j#TG)t8dZAm1}c@VSaY&*Q6crMDArM
zJ+=#!#J6Pxj(GlZ+&>0ZF4Jc+$f;u((;pWbqUuEV;Yf~`Rw#IsGPmKqr%KcSUkvRH
zT@|`q4$A;HFj4h{2=9i-!oBn@n`n8nKCiC~4+GuO)pQmauC<(K+EJmBB|^;IF(-mp
zjY<=2JLORBBPPM!q`aU)9nkRZy8<X>Z>E<WQet|!wj9OWJ-N-zW!~*u#<cU@L#mGi
zD$$Un2FQbaQJbxtKiga<XB3{0C{ksfP>&P~F2B`q<lpCqMr>#Q5zrUqiH^qH7jM5_
zP{xve1DN#)SMM1qfkv?>rNX%tW8v+8g{2xcr@lfd?zO)r1sKI^=QDEHMO#k_G<Z}*
ziSyCFW?#HiJ;l(G9)B<o)9RFGoK^x1155-F+;e4m4Fl~C$!*3<)zkAyo5vdkAkT~k
z<lp#`^B4{E@EwDoCkMH&pwl6z8yu^gWfq`0x}HCvRI(bnJw@e$4bh~+_s1s~J0Xvf
z=MA$MyE?j9sj{zSteVri+|uorQQ}#Se|-O&9+&h)opFa<We{{=`w_|b2m;hvsS7_a
z^Itqs!~)((X>W6Er}NvtzAM#KmQ=HwWz0Ol0a}RFq{|^)U!jk2mw~FTuWZrdkN0%m
zIwYCH@yM#SD1w9}X(_Zva(}ZBckp*0+mk=Ek}TU?KVHa)yj?NTR9m)1CS-5jzR=>v
z-a1$rD}cZnmHo+g_BEIG7Qxdk)op2h2CQz1BI)+7cvDzwgaC%(O+7luScWX6_<;w_
z?@B6IHYL=TB@as^q`spZbzYRy#B9u{K92}C;dD0B$<Qjne~rc0PBw`_LrY_iG~1H-
zqe)-i@!$6sD>AlQ`5qS=nd7d_b~J92Zz}^??5tz?`C|~|+@lRs(OMBka(p~Iti&)d
ztSY~@D-*Al_0l>5=<6RL7-668k)DkS9Ve{jOdlQGm*Q(}qWym?U3FZO@7KmeLPY5n
zP{2ud2_oGf8(q>N3`R&JA~`~8bPWb$l*H(e+UOXelERz_IHX&A@%wxK-5<~AzOS8g
z-`Dj#=Uk_vT8Qe0bVPh=uRC2nP<U*Zl>w0-Gz|*2>PT9Z7Qp<-5OBZ2FBidTHWlgE
z9c5+4vT=M(1Ve-~=b(-nMD93SuqYXslcKLsOx8?loHe3s{gze7Gj~qMoD}jv)Z3t=
zuUf*JRm{n&ZgrQdtT9|)tVwF63|94Xy|1M{Ary@^&ZQLd!NT}7hDEfB{P!+j{}+f#
zl%g4H$*}GWT}#WIZLb&x<Ig_>j3pdyZf8q-TPsi{GLSYW1$@`z*Kp<Vduo~|muJj!
zz-Je#@V_*s%L|UaHjv`q{%YDhT80qwMwu-rGaJ>C#n#uF6k?EXx8!C-n(W1p;1{V?
z#!K}bBV7)gHo%Oqp4i!mJ-v@Bj!0R~XJc%rrqt0nO@lf_%wGa6eFi5~)cs|RbWEB*
zU`$I-v~_iyDVL|XmVBLd4K34JsK1rXIX$VuFJI2eWgYz`@nfu;XdrV}^ZCzVZk4?*
z$<w6gjeyiv(DymTYp$_(*{w5r@PQmlOvyw==bPu}D|d(&PixngTf_28)>U-zt5%E2
z%~S#XZlSdx>Q__wXD5bqyk;k1bT1&5cRZ`WxOctfccntYd>z_Nqitn*6DH>*uCH4?
z)zFX;EMUF_8DL|;)P6R-?_xKOaw2T?eON=f{8Ts!8jf~Q@6U^vE;iq<utLP?6-?YH
z-6gftROD&+Cs?7bL65Xs9{iaFnN4$RQy%>DREcGH9JUEhnPWml&5y8quhAF`q{Q^D
z;7#r)MAGgwh?}Ugf2F5e7)D8<1-B-}QAwS7bwm9unyb6Wi9?y(95b|wrR8hHSTiyy
zA(Y?lvz@$M<Q*Lqm#ZWnI%;4Y?3`$hdh*UOUc0;(X_QnN+Ob&-N$_sq+S_u8k8fIb
z9;uB2@&`v|Gij9?#1fwL>9y;RH%iJ==oK^oebb^jAr>3BqLCysKJ0sa0*Im+CQXQy
zEnii7<nSOo5eRyO?fv5x?c^oiHhRj@Thx*8OAL41Z9e@p^4X}E_yg|oEkj^b?&C24
zywz?3iWr$<GC?P_cgpi2YqFV5Lu!Ev^P$fLHSwMFB5bd0l4gxeDC^$KmpNl9bk(oz
zC&MaKrbH8rDyk;s%?5oRogWtif+3t?*APJ5fGB1Ry|IgOYdxp1G_)T^W+BpB8*@PF
zIuv;N*8A1-?>mh&C&dGU=+s2nsPe@x0Er_EP5k{`Yygy=?1$uqAmkSZwoyALJu44{
zj%niAh3tu;IAj~J3r<%%^fI>eS}m<VSr~`^WPG1iUNwm$cF*(+YKBT7?o-xV$xB?I
z9uCFcs6o@2dR^zS$um?E!s54pb3K&1QypR#&-jq%RSG7Ze@Os0M6+|4!=4)Ov8uk$
zi-`S#<k6S_;m)RS_gFvJ_T8&6&!6UfjhPd|L0Mp8w+3J<fUGI~1B@Lc)OWe$xpXhM
zH1hz3cqg-V8hVb<n(-lA_mjwpA6L=s8~F`S#b>^z7hJr{RX@3h<qvI=_)EfU*Tgj8
zh3==9cTMaWzzkc?gK0tGnwasa>a9m0s->bf`HmNfGW$#`#68rs{~i|hv@}=M3H`7}
zU@&Z1;^ud%y|9`lT%sL;>gMQ3g~wgg(*m=Jjp1LaAWNaezUWkK{C)+H(z{=2dd@{O
z_15kd!qK7ypYph7ejAI>nDI%YCN)QWQO>$A8p51W^hzg05FA9t`)y*O7v7{VFT(pK
ztj<u$QB+*~!nmR`;@POhqkc5tw!s9n^!IZ^@5kpzUWm>O&L#~p95eKq>bvh_bY9O+
z+Jck25Ul<05At0S`gS7si%Zhjkoz5{Ky~@-)+@q9cfc{<lj(f?;xCD!-8UDe&xMD-
z+2q;L^_Y40X}o2|38PTWvWTU%RPvu$j*W1KfrRtR*KDo0e?|lx<u0eInVGsa$+}M)
zBK(O3%qsYPb4nGR(0HVB_&t^tJc#UBOGG=x2AcM@<<z1iT+aV5$=dyToxrKvwr{&_
zc2UrTs3rfa%lWIElT?#V8nZIco|iGv$|WhkeAx!L<2mWB7#ku9e?rn38g^EKD%5B6
zHGz+Uo(ql(#^f7(q-lpHZGg?8EUa}(z89f@GNH{me0ZN*G50~8-EoJ7+ucVmzV6R8
z#?0Rkk?lXxy*c0ry>&STG+JQhoIWvR6CoVb=~bU?yeQJ755J;ht0CjY4j<kCO4w*B
zng761g0-Lyszd6v=ZzyB^yD0vx={aJRMcCUwSo8h4WUnrMbboxmAk0%CoWkFvF#wr
z<Z>uWHy>QM)1$Px8;hX+s8|upkSkQEm7(<RTrPSRAv!{pB0T%Tl(=?_&|UOfRmXwT
zZ$b0pth&ylLCleo_*721s|J^`;|>a1x?<rA20oQ$_efTDqkQf#b|JLq@~@g2!_;z+
z4Obe-D`!w1U(P7@bbO4!#i|8#c7PhY8Fz{kf~ywIE+kP=v90!>&7cPP^BM^-4$(7T
z6dy_ZVkQE}8K7B2I03&XCcYbD2`4W;vW&U8)3tq2e(*w1EC^mT@l?#~4HTqYXv;%H
zhYj3>S*^eFLq#nxv^~&mez(F5aJ(T)#JeFA-02l0KWi0FG>*V0`UuaB5_D8spt=l=
zd3E*>0VxjIbWLXqSApNV8%oq!6gi3+w+AUn9l<Q-@$>v1G<WaUg?@>yx48)U`H{kG
z#e-Mtov5BvQz<4Bo|gJ5)+(=d_11G9nP4<`Nf3OM%EA15OrFO}q^YRWCBvyWol1k;
zfnm{nBoux!zXTB4;S^1sZca1|4qPL=UrfVqXfvlFFDs>3E?IzXTu(#-Hr&MBLWPH3
zStE$6W-bA5+lTdI5^39CI;lmT99Ecr`Xf>r5Kc}OBghqCQ*+=74}RsEi5pOxemeSf
zk!@|3wmrP|zL2c@QGAB2Y(roNMK%2+K~2~FD>%f>l-_QIB(sr^=($K~vsa^WiGmb|
zB35Z>N4SRPdLr)Tx8@U7xOn6{?C0Vw3vLmg%<ZnL`n<4zaITnftDkaLm$t)Wr@}nW
z+ukM1jimIs*i0d&#5Bjh$H{nJH$L(DLp;l37VZ%E@w@YTE3?8Vt&ie_(2|niNfyV|
zZ&%q-$)S(25~`akidW5EDNVdD=Wy)p?R&V4Fi;uRJ%Zc%JhYNMIRjdnEG=L>0T+>O
zd=6KD%n2xc)C<Vw7fNa{`1F=uHf>df$ulZ0EYu}K)TlYaAyc2*Eq*;&kjn;JbD;I_
zOO@uY%Pkgtg^B2|iGhDftam^6Y!SAz8(QR|Ds%OFM(FS8OYO#g+wBP7uKM_wMF0G$
z$V4YYQ-15eL7M+wHirazX=dhK>ISh=G$onten@F2teRaN-Z#4%*qMz}0$;hX)pDPJ
zC}8rMxm6DW3_MMhGTZ(b)n)+sMHR{<bp<5b2?j<9aq{`4pI1Q{1HHah=nJH*pgdVB
z!)ankFY3-wjdHm~=)cAX*8cmAqW@k|Lwf22)<{n>L}*7I@F#t~Kr$7`dn?6tUfd%u
zam;kJOzA{(^rBu63CS}L!NE<Odqwi+dZPiQrh6!Q!3TCp3kA6bV*JvOM~^!WlF7OB
zq~}?{k~moqn_Ng>tbz~X0tJU)A8`I930N3KG4QiQQq>9#$C~b9Z!pjs+d>zH;evu>
ze{>9mDhRlI<$=DewLYHO??y<BRmBI(kgIzRM|*_-z;)<%YJ{|pd|L`gJm#E_osM+T
zttkvKLeW!k7%^fYf~r5C9OSEyhx60|Uk7}B#NT@o2-;+U2}*CKwv8IHz-~vPzlW0}
zt(xyuB*9Cy3^aQv<GO)cWf^LDPAA0-ytN3BG)81lu(~|hm(Sg9HCS*i9Dv-2j1d(e
z3uI&5P~t{=Np=#iu(mes`lgovJ2iMR&_|t~9<jG+pv<pPFK4rd;sEo9l|7MNtD3)z
zx;Y{^4Kq^?c2kUUr5$1VxO_IhoGwd~>H4XGVV0|B6{yr}ckUVX7$~@GDnrI8JCU40
zSBjZj2y7|<85L7;4>Rs3{>&#E#Wqp*$>oy1%yMv+haBI^KMezU4K7tBK(OpjQr9pI
zdkDt0%Q{xj%pNK+EoO5-|K*z<)cpdIhr78}U*!3qBX_>vX&b2>MhSWJj4-9V9zg{f
z=$W>Wp;s_h%!SHa*cBoK6x-P0-&_tUcY@zZc$D=uYG)7SYY7>cV1(^i+a1zVz-~S#
z1~SaeP><Y)rj-`E-5TL2PkPbYRvty-(+`d}|9<${t)(&{R0o35$*f&9w9U4MFnELm
z?zHrYD%W!2mH?E06odnQdvx&OARJ!2YWk}xKU<_**B&fBbPj)juzu^9B)qs0-ZdjD
zHPh=Mr>&SFBFpQeu&kUa^^*6~P9;|{Osph$YZ@0VDdS&1SZ@R3-o82!p0z@Wt+)lC
zYr;o$F6AoX4iZ%+eN)n6tWh2y-uJdu&5(H%Oi-#D#qxWTx({yr09Nb$BtW+*WIMV6
z;?gbOyw^r3SuRlG)}OC!--+LJw@0W_=1I`vaQaJzcB=&(240M*Ow;=068F85o<seu
z!ho)dWvQ`E;8ubm$jb|Jvz=jY8NgS=+GxAWb(uluCFg1Sadb=U7}z#L#)#*1wz&rY
z2vWGdnX|hDfih_*ZT;p(nwpR$(v)JMWE7z}@hyZ%7!!@}tn4YU+P=WdUTQ#~^a@RW
z6^ui+A8+^zc;gx#zH~?b9{GrJ+I!g)*EDxuRGmn$<+pQUMKuaU%6a_4*P(6)Ub^-r
zJ)acYUxZ^^>+7%?_DA01H&*%z{)~%+5IdI*mJ-!>Dl}MkbMOAHuHH~36`Ym~eJQY^
zY7#@;)u~qiB2@^mdL%n>g_aJapJ#}Cp<L^op6JKZD*!<`Kh~3Y8UKyyE&gHfx_;o3
zW|XHRVO7<Kh67A*YO8&LRERtWVg)~M=k<F})Nd)S%bFA(UP^sC^zlkE{dkaN74kF<
zEa@vDF!Eh;u0>wx>3P*(lJq|?)4wEz-L;t>%d(&UE1&G-{xOoW`lkQi(51g5&}4z!
z)0a7QBPWLWFN0i-nJv?rlS+hglz^V*m}zEn6g`u^4`Usts$rsUWkOZrn)t~Kn~ab<
z4GJ@LUxfp?K;6CfXI7c`-3QA-Lqr>*n;B!9*Fks2G<21hp1H`%s4?b31KTWmi@2J<
z&LK@5I!6Pknu=Lm-k?{=aUyA?36tF1>|b{4(ukiC*S~iy9p#8_EI79(Y!-`wZjR8g
zTq6XbYMeOVsW0@R*v%C6nNp3X2|9G+-dO^!i}E>HLq~h;Kgecc_lwFbJbz`*q2nrt
z8BYQxWsYtm>q0fi$;MY7n1}tCpY8YS$*WWLu}N44*z#D$o}LtDSgNipxy<gMWEHlT
zAE_Qp+r`ER?QL`#v<EskMwdJ~)N0`s-EHi{o6s<PsCTu?lGX7a!r8Py4R6I!ubInl
zCgpcz@`ns|sEBFbJgdrz`bz?<p_n-J)o+dxxvSnBhvB?rb8&|laNAw_y%<Q?k$SN2
zTL`#M25zV}GT-{maUHqAF-__>yMxSm_kmvM^RKyRB1VSNR6Ri#usL#O%+|G8l^s%B
z=?Zt(djfS~KukWVyin(+?%}RoL0jE%=I8ZAizj@SPM}}uLu_t}uk}fN;mJvg_mZu2
z#^pR3$n2L#Z3=-8BYi!BdD5pCPW=QFIh)W$xoOFxhs&~4_thI|=4>7)l6TLl+xSP<
z#*9bUGdU(Oq|RFxldj0R&LQ(sCD_go5+FVL4jDC=ZAB5Xsm`t@>OIqq(!z{NamtoW
zR&Dis35!%b$6dHkP^4p?eG*Uo?kR0NmHNiwd4O@62|c7APmMo<!G{ISq~E``4w@q6
zhu<ChK|H|4fA(U_$UieOQO!6`j*@uwEx2xANy1&SYCH7{<6O?<!hJjJUjG@;B~z%(
zUU-D&r>m+R@rQ-Zl)e8+=cwqzn|CDu#zn1+(PV5cbCR#4OE<%rhcOe18}@d?db{q{
zSuGEQe>WN;LpzcJP7wKi6~+|lBEc?x@%9FRZc@5J6^L6Sinc0g+b1+0?gCsx(uEup
zWB6(v(<}!9OnR%lKRin9o9EtwiOcCM-SMq93oSrLi@gW04Ojhi;iJ2%pHYV1UL(tD
zV~q_j8!7m6OyQ`WP=zV80ako8pX#@Lw2mPp0Ba=~yJf;a!}^z`BAPQ$`p+!C>sWZE
zelx<7>3x#OeeifujoGs*5BKx(D&UPPXkH3QX-;e1h}JF;90t}QskF{x`l?0DaBOEy
zIQXM(eHv}T=ic}ScKoK{dR^%~-a|fQi*ft$u|Mh;+g%Hzfb6EoFOs<UY)5Q!5*b4{
z`CF$!w}5bF?w{f4y~~(wQ-MN<eEf?0|5y4r48(-OTix}03S=HiOGj5pO4QuDF?hMr
zGjdc|FWp_+MZZHl{BI8V#=L?r(Ycmh_w}Dz>zM1r)s$>5%Xz6ocwMypnW=9>*NpO6
zDCSvhObQ5wFQl38uXN8*eQaqdyzQOk*pyL<SirV8={<!=EXPN)jb@9Od~(~g%es2t
zLSK0P4Jv#Dqij>CBr>ZO%*`m`QJspSXLNFoT^mii6sL(cxc!tx`QoWYE%+IwQFV6|
zsin>@?gw4Qe3=ce76usyvKQ9f;yXJ;<+3n$*GywOZ(=E@xC34j&8PI1U&%w7UmmLK
zG40;8D1FgCAVCuiak@ivz}1wLgIN<k65_RVs|?he7r6z6xcm0tA~Aj`1CKXOKx{e?
z;dCbx^<ogeJ?q*RvB#@rWwQRegWKfN!`kd}Gdjxbt7ql?@pEPLY#js)4Td0IwwnEx
z@l$0+ZG*(^5!QOnfqrbjYj<<p3*xs{d+rCfs%h}Lj6~<xEpT`4qfV<ASk~V>Ms;LT
za0bejwHto#=y)C$b!)eR-NLWuBt{g@Jgd^Fcct_5{@B;rr*`Bqhpqr(Tf3f4TWxN{
zGZEq#D+41olxh1UG8sQR{l>&vHM9=uP^UVd7z_jlGTw)JXlS*Kc#Tp9)c5}-Nfei&
z>?)AP$M+8feknse>o^e6Yr3Q}oNjzWwNrv|@_%9|g5}cVA7AMO#M@0YlP;?C1{m;r
z5A`KO2cbmOD*t_<fh#2a?lmV_j+<6+dN<Cht)^$c^R0IUS~I<MgoeVgT5eC1eOQG9
zI^y=vQG#U2ehu;3xQeTj(h`zaZZ;)e;bt4{{n`wT-$mK&4Et&>%fBhhHj|6yOx+yJ
zw?pAyMMLmpcpsu$TbAi+HcW_-7J~jYI<4^)pL*N0C2O<K-h8f%^IayJEgHRB7Im<<
z3Z;y%m$mp^7KeR0lumTXJ)73C6ds&ld01-pW?IXztH3|vB0lFH>-xdRrKSuM3Ra&p
z)ohq;=UTCfTvQ&&SE$oUM~AY0+dh-d<4S*l*kz>f%*!m@%x|$i7YVK$8AcTR9HqAb
z(8m+kb4V$xlj*I(F*$blB+HKpK(5bQYyk6miiHVf+AZ*^E-h9eNJNZaWJKK~yk<AS
ztJ^qVgJSC_Ux<Y8(Das}6X&tKTytp|ZNTa^MkgDnXNlxh{y@e7E*f<Tw6ne5BS|tZ
zL=kBk71i9)woJAwE+3~s-hHjn0geMHlDm5q7D*w&H7$=$^oLPv_-K_@$|e38OVc4@
zp0`s_AlR^qok@SgJ0FjEXZuEEg8k(Kjr3|e`{*|qnm<T=G|If{s6FDf0XU=9$*HW$
z^M{P%0+zK-nGVK64V){zSN7e8UL3Q6$@%<}cvLTneWc--vUM_pw%r-tbCkPJ6K?KS
zK0Ww?<)?C2l&(7+@t9SFGuvbJnvpqH;n~n1ekl(GZM*avDuC=etU0X4kNw#gtML`U
zx|TGQ`_A#TN?m9P?>ryxCO#<Onf#_ilHpQ^EhZCH>c1y_Zt-aIC607@;$YV?t}IKC
z={aMSM=%jrRwHTE(UO%l@U_`=!^ngtDdfP;Z^KB3{WF*!@(j7xK3#pKozDU%ns0yC
z;f<0I))7-l7G*;Lc1AxPHCbsBp9eTg4d@EWO`G*#S-Z+)dM!P9616mhz`~Su;6`)*
zvYHzU+xIhXYrBTG#V*Pvk*uXQ#ciNfX(;0i^R>liu#<mD+?etUmw5R1e_6|mE&u11
zSs=0{?I`=`H@n<t`U0)+Y?ADx5=;B_j@s>tza-k{@^98xO#YGxflo}r|7%*|kgjyT
z;#`mC3j$i@4v=>m$_f*&H~RXblAynsV5U2DO4a4VmAnh#6;QqkpsV<@!Wr_5jlhMA
zQC$QDO0aBU@|7U}Wq3aIx&H)BnaTnD3Ag`U=W5pnlWQS7s5VLB+D)4DjZlgy>fF<n
zo}!I~!Qd|*5F8k-#KSlTrc)JJmgl~3i?*QnOOpL?PoD3gP{OG3hxQlFv3jL<Z!tME
z{yLc=$JZ8O5!CpkN8Jc8x}*d|4Qf<Wyeol{^)JaH@~)^@ie7ix-lr=?IbXm>Tz8OJ
z8~>(m5glomEvi-S-QwD3b3(QGuV<M%WZE>PtC&U15e&VvEDPF=;~R(%r-D2U%@>0n
zql(uscJ&qPw5G7wmGY5w5Cd!vx`#HLa&BT-v7z2DBqf6^S7@V2y`p9qjI5gxw6Aos
z-<$`|s!<<+agn8Ej3d{p4so%P>a1aBr0<!oc0Sp;wy*U_s-Stt4L;E^FPRpKf{MiI
z)nm2U#cAbPERr+xUGFuOg`d8?w^Q`4OH2gBXb>A3CO)8G^cI%UoMp&zP}aYKf4*~c
z?45smdv4F=IlH;?{!Rh<1*@H|qU^1tfc*O7%svEp-pIR=l2y>Xro1}A<>{Ll&y7Of
z@z__*Mdj-rTKHZdp)j9l>9%q8B|~-AEX#Zzlq3_c*LAMDvN)7Le(H?ckY=FP#;U4i
z%Z`X&`n~5xqB_F@wH0ohw&S*2#}gS^AB9Z>F3jop`Gr*Ho`Iidi6mq@7MfnT6rXua
zb!**vpFisOPW!MzU6Ql^{HLS_>x+9_=hkk}H~09ncU*A#9lkqPdzX-tq<nMTFIqNa
z)40StyWw%k$awtwyyo{Le@V#WKepI4XYwh~F<*ZnQfM?+sT%og^i`a;f<z9E3+%CC
zoo=j7f0Srd{e8x@=G!AFaP13w^Tdal{ue(h=j}OjYZ_Q)s!4?i^j23tGzQd(AXIgd
zUky<ZL{{mT-4`1-+lZ$?2G(+UQnUCmms?RoTWAp5!Stu)M0&%6u@qgRUHxR0wkUBG
zeWyiTUjM<0P`=jW*bl?76QmvA5S%`j4IrL{y3Z+aNvAG%7bXswIa#jMe$UpI)~e8*
zuT_kwcKX97UgFQQKZ`8MyinjZ2?s#m&JQI1vT+}~^~rKzfh&Zm0?51UvC4C9z|^7F
zoKz_LuH~G<rD>0x$|oe5@x}#T+}qC4H?ZYuRi73m$*(6<OwQVR6N$G6bwoD!yUDNT
zSrEIff*?8g98~am8?I>MjJ;UT5By7FgD;PqMXwO%S|#_r0#_m2b1e!!Lzi1N2ZeRb
z`^SZuo^6*_|NL=JaVpRNol{rq81BBqHMI({b*;GJkun0M>y}5gOVLIuBTfC#sv9FF
zVAFJiV8YZ(tSb<HOvEddiDu316tL4(sfmKY&`wg#{!h`v3#&k7wfW3K@|KY@rrmAZ
zfK&wueri9B%~J`3(LK*ElXp;2!`_^+Rw40sMD-#N2JQNX!jd%lvbHgh+uFHZv;&Hj
z3cW(EeiwZ2TfIa){B3B(i?Rrm?gU(8%saMG$gYC;{n3wG`&~0HzOVc)$WZ>?0&BTA
zEW*5rm<IZ9saeSduB}7clB3&Z)gbo`>kzICDI)$tG#BKz#^oGn{JQE@mFh-d3>XDp
zbsf=Tdk^fomI}Q_TCanwD~Rk%qQ#hz=ERv11f)Q!b={F(V}33<%E(H_epL2x2TuiG
zw!NrDpA{gdkNM8ByjxOY1R3a+yi|N#g^cn^`>gnRh~Dbm^rkLaM*dFii74Q#srG4#
z>?~~>8`^m&p4>6bf8Z0Ex;+rGZO^2_)AlkEI+!254Ag2t#ORYF%haa@ygg5D(FIO4
zYR{V$_M+%nlYU4ywaNr^0{)WR)dA`r;!r~8Hm>o^W{$u5{b1ZL?IHnVe?n03RUse7
zuL^%j#-kfoVmB(~K+N9Ywu$!!mc_(9HJo~HG`dW%N8TcI0Ei=Yt&%MtJ5&O_k5@}M
zm@80KuFT@}7v6D#^A6&Pe4;LD)$3Y3HB5`Xv~HmMUVjgC(}{uQnqi~Is)lNwrMI?K
zQzu_BB8~-{cpZBw_@vE@BM<nPY?xzUIZ}_S#Q6dcAA{rB7d^dom$m-=R!hDMuV+|s
zS@WK`aV|`ENl+CTDW5CC=2me}aPlVwc9=XqtLOGI3(&RQ#X-|s@Wj|%<Ct__Su)cm
zDjpzc#OxPTt0i&Ai1kf7g8A~^xy?O=Mk`CBO<UO^Hq8q2*s9XAQ=n-AAp@EMh8k*y
zmT{k1*2tM3!muzAx!O`cRCVH>sMDZ&hSm)IZHZ-$K{zH?L+^M_E0KTi7ygme?iXCc
zAHxwz@t;?6Z7;0s{^Jpy0_H10lN7<+oP$d8H%*+VGei{HO17B~Ayiox9UoxIb`4FM
z3lxnQv|*pMGVBZaa=AwR-0YQM`cLBW)A|C6zB>GoUWUvr&y^^R+<(>J^0^mj8U~;5
zuZ?m-Iu_DywVZ6Jes~PSCTqBf>jg?v*g?3K=}3HFqiSPx?Pib>hUXf4ND>&EJRoxT
zDlgEtC)!7DPzIH^TXi6190(%iCIcHP*2|hpnCZ}tO_J`hqpTu9)flU`<p_rk?t#vu
z_}K3R!A$OxSq`N?mFcVJRk{tohUJ2P|5wzrc4$JIKNrGX?d`grZ97cPqS^f3gkd6(
zV@byUFA44vJ72DFUIQa$eBS?U`Ikg*BLB$YK6Lls=RvJ9wCtYi_5(34OBc?A!TU|`
ziRD@)de?40QQ%etkV@}zGq!hUM%}g~t3T2Gy#cz%KxMo3bq*|hfQ)rqcpEMLc@G7Z
zZWsI}b^;>v_QE*F*U1D1fK(wwUyITqa0bwlm35HiahcR!(R6fNX5z%EioEqaL}gQF
zYXkH|PsZ-~=D@{0auxfH(f;vf#VEsIJyIX`>tasMzxk@XZ}3t~Sd|Z>=w)n~6@0)c
zDv$f31*My<MqIy5nVv!H?0&ai@NsxxH|?%lwiU9;^Kl(PuLoV_nNXeh(eEc0fS3`E
z^7m=}WK&H|a6bDq9)ZS~&j{+BV6YDbSJ#|xcgFM1TzfWfc#64Wz_;Fe=kpt@An_H%
z!4;FLe3;T4r9|28QdHbn=nHy5?Cc7_0Ccv>W>C`$%JXLm`Ro}6<&9Mdr}^^8q3GL;
zv0nr5vM#>GYF>9lH0PZ>2ta<(fo*#%6@RA9a6B|Z(uS<_&r=PvXYJXxb#j}VKMe$}
zy36AzwcI;9_&8xtgxlX=f()lg8Tg$7D&7DL^V);1!;_3oLCjuG<83-&ER&D>VjUc7
zt?QJ$gTpImsv4^EQSfhgm@QSQ&0bO8LUvs4W;l6?edcRDF01Gec`f8mZ{a>(wlBOR
zy^&P6dh)Y5Pw31zu?6zps=5cc2k@RFhzP#HRU#DdUiu!Ra@9Wsp=tA2n%K-BUwJ;>
zI{x4{4wrNWJA-+TIzH$n{B{GV$v6t1C~x6nSEi4?vekyOX%%<qkYKBpw+m=#l9*oT
zpU+>Q%3z9G;o8+h+}pcF(N;|ckQ<r;>=`QTOPwh9n%qDGlgMa=1?`gWzAn|z5IWJ?
zn}!TcwvG{j9Ij%w(-7D4C>TqLVv>7Bi*>oLumj-$`1iF}C6%t7eZ56jx}g<D!7gQG
zg{-TaXqL7gn4uWEq&1bV8>wueyrjMF?eSqZh`<qOP9fhOLc#BtB5IC}dd_g`_19Jr
z4uPM7f>Z&qqq(^Qs<F?y=i(apwmj1}<D?ynPOJrX;I;L)ADQ^{^_IMFTo9Fx^JBVv
z%*-#H{VJ1Uh+%gJAVKXVNO}6<f*jzmS`jallopomCf1iEz5AC$qI7PV);Nzemh(r5
z?+&sWIxj}4(pm-HFstrAdYtUJmvixC)*gZpNwqNd4e>Api3|?Be;oU!0av2*NAYzw
zo6r@M)$}|(0a<uvo#xNO4aU6e3wK2Rl0dEG`EZKrQ0eMzG7dkzN){N?tB1vs`48m*
z5)sc@pZ$Z>5P^NS%J};;Mm7LwIz4Z!<~OrJP*sk&DLKtFIgOyRzReiT_tZ7Nqf+4J
zT2o(g!X?m{HSmLMzfSW3@}ub48_^zn%pWUqC~2nWb;fC%;Y2Z*jQ^MglJX!Q32*5}
z26RG_d*c_+Lt^Pf<5FjH>Se~szc!U(S3Bw0nR#qzdf_R35owQ?%x1b~4Dv)@E3gy0
zXhlA*9*Wre_|#@-kqUkpmqvVX3fp@tC@jeGrEvIN4bKg#nst3Z?0Q;s%UT+~^h_N1
zsc-XDGDmi8?>oKQ26z07P6B|>hltE%S7CiOle9^RXzb}u8g+kcgz=GcDJ+am{hva@
zCz*zA+&n%C=<9Gg_|JwdpcA|?F6tm>eJPtUP@efp#!ObMX0~VFTK(AKFNwf8Kcvxl
zx%tw1*8jh@)v5g^oPBZSmUYbaPprE!5Cw@l{gm#N45%k5u<q*-!39%tZGI2o=#^Cj
zP+_taFR+4Ff-Zixm`a@@o31wax|(nm{TYU}luC0b2Jj*E_APjPYL3dN$b}mm|GHeS
z?$n^HF8ZNo+)tn?7gcvS!j+;~`q&%t=cOjQ_|1DZ&F00TN)a?i7kunlRBf3DaN!79
z_sV}|E;@E*x&X4;Hs2VbHe{KM_3=3v2qet&d=4jvA3)_obC99+qCLC@Tb0kFy5y=D
zP{Rpz3gB_nE9pX==)L(66o8udse;c2h)phhR|it}xUteOD~lQ({k!_+nyi8i2DvdP
z(hm;FKcl-(nNW425dz5S?9x+Nw)B`O!V&(Glr=(QO9iHytxz#EZ*zuM2H~Y8H07p~
zsH80Y84NhI<EL8J+!Fjr3B^YxS~7^Rbm^X&ymHXp#QM}F+e<n_uSj{4Wtwj<6I9r2
zpc_C7e0p~!1Vzm%vh|;z?&w<dP5o-uRN_J_^sG^6Rr{;aL8?eiEdprtbRM*!Oy=C=
zAjPD8LVKCOq&)YR#1$^d{wv8!`=Ikqy*WSe$gPB$z96!uk&U(d28|zC2$FK5$)kNA
z1&v4+{Wave?D8@2I;7#-tcXtMRK`1jV?*J3JrWWB+rO)yQ~QRXPi9~CQ2pQz9^;d5
zH9Nc)Wkj>MmbB}M06n%O+sbU#%b-^B^Gse*wItoN%Nblo+<p}|T^nU+mfJv3u`J(6
zxixzl05oV5Zohe7$r~bu;dG$AVCH}D)tsv7l9u!-&qKLKXR0q5nm6#XLx*)}wfA`t
zLdNvV_trB$7{5X+2I0XpKzSz@(`Y=EovV7mSDDV%z_n6o^69C-qh-&l9399@h{i)<
zopuOMN{6xE;f0B`_8<0|leH4n)lTf`o%zlsXt}QO7Hw4<CzGB<i@kYxYqx6lZKd>B
zbC@49!vl$K&66p_2P_k3X885ljMy;b@EvH7dAuohrk@dad%JxKx&A>`!TiFdS~@{$
zHa^2%hRIg1el&=V+2>fgp~Ip=m7jrsJnbyh4fK|x(${0l(EM?l6&QWXT6#?nS`}by
z&I;4)j#GWDo?SH9bb&H161zwD<zYMk;QHWW`L`K*=}5a@Jp>%Qm2mx9bs9m*OPOD`
zl^u-GlIci@5t?yRH6S@Wzm&K&tRo`KWr9VJXas!`QhEJwf;A@elJ3ck(61ZME%M5~
z%Wweh;4`nE6OQRf#R<^iDWwCO`AlNiCjb5~tp1;&x&I7aS0d*$9$f_lddS+DeT`4V
zXSk(<aZj;r{g2cyTm3g-%lY;Hvjmb=9}n&x$s}0Eu=*0Sv+W0Mo$R$TSdv0)2kb4L
zxj>n8KWg~J7w092ND~|_0zH({M68A8r-O?9N6R_fD=L)F79oT)AQ%B0z~<3FA47d{
zQAv3|asjK9EAGpDvGzIYx939-4W}u6&a!HrKzspH(#N9HtVKJhgroCJX)zqj1s}7+
zw_qy^b%VX4sZ_{n+7+|S3V_IE1w&qO#z%`p2YETJAb{$WOZDt^K;MKG(whnOADHIf
zd5<~2>)S>foCmBYd*xZFqR~agX=Q?K-l+Gs<8h_)3Y!!uX|Xq?8UsO$SWbHeL_E@}
z3i3lwSdYICeO-7=JaX8r{>y4cf_Jw@C#f=J-kpJLD-Npkn|*EZl-5%S2{z&HZ-kY^
z&o|(=jb1}8IRJCTY+XN)+b}pyvKR4MeD8SI)m`uN+Nkov9DX#qvu*#nNVPf9X06^i
zzQYC$J2X`0rI|m=X;jyfQF;_V^wUU5Wc&t{2NnwWxv_wihhXVL@RfUIaPMu0E0{PG
zyJ}UfnZ|ZBuDE10esP2Z%Uaa{2E21z*dAsSn_{^D<d`z~U<D~PHZEzAb*T`1`aJ)b
zxXbW!?BlP|HN`s<5y=dxUH3(F@AtJzipsyNiCGZ+p?8PLGTOChcdYwX%#w%OFV)pN
z>^(Wq7Y^1uk%-x54nXd0;bA8l&E}oTItHfTsKWO~LDT^b4!bPo16H(HnJy9d$Jxmf
z!okSnrE<F*vS?#U@RX2=t?8>we#lxvQnEQL0^2tH4>2o-rNIaR#M!it#V$Afh-V}_
z?UeKzijwvccOyG`#$!^(0cES8nOSxj-8zlg<j!iBo&sU-;m;nr6x`fQB7PpLc3^_h
z^Mu8F?yEeFlOM6%ZJI<g4??Fd30C}B0*wDm!q=K9B0<*tbN7-iQ=fdhlROJQ!%v<9
z@mU7eQ=6Mx2rJe8ZAX|$k|ESzkvXR(@aVig`p!Z0rMHQ$Gv$|nI*)rhmBo%p;MXJZ
z4R-qh^9?8-nX$T|pMBzAW}+7Q#6-Q-v^SWIJ=`c3w)L{vbEeJX?K9SIMtxu^tK{|W
zPoQVWtOCw`v|jdMl_%=DeC!hpC==S8PSiG6Ziao#(d~}X1$qx<v9VRuIhfG)M>N9Z
zQSL?`F>d3+W~Q#y8de>UJm5RsN=Y=YiDG$1B+CJG8WdLGaZ<n7pbPZcZZWlkG`b?3
z?E_LWIs3H(W~Ui$2qEPy6t9P%%v)87$9L6h(r4A#R}&bk7(Q14UGpGoYEQ^(&X}iE
z#4uDc=EM#+06r;TeFRD)l-|2Cj4+k=@qSiYQLXCC8nei^8NxSr)9Gkex}Kloj+;b+
zJ&ZF!?22@?#b@DjKS-BKo^OKGSx>`auzN*GY@<;73^ZC5Gts=bcAIjzUuypZXfQZp
zE%YHgic%+VAFCkarv9};=gzRcr;baX8{BI`kFxzB=bdA;Cnu9myI=ebEMFHH#Un8l
z43>5I+s^CrYAsu7Cy}1r27?}a?!Rm;PV5tWoRYinY2(Ewos0yVsQ+9a?eH<%-=2@u
z>!^MG-*+<gs%+ieM7ro!fn+`}3>7Tj@1hdAE)U+G2q!8!^2?v^SyT9L)vhnst>e_k
z`(x)1H@x_7Y}&E;HfRZJ2QH#FIqiC5GIvnXUATqj17<k2nVpB+q{8B}Q5*K?DOJyx
zk1U48QCU`!Cn+Fuh?k(-p8=%=+kUC8OjJ^S>qu+dl)~9VjJadkrC+g=N}=J_^NA^_
ztc>;!4#oLM_t1z~eVy2|^q{{W2$vw(^`_`W>S&NvKD?%w@@OcF!OCe?$N7ms5Dz=~
zdhGir%?Y!NFGYC4bs)xJ9;U;+;-sjZWO}SA;BG9G;phCU!MV=_gR6j&cIk?{gkh(^
zafn-V+5+$E!nRn9sXeK-F3r7Ww$WXBLCpX@f76r!u1l6Fn6ffPTS8g0Kl?Lxtrpxq
zozI-#ZwDnPbSTn9*i5-2AR_l0WIVkqE(w=~6wG)xwyUMAE3?>MKB6-W4s<vc!2vt<
zR}(Rm%E22!6{W#h8&|xoEaZm3<3j18crN{(C6w%yinb<i0$*sQ-`7}bJGj_PP)g4U
z*xE<QYWLB89WnWIC3MVgP9$YIyP%@xhaniVN7-`@6(&sEn(nhYg4zxdJBM%v-e|^U
z&GST_=trAt7Z+N$=6S_RVY0Z`JLf@P(ecR9t>y)-;;kh4+BfP&9?$7@8PB^UUVO@{
z`{@9LGrdZnL6jj^b|vg9uJ$fo@D&R7neHv(a|sx7LbljBE)F=GqL2BMM5CapNo`69
zL)ckh7xSbs<u$usisWy<I#1ZUpy=6ploLzm#ZP8R>G*Gkz)`&NOAky;H%#bQ?VBSm
z9i4=Vm5mNXm<=o`Th|=nE8_@LaxU=98@Kq^l^!;$N{+%9a7cRL4ZN9)1NI5Ouisqa
zUlNMuv<cRvwwglOF*h>U^9KBVfB$$~nT*D8>9Sug(2d?q|21^!93{c6^_8M*x$$L>
z&UwHJxKC@$M2fFKDB}W+tkU6`SDH)wz(dMjO?0PYCe>UhIRU*SVys5#kGIS!S%3I9
zFYT5Xrs`i?hNr<8SL3EM4*-0ZogOpuiS!JE1BzK2omzEccRL&!K!*Kh&Jc<zEoBOG
z+Iuemd;$lDr&A_(#QIIsyUym^4QS0I^Aq9FTjMHtFdr`Q74N~$JHbP4twfn|ZOQD<
zZh+MU$A!C7xI;jH%u`<^xnr3*SXF0_{R`#r;%0OPt*q#R%`kGQRjd~rsNaMpm7|0y
z1f5K3h8yCaUQrn!F=4yS3ODuqwi-xkOI%GfuP%9?-48HG-t>ZF7Y>!goN?H>B&IQ%
zEnNUe?oOo4#h!5xIpxCJ@!{ciM|Et&`<I>gFd-8zaC7qNmSqM(#$gCrlO3k&9dexf
zXNGW@c_eiicE0!D0BWB<ateOKn$O&E-%J%}dUgf2l)zqft18y|X2}sdWt@-z``N;%
ze580sZE;f@NSR1TDWKe3K;%5NPj@YzuH8Y2_k@NZnNq(!_*8vy9VJqrL{(+rOI-hr
zIezJn&{6f{{RAkcw_j6B1Kr^z$%WXReKc^rG`;&<$!kn5D=Dq|Y*Ht4AAP4|cJ3ab
z$gT6^obl8*14Hj=i@|H`5@p(?Fw+Kxm2qTW*(Ff*dkmYCXT}SNcYlZIR#Q3)Yc|J^
zL{!E!I<uY0X&r-b)T!R8RIvmyI#-m=6<HRRX|{{e<B)mv4s5>RfLrq;iWN}@>gxu)
zl8-_zHcOZ+Ee`nPp7tg2Kln4_V3`@Hm%~9`@+$36Bp<&jh6Z_RoOf%6wSib*#%kkf
z2vkXNx~*DdM$*R+Bt<%#4WRg_-uj#NO{txt=s*?OItCnyVaCpByP=wrKQHh0*+=$t
zHAZ{AQcJ#=`Gf|tW-g&hCEin8DOBPZ<}3Xc1XbYP$5xvnxuFs_mb!ashGOs-$zFpc
zx(K&)iFsY;LP-g#)vZ5YOk!O2+#o2iPU5S^a5WUsu8U+65({py`*lMpmoD=)+)SUc
z#h9_?EgZZXG3Q#fh-;!sY71%pNUM&5fQgq*vfIFqq!J%StVDI6k+(d78N;{^KJ9Jm
zzt(juj4&ek4q*%bS{Yf!<T%=In|5ME4H>fA!%x=jRKDFG2DhFPbwDG$N%GwqwN}^P
zwmLfa)kz7g1Fh!_3pk62pHF~AwGYltuMT7f*mdx?00Zm5P<d}ZV<Ccpx}45ZgHl~#
z1yrz<G+*muxOVM3)gF|HA3YiR&<(X0!1&1u{N31`LA*(|ZLvf}NIqoE!w@N-ogI1V
zgu=ic9M3Bzs>*oxZwWoT&Lw16<n!JADv7;DR-%5aFSw1F3Tk-IInkDA5XdzGiD<PX
zYevPf;DU6659~UaE?*;J*DwA1=3{OoMeu$bOvX#o)^(BYD79SvJ+Fw_S0^53E;<d3
zO+xD?%<_=DI=#}3_Lo&Yg<e~i69iS>j8Rj*%G4J7z_m6PS6qFKr^X6!1&?M<sT-DS
z+55w#NIvHF+_EY$pI6(^JYd6i<MWB31&^Fc>PT~j+NYs^V5~m>SCAFES#~ssa8nv-
zy;;2k4q{~5GvhfU#YC#u2G*;+qoXBpu+XioRPwS8z+dz3R88{KbZEBt4eTEeCu<Cy
zQG*1mjXu~#+83BP41IQKKvP;T;uo=1izF-N=|0w1@u5W9bil%&)@WbV`l8^LijPlJ
z>(&ljA?95Bao@4fK9fKA@{iY_@Wg;l&*wZk^Ot@@<vA^nlljY96oRprTW0~6(?^n!
zgmb))264;n|NAy&rO9r{HeXauezWQ>`$1BG_X$Grvax#n2;DU#4_1p-Hwy<K!^XKN
z#9FJ^X&Jpdsm?Ef%AfiQgypQmBY-n`T(4GqPC(>xuHD!-xX6;ejb$@~&Le+7Y^ZR{
zp<p;U=eJePI~wj&d&Pg0H-?pi-xv0xXut7m<2hGxvF;0N)R|`a-*$>3V@@qb;o;=S
z0Ja8s5<AZ!v7ayFa^DZE$U{SrN|sinp$}F7PvM3757<nf-J_UdD7YrQHjwe*#2m%o
z+Lw|B<+2V5K}vlz8;H?=Loinz=(CKz<lTWAS?Z9nK^nJsGeA0FISFE=Lt;B{cBa)s
zWmYpQ-gU(NR=Z_J#<{C?+8wP9%5#P3qLPwKcNr?XGhd>(Gd+0Z>kEe?{7;zd8C#X_
zj<?UhOS-O-?|HRQEY9iX`^6JOVA8`?SM-=ihrv(F_E+|N%N7^$qNdN9Tci`$_T0`u
zz&tk6;0XeVUKpJv(Y?b5SpD?svtR)`ExnvaZMoHoJ~@t^>VZ4p2Cv!tI}RP8XBuI0
zAk{qSQU`lP)->)NhShGT>Op`XU-ihf;m5llb~Zp1tnJ|j5iDYog?!~Z@zRRJ%Z}8j
z;lCt0?--X-ohMQ3o~+(Xp4b+2GI`uJZ~r%omvq1#ZwQv!N#oqNXz?Q%mY%<=@F_?I
z%g;G9(6oPQAkmLqf|6s~M|$5;-Irmq>5n9U?lI8tYd8gE=G;ieLHNgW(s&W>NWIW5
z4g2(M&D~ZNj3wj~__ijE96K$L{fo>E94`T3@NtCQIoq$W1Np(S-IbG&K5Kkr$NpJB
zZGC*^MV^lLXOO3_Jl~z8`rOB3V@J4mNBB)r3eDEqJP>NJ-K*yVIQR;@mFet$Guik0
z2s#t?8v(F=!m6R#Kk%IK#VW5YW$YrW8^g(;hU-dA*ZeMzGR$lq@Ek+))(qS)Z}J~v
z1I7&dBjGJO8iQDEk#dBgu<#Ft$EhzRb^*p|up8+Va)SZBs06}7=6q6v<T>(VITb0o
zJ)>XfmRhQu12yKD_q)65lfD9;st>L7g<6T~QvANr`@*nOLuAK${JjX?osySNVZ5&g
z2jVgcg~&$?L`EpSuPp>#AQ8}{XT9E@Dcct)P^`3jO2&o8&OE$+&5Wswu#QWlKAL6`
zdr~2KOD$!h`AL#Ypl-(jyh%{TL1hyxd1CBtz}rNnv`QoUYd(J5RJKrY%@Fxj`dMA#
z7w6#;&0qb`Y7Cv$t%$0E3lRmJT%uQh=~JaY{AD*=TX%3!ng!uiu$YZBa>^0Lp+E2N
zVC;ACB(lc&KOm#aGt@E}802j|w-hs+s%U#Bg_$RI09ACv{=P24CD0{}^oD8IaprVy
z{p2{S@gItUU^=xPVz!;N1N6(OvAdpoGObR6Zv%6Xfd(-x5pR&T3joyImW2HhWs?UW
z9geoW)y?uRX;q0kgak6ddf+WNmH*-RJUEGlvMZ3DL+e_BX$!S1;UVlWKAs}pJEr0&
zo(m7VtsJ{4_Q;)J;KRykX#rNuFce*lALo}1PF_`U?R)!O%4)=Q)sWBOn;D%G&N`GY
zx%hJWEbxkB`_RarlMIRd*NMfl`|EITqIoF6%<s`|=kWL1hpOpYbOZa=`p2*SlJK5C
zUDyo!hLijs3Hn#&BA4UIL4F{e=_Z2@o#=XtsjD`$%*s^W&WS8d_8hCZNJPPzJcI61
zw+HIkZardonIO0&SRTDF_aW|Z^Te;X2FljqZILjc&E~?}rr^_QaPB_Bxaono&jdc6
zr8S<qe=_My_$Bpte;&@0s$R1sJNtq-ArGd60b<iin48hJz8<0t_DmYt=ro#UXy_P?
zuwy6=uuzy3Odr5?uRPyiv^%5g^T|{O;g2Xda03UZlw{*Z{Bte*H1}Xe4RcrE+twV4
z`Y(wjfqJy$`jNBA2!cFX`At7xzLi{f<pU4SQn0cqSbC!)1W-a2{5!l0>G~_pY<TRh
zIuFm()P{s|59^>+;V|^(h|i>3;<%IFm#Y;+j_^Z{X7Udce<mjDo^>YzeR~o<4tPq}
zd+ZjIE^){#p`sKP!lP#m&AgbFQugG3R-9F(a3lg1mThJ*o|+zqMe`agTap`dC{E6*
zXXGf49nNUTt47le6+KPp78pPZm9f){lWgkFf55{e=6mrIL}(mQ$S`#NqTWPI-$9}r
zYxw1CtkG9WOYOyCUWgR>wr`_S9bKs_HO9I4In;l!fsd+P{QjHV+)3*Nwo$N?ge%a&
z;$#45no2*fqIx6ylkVfJ0|3e6-<`j=fR-fNWd6D#8yAKnl01{H1PLPs7+-I{K7p2{
z@L*T3>Rx$<>L;IE*<T(&euho^A;-by=!GfuPqRx`nhwcoqT#TBUsWow(PtQN_QxF3
z(TOylc&NMvO)#J|rqmD3xD=U7?*8`aGrze&a(Cf^3Jv?VDA+f-oG5q=7SNm7F%K{<
z8n)kU&Y&}%l67}Cv|B5a9(G$8h)=vHP-er%I~U*CeG;>`=$Y>>(X!Z`vDek<^5{eL
z!Ojlfl*3;Vjo53igN(ybPZMr;l8bkiiDLK%Z`3rPwPu(WeV608s7iT$?;vr=Z<<|(
zI{@(^@Leu0RHo<Y8oo4*-TP(LHKEYo$1{f76>l&z9zH{7P9KDNXJM&oo*RmG?_Z0`
z*yU*6Sl=+KmLX*1uGnL)C|KyozZjoFb`P>tz8RdWFCvgK;ph})QC}d0n5^1$v&vgW
zETQurN=)HQNL<&iYh3it?A~fiwXRm*#(aJ2Y2#t{Rup_sxte5T36Z<ya$;y!SiY6f
zMfU;H$|k{u;&s*gA-b)fYjA7caXDP};Y8Waz=O*4Z+3^;TMa6ZRHm+EeE|2*Zglv!
zux&2NbL#N!|LnSUgGLf=gvBI6T-UF6mz!-_O6=F+|C0EvF8(FaJZGX8`(0C0{=bpW
z8(;VH<l;hXBCQj>di&Vd<*fzVFtdK%31XgWHA(G(h78f+1n^`moMvI0@f!4EXs<|7
zzg29Y<Lb)KI@%ZQo$}Ev>hM`%EfYi-d+W%h$eVUpxVc8-3ry)9UScCmbim~)$ewS%
zRrrNRCz!anfWA3TpLGz4&cnzSe100ks!A`ua2gwXS?=(q(};yNIDv|cc|I;F3!hdX
zXxapRl#b?-ZnrB)08InfI{M~$OTdkjzWB7ns5o0mw9!rCG2{}M=%IU$GB~T$?){22
zTJ0=!^4M-9FdFqF*_V1?Zmu|nNgAIZ!apCEV4q!-)&ZLF?W6kkUQ$29iki57@kMH9
zF1B0$ne;|;p_Us<{A%nPs_8EAcvd6<Qi!|QEPF{@T@>q8yKTlCEt2G-M|mo)WBm+!
zY8J!-n!zfw=H0?T(zP#Xr<wW`5|8i1w?UJ^tx0xF*Sy1)#b@6gou|p0*?E}HnlxwK
zRLjx*DJ#AHNtz%x6k6iuMi%4E3uQ>wLIq^ECRi$=RWM#7j1OK&zOk!S!K`LiK!%gj
zg%`zE<0zLs2)Zn+KK1sQeL-_&^o&0o-`(5nEEy}yihhP6W!SxNH-F`r6zC51aL93c
zCEcMMZ#6$4-Xj+n)2Ob?7B*&ej}j96j-o8OPgjSAYTIV`!@;?Eju86~E_*0@b7dJz
zjL$}1w4)PyhByt?#-Pam)pVU<O>EINih_!QNSAi6h*aT%2vQ?bR5}6zQlf-j%%w>Y
zh=L#;1?eRM0wI8OLNy>IGzrqB8Zm}qkP-qUBzePq@BPgA&YZpX+Uu-+_BWZC@ar~r
zdW2JcUDb5Skb(;AUpOU#udGPKw)dSl2$WfO-omA5*4jZFIo?^|3wq<`XiJl0bxOpf
zALxl*n90?9LvSOwO044Rf8+b2NSV3LEx#z+`F5FO2Trl<seTwfr`V~$&!m;~Oto7J
zI+GJanMwG3kL7>kDl6hBwAk23ij=*I64&`n9g_8AvYe&0=+eKJJwGhviXMMG5i8wT
zacKGAuC~ZPp`6q8i6a?Q3o+xM{t<R4R^AaUta#~jn?|?EiJlt|2pJ;M#VfIHA@@jf
zR#Updzq1KjOCQTrg}>{}6o*_laqz&!iYL0hneo`L=<uogGQ&5aB(49}uaB78bXMhY
zr@;pnboO(-`MZz?n@93$vL_E%OHCY}ij359NVBW#99m7Mrv?aH3JZ~Qy#{On*LAZO
z1r3%jf2q_+<yiYW5$`?ms5hxRPBS<y*}2T^)CD3;CU;u=bwC1($`y5<DW89E0MFIe
zbC-uoy(A|_Et5jRNtO?9q!@9?%0eq@`g7|Qgj)(1XF}&nbg`|Tea`E{CJsJ|oBn-%
zL95t;^@l%2wFV32IxnES1{Rb|P0y`vpfhg%TaVQ~abX(I<y`+Ba4MTnA_jZpZE;@X
zb%1cb<Nf9gKKA*MlUKy=cRG5h*b*5IWoIq76LOtz?TgNCJNqBlA6WSa2Mlcudh<-M
zi_WKn40Q9~t+KNHh0k6XA4=ADM=#X=7zr${5k7F<c601NvZws(ClV$Zt@97I6(`vD
zw<IZyrBLnXaH40<wX&+0nR4?yn%VDDVG8B(aU<<2Nby+1+UD8G;%frI4s{L=PZns8
z-g9X6@L>7G)T>J7H}AId*^hvexr8<H|LV(m_G!}GZxmpvl`9!MR~ACS1i9qX_>K7f
z`}W}WM8B3h2a)G=SSW8_d6wGMpd8smq9%NEB$|S$Q-bGV`bDnKJOAI^Deb2avrnBI
z67&8V*_EowD5aM*C7oQ(ZVYWJ{!G(rHiD5V#kGHPR~O5al$~*ZE$P2C{z1%9%uKyF
zM_$wCU_)0#(Y@Ko6-v<4i96&qr<q|ct_N;dIY-WoSt<uDF#`Yj_Fd0w=Ma9b*gr{P
zgObZOKS)eW%euJ~pFFG}j@RpJDT&N_Z+aIrW_<t@2!8pxDy?u=R3^WdT3TEDCxZ1I
zp-*U3f`W*)y1BCHw6@1`*TkdqgttYM)N>WD=b51Rq~E>cCC)$Rf&^%r*7`~??U*5f
zwHvW2dF@NUA#hOh*VG5?Igt@#gj8Ux^E*MCnH9Y!12OKs9_ngrFrl{Q;M%W>O?hn>
zDDQ1u(-*L^S%+V&<Ks`6wx70==;bgDiRQgCgH9$7HqY^QBCobOuef6&pOB7a{{4Xu
zv~1r;z1`80lA7cEj1tuJ+YJ{vcQTl32KQk~apE*JJG;MJ8aOj^sg<4FOTDn3-SO*C
zx?ST)ri}k;kHF(B`#@w%RE~ko>d2ICkNCQ?ht#3|d1Hq*l6$pPb<*V;r$&y^lY4Fq
ztBX!I$_q2hYq{mZyBXI?`L6u*70bat(ogIONed_G**WOm_fO57wD`Fc!T#=_cAx!!
z8XKnfOE3FF`+fC1S(TnOs!OcObSQ?~ZP)1w4z%GiGv3z?DD`ia7VK9%IA=;Tu~2i>
z{0P4+fAOx5r1cfebI~q8PNZ*K;1*(AP9_gDlp_qKTIJ<c!h>k*@re@i>e@c$uEvTv
z_1&vCdDZOWYsx11n>)6bh%q2)(njae`bXL8b*Yqc68?@%xjQctbc5ohEN>M4Zg(l6
z#r18W&?T7AWVHd$pc2Li7sL9~*hBTe0;!vIa+_MTQR;eI*Lodhki{C%7nUBOU{|e|
zm9$1IwbnC+{bYi;A0+eHxpwJV(^4`n>vjIQWHwY><2ktLEE^$-^Dp&KLvN3@>L(94
zj~A+T>PyNM&Ib9TKbPnZ2n^28bL90|`zSeVr<7N_HL+ysPlxC6So@!8|M{m=-zxuX
z7<wM)*tA2<q|H_=Y|y0POF@ANQp7i)x)sg>zVm}0Q}RN|CB~I=if`LS+eN&upBa2M
ziV%3;BCqy6WVYf_v`X~WTogChv$$a)B#Yq|{vBD8*4z)C`@{q}M?us4>=$VJ#Y~XS
z;M0nBjjyMNuc&CcAZ1#9T-fX*mh$TiWPj@jwGe71;Dr9Tn;dy5{esEPR9hLTM!=d_
z2P5Nu9eP*^@1%>R(aVrjF_J^Q2Ba-{_jmXR)h6%wCQfHyhw530?IwSl0`C<mPp4p9
z$ns(b<Qt=FW_h{e;J^Dft%sEG*-EULQ`4$nAc@fdJCBI4x{n$1)p^-WJCag|OKa5R
z&zD|w5rb8mZ<&TH$p^k)E?ZOlmxd}{fJSIa@tKha0tXd-nwvVbMa+0)Z_H=O8GJ`X
zcnZv(rBR(w3gQt#2pMTJ^58X_8N=xN|3JAtcTq9loI>ha*TQ7aoWFo79ta5yGgszV
zQVg|?ICq5)UBv_?o6`(~6?<V4N9%DP+rHr1P;#mU^P`jOOc0E_n873XD$5fU1K5IH
zeFf8reXQ_3!{V{n)0$+R$(1hmdFgW7@yeUk{*Na{8(+T`Zs?l+MZWlxfYlw1o8Raw
zPNVrHOJ4EC>zw>Mei?7gd6t@eSm>?I!<Hr7`KiuIQgKPsc09VwBGm_a_)bMR;cSU$
zA+LGe03lA@#oMq>IKRf7@C<3=mz*3K8D#zuAIBYxb0%Lhb95g<@dMr0jZmW?H{|$b
zD7WjHhPkngBba?k_QQ{7zf~YD$arW^7a7IxbACH{Tv|t<nTlJiwlJ<26%U51UlYoN
z7>A*P#-$|icjtoU;vAcAbj7{e+e0bm@XrOJRM-367NugI3gpuABq(K3{R(KCerZ%h
z3o$`KP$e<M<hss-pWQ_|g=(zV>0U9x!hT~}k##2EsF966l)NC^Qs@u&(<UCMfn;c5
zh6PL;&Pzt#c*7=Ih0WkUNYRU|*(yp*#LC&W#QEYMzIiA>-a=ioyYFtGK#`GkP0xY}
zB`>oV>AN{RY4P6OEtbDTj1wx1P`GWCDgqo^qxAoP)!EVnP9zzo`6}809dYJ15pV6N
z@${Nbe940<UQSMy@kFi{O+>?FeZ=FZmD;boE$VoT4K~RSx`zv|Z^qA*8rD9E5egw0
zWIev19ryq?-}lUaz6&`9k@J}^+vENBuI9<@w=UZik6ylUrUivNCmS@EkamE$_2o*|
zy1J$JtvuX?U(8IS`bfiz*h@247&mik1@kl?okt&}dnwO7N#qWi`S8%n4gpS}T3Pk{
zwF$*m|Hx>O2}%|6)OVjV^ce8P>$@52tf!iwqzG@h)D^>$4Y2ZdD;<(CbFYj(s9uN+
zwAzXf-ni@(?fRBHIQ=lZxI{;#bB3tnr`s9_y%a@y_RgQ*5qysQRy2$6`q?y*2JdDq
zDc0M39cu=bXh5;J4elOz-*y$f5&0=lXK;wW8rK%(0ya(^mv8s9(0!ab8b?(i-5YM8
zm6t^z+FOtRYP*~`byv=3^afX_zvqFwz-vB=)|mZx2QGgb(|${=o}R$|=g&G>Ba+Jz
zti6XDC8y>Nc8xU#p%<NAOGQ-GX=H!<TXh+4^`xs=d<8yKDKRYct>9zO&U;haY_9su
z@Di^J!vcP+;rm)L#gyIdktgj{1>wl*VfN>c_#>GjHE3nxwpe$u4CUZ_P-CIUIav;_
z5~Ac5(CBnxD&o!tgs$NY-zL>YxlxUd&LJ@qrvHpq<M7tXhfwmMh;1t#ucJ83ZXh>*
zh>?*;z+&xISX35f@H(&g#`^ccF;>(5=ix@8@Ql-t$Jx!6_N1}mx`m!lw~4Es1iirS
zZk#~h<P!KCa`@%H5Zfb}63(aga*M4;G8G>sVHYpHn`H3liO$`YJp6e4VwGKNp(Kyq
z0)t2Ayo<2q4D3!t86g^ZxPxBQlXvR+QPoiXie$DnmQ)*OK+*boV3AJRy2R=d<Lf@u
zn45Ep>vZu9dhw3bchyT*o`7Rc=KFP>Xu}nBNU3W6{c@{yW+={<5TB`te1+@r`XFi>
z9e0C>3bVGl(VhSH(+-#DI}zc!m1K0Vx+o9th@fAj@ewjH);2&OcD^9|Tv=TftmIeu
zR<Rd>{Ohxb8~j|SNgyG59{X<58NyPe!-js_FKWNMQ+=&a5PCIfAT5Pq#m0YDt7={^
zwXLG+mh1bfAXRcv*{zmSit_PzyspK_i64FFBUEC{j<BE0V@&Gp(u=qYeQ7t*{Zc%X
z*(AqgXiuqnkqbWMBzv%dI>eAgtM#iJA8`vMD(HMGJ3gc>Xa{wMvQrB{XNlrk=!)+X
z?`80;tD;lHlN^_ai%iQZGr9ekpk7y&9aM6x<pK+z8xtfwhC~vQbQ7P8e%D?{mb^@g
zI&4Olp2o=;`$f-(bT)65TSvLZF|t!q2{tGNn4BMuTafn<cdyhcpr7LIT@a?vm0!#5
zW%nB2#On}^?iJZzNIiD~$LeoD8;In+gOv+iIsLN(@j1#hQ(^&v+46`VM&H0bE&pzb
zs={|s+CChA*sUUcF7Heb!Zai7Lust7{0*fKMz9O#UYPmb>d{zW@LJm8&a`Yu;P5(0
zwLhLaK7&hDOw|$QhmGx0${6p~zfu+)wtGd42G^PlC%XfB!A2tPJLM0{uI6SpGeO>v
zm!_3<q4=&GH<R!SKT3?Z9xFQc*Wt(C+iu<HJB_jB%rLF)E?j7~i@^{~Q46(aPR*^A
ze@^I`f9`U|Xb3-EVsXAU&QEU}9AjE-K*}x{;ZXEffW5G)HXOAzO-0CpWmvBE%3@ZE
zEKy_$>{^r*@_Dgbh}HU}?lG91S~4FS@hKrX-nuF?L#0#Ew>aW2e|9{uL^a}*>$qoj
zDw@iMHA8HJ6LaT3H%#fu)w26msgvi*AFe<%uNnL`Iy7hG$?MfcjFM4Zx}$BiJ|WLX
zX=s-;lS!~6#J^~%Q%E&qeb3?88Pb<%wk1^^Jx@q-PRg?E`CRIGgX++zI|@H{(dLwz
z2|4S4mlsh+8F`ZPkf{5)I5CsUZ{`TQg_88`DO5~Ua`N4`dd~!zT~~Bd2h#Q2o@M3i
zkyJ**fQEZheDD!ct*#<bqKR>ut9F>ft*ZNmWWNkcI&esrt*Z(NM7>OZF$=NX8!s+1
zd&;h6*mfYwd&1$QBDb%JHm?O)Yz|`bo3VaspQ5G&NB{5B1{Ad?pQH-Gy&nyC&#+-j
z%R2t#Z!<w{D|E@<zL62MJql%`hH!kKNzHvq4hyjfzCxOBO-(FiedCHAYJ8=VJuw~U
zevzXR9&_p~qF}w~382M-_3t&j56z(_3T0Ckuz?Ggun%8y*iyFDU6%28nw64B&ro8%
zp9BMwn+sOYrh5cUZCLfp@HyJ^=-QGJ+g^n7=;eLx4U)YVBEHZ+ohIg3@lZKkJr-Nd
zDz1;XE+r7lChh7Lo^WDizmIpK8Ez@yY+3$D+-LBRI;Ed?2l4>92A;Sw-mrs;Mskaa
z^6GXaeZKA;_Vx0dqC^KO&hx^Nhr0jyQ!up~t)-{>eyGfp<{~$~MI7K_sFMZ+xmEHO
zxmu}M^ak4S<*26L6ZwO{CJR;;sccltoS#NZ!GpaMX>`?2&xZ=nufO)5ItMS)2{nnC
zFpL||IZ=Eu$gAjC{jhLdf8YQjHHJ6F%|w3c4uPaJu6ZWmnu3Cx>Xhq7DJ#R;(Vq7X
z>C?8O`N@yvd#xt*&dTCMD_6d5A+2!a<$T4Un7=+Py|d_7w(I=fWKO#m%<*8zcv7di
zW>m`y75k=_oGer10yq8ndAS0phKeq&{>TXQlE9n=<UySJOGW%6zAN_{J#WwAQ)Hyd
zO%kGWiscHtUPse)@<!W=Zk~~dNshRNY$>DP-0&)O$mtQu@x?za<YDbcoI{5Ey@0)H
zR4BCe0J$o7wb%NhpHd1s_oXy>G;KuN>a@ahHQTi?q^<V%r8_?ABz-~S7hlh)H|i-3
zTnU6xq<EJWG-UU!Sh5<2?`>U)RT1pi4*Nj(u!I`8-sfm<e*dM7Ez9^zHPaL6#iZ{}
zB_8#&%{YjRocvsbu~VEuldSo@ukOQ!sFotl(gL^Q#(c#*TH)*a$Z=f{=deJSMPQv)
zZ>|J6Z?EFfJGV25Buav;^Q-Jx*!tH;I2gB4ZMcl8kp7jgr98DMAwNFEiSp*w4YZ6F
zc#Mytvp!Z>*cfZhm^>>n)^47uM#`&hI<F3HA<ktWFF{L*Udej?Y-y6i<E6I4A|3ws
z*>I%>UBle+Dxola2kxA4SeSJ*e`jV-6K`qU^8LCkB&s6iR_=`x?Oq8df9S1M|Iv4v
z-(+*KpZvfkjm>=fUC*M(|M90b!sSV8*j&cUwd>!lEDCHwSjMBDWbG*`IdglRNLT0k
z2GrCCt}VVb5E*1MK0f`QHomc{7k?i|kIeqNP<C=!eW_IVtMj&&wlbI8ptibMHLLqt
zl#|t=6{}B7Is9_fr)Zif9kGzkjc{K6b0qua__1OI$1ArRJsqYFSpMPXQ@zshr|@Wb
z&x~s3&8VFHO=(|TXjg#B6I*)nbFy>&vG*!h2pMuS1x%0!rFgl0Q__sgzz{zo46z@y
zmno?pxYP6{KNvll3HoJC6@3FIiH;1@s(w+ZB5=AZr2HUEfnGE}A-1?L$pnpgFhLlz
zQZ4Z!digB%38O~Kp9z}1UQP?7I&uF>r6Am4i^K?cG5lx<WAr&3ho)D|VKqY|H?;5E
zCEuIDsz)fC-Hn5LJ*$6AU-DvtDB^!cYsR<2XBgwZx7qeXagg`6Oc3oI)rm8QKrjFH
z9lX9fm9^@FWrF+>M%}w+w7a#o^d%SaZ!zjR9o$O>B0#u|LKgSW_-aL|GeLXO<nk|^
zB<;_C(>iv5pKOdajM>&<4ZU>E2C><o2&Y|!Z%?d+nB^<bY#O@6774D1Rek{`=;`tD
z`ETi^-!Mm`(3H2cOwiFg>Jm4R@lkB9AYG9Ovd%xx1a+w}K{%VW5bc0>@J8BGMBC_B
zCaA6*zb8Y7v5orQrIbJ2pmmHk%!2nOHbS)h{27zKTLcj8qwBb_36qFD?W~wXCa9VT
z@_Ob1o^lr(i4bFiVIW(Fg@BbTP0M}9FQw15piEG!Sv6kU89>UH3A$PM3Vs(Zwr)*j
zf?j`tkRbCHFv0m>n4qF2%rREnzhD$JG*%NHT#&&8MQMTO%cr-(XBpF^A3d}x3Un2|
zJN*g$>TuMkiC#TRNMiiCWrrvRfR04ickf!#%<3_Wsr)r2=+rI~qy?$QYjHECe`j}K
zf^wLkbu)S(b%`^t3^KPE$GK;h1*fokqSYf{Y&g0u&At(;u-TBz1igoERPJ?1j*5!S
zVbH$<=u6L@M8-2gyV7vL1e9je#7Cd;Q;*;TqP71VPLzRrKZ|36a&cx1VAjWDKk_T-
zb>9>v_tlUD$*-L~^tS&pf~Hr`wWe;ir!zsTPr-ktj#DC{0iUD41pjI{kx03t496Wq
z74bY4GDk1A+_zhXtRkoz5c|(Z<yYa}6x<Xo|M0SyUTPr_1~)+sLW4GCUX$Exu=XWG
zp&yT9d#4L<p%+Mpdg|C!CTIl+L`>Bf-bA}*OJr2uN`sU%?h!3FLL`Z&8B@PA!9h6y
z({85%_%#6`fAIr=c7z8lsDR%~LUxbS{x60UIXus@Z&%w)y?Uhf9}_Snr@1nC8!izu
zHnCCwX~Jv&TgUkJJ13o16?dQU@+^a{jgBU$L233)oc}TK+kX@?%O?PfeJ$S%sBQi&
z78?|KJV}xUY5w6ypMD0Xs>@vtr~v#`8y1@vsfX-^7P!{~si1U--D+Wie4d4h?b<~p
z(S`Vzm(8lbBM{VO3f4`RZt8c01(-_&Cc-C(j2e2)w?H64P0J-8fYGh;IpCB4n1+)I
zvFFY9)c%Nl-I<{l@&I5Vs5x+-$k~Z~yQ(D(4SRs8HX9*KP&tk+2XEG3wJqP=oneBC
z0ooQKyt~25Oi*)s2%(QY`rLjM;KLNn2}ptuy!rV*W}6Ld4dnZ&`)iaAg<(3F25ERB
zw%(A(1pO}LIwAuTiE5lQ_j>0Y`lve-Q~}^Y3ekqFA?8J*TT_olUBL8{fGMn5({Ws2
z3eMv+efsfw1Pc@7s67L~1fxMHOwbov2g#KRh}Xz5DoTJq8W3a7MfZ&Ph%;-9MPMdT
zO_%20c=u>D3{Ezq2SpxV3wYSh>SneX(BStQaC?&G#F+)y!1$(%Ee7)gO1J=DK3)&J
z2PdWA_`pF00B}+F0e37(A!b?BZvgld<Lk7lJ$LHe*R)6;niD^Pfu=Xj3o(e=2Cu)0
z6AK{d1BCSO6JRW$9~_iBSmUM{Jc>9buK024@^$Fb0af&qSlV9XOe!_JTsDh>h3&yn
zqau(JG(sH#+hri6z5zSQ7(}0TtB>FgIo2`n&qu^70P#O!+D2v>FA9MD(e(Y$)P|E3
zi4$jdD|0hJE=<sj4e37-YkKaL12`mKbIeNZ<sachsbkxX@Suz)#>)UYHKK-nCm%tt
z{)QJ@4-j@myKDhQ8i0(A`g2k+9`ER*{~ED99@`m3c=tfm2F2#+pP;Fm0rl|TtC&L|
zvvNm7X`nx#48o^=1r-jK(}2YC6S);gkzacD?b1W3e0%#qUI9@I9|ZP;!7U~THL5T`
z)q>L7aC2KTIJy}PTAN9q3FxD0!FT_gTDj{3Zf+N@V}f!<;!;=XOweQn+`h+hR~XX-
zc&9?2_6E~MFbsk=ItGyko}=g8V*CMfuBIRk*Y-LT00}Kzx^@fGihHJ=YR&|~J|Bbr
z1K2=$04HPYs8<2VflJA9;HGwk0Dk(zfbt`5+|i!GMu=Ak8@=J1VrV20C<$aqMq31o
zeYF*U+YLPV3r>w%%3lXYH2E2`B#{oAeY-3ds-y|r5s;{eznGvoCJ2pDSR{Izef@8D
zdw=y~%#e2afa;QKinybS*qy{w<16r|fKe_c=td!eehDZ<fi!sHssaV`*p)u&{X9Yx
zXt=bFSL6khr$u0eRy7Hs=Ott2tLX6l&i}N#n^v{2Fnea>XfG0o14@H7x=3!;Pa@XD
zs7KNO1n+@O)UX%%|4alFL^S?5??7FiKCa79Y&d|_&D9zT#(nJvxNX!G{ymKkz!s=1
zpGvYQm}4GpvQ(1cqCo&sg^G26GUh<V+D5K}$HZZjV-VIQDQK@h)Q|W&`U&-8Ik4|u
zM^MnN7wOX;aEe)bfi?!e-U|1k<U_%W?m(QsFNGg#nF8`SV>^Jn%}`HC(#U}5JiyW{
z>s^^3l3I!?cP)J5*x!#ZN{u&ApBnDiKf8e01u6rl#W2kVeS~Sl!RX1$9LIV;1tC41
zIm-muWG6Iyld}hk3g84Wi&Eouk-ik%LFdFQ9|I{QMtX{!#4=#F#NU$POppYi#glN7
zY5$|hKdmct5kNhrfdZhV3q%Rz{pP}0>gt~rx?u#kch7+dYJ&SX-`(7`aHk6CFhL6y
z<PK4w$@8T6V)sK2;J0DN+Wu-Uk_n>P&{dhBK0!(yPX5o-Fgksh<D#>=<A%dgN0SS7
zRdMK~fOU39xQy&b|L*gGNZ#(<guCaVhvnE(E;U7Yl!<v=R%?Q*EBM=*PF$Xf`kqv>
zHm|Px+V@}VgH{S5$YOWJq@&;^)RP~n0o+18nC@hmL@p`c^RUa<7_M3s+vMw<qZMXO
z3qtqB&Yh(e*~xGC$`pM!aB;e{6#Tw)-ni|K*$_%;sG)S0=6Smn+QXmpIc=j!N6;z1
zEoj;+=2byYs^$GwFL5OTscjAKfl|Id6u5yONBWB(6OFX_)W@DA!zkMfWp?fbiN-u%
zWmdP|A>be-h?31}8;dXU{$y?bhrBuWKvlf@Hteb+Tm)G2_$|dkFA3Yl*ZWOwB4m&a
zCpV42oaZ=R+!{^$^vHr+&{e>+on&>~LO>5ouwiEh&jvm4D$#srT*U+tj-*6dF4n4f
zPbQqX%C|LfFs6C4CtEHl_npp-?EXlNsfYeodolUioQ7rUw;#L4PeMa3XiCMuJgP44
zD>|Hhv-Mg^<gbLNNTki%;D^enSNU!dsf6857KJ!=ncl0b8s@wiu1&MMG*r>EiA)8-
zR}!#l9y`mYj_MoA`d^`6ul=-Um%e@TAxGx9Gim;5i;;W@r(<p7J+C4-lUYUhi1Vas
zE0?M3-gQl^IbA={wwfzdU#*AymG3%_0Z`P^_38EZTSYu|I_5SGMy4*E7I;&CFU<3H
z2KJ<!BSPlI&JTG45&wNGkhH8g4*B!~DpQ*7{&`COr#-!xHfE!lGFvBav(aS9CMl6F
zs}YI#{PNjKq3Yue{B5^8OLa#c^0TdJBS<H*P?nrxfAG^kP_Gx)SA?*(J5a;15Uw{d
zzwJY&HD%7mA60Ud79CDq9*8dDGI#Xj{b_1i<*Ac)O=9KfQ}BDo_Wd(C50nerEm*Ev
zXU;&q=~LEfQ0{)`@eOl_Qmja;e1XrTZCZ*s_T55)@`ujxn`xRV#oYt>q0&z=F}!Nf
zzAN(w;a*J~(DQBt#tNz0^@EYLx6@3*+2~=-kP2zGgD-{)?h1Yv^G+9qqY~>)8j}Y$
zEbOv`ovk5-jUInlB+I3VA}*hPm9xUP7~Ei2twZQ_ytIplu_k;lT*Jgr(0B{0{JOWT
z>IXU&Md|b(v@wSO<2tLXD_%F*q%D*h&}+zQiK4)THG{XN0&}};UAYNK{qm37kPf-B
zPu>tx#9Kd-E7`85U)r7)V^u~WU&&t^E8DILv3dwLxY8^2H^-uv6#8P|6{*VC?V8p<
zjo14Oujuuy9EShVG4ZKi^A97L`_$*V*vrD2GeCsoEWt!0x9Cgzih2Gf08h-VY@r`a
z28zYyofacE^m%V!e1?pq;U+Rtrhm;DnZ53h`raS%g^WNGZ;OmicQ&J<H5=_$Ll3{4
s9+p;&(;w<<;>fu84E8kd?Q~oVytiMzX1QADi^Rn`H~iZ6d*-+Q0pDc)9smFU
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -13,18 +13,20 @@ browser.jar:
   skin/classic/browser/aboutCertError_sectionCollapsed-rtl.png
   skin/classic/browser/aboutCertError_sectionExpanded.png
   skin/classic/browser/aboutSocialError.css
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/aboutSyncTabs.css
 #endif
   skin/classic/browser/actionicon-tab.png
   skin/classic/browser/actionicon-tab@2x.png
+  skin/classic/browser/appmenu.png
 * skin/classic/browser/browser.css                          (browser.css)
   skin/classic/browser/click-to-play-warning-stripes.png
+  skin/classic/browser/customization/customization-mode-background.jpg (customization/customization-mode-background.jpg)
 * skin/classic/browser/engineManager.css                    (engineManager.css)
   skin/classic/browser/Geolocation-16.png
   skin/classic/browser/Geolocation-16@2x.png
   skin/classic/browser/Geolocation-64.png
   skin/classic/browser/Geolocation-64@2x.png
   skin/classic/browser/home.png
   skin/classic/browser/identity.png
   skin/classic/browser/identity@2x.png
@@ -53,16 +55,17 @@ browser.jar:
   skin/classic/browser/panel-expander-closed.png
   skin/classic/browser/panel-expander-closed@2x.png
   skin/classic/browser/panel-expander-open.png
   skin/classic/browser/panel-expander-open@2x.png
   skin/classic/browser/panel-plus-sign.png
   skin/classic/browser/page-livemarks.png
   skin/classic/browser/page-livemarks@2x.png
   skin/classic/browser/pageInfo.css
+* skin/classic/browser/panelUIOverlay.css
   skin/classic/browser/pointerLock-16.png
   skin/classic/browser/pointerLock-16@2x.png
   skin/classic/browser/pointerLock-64.png
   skin/classic/browser/pointerLock-64@2x.png
   skin/classic/browser/Privacy-16.png
   skin/classic/browser/Privacy-48.png
   skin/classic/browser/privatebrowsing-mask.png
   skin/classic/browser/privatebrowsing-mask@2x.png
@@ -171,36 +174,34 @@ browser.jar:
   skin/classic/browser/social/chat-close.png                             (social/chat-close.png)
   skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon.png             (tabbrowser/alltabs-box-bkgnd-icon.png)
   skin/classic/browser/tabbrowser/newtab.png                             (tabbrowser/newtab.png)
   skin/classic/browser/tabbrowser/newtab@2x.png                          (tabbrowser/newtab@2x.png)
   skin/classic/browser/tabbrowser/connecting.png                         (tabbrowser/connecting.png)
   skin/classic/browser/tabbrowser/connecting@2x.png                      (tabbrowser/connecting@2x.png)
   skin/classic/browser/tabbrowser/loading.png                            (tabbrowser/loading.png)
   skin/classic/browser/tabbrowser/loading@2x.png                         (tabbrowser/loading@2x.png)
+  skin/classic/browser/tabbrowser/tab-active-middle.png                  (tabbrowser/tab-active-middle.png)
   skin/classic/browser/tabbrowser/tab-arrow-left.png                     (tabbrowser/tab-arrow-left.png)
   skin/classic/browser/tabbrowser/tab-arrow-left@2x.png                  (tabbrowser/tab-arrow-left@2x.png)
   skin/classic/browser/tabbrowser/tab-arrow-right.png                    (tabbrowser/tab-arrow-right.png)
   skin/classic/browser/tabbrowser/tab-arrow-right@2x.png                 (tabbrowser/tab-arrow-right@2x.png)
+  skin/classic/browser/tabbrowser/tab-background-end.png                 (tabbrowser/tab-background-end.png)
+  skin/classic/browser/tabbrowser/tab-background-middle.png              (tabbrowser/tab-background-middle.png)
+  skin/classic/browser/tabbrowser/tab-background-start.png               (tabbrowser/tab-background-start.png)
+  skin/classic/browser/tabbrowser/tab-stroke-end.png                     (tabbrowser/tab-stroke-end.png)
+  skin/classic/browser/tabbrowser/tab-stroke-start.png                   (tabbrowser/tab-stroke-start.png)
   skin/classic/browser/tabbrowser/tabbar-bottom-bg-active.png            (tabbrowser/tabbar-bottom-bg-active.png)
   skin/classic/browser/tabbrowser/tabbar-bottom-bg-inactive.png          (tabbrowser/tabbar-bottom-bg-inactive.png)
-  skin/classic/browser/tabbrowser/tab-bottom-normal-active.png           (tabbrowser/tab-bottom-normal-active.png)
-  skin/classic/browser/tabbrowser/tab-bottom-hover-active.png            (tabbrowser/tab-bottom-hover-active.png)
-  skin/classic/browser/tabbrowser/tab-bottom-selected-active.png         (tabbrowser/tab-bottom-selected-active.png)
   skin/classic/browser/tabbrowser/tabbar-top-bg-active.png               (tabbrowser/tabbar-top-bg-active.png)
   skin/classic/browser/tabbrowser/tabbar-top-bg-inactive.png             (tabbrowser/tabbar-top-bg-inactive.png)
-  skin/classic/browser/tabbrowser/tab-top-normal-active.png              (tabbrowser/tab-top-normal-active.png)
-  skin/classic/browser/tabbrowser/tab-top-normal-active@2x.png           (tabbrowser/tab-top-normal-active@2x.png)
-  skin/classic/browser/tabbrowser/tab-top-hover-active.png               (tabbrowser/tab-top-hover-active.png)
-  skin/classic/browser/tabbrowser/tab-top-hover-active@2x.png            (tabbrowser/tab-top-hover-active@2x.png)
-  skin/classic/browser/tabbrowser/tab-top-selected-active.png            (tabbrowser/tab-top-selected-active.png)
-  skin/classic/browser/tabbrowser/tab-top-selected-active@2x.png         (tabbrowser/tab-top-selected-active@2x.png)
   skin/classic/browser/tabbrowser/tab-overflow-border.png                (tabbrowser/tab-overflow-border.png)
   skin/classic/browser/tabbrowser/tabDragIndicator.png                   (tabbrowser/tabDragIndicator.png)
   skin/classic/browser/tabbrowser/tabDragIndicator@2x.png                (tabbrowser/tabDragIndicator.png)
+  skin/classic/browser/tabbrowser/tab-separator.png                      (tabbrowser/tab-separator.png)
   skin/classic/browser/tabview/close.png                    (tabview/close.png)
   skin/classic/browser/tabview/edit-light.png               (tabview/edit-light.png)
   skin/classic/browser/tabview/search.png                   (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png           (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png                  (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css                  (tabview/tabview.css)
 * skin/classic/browser/devtools/common.css                  (devtools/common.css)
   skin/classic/browser/devtools/dark-theme.css              (devtools/dark-theme.css)
@@ -308,16 +309,17 @@ browser.jar:
   skin/classic/browser/syncCommon.css
   skin/classic/browser/syncQuota.css
   skin/classic/browser/syncProgress.css
 #endif
   skin/classic/browser/lion/keyhole-circle.png              (keyhole-circle-lion.png)
   skin/classic/browser/keyhole-circle@2x.png                (keyhole-circle-lion@2x.png)
   skin/classic/browser/lion/Toolbar.png                     (Toolbar-lion.png)
   skin/classic/browser/Toolbar@2x.png                       (Toolbar-lion@2x.png)
+  skin/classic/browser/Toolbar-background-noise.png         (Toolbar-background-noise.png)
   skin/classic/browser/lion/toolbarbutton-dropmarker.png    (toolbarbutton-dropmarker-lion.png)
   skin/classic/browser/toolbarbutton-dropmarker@2x.png      (toolbarbutton-dropmarker-lion@2x.png)
   skin/classic/browser/lion/tabbrowser/alltabs-box-bkgnd-icon.png      (tabbrowser/alltabs-box-bkgnd-icon-lion.png)
   skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon@2x.png        (tabbrowser/alltabs-box-bkgnd-icon-lion@2x.png)
   skin/classic/browser/lion/tabview/tabview.png                        (tabview/tabview-lion.png)
   skin/classic/browser/lion/places/toolbar.png              (places/toolbar-lion.png)
   skin/classic/browser/webapps-16.png
   skin/classic/browser/webapps-16@2x.png
new file mode 100644
--- /dev/null
+++ b/browser/themes/osx/panelUIOverlay.css
@@ -0,0 +1,46 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+%filter substitution
+%define menuPanelWidth 26em
+
+%include ../shared/panelUIOverlay.inc.css
+
+.PanelUI-pageControls toolbarbutton {
+  list-style-image: url("chrome://browser/skin/Toolbar.png");
+}
+
+#PanelUI-cut-btn {
+  -moz-image-region: rect(0, 260px, 20px, 240px);
+}
+#PanelUI-copy-btn {
+  -moz-image-region: rect(0, 280px, 20px, 260px);
+}
+#PanelUI-paste-btn {
+  -moz-image-region: rect(0, 300px, 20px, 280px);
+}
+
+#PanelUI-zoomOut-btn {
+  -moz-image-region: rect(0, 400px, 20px, 380px);
+  padding-left: 12px;
+  padding-right: 12px;
+}
+#PanelUI-zoomIn-btn {
+  -moz-image-region: rect(0, 420px, 20px, 400px);
+  padding-left: 12px;
+  padding-right: 12px;
+}
+
+.PanelUI-editControls #PanelUI-copy-btn,
+.PanelUI-zoomControls #PanelUI-zoomReset-btn {
+  border-left: none;
+  border-right: none;
+  border-radius: 0;
+}
+
+#PanelUI-zoomIn-btn .toolbarbutton-text,
+#PanelUI-zoomOut-btn .toolbarbutton-text,
+#PanelUI-zoomReset-btn .toolbarbutton-icon {
+  display: none;
+}
\ No newline at end of file
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7872d03678032661cced28b941f1fbd353019707
GIT binary patch
literal 227
zc%17D@N?(olHy`uVBq!ia0vp^Y(Ol}0V0ox?vVykk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5XT0LDHLo_B{4UFbHpulmt?oHP2_wSbbd7QFpXP5AN%<Q$1
z>A=KA-|NyGvfrL+FmyZFu&Hytfld(H<m%q2>~)57d$ex1x5Y(lxNvmsT-hCM7B4@`
z&trKhRmN8+o0RRTa;5LQ^^MzX1-(}t`uO)gDLI!gb!)}W)lzHtj{Oq5eqrA#Q8l3+
Z>4mxm7tMYeO#nKG!PC{xWt~$(699F7SXlr7
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9374cbda64b64563200cb6b8488ef3495781375b
GIT binary patch
literal 677
zc$@*H0$TlvP)<h;3K|Lk000e1NJLTq0015U0018d1^@s6@N9ht0007PNkl<Zc-p<!
z&1xD^7{+lE$2!_72`SR1P%6?&KWHh9X*9+d<40mlQng7M0<EQ8xEF;8-h(@@z>Qlk
zz*Rueg=;ri1XOe(Sp-26)8~aVAfW{3%(TMqU5N1K9Ovka1}`Hcf*y1rz$`OEZf<Tg
zYNFRC_yF(VB`m@t5J3l8m{mJYBiZlwf1aP8f3H+3hq+uXU^bf_2-(2`A_!`)UUPkY
zy$ex@!!h3cadma|yH=|m9~~We5qbr4@Bp-G#c4$TVh;{SqtUN&xg1+qSXf5vIg1NY
zd^{d&cu{!g9ufG~?RFDOOG~SWy<qX#e;t<MF^b#mc8Wg*ozggk!&8bjo6Qq;^&3G@
z8s44~#ShZybWrh@v+$M-;ZCP>VltVW2tEWsNjM}^G?hw)5PZhHY8DR4w0(AVcEG-C
zQAs!;Q*byOex0A6cOz&5fj8{u5J@JJwB3u+(c%ejatIZR#V_plT+g%JG<+QVjYcDe
z*hdgS%M;$<;JduMq!qis$Q$-@+IBb`n+QGz9Zz_jQy`no?jUI8InOjaoP4EHX`lBz
z(^%uQ-fFcdyu$N6({OX5_?E}x2_k5b`&UV0RRM24pQly7mV2ydxD;^rdc8eS6nzMq
z<*b^9Q=yI1)6)oIZ@~cCY2upO+uId|T!X=2-)gl=HwgO4IKgK$chUH)g0*V38poFV
z*||1MJ`6B35-Gf_6pMT7^?KZ5vCzujfC&tszxzZ&DC|(lGI%a7E@GKXW={}=00QsX
z_CJ}pLDZ@pmN+5QZnxuwLLr(+BzAGu!#10ZF1|VG8u<TVcHaL0pr1FohJ36x00000
LNkvXXu0mjfU3W3*
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..060a3afa4abd9a732e2da16ecb57d0b4df0c851d
GIT binary patch
literal 153
zc%17D@N?(olHy`uVBq!ia0vp^Y(Ol}0V0ox?vVykk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5XtUX;ELp07OCnh93NIJk2(GVfL`pEtL^}ZXt{`~*{Uowo-
z&F$F#9d8b39(35$w@}3~Y(mekIb0{%wHX)|>dUV;d=$P4Xbgj=tDnm{r-UW|Vtq7`
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5b0c62ca637166ead5fbdac5e054e69dab18e7f9
GIT binary patch
literal 657
zc$@)|0&e|@P)<h;3K|Lk000e1NJLTq0015U0018d1^@s6@N9ht00075Nkl<Zc-p<z
zO=}uK9LI4R*SbxsL@d&#P!wsUjkJ_%8ckwt;zJ%ankF^`T1$KIE(R2Q58iwQUcCAO
zJOvDT@a)AyKt&JYK?G6LpYRtGA>ht#Dts=>?0k1-9aJ_P4kd-pBeFm^P=FG6SR9i)
zN-;Ubcz6cO@CMBA5k5b}Dme=3z@%2It;uB4ozLe_tJUhyR;%?J_e7+O%Hc6A!P`(M
z<h;7NI_q}3e=+XYU@$m?V+g>ZY&06Nx*g>x`dX{iuI6&NV87r0gWxIn;9!;%;RTB7
zEf&jqqtOUs;vW>)zmF7A1-vwwOp|DE5`D-p2a8}Xm&@mvFaUe=kYtNvv6u&wozSGa
z^ANk*rz(}oR<GC3DY`Q+v8#O*jYhq+#a<!Agn2MuUS6Ki_IZR5v&|}vMzhiD^}f?&
zZXsC0lOwboiA20~bX-EQZnF|hnM~%0-r2TLEMYnD@TpWP1##U4TSBph7s1}?bdG4E
zZ$hzz74Y0@wQl3uE;w1Ro?k;Ek=Vy|H+*Hme15apte>{o!GiVuu2m`(KRx{>3znZi
zox|bq;Q9_tvcZDo7`;oSQhxf9tg{ljS~bt}Tg_(EM^A2NHE&c7Phce;j~~!kw22|R
zxw)A|!8=hU=nV#gr`>M*F~$ySV$6gnHVrChr3P%Vt57H$WBew35o;Q~8&gtH1@Cn_
zou^nVj-yVxaaAk|BRKuz_5$?qf#W#$#l?m1`uaME!4A5~Dh1iCcerFU8dq>e_rl@u
rVLF`-)M~ZyD!pK13d|Aa|9AKw@hUgEwE0yI00000NkvXXu0mjfafUN!
deleted file mode 100644
index a5fdaba4bb0f223984253e0839b70b9f81f0e7f2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1a0dceea376d576199d3c6d4bcf8ac974104c4c3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0596cb28dd471f83629de71d56cfd8b348e4d9c1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b643bfc6f67da9c4934f05510b5cbd296e901bcd
GIT binary patch
literal 159
zc%17D@N?(olHy`uVBq!ia0vp^%s?#1!2%?mGjj@olw^r(L`iUdT1k0gQ7VIDN`6wR
zf@f}GdTLN=VoGJ<$y6JlB1cab#}JO_Qom>}1_KVG*Z;!vz9i^m{8Y?pb>W*Gqu{5c
z(BiaU>8&dUlXEn9r(`;prkQUJy5C%$TD!O8WmDvLh7aqRRg!)kxdk+g!PC{xWt~$(
F698+(Gw1*S
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3efb44726fa16622366738ffbcba296ad0277298
GIT binary patch
literal 932
zc%17D@N?(olHy`uVBq!ia0vp^azHH4!3-piZ|XG#Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS=07#QONd_r7-ikV=5k&zKdVu~=L0w*UYpqkI0KQmx}%*;$=
zE><;o02ddRsHmujhzO7&BO?RUE-Nc5C@83;q-1AjXJKLC=;+wp-R<M!lb4s*(9qD)
z(b3h_HDkt%Ns}gh`t)fg7_3;aV#kghd-m-4@ZrPGojdpK+jr{JsjFA7o<D#7+O=!f
zuV23k29F*+dIknBUc7kl;KAFsZ=Zs}D=_%}{ri_MUw;4o{qp5YAoum_*Kgju0jhcT
z?%n(M?|~+N{P+=QBhZCFWnaI3{r2q}P|J@WKYsrF`Rms&pvFIc{`~#>_gTuMcA&=+
zN`m}?85o(ESy)(E+1NQaIC=T_1q8&z#3dx9W##1+6qQv}b#(Rg4NOeUZET&~ynK9v
zf`Y@s!Xu&*64TOha?4wLdio|!U9fP?=IuLo?>&6#^u_Bp@7{k5bpPx3A3uNn{`;Tb
z7C#PPwB~!dIEHAPFP)U__t-(8W%X^djj~R2SPCY{MpSxMXezwDm-xP3e#WZ54_SU5
z%`ll2c=r0$yIKC1Z|Zd3Icu=-&jpj+XLUN4mHz+!@7JHA9q~ufgymzdu3x_Y`19>n
z{XEKd86CE_r~Tj2yX-|-?!9lJlD&t1|6H_7uX|$MGS#=Qw*L2E{!tswclz~(M`yLR
z&Cd)udX=Hv^T)I4-tw25{MIMU^r?JYA`*Gef1j`q!=^jcb4yFloYax6+Ro)5IOF)?
zGq*Q19c;LIwY5KkD@j^y?)SZ%f{R2{Ja6uqKD#?N&BWo*(>3Y;{$5v*+!D9cZh`8@
zEerR&*tU1AwS@oE&sDPJCCfV!7?m_HiM`%rJUOpuhGYucj1{>%JOA2T;ZyeH6mS&&
zoLf5CB`=TdM|cBI1CtBKx!b#L9rF}9%D2OjOHqJh5!1dem3QCBzn`{Kra*&Zf(F9^
z74FF5n#x)FJOzh%#28t4{Fr^`zkK)O<MY3XpXDR;o?iHQ<IrzV0`_$Eb6Mw<&;$US
C!Jp#*
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8e0cd509f524a09b26556f5c3f1dd2eb215824bd
GIT binary patch
literal 903
zc%17D@N?(olHy`uVBq!ia0vp^azHH4!3-piZ|XG#Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS=07#QONd_r7-ikV=5k&zKdVu~=L0w*UYpqkI0KQmx}%*;$=
zE><;o02ddRsHmujhzO7&BO?RUE-Nc5C@83;q-1AjXJKLC=;+wp-R<M!lb4s*(9qD)
z(b3h_HDkt%Ns}gh`t)fg7_3;aV#kghd-m-4@ZrPGojdpK+jr{JsjFA7o<D#7+O=!f
zuV23k29F*+dIknBUc7kl;KAFsZ=Zs}D=_%}{ri_MUw;4o{qp5YAoum_*Kgju0jhcT
z?%n(M?|~+N{P+=QBhZCFWnaI3{r2q}P|J@WKYsrF`Rms&pvFIc{`~#>_gTuMcA&=+
zN`m}?85o(ESy)(E+1NQaIC=T_1q8&z#3dx9W##1+6qQv}b#(Rg4NOeUZET&~ynK9v
zf`Y@s!Xu&*64TOha?4wLdio|!U9fP?=IuLo?>&6#^u_Bp@7{k5bpPx3A3uNn{`;Tb
z7C#PPv<7*)IEHAPFP$76e8@ngrQBaigqtZyr<_Gb!`MRW|Nr@lk@B~gS|_#pOnU!j
z-f5qXS*`*m%m=N!X6?K_E&Yg<=Heal-yf;lr}CDbfB!hoT(ltHZ&%`^WuB5X?w4QI
zs9j0ARQmk%&(Kv`+g>O~KV($9n^AhfIj8q*S`+(>lKh+ca>@HoOnW{%Z=-4X?zlR!
z_g9`(-SpR6ZK(b?WA|RkLRS6FnLm%*o_YDt^K$-0Jg2l*KUlHTK4!}HXU`_xUAJIL
zMCjzYZLu-4gfzo~)_<>Uba=3L=gx}%p%&ARe)f{-HCsJNq+$A*bsNt{P0LPIFTZP^
zShpw2S&7AI3hO-E6B;wu$G0rX2yjt2ZU1o6#}t8tgG?)xSXkyT_GMa0&d~{&z$(-r
z;c`Ix+uLgfng5^uWC;4n$JD!H=bMt-?oO!(E0dLO=JQ(hw)Rc17F1GXY4#NP!oOxp
VOnX#Gl?5n`db;|#taD0e0sv(ag$e)w
deleted file mode 100644
index f41b253d0bce22c49f06bba7bdf1934813ff3562..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a8215a283d57a01334bd53c4a864ad373cfc4cd8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5987a2fe32d7e26d7b0ae3f80625e69ae9b7d45f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 658b291d3940b0a53d321f54ff86e2ade53cf82f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 930e76588fed21ab53cd454f1e7f0d82989b814b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7de41e77b273e66b7578c11c96efbe054b1655fc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
--- /dev/null
+++ b/browser/themes/shared/customization.inc.css
@@ -0,0 +1,86 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* Customization mode */
+
+#main-window[customizing] {
+  background-image: url("chrome://browser/skin/customization/customization-mode-background.jpg");
+  background-size: 100% 100%;
+  background-repeat: no-repeat;
+}
+
+#main-window[customizing] #tab-view-deck {
+  transition-property: padding;
+  transition-duration: 300ms;
+  transition-timing-function: ease-out;
+  padding: 8em;
+}
+
+#main-window:not([customizing]) #tab-view-deck {
+  transition-property: padding;
+  transition-duration: 200ms;
+  transition-timing-function: ease-out;
+  padding: 0;
+}
+
+#main-window[customizing] .tabbrowser-tab:not([selected]),
+#main-window[customizing] .tabs-newtab-button {
+  opacity: 0.4;
+}
+
+#main-window[customizing] .customization-target,
+#customization-panelHolder > #PanelUI-mainView {
+  box-shadow: inset 0 0 3px hsl(204,100%,40%);
+  border-radius: 2px;
+}
+
+#main-window[customizing] .customization-target {
+  min-width: 100px;
+  padding-left: 10px;
+  padding-right: 10px;
+}
+
+#customization-panelWrapper {
+  padding: 0px 8px;
+}
+
+toolbarpaletteitem {
+  cursor: -moz-grab;
+  transition: transform, background-color, border-color, box-shadow;
+  transition-duration: 50ms, 10ms, 10ms, 10ms;
+  transition-timing-function: ease-in-out, linear, linear, linear;
+}
+
+toolbarpaletteitem[mousedown] {
+  box-shadow: inset 0 0 3px hsl(204,100%,40%);
+  cursor: -moz-grabbing;
+  opacity: 0.8;
+  transform: scale(1.1);
+}
+
+#customization-palette {
+  display: block;
+  overflow: auto;
+  min-height: 3em;
+}
+
+#customization-palette > toolbarpaletteitem {
+  width: 110px;
+  height: 94px;
+  overflow: hidden;
+  display: inline-block;
+}
+
+#customization-palette .toolbarpaletteitem-box {
+  -moz-box-pack: center;
+  -moz-box-flex: 1;
+  width: 110px;
+  max-width: 110px;
+}
+
+#customization-palette > toolbarpaletteitem > label {
+  text-align: center;
+  margin-left: 0;
+  margin-right: 0;
+}
new file mode 100644
--- /dev/null
+++ b/browser/themes/shared/panelUIOverlay.inc.css
@@ -0,0 +1,228 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+#PanelUI-contents[type="list"] > toolbarbutton {
+  -moz-binding: url("chrome://browser/content/panelUI.xml#toolbarbutton");
+}
+
+#app-extension-point-end > #PanelUI-menu-button {
+  padding: 2px 5px;
+}
+#app-extension-point-end > #PanelUI-menu-button .toolbarbutton-text {
+  display: none;
+}
+#app-extension-point-end > #PanelUI-menu-button .toolbarbutton-icon {
+  margin: 0;
+}
+
+#PanelUI-popup > arrowscrollbox > autorepeatbutton {
+  display: none;
+}
+#PanelUI-popup > arrowscrollbox > scrollbox {
+  overflow: visible;
+}
+
+#PanelUI-popup > .panel-arrowcontainer > .panel-arrowcontent {
+  padding: 0;
+}
+
+#PanelUI-menu-button > .toolbarbutton-icon {
+  list-style-image: url("chrome://browser/skin/appmenu.png");
+}
+
+#PanelUI-menu-button {
+  list-style-image: none;
+}
+
+#PanelUI-mainView .toolbarbutton-text {
+  display: -moz-box;
+  font-size: 10px;
+}
+
+#PanelUI-contents {
+  max-width: @menuPanelWidth@;
+  padding: 0 1em;
+}
+
+#PanelUI-container {
+  overflow: hidden;
+}
+
+#PanelUI-popup[panelopen="true"] > #PanelUI-container,
+#PanelUI-mainView-spring {
+  transition: height 150ms;
+}
+
+#PanelUI-popup[panelopen="true"] > #PanelUI-container > #PanelUI-viewStack > #PanelUI-mainView {
+  transition: transform 150ms;
+}
+
+#PanelUI-viewStack[view="main"] > #PanelUI-clickCapturer {
+  pointer-events: none;
+}
+
+#PanelUI-viewStack {
+  position: relative;
+}
+
+#PanelUI-viewStack,
+#PanelUI-container {
+  min-width: @menuPanelWidth@;
+}
+
+#PanelUI-mainView-spring {
+  height: 0;
+}
+
+#PanelUI-subViews {
+  -moz-stack-sizing: ignore;
+  background-image: linear-gradient(to bottom, white 1px, rgba(255, 255, 255, 0) 15px);
+  background-color: -moz-dialog;
+  box-shadow: -1px 0px 0px rgba(0, 0, 0, 0.2), -1px 0px 2px rgba(0, 0, 0, 0.1), 1px 0px 0px rgba(255, 255, 255, 0.2) inset;
+  margin-left: 38px;
+  transform: translateX(@menuPanelWidth@);
+  transition: transform 150ms;
+}
+
+#PanelUI-subViews > .PanelUI-subView:not([current]) {
+  display: none;
+}
+
+#PanelUI-viewStack[view="subview"] > #PanelUI-subViews {
+  transform: translateX(0);
+}
+
+#PanelUI-contents[type="list"] > toolbarbutton {
+  -moz-box-orient: horizontal;
+}
+
+#PanelUI-contents[type="list"] toolbarbutton .toolbarbutton-text,
+#PanelUI-subViews toolbarbutton .toolbarbutton-text {
+  text-align: start;
+  -moz-padding-start: 8px;
+  font-size: 12px;
+}
+
+#PanelUI-contents[type="list"] toolbarbutton .toolbarbutton-acceltext {
+  font-size: 10px;
+  color: GrayText;
+  margin-left: 0;
+  margin-right: 0;
+}
+
+#PanelUI-contents[type="list"] toolbarbutton .toolbarbutton-icon {
+  min-width: 24px;
+  max-width: 24px;
+  min-height: 24px;
+  max-height: 24px;
+}
+
+#PanelUI-contents[type="grid"] {
+  display: block;
+}
+
+#PanelUI-contents[type="grid"] toolbarbutton {
+  -moz-box-orient: vertical;
+  min-width: 72px;
+  max-width: 72px;
+  min-height: 72px;
+  max-height: 72px;
+}
+
+#PanelUI-contents[type="grid"] toolbarbutton .toolbarbutton-icon {
+  min-width: 32px;
+  max-width: 32px;
+  min-height: 32px;
+  max-height: 32px;
+  margin: 5px;
+}
+
+.PanelUI-pageControls {
+  padding: 12px 20px;
+}
+
+.PanelUI-editControls,
+.PanelUI-zoomControls {
+  padding: 6px 0;
+}
+
+.PanelUI-editControls #PanelUI-copy-btn,
+.PanelUI-zoomControls #PanelUI-zoomReset-btn {
+  border-left: none;
+  border-right: none;
+  border-radius: 0;
+}
+
+#PanelUI-zoomIn-btn .toolbarbutton-text,
+#PanelUI-zoomOut-btn .toolbarbutton-text,
+#PanelUI-zoomReset-btn .toolbarbutton-icon {
+  display: none;
+}
+
+.PanelUI-footer {
+  padding: 9px 12px;
+  background-color: rgba(0, 0, 0, 0.05);
+  border-top: 1px solid rgba(0,0,0,.1);
+}
+
+.PanelUI-footer toolbarbutton > .toolbarbutton-icon {
+  display: none;
+}
+
+#PanelUI-help-btn {
+  -moz-appearance: none;
+  border: none;
+  box-shadow: none;
+  background: transparent;
+  text-decoration: underline;
+  cursor: pointer;
+}
+
+#customization-palette .toolbarbutton-text {
+  display: none;
+}
+
+#PanelUI-subViews toolbarbutton,
+#PanelUI-mainView toolbarbutton {
+  -moz-appearance: none;
+  padding: 2px 6px;
+  background: hsla(210,32%,93%,0) padding-box;
+  border-radius: 2px;
+  border: 1px solid;
+  border-color: hsla(210,54%,20%,0) hsla(210,54%,20%,0) hsla(210,54%,20%,0);
+  box-shadow: 0 1px hsla(0,0%,100%,0) inset,
+              0 1px hsla(210,54%,20%,0),
+              0 0 2px hsla(210,54%,20%,0);
+  transition-property: background-color, border-color, box-shadow;
+  transition-duration: 150ms;
+}
+
+#PanelUI-subViews toolbarbutton:not([disabled]):not([checked]):not([open]):not(:active):hover,
+#PanelUI-mainView toolbarbutton:not([disabled]):not([checked]):not([open]):not(:active):hover,
+#PanelUI-mainView .PanelUI-pageControls toolbarbutton,
+#PanelUI-mainView #PanelUI-customize-btn {
+  background-image: -moz-linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1));
+  border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.2) hsla(210,54%,20%,.25);
+  box-shadow: 0 1px hsla(0,0%,100%,.3) inset,
+              0 1px hsla(210,54%,20%,.03),
+              0 0 2px hsla(210,54%,20%,.1);
+}
+
+#PanelUI-subViews toolbarbutton:not([disabled]):-moz-any([open],[checked],:hover:active),
+#PanelUI-mainView toolbarbutton:not([disabled]):-moz-any([open],[checked],:hover:active) {
+  background-image: -moz-linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1));
+  background-color: hsla(210,54%,20%,.15);
+  border-color: hsla(210,54%,20%,.3) hsla(210,54%,20%,.35) hsla(210,54%,20%,.4);
+  box-shadow: 0 1px 1px hsla(210,54%,20%,.1) inset,
+              0 0 1px hsla(210,54%,20%,.2) inset,
+              0 1px 0 hsla(210,54%,20%,0),
+              0 0 2px hsla(210,54%,20%,0);
+  text-shadow: none;
+  transition: none;
+}
+
+#PanelUI-historyItems > toolbarbutton {
+  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
+}
new file mode 100644
--- /dev/null
+++ b/browser/themes/shared/tabs.inc.css
@@ -0,0 +1,212 @@
+%if 0
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+%endif
+
+%define tabHeight 30px
+%define tabCurveWidth 30px
+%define tabCurveHalfWidth 15px
+
+/* image preloading hack */
+#TabsToolbar::before {
+  content: '';
+  display: block;
+  background-image:
+    url(chrome://browser/skin/tabbrowser/tab-background-end.png),
+    url(chrome://browser/skin/tabbrowser/tab-background-middle.png),
+    url(chrome://browser/skin/tabbrowser/tab-background-start.png);
+}
+
+.tabbrowser-tab,
+.tabs-newtab-button {
+  -moz-appearance: none;
+  background-color: transparent;
+  border-radius: 0;
+  border-width: 0;
+  margin: 0;
+  padding: 0;
+}
+
+/* The selected tab should appear above adjacent tabs and .tabs-newtab-button */
+.tabbrowser-tab[selected=true] {
+  position: relative;
+  z-index: 1;
+}
+
+.tab-background-middle {
+  -moz-box-flex: 1;
+  background-clip: padding-box;
+  border-left: @tabCurveHalfWidth@ solid transparent;
+  border-right: @tabCurveHalfWidth@ solid transparent;
+  margin: 0 -@tabCurveHalfWidth@;
+}
+
+.tab-content {
+  -moz-padding-end: 10px;
+  -moz-padding-start: 10px;
+}
+
+.tab-background,
+.tabs-newtab-button {
+  /* overlap the tab curves */
+  -moz-margin-end: -@tabCurveHalfWidth@;
+  -moz-margin-start: -@tabCurveHalfWidth@;
+}
+
+.tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox {
+  -moz-padding-end: @tabCurveHalfWidth@;
+  -moz-padding-start: @tabCurveHalfWidth@;
+}
+
+.tab-background-start[selected=true]::after,
+.tab-background-start[selected=true]::before,
+.tab-background-start,
+.tab-background-end,
+.tab-background-end[selected=true]::after,
+.tab-background-end[selected=true]::before {
+  min-height: @tabHeight@;
+  width: @tabCurveWidth@;
+}
+
+/* Selected tab */
+
+/*
+ Tab background pseudo-elements which are positioned above .tab-background-start/end:
+   - ::before - provides the fill of the tab curve and is clipped to the tab shape. This is where
+                pointer events go for the curve.
+   - ::after  - provides the border/stroke of the tab curve and is overlayed above ::before.  Pointer
+                events go through to ::before to get the proper shape.
+ */
+
+
+.tab-background-start[selected=true]::after,
+.tab-background-end[selected=true]::after {
+  /* position ::after on top of its parent */
+  -moz-margin-start: -@tabCurveWidth@;
+  content: "";
+  display: -moz-box;
+}
+
+.tab-background-start[selected=true]::before,
+.tab-background-end[selected=true]::before {
+  /* all ::before pseudo elements */
+  content: "";
+  display: -moz-box;
+}
+
+.tab-background-start[selected=true]:-moz-locale-dir(ltr)::before,
+.tab-background-end[selected=true]:-moz-locale-dir(rtl)::before {
+  clip-path: url(chrome://browser/content/browser.xul#tab-curve-clip-path-start);
+}
+
+.tab-background-end[selected=true]:-moz-locale-dir(ltr)::before,
+.tab-background-start[selected=true]:-moz-locale-dir(rtl)::before {
+  clip-path: url(chrome://browser/content/browser.xul#tab-curve-clip-path-end);
+}
+
+.tab-background-start[selected=true]:not(:-moz-lwtheme)::after,
+.tab-background-end[selected=true]:not(:-moz-lwtheme)::after {
+  background-repeat: no-repeat;
+}
+
+.tab-background-start[selected=true]:-moz-locale-dir(ltr)::after,
+.tab-background-end[selected=true]:-moz-locale-dir(rtl)::after {
+  background-image: url(chrome://browser/skin/tabbrowser/tab-stroke-start.png);
+}
+
+.tab-background-end[selected=true]:-moz-locale-dir(ltr)::after,
+.tab-background-start[selected=true]:-moz-locale-dir(rtl)::after {
+  background-image: url(chrome://browser/skin/tabbrowser/tab-stroke-end.png);
+}
+
+.tab-background-start[selected=true]::before,
+.tab-background-end[selected=true]::before {
+  background-color: -moz-dialog;
+  background-image: @fgTabTexture@;
+  background-repeat: no-repeat;
+}
+
+.tab-background-middle[selected=true] {
+  background-color: transparent;
+  background-image: url(chrome://browser/skin/tabbrowser/tab-active-middle.png),
+                    @fgTabBackgroundMiddle@;
+  background-repeat: repeat-x;
+}
+
+.tab-background-middle[selected=true]:-moz-lwtheme {
+  background-image: url(chrome://browser/skin/tabbrowser/tab-active-middle.png);
+}
+
+/* Same as above but without border or -moz-dialog background */
+.tab-background-start[selected=true]:-moz-lwtheme::before,
+.tab-background-end[selected=true]:-moz-lwtheme::before,
+.tab-background-middle[selected=true]:-moz-lwtheme {
+  background-color: transparent;
+}
+
+/* End selected tab */
+
+/* new tab button border and gradient on hover */
+.tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected=true]),
+.tabs-newtab-button:hover {
+  background-image: url(chrome://browser/skin/tabbrowser/tab-background-start.png),
+                    url(chrome://browser/skin/tabbrowser/tab-background-middle.png),
+                    url(chrome://browser/skin/tabbrowser/tab-background-end.png);
+  background-position: left bottom, @tabCurveWidth@ bottom, right bottom;
+  background-repeat: no-repeat;
+  background-size: @tabCurveWidth@ 100%, calc(100% - (2 * @tabCurveWidth@)) 100%, @tabCurveWidth@ 100%;
+}
+
+/* Tab pointer-events */
+.tabbrowser-tab {
+  pointer-events: none;
+}
+
+/* Allow pointer-events on ::before of the ends of selected tabs
+   since they are clipped to the curve shape. */
+.tab-background-start[selected=true]::before,
+.tab-background-end[selected=true]::before,
+.tab-background-middle,
+.tabs-newtab-button,
+.tab-close-button {
+  pointer-events: auto;
+}
+
+/* Pinned tabs */
+
+/* pinned tabs need position: fixed for separator when overflowing */
+#tabbrowser-tabs[positionpinnedtabs] > .tabbrowser-tab[pinned]::before {
+  position: fixed;
+}
+
+.tabbrowser-tab[pinned][titlechanged]:not([selected="true"]) > .tab-stack > .tab-content {
+  background-image: radial-gradient(farthest-corner at center bottom, rgb(255,255,255) 3%, rgba(186,221,251,0.75) 20%, rgba(127,179,255,0.25) 40%, rgba(127,179,255,0) 70%);
+  background-position: center bottom 1px;
+  background-repeat: no-repeat;
+  background-size: 85% 100%;
+}
+
+/* Background tab separators (3px wide).
+   Also show separators beside the selected tab when dragging it. */
+#tabbrowser-tabs[movingtab] > .tabbrowser-tab[beforeselected]:not([last-visible-tab])::after,
+.tabbrowser-tab:not([selected]):not([afterselected-visible]):not([afterhovered]):not([first-visible-tab]):not(:hover)::before,
+#tabbrowser-tabs:not([overflow]) > .tabbrowser-tab[last-visible-tab]:not([selected]):not([beforehovered]):not(:hover)::after {
+  -moz-margin-start: -1.5px;
+  -moz-margin-end: -1.5px;
+  background-image: url("chrome://browser/skin/tabbrowser/tab-separator.png");
+  background-position: left bottom;
+  background-repeat: no-repeat;
+  background-size: 3px 100%;
+  content: '';
+  display: -moz-box;
+  height: @tabHeight@;
+  width: 3px;
+}
+
+/* New tab button */
+
+.tabs-newtab-button {
+  clip-path: url(chrome://browser/content/browser.xul#tab-clip-path-outer);
+  width: 66px;
+}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4d0f12492fe643ade04a8ffaf333f7c729fa2f33
GIT binary patch
literal 247
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%``#fD7Ln>~ay|9<>AcIKT!^dVh
zPL~`nny9FX3QF0_hAc6;6tcysgRf4^t^C677rbS5HPZ`DB~%<wuk4)Jec#12dB&70
zX5l8mB0M@P+otl$&VQS#!NoRhkAa_i-U;LXK(-kF7yrj|Uf%a#Q@&=&9fQb=)r%4m
zJYV}6S8siM^qCG&@t?z{rA;&T{*4vkc_Z(0<&5Vdlix9>I)Mfou1K9RHs4iHP}kMe
uxHR{V$Mxmx?%StpNZgq3<I+0kqV!JNQte+wg;Rk(VeoYIb6Mw<&;$VPyJO}6
--- a/browser/themes/windows/browser-aero.css
+++ b/browser/themes/windows/browser-aero.css
@@ -6,17 +6,18 @@
 %include browser.css
 %undef WINDOWS_AERO
 
 %define customToolbarColor hsl(210,75%,92%)
 %define glassActiveBorderColor rgb(37, 44, 51)
 %define glassInactiveBorderColor rgb(102, 102, 102)
 
 @media not all and (-moz-windows-classic) {
-  #main-window[sizemode="normal"] > #titlebar > #titlebar-content > #appmenu-button-container {
+  #main-window[sizemode="normal"] > #titlebar > #titlebar-content > #appmenu-button-container,
+  #main-window[sizemode="normal"] > #tab-view-deck > #browser-panel > #navigator-toolbox > #toolbar-menubar {
     margin-top: 1px;
   }
 
   #appmenu-button {
     border-width: 2px;
     -moz-border-left-colors: @appMenuButtonBorderColor@;
     -moz-border-bottom-colors: @appMenuButtonBorderColor@;
     -moz-border-right-colors: @appMenuButtonBorderColor@;
@@ -42,37 +43,25 @@
 }
 
 @media (-moz-windows-default-theme) {
   #navigator-toolbox > toolbar:not(:-moz-lwtheme),
   #browser-bottombox:not(:-moz-lwtheme) {
     background-color: @customToolbarColor@;
   }
 
-  .tabbrowser-tab:not(:-moz-lwtheme),
-  .tabs-newtab-button:not(:-moz-lwtheme) {
-    background-image: @toolbarShadowOnTab@, @bgTabTexture@,
-                      linear-gradient(@customToolbarColor@, @customToolbarColor@);
+  .tab-background-start[selected=true]:not(:-moz-lwtheme)::before,
+  .tab-background-end[selected=true]:not(:-moz-lwtheme)::before {
+    background-color: @customToolbarColor@;
+    background-image: @fgTabTexture@;
   }
 
-  .tabbrowser-tab:not(:-moz-lwtheme):hover,
-  .tabs-newtab-button:not(:-moz-lwtheme):hover {
-    background-image: @toolbarShadowOnTab@, @bgTabTextureHover@,
-                      linear-gradient(@customToolbarColor@, @customToolbarColor@);
-  }
-
-  .tabbrowser-tab[selected="true"]:not(:-moz-lwtheme) {
-    background-image: linear-gradient(#fff, @toolbarHighlight@ 50%),
-                      linear-gradient(@customToolbarColor@, @customToolbarColor@);
-  }
-
-  #main-window[tabsontop=false]:not([disablechrome]) .tabbrowser-tab[selected=true]:not(:-moz-lwtheme) {
-    background-image: @toolbarShadowOnTab@,
-                      linear-gradient(#fff, @toolbarHighlight@ 50%),
-                      linear-gradient(@customToolbarColor@, @customToolbarColor@);
+  .tab-background-middle[selected=true]:not(:-moz-lwtheme) {
+    background-image: url(chrome://browser/skin/tabbrowser/tab-active-middle.png),
+                      linear-gradient(transparent, transparent 2px, @customToolbarColor@ 2px, @customToolbarColor@);
   }
 
   #navigator-toolbox:not(:-moz-lwtheme)::after {
     background-color: #aabccf;
   }
 
   #navigator-toolbox[tabsontop=true] #urlbar:not(:-moz-lwtheme),
   #navigator-toolbox[tabsontop=true] .searchbar-textbox:not(:-moz-lwtheme) {
@@ -132,20 +121,16 @@
     -moz-appearance: -moz-win-borderless-glass;
     background: transparent;
   }
 
   #appcontent {
     -moz-appearance: -moz-win-exclude-glass;
   }
 
-  #main-window[chromemargin^="0,"][sizemode=normal] #navigator-toolbox {
-    margin-top: -7px;
-  }
-
   /* Artificially draw window borders that are covered by lwtheme, see bug 591930. */
   #main-window[sizemode="normal"] > #titlebar > #titlebar-content:-moz-lwtheme {
     border-top: 2px solid;
     -moz-border-top-colors: @glassActiveBorderColor@ rgba(255,255,255,.6);
   }
 
   #main-window[sizemode="normal"] > #titlebar > #titlebar-content:-moz-lwtheme:-moz-window-inactive {
     -moz-border-top-colors: @glassInactiveBorderColor@ rgba(255,255,255,.6);
@@ -158,56 +143,47 @@
   #main-window[sizemode="normal"] #titlebar-buttonbox:-moz-lwtheme {
     margin-top: -2px;
   }
 
   #appmenu-button {
     margin-bottom: -1px; /* compensate white outer border */
   }
 
-  #main-window[sizemode=fullscreen]:not(:-moz-lwtheme) {
-    -moz-appearance: none;
-    background-color: #556;
-  }
-
   #toolbar-menubar:not(:-moz-lwtheme),
   #TabsToolbar[tabsontop=true]:not(:-moz-lwtheme),
   #nav-bar[tabsontop=false]:not(:-moz-lwtheme),
   #nav-bar + #customToolbars + #PersonalToolbar[collapsed=true] + #TabsToolbar[tabsontop=false]:last-child:not(:-moz-lwtheme) {
     background-color: transparent !important;
     color: black;
     text-shadow: 0 0 .5em white, 0 0 .5em white, 0 1px 0 rgba(255,255,255,.4);
     border-left-style: none !important;
     border-right-style: none !important;
   }
 
-  :-moz-any(#toolbar-menubar, #nav-bar[tabsontop=false]) :-moz-any(@primaryToolbarButtons@):not(:-moz-any(#alltabs-button,#tabview-button,#sync-button[status])) > .toolbarbutton-icon:not(:-moz-lwtheme),
-  #TabsToolbar[tabsontop=true] :-moz-any(@primaryToolbarButtons@):not(:-moz-any(#alltabs-button,#tabview-button,#new-tab-button,#sync-button[status])) > .toolbarbutton-icon:not(:-moz-lwtheme),
+  #navigator-toolbox[tabsontop=false] > :-moz-any(#toolbar-menubar, #nav-bar) :-moz-any(@primaryToolbarButtons@):not(:-moz-any(#alltabs-button,#tabview-button,#sync-button[status])) > .toolbarbutton-icon:not(:-moz-lwtheme),
   #nav-bar + #customToolbars + #PersonalToolbar[collapsed=true] + #TabsToolbar[tabsontop=false]:last-child :-moz-any(@primaryToolbarButtons@):not(:-moz-any(#alltabs-button,#tabview-button,#new-tab-button,#sync-button[status])) > .toolbarbutton-icon:not(:-moz-lwtheme) {
     list-style-image: url("chrome://browser/skin/Toolbar-inverted.png");
   }
 
-  :-moz-any(#toolbar-menubar, #TabsToolbar[tabsontop=true], #nav-bar[tabsontop=false]) .toolbarbutton-1 > .toolbarbutton-menu-dropmarker:not(:-moz-lwtheme),
-  :-moz-any(#toolbar-menubar, #TabsToolbar[tabsontop=true], #nav-bar[tabsontop=false]) .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker:not(:-moz-lwtheme),
+  #navigator-toolbox[tabsontop=false] > :-moz-any(#toolbar-menubar, #nav-bar) .toolbarbutton-1 > .toolbarbutton-menu-dropmarker:not(:-moz-lwtheme),
+  #navigator-toolbox[tabsontop=false] > :-moz-any(#toolbar-menubar, #nav-bar) .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker:not(:-moz-lwtheme),
   #nav-bar + #customToolbars + #PersonalToolbar[collapsed=true] + #TabsToolbar[tabsontop=false]:last-child .toolbarbutton-1 > .toolbarbutton-menu-dropmarker:not(:-moz-lwtheme),
   #nav-bar + #customToolbars + #PersonalToolbar[collapsed=true] + #TabsToolbar[tabsontop=false]:last-child .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker:not(:-moz-lwtheme) {
     list-style-image: url("chrome://browser/skin/toolbarbutton-dropdown-arrow-inverted.png");
   }
 
   /* Vertical toolbar border */
   #main-window[sizemode=normal] #navigator-toolbox::after,
   #main-window[sizemode=normal] #navigator-toolbox[tabsontop=true] > toolbar:not(#toolbar-menubar):not(#TabsToolbar),
   #main-window[sizemode=normal] #navigator-toolbox[tabsontop=false] > toolbar:not(#toolbar-menubar):not(#nav-bar) {
     border-left: 1px solid @toolbarShadowColor@;
     border-right: 1px solid @toolbarShadowColor@;
     background-clip: padding-box;
   }
-  #main-window[sizemode=normal] #navigator-toolbox > toolbar:-moz-lwtheme {
-    border-color: transparent !important;
-  }
   #main-window[sizemode=normal] #browser-border-start,
   #main-window[sizemode=normal] #browser-border-end {
     display: -moz-box;
     background-color: @toolbarShadowColor@;
     width: 1px;
   }
   #main-window[sizemode=normal] #browser-bottombox {
     border: 1px solid @toolbarShadowColor@;
@@ -216,33 +192,41 @@
   }
 
   #main-window[sizemode=normal][tabsontop=false] #PersonalToolbar:not(:-moz-lwtheme) {
     border-top-left-radius: 2.5px;
     border-top-right-radius: 2.5px;
   }
 
   /* Toolbar shadow behind tabs */
+  #nav-bar[tabsontop=true],
+  #main-window[disablechrome] #navigator-toolbox[tabsontop=true]::after {
+    border-top: 1px solid @toolbarShadowColor@ !important;
+    background-clip: padding-box;
+  }
+
+  #main-window[disablechrome] #navigator-toolbox[tabsontop=true]::after {
+    visibility: visible;
+  }
+
   /* This code is only needed for restored windows (i.e. sizemode=normal)
      because of the border radius on the toolbar below the tab bar. */
-  #main-window[sizemode=normal] #nav-bar[tabsontop=true]:not(:-moz-lwtheme),
-  #main-window[sizemode=normal] #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + toolbar:not(:-moz-lwtheme),
-  #main-window[sizemode=normal] #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + #customToolbars + #PersonalToolbar:not(:-moz-lwtheme),
-  #main-window[sizemode=normal][disablechrome] #navigator-toolbox[tabsontop=true]:not(:-moz-lwtheme)::after {
+  #main-window[sizemode=normal] #nav-bar[tabsontop=true],
+  #main-window[sizemode=normal] #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + toolbar,
+  #main-window[sizemode=normal] #nav-bar[tabsontop=true][collapsed=true]:not([customizing]) + #customToolbars + #PersonalToolbar,
+  #main-window[sizemode=normal][disablechrome] #navigator-toolbox[tabsontop=true]::after {
     border-top: 1px solid @toolbarShadowColor@;
     border-top-left-radius: 2.5px;
     border-top-right-radius: 2.5px;
     background-clip: padding-box;
   }
-  #main-window[sizemode=normal] #TabsToolbar[tabsontop=true]:not(:-moz-lwtheme) {
+
+  /* Cover the top border of the adjacent toolbar */
+  #TabsToolbar[tabsontop=true] {
     margin-bottom: -1px;
-    background-image: none !important;
-  }
-  #main-window[sizemode=normal] #tabbrowser-tabs[tabsontop=true] > .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox > .scrollbox-innerbox:not(:-moz-lwtheme) {
-    position: relative;
   }
 
   #navigator-toolbox[tabsontop=false] > #PersonalToolbar {
     margin-top: 3px;
   }
   #navigator-toolbox[tabsontop=false] > #PersonalToolbar:not(:-moz-lwtheme) {
     margin-top: 2px;
     border-top: 1px solid @toolbarShadowColor@;
@@ -330,16 +314,51 @@
 
   #tab-view:-moz-lwtheme {
     background-image: url("chrome://browser/skin/tabview/grain.png"),
                       linear-gradient(rgba(255,255,255,0), #CCD9EA 200px, #C7D5E7);
     background-attachment: fixed;
   }
 }
 
+@media (-moz-windows-glass) {
+  #main-window[sizemode=fullscreen]:not(:-moz-lwtheme) {
+    -moz-appearance: none;
+    background-color: #556;
+  }
+
+  /* Glass Fog */
+
+  #TabsToolbar:not(:-moz-lwtheme) {
+    background-image: none;
+    position: relative;
+  }
+
+  #TabsToolbar:not(:-moz-lwtheme)::before {
+    box-shadow: 0 0 30px 30px rgb(174,189,204);
+    content: "";
+    display: -moz-box;
+    height: 0;
+    margin: 0 60px; /* (30px + 30px) from box-shadow */
+    opacity: 0.85;
+    position: absolute;
+    pointer-events: none;
+    top: 50%;
+    width: -moz-available;
+    z-index: -1;
+  }
+
+  #main-window[sizemode=normal] #tabbrowser-tabs[tabsontop=true] > .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox > .scrollbox-innerbox:not(:-moz-lwtheme) {
+    position: relative;
+  }
+
+  /* End Glass Fog */
+}
+
+
 @media not all and (-moz-windows-compositor) {
   @media (-moz-windows-default-theme) {
     #main-window {
       background-color: rgb(185,209,234);
     }
     #main-window:-moz-window-inactive {
       background-color: rgb(215,228,242);
     }
new file mode 100644
--- /dev/null
+++ b/browser/themes/windows/browser-lightweightTheme.css
@@ -0,0 +1,29 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+%include windowsShared.inc
+%filter substitution
+
+/*
+ * LightweightThemeListener will append the current lightweight theme's header
+ * image to the background-image for each of the following rulesets.
+ */
+
+/* Lightweight theme on tabs */
+#tabbrowser-tabs:not([movingtab]) > .tabbrowser-tab > .tab-stack > .tab-background > .tab-background-start[selected=true]:-moz-lwtheme::before,
+#tabbrowser-tabs:not([movingtab]) > .tabbrowser-tab > .tab-stack > .tab-background > .tab-background-end[selected=true]:-moz-lwtheme::before {
+  background-attachment: scroll, fixed;
+  background-color: transparent;
+  background-image: @fgTabTexture@;/*, lwtHeader;*/
+  background-position: 0 0, right top;
+}
+
+#tabbrowser-tabs:not([movingtab]) > .tabbrowser-tab > .tab-stack > .tab-background > .tab-background-middle[selected=true]:-moz-lwtheme {
+  background-attachment: scroll, scroll, fixed;
+  background-color: transparent;
+  background-image: url(chrome://browser/skin/tabbrowser/tab-active-middle-lwtheme.png),
+                    @fgTabTexture@;/*,
+                    lwtHeader;*/
+  background-position: 0 0, 0 0, right top;
+}
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -3,23 +3,20 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 @import url("chrome://global/skin/");
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 @namespace html url("http://www.w3.org/1999/xhtml");
 
 %include ../shared/browser.inc
+%include windowsShared.inc
 %filter substitution
-%define toolbarHighlight rgba(255,255,255,.5)
-%define selectedTabHighlight rgba(255,255,255,.7)
-%define toolbarShadowColor rgba(10%,10%,10%,.4)
-%define toolbarShadowOnTab linear-gradient(to top, rgba(10%,10%,10%,.4) 1px, transparent 1px)
-%define bgTabTexture linear-gradient(transparent, hsla(0,0%,45%,.1) 1px, hsla(0,0%,32%,.2) 80%, hsla(0,0%,0%,.2))
-%define bgTabTextureHover linear-gradient(hsla(0,0%,100%,.3) 1px, hsla(0,0%,75%,.2) 80%, hsla(0,0%,60%,.2))
+%define toolbarShadowColor hsla(209,67%,12%,0.35)
+%define fgTabBackgroundMiddle linear-gradient(transparent, transparent 2px, -moz-dialog 2px, -moz-dialog)
 %define navbarTextboxCustomBorder border-color: rgba(0,0,0,.32);
 %define navbarLargeIcons #navigator-toolbox[iconsize=large][mode=icons] > #nav-bar
 %define forwardTransitionLength 150ms
 %define conditionalForwardWithUrlbar window:not([chromehidden~=toolbar]) #navigator-toolbox[iconsize=large][mode=icons] > :-moz-any(#nav-bar[currentset*="unified-back-forward-button,urlbar-container"],#nav-bar:not([currentset])) > #unified-back-forward-button
 %define conditionalForwardWithUrlbarWidth 27
 
 %ifdef MOZ_OFFICIAL_BRANDING
 %define appMenuButtonBorderColor rgba(255,255,255,.5) rgba(83,42,6,.9)
@@ -34,16 +31,31 @@
 #menubar-items {
   -moz-box-orient: vertical; /* for flex hack */
 }
 
 #main-menubar {
   -moz-box-flex: 1; /* make menu items expand to fill toolbar height */
 }
 
+#main-window[tabsintitlebar][sizemode="normal"] #toolbar-menubar[autohide="true"][inactive="true"]:not([customizing="true"]) {
+  visibility: hidden;
+}
+
+#main-window[sizemode="normal"] #toolbar-menubar,
+/* We want a 4px gap between the TabsToolbar and the toolbar-menubar when the
+   toolbar-menu is displayed in either restored or maximized mode. */
+#main-window:not([sizemode="fullscreen"]) #toolbar-menubar:-moz-any(:not([autohide="true"]), :not([inactive="true"])) {
+  margin-bottom: 4px;
+}
+
+#toolbar-menubar:not([autohide="true"]) {
+  -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag");
+}
+
 #navigator-toolbox {
   -moz-appearance: none;
   background-color: transparent;
   border-top: none;
 }
 
 #navigator-toolbox::after {
   content: "";
@@ -61,27 +73,33 @@
   -moz-appearance: none;
   border-style: none;
   background-color: -moz-Dialog;
 }
 
 %ifdef WINDOWS_AERO
 @media not all and (-moz-windows-compositor) {
 %endif
-  #main-window[tabsintitlebar]:not([inFullscreen]) #toolbar-menubar[inactive] ~ #TabsToolbar:not(:-moz-lwtheme) {
+  #toolbar-menubar {
+    background-color: transparent !important;
+  }
+
+  #main-window[tabsintitlebar][sizemode="maximized"] #toolbar-menubar[inactive] ~ #TabsToolbar:not(:-moz-lwtheme) {
     background: linear-gradient(to top, @toolbarShadowColor@ 1px, transparent 1px),
                 linear-gradient(rgba(50%,50%,50%,0), ActiveCaption 85%);
     color: CaptionText;
   }
-  #main-window[tabsintitlebar]:not([inFullscreen]) #toolbar-menubar[inactive] ~ #TabsToolbar:not(:-moz-lwtheme):-moz-window-inactive {
+  #main-window[tabsintitlebar][sizemode="maximized"] #toolbar-menubar[inactive] ~ #TabsToolbar:not(:-moz-lwtheme):-moz-window-inactive {
     background: linear-gradient(to top, @toolbarShadowColor@ 1px, transparent 1px),
                 linear-gradient(rgba(50%,50%,50%,0), InactiveCaption 85%);
     color: InactiveCaptionText;
   }
-
+  #TabsToolbar:-moz-lwtheme {
+    background: linear-gradient(to top, @toolbarShadowColor@ 1px, transparent 1px);
+  }
   #main-window[tabsintitlebar] #titlebar:-moz-lwtheme {
     visibility: hidden;
   }
   #main-window[tabsintitlebar] #titlebar-content:-moz-lwtheme {
     -moz-binding: url("chrome://global/content/bindings/general.xml#windowdragbox");
     visibility: visible;
   }
 %ifdef WINDOWS_AERO
@@ -103,16 +121,26 @@
 }
 
 #browser-bottombox:not(:-moz-lwtheme) {
   background-color: -moz-dialog;
 }
 
 /* ::::: app menu button ::::: */
 
+/* The app menu button must appear on top of the navigator-toolbox in order
+ * for click and hover mouse events to work properly for the button in the
+ * restored window state. Otherwise, elements in the navigator-toolbox, like the
+ * menubar can swallow these events. It will also place the button above the
+ * fog on themes with Aero Glass.
+ */
+#main-window[tabsintitlebar] #appmenu-button-container {
+  z-index: 1;
+}
+
 #appmenu-button {
   -moz-appearance: none;
   background-clip: padding-box;
   border-radius: 0 0 4px 4px;
   border: 1px solid;
   border-top: none;
   color: white;
   text-shadow: 0 0 1px rgba(0,0,0,.7),
@@ -125,16 +153,20 @@
 @media (-moz-windows-classic) {
   #appmenu-button {
     margin-bottom: 1px;
   }
 }
 
 %ifndef WINDOWS_AERO
 @media (-moz-windows-default-theme) {
+  #main-window[tabsintitlebar][sizemode="normal"] #toolbar-menubar {
+    margin-top: 4px;
+  }
+
   #main-window[sizemode="normal"] #appmenu-button {
     margin-bottom: 5px;
   }
 }
 %endif
 
 #appmenu-button:hover:active,
 #appmenu-button[open] {
@@ -538,23 +570,31 @@
   -moz-appearance: -moz-window-titlebar;
 }
 
 #main-window[sizemode="maximized"] > #titlebar {
   -moz-appearance: -moz-window-titlebar-maximized;
 }
 
 @media (-moz-windows-classic) {
-  #main-window[sizemode="normal"] > #titlebar > #titlebar-content > #appmenu-button-container {
+  #main-window[tabsintitlebar][sizemode="normal"] > #titlebar > #titlebar-content > #appmenu-button-container,
+  #main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel > #navigator-toolbox > #toolbar-menubar {
     margin-top: 4px;
   }
 }
 
+/* The button box must appear on top of the navigator-toolbox in order for
+ * click and hover mouse events to work properly for the button in the restored
+ * window state. Otherwise, elements in the navigator-toolbox, like the menubar,
+ * can swallow those events. It will also place the buttons above the fog on
+ * themes with Aero Glass.
+ */
 #titlebar-buttonbox {
   -moz-appearance: -moz-window-button-box;
+  z-index: 1;
 }
 
 #main-window[sizemode="maximized"] #titlebar-buttonbox {
   -moz-appearance: -moz-window-button-box-maximized;
 }
 
 .titlebar-placeholder[type="appmenu-button"] {
   margin-left: 4px;
@@ -767,17 +807,17 @@ toolbar[mode=full] .toolbarbutton-1 > .t
 
 @navbarLargeIcons@ .toolbarbutton-1:not([type=menu-button]),
 @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-button,
 @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
   padding: 5px 2px;
   -moz-box-pack: center;
 }
 
-@navbarLargeIcons@ .toolbarbutton-1[type=menu]:not(#back-button):not(#forward-button):not(#feed-button):not(#social-provider-button) {
+@navbarLargeIcons@ .toolbarbutton-1[type=menu]:not(#back-button):not(#forward-button):not(#feed-button):not(#social-provider-button):not(#PanelUI-menu-button) {
   padding-left: 5px;
   padding-right: 5px;
 }
 
 @navbarLargeIcons@ .toolbarbutton-1 > menupopup {
   margin-top: -3px;
 }
 
@@ -807,17 +847,17 @@ toolbar[mode=full] .toolbarbutton-1 > .t
 }
 
 @navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-icon,
 @navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-badge-container,
 @navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
   padding: 3px 7px;
 }
 
-@navbarLargeIcons@ .toolbarbutton-1[type=menu]:not(#back-button):not(#forward-button):not(#feed-button):not(#social-provider-button) > .toolbarbutton-icon,
+@navbarLargeIcons@ .toolbarbutton-1[type=menu]:not(#back-button):not(#forward-button):not(#feed-button):not(#social-provider-button):not(#PanelUI-menu-button) > .toolbarbutton-icon,
 @navbarLargeIcons@ .toolbarbutton-1[type=menu] > .toolbarbutton-text /* hack for add-ons that forcefully display the label */ {
   -moz-padding-end: 17px;
 }
 
 @navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menu-dropmarker {
   -moz-margin-start: -15px;
 }
 
@@ -1140,20 +1180,16 @@ toolbar[mode=full] .toolbarbutton-1 > .t
 
 /* tabview button & menu item */
 
 #tabview-button,
 #menu_tabview {
   list-style-image: url(chrome://browser/skin/tabview/tabview.png);
 }
 
-%ifdef WINDOWS_AERO
-:-moz-any(#TabsToolbar, #nav-bar[tabsontop=false], #toolbar-menubar) > #tabview-button:-moz-system-metric(windows-compositor):not(:-moz-lwtheme),
-:-moz-any(#TabsToolbar, #nav-bar[tabsontop=false], #toolbar-menubar) > toolbarpaletteitem > #tabview-button:-moz-system-metric(windows-compositor):not(:-moz-lwtheme),
-%endif
 #tabview-button:-moz-lwtheme-brighttext {
   list-style-image: url(chrome://browser/skin/tabview/tabview-inverted.png);
 }
 
 #tabview-button {
   -moz-image-region: rect(0, 90px, 18px, 72px);
 }
 
@@ -1882,149 +1918,119 @@ richlistitem[type~="action"][actiontype=
   padding: 0;
 }
 
 #TabsToolbar:not(:-moz-lwtheme),
 #TabsToolbar[tabsontop=false] {
   background-image: linear-gradient(to top, @toolbarShadowColor@ 1px, rgba(0,0,0,.05) 1px, transparent 50%);
 }
 
+#main-window[tabsintitlebar] #TabsToolbar {
+  background-color: transparent;
+}
+
 %ifndef WINDOWS_AERO
 @media (-moz-windows-default-theme) {
   #main-window[sizemode=normal] #TabsToolbar {
     padding-left: 2px;
     padding-right: 2px;
   }
 }
 %endif
 
-.tabbrowser-tab,
-.tabs-newtab-button {
-  -moz-appearance: none;
-  background: @toolbarShadowOnTab@, @bgTabTexture@,
-              linear-gradient(-moz-dialog, -moz-dialog);
-  background-origin: border-box;
-  background-position: 1px 2px;
-  background-size: calc(100% - 2px) calc(100% - 2px);
-  background-repeat: no-repeat;
-  margin: 0;
-  padding: 2px 0 4px;