author | David Anderson <danderson@mozilla.com> |
Tue, 20 Dec 2011 13:42:14 -0800 | |
changeset 105435 | dee50ee8534e2380cd5093915626fbe8f58ffbb5 |
parent 105434 | bf524b56351f62174a34e1038ff9123f7e2d0335 (current diff) |
parent 83133 | a0d32d0353e1bdadf0090c89ad2ec795133619cf (diff) |
child 105436 | 817ac4d9daf21f741ce86dd53d926698e05c1204 |
push id | 23447 |
push user | danderson@mozilla.com |
push date | Tue, 11 Sep 2012 17:34:27 +0000 |
treeherder | mozilla-central@fdfaef738a00 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 12.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
|
--- a/.hgtags +++ b/.hgtags @@ -66,8 +66,9 @@ 138f593553b66c9f815e8f57870c19d6347f7702 9eae975b3d6fb7748fe5a3c0113d449b1c7cc0b2 AURORA_BASE_20110524 138f593553b66c9f815e8f57870c19d6347f7702 UPDATE_PACKAGING_R14 462c726144bc1fb45b61e774f64ac5d61b4e047c UPDATE_PACKAGING_R14 5eb553dd2ceae5f88d80f27afc5ef3935c5d43b0 AURORA_BASE_20110705 41b84b87c816403e1b74963d8094cff0406c989e AURORA_BASE_20110816 c0983049bcaa9551e5f276d5a77ce154c151e0b0 AURORA_BASE_20110927 462c726144bc1fb45b61e774f64ac5d61b4e047c UPDATE_PACKAGING_R15 54bfd8bf682e295ffd7f22fa921ca343957b6c1c AURORA_BASE_20111108 +a8506ab2c65480cf2f85f54e203ea746522c62bb AURORA_BASE_20111220
--- a/Makefile.in +++ b/Makefile.in @@ -57,16 +57,17 @@ TIERS += base # # tier "base" - basic setup # tier_base_dirs = \ config \ build \ probes \ + mfbt \ $(NULL) ifndef LIBXUL_SDK ifeq (android,$(MOZ_WIDGET_TOOLKIT)) tier_base_dirs += other-licenses/android other-licenses/skia-npapi endif tier_base_dirs += memory
--- a/accessible/build/nsAccessibilityFactory.cpp +++ b/accessible/build/nsAccessibilityFactory.cpp @@ -57,17 +57,16 @@ NS_ConstructAccessibilityService(nsISupp } rv = accessibility->QueryInterface(aIID, aResult); NS_ASSERTION(NS_SUCCEEDED(rv), "unable to find correct interface"); NS_RELEASE(accessibility); return rv; } NS_DEFINE_NAMED_CID(NS_ACCESSIBILITY_SERVICE_CID); -NS_DEFINE_NAMED_CID(NS_ACCESSIBLE_RETRIEVAL_CID); static const mozilla::Module::CIDEntry kA11yCIDs[] = { { &kNS_ACCESSIBILITY_SERVICE_CID, false, NULL, NS_ConstructAccessibilityService }, { NULL } }; static const mozilla::Module::ContractIDEntry kA11yContracts[] = { { "@mozilla.org/accessibilityService;1", &kNS_ACCESSIBILITY_SERVICE_CID },
--- a/accessible/src/base/nsAccUtils.cpp +++ b/accessible/src/base/nsAccUtils.cpp @@ -435,17 +435,18 @@ nsAccUtils::GetTextAccessibleFromSelecti return nsnull; } do { nsHyperTextAccessible* textAcc = accessible->AsHyperText(); if (textAcc) return textAcc; - } while (accessible = accessible->Parent()); + accessible = accessible->Parent(); + } while (accessible); NS_NOTREACHED("We must reach document accessible implementing nsIAccessibleText!"); return nsnull; } nsresult nsAccUtils::ConvertToScreenCoords(PRInt32 aX, PRInt32 aY, PRUint32 aCoordinateType,
--- a/accessible/src/base/nsDocAccessible.cpp +++ b/accessible/src/base/nsDocAccessible.cpp @@ -1560,24 +1560,24 @@ nsDocAccessible::AddDependentIDsFor(nsAc { for (PRUint32 idx = 0; idx < kRelationAttrsLen; idx++) { nsIAtom* relAttr = *kRelationAttrs[idx]; if (aRelAttr && aRelAttr != relAttr) continue; if (relAttr == nsGkAtoms::_for) { if (!aRelProvider->GetContent()->IsHTML() || - aRelProvider->GetContent()->Tag() != nsGkAtoms::label && - aRelProvider->GetContent()->Tag() != nsGkAtoms::output) + (aRelProvider->GetContent()->Tag() != nsGkAtoms::label && + aRelProvider->GetContent()->Tag() != nsGkAtoms::output)) continue; } else if (relAttr == nsGkAtoms::control) { if (!aRelProvider->GetContent()->IsXUL() || - aRelProvider->GetContent()->Tag() != nsGkAtoms::label && - aRelProvider->GetContent()->Tag() != nsGkAtoms::description) + (aRelProvider->GetContent()->Tag() != nsGkAtoms::label && + aRelProvider->GetContent()->Tag() != nsGkAtoms::description)) continue; } IDRefsIterator iter(aRelProvider->GetContent(), relAttr); while (true) { const nsDependentSubstring id = iter.NextID(); if (id.IsEmpty()) break;
--- a/accessible/src/html/nsHTMLTableAccessible.cpp +++ b/accessible/src/html/nsHTMLTableAccessible.cpp @@ -101,19 +101,17 @@ nsHTMLTableCellAccessible::NativeState() { PRUint64 state = nsHyperTextAccessibleWrap::NativeState(); nsIFrame *frame = mContent->GetPrimaryFrame(); NS_ASSERTION(frame, "No frame for valid cell accessible!"); if (frame) { state |= states::SELECTABLE; - bool isSelected = false; - frame->GetSelected(&isSelected); - if (isSelected) + if (frame->IsSelected()) state |= states::SELECTED; } return state; } nsresult nsHTMLTableCellAccessible::GetAttributesInternal(nsIPersistentProperties *aAttributes)
--- a/accessible/src/xul/nsXULTreeGridAccessible.cpp +++ b/accessible/src/xul/nsXULTreeGridAccessible.cpp @@ -1247,18 +1247,22 @@ nsXULTreeGridCellAccessible::RelationByT //////////////////////////////////////////////////////////////////////////////// // nsXULTreeGridCellAccessible: public implementation PRInt32 nsXULTreeGridCellAccessible::GetColumnIndex() const { PRInt32 index = 0; nsCOMPtr<nsITreeColumn> column = mColumn; - while (column = nsCoreUtils::GetPreviousSensibleColumn(column)) + while (true) { + column = nsCoreUtils::GetPreviousSensibleColumn(column); + if (!column) + break; index++; + } return index; } void nsXULTreeGridCellAccessible::CellInvalidated() { nsAutoString textEquiv;
--- a/accessible/tests/mochitest/table/test_table_1.html +++ b/accessible/tests/mochitest/table/test_table_1.html @@ -21,28 +21,34 @@ function doTest() var cell = getNode("col2b"); var range = document.createRange(); range.selectNode(cell); s.addRange(range); is(accTable.selectedCellCount, 1, "only one cell selected"); cell = getNode("col2a"); + range = document.createRange(); range.selectNode(cell); s.addRange(range); cell = getNode("col2c"); + range = document.createRange(); range.selectNode(cell); s.addRange(range); is(accTable.selectedColumnCount, 1, "only one column selected"); + cell = getNode("row2a"); + range = document.createRange(); range.selectNode(cell); s.addRange(range); cell = getNode("row2b"); + range = document.createRange(); range.selectNode(cell); s.addRange(range); + range = document.createRange(); cell = getNode("row2c"); range.selectNode(cell); s.addRange(range); is(accTable.selectedRowCount, 1, "no cells selected"); var columnDescription; works = true;
--- a/b2g/app/b2g.js +++ b/b2g/app/b2g.js @@ -44,18 +44,18 @@ pref("browser.chromeURL", "chrome://brow pref("browser.homescreenURL", "file:///system/home/homescreen.html"); #else pref("browser.homescreenURL", "file:///data/local/homescreen.html,file:///system/home/homescreen.html"); #endif // Device pixel to CSS px ratio, in percent. Set to -1 to calculate based on display density. pref("browser.viewport.scaleRatio", -1); -/* allow scrollbars to float above chrome ui */ -pref("ui.scrollbarsCanOverlapContent", 1); +/* disable text selection */ +pref("browser.ignoreNativeFrameTextSelection", true); /* cache prefs */ pref("browser.cache.disk.enable", false); pref("browser.cache.disk.capacity", 0); // kilobytes pref("browser.cache.disk.smart_size.enabled", false); pref("browser.cache.disk.smart_size.first_run", false); pref("browser.cache.memory.enable", true);
new file mode 100644 --- /dev/null +++ b/b2g/chrome/content/content.css @@ -0,0 +1,112 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla B2G. + * + * The Initial Developer of the Original Code is + * Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +@namespace url("http://www.w3.org/1999/xhtml"); +@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +/* Style the scrollbars */ +xul|window xul|scrollbar { + display: none; +} + +html xul|scrollbar { + display: block; +} + +xul|scrollbar[orient="vertical"] { + -moz-appearance: none !important; + position: relative; + margin-left: -8px; + min-width: 8px; + max-width: 8px; + background-color: transparent !important; + background-image: none !important; + border: 0px solid transparent !important; +} + +xul|scrollbar[orient="vertical"]:-moz-locale-dir(rtl) { + margin-left: 2px; + margin-right: -10px; +} + +xul|scrollbar[orient="vertical"] xul|thumb { + max-width: 6px !important; + min-width: 6px !important; +} + +xul|scrollbar[orient="horizontal"] { + -moz-appearance: none !important; + position: relative; + min-height: 8px; + max-height: 8px; + margin-top: -8px; + background-color: transparent !important; + background-image: none !important; + border: 0px solid transparent !important; +} + +xul|scrollbar[orient="horizontal"] xul|thumb { + max-height: 6px !important; + min-height: 6px !important; +} + +xul|scrollbox { + overflow-y: scroll; + overflow-x: scroll; +} + +xul|scrollbarbutton { + min-height: 8px !important; + min-width: 8px !important; + -moz-appearance: none !important; + visibility: hidden; +} + +xul|scrollbarbutton[sbattr="scrollbar-up-top"], +xul|scrollbarbutton[sbattr="scrollbar-bottom-top"] { + display: none; +} + +xul|thumb { + background-color: rgba(0, 0, 0, 0.4) !important; + -moz-border-top-colors: none !important; + -moz-border-bottom-colors: none !important; + -moz-border-right-colors: none !important; + -moz-border-left-colors: none !important; + border: 1px solid rgba(255, 255, 255, 0.4) !important; + -moz-border-radius: 3px; +} +
--- a/b2g/chrome/jar.mn +++ b/b2g/chrome/jar.mn @@ -4,11 +4,12 @@ chrome.jar: % content branding %content/branding/ % content browser %content/ * content/shell.xul (content/shell.xul) content/shell.js (content/shell.js) content/touch.js (content/touch.js) content/commandUtil.js (content/commandUtil.js) content/httpd.js (content/httpd.js) + content/content.css (content/content.css) % override chrome://global/content/netError.xhtml chrome://browser/content/netError.xhtml content/netError.xhtml (content/netError.xhtml)
--- a/b2g/components/B2GComponents.manifest +++ b/b2g/components/B2GComponents.manifest @@ -0,0 +1,2 @@ +# Scrollbars +category agent-style-sheets browser-content-stylesheet chrome://browser/content/content.css
--- a/browser/app/blocklist.xml +++ b/browser/app/blocklist.xml @@ -220,9 +220,9 @@ <feature>DIRECT3D_9_LAYERS</feature> <featureStatus>BLOCKED_DRIVER_VERSION</featureStatus> <driverVersion>7.0.0.0</driverVersion> <driverVersionComparator>GREATER_THAN_OR_EQUAL</driverVersionComparator> </gfxBlacklistEntry> </gfxItems> -</blocklist> +</blocklist> \ No newline at end of file
--- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -76,16 +76,20 @@ pref("extensions.blocklist.interval", 86 // blocking them. pref("extensions.blocklist.level", 2); pref("extensions.blocklist.url", "https://addons.mozilla.org/blocklist/3/%APP_ID%/%APP_VERSION%/%PRODUCT%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/%PING_COUNT%/%TOTAL_PING_COUNT%/%DAYS_SINCE_LAST_PING%/"); pref("extensions.blocklist.detailsURL", "https://www.mozilla.com/%LOCALE%/blocklist/"); pref("extensions.blocklist.itemURL", "https://addons.mozilla.org/%LOCALE%/%APP%/blocked/%blockID%"); pref("extensions.update.autoUpdateDefault", true); +pref("extensions.hotfix.id", "firefox-hotfix@mozilla.org"); +pref("extensions.hotfix.cert.checkAttributes", true); +pref("extensions.hotfix.certs.1.sha1Fingerprint", "foo"); + // Disable add-ons installed into the shared user and shared system areas by // default. This does not include the application directory. See the SCOPE // constants in AddonManager.jsm for values to use here pref("extensions.autoDisableScopes", 15); // Dictionary download preference pref("browser.dictionaries.download.url", "https://addons.mozilla.org/%LOCALE%/firefox/dictionaries/"); @@ -922,22 +926,28 @@ pref("browser.taskbar.lists.frequent.ena pref("browser.taskbar.lists.recent.enabled", false); pref("browser.taskbar.lists.maxListItemCount", 7); pref("browser.taskbar.lists.tasks.enabled", true); pref("browser.taskbar.lists.refreshInSeconds", 120); #endif #ifdef MOZ_SERVICES_SYNC // The sync engines to use. -pref("services.sync.registerEngines", "Bookmarks,Form,History,Password,Prefs,Tab"); +pref("services.sync.registerEngines", "Bookmarks,Form,History,Password,Prefs,Tab,Addons"); // Preferences to be synced by default pref("services.sync.prefs.sync.accessibility.blockautorefresh", true); pref("services.sync.prefs.sync.accessibility.browsewithcaret", true); pref("services.sync.prefs.sync.accessibility.typeaheadfind", true); pref("services.sync.prefs.sync.accessibility.typeaheadfind.linksonly", true); +pref("services.sync.prefs.sync.addons.ignoreUserEnabledChanges", true); +// The addons prefs related to repository verification are intentionally +// not synced for security reasons. If a system is compromised, a user +// could weaken the pref locally, install an add-on from an untrusted +// source, and this would propagate automatically to other, +// uncompromised Sync-connected devices. pref("services.sync.prefs.sync.app.update.mode", true); pref("services.sync.prefs.sync.browser.download.manager.closeWhenDone", true); pref("services.sync.prefs.sync.browser.download.manager.retention", true); pref("services.sync.prefs.sync.browser.download.manager.scanWhenDone", true); pref("services.sync.prefs.sync.browser.download.manager.showWhenStarting", true); pref("services.sync.prefs.sync.browser.formfill.enable", true); pref("services.sync.prefs.sync.browser.link.open_newwindow", true); pref("services.sync.prefs.sync.browser.offline-apps.notify", true);
--- a/browser/base/content/aboutDialog.js +++ b/browser/base/content/aboutDialog.js @@ -35,16 +35,18 @@ # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** --> // Services = object with smart getters for common XPCOM services Components.utils.import("resource://gre/modules/Services.jsm"); +const PREF_EM_HOTFIX_ID = "extensions.hotfix.id"; + function init(aEvent) { if (aEvent.target != document) return; try { var distroId = Services.prefs.getCharPref("distribution.id"); if (distroId) { @@ -60,22 +62,24 @@ function init(aEvent) distroIdField.value = distroId + " - " + distroVersion; distroIdField.style.display = "block"; } } catch (e) { // Pref is unset } - // Include the build ID if this is an "a#" (nightly or aurora) build + // Include the build ID and display warning if this is an "a#" (nightly or aurora) build let version = Services.appinfo.version; if (/a\d+$/.test(version)) { let buildID = Services.appinfo.appBuildID; let buildDate = buildID.slice(0,4) + "-" + buildID.slice(4,6) + "-" + buildID.slice(6,8); document.getElementById("version").textContent += " (" + buildDate + ")"; + document.getElementById("experimental").hidden = false; + document.getElementById("communityDesc").hidden = true; } #ifdef MOZ_OFFICIAL_BRANDING // Hide the Charlton trademark attribution for non-en-US/en-GB // DO NOT REMOVE without consulting people involved with bug 616193 let chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"]. getService(Components.interfaces.nsIXULChromeRegistry); let currentLocale = chromeRegistry.getSelectedLocale("global"); @@ -373,16 +377,21 @@ appUpdater.prototype = return this; } }, /** * Checks the compatibility of add-ons for the application update. */ checkAddonCompatibility: function() { + try { + var hotfixID = Services.prefs.getCharPref(PREF_EM_HOTFIX_ID); + } + catch (e) { } + var self = this; AddonManager.getAllAddons(function(aAddons) { self.addons = []; self.addonsCheckedCount = 0; aAddons.forEach(function(aAddon) { // Protect against code that overrides the add-ons manager and doesn't // implement the isCompatibleWith or the findUpdates method. if (!("isCompatibleWith" in aAddon) || !("findUpdates" in aAddon)) { @@ -397,19 +406,20 @@ appUpdater.prototype = // If an add-on isn't appDisabled and isn't userDisabled then it is // either active now or the user expects it to be active after the // restart. If that is the case and the add-on is not installed by the // application and is not compatible with the new application version // then the user should be warned that the add-on will become // incompatible. If an addon's type equals plugin it is skipped since // checking plugins compatibility information isn't supported and // getting the scope property of a plugin breaks in some environments - // (see bug 566787). + // (see bug 566787). The hotfix add-on is also ignored as it shouldn't + // block the user from upgrading. try { - if (aAddon.type != "plugin" && + if (aAddon.type != "plugin" && aAddon.id != hotfixID && !aAddon.appDisabled && !aAddon.userDisabled && aAddon.scope != AddonManager.SCOPE_APPLICATION && aAddon.isCompatible && !aAddon.isCompatibleWith(self.update.appVersion, self.update.platformVersion)) self.addons.push(aAddon); } catch (e) {
--- a/browser/base/content/aboutDialog.xul +++ b/browser/base/content/aboutDialog.xul @@ -115,18 +115,29 @@ #endif </vbox> #ifdef MOZ_UPDATER <description class="text-blurb" id="currentChannelText"> &channel.description.start;<label id="currentChannel"/>&channel.description.end; </description> #endif + <vbox id="experimental" hidden="true"> + <description class="text-blurb" id="warningDesc"> + &warningDesc.version; +#ifdef MOZ_TELEMETRY_REPORTING + &warningDesc.telemetry; +#endif + </description> + <description class="text-blurb" id="communityExperimentalDesc"> + &community.exp.start;<label class="text-link" href="http://www.mozilla.org/">&community.exp.mozillaLink;</label>&community.exp.middle;<label class="text-link" href="about:credits">&community.exp.creditsLink;</label>&community.exp.end; + </description> + </vbox> <description class="text-blurb" id="communityDesc"> - &community.start2;<label class="text-link" href="http://www.mozilla.org/">&community.mozillaLink;</label>&community.middle2;<label class="text-link" href="about:credits">&community.creditsLink;</label>&community.end2; + &community.start2;<label class="text-link" href="http://www.mozilla.org/">&community.mozillaLink;</label>&community.middle2;<label class="text-link" href="about:credits">&community.creditsLink;</label>&community.end3; </description> <description class="text-blurb" id="contributeDesc"> &contribute.start;<label class="text-link" href="http://www.mozilla.org/contribute/">&contribute.getInvolvedLink;</label>&contribute.end; </description> </vbox> </vbox> </hbox> <vbox id="bottomBox">
--- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -2192,24 +2192,17 @@ function openLocation() { function openLocationCallback() { // make sure the DOM is ready setTimeout(function() { this.openLocation(); }, 0); } function BrowserOpenTab() { - if (!gBrowser) { - // If there are no open browser windows, open a new one - window.openDialog("chrome://browser/content/", "_blank", - "chrome,all,dialog=no", "about:blank"); - return; - } - gBrowser.loadOneTab("about:blank", {inBackground: false}); - focusAndSelectUrlBar(); + openUILinkIn("about:blank", "tab"); } /* Called from the openLocation dialog. This allows that dialog to instruct its opener to open a new window and then step completely out of the way. Anything less byzantine is causing horrible crashes, rather believably, though oddly only on Linux. */ function delayedOpenWindow(chrome, flags, href, postData) { @@ -3006,19 +2999,20 @@ function getMarkupDocumentViewer() * which performs the same function, but for embedded clients that * don't use a XUL/JS layer. It is important that the logic of * these two routines be kept more or less in sync. * (pinkerton) **/ function FillInHTMLTooltip(tipElement) { var retVal = false; - // Don't show the tooltip if the tooltip node is a XUL element or a document. + // Don't show the tooltip if the tooltip node is a XUL element, a document or is disconnected. if (tipElement.namespaceURI == "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" || - !tipElement.ownerDocument) + !tipElement.ownerDocument || + tipElement.ownerDocument.compareDocumentPosition(tipElement) == document.DOCUMENT_POSITION_DISCONNECTED) return retVal; const XLinkNS = "http://www.w3.org/1999/xlink"; var titleText = null; var XLinkTitleText = null; var SVGTitleText = null; @@ -3036,20 +3030,20 @@ function FillInHTMLTooltip(tipElement) // If the element is barred from constraint validation or valid, // the validation message will be the empty string. titleText = tipElement.validationMessage; } while (!titleText && !XLinkTitleText && !SVGTitleText && tipElement) { if (tipElement.nodeType == Node.ELEMENT_NODE) { titleText = tipElement.getAttribute("title"); - if ((tipElement instanceof HTMLAnchorElement && tipElement.href) || - (tipElement instanceof HTMLAreaElement && tipElement.href) || - (tipElement instanceof HTMLLinkElement && tipElement.href) || - (tipElement instanceof SVGAElement && tipElement.hasAttributeNS(XLinkNS, "href"))) { + if ((tipElement instanceof HTMLAnchorElement || + tipElement instanceof HTMLAreaElement || + tipElement instanceof HTMLLinkElement || + tipElement instanceof SVGAElement) && tipElement.href) { XLinkTitleText = tipElement.getAttributeNS(XLinkNS, "title"); } if (lookingForSVGTitle && (!(tipElement instanceof SVGElement) || tipElement.parentNode.nodeType == Node.DOCUMENT_NODE)) { lookingForSVGTitle = false; } if (lookingForSVGTitle) { @@ -8794,17 +8788,17 @@ function switchToTabHavingURI(aURI, aOpe return true; } // No opened tab has that url. if (aOpenNew) { if (isBrowserWindow && isTabEmpty(gBrowser.selectedTab)) gBrowser.selectedBrowser.loadURI(aURI.spec); else - openUILinkIn(aURI.spec, "tab", { inBackground: false }); + openUILinkIn(aURI.spec, "tab"); } return false; } function restoreLastSession() { let ss = Cc["@mozilla.org/browser/sessionstore;1"]. getService(Ci.nsISessionStore); @@ -8904,30 +8898,26 @@ function safeModeRestart() * * delta is the offset to the history entry that you want to load. */ function duplicateTabIn(aTab, where, delta) { let newTab = Cc['@mozilla.org/browser/sessionstore;1'] .getService(Ci.nsISessionStore) .duplicateTab(window, aTab, delta); - var loadInBackground = - getBoolPref("browser.tabs.loadBookmarksInBackground", false); - switch (where) { case "window": gBrowser.hideTab(newTab); gBrowser.replaceTabWithWindow(newTab); break; case "tabshifted": - loadInBackground = !loadInBackground; - // fall through + // A background tab has been opened, nothing else to do here. + break; case "tab": - if (!loadInBackground) - gBrowser.selectedTab = newTab; + gBrowser.selectedTab = newTab; break; } } /* * When addons are installed/uninstalled, check and see if the number of items * on the add-on bar changed: * - If an add-on was installed, incrementing the count, show the bar.
--- a/browser/base/content/browser.xul +++ b/browser/base/content/browser.xul @@ -50,16 +50,17 @@ # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** <?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/devtools/webconsole.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/" 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 @@ -966,59 +967,65 @@ contentcontextmenu="contentAreaContextMenu" autocompletepopup="PopupAutoComplete" onclick="return contentAreaClick(event, false);"/> <statuspanel id="statusbar-display" inactive="true"/> </vbox> <splitter id="devtools-side-splitter" hidden="true"/> <vbox id="devtools-sidebar-box" hidden="true" style="min-width: 18em; width: 22em; max-width: 42em;" persist="width"> - <toolbar id="devtools-sidebar-toolbar" nowindowdrag="true"/> + <toolbar id="devtools-sidebar-toolbar" + class="devtools-toolbar" + nowindowdrag="true"/> <deck id="devtools-sidebar-deck" flex="1"/> </vbox> <vbox id="browser-border-end" hidden="true" layer="true"/> </hbox> <hbox id="full-screen-warning-container" hidden="true" fadeout="true"> <hbox style="width: 100%;" pack="center"> <!-- Inner hbox needed due to bug 579776. --> <hbox id="full-screen-warning-message"> <description id="full-screen-warning-text" value="&domFullScreenWarning.label;"></description> </hbox> </hbox> </hbox> <vbox id="browser-bottombox" layer="true"> <toolbar id="inspector-toolbar" + class="devtools-toolbar" nowindowdrag="true" hidden="true"> <vbox flex="1"> <resizer id="inspector-top-resizer" flex="1" class="inspector-resizer" dir="top" disabled="true" element="inspector-tree-box"/> <hbox> #ifdef XP_MACOSX <toolbarbutton id="highlighter-closebutton" oncommand="InspectorUI.closeInspectorUI(false);" tooltiptext="&inspectCloseButton.tooltiptext;"/> #endif <toolbarbutton id="inspector-inspect-toolbutton" + class="devtools-toolbarbutton" label="&inspectButton.label;" accesskey="&inspectButton.accesskey;" command="Inspector:Inspect"/> <arrowscrollbox id="inspector-breadcrumbs" flex="1" orient="horizontal" clicktoscroll="true"/> <hbox id="inspector-tools"> <toolbarbutton id="inspector-3D-button" + class="devtools-toolbarbutton" hidden="true" label="&inspect3DButton.label;" accesskey="&inspect3DButton.accesskey;" command="Inspector:Tilt"/> <toolbarbutton id="inspector-style-button" + class="devtools-toolbarbutton" label="&inspectStyleButton.label;" accesskey="&inspectStyleButton.accesskey;" command="Inspector:Sidebar"/> <!-- registered tools go here --> </hbox> #ifndef XP_MACOSX <toolbarbutton id="highlighter-closebutton" oncommand="InspectorUI.closeInspectorUI(false);"
--- a/browser/base/content/sanitize.js +++ b/browser/base/content/sanitize.js @@ -199,34 +199,23 @@ Sanitizer.prototype = { { return true; } }, offlineApps: { clear: function () { - const Cc = Components.classes; - const Ci = Components.interfaces; - var cacheService = Cc["@mozilla.org/network/cache-service;1"]. - getService(Ci.nsICacheService); - try { - // Offline app data is "timeless", and doesn't respect - // the setting of timespan, it always clears everything - cacheService.evictEntries(Ci.nsICache.STORE_OFFLINE); - } catch(er) {} - - var storageManagerService = Cc["@mozilla.org/dom/storagemanager;1"]. - getService(Ci.nsIDOMStorageManager); - storageManagerService.clearOfflineApps(); + Components.utils.import("resource:///modules/offlineAppCache.jsm"); + OfflineAppCacheHelper.clear(); }, get canClear() { - return true; + return true; } }, history: { clear: function () { var globalHistory = Components.classes["@mozilla.org/browser/global-history;2"] .getService(Components.interfaces.nsIBrowserHistory);
--- a/browser/base/content/sanitize.xul +++ b/browser/base/content/sanitize.xul @@ -88,16 +88,17 @@ <preferences id="sanitizePreferences"> <preference id="privacy.cpd.history" name="privacy.cpd.history" type="bool"/> <preference id="privacy.cpd.formdata" name="privacy.cpd.formdata" type="bool"/> <preference id="privacy.cpd.downloads" name="privacy.cpd.downloads" type="bool" disabled="true"/> <preference id="privacy.cpd.cookies" name="privacy.cpd.cookies" type="bool"/> <preference id="privacy.cpd.cache" name="privacy.cpd.cache" type="bool"/> <preference id="privacy.cpd.sessions" name="privacy.cpd.sessions" type="bool"/> + <preference id="privacy.cpd.offlineApps" name="privacy.cpd.offlineApps" type="bool"/> <preference id="privacy.cpd.siteSettings" name="privacy.cpd.siteSettings" type="bool"/> </preferences> <preferences id="nonItemPreferences"> <preference id="privacy.sanitize.timeSpan" name="privacy.sanitize.timeSpan" type="int"/> </preferences> @@ -170,17 +171,17 @@ class="expander-down" persist="class" oncommand="gSanitizePromptDialog.toggleItemList();"/> <label id="detailsExpanderLabel" value="&detailsProgressiveDisclosure.label;" accesskey="&detailsProgressiveDisclosure.accesskey;" control="detailsExpander"/> </hbox> - <listbox id="itemList" rows="6" collapsed="true" persist="collapsed"> + <listbox id="itemList" rows="7" collapsed="true" persist="collapsed"> <listitem label="&itemHistoryAndDownloads.label;" type="checkbox" accesskey="&itemHistoryAndDownloads.accesskey;" preference="privacy.cpd.history" onsyncfrompreference="return gSanitizePromptDialog.onReadGeneric();"/> <listitem label="&itemFormSearchHistory.label;" type="checkbox" accesskey="&itemFormSearchHistory.accesskey;" @@ -196,16 +197,21 @@ accesskey="&itemCache.accesskey;" preference="privacy.cpd.cache" onsyncfrompreference="return gSanitizePromptDialog.onReadGeneric();"/> <listitem label="&itemActiveLogins.label;" type="checkbox" accesskey="&itemActiveLogins.accesskey;" preference="privacy.cpd.sessions" onsyncfrompreference="return gSanitizePromptDialog.onReadGeneric();"/> + <listitem label="&itemOfflineApps.label;" + type="checkbox" + accesskey="&itemOfflineApps.accesskey;" + preference="privacy.cpd.offlineApps" + onsyncfrompreference="return gSanitizePromptDialog.onReadGeneric();"/> <listitem label="&itemSitePreferences.label;" type="checkbox" accesskey="&itemSitePreferences.accesskey;" preference="privacy.cpd.siteSettings" noduration="true" onsyncfrompreference="return gSanitizePromptDialog.onReadGeneric();"/> </listbox>
--- a/browser/base/content/syncSetup.js +++ b/browser/base/content/syncSetup.js @@ -577,17 +577,18 @@ var gSyncSetup = { this.completePairing(); } if (!this._resettingSync) { function isChecked(element) { return document.getElementById(element).hasAttribute("checked"); } - let prefs = ["engine.bookmarks", "engine.passwords", "engine.history", "engine.tabs", "engine.prefs"]; + let prefs = ["engine.bookmarks", "engine.passwords", "engine.history", + "engine.tabs", "engine.prefs", "engine.addons"]; for (let i = 0;i < prefs.length;i++) { Weave.Svc.Prefs.set(prefs[i], isChecked(prefs[i])); } this._handleNoScript(false); if (Weave.Svc.Prefs.get("firstSync", "") == "notReady") Weave.Svc.Prefs.reset("firstSync"); Weave.Service.persistLogin();
--- a/browser/base/content/syncSetup.xul +++ b/browser/base/content/syncSetup.xul @@ -115,17 +115,17 @@ </hbox> </wizardpage> <wizardpage id="pickSetupType" label="&syncBrand.fullName.label;" onpageshow="gSyncSetup.onPageShow()"> <vbox align="center" flex="1"> <description style="padding: 0 7em;"> - &setup.pickSetupType.description; + &setup.pickSetupType.description2; </description> <spacer flex="3"/> <button id="newAccount" class="accountChoiceButton" label="&button.createNewAccount.label;" oncommand="gSyncSetup.startNewAccountSetup()" align="center"/> <spacer flex="1"/> @@ -423,16 +423,20 @@ <checkbox label="&engine.history.label;" accesskey="&engine.history.accesskey;" id="engine.history" checked="true"/> <checkbox label="&engine.tabs.label;" accesskey="&engine.tabs.accesskey;" id="engine.tabs" checked="true"/> + <checkbox label="&engine.addons.label;" + accesskey="&engine.addons.accesskey;" + id="engine.addons" + checked="true"/> </vbox> </row> </rows> </grid> </groupbox> <groupbox id="mergeOptions"> <radiogroup id="mergeChoiceRadio" pack="start">
--- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -611,17 +611,18 @@ onLocationChange: function (aWebProgress, aRequest, aLocation, aFlags) { // OnLocationChange is called for both the top-level content // and the subframes. let topLevel = aWebProgress.DOMWindow == this.mBrowser.contentWindow; if (topLevel) { // The document loaded correctly, clear the value if we should - if (this.mBrowser.userTypedClear > 0) + if (this.mBrowser.userTypedClear > 0 || + (aRequest && !Components.isSuccessCode(aRequest.status))) this.mBrowser.userTypedValue = null; // Clear out the missing plugins list since it's related to the // previous location. this.mBrowser.missingPlugins = null; // Don't clear the favicon if this onLocationChange was // triggered by a pushState or a replaceState. See bug 550565. @@ -1259,18 +1260,20 @@ t.setAttribute("fadein", "true"); setTimeout(function (tabContainer) { tabContainer._handleNewTab(t); }, 0, this.tabContainer); } else { setTimeout(function (tabContainer) { if (t.pinned) tabContainer._handleNewTab(t); - else + else { + t._animStartTime = Date.now(); t.setAttribute("fadein", "true"); + } }, 0, this.tabContainer); } this.tabContainer.appendChild(t); // invalidate cache, because tabContainer is about to change this._browsers = null; @@ -1521,16 +1524,18 @@ this._removingTabs.length > 3 /* don't want lots of concurrent animations */ || aTab.getAttribute("fadein") != "true" /* fade-in transition hasn't been triggered yet */ || window.getComputedStyle(aTab).maxWidth == "0.1px" /* fade-in transition hasn't moved yet */ || !Services.prefs.getBoolPref("browser.tabs.animate")) { this._endRemoveTab(aTab); return; } + aTab._animStartTime = Date.now(); + this._blurTab(aTab); aTab.style.maxWidth = ""; // ensure that fade-out transition happens aTab.removeAttribute("fadein"); setTimeout(function (tab, tabbrowser) { if (tab.parentNode && window.getComputedStyle(tab).maxWidth == "0.1px") { NS_ASSERT(false, "Giving up waiting for the tab closing animation to finish (bug 608589)"); @@ -3252,16 +3257,24 @@ <handler event="TabSelect" action="this._handleTabSelect();"/> <handler event="transitionend"><![CDATA[ if (event.propertyName != "max-width") return; var tab = event.target; + if (tab._animStartTime) { + Services.telemetry.getHistogramById(tab.closing ? + "FX_TAB_ANIM_CLOSE_MS" : + "FX_TAB_ANIM_OPEN_MS") + .add(Date.now() - tab._animStartTime); + tab._animStartTime = 0; + } + if (tab.getAttribute("fadein") == "true") { if (tab._fullyOpen) this.adjustTabstrip(); else this._handleNewTab(tab); } else if (tab.closing) { this.tabbrowser._endRemoveTab(tab); }
--- a/browser/base/content/test/Makefile.in +++ b/browser/base/content/test/Makefile.in @@ -159,16 +159,17 @@ endif browser_bug594131.js \ browser_bug595507.js \ browser_bug596687.js \ browser_bug597218.js \ browser_bug598923.js \ browser_bug599325.js \ browser_bug609700.js \ browser_bug616836.js \ + browser_bug623155.js \ browser_bug623893.js \ browser_bug624734.js \ browser_bug647886.js \ browser_bug655584.js \ browser_bug664672.js \ browser_bug710878.js \ browser_canonizeURL.js \ browser_findbarClose.js \ @@ -249,16 +250,17 @@ endif browser_addon_bar_aomlistener.js \ test_bug628179.html \ browser_wyciwyg_urlbarCopying.js \ test_wyciwyg_copying.html \ authenticate.sjs \ browser_minimize.js \ browser_aboutSyncProgress.js \ browser_middleMouse_inherit.js \ + redirect_bug623155.sjs \ $(NULL) ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT)) _BROWSER_FILES += \ browser_bug462289.js \ $(NULL) else _BROWSER_FILES += \
--- a/browser/base/content/test/browser_bug594131.js +++ b/browser/base/content/test/browser_bug594131.js @@ -30,31 +30,26 @@ * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ function test() { - let backgroundPref = "browser.tabs.loadBookmarksInBackground"; let newTab = gBrowser.addTab("http://example.com"); waitForExplicitFinish(); newTab.linkedBrowser.addEventListener("load", mainPart, true); - - Services.prefs.setBoolPref(backgroundPref, true); - + function mainPart() { newTab.linkedBrowser.removeEventListener("load", mainPart, true); gBrowser.pinTab(newTab); gBrowser.selectedTab = newTab; - - openUILinkIn("http://example.org/", "current"); + + openUILinkIn("http://example.org/", "current", { inBackground: true }); isnot(gBrowser.selectedTab, newTab, "shouldn't load in background"); - - if (Services.prefs.prefHasUserValue(backgroundPref)) - Services.prefs.clearUserPref(backgroundPref); + gBrowser.removeTab(newTab); gBrowser.removeTab(gBrowser.tabs[1]); // example.org tab finish(); } }
new file mode 100644 --- /dev/null +++ b/browser/base/content/test/browser_bug623155.js @@ -0,0 +1,134 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const REDIRECT_FROM = "https://example.com/browser/browser/base/content/test/" + + "redirect_bug623155.sjs"; + +const REDIRECT_TO = "https://www.bank1.com/"; // Bad-cert host. + +function isRedirectedURISpec(aURISpec) { + return isRedirectedURI(Services.io.newURI(aURISpec, null, null)); +} + +function isRedirectedURI(aURI) { + // Compare only their before-hash portion. + return Services.io.newURI(REDIRECT_TO, null, null) + .equalsExceptRef(aURI); +} + +/* + Test. + +1. Load +https://example.com/browser/browser/base/content/test/redirect_bug623155.sjs#BG + in a background tab. + +2. The redirected URI is <https://www.bank1.com/#BG>, which displayes a cert + error page. + +3. Switch the tab to foreground. + +4. Check the URLbar's value, expecting <https://www.bank1.com/#BG> + +5. Load +https://example.com/browser/browser/base/content/test/redirect_bug623155.sjs#FG + in the foreground tab. + +6. The redirected URI is <https://www.bank1.com/#FG>. And this is also + a cert-error page. + +7. Check the URLbar's value, expecting <https://www.bank1.com/#FG> + +8. End. + + */ + +function test() { + waitForExplicitFinish(); + + // Load a URI in the background. + gNewTab = gBrowser.addTab(REDIRECT_FROM + "#BG"); + gBrowser.getBrowserForTab(gNewTab) + .webProgress + .addProgressListener(gWebProgressListener, + Components.interfaces.nsIWebProgress + .NOTIFY_LOCATION); +} + +var gWebProgressListener = { + QueryInterface: function(aIID) { + if (aIID.equals(Components.interfaces.nsIWebProgressListener) || + aIID.equals(Components.interfaces.nsISupportsWeakReference) || + aIID.equals(Components.interfaces.nsISupports)) + return this; + throw Components.results.NS_NOINTERFACE; + }, + + // --------------------------------------------------------------------------- + // NOTIFY_LOCATION mode should work fine without these methods. + // + //onStateChange: function() {}, + //onStatusChange: function() {}, + //onProgressChange: function() {}, + //onSecurityChange: function() {}, + //---------------------------------------------------------------------------- + + onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) { + if (!aRequest) { + // This is bug 673752, or maybe initial "about:blank". + return; + } + + ok(gNewTab, "There is a new tab."); + ok(isRedirectedURI(aLocation), + "onLocationChange catches only redirected URI."); + + if (aLocation.ref == "BG") { + // This is background tab's request. + isnot(gNewTab, gBrowser.selectedTab, "This is a background tab."); + } else if (aLocation.ref == "FG") { + // This is foreground tab's request. + is(gNewTab, gBrowser.selectedTab, "This is a foreground tab."); + } + else { + // We shonuld not reach here. + ok(false, "This URI hash is not expected:" + aLocation.ref); + } + + let isSelectedTab = (gNewTab == gBrowser.selectedTab); + setTimeout(delayed, 0, isSelectedTab); + } +}; + +function delayed(aIsSelectedTab) { + // Switch tab and confirm URL bar. + if (!aIsSelectedTab) { + gBrowser.selectedTab = gNewTab; + } + + ok(isRedirectedURISpec(content.location.href), + "The content area is redirected. aIsSelectedTab:" + aIsSelectedTab); + is(gURLBar.value, content.location.href, + "The URL bar shows the content URI. aIsSelectedTab:" + aIsSelectedTab); + + if (!aIsSelectedTab) { + // If this was a background request, go on a foreground request. + content.location = REDIRECT_FROM + "#FG"; + } + else { + // Othrewise, nothing to do remains. + finish(); + } +} + +/* Cleanup */ +registerCleanupFunction(function() { + if (gNewTab) { + gBrowser.getBrowserForTab(gNewTab) + .webProgress + .removeProgressListener(gWebProgressListener); + + gBrowser.removeTab(gNewTab); + } + gNewTab = null; +});
--- a/browser/base/content/test/browser_sanitizeDialog.js +++ b/browser/base/content/test/browser_sanitizeDialog.js @@ -458,16 +458,118 @@ var gAllTests = [ this.checkDetails(false); // Show details this.toggleDetails(); this.checkDetails(true); this.cancelDialog(); }; wh.open(); + }, + function () { + // Test for offline apps data and cache deletion + + // Prepare stuff, we will work with www.example.com + var URL = "http://www.example.com"; + + var ios = Cc["@mozilla.org/network/io-service;1"] + .getService(Ci.nsIIOService); + var URI = ios.newURI(URL, null, null); + + var sm = Cc["@mozilla.org/scriptsecuritymanager;1"] + .getService(Ci.nsIScriptSecurityManager); + var principal = sm.getCodebasePrincipal(URI); + + // Give www.example.com privileges to store offline data + var pm = Cc["@mozilla.org/permissionmanager;1"] + .getService(Ci.nsIPermissionManager); + pm.add(URI, "offline-app", Ci.nsIPermissionManager.ALLOW_ACTION); + pm.add(URI, "offline-app", Ci.nsIOfflineCacheUpdateService.ALLOW_NO_WARN); + + // Store some user data to localStorage + var dsm = Cc["@mozilla.org/dom/storagemanager;1"] + .getService(Ci.nsIDOMStorageManager); + var localStorage = dsm.getLocalStorageForPrincipal(principal, URL); + localStorage.setItem("test", "value"); + + // Store something to the offline cache + const nsICache = Components.interfaces.nsICache; + var cs = Components.classes["@mozilla.org/network/cache-service;1"] + .getService(Components.interfaces.nsICacheService); + var session = cs.createSession(URL + "/manifest", nsICache.STORE_OFFLINE, nsICache.STREAM_BASED); + var cacheEntry = session.openCacheEntry(URL, nsICache.ACCESS_READ_WRITE, false); + var stream = cacheEntry.openOutputStream(0); + var content = "content"; + stream.write(content, content.length); + stream.close(); + cacheEntry.close(); + + // Open the dialog + let wh = new WindowHelper(); + wh.onload = function () { + this.selectDuration(Sanitizer.TIMESPAN_EVERYTHING); + // Show details + this.toggleDetails(); + // Clear only offlineApps + this.uncheckAllCheckboxes(); + this.checkPrefCheckbox("offlineApps", true); + this.acceptDialog(); + + // Check all has been deleted (data, cache) + is(localStorage.length, 0, "DOM storage cleared"); + + var size = -1; + var visitor = { + visitDevice: function (deviceID, deviceInfo) + { + if (deviceID == "offline") + size = deviceInfo.totalSize; + + // Do not enumerate entries + return false; + }, + + visitEntry: function (deviceID, entryInfo) + { + // Do not enumerate entries. + return false; + } + }; + cs.visitEntries(visitor); + is(size, 0, "offline application cache entries evicted"); + }; + wh.open(); + }, + function () { + // Test for offline apps permission deletion + + // Prepare stuff, we will work with www.example.com + var URL = "http://www.example.com"; + + var ios = Cc["@mozilla.org/network/io-service;1"] + .getService(Ci.nsIIOService); + var URI = ios.newURI(URL, null, null); + + // Open the dialog + let wh = new WindowHelper(); + wh.onload = function () { + this.selectDuration(Sanitizer.TIMESPAN_EVERYTHING); + // Show details + this.toggleDetails(); + // Clear only offlineApps + this.uncheckAllCheckboxes(); + this.checkPrefCheckbox("siteSettings", true); + this.acceptDialog(); + + // Check all has been deleted (privileges, data, cache) + var pm = Cc["@mozilla.org/permissionmanager;1"] + .getService(Ci.nsIPermissionManager); + is(pm.testPermission(URI, "offline-app"), 0, "offline-app permissions removed"); + }; + wh.open(); } ]; // Used as the download database ID for a new download. Incremented for each // new download. See addDownloadWithMinutesAgo(). var gDownloadId = 5555551; // Index in gAllTests of the test currently being run. Incremented for each @@ -552,26 +654,34 @@ WindowHelper.prototype = { is(cb.length, 1, "found checkbox for " + pref + " preference"); if (cb[0].checked != aCheckState) cb[0].click(); }, /** * Makes sure all the checkboxes are checked. */ - checkAllCheckboxes: function () { + _checkAllCheckboxesCustom: function (check) { var cb = this.win.document.querySelectorAll("#itemList > [preference]"); ok(cb.length > 1, "found checkboxes for preferences"); for (var i = 0; i < cb.length; ++i) { var pref = this.win.document.getElementById(cb[i].getAttribute("preference")); - if (!pref.value) + if (!!pref.value ^ check) cb[i].click(); } }, + checkAllCheckboxes: function () { + this._checkAllCheckboxesCustom(true); + }, + + uncheckAllCheckboxes: function () { + this._checkAllCheckboxesCustom(false); + }, + /** * @return The details progressive disclosure button */ getDetailsButton: function () { return this.win.document.getElementById("detailsExpander"); }, /**
--- a/browser/base/content/test/browser_sanitizeDialog_treeView.js +++ b/browser/base/content/test/browser_sanitizeDialog_treeView.js @@ -396,18 +396,19 @@ WindowHelper.prototype = { * The amount and direction to move */ moveGrippyBy: function (aDelta) { if (aDelta === 0) return; let key = aDelta < 0 ? "UP" : "DOWN"; let abs = Math.abs(aDelta); let treechildren = this.getTree().treeBoxObject.treeBody; + treechildren.focus(); for (let i = 0; i < abs; i++) { - EventUtils.sendKey(key, treechildren); + EventUtils.sendKey(key); } }, /** * Selects a duration in the duration dropdown. * * @param aDurVal * One of the Sanitizer.TIMESPAN_* values
new file mode 100644 --- /dev/null +++ b/browser/base/content/test/redirect_bug623155.sjs @@ -0,0 +1,16 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +const REDIRECT_TO = "https://www.bank1.com/"; // Bad-cert host. + +function handleRequest(aRequest, aResponse) { + // Set HTTP Status + aResponse.setStatusLine(aRequest.httpVersion, 301, "Moved Permanently"); + + // Set redirect URI, mirroring the hash value. + let hash = (/\#.+/.test(aRequest.path))? + "#" + aRequest.path.split("#")[1]: + ""; + aResponse.setHeader("Location", REDIRECT_TO + hash); +}
--- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -358,18 +358,16 @@ if (isMouseEvent) where = whereToOpenLink(aTriggeringEvent, false, false); if (where == "current") { loadCurrent(); } else { this.handleRevert(); let params = { allowThirdPartyFixup: true, postData: postData }; - if (altEnter) - params.inBackground = false; if (!this.valueIsTyped) params.isUTF8 = true; openUILinkIn(url, where, params); } } else { loadCurrent(); } ]]></body> @@ -939,17 +937,17 @@ </method> </implementation> </binding> <binding id="geolocation-notification" extends="chrome://global/content/bindings/notification.xml#popup-notification"> <content align="start"> <xul:image class="popup-notification-icon" - xbl:inherits="popupid"/> + xbl:inherits="popupid,src=icon"/> <xul:vbox flex="1"> <xul:description class="popup-notification-description" xbl:inherits="xbl:text=label"/> <xul:spacer flex="1"/> <xul:hbox class="popup-notification-button-container" pack="end" align="center"> <xul:label anonid="learnmore" class="text-link geolocation-text-link"/> <xul:spacer flex="1"/> @@ -983,17 +981,17 @@ link.href = formatter.formatURLPref("browser.geolocation.warning.infoURL"); ]]></constructor> </implementation> </binding> <binding id="addon-progress-notification" extends="chrome://global/content/bindings/notification.xml#popup-notification"> <content align="start"> <xul:image class="popup-notification-icon" - xbl:inherits="popupid"/> + xbl:inherits="popupid,src=icon"/> <xul:vbox flex="1"> <xul:description class="popup-notification-description addon-progress-description" xbl:inherits="xbl:text=label"/> <xul:spacer flex="1"/> <xul:hbox align="center"> <xul:progressmeter anonid="progressmeter" flex="1" mode="undetermined" class="popup-progress-meter"/> <xul:button anonid="cancel" class="popup-progress-cancel" oncommand="document.getBindingParent(this).cancel()"/> </xul:hbox>
--- a/browser/base/content/utilityOverlay.js +++ b/browser/base/content/utilityOverlay.js @@ -95,22 +95,17 @@ function openUILink( url, e, ignoreButto * The event may be a mouse event (click, double-click, middle-click) or keypress event (enter). * * On Windows, the modifiers are: * Ctrl new tab, selected * Shift new window * Ctrl+Shift new tab, in background * Alt save * - * You can swap Ctrl and Ctrl+shift by toggling the hidden pref - * browser.tabs.loadBookmarksInBackground (not browser.tabs.loadInBackground, which - * is for content area links). - * - * Middle-clicking is the same as Ctrl+clicking (it opens a new tab) and it is - * subject to the shift modifier and pref in the same way. + * Middle-clicking is the same as Ctrl+clicking (it opens a new tab). * * Exceptions: * - Alt is ignored for menu items selected using the keyboard so you don't accidentally save stuff. * (Currently, the Alt isn't sent here at all for menu items, but that will change in bug 126189.) * - Alt is hard to use in context menus, because pressing Alt closes the menu. * - Alt can't be used on the bookmarks toolbar because Alt is used for "treat this as something draggable". * - The button is ignored for the middle-click-paste-URL feature, since it's always a middle-click. */ @@ -241,20 +236,20 @@ function openLinkIn(url, where, params) sa.AppendElement(aPostData); sa.AppendElement(allowThirdPartyFixupSupports); Services.ww.openWindow(w || window, getBrowserURL(), null, "chrome,dialog=no,all", sa); return; } - let loadInBackground = aInBackground; + let loadInBackground = where == "current" ? false : aInBackground; if (loadInBackground == null) { loadInBackground = aFromChrome ? - getBoolPref("browser.tabs.loadBookmarksInBackground") : + false : getBoolPref("browser.tabs.loadInBackground"); } if (where == "current" && w.gBrowser.selectedTab.pinned) { try { let uriObj = Services.io.newURI(url, null, null); if (!uriObj.schemeIs("javascript") && w.gBrowser.currentURI.host != uriObj.host) { @@ -298,16 +293,19 @@ function openLinkIn(url, where, params) // content but don't raise the window, since the URI we just loaded may have // resulted in a new frontmost window (e.g. "javascript:window.open('');"). var fm = Components.classes["@mozilla.org/focus-manager;1"]. getService(Components.interfaces.nsIFocusManager); if (window == fm.activeWindow) w.content.focus(); else w.gBrowser.selectedBrowser.focus(); + + if (!loadInBackground && url == "about:blank") + w.focusAndSelectUrlBar(); } // Used as an onclick handler for UI elements with link-like behavior. // e.g. onclick="checkForMiddleClick(this, event);" function checkForMiddleClick(node, event) { // We should be using the disabled property here instead of the attribute, // but some elements that this function is used with don't support it (e.g. // menuitem).
--- a/browser/components/places/src/PlacesUIUtils.jsm +++ b/browser/components/places/src/PlacesUIUtils.jsm @@ -724,17 +724,19 @@ var PlacesUIUtils = { .itemHasAnnotation(aNode.itemId, this.LOAD_IN_SIDEBAR_ANNO)) { let browserWin = this._getTopBrowserWin(); if (browserWin) { browserWin.openWebPanel(aNode.title, aNode.uri); return; } } } - aWindow.openUILinkIn(aNode.uri, aWhere); + aWindow.openUILinkIn(aNode.uri, aWhere, { + inBackground: Services.prefs.getBoolPref("browser.tabs.loadBookmarksInBackground") + }); } }, /** * Helper for guessing scheme from an url string. * Used to avoid nsIURI overhead in frequently called UI functions. * * @param aUrlString the url to guess the scheme from.
--- a/browser/components/preferences/advanced.js +++ b/browser/components/preferences/advanced.js @@ -63,17 +63,18 @@ var gAdvancedPane = { #ifdef MOZ_UPDATER this.updateReadPrefs(); #endif this.updateOfflineApps(); #ifdef MOZ_CRASHREPORTER this.initSubmitCrashes(); #endif - this.updateActualCacheSize(); + this.updateActualCacheSize("disk"); + this.updateActualCacheSize("offline"); }, /** * Stores the identity of the current tab in preferences so that the selected * tab can be persisted between openings of the preferences window. */ tabSelectionChanged: function () { @@ -197,40 +198,45 @@ var gAdvancedPane = { * Displays a dialog in which proxy settings may be changed. */ showConnections: function () { document.documentElement.openSubDialog("chrome://browser/content/preferences/connection.xul", "", null); }, - // Retrieves the amount of space currently used by disk cache - updateActualCacheSize: function () + // Retrieves the amount of space currently used by disk or offline cache + updateActualCacheSize: function (device) { var visitor = { visitDevice: function (deviceID, deviceInfo) { - if (deviceID == "disk") { - var actualSizeLabel = document.getElementById("actualCacheSize"); + if (deviceID == device) { + var actualSizeLabel = document.getElementById(device == "disk" ? + "actualDiskCacheSize" : + "actualAppCacheSize"); var sizeStrings = DownloadUtils.convertByteUnits(deviceInfo.totalSize); var prefStrBundle = document.getElementById("bundlePreferences"); - var sizeStr = prefStrBundle.getFormattedString("actualCacheSize", - sizeStrings); + var sizeStr = prefStrBundle.getFormattedString(device == "disk" ? + "actualDiskCacheSize" : + "actualAppCacheSize", + sizeStrings); actualSizeLabel.value = sizeStr; } // Do not enumerate entries return false; }, visitEntry: function (deviceID, entryInfo) { // Do not enumerate entries. return false; } }; + var cacheService = Components.classes["@mozilla.org/network/cache-service;1"] .getService(Components.interfaces.nsICacheService); cacheService.visitEntries(visitor); }, updateCacheSizeUI: function (smartSizeEnabled) { @@ -269,21 +275,33 @@ var gAdvancedPane = { }, /** * Clears the cache. */ clearCache: function () { var cacheService = Components.classes["@mozilla.org/network/cache-service;1"] - .getService(Components.interfaces.nsICacheService); + .getService(Components.interfaces.nsICacheService); try { cacheService.evictEntries(Components.interfaces.nsICache.STORE_ANYWHERE); } catch(ex) {} - this.updateActualCacheSize(); + this.updateActualCacheSize("disk"); + }, + + /** + * Clears the application cache. + */ + clearOfflineAppCache: function () + { + Components.utils.import("resource:///modules/offlineAppCache.jsm"); + OfflineAppCacheHelper.clear(); + + this.updateActualCacheSize("offline"); + this.updateOfflineApps(); }, readOfflineNotify: function() { var pref = document.getElementById("browser.offline-apps.notify"); var button = document.getElementById("offlineNotifyExceptions"); button.disabled = !pref.value; return pref.value; @@ -427,16 +445,17 @@ var gAdvancedPane = { .getService(Components.interfaces.nsIPermissionManager); pm.remove(host, "offline-app", Components.interfaces.nsIPermissionManager.ALLOW_ACTION); pm.remove(host, "offline-app", Components.interfaces.nsIOfflineCacheUpdateService.ALLOW_NO_WARN); list.removeChild(item); gAdvancedPane.offlineAppSelected(); + this.updateActualCacheSize("offline"); }, // UPDATE TAB /* * Preferences: * * app.update.enabled
--- a/browser/components/preferences/advanced.xul +++ b/browser/components/preferences/advanced.xul @@ -229,22 +229,22 @@ <hbox align="center"> <description flex="1" control="connectionSettings">&connectionDesc.label;</description> <button id="connectionSettings" icon="network" label="&connectionSettings.label;" accesskey="&connectionSettings.accesskey;" oncommand="gAdvancedPane.showConnections();"/> </hbox> </groupbox> - <!-- Cache/Offline apps --> - <groupbox id="offlineGroup"> - <caption label="&offlineStorage.label;"/> - + <!-- Cache --> + <groupbox id="cacheGroup"> + <caption label="&httpCache.label;"/> + <hbox align="center"> - <label id="actualCacheSize" flex="1"/> + <label id="actualDiskCacheSize" flex="1"/> <button id="clearCacheButton" icon="clear" label="&clearCacheNow.label;" accesskey="&clearCacheNow.accesskey;" oncommand="gAdvancedPane.clearCache();"/> </hbox> <checkbox preference="browser.cache.disk.smart_size.enabled" id="allowSmartSize" flex="1" onsyncfrompreference="return gAdvancedPane.readSmartSizeEnabled();" label="&overrideSmartCacheSize.label;" @@ -255,29 +255,41 @@ value="&limitCacheSizeBefore.label;"/> <textbox id="cacheSize" type="number" size="4" max="1024" preference="browser.cache.disk.capacity" onsyncfrompreference="return gAdvancedPane.readCacheSize();" onsynctopreference="return gAdvancedPane.writeCacheSize();" aria-labelledby="useCacheBefore cacheSize useCacheAfter"/> <label id="useCacheAfter" flex="1">&limitCacheSizeAfter.label;</label> </hbox> + </groupbox> + + <!-- Offline apps --> + <groupbox id="offlineGroup"> + <caption label="&offlineStorage2.label;"/> + + <hbox align="center"> + <label id="actualAppCacheSize" flex="1"/> + <button id="clearOfflineAppCacheButton" icon="clear" + label="&clearOfflineAppCacheNow.label;" accesskey="&clearOfflineAppCacheNow.accesskey;" + oncommand="gAdvancedPane.clearOfflineAppCache();"/> + </hbox> <hbox align="center"> <checkbox id="offlineNotify" flex="1" label="&offlineNotify.label;" accesskey="&offlineNotify.accesskey;" preference="browser.offline-apps.notify" onsyncfrompreference="return gAdvancedPane.readOfflineNotify();"/> <button id="offlineNotifyExceptions" label="&offlineNotifyExceptions.label;" accesskey="&offlineNotifyExceptions.accesskey;" oncommand="gAdvancedPane.showOfflineExceptions();"/> </hbox> <hbox> <vbox flex="1"> - <label id="offlineAppsListLabel">&offlineAppsList.label;</label> + <label id="offlineAppsListLabel">&offlineAppsList2.label;</label> <listbox id="offlineAppsList" style="height: &offlineAppsList.height;;" flex="1" aria-labelledby="offlineAppsListLabel" onselect="gAdvancedPane.offlineAppSelected(event);"> </listbox> </vbox> <vbox pack="end">
--- a/browser/components/preferences/applications.js +++ b/browser/components/preferences/applications.js @@ -474,20 +474,16 @@ HandlerInfoWrapper.prototype = { //**************************************************************************// // Icons get smallIcon() { return this._getIcon(16); }, - get largeIcon() { - return this._getIcon(32); - }, - _getIcon: function(aSize) { if (this.primaryExtension) return "moz-icon://goat." + this.primaryExtension + "?size=" + aSize; if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) return "moz-icon://goat?size=" + aSize + "&contentType=" + this.type; // FIXME: consider returning some generic icon when we can't get a URL for @@ -816,54 +812,47 @@ FeedHandlerInfo.prototype = { }, //**************************************************************************// // Icons get smallIcon() { return this._smallIcon; - }, - - get largeIcon() { - return this._largeIcon; } }; var feedHandlerInfo = { __proto__: new FeedHandlerInfo(TYPE_MAYBE_FEED), _prefSelectedApp: PREF_FEED_SELECTED_APP, _prefSelectedWeb: PREF_FEED_SELECTED_WEB, _prefSelectedAction: PREF_FEED_SELECTED_ACTION, _prefSelectedReader: PREF_FEED_SELECTED_READER, _smallIcon: "chrome://browser/skin/feeds/feedIcon16.png", - _largeIcon: "chrome://browser/skin/feeds/feedIcon.png", _appPrefLabel: "webFeed" } var videoFeedHandlerInfo = { __proto__: new FeedHandlerInfo(TYPE_MAYBE_VIDEO_FEED), _prefSelectedApp: PREF_VIDEO_FEED_SELECTED_APP, _prefSelectedWeb: PREF_VIDEO_FEED_SELECTED_WEB, _prefSelectedAction: PREF_VIDEO_FEED_SELECTED_ACTION, _prefSelectedReader: PREF_VIDEO_FEED_SELECTED_READER, _smallIcon: "chrome://browser/skin/feeds/videoFeedIcon16.png", - _largeIcon: "chrome://browser/skin/feeds/videoFeedIcon.png", _appPrefLabel: "videoPodcastFeed" } var audioFeedHandlerInfo = { __proto__: new FeedHandlerInfo(TYPE_MAYBE_AUDIO_FEED), _prefSelectedApp: PREF_AUDIO_FEED_SELECTED_APP, _prefSelectedWeb: PREF_AUDIO_FEED_SELECTED_WEB, _prefSelectedAction: PREF_AUDIO_FEED_SELECTED_ACTION, _prefSelectedReader: PREF_AUDIO_FEED_SELECTED_READER, _smallIcon: "chrome://browser/skin/feeds/audioFeedIcon16.png", - _largeIcon: "chrome://browser/skin/feeds/audioFeedIcon.png", _appPrefLabel: "audioPodcastFeed" } //****************************************************************************// // Prefpane Controller var gApplicationsPane = {
--- a/browser/components/preferences/sync.xul +++ b/browser/components/preferences/sync.xul @@ -57,16 +57,17 @@ onpaneload="gSyncPane.init()"> <preferences> <preference id="engine.bookmarks" name="services.sync.engine.bookmarks" type="bool"/> <preference id="engine.history" name="services.sync.engine.history" type="bool"/> <preference id="engine.tabs" name="services.sync.engine.tabs" type="bool"/> <preference id="engine.prefs" name="services.sync.engine.prefs" type="bool"/> <preference id="engine.passwords" name="services.sync.engine.passwords" type="bool"/> + <preference id="engine.addons" name="services.sync.engine.addons" type="bool"/> </preferences> <script type="application/javascript" src="chrome://browser/content/preferences/sync.js"/> <script type="application/javascript" src="chrome://browser/content/syncUtils.js"/> @@ -147,16 +148,21 @@ accesskey="&engine.history.accesskey;" preference="engine.history"/> </richlistitem> <richlistitem> <checkbox label="&engine.tabs.label;" accesskey="&engine.tabs.accesskey;" preference="engine.tabs"/> </richlistitem> + <richlistitem> + <checkbox label="&engine.addons.label;" + accesskey="&engine.addons.accesskey;" + preference="engine.addons"/> + </richlistitem> </richlistbox> </vbox> </groupbox> <groupbox class="syncGroupBox"> <grid> <columns> <column/>
--- a/browser/components/tabview/test/Makefile.in +++ b/browser/components/tabview/test/Makefile.in @@ -69,17 +69,16 @@ include $(topsrcdir)/config/rules.mk browser_tabview_bug595804.js \ browser_tabview_bug595930.js \ browser_tabview_bug595943.js \ browser_tabview_bug595965.js \ browser_tabview_bug596781.js \ browser_tabview_bug597248.js \ browser_tabview_bug597360.js \ browser_tabview_bug597399.js \ - browser_tabview_bug597980.js \ browser_tabview_bug598375.js \ browser_tabview_bug598600.js \ browser_tabview_bug599048.js \ browser_tabview_bug599626.js \ browser_tabview_bug600645.js \ browser_tabview_bug600812.js \ browser_tabview_bug602432.js \ browser_tabview_bug604098.js \ @@ -189,10 +188,12 @@ include $(topsrcdir)/config/rules.mk dummy_page.html \ head.js \ search1.html \ search2.html \ test_bug600645.html \ test_bug644097.html \ $(NULL) +# browser_tabview_bug597980.js is disabled for leaking, see bug 711907 + libs:: $(_BROWSER_FILES) $(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
--- a/browser/devtools/highlighter/inspector.jsm +++ b/browser/devtools/highlighter/inspector.jsm @@ -1667,16 +1667,17 @@ InspectorUI.prototype = { if (aRegObj.sidebar) { this.createSidebarTool(aRegObj); return; } btn = this.chromeDoc.createElement("toolbarbutton"); let buttonId = this.getToolbarButtonId(aRegObj.id); btn.setAttribute("id", buttonId); + btn.setAttribute("class", "devtools-toolbarbutton"); btn.setAttribute("label", aRegObj.label); btn.setAttribute("tooltiptext", aRegObj.tooltiptext); btn.setAttribute("accesskey", aRegObj.accesskey); btn.setAttribute("image", aRegObj.icon || ""); buttonContainer.insertBefore(btn, this.stylingButton); this.bindToolEvent(btn, "click", function IUI_toolButtonClick(aEvent) { @@ -1728,16 +1729,17 @@ InspectorUI.prototype = { createSidebarTool: function IUI_createSidebarTab(aRegObj) { // toolbutton elements let btn = this.chromeDoc.createElement("toolbarbutton"); let buttonId = this.getToolbarButtonId(aRegObj.id); btn.id = buttonId; btn.setAttribute("label", aRegObj.label); + btn.setAttribute("class", "devtools-toolbarbutton"); btn.setAttribute("tooltiptext", aRegObj.tooltiptext); btn.setAttribute("accesskey", aRegObj.accesskey); btn.setAttribute("image", aRegObj.icon || ""); btn.setAttribute("type", "radio"); btn.setAttribute("group", "sidebar-tools"); this.sidebarToolbar.appendChild(btn); // create tool iframe
--- a/browser/devtools/sourceeditor/orion/README +++ b/browser/devtools/sourceeditor/orion/README @@ -8,16 +8,18 @@ The Orion editor web site: http://www.ec To upgrade Orion to a newer version see the UPGRADE file. Orion version: git clone from 2011-12-09 commit hash d8a6dc01d9c561d6eb99f03b64c8c78ce785c59d + patch for Eclipse Bug 366312 - right-clicking outside of the selection causes the caret to move https://github.com/mihaisucan/orion.client/tree/bug-366312 see https://bugs.eclipse.org/bugs/show_bug.cgi?id=366312 + + patch for Mozilla Bug 711737 - Orion should support all the CSS properties from CSS1, CSS2, CSS2.1 and CSS3 + https://bugzilla.mozilla.org/show_bug.cgi?id=711737 # License The following files are licensed according to the contents in the LICENSE file: orion.js orion.css
--- a/browser/devtools/sourceeditor/orion/mozilla.css +++ b/browser/devtools/sourceeditor/orion/mozilla.css @@ -1,125 +1,128 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ .viewContainer { - background: -moz-Dialog; - font-family: monospace; - font-size: inherit; /* inherit browser's default monospace font size */ + background: #cddae5; /* This will be seen as the continuation of the ruler */ + font-family: monospace; + font-size: inherit; /* inherit browser's default monospace font size */ } .view { - background: #fff; + background: #f0f0ff; /* Background of the editor */ + padding-left: 0; } .readonly > .view { - background: #f6f6f6; + background: #f0f0ff; +} + +/* One line */ +.viewContent > div { + padding-left: 4px; /* Margin between the ruler and the editor */ } /* Styles for rulers */ -.ruler { - background-color: white; -} .ruler.lines { - border-right: 1px solid lightgray; - text-align: right; + text-align: right; } /* Styles for the line number ruler */ .rulerLines { - background: -moz-Dialog; - color: -moz-DialogText; - min-width: 1.4em; - padding-left: 4px; - padding-right: 4px; - text-align: end; + border-right: 1px solid #b4c4d3; + background: #cddae5; + color: #7a8a99; + min-width: 1.4em; + padding-left: 4px; + padding-right: 4px; + text-align: end; } .token_singleline_comment { - color: green; + color: #45a946; /* green */ } .token_multiline_comment { - color: green; + color: #45a946; /* green */ } .token_doc_comment { - color: #00008F; + color: #45a946; /* green */ } .token_doc_html_markup { - color: #7F7F9F; + color: #dd0058; /* purple */ } .token_doc_tag { - color: #7F9FBF; + color: #dd0058; /* purple */ } -.token_task_tag { - color: #7F9FBF; +.token_task_tag { /* "TODO" */ + color: black; + background: yellow; } .token_string { - color: blue; + color: #1e66b1; /* blue */ + font-style: italic; } .token_keyword { - color: darkred; - font-weight: bold; + color: #dd0058; /* purple */ } .token_space { - /* images/white_space.png */ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAABnRSTlMA/wAAAACkwsAdAAAAIUlEQVR4nGP4z8CAC+GUIEXuABhgkTuABEiRw2cmae4EAH05X7xDolNRAAAAAElFTkSuQmCC"); - background-repeat: no-repeat; - background-position: center center; + /* images/white_space.png */ + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAABnRSTlMA/wAAAACkwsAdAAAAIUlEQVR4nGP4z8CAC+GUIEXuABhgkTuABEiRw2cmae4EAH05X7xDolNRAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; } .token_tab { - /* images/white_tab.png */ - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAIAAACJ2loDAAAABnRSTlMA/wD/AP83WBt9AAAAMklEQVR4nGP4TwRgoK6i52c3bz5w6zMSA6tJn28d2Lx589nnCAYu63AaSLxJRLoJPwAAeNk0aG4opfMAAAAASUVORK5CYII="); - background-repeat: no-repeat; - background-position: left center; + /* images/white_tab.png */ + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAIAAACJ2loDAAAABnRSTlMA/wD/AP83WBt9AAAAMklEQVR4nGP4TwRgoK6i52c3bz5w6zMSA6tJn28d2Lx589nnCAYu63AaSLxJRLoJPwAAeNk0aG4opfMAAAAASUVORK5CYII="); + background-repeat: no-repeat; + background-position: left center; } -.line_caret { - background: #EAF2FE; +.line_caret { /* Current line */ + background: #dae2ee; /* lighter than the background */ } .readonly .line_caret { - background: #fcfcfc; + background: #cddae5; /* a bit darker than the background */ } /* Styling for html syntax highlighting */ .entity-name-tag { - color: #3f7f7f; + color: #dd0058; /* purple */ } .entity-other-attribute-name { - color: #7f007f; + color: #dd0058; /* purple */ } .punctuation-definition-comment { - color: #3f5fbf; + color: #45a946; /* green */ } .comment { - color: #3f5fbf + color: #45a946; /* green */ } .string-quoted { - color: #2a00ff; - font-style: italic; + color: #1e66b1; /* blue */ + font-style: italic; } .invalid { - color: red; - font-weight: bold; + color: red; + font-weight: bold; } .annotationRange.currentBracket { } .annotationRange.matchingBracket { - outline: 1px solid red; + outline: 1px solid grey; } -
--- a/browser/devtools/sourceeditor/orion/orion.js +++ b/browser/devtools/sourceeditor/orion/orion.js @@ -10467,34 +10467,52 @@ define(['orion/textview/annotations'], f "package", "private", "protected", "public", "return", "short", "static", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while"]; var CSS_KEYWORDS = - ["color", "text-align", "text-indent", "text-decoration", - "font", "font-style", "font-family", "font-weight", "font-size", "font-variant", "line-height", - "background", "background-color", "background-image", "background-position", "background-repeat", "background-attachment", - "list-style", "list-style-image", "list-style-position", "list-style-type", - "outline", "outline-color", "outline-style", "outline-width", - "border", "border-left", "border-top", "border-bottom", "border-right", "border-color", "border-width", "border-style", - "border-bottom-color", "border-bottom-style", "border-bottom-width", - "border-left-color", "border-left-style", "border-left-width", - "border-top-color", "border-top-style", "border-top-width", - "border-right-color", "border-right-style", "border-right-width", - "padding", "padding-left", "padding-top", "padding-bottom", "padding-right", - "margin", "margin-left", "margin-top", "margin-bottom", "margin-right", - "width", "height", "left", "top", "right", "bottom", - "min-width", "max-width", "min-height", "max-height", - "display", "visibility", - "clip", "cursor", "overflow", "overflow-x", "overflow-y", "position", "z-index", - "vertical-align", "horizontal-align", - "float", "clear" + ["alignment-adjust", "alignment-baseline", "animation", "animation-delay", "animation-direction", "animation-duration", + "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", + "azimuth", "backface-visibility", "background", "background-attachment", "background-clip", "background-color", + "background-image", "background-origin", "background-position", "background-repeat", "background-size", "baseline-shift", + "binding", "bleed", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", + "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", + "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", + "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", + "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", + "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", + "border-width", "bottom", "box-align", "box-decoration-break", "box-direction", "box-flex", "box-flex-group", "box-lines", + "box-ordinal-group", "box-orient", "box-pack", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", + "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "content", "counter-increment", + "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", + "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", + "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "float", "float-offset", "font", "font-family", "font-size", + "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "grid-columns", "grid-rows", "hanging-punctuation", + "height", "hyphenate-after", "hyphenate-before", "hyphenate-character", "hyphenate-lines", "hyphenate-resource", "hyphens", "icon", + "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "left", "letter-spacing", "line-height", + "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", + "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "mark", "mark-after", + "mark-before", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "opacity", "orphans", + "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-x", + "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", + "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "phonemes", "pitch", + "pitch-range", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "rendering-intent", "resize", + "rest", "rest-after", "rest-before", "richness", "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", "ruby-position", + "ruby-span", "size", "speak", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "table-layout", + "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-decoration", "text-emphasis", + "text-height", "text-indent", "text-justify", "text-outline", "text-shadow", "text-transform", "text-wrap", "top", "transform", + "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", + "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", + "voice-pitch", "voice-pitch-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "white-space-collapse", + "widows", "width", "word-break", "word-spacing", "word-wrap", "z-index" ]; // Scanner constants var UNKOWN = 1; var KEYWORD = 2; var STRING = 3; var SINGLELINE_COMMENT = 4; var MULTILINE_COMMENT = 5;
--- a/browser/devtools/styleeditor/SplitView.jsm +++ b/browser/devtools/styleeditor/SplitView.jsm @@ -15,16 +15,17 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your @@ -227,55 +228,43 @@ SplitView.prototype = { * - function(summary, details, data) onDestroy * Called when the item has been removed. * - function(summary, details, data, query) onFilterBy * Called when the user performs a filtering search. * If the function returns false, the item does not match query * string and will be hidden. * - object data * Object to pass to the callbacks above. - * - boolean disableAnimations - * If true there is no animation or scrolling when this item is - * appended. Set this when batch appending (eg. initial population). * - number ordinal * Items with a lower ordinal are displayed before those with a * higher ordinal. */ appendItem: function ASV_appendItem(aSummary, aDetails, aOptions) { let binding = aOptions || {}; binding._summary = aSummary; binding._details = aDetails; aSummary.setUserData(BINDING_USERDATA, binding, null); - if (!binding.disableAnimations) { - aSummary.classList.add("splitview-slide"); - aSummary.classList.add("splitview-flash"); - } this._nav.appendChild(aSummary); aSummary.addEventListener("click", function onSummaryClick(aEvent) { aEvent.stopPropagation(); this.activeSummary = aSummary; }.bind(this), false); this._side.appendChild(aDetails); if (binding.onCreate) { // queue onCreate handler this._root.ownerDocument.defaultView.setTimeout(function () { binding.onCreate(aSummary, aDetails, binding.data); }, 0); } - - if (!binding.disableAnimations) { - scheduleAnimation(aSummary, "splitview-slide", "splitview-flash"); - aSummary.scrollIntoView(); - } }, /** * Append an item to the split view according to two template elements * (one for the item's summary and the other for the item's details). * * @param string aName * Name of the template elements to instantiate. @@ -457,33 +446,8 @@ SplitView.prototype = { }.bind(this), false); let clearButtons = this._root.querySelectorAll(".splitview-filter-clearButton"); for (let i = 0; i < clearButtons.length; ++i) { clearButtons[i].addEventListener("click", clearFilter, false); } } }; - -// -// private helpers - -/** - * Schedule one or multiple CSS animation(s) on an element. - * - * @param DOMElement aElement - * @param string ... - * One or multiple animation class name(s). - */ -function scheduleAnimation(aElement) -{ - let classes = Array.prototype.slice.call(arguments, 1); - for each (let klass in classes) { - aElement.classList.add(klass); - } - - let window = aElement.ownerDocument.defaultView; - window.mozRequestAnimationFrame(function triggerAnimation() { - for each (let klass in classes) { - aElement.classList.remove(klass); - } - }); -}
--- a/browser/devtools/styleeditor/StyleEditorChrome.jsm +++ b/browser/devtools/styleeditor/StyleEditorChrome.jsm @@ -346,17 +346,17 @@ StyleEditorChrome.prototype = { /** * Disable all UI, effectively making editors read-only. * This is automatically called when no content window is attached. * * @see contentWindow */ _disableChrome: function SEC__disableChrome() { - let matches = this._root.querySelectorAll("button,input,select"); + let matches = this._root.querySelectorAll("button,toolbarbutton,textbox"); for (let i = 0; i < matches.length; ++i) { matches[i].setAttribute("disabled", "disabled"); } this.editors.forEach(function onEnterReadOnlyMode(aEditor) { aEditor.readOnly = true; });
--- a/browser/devtools/styleeditor/splitview.css +++ b/browser/devtools/styleeditor/splitview.css @@ -15,16 +15,17 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your @@ -36,44 +37,54 @@ * ***** END LICENSE BLOCK ***** */ box, .splitview-nav { -moz-box-flex: 1; -moz-box-orient: vertical; } +.splitview-nav-container { + -moz-box-pack: center; +} + +.splitview-controller, .splitview-main { -moz-box-flex: 0; } .splitview-controller { - min-height: 8em; + min-height: 3em; max-height: 14em; } .splitview-nav { display: -moz-box; + overflow-x: hidden; + overflow-y: auto; } /* only the active details pane is shown */ .splitview-side-details > * { display: none; } .splitview-side-details > .splitview-active { display: -moz-box; } +.splitview-landscape-resizer { + cursor: ew-resize; +} + /* this is to keep in sync with SplitView.jsm's LANDSCAPE_MEDIA_QUERY */ @media (min-aspect-ratio: 5/3) { .splitview-root { -moz-box-orient: horizontal; } .splitview-controller { - -moz-box-flex: 0; max-height: none; } .splitview-details { display: none; } .splitview-details.splitview-active { display: -moz-box; } @@ -89,8 +100,23 @@ ol.splitview-nav > li.splitview-filtered .splitview-nav.splitview-all-filtered, .splitview-nav + .splitview-nav.placeholder { display: none; } .splitview-nav.splitview-all-filtered ~ .splitview-nav.placeholder.all-filtered, .splitview-nav:empty ~ .splitview-nav.placeholder.empty { display: -moz-box; } + +.splitview-portrait-resizer { + display: none; +} + +/* portrait mode */ +@media (max-aspect-ratio: 5/3) { + #splitview-details-toolbar { + display: none; + } + + .splitview-portrait-resizer { + display: -moz-box; + } +}
--- a/browser/devtools/styleeditor/styleeditor.css +++ b/browser/devtools/styleeditor/styleeditor.css @@ -30,14 +30,90 @@ * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -.splitview-nav > li hgroup > .stylesheet-error-message { +.stylesheet-error-message { display: none; } -.splitview-nav > li.error hgroup > .stylesheet-error-message { + +li.error > .stylesheet-info > .stylesheet-more > .stylesheet-error-message { display: block; } + +.splitview-nav > li, +.stylesheet-info, +.stylesheet-more { + display: -moz-box; +} + +.splitview-nav > li { + -moz-box-orient: horizontal; +} + +.splitview-nav > li > hgroup { + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-flex: 1; +} + +.stylesheet-info > h1 { + -moz-box-flex: 1; +} + +.stylesheet-name { + /* clip the text at the beginning */ + display: -moz-box; + direction: rtl; + text-align: left; + overflow: hidden; +} + +.splitview-nav > li > hgroup.stylesheet-info { + -moz-box-pack: center; +} + +.splitview-nav:-moz-locale-dir(ltr) > li.unsaved > hgroup .stylesheet-name:before, +.splitview-nav:-moz-locale-dir(rtl) > li.unsaved > hgroup .stylesheet-name:after { + content: "* "; +} + +.stylesheet-enabled { + display: -moz-box; +} + +.stylesheet-saveButton { + display: none; +} + +.stylesheet-rule-count, +li:hover > hgroup > .stylesheet-more > h3 > .stylesheet-saveButton { + display: -moz-box; +} + +.stylesheet-more > spacer { + -moz-box-flex: 1; +} + +/* portrait mode */ +@media (max-aspect-ratio: 5/3) { + li:hover > hgroup > .stylesheet-more > .stylesheet-rule-count { + display: none; + } + + .stylesheet-more { + -moz-box-flex: 1; + -moz-box-direction: reverse; + } + + .splitview-nav > li > hgroup.stylesheet-info { + -moz-box-orient: horizontal; + -moz-box-flex: 1; + } + + .stylesheet-more > spacer { + -moz-box-flex: 0; + } +}
--- a/browser/devtools/styleeditor/styleeditor.xul +++ b/browser/devtools/styleeditor/styleeditor.xul @@ -15,16 +15,17 @@ - The Original Code is Style Editor code. - - The Initial Developer of the Original Code is The Mozilla Foundation. - Portions created by the Initial Developer are Copyright (C) 2011 - the Initial Developer. All Rights Reserved. - - Contributor(s): - Cedric Vivier <cedricv@neonux.com> (original author) + - Paul Rouget <paul@mozilla.com> - - Alternatively, the contents of this file may be used under the terms of - either the GNU General Public License Version 2 or later (the "GPL"), or - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - in which case the provisions of the GPL or the LGPL are applicable instead - of those above. If you wish to allow use of your version of this file only - under the terms of either the GPL or the LGPL, and not to allow others to - use your version of this file under the terms of the MPL, indicate your @@ -35,47 +36,47 @@ - - ***** END LICENSE BLOCK ***** --> <!DOCTYPE window [ <!ENTITY % styleEditorDTD SYSTEM "chrome://browser/locale/devtools/styleeditor.dtd" > %styleEditorDTD; ]> <?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/content/splitview.css" type="text/css"?> +<?xml-stylesheet href="chrome://browser/skin/devtools/common.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/devtools/splitview.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/content/styleeditor.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/devtools/styleeditor.css" type="text/css"?> <xul:window xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns="http://www.w3.org/1999/xhtml" id="style-editor-chrome-window" title="&window.title;" windowtype="Tools:StyleEditor" width="800" height="280" persist="screenX screenY width height sizemode"> <xul:script type="application/javascript" src="chrome://global/content/globalOverlay.js"/> <xul:box id="style-editor-chrome" class="splitview-root"> - <xul:box class="splitview-side-details"></xul:box> - <xul:box class="splitview-controller"> + <xul:box class="splitview-controller" id="stylesheets-controller" persist="width height"> <xul:box class="splitview-main"> - <xul:box class="toolbar"> - <xul:button class="style-editor-newButton" + <xul:toolbar class="devtools-toolbar"> + <xul:toolbarbutton class="style-editor-newButton devtools-toolbarbutton" accesskey="&newButton.accesskey;" tooltiptext="&newButton.tooltip;" - label="&newButton.label;"></xul:button> - <xul:button class="style-editor-importButton" + label="&newButton.label;"/> + <xul:toolbarbutton class="style-editor-importButton devtools-toolbarbutton" accesskey="&importButton.accesskey;" tooltiptext="&importButton.tooltip;" - label="&importButton.label;"></xul:button> - <xul:box class="spacer" flex="1"></xul:box> - <xul:textbox class="splitview-filter" - type="search" + label="&importButton.label;"/> + <xul:spacer flex="1"/> + <xul:textbox class="splitview-filter devtools-searchinput" + type="search" flex="1" tooltiptext="&searchInput.tooltip;" placeholder="&searchInput.placeholder;"/> - </xul:box> + </xul:toolbar> </xul:box> <xul:box class="splitview-nav-container"> <ol class="splitview-nav" tabindex="0"></ol> <div class="splitview-nav placeholder empty"> <p><strong>&noStyleSheet.label;</strong></p> <p>&noStyleSheet-tip-start.label; <a href="#" class="style-editor-newButton">&noStyleSheet-tip-action.label;</a> @@ -85,42 +86,48 @@ <p><strong>&searchNoResults.label;</strong></p> <p> <a href="#" class="splitview-filter-clearButton">&searchClearButton.label;</a> </p> </div> </xul:box> <!-- .splitview-nav-container --> </xul:box> <!-- .splitview-controller --> + <xul:box class="splitview-side-details"/> <div id="splitview-templates" hidden="true"> <li id="splitview-tpl-summary-stylesheet" tabindex="0"> <a class="stylesheet-enabled" tabindex="0" href="#" title="&visibilityToggle.tooltip;" accesskey="&saveButton.accesskey;"></a> <hgroup class="stylesheet-info"> <h1><a class="stylesheet-name" href="#"></a></h1> - <h2 class="stylesheet-title"></h2> - <h3 class="stylesheet-error-message"></h3> - </hgroup> - <div class="stylesheet-more"> - <hgroup class="stylesheet-stats"> + <div class="stylesheet-more"> + <h3 class="stylesheet-title"></h3> <h3 class="stylesheet-rule-count"></h3> - </hgroup> - <hgroup class="stylesheet-actions"> - <h1><a class="stylesheet-saveButton" href="#" + <h3 class="stylesheet-error-message"></h3> + <xul:spacer/> + <h3><a class="stylesheet-saveButton" href="#" title="&saveButton.tooltip;" - accesskey="&saveButton.accesskey;">&saveButton.label;</a></h1> - </hgroup> - </div> + accesskey="&saveButton.accesskey;">&saveButton.label;</a></h3> + </div> + </hgroup> </li> <xul:box id="splitview-tpl-details-stylesheet" class="splitview-details"> - <div class="stylesheet-editor-input textbox" - data-placeholder="&editorTextbox.placeholder;"></div> + <xul:resizer class="splitview-portrait-resizer" + dir="bottom" + element="stylesheets-controller"/> + <xul:toolbar id="splitview-details-toolbar" class="devtools-toolbar"> + <xul:resizer class="splitview-landscape-resizer" + dir="bottomend" + element="stylesheets-controller"/> + </xul:toolbar> + <xul:box class="stylesheet-editor-input textbox" + data-placeholder="&editorTextbox.placeholder;"/> </xul:box> </div> <!-- #splitview-templates --> </xul:box> <!-- .splitview-root --> <xul:script type="application/javascript"><![CDATA[ Components.utils.import("resource:///modules/devtools/StyleEditorChrome.jsm"); let chromeRoot = document.getElementById("style-editor-chrome"); let contentWindow = window.arguments[0];
--- a/browser/devtools/styleeditor/test/browser_styleeditor_readonly.js +++ b/browser/devtools/styleeditor/test/browser_styleeditor_readonly.js @@ -46,17 +46,17 @@ function test() function run(aChrome) { let document = gChromeWindow.document; let disabledCount; let elements; disabledCount = 0; - elements = document.querySelectorAll("button,input,select"); + elements = document.querySelectorAll("button,toolbarbutton,textbox"); for (let i = 0; i < elements.length; ++i) { if (elements[i].hasAttribute("disabled")) { disabledCount++; } } ok(elements.length && disabledCount == elements.length, "all buttons, input and select elements are disabled");
--- a/browser/devtools/styleinspector/test/browser_ruleview_editor.js +++ b/browser/devtools/styleinspector/test/browser_ruleview_editor.js @@ -36,17 +36,17 @@ function testReturnCommit() clearBody(); let span = createSpan(); _editableField({ element: span, initial: "explicit initial", start: function() { is(span.inplaceEditor.input.value, "explicit initial", "Explicit initial value should be used."); span.inplaceEditor.input.value = "Test Value"; - EventUtils.sendKey("return", span.inplaceEditor.input); + EventUtils.sendKey("return"); }, done: expectDone("Test Value", true, testBlurCommit) }); span.focus(); } function testBlurCommit() { @@ -69,34 +69,34 @@ function testAdvanceCharCommit() clearBody(); let span = createSpan(); _editableField({ element: span, advanceChars: ":", start: function() { let input = span.inplaceEditor.input; for each (let ch in "Test:") { - EventUtils.sendChar(ch, input); + EventUtils.sendChar(ch); } }, done: expectDone("Test", true, testEscapeCancel) }); span.focus(); } function testEscapeCancel() { clearBody(); let span = createSpan(); _editableField({ element: span, initial: "initial text", start: function() { span.inplaceEditor.input.value = "Test Value"; - EventUtils.sendKey("escape", span.inplaceEditor.input); + EventUtils.sendKey("escape"); }, done: expectDone("initial text", false, finishTest) }); span.focus(); } function finishTest()
--- a/browser/devtools/styleinspector/test/browser_ruleview_ui.js +++ b/browser/devtools/styleinspector/test/browser_ruleview_ui.js @@ -115,17 +115,17 @@ function testCreateNew() waitForEditorBlur(aEditor, function() { expectChange(); is(textProp.value, "purple", "Text prop should have been changed."); testEditProperty(); }); aEditor.input.blur(); }); - EventUtils.sendKey("return", input); + EventUtils.sendKey("return", ruleDialog); }); EventUtils.synthesizeMouse(elementRuleEditor.closeBrace, 1, 1, { }, ruleDialog); } function testEditProperty() @@ -143,21 +143,21 @@ function testEditProperty() waitForEditorBlur(aEditor, function() { expectChange(); is(idRuleEditor.rule.style.getPropertyValue("border-color"), "red", "border-color should have been set."); testDisableProperty(); }); for each (let ch in "red;") { - EventUtils.sendChar(ch, input); + EventUtils.sendChar(ch, ruleDialog); } }); for each (let ch in "border-color:") { - EventUtils.sendChar(ch, input); + EventUtils.sendChar(ch, ruleDialog); } }); EventUtils.synthesizeMouse(propEditor.nameSpan, 1, 1, { }, ruleDialog); }
--- a/browser/devtools/webconsole/test/test-bug-603750-websocket.js +++ b/browser/devtools/webconsole/test/test-bug-603750-websocket.js @@ -1,18 +1,18 @@ /* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ window.addEventListener("load", function () { - var ws1 = new MozWebSocket("ws://0.0.0.0:81"); + var ws1 = new WebSocket("ws://0.0.0.0:81"); ws1.onopen = function() { ws1.send("test 1"); ws1.close(); }; - var ws2 = new window.frames[0].MozWebSocket("ws://0.0.0.0:82"); + var ws2 = new window.frames[0].WebSocket("ws://0.0.0.0:82"); ws2.onopen = function() { ws2.send("test 2"); ws2.close(); }; }, false);
--- a/browser/installer/removed-files.in +++ b/browser/installer/removed-files.in @@ -228,17 +228,16 @@ extensions/testpilot@labs.mozilla.com/sk extensions/testpilot@labs.mozilla.com/skin/win/feedback.css extensions/testpilot@labs.mozilla.com/skin/win/notification-tail-down.png extensions/testpilot@labs.mozilla.com/skin/win/notification-tail-up.png extensions/testpilot@labs.mozilla.com/tests/test_data_store.js greprefs/all.js greprefs/security-prefs.js greprefs/xpinstall.js install.rdf -modules/ISO8601DateUtils.jsm modules/JSON.jsm modules/SpatialNavigation.js modules/utils.js mozilla-runtime@BIN_SUFFIX@ old-homepage-default.properties README.txt res/arrow.gif res/arrowd.gif @@ -991,16 +990,17 @@ xpicleanup@BIN_SUFFIX@ #ifdef XP_WIN modules/DownloadTaskbarProgress.jsm #endif modules/DownloadUtils.jsm modules/FileUtils.jsm modules/Geometry.jsm modules/HUDService.jsm modules/InlineSpellChecker.jsm + modules/ISO8601DateUtils.jsm modules/LightweightThemeConsumer.jsm modules/LightweightThemeManager.jsm modules/Microformats.js modules/NetUtil.jsm modules/NetworkPrioritizer.jsm modules/openLocationLastURL.jsm modules/PerfMeasurement.jsm modules/PlacesDBUtils.jsm
--- a/browser/locales/en-US/chrome/browser/aboutDialog.dtd +++ b/browser/locales/en-US/chrome/browser/aboutDialog.dtd @@ -1,17 +1,31 @@ <!ENTITY aboutDialog.title "About &brandFullName;"> +<!-- LOCALIZATION NOTE (warningDesc.version): This is a warning about the experimental nature of Nightly and Aurora builds. It is only shown in those versions. --> +<!ENTITY warningDesc.version "&brandShortName; is experimental and may be unstable."> +<!-- LOCALIZATION NOTE (warningDesc.telemetry): This is a notification that Nightly/Aurora builds automatically send Telemetry data back to Mozilla. It is only shown in those versions. "It" refers to brandShortName. --> +<!ENTITY warningDesc.telemetry "It automatically sends test information back to &vendorShortName; to help make &brandShortName; better."> + +<!-- LOCALIZATION NOTE (community.exp.*) This paragraph is shown in "experimental" builds, i.e. Nightly and Aurora builds, instead of the other "community.*" strings below. --> +<!ENTITY community.exp.start ""> +<!-- LOCALIZATION NOTE (community.exp.mozillaLink): This is a link title that links to http://www.mozilla.org/. --> +<!ENTITY community.exp.mozillaLink "&vendorShortName;"> +<!ENTITY community.exp.middle " is a "> +<!-- LOCALIZATION NOTE (community.exp.creditslink): This is a link title that links to about:credits. --> +<!ENTITY community.exp.creditsLink "global community"> +<!ENTITY community.exp.end " working together to keep the Web open, public and accessible to all."> + <!ENTITY community.start2 "&brandShortName; is designed by "> <!-- LOCALIZATION NOTE (community.mozillaLink): This is a link title that links to http://www.mozilla.org/. --> <!ENTITY community.mozillaLink "&vendorShortName;"> <!ENTITY community.middle2 ", a "> <!-- LOCALIZATION NOTE (community.creditsLink): This is a link title that links to about:credits. --> <!ENTITY community.creditsLink "global community"> -<!ENTITY community.end2 " working together to make the Internet better. We believe that the Internet should be open, public, and accessible to everyone without any restrictions."> +<!ENTITY community.end3 " working together to keep the Web open, public and accessible to all."> <!ENTITY contribute.start "Sound interesting? "> <!-- LOCALIZATION NOTE (contribute.getInvolvedLink): This is a link title that links to http://www.mozilla.org/contribute/. --> <!ENTITY contribute.getInvolvedLink "Get involved!"> <!ENTITY contribute.end ""> <!-- LOCALIZATION NOTE (bottomLinks.license): This is a link title that links to about:license. --> <!ENTITY bottomLinks.license "Licensing Information">
--- a/browser/locales/en-US/chrome/browser/preferences/advanced.dtd +++ b/browser/locales/en-US/chrome/browser/preferences/advanced.dtd @@ -35,29 +35,33 @@ <!ENTITY networkTab.label "Network"> <!ENTITY connection.label "Connection"> <!ENTITY connectionDesc.label "Configure how &brandShortName; connects to the Internet"> <!ENTITY connectionSettings.label "Settings…"> <!ENTITY connectionSettings.accesskey "e"> -<!ENTITY offlineStorage.label "Offline Storage"> +<!ENTITY httpCache.label "Cached Web Content"> + +<!ENTITY offlineStorage2.label "Offline Web Content and User Data"> <!-- LOCALIZATION NOTE: The entities limitCacheSizeBefore.label and limitCacheSizeAfter.label appear on a single line in preferences as follows: &limitCacheSizeBefore.label [textbox for cache size in MB] &limitCacheSizeAfter.label; --> <!ENTITY limitCacheSizeBefore.label "Limit cache to"> <!ENTITY limitCacheSizeBefore.accesskey "L"> <!ENTITY limitCacheSizeAfter.label "MB of space"> <!ENTITY clearCacheNow.label "Clear Now"> <!ENTITY clearCacheNow.accesskey "C"> +<!ENTITY clearOfflineAppCacheNow.label "Clear Now"> +<!ENTITY clearOfflineAppCacheNow.accesskey "N"> <!ENTITY overrideSmartCacheSize.label "Override automatic cache management"> <!ENTITY overrideSmartCacheSize.accesskey "O"> <!ENTITY updateTab.label "Update"> <!ENTITY updateApp.label "&brandShortName; updates:"> <!ENTITY updateAuto.label "Automatically install updates (recommended: improved security)"> <!ENTITY updateAuto.accesskey "A"> @@ -79,17 +83,17 @@ <!ENTITY enableSearchUpdate.label "Search Engines"> <!ENTITY enableSearchUpdate.accesskey "E"> <!ENTITY offlineNotify.label "Tell me when a website asks to store data for offline use"> <!ENTITY offlineNotify.accesskey "T"> <!ENTITY offlineNotifyExceptions.label "Exceptions…"> <!ENTITY offlineNotifyExceptions.accesskey "x"> -<!ENTITY offlineAppsList.label "The following websites have stored data for offline use:"> +<!ENTITY offlineAppsList2.label "The following websites are allowed to store data for offline use:"> <!ENTITY offlineAppsList.height "7em"> <!ENTITY offlineAppsListRemove.label "Remove…"> <!ENTITY offlineAppsListRemove.accesskey "R"> <!ENTITY offlineAppRemove.confirm "Remove offline data"> <!ENTITY encryptionTab.label "Encryption"> <!ENTITY protocols.label "Protocols">
--- a/browser/locales/en-US/chrome/browser/preferences/preferences.properties +++ b/browser/locales/en-US/chrome/browser/preferences/preferences.properties @@ -100,17 +100,24 @@ offlineAppRemoveConfirm=Remove offline d # %1$S = size (in bytes or megabytes, ...) # %2$S = unit of measure (bytes, KB, MB, ...) offlineAppUsage=%1$S %2$S offlinepermissionstext=The following websites are not allowed to store data for offline use: offlinepermissionstitle=Offline Data ####Preferences::Advanced::Network -#LOCALIZATION NOTE: The next string is for the disk usage of the http cache. -# e.g., "Your cache is currently using 200 MB" +#LOCALIZATION NOTE: The next string is for the disk usage of the web content cache. +# e.g., "Your web content cache is currently using 200 MB" # %1$S = size # %2$S = unit (MB, KB, etc.) -actualCacheSize=Your cache is currently using %1$S %2$S of disk space +actualDiskCacheSize=Your web content cache is currently using %1$S %2$S of disk space + +####Preferences::Advanced::Network +#LOCALIZATION NOTE: The next string is for the disk usage of the application cache. +# e.g., "Your application cache is currently using 200 MB" +# %1$S = size +# %2$S = unit (MB, KB, etc.) +actualAppCacheSize=Your application cache is currently using %1$S %2$S of disk space syncUnlink.title=Do you want to unlink your device? syncUnlink.label=This device will no longer be associated with your Sync account. All of your personal data, both on this device and in your Sync account, will remain intact. syncUnlinkConfirm.label=Unlink
--- a/browser/locales/en-US/chrome/browser/preferences/sync.dtd +++ b/browser/locales/en-US/chrome/browser/preferences/sync.dtd @@ -25,16 +25,18 @@ <!ENTITY engine.tabs.label "Tabs"> <!ENTITY engine.tabs.accesskey "T"> <!ENTITY engine.history.label "History"> <!ENTITY engine.history.accesskey "r"> <!ENTITY engine.passwords.label "Passwords"> <!ENTITY engine.passwords.accesskey "P"> <!ENTITY engine.prefs.label "Preferences"> <!ENTITY engine.prefs.accesskey "S"> +<!ENTITY engine.addons.label "Add-ons"> +<!ENTITY engine.addons.accesskey "A"> <!-- Device Settings --> <!ENTITY syncComputerName.label "Computer Name:"> <!ENTITY syncComputerName.accesskey "c"> <!ENTITY unlinkDevice.label "Unlink This Device"> <!-- Footer stuff --> <!ENTITY prefs.tosLink.label "Terms of Service">
--- a/browser/locales/en-US/chrome/browser/syncSetup.dtd +++ b/browser/locales/en-US/chrome/browser/syncSetup.dtd @@ -1,13 +1,13 @@ <!ENTITY accountSetupTitle.label "&syncBrand.fullName.label; Setup"> <!-- First page of the wizard --> -<!ENTITY setup.pickSetupType.description "Welcome, if you've never used &syncBrand.fullName.label; before, you will need to create a new account."> +<!ENTITY setup.pickSetupType.description2 "Welcome! If you've never used &syncBrand.fullName.label; before, you will need to create a new account."> <!ENTITY button.createNewAccount.label "Create a New Account"> <!ENTITY button.haveAccount.label "I Have an Account"> <!ENTITY setup.choicePage.title.label "Have you used &syncBrand.fullName.label; before?"> <!ENTITY setup.choicePage.new.label "I've never used &syncBrand.shortName.label; before"> <!ENTITY setup.choicePage.existing.label "I'm already using &syncBrand.shortName.label; on another computer"> <!-- New Account AND Existing Account --> @@ -83,16 +83,18 @@ <!ENTITY engine.tabs.label "Tabs"> <!ENTITY engine.tabs.accesskey "T"> <!ENTITY engine.history.label "History"> <!ENTITY engine.history.accesskey "r"> <!ENTITY engine.passwords.label "Passwords"> <!ENTITY engine.passwords.accesskey "P"> <!ENTITY engine.prefs.label "Preferences"> <!ENTITY engine.prefs.accesskey "S"> +<!ENTITY engine.addons.label "Add-ons"> +<!ENTITY engine.addons.accesskey "A"> <!ENTITY choice2.merge.main.label "Merge this computer's data with my &syncBrand.shortName.label; data"> <!ENTITY choice2.merge.recommended.label "Recommended:"> <!ENTITY choice2.client.main.label "Replace all data on this computer with my &syncBrand.shortName.label; data"> <!ENTITY choice2.server.main.label "Replace all other devices with this computer's data"> <!-- Confirm Merge Options --> <!ENTITY setup.optionsConfirmPage.title "Confirm">
--- a/browser/modules/Makefile.in +++ b/browser/modules/Makefile.in @@ -46,16 +46,17 @@ include $(topsrcdir)/config/config.mk ifdef ENABLE_TESTS DIRS += test endif EXTRA_JS_MODULES = \ openLocationLastURL.jsm \ NetworkPrioritizer.jsm \ + offlineAppCache.jsm \ $(NULL) ifeq ($(MOZ_WIDGET_TOOLKIT),windows) EXTRA_JS_MODULES += \ WindowsPreviewPerTab.jsm \ WindowsJumpLists.jsm \ $(NULL) endif
new file mode 100644 --- /dev/null +++ b/browser/modules/offlineAppCache.jsm @@ -0,0 +1,54 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Honza Bambas <honzab.moz@firemni.cz> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +let EXPORTED_SYMBOLS = ["OfflineAppCacheHelper"]; + +const Cc = Components.classes; +const Ci = Components.interfaces; + +let OfflineAppCacheHelper = { + clear: function() { + var cacheService = Cc["@mozilla.org/network/cache-service;1"]. + getService(Ci.nsICacheService); + try { + cacheService.evictEntries(Ci.nsICache.STORE_OFFLINE); + } catch(er) {} + + var storageManagerService = Cc["@mozilla.org/dom/storagemanager;1"]. + getService(Ci.nsIDOMStorageManager); + storageManagerService.clearOfflineApps(); + } +};
--- a/browser/themes/gnomestripe/browser.css +++ b/browser/themes/gnomestripe/browser.css @@ -1978,90 +1978,35 @@ panel[dimmed="true"] { #highlighter-veil-container[locked] > #highlighter-veil-middlebox > #highlighter-veil-transparentbox { box-shadow: 0 0 0 1px black; outline-color: white; } /* Highlighter toolbar */ #inspector-toolbar { - -moz-appearance: none; - padding: 4px 3px; border-top: 1px solid hsla(210, 8%, 5%, .65); - box-shadow: 0 1px 0 0 hsla(210, 16%, 76%, .2) inset; - background-image: -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); } #inspector-toolbar[treepanel-open] { padding-top: 0; -moz-padding-end: 0; } -#devtools-sidebar-toolbar { - -moz-appearance: none; - padding: 4px 3px; - box-shadow: 0 1px 0 0 hsla(210, 16%, 76%, .2) inset; - background-image: -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); -} - #devtools-side-splitter { -moz-appearance: none; border: 0; -moz-border-start: 1px solid #242b33; min-width: 0; width: 3px; background-color: transparent; -moz-margin-end: -3px; position: relative; } -#inspector-inspect-toolbutton, -#inspector-tools > toolbarbutton, -#devtools-sidebar-toolbar > toolbarbutton { - -moz-appearance: none; - min-width: 78px; - min-height: 22px; - color: hsl(210,30%,85%); - text-shadow: 0 -1px 0 hsla(210,8%,5%,.45); - border: 1px solid hsla(210,8%,5%,.45); - border-radius: 3px; - background: -moz-linear-gradient(hsla(212,7%,57%,.35), hsla(212,7%,57%,.1)) padding-box; - box-shadow: 0 1px 0 hsla(210,16%,76%,.15) inset, 0 0 0 1px hsla(210,16%,76%,.15) inset, 0 1px 0 hsla(210,16%,76%,.15); - margin: 0 3px; -} - -#inspector-inspect-toolbutton:not([checked]):hover:active, -#inspector-tools > toolbarbutton:not([checked]):hover:active, -#devtools-sidebar-toolbar > toolbarbutton:not([checked]):hover:active { - border-color: hsla(210,8%,5%,.6); - background: -moz-linear-gradient(hsla(220,6%,10%,.3), hsla(212,7%,57%,.15) 65%, hsla(212,7%,57%,.3)); - box-shadow: 0 0 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); -} - -#inspector-inspect-toolbutton[checked], -#inspector-tools > toolbarbutton[checked], -#devtools-sidebar-toolbar > toolbarbutton[checked] { - color: hsl(208,100%,60%) !important; - border-color: hsla(210,8%,5%,.6) !important; - background: -moz-linear-gradient(hsla(220,6%,10%,.6), hsla(210,11%,18%,.45) 75%, hsla(210,11%,30%,.4)); - box-shadow: 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); -} - -#inspector-inspect-toolbutton[checked]:hover, -#inspector-tools > toolbarbutton[checked]:hover, -#devtools-sidebar-toolbar > toolbarbutton[checked]:hover { - background-color: transparent !important; -} - -#inspector-inspect-toolbutton[checked]:hover:active, -#inspector-tools > toolbarbutton[checked]:hover:active, -#devtools-sidebar-toolbar > toolbarbutton[checked]:hover:active { - background-color: hsla(210,8%,5%,.2) !important; -} - /* Highlighter - toolbar resizers */ .inspector-resizer { -moz-appearance: none; cursor: n-resize; } #inspector-top-resizer {
new file mode 100644 --- /dev/null +++ b/browser/themes/gnomestripe/devtools/common.css @@ -0,0 +1,112 @@ +/* vim:set ts=2 sw=2 sts=2 et: */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is DevTools code. + * + * The Initial Developer of the Original Code is Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Paul Rouget <paul@mozilla.com> (original author) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/* Toolbar and Toolbar items */ + +.devtools-toolbar { + -moz-appearance: none; + padding: 4px 3px; + box-shadow: 0 1px 0 0 hsla(210, 16%, 76%, .2) inset; + background: -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); +} + +.devtools-toolbarbutton { + -moz-appearance: none; + min-width: 78px; + min-height: 22px; + color: hsl(210,30%,85%); + text-shadow: 0 -1px 0 hsla(210,8%,5%,.45); + border: 1px solid hsla(210,8%,5%,.45); + border-radius: 3px; + background: -moz-linear-gradient(hsla(212,7%,57%,.35), hsla(212,7%,57%,.1)) padding-box; + box-shadow: 0 1px 0 hsla(210,16%,76%,.15) inset, 0 0 0 1px hsla(210,16%,76%,.15) inset, 0 1px 0 hsla(210,16%,76%,.15); + margin: 0 3px; +} + +.devtools-toolbarbutton:not([checked]):hover:active { + border-color: hsla(210,8%,5%,.6); + background: -moz-linear-gradient(hsla(220,6%,10%,.3), hsla(212,7%,57%,.15) 65%, hsla(212,7%,57%,.3)); + box-shadow: 0 0 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); +} + +.devtools-toolbarbutton[checked] { + color: hsl(208,100%,60%) !important; + border-color: hsla(210,8%,5%,.6) !important; + background: -moz-linear-gradient(hsla(220,6%,10%,.6), hsla(210,11%,18%,.45) 75%, hsla(210,11%,30%,.4)); + box-shadow: 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); +} + +.devtools-toolbarbutton[checked]:hover { + background-color: transparent !important; +} + +.devtools-toolbarbutton[checked]:hover:active { + background-color: hsla(210,8%,5%,.2) !important; +} + +/* Search input */ + +.devtools-searchinput { + -moz-appearance: none; + margin: 0 3px; + background-color: transparent; + border: 1px solid hsla(210,8%,5%,.6); + border-radius: 20px; + background-image: url(magnifying-glass.png), -moz-linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35)); + background-repeat: no-repeat; + background-position: 4px 3px, top left, top left; + padding-top: 0; + padding-bottom: 0; + -moz-padding-start: 18px; + -moz-padding-end: 12px; + box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset, + 0 0 0 1px hsla(210,16%,76%,.1) inset, + 0 1px 0 hsla(210,16%,76%,.15); + color: hsl(210,30%,85%); +} + +.devtools-searchinput:-moz-locale-dir(rtl) { + background-position: -moz-calc(100% - 4px) 3px, top left, top left; +} + +.devtools-searchinput > .textbox-input-box > .textbox-search-icons { + display: none; +} + +.devtools-searchinput > .textbox-input-box > .textbox-input:-moz-placeholder { + color: hsl(208,10%,66%); +}
deleted file mode 100644 index 4ad3c219c6493fdfbe3152b206a9052288dee505..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
new file mode 100644 index 0000000000000000000000000000000000000000..6cc3e984b62fefeba1b6a22f7129bc23d3e9ddc1 GIT binary patch literal 2908 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 GLSTaT2WY(j
new file mode 100644 index 0000000000000000000000000000000000000000..0f8f4b1b0b6a6776d1aac85209e2374cb9bbffba GIT binary patch literal 2912 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 KMNUMnLSTZ7y=cw=
new file mode 100644 index 0000000000000000000000000000000000000000..cf70394e6a1c4fae7c8aa60266063d417740798a GIT binary patch literal 1103 zc$@)G1hD&wP)<h;3K|Lk000e1NJLTq001xm000;W1^@s6y#0RM0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#@kvBMRCwC#S6yfvRTQ3kXLoj!?6_@H zv%5{ENow;`TPuiIL&ZK+6cO6uLks$%NU2YyQ1GE3^r_-g3s!;wn-_)J)}J+4MJ%WY zMX3)>2>Gk2yVGQMlBVfoce}HhnL9nFo-M;RyTKPFuoph&&b{Z}d%p8`XPD=C(pqj@ zTH~!wpiZDpV2!uH!%npIk;y-={v1ujTV9tK>y^3O&6pJ9oHHTBg5$cQo)CH_Ykbk! z(LP_fHrf<k_3+F>PKHM_pn(tsFn|rX2Pgq<104UlM6<f82e^J?<c+r0#1Daha@?`q z?ytZ7?xPm1`{2gbtp_iCGj!Tsc6wm$-F8j8lFt_oH*b34UwIRhN5!86v;mN98ZZJF z2Bc_g6JQ6RrP@BMe3AJ)AkR#Xekcc(y}}WtTp_PN+qdULE|)jSB4{B+RU^@BSARLx z)D&q8$UMAUvMz1zdg_CP*}ueU9suRr;jw{U(bAKE${Q8W=>{~?`y60qH4kuoYUCsj z1b5rEYkEv_&R_U)5R||3`>#K0MrxveUZ3p8K91oWgq3SMuBn7V`%)9vkD@17ZOfy@ z*OS5sot~&@7oo9Y4)Hi3UdsbKJvn?_35WODjws?HPq^;pt=r#$zM1)Ze9)74>>twz zBhk_OHX1s8WAszTWsGH}1muWSym!96=jpSKIU`n3K3)+HE?|`UU6cpd@cb$2Z^x+c ztuep@#v@6L36w7sB2gujr=;;1<H*iJ<%-3U6$*#Z-I8UMEON00GB(LG7qYu(SsQ5I z<tkOrA1eO7@V$!)8NZxdwT$-ddF9-kF*nH>!wqbRZJxaNIa)^gDmnC-Y2KX$WU-H9 zIEOMQi)*r(?D+F9zI=|ztr$V*O;S*hT-oZgfIMNA#u`YbEPt2wSTTf<StK5dB`zl~ z9Eru_8t@j9=PvDib^o#Pi7Cv=D6KPld%CPE-zU#VOnwZG;Mq(j_1b|$16jk!q7o27 zZj~HhRC!cixZJElxYI{42e^ga@F#I)6+#j!kcbTqe0*T%&K=LlvaEQXdt29Uee&E3 zFO8wlAHV&yP1D+rFeW!c)Hq{f6T@%5b@(DEkFl9s%uKs#W2jalBZ-Yvi5P{cL1fC7 zk5MVbb_XzD4y9TI$|RbwQta;Am3aTed%L!Dc4$#m)q+8J{e#SN#nPg=luD)bnX~-^ z*OEh*({xAyl}DLc1S&4Fb)>N3%So4Vs7N7aSG&koB2dna5S6n=x*<JZa&fYpLv{SY zt+|+;ei$}tL+HQ#l&ENe*e_F31;{hZR~ZBmK<fxl{(t$kWA$IkI)OTYwcYLuFaR=9 VtWP9k_G|zE002ovPDHLkV1jva5dZ)H
new file mode 100644 index 0000000000000000000000000000000000000000..673c32810029e3121cbbe386b108a2951520783b GIT binary patch literal 275 zc%17D@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XwtBiahE&{2x>NXqhgskQ<3?$L(}oTQlojr=9+@vOfq`3~ zo1xH1pjfH%HN!?Df%D9dt{XV2DU>y7)i4~{yzmEO$QjO?DHD=ZHL7_9>{}n11{kK6 z9BsLw(e!;`j=jRO#w7a{H)2cp-!Uh#DugjU5;8f=(l|r9WB(x^wx4BI0`bg`^aFU3 z_Om2$D)hBxG0Z;0z<WM4V_B2P5yi}io~z0M44bM1C-Lsm;rYSn(`+U%pNYeOAx2GU V`l@q2u|N+nc)I$ztaD0e0su94U2OmW
--- a/browser/themes/gnomestripe/devtools/splitview.css +++ b/browser/themes/gnomestripe/devtools/splitview.css @@ -15,123 +15,156 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -.splitview-root { - margin-top: 4px; +.splitview-nav-container { + background-color: hsl(208,11%,27%); + color: white; } -.splitview-filter { - -moz-box-flex: 1; - -moz-margin-start: 1ex; - max-width: 25ex; +.splitview-nav { + -moz-appearance: none; + margin: 0; + box-shadow: inset -1px 0 0 #222426; } -.splitview-nav-container { - -moz-box-pack: center; - margin: 4px; - border: 1px inset WindowFrame; - border-radius: 4px; - background-color: -moz-default-background-color; - color: -moz-default-color; +.splitview-nav > li { + color: white; + background-clip: padding-box; + border-bottom: 1px solid hsla(210,16%,76%,.1); + box-shadow: inset 0 -1px 0 hsla(210,8%,5%,.25); + -moz-padding-end: 8px; + -moz-box-align: center; } -ol.splitview-nav { - overflow-x: hidden; - overflow-y: auto; +.splitview-nav { list-style-image: none; list-style: none; padding: 0; margin: 0; } -ol.splitview-nav > li { - display: -moz-box; - -moz-box-orient: vertical; +.splitview-nav > li { outline: 0; - border-bottom: 1px solid ThreeDShadow; - padding: 2px; - padding-top: 4px; vertical-align: bottom; - color: black; - -moz-transition-property: background-color, max-height; - -moz-transition-duration: 1s; - max-height: 2048px; /* for slide transition */ -} -ol.splitview-nav > li.splitview-active { - background-color: #eaf2fe; /* same as orion.css's .line_caret */ -} -ol.splitview-nav > li:hover, -ol.splitview-nav > li:focus { - background-color: #f0f5fd; /* slightly lighter .line_caret */ } -ol.splitview-nav > li.splitview-flash { - background-color: #faf0e1; /* complement of .line_caret */ -} -ol.splitview-nav > li.splitview-slide { - max-height: 0; - overflow: hidden; -} - -.splitview-side-details { - margin: 2px; -} - -.splitview-nav.splitview-all-filtered ~ .splitview-nav.placeholder.all-filtered, -.splitview-nav:empty ~ .splitview-nav.placeholder.empty { - -moz-box-flex: 0; +.placeholder { + -moz-box-flex: 1; + -moz-box-back: center; text-align: center; } -.splitview-main .toolbar, -.splitview-main .toolbar > * { - display: -moz-box; +.splitview-nav > li.splitview-active { + background-image: url(itemArrow-ltr.png), + -moz-linear-gradient(left, black, black), + -moz-linear-gradient(hsl(206,61%,40%), hsl(206,61%,31%)); + background-repeat: no-repeat, no-repeat, repeat-x; + background-position: center right, top right, top left; + background-size: auto, 1px 100%, auto; + border-bottom: 1px solid hsla(210,8%,5%,.25); + box-shadow: inset 0 1px 0 hsla(210,40%,83%,.15), + inset 0 -1px 0 hsla(210,40%,83%,.05); +} + +.splitview-nav > li.splitview-active:-moz-locale-dir(rtl) { + background-image: url(itemArrow-rtl.png), + -moz-linear-gradient(left, black, black), + -moz-linear-gradient(hsl(206,61%,40%), hsl(206,61%,31%)); + background-repeat: no-repeat, no-repeat, repeat-x; + background-position: center left, top left, top right; } -.splitview-main .toolbar { - -moz-box-flex: 1; - -moz-box-orient: horizontal; - -moz-padding-start: 3px; + +/* Toolbars */ + +.devtools-toolbar { + height: 26px; + background-origin: border-box; + background-clip: border-box; + border-top: 1px solid hsla(210,8%,5%,.5); + border-bottom: 1px solid hsla(210,8%,5%,.65); + padding: 3px; +} + +.splitview-main > toolbar:-moz-locale-dir(ltr) { + border-right: 1px solid hsla(210,8%,5%,.5); +} + +.splitview-main > toolbar:-moz-locale-dir(rtl) { + border-left: 1px solid hsla(210,8%,5%,.5); } -a { - color: -moz-hyperlinktext; - text-decoration: underline; +.devtools-toolbarbutton { + font-size: 11px; + padding: 0 8px; + width: auto; + min-width: 48px; + min-height: 0; } -button { - margin: 0; + +/* Resizers */ + +.splitview-landscape-resizer { + -moz-appearance: none; + width: 7px; + background-image: -moz-linear-gradient(left, black 1px, rgba(255,255,255,0.2) 1px); + background-size: 2px 10px; + background-clip: padding-box; + background-repeat: repeat-x; + border-width: 1px; + border-style: solid; + border-color: rgba(255, 255, 255, 0.05); + margin: 5px 0; + -moz-transform: translateX(-7px); +} + +.splitview-landscape-resizer:-moz-locale-dir(rtl) { + -moz-transform: translateX(7px); +} + +.splitview-portrait-resizer { + -moz-appearance: none; + background: -moz-linear-gradient(top, black 1px, rgba(255,255,255,0.2) 1px), + -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); + height: 12px; + background-size: 10px 2px, 100% 12px; + background-clip: content-box, border-box; + background-repeat: repeat-y, no-repeat; + background-position: center center; + padding: 2px 0; + border-top: 1px solid hsla(210,8%,5%,.5); + border-bottom: 1px solid hsla(210,8%,5%,.5); } /* limited width mode (hide search unless it has focus [search-on-type]) */ @media (max-width: 250px) { .splitview-filter { max-width: none; position: fixed; margin: 0; bottom: -4em; - -moz-transition-property: bottom; - -moz-transition-duration: 0.2s; } .splitview-filter[focused="true"] { bottom: 0; } }
--- a/browser/themes/gnomestripe/devtools/styleeditor.css +++ b/browser/themes/gnomestripe/devtools/styleeditor.css @@ -15,163 +15,142 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -ol.splitview-nav:focus { +.stylesheet-title, +.stylesheet-name { + text-decoration: none; + color: hsl(207,17%,88%); +} + +.stylesheet-name { + font-size: 13px; +} + +.stylesheet-rule-count, +.stylesheet-saveButton { + color: hsl(211,12%,60%); +} + +.stylesheet-saveButton { + text-decoration: underline; + cursor: pointer; +} + +.splitview-active .stylesheet-title, +.splitview-active .stylesheet-name { + color: hsl(0,0%,100%); +} + +.splitview-active .stylesheet-rule-count, +.splitview-active .stylesheet-saveButton { + color: hsl(200,66%,70%); +} + +.splitview-nav:focus { outline: 0; /* focus ring is on the stylesheet name */ } -.splitview-nav > li:-moz-locale-dir(ltr), -.splitview-nav > li hgroup:-moz-locale-dir(ltr) { - float: left; -} -.splitview-nav > li:-moz-locale-dir(rtl), -.splitview-nav > li hgroup:-moz-locale-dir(rtl) { - float: right; -} -.splitview-nav > li > hgroup.stylesheet-info { - max-width: 66%; -} -.splitview-nav > li > hgroup .stylesheet-name { - display: inline-block; - width: 100%; - max-width: 34ex; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} .splitview-nav > li.unsaved > hgroup .stylesheet-name { font-style: italic; } -.splitview-nav > li.unsaved > hgroup .stylesheet-name:before:-moz-locale-dir(ltr), -.splitview-nav > li.unsaved > hgroup .stylesheet-name:after:-moz-locale-dir(rtl) { + +.splitview-nav:-moz-locale-dir(ltr) > li.unsaved > hgroup .stylesheet-name:before, +.splitview-nav:-moz-locale-dir(rtl) > li.unsaved > hgroup .stylesheet-name:after { font-style: italic; - content: "* "; } -.splitview-nav > li > .stylesheet-enabled { - float: left; - width: 20px; - height: 20px; - -moz-margin-end: 6px; - border: 1px solid transparent; - background-image: url(eye-toggle.png); - background-position: center center; +.stylesheet-enabled { + padding: 8px 0; + margin: 0 8px; + background-image: url(itemToggle.png); background-repeat: no-repeat; -} -.splitview-nav > li > .stylesheet-enabled:-moz-locale-dir(rtl) { - float: right; + background-clip: content-box; + background-position: 0 8px; + width: 24px; + height: 40px; } -.splitview-nav > li.disabled > .stylesheet-enabled { - background-image: none; + +.disabled > .stylesheet-enabled { + background-position: -24px 8px; } + .splitview-nav > li > .stylesheet-enabled:focus, .splitview-nav > li:hover > .stylesheet-enabled { outline: 0; - border: 1px inset WindowFrame; - -moz-margin-end: 6px; -} - -.splitview-nav > li hgroup .stylesheet-title { - color: GrayText; - font-size: 0.8em; -} -.splitview-nav > li.error hgroup > .stylesheet-error-message { - color: red; - font-size: 0.8em; } -.splitview-nav > li > .stylesheet-more { - position: relative; - right: 0; -} -.splitview-nav > li > .stylesheet-more:-moz-locale-dir(rtl) { - left: 0; +.stylesheet-error-message { + color: red; } -.splitview-nav > li hgroup.stylesheet-stats, -.splitview-nav > li hgroup.stylesheet-actions { - position: absolute; - z-index: 2; - -moz-transition-property: left, right; - -moz-transition-duration: 0.2s; - -moz-transition-delay: 0.2s; - -moz-transition-timing-function: ease-in-out; +.stylesheet-more > h3 { + font-size: 11px; + -moz-margin-end: 2px; } -.splitview-nav > li hgroup.stylesheet-stats { - z-index: 1; - -moz-transition-delay: 0.4s; - color: GrayText; - padding-left: 6px; /* Fitts */ - padding-right: 6px; -} -.splitview-nav > li hgroup.stylesheet-actions a { - color: ButtonText; - padding-left: 6px; /* Fitts */ - padding-right: 6px; +.devtools-searchinput { + max-width: 25ex; + font-size: 11px; } -.splitview-nav > li hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li:hover hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li:focus hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li.splitview-active hgroup.stylesheet-stats:-moz-locale-dir(ltr) { - right: -50ex; -} -.splitview-nav > li hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li:hover hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li:focus hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li.splitview-active hgroup.stylesheet-stats:-moz-locale-dir(rtl) { - left: -50ex; -} -.splitview-nav > li hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li:hover hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li:focus hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li.splitview-active hgroup.stylesheet-actions:-moz-locale-dir(ltr) { - right: 0; -} -.splitview-nav > li hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li:hover hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li:focus hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li.splitview-active hgroup.stylesheet-actions:-moz-locale-dir(rtl) { - left: 0; +.placeholder { + color: white; } -.stylesheet-editor-input { - display: -moz-box; - -moz-box-flex: 1; - overflow: hidden; - min-height: 8em; - margin: 3px; - margin-top: 0; - border: 1px inset WindowFrame; - border-radius: 4px; - background-color: -moz-default-background-color; +.placeholder a { + text-decoration: underline; } h1, h2, h3 { font-size: inherit; font-weight: normal; margin: 0; padding: 0; } + +/* portrait mode */ +@media (max-aspect-ratio: 5/3) { + .splitview-nav { + box-shadow: none; + } + + .splitview-nav > li.splitview-active { + background-size: 0 0, 0 0, auto; + } + + .stylesheet-enabled { + padding: 0; + background-position: 0 0; + height: 24px; + } + + .disabled > .stylesheet-enabled { + background-position: -24px 0; + } + + .splitview-nav > li > hgroup.stylesheet-info { + -moz-box-align: baseline; + } +}
--- a/browser/themes/gnomestripe/jar.mn +++ b/browser/themes/gnomestripe/jar.mn @@ -77,16 +77,17 @@ browser.jar: 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/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/arrows.png (devtools/arrows.png) skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css) skin/classic/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css) skin/classic/browser/devtools/webconsole.png (devtools/webconsole.png) skin/classic/browser/devtools/gcli.css (devtools/gcli.css) skin/classic/browser/devtools/breadcrumbs/ltr-end-pressed.png (devtools/breadcrumbs/ltr-end-pressed.png) @@ -110,17 +111,20 @@ browser.jar: skin/classic/browser/devtools/breadcrumbs/rtl-middle-selected.png (devtools/breadcrumbs/rtl-middle-selected.png) skin/classic/browser/devtools/breadcrumbs/rtl-middle.png (devtools/breadcrumbs/rtl-middle.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-pressed.png (devtools/breadcrumbs/rtl-start-pressed.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png (devtools/breadcrumbs/rtl-start-selected-pressed.png) skin/classic/browser/devtools/breadcrumbs/rtl-start.png (devtools/breadcrumbs/rtl-start.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-selected.png (devtools/breadcrumbs/rtl-start-selected.png) skin/classic/browser/devtools/splitview.css (devtools/splitview.css) skin/classic/browser/devtools/styleeditor.css (devtools/styleeditor.css) - skin/classic/browser/devtools/eye-toggle.png (devtools/eye-toggle.png) + skin/classic/browser/devtools/magnifying-glass.png (devtools/magnifying-glass.png) + skin/classic/browser/devtools/itemToggle.png (devtools/itemToggle.png) + skin/classic/browser/devtools/itemArrow-rtl.png (devtools/itemArrow-rtl.png) + skin/classic/browser/devtools/itemArrow-ltr.png (devtools/itemArrow-ltr.png) #ifdef MOZ_SERVICES_SYNC skin/classic/browser/sync-16-throbber.png skin/classic/browser/sync-16.png skin/classic/browser/sync-24-throbber.png skin/classic/browser/sync-32.png skin/classic/browser/sync-bg.png skin/classic/browser/sync-128.png skin/classic/browser/sync-desktopIcon.png
--- a/browser/themes/pinstripe/browser.css +++ b/browser/themes/pinstripe/browser.css @@ -2717,88 +2717,35 @@ panel[dimmed="true"] { #highlighter-veil-container[locked] > #highlighter-veil-middlebox > #highlighter-veil-transparentbox { box-shadow: 0 0 0 1px black; outline-color: white; } /* Highlighter toolbar */ #inspector-toolbar { - -moz-appearance: none; border-top: 1px solid hsla(210, 8%, 5%, .65); - box-shadow: 0 1px 0 0 hsla(210, 16%, 76%, .2) inset; - background-image: -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); padding: 4px 16px 4px 0; /* use -moz-padding-end: 16px when/if bug 631729 gets fixed */ } #inspector-toolbar[treepanel-open] { padding: 0 0 4px; } -#devtools-sidebar-toolbar { - -moz-appearance: none; - padding: 4px 3px; - box-shadow: 0 1px 0 0 hsla(210, 16%, 76%, .2) inset; - background-image: -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); -} - #devtools-side-splitter { background-image: none !important; border: 0; -moz-border-start: 1px solid #242b33; min-width: 0; width: 3px; background-color: transparent; -moz-margin-end: -3px; position: relative; } -#inspector-inspect-toolbutton, -#inspector-tools > toolbarbutton, -#devtools-sidebar-toolbar > toolbarbutton { - -moz-appearance: none; - min-width: 78px; - min-height: 22px; - color: hsl(210,30%,85%); - text-shadow: 0 -1px 0 hsla(210,8%,5%,.45); - border: 1px solid hsla(210,8%,5%,.45); - border-radius: @toolbarbuttonCornerRadius@; - background: -moz-linear-gradient(hsla(212,7%,57%,.35), hsla(212,7%,57%,.1)) padding-box; - box-shadow: 0 1px 0 hsla(210,16%,76%,.15) inset, 0 0 0 1px hsla(210,16%,76%,.15) inset, 0 1px 0 hsla(210,16%,76%,.15); -} - -#inspector-inspect-toolbutton > .toolbarbutton-text , -#inspector-tools > toolbarbutton > .toolbarbutton-text, -#devtools-sidebar-toolbar > toolbarbutton > .toolbarbutton-text { - margin: 1px 6px; -} - -#inspector-inspect-toolbutton:not([checked]):hover:active, -#inspector-tools > toolbarbutton:not([checked]):hover:active, -#devtools-sidebar-toolbar > toolbarbutton:not([checked]):hover:active { - border-color: hsla(210,8%,5%,.6); - background: -moz-linear-gradient(hsla(220,6%,10%,.3), hsla(212,7%,57%,.15) 65%, hsla(212,7%,57%,.3)); - box-shadow: 0 0 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); -} - -#inspector-inspect-toolbutton[checked], -#inspector-tools > toolbarbutton[checked], -#devtools-sidebar-toolbar > toolbarbutton[checked] { - color: hsl(208,100%,60%) !important; - border-color: hsla(210,8%,5%,.6); - background: -moz-linear-gradient(hsla(220,6%,10%,.6), hsla(210,11%,18%,.45) 75%, hsla(210,11%,30%,.4)); - box-shadow: 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); -} - -#inspector-inspect-toolbutton[checked]:hover:active, -#inspector-tools > toolbarbutton[checked]:hover:active, -#devtools-sidebar-toolbar > toolbarbutton[checked]:hover:active { - background-color: hsla(210,8%,5%,.2); -} - /* Highlighter - toolbar resizers */ .inspector-resizer { -moz-appearance: none; cursor: n-resize; } #inspector-top-resizer {
new file mode 100644 --- /dev/null +++ b/browser/themes/pinstripe/devtools/common.css @@ -0,0 +1,113 @@ +/* vim:set ts=2 sw=2 sts=2 et: */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is DevTools code. + * + * The Initial Developer of the Original Code is Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Paul Rouget <paul@mozilla.com> (original author) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +%include ../shared.inc + +/* Toolbar and Toolbar items */ + +.devtools-toolbar { + -moz-appearance: none; + padding: 4px 3px; + box-shadow: 0 1px 0 0 hsla(210, 16%, 76%, .2) inset; + background-image: -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); +} + +.devtools-toolbarbutton { + -moz-appearance: none; + min-width: 78px; + min-height: 22px; + color: hsl(210,30%,85%); + text-shadow: 0 -1px 0 hsla(210,8%,5%,.45); + border: 1px solid hsla(210,8%,5%,.45); + border-radius: @toolbarbuttonCornerRadius@; + background: -moz-linear-gradient(hsla(212,7%,57%,.35), hsla(212,7%,57%,.1)) padding-box; + box-shadow: 0 1px 0 hsla(210,16%,76%,.15) inset, 0 0 0 1px hsla(210,16%,76%,.15) inset, 0 1px 0 hsla(210,16%,76%,.15); +} + +.devtools-toolbarbutton > .toolbarbutton-text { + margin: 1px 6px; +} + +.devtools-toolbarbutton:not([checked]):hover:active { + border-color: hsla(210,8%,5%,.6); + background: -moz-linear-gradient(hsla(220,6%,10%,.3), hsla(212,7%,57%,.15) 65%, hsla(212,7%,57%,.3)); + box-shadow: 0 0 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); +} + +.devtools-toolbarbutton[checked] { + color: hsl(208,100%,60%) !important; + border-color: hsla(210,8%,5%,.6); + background: -moz-linear-gradient(hsla(220,6%,10%,.6), hsla(210,11%,18%,.45) 75%, hsla(210,11%,30%,.4)); + box-shadow: 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 3px hsla(210,8%,5%,.25) inset, 0 1px 0 hsla(210,16%,76%,.15); +} + +.devtools-toolbarbutton[checked]:hover:active { + background-color: hsla(210,8%,5%,.2); +} + +/* Search input */ + +.devtools-searchinput { + -moz-appearance: none; + margin: 0 3px; + background-color: transparent; + border: 1px solid hsla(210,8%,5%,.6); + border-radius: 20px; + background-image: url(magnifying-glass.png), -moz-linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35)); + background-repeat: no-repeat; + background-position: 4px 3px, top left, top left; + padding-top: 0; + padding-bottom: 0; + -moz-padding-start: 18px; + -moz-padding-end: 12px; + box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset, + 0 0 0 1px hsla(210,16%,76%,.1) inset, + 0 1px 0 hsla(210,16%,76%,.15); + color: hsl(210,30%,85%); +} + +.devtools-searchinput:-moz-locale-dir(rtl) { + background-position: -moz-calc(100% - 4px) 3px, top left, top left; +} + +.devtools-searchinput > .textbox-input-box > .textbox-search-icons { + display: none; +} + +.devtools-searchinput > .textbox-input-box > .textbox-input:-moz-placeholder { + color: hsl(208,10%,66%); +}
deleted file mode 100644 index 4ad3c219c6493fdfbe3152b206a9052288dee505..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
new file mode 100644 index 0000000000000000000000000000000000000000..6cc3e984b62fefeba1b6a22f7129bc23d3e9ddc1 GIT binary patch literal 2908 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 GLSTaT2WY(j
new file mode 100644 index 0000000000000000000000000000000000000000..0f8f4b1b0b6a6776d1aac85209e2374cb9bbffba GIT binary patch literal 2912 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 KMNUMnLSTZ7y=cw=
new file mode 100644 index 0000000000000000000000000000000000000000..cf70394e6a1c4fae7c8aa60266063d417740798a GIT binary patch literal 1103 zc$@)G1hD&wP)<h;3K|Lk000e1NJLTq001xm000;W1^@s6y#0RM0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#@kvBMRCwC#S6yfvRTQ3kXLoj!?6_@H zv%5{ENow;`TPuiIL&ZK+6cO6uLks$%NU2YyQ1GE3^r_-g3s!;wn-_)J)}J+4MJ%WY zMX3)>2>Gk2yVGQMlBVfoce}HhnL9nFo-M;RyTKPFuoph&&b{Z}d%p8`XPD=C(pqj@ zTH~!wpiZDpV2!uH!%npIk;y-={v1ujTV9tK>y^3O&6pJ9oHHTBg5$cQo)CH_Ykbk! z(LP_fHrf<k_3+F>PKHM_pn(tsFn|rX2Pgq<104UlM6<f82e^J?<c+r0#1Daha@?`q z?ytZ7?xPm1`{2gbtp_iCGj!Tsc6wm$-F8j8lFt_oH*b34UwIRhN5!86v;mN98ZZJF z2Bc_g6JQ6RrP@BMe3AJ)AkR#Xekcc(y}}WtTp_PN+qdULE|)jSB4{B+RU^@BSARLx z)D&q8$UMAUvMz1zdg_CP*}ueU9suRr;jw{U(bAKE${Q8W=>{~?`y60qH4kuoYUCsj z1b5rEYkEv_&R_U)5R||3`>#K0MrxveUZ3p8K91oWgq3SMuBn7V`%)9vkD@17ZOfy@ z*OS5sot~&@7oo9Y4)Hi3UdsbKJvn?_35WODjws?HPq^;pt=r#$zM1)Ze9)74>>twz zBhk_OHX1s8WAszTWsGH}1muWSym!96=jpSKIU`n3K3)+HE?|`UU6cpd@cb$2Z^x+c ztuep@#v@6L36w7sB2gujr=;;1<H*iJ<%-3U6$*#Z-I8UMEON00GB(LG7qYu(SsQ5I z<tkOrA1eO7@V$!)8NZxdwT$-ddF9-kF*nH>!wqbRZJxaNIa)^gDmnC-Y2KX$WU-H9 zIEOMQi)*r(?D+F9zI=|ztr$V*O;S*hT-oZgfIMNA#u`YbEPt2wSTTf<StK5dB`zl~ z9Eru_8t@j9=PvDib^o#Pi7Cv=D6KPld%CPE-zU#VOnwZG;Mq(j_1b|$16jk!q7o27 zZj~HhRC!cixZJElxYI{42e^ga@F#I)6+#j!kcbTqe0*T%&K=LlvaEQXdt29Uee&E3 zFO8wlAHV&yP1D+rFeW!c)Hq{f6T@%5b@(DEkFl9s%uKs#W2jalBZ-Yvi5P{cL1fC7 zk5MVbb_XzD4y9TI$|RbwQta;Am3aTed%L!Dc4$#m)q+8J{e#SN#nPg=luD)bnX~-^ z*OEh*({xAyl}DLc1S&4Fb)>N3%So4Vs7N7aSG&koB2dna5S6n=x*<JZa&fYpLv{SY zt+|+;ei$}tL+HQ#l&ENe*e_F31;{hZR~ZBmK<fxl{(t$kWA$IkI)OTYwcYLuFaR=9 VtWP9k_G|zE002ovPDHLkV1jva5dZ)H
new file mode 100644 index 0000000000000000000000000000000000000000..673c32810029e3121cbbe386b108a2951520783b GIT binary patch literal 275 zc%17D@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XwtBiahE&{2x>NXqhgskQ<3?$L(}oTQlojr=9+@vOfq`3~ zo1xH1pjfH%HN!?Df%D9dt{XV2DU>y7)i4~{yzmEO$QjO?DHD=ZHL7_9>{}n11{kK6 z9BsLw(e!;`j=jRO#w7a{H)2cp-!Uh#DugjU5;8f=(l|r9WB(x^wx4BI0`bg`^aFU3 z_Om2$D)hBxG0Z;0z<WM4V_B2P5yi}io~z0M44bM1C-Lsm;rYSn(`+U%pNYeOAx2GU V`l@q2u|N+nc)I$ztaD0e0su94U2OmW
--- a/browser/themes/pinstripe/devtools/splitview.css +++ b/browser/themes/pinstripe/devtools/splitview.css @@ -15,123 +15,156 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -.splitview-root { - margin-top: 4px; +.splitview-nav-container { + background-color: hsl(208,11%,27%); + color: white; } -.splitview-filter { - -moz-box-flex: 1; - -moz-margin-start: 1ex; - max-width: 25ex; +.splitview-nav { + -moz-appearance: none; + margin: 0; + box-shadow: inset -1px 0 0 #222426; } -.splitview-nav-container { - -moz-box-pack: center; - margin: 4px; - border: 1px inset WindowFrame; - border-radius: 4px; - background-color: -moz-default-background-color; - color: -moz-default-color; +.splitview-nav > li { + color: white; + background-clip: padding-box; + border-bottom: 1px solid hsla(210,16%,76%,.1); + box-shadow: inset 0 -1px 0 hsla(210,8%,5%,.25); + -moz-padding-end: 8px; + -moz-box-align: center; } -ol.splitview-nav { - overflow-x: hidden; - overflow-y: auto; +.splitview-nav { list-style-image: none; list-style: none; padding: 0; margin: 0; } -ol.splitview-nav > li { - display: -moz-box; - -moz-box-orient: vertical; +.splitview-nav > li { outline: 0; - border-bottom: 1px solid ThreeDShadow; - padding: 2px; - padding-top: 4px; vertical-align: bottom; - color: black; - -moz-transition-property: background-color, max-height; - -moz-transition-duration: 1s; - max-height: 2048px; /* for slide transition */ -} -ol.splitview-nav > li.splitview-active { - background-color: #eaf2fe; /* same as orion.css's .line_caret */ -} -ol.splitview-nav > li:hover, -ol.splitview-nav > li:focus { - background-color: #f0f5fd; /* slightly lighter .line_caret */ } -ol.splitview-nav > li.splitview-flash { - background-color: #faf0e1; /* complement of .line_caret */ -} -ol.splitview-nav > li.splitview-slide { - max-height: 0; - overflow: hidden; -} - -.splitview-side-details { - margin: 2px; -} - -.splitview-nav.splitview-all-filtered ~ .splitview-nav.placeholder.all-filtered, -.splitview-nav:empty ~ .splitview-nav.placeholder.empty { - -moz-box-flex: 0; +.placeholder { + -moz-box-flex: 1; + -moz-box-back: center; text-align: center; } -.splitview-main .toolbar, -.splitview-main .toolbar > * { - display: -moz-box; +.splitview-nav > li.splitview-active { + background-image: url(itemArrow-ltr.png), + -moz-linear-gradient(left, black, black), + -moz-linear-gradient(hsl(206,61%,40%), hsl(206,61%,31%)); + background-repeat: no-repeat, no-repeat, repeat-x; + background-position: center right, top right, top left; + background-size: auto, 1px 100%, auto; + border-bottom: 1px solid hsla(210,8%,5%,.25); + box-shadow: inset 0 1px 0 hsla(210,40%,83%,.15), + inset 0 -1px 0 hsla(210,40%,83%,.05); +} + +.splitview-nav > li.splitview-active:-moz-locale-dir(rtl) { + background-image: url(itemArrow-rtl.png), + -moz-linear-gradient(left, black, black), + -moz-linear-gradient(hsl(206,61%,40%), hsl(206,61%,31%)); + background-repeat: no-repeat, no-repeat, repeat-x; + background-position: center left, top left, top right; } -.splitview-main .toolbar { - -moz-box-flex: 1; - -moz-box-orient: horizontal; - -moz-padding-start: 3px; + +/* Toolbars */ + +.devtools-toolbar { + height: 26px; + background-origin: border-box; + background-clip: border-box; + border-top: 1px solid hsla(210,8%,5%,.5); + border-bottom: 1px solid hsla(210,8%,5%,.65); + padding: 3px; +} + +.splitview-main > toolbar:-moz-locale-dir(ltr) { + border-right: 1px solid hsla(210,8%,5%,.5); +} + +.splitview-main > toolbar:-moz-locale-dir(rtl) { + border-left: 1px solid hsla(210,8%,5%,.5); } -a { - color: -moz-hyperlinktext; - text-decoration: underline; +.devtools-toolbarbutton { + font-size: 11px; + padding: 0 8px; + width: auto; + min-width: 48px; + min-height: 0; } -button { - margin: 0; + +/* Resizers */ + +.splitview-landscape-resizer { + -moz-appearance: none; + width: 7px; + background-image: -moz-linear-gradient(left, black 1px, rgba(255,255,255,0.2) 1px); + background-size: 2px 10px; + background-clip: padding-box; + background-repeat: repeat-x; + border-width: 1px; + border-style: solid; + border-color: rgba(255, 255, 255, 0.05); + margin: 5px 0; + -moz-transform: translateX(-7px); +} + +.splitview-landscape-resizer:-moz-locale-dir(rtl) { + -moz-transform: translateX(7px); +} + +.splitview-portrait-resizer { + -moz-appearance: none; + background: -moz-linear-gradient(top, black 1px, rgba(255,255,255,0.2) 1px), + -moz-linear-gradient(top, hsl(210,11%,36%), hsl(210,11%,18%)); + height: 12px; + background-size: 10px 2px, 100% 12px; + background-clip: content-box, border-box; + background-repeat: repeat-y, no-repeat; + background-position: center center; + padding: 2px 0; + border-top: 1px solid hsla(210,8%,5%,.5); + border-bottom: 1px solid hsla(210,8%,5%,.5); } /* limited width mode (hide search unless it has focus [search-on-type]) */ @media (max-width: 250px) { .splitview-filter { max-width: none; position: fixed; margin: 0; bottom: -4em; - -moz-transition-property: bottom; - -moz-transition-duration: 0.2s; } .splitview-filter[focused="true"] { bottom: 0; } }
--- a/browser/themes/pinstripe/devtools/styleeditor.css +++ b/browser/themes/pinstripe/devtools/styleeditor.css @@ -15,163 +15,142 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -ol.splitview-nav:focus { +.stylesheet-title, +.stylesheet-name { + text-decoration: none; + color: hsl(207,17%,88%); +} + +.stylesheet-name { + font-size: 13px; +} + +.stylesheet-rule-count, +.stylesheet-saveButton { + color: hsl(211,12%,60%); +} + +.stylesheet-saveButton { + text-decoration: underline; + cursor: pointer; +} + +.splitview-active .stylesheet-title, +.splitview-active .stylesheet-name { + color: hsl(0,0%,100%); +} + +.splitview-active .stylesheet-rule-count, +.splitview-active .stylesheet-saveButton { + color: hsl(200,66%,70%); +} + +.splitview-nav:focus { outline: 0; /* focus ring is on the stylesheet name */ } -.splitview-nav > li:-moz-locale-dir(ltr), -.splitview-nav > li hgroup:-moz-locale-dir(ltr) { - float: left; -} -.splitview-nav > li:-moz-locale-dir(rtl), -.splitview-nav > li hgroup:-moz-locale-dir(rtl) { - float: right; -} -.splitview-nav > li > hgroup.stylesheet-info { - max-width: 66%; -} -.splitview-nav > li > hgroup .stylesheet-name { - display: inline-block; - width: 100%; - max-width: 34ex; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} .splitview-nav > li.unsaved > hgroup .stylesheet-name { font-style: italic; } -.splitview-nav > li.unsaved > hgroup .stylesheet-name:before:-moz-locale-dir(ltr), -.splitview-nav > li.unsaved > hgroup .stylesheet-name:after:-moz-locale-dir(rtl) { + +.splitview-nav:-moz-locale-dir(ltr) > li.unsaved > hgroup .stylesheet-name:before, +.splitview-nav:-moz-locale-dir(rtl) > li.unsaved > hgroup .stylesheet-name:after { font-style: italic; - content: "* "; } -.splitview-nav > li > .stylesheet-enabled { - float: left; - width: 20px; - height: 20px; - -moz-margin-end: 6px; - border: 1px solid transparent; - background-image: url(eye-toggle.png); - background-position: center center; +.stylesheet-enabled { + padding: 8px 0; + margin: 0 8px; + background-image: url(itemToggle.png); background-repeat: no-repeat; -} -.splitview-nav > li > .stylesheet-enabled:-moz-locale-dir(rtl) { - float: right; + background-clip: content-box; + background-position: 0 8px; + width: 24px; + height: 40px; } -.splitview-nav > li.disabled > .stylesheet-enabled { - background-image: none; + +.disabled > .stylesheet-enabled { + background-position: -24px 8px; } + .splitview-nav > li > .stylesheet-enabled:focus, .splitview-nav > li:hover > .stylesheet-enabled { outline: 0; - border: 1px inset WindowFrame; - -moz-margin-end: 6px; -} - -.splitview-nav > li hgroup .stylesheet-title { - color: GrayText; - font-size: 0.8em; -} -.splitview-nav > li.error hgroup > .stylesheet-error-message { - color: red; - font-size: 0.8em; } -.splitview-nav > li > .stylesheet-more { - position: relative; - right: 0; -} -.splitview-nav > li > .stylesheet-more:-moz-locale-dir(rtl) { - left: 0; +.stylesheet-error-message { + color: red; } -.splitview-nav > li hgroup.stylesheet-stats, -.splitview-nav > li hgroup.stylesheet-actions { - position: absolute; - z-index: 2; - -moz-transition-property: left, right; - -moz-transition-duration: 0.2s; - -moz-transition-delay: 0.2s; - -moz-transition-timing-function: ease-in-out; +.stylesheet-more > h3 { + font-size: 11px; + -moz-margin-end: 2px; } -.splitview-nav > li hgroup.stylesheet-stats { - z-index: 1; - -moz-transition-delay: 0.4s; - color: GrayText; - padding-left: 6px; /* Fitts */ - padding-right: 6px; -} -.splitview-nav > li hgroup.stylesheet-actions a { - color: ButtonText; - padding-left: 6px; /* Fitts */ - padding-right: 6px; +.devtools-searchinput { + max-width: 25ex; + font-size: 11px; } -.splitview-nav > li hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li:hover hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li:focus hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li.splitview-active hgroup.stylesheet-stats:-moz-locale-dir(ltr) { - right: -50ex; -} -.splitview-nav > li hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li:hover hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li:focus hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li.splitview-active hgroup.stylesheet-stats:-moz-locale-dir(rtl) { - left: -50ex; -} -.splitview-nav > li hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li:hover hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li:focus hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li.splitview-active hgroup.stylesheet-actions:-moz-locale-dir(ltr) { - right: 0; -} -.splitview-nav > li hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li:hover hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li:focus hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li.splitview-active hgroup.stylesheet-actions:-moz-locale-dir(rtl) { - left: 0; +.placeholder { + color: white; } -.stylesheet-editor-input { - display: -moz-box; - -moz-box-flex: 1; - overflow: hidden; - min-height: 8em; - margin: 3px; - margin-top: 0; - border: 1px inset WindowFrame; - border-radius: 4px; - background-color: -moz-default-background-color; +.placeholder a { + text-decoration: underline; } h1, h2, h3 { font-size: inherit; font-weight: normal; margin: 0; padding: 0; } + +/* portrait mode */ +@media (max-aspect-ratio: 5/3) { + .splitview-nav { + box-shadow: none; + } + + .splitview-nav > li.splitview-active { + background-size: 0 0, 0 0, auto; + } + + .stylesheet-enabled { + padding: 0; + background-position: 0 0; + height: 24px; + } + + .disabled > .stylesheet-enabled { + background-position: -24px 0; + } + + .splitview-nav > li > hgroup.stylesheet-info { + -moz-box-align: baseline; + } +}
--- a/browser/themes/pinstripe/jar.mn +++ b/browser/themes/pinstripe/jar.mn @@ -116,16 +116,17 @@ browser.jar: 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/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/arrows.png (devtools/arrows.png) skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/browser/devtools/gcli.css (devtools/gcli.css) skin/classic/browser/devtools/toolbarbutton-close.png (devtools/toolbarbutton-close.png) * skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css) skin/classic/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css) skin/classic/browser/devtools/webconsole.png (devtools/webconsole.png) @@ -150,17 +151,20 @@ browser.jar: skin/classic/browser/devtools/breadcrumbs/rtl-middle-selected.png (devtools/breadcrumbs/rtl-middle-selected.png) skin/classic/browser/devtools/breadcrumbs/rtl-middle.png (devtools/breadcrumbs/rtl-middle.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-pressed.png (devtools/breadcrumbs/rtl-start-pressed.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png (devtools/breadcrumbs/rtl-start-selected-pressed.png) skin/classic/browser/devtools/breadcrumbs/rtl-start.png (devtools/breadcrumbs/rtl-start.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-selected.png (devtools/breadcrumbs/rtl-start-selected.png) skin/classic/browser/devtools/splitview.css (devtools/splitview.css) skin/classic/browser/devtools/styleeditor.css (devtools/styleeditor.css) - skin/classic/browser/devtools/eye-toggle.png (devtools/eye-toggle.png) + skin/classic/browser/devtools/magnifying-glass.png (devtools/magnifying-glass.png) + skin/classic/browser/devtools/itemToggle.png (devtools/itemToggle.png) + skin/classic/browser/devtools/itemArrow-rtl.png (devtools/itemArrow-rtl.png) + skin/classic/browser/devtools/itemArrow-ltr.png (devtools/itemArrow-ltr.png) #ifdef MOZ_SERVICES_SYNC skin/classic/browser/sync-throbber.png skin/classic/browser/sync-16.png skin/classic/browser/sync-32.png skin/classic/browser/sync-bg.png skin/classic/browser/sync-128.png skin/classic/browser/sync-desktopIcon.png skin/classic/browser/sync-mobileIcon.png
--- a/browser/themes/winstripe/browser.css +++ b/browser/themes/winstripe/browser.css @@ -1709,25 +1709,31 @@ richlistitem[type~="action"][actiontype= } /* Implements editBookmarkPanel resizing on folderTree un-collapse. */ #editBMPanel_folderTree { min-width: 27em; } .panel-promo-box { - margin: 8px -16px -16px -16px; - padding: 8px 16px; - background-color: #f1f5fb; - color: GrayText; + margin: 16px 0 -2px; +} + +@media all and (-moz-windows-default-theme) { + .panel-promo-box { + margin: 8px -16px -16px; + padding: 8px 16px; %ifndef WINSTRIPE_AERO - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; %endif - box-shadow: 0px 1px 2px rgb(204,214,234) inset; + background-color: #f1f5fb; + color: GrayText; + box-shadow: 0px 1px 2px rgb(204,214,234) inset; + } } .panel-promo-icon { list-style-image: url("chrome://browser/skin/sync-notification-24.png"); -moz-margin-end: 10px; vertical-align: middle; } @@ -2649,88 +2655,34 @@ panel[dimmed="true"] { #highlighter-veil-container[locked] > #highlighter-veil-middlebox > #highlighter-veil-transparentbox { box-shadow: 0 0 0 1px black; outline-color: white; } /* Highlighter toolbar */ #inspector-toolbar { - -moz-appearance: none; - padding: 4px 3px; border-top: 1px solid hsla(211,68%,6%,.65) !important; - box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset; - background-image: -moz-linear-gradient(top, hsl(209,18%,34%), hsl(210,24%,16%)); } #inspector-toolbar[treepanel-open] { padding-top: 0; -moz-padding-end: 0; } -#devtools-sidebar-toolbar { - -moz-appearance: none; - padding: 4px 3px; - box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset; - background-image: -moz-linear-gradient(top, hsl(209,18%,34%), hsl(210,24%,16%)); -} - #devtools-side-splitter { border: 0; -moz-border-start: 1px solid #242b33; min-width: 0; width: 3px; background-color: transparent; -moz-margin-end: -3px; position: relative; } -#inspector-inspect-toolbutton, -#inspector-tools > toolbarbutton, -#devtools-sidebar-toolbar > toolbarbutton { - -moz-appearance: none; - min-width: 78px; - min-height: 22px; - color: hsl(210,30%,85%); - text-shadow: 0 -1px 0 hsla(210,8%,5%,.45); - border: 1px solid hsla(211,68%,6%,.5); - border-radius: 3px; - background: -moz-linear-gradient(hsla(209,13%,54%,.35), hsla(209,13%,54%,.1) 85%, hsla(209,13%,54%,.2)) padding-box; - box-shadow: 0 1px 0 hsla(209,29%,72%,.15) inset, 0 0 0 1px hsla(209,29%,72%,.1) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1); -} - -#inspector-inspect-toolbutton > .toolbarbutton-icon, -#inspector-tools > toolbarbutton > .toolbarbutton-icon, -#devtools-sidebar-toolbar > toolbarbutton > .toolbarbutton-icon { - margin: 0; -} - -#inspector-inspect-toolbutton:not([checked]):hover:active, -#inspector-tools > toolbarbutton:not([checked]):hover:active, -#devtools-sidebar-toolbar > toolbarbutton:not([checked]):hover:active { - background-color: hsla(210,18%,9%,.1); - background-image: -moz-linear-gradient(hsla(209,13%,54%,.35), hsla(209,13%,54%,.1) 85%, hsla(209,13%,54%,.2)); - box-shadow: 0 1px 3px hsla(211,68%,6%,.5) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1); -} - -#inspector-inspect-toolbutton[checked], -#inspector-tools > toolbarbutton[checked], -#devtools-sidebar-toolbar > toolbarbutton[checked] { - border-color: hsla(211,68%,6%,.6); - background: -moz-linear-gradient(hsla(211,68%,6%,.1), hsla(211,68%,6%,.2)); - box-shadow: 0 1px 3px hsla(211,68%,6%,.5) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1); - color: hsl(200,100%,60%) !important; -} - -#inspector-inspect-toolbutton[checked]:hover:active, -#inspector-tools > toolbarbutton[checked]:hover:active, -#devtools-sidebar-toolbar > toolbarbutton[checked]:hover:active { - background-color: hsla(211,68%,6%,.2); -} - /* Highlighter - toolbar resizers */ .inspector-resizer { -moz-appearance: none; cursor: n-resize; } #inspector-top-resizer {
new file mode 100644 --- /dev/null +++ b/browser/themes/winstripe/devtools/common.css @@ -0,0 +1,120 @@ +/* vim:set ts=2 sw=2 sts=2 et: */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is DevTools code. + * + * The Initial Developer of the Original Code is Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Paul Rouget <paul@mozilla.com> (original author) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/* Toolbar and Toolbar items */ + +.devtools-toolbar { + -moz-appearance: none; + padding: 4px 3px; + box-shadow: 0 1px 0 hsla(209,29%,72%,.25) inset; + background-image: -moz-linear-gradient(top, hsl(209,18%,34%), hsl(210,24%,16%)); +} + +.devtools-toolbarbutton { + -moz-appearance: none; + min-width: 78px; + min-height: 22px; + color: hsl(210,30%,85%); + text-shadow: 0 -1px 0 hsla(210,8%,5%,.45); + border: 1px solid hsla(211,68%,6%,.5); + border-radius: 3px; + background: -moz-linear-gradient(hsla(209,13%,54%,.35), hsla(209,13%,54%,.1) 85%, hsla(209,13%,54%,.2)) padding-box; + box-shadow: 0 1px 0 hsla(209,29%,72%,.15) inset, 0 0 0 1px hsla(209,29%,72%,.1) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1); + -moz-margin-end: 3px; +} + +.devtools-toolbarbutton > .toolbarbutton-icon { + margin: 0; +} + +.devtools-toolbarbutton:not([checked]):hover:active { + background-color: hsla(210,18%,9%,.1); + background-image: -moz-linear-gradient(hsla(209,13%,54%,.35), hsla(209,13%,54%,.1) 85%, hsla(209,13%,54%,.2)); + box-shadow: 0 1px 3px hsla(211,68%,6%,.5) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1); +} + +.devtools-toolbarbutton[checked] { + border-color: hsla(211,68%,6%,.6); + background: -moz-linear-gradient(hsla(211,68%,6%,.1), hsla(211,68%,6%,.2)); + box-shadow: 0 1px 3px hsla(211,68%,6%,.5) inset, 0 0 0 1px hsla(209,29%,72%,.1), 0 1px 0 hsla(210,16%,76%,.1); + color: hsl(200,100%,60%) !important; +} + +.devtools-toolbarbutton:[checked]:hover:active { + background-color: hsla(211,68%,6%,.2); +} + +/* Search input */ + +.devtools-searchinput { + -moz-appearance: none; + margin: 0 3px; + border: 1px solid hsla(211,68%,6%,.6); + box-shadow: inset 0 1px 0 hsla(211,68%,6%,.05), 0 0 0 1px hsla(210,40%,83%,.1); + border-radius: 2px; + background-color: transparent; + background-image: url(magnifying-glass.png), -moz-linear-gradient(hsla(210,16%,76%,.15), hsla(210,16%,76%,.35)); + background-repeat: no-repeat; + background-position: 4px 3px, top left, top left; + padding-top: 0; + padding-bottom: 0; + -moz-padding-start: 18px; + -moz-padding-end: 12px; + color: hsl(210,30%,85%); + -moz-transition-property: background-color, border-color, box-shadow; + -moz-transition-duration: 150ms; + -moz-transition-timing-function: ease; +} + +.devtools-searchinput[focused] { + border-color: hsl(200,70%,40%) hsl(200,75%,37%) hsl(200,80%,35%); + background-origin: padding-box; + background-clip: padding-box; + box-shadow: inset 0 0 0 1px hsla(211,68%,6%,.1); +} + +.devtools-searchinput:-moz-locale-dir(rtl) { + background-position: -moz-calc(100% - 4px) 3px, top left, top left; +} + +.devtools-searchinput > .textbox-input-box > .textbox-search-icons { + display: none; +} + +.devtools-searchinput > .textbox-input-box > .textbox-input:-moz-placeholder { + color: hsl(208,10%,66%); +}
deleted file mode 100644 index 4ad3c219c6493fdfbe3152b206a9052288dee505..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
new file mode 100644 index 0000000000000000000000000000000000000000..6cc3e984b62fefeba1b6a22f7129bc23d3e9ddc1 GIT binary patch literal 2908 zc$@)T3#0UjP)<h;3K|Lk000e1NJLTq000L7002A)1^@s6s_&q^000V4X+uL$P-t&- zZ*ypGa3D!TLm+T+Z)Rz1WdHzp+MQEpR8#2|J@?-9LQ9B%luK_?6$l_wLW_VDktQl3 z2@pz%A)(n7QNa;KMFbnjpojyGj)066Q7jCK3fKqaA)=0hqlk*i`{8?|Yu3E?=FR@K z*FNX0^PRKL2fzpnmPj*EHGmAMLLL#|gU7_i;p8qrfeIvW01ybXWFd3?BLM*Temp!Y zBESc}00DT@3kU$fO`E_l9Ebl8>Oz@Z0f2-7z;ux~O9+4z06=<<LZ$#fMgf4Gm?l#I zpacM5%VT2W08lLeU?+d((*S^-_?deF09%wH6#<};03Z`(h(rKrI{>WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj<yb8E$Y7p{~}^y<NoE(t8hR70O53g(f%wivl@Uq27qn;q9yJG zXkH7Tb@z*AvJXJD0HEpGSMzZAemp!yp^&-R+2!Qq*h<7gTVcvqeg0>{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bX<ghC|5!a@*23S@vBa$qT}f<h>U&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc<iq4M<QwE6@>>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWw<V8OKyGH!<s&=a~<gZ&g?-wkmuTk;)2{N|h#+ z8!9hUsj8-`-l_{#^Hs}KkEvc$eXd4TGgITK3DlOWRjQp(>r)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3<GjWo3u76xcq}1n4XcKAfi=V?vCY|hb}GA={T;iDJ*ugp zIYTo_Ggq@x^OR;k2jiG=_?&c33Fj!Mm-Bv#-W2aC;wc-ZG)%cMWn62jmY0@Tt4OO+ zt4Hg-Hm>cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>=<rYWX7 zOgl`+&CJcB&DNPUn>{htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~m<WRyy9A&YbQ)eZ};a=`Uwk&k)bpGvl@s%PGWZ zol~3BM`ssjxpRZ_h>M9!g3B(KJ}#RZ#@)!h<Vtk)ab4kh()FF2vzx;0sN1jZHtuQe zhuojcG@mJ+Su=Cc!^lJ6QRUG;3!jxRYu~JXPeV_EXSL@eFJmu}SFP8ux21Qg_hIiB zKK4FxpW{B`JU8Al-dSJFH^8^Zx64n%Z=PR;-$Q>R|78Dq|Iq-afF%KE1Brn_fm;Im z_<DRHzm7jT+hz8$+3i7$pt(U6L63s1g5|-jA!x|#kgXy2=a|ls&S?&XP=4sv&<A1W zVT;3l3@3$$g;$0@j&O)r8qqPAHFwe6Lv!Cm`b3sQ-kWDJPdTqGN;N7zsxE3g+Bdp1 zx<AG)W?9VDSe;l&Y)c$DE-J1zZfw5a{O$9H;+^6P<9ipFFUVbRd7;k2^o6GusV)*M zI+j38h)y_^@IeqNs1}SR@)LI@jtY6g9l~cKFVQy9h}c71DjrVqNGeTwlI)SZHF+e( zGo>u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!L<Qv>kCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP<E(R5tF?-L+xY_-@he8+*L=H0;&eTfF!EKFPk@RRL8^)n?UY z`$_w=_dl+Qs_FQa`)ysVPHl1R#{<#>{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{<mvYb-}fF3I@)%Od#vFH(;s#nXB{tULYnfLMw?Tb`&(jLx=+kL z(bnqTdi+P*9}k=~JXv{4^Hj-c+UbJRlV|eJjGdL8eSR+a++f?HwtMGe&fjVeZ|}Mg zbm7uP|BL54ygSZZ^0;*JvfJeoSGZT2uR33C>U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3=t9lH$G=crT_o{j!8s8 zR5;7+)G-c&AQZ;&Kg3%&wTK*m&P`k#99%r7tE(5V2QW?3spp_eHKN!!wh3<{{JzHv z0|@6Fp;Fp7$(M>4@yAeUV*!$B<671Lyq=>4hPLbd&Lw!qu3^T{3=aUrIm?4^=qfkh z(p1H6XD}ci_Yr{fWHtc_uon=^XRoxGmKGR9{1YPnA-(}T&@|_nP=ELU0000<MNUMn GLSTaT2WY(j
new file mode 100644 index 0000000000000000000000000000000000000000..0f8f4b1b0b6a6776d1aac85209e2374cb9bbffba GIT binary patch literal 2912 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 KMNUMnLSTZ7y=cw=
new file mode 100644 index 0000000000000000000000000000000000000000..cf70394e6a1c4fae7c8aa60266063d417740798a GIT binary patch literal 1103 zc$@)G1hD&wP)<h;3K|Lk000e1NJLTq001xm000;W1^@s6y#0RM0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#@kvBMRCwC#S6yfvRTQ3kXLoj!?6_@H zv%5{ENow;`TPuiIL&ZK+6cO6uLks$%NU2YyQ1GE3^r_-g3s!;wn-_)J)}J+4MJ%WY zMX3)>2>Gk2yVGQMlBVfoce}HhnL9nFo-M;RyTKPFuoph&&b{Z}d%p8`XPD=C(pqj@ zTH~!wpiZDpV2!uH!%npIk;y-={v1ujTV9tK>y^3O&6pJ9oHHTBg5$cQo)CH_Ykbk! z(LP_fHrf<k_3+F>PKHM_pn(tsFn|rX2Pgq<104UlM6<f82e^J?<c+r0#1Daha@?`q z?ytZ7?xPm1`{2gbtp_iCGj!Tsc6wm$-F8j8lFt_oH*b34UwIRhN5!86v;mN98ZZJF z2Bc_g6JQ6RrP@BMe3AJ)AkR#Xekcc(y}}WtTp_PN+qdULE|)jSB4{B+RU^@BSARLx z)D&q8$UMAUvMz1zdg_CP*}ueU9suRr;jw{U(bAKE${Q8W=>{~?`y60qH4kuoYUCsj z1b5rEYkEv_&R_U)5R||3`>#K0MrxveUZ3p8K91oWgq3SMuBn7V`%)9vkD@17ZOfy@ z*OS5sot~&@7oo9Y4)Hi3UdsbKJvn?_35WODjws?HPq^;pt=r#$zM1)Ze9)74>>twz zBhk_OHX1s8WAszTWsGH}1muWSym!96=jpSKIU`n3K3)+HE?|`UU6cpd@cb$2Z^x+c ztuep@#v@6L36w7sB2gujr=;;1<H*iJ<%-3U6$*#Z-I8UMEON00GB(LG7qYu(SsQ5I z<tkOrA1eO7@V$!)8NZxdwT$-ddF9-kF*nH>!wqbRZJxaNIa)^gDmnC-Y2KX$WU-H9 zIEOMQi)*r(?D+F9zI=|ztr$V*O;S*hT-oZgfIMNA#u`YbEPt2wSTTf<StK5dB`zl~ z9Eru_8t@j9=PvDib^o#Pi7Cv=D6KPld%CPE-zU#VOnwZG;Mq(j_1b|$16jk!q7o27 zZj~HhRC!cixZJElxYI{42e^ga@F#I)6+#j!kcbTqe0*T%&K=LlvaEQXdt29Uee&E3 zFO8wlAHV&yP1D+rFeW!c)Hq{f6T@%5b@(DEkFl9s%uKs#W2jalBZ-Yvi5P{cL1fC7 zk5MVbb_XzD4y9TI$|RbwQta;Am3aTed%L!Dc4$#m)q+8J{e#SN#nPg=luD)bnX~-^ z*OEh*({xAyl}DLc1S&4Fb)>N3%So4Vs7N7aSG&koB2dna5S6n=x*<JZa&fYpLv{SY zt+|+;ei$}tL+HQ#l&ENe*e_F31;{hZR~ZBmK<fxl{(t$kWA$IkI)OTYwcYLuFaR=9 VtWP9k_G|zE002ovPDHLkV1jva5dZ)H
new file mode 100644 index 0000000000000000000000000000000000000000..236d93d49b03455585d2e76b44d1210ea8ab09a7 GIT binary patch literal 1111 zc$|GxS!mQi7>*~}T9k?w^}&!TDs*#fcWV<Hb(`$!qN#Pe=z5^0$!s^Q$)w4wo2?)o zpa|ah;)|ey4}yxvn_ye-)rxpLc=SmNf(k`Myk4BN-73O5kj(r)-}lcq|9o?>wPi(B z#q0`#Agbak<piFm_}`?7_`fc<`8}Ryp=b)V!8FRN4j>{rYzJiAR69TdsCuEZ2$~3D z+&m+hLMdgnph1&XeGKiHHsOz^WuC2SS%AoP&|z32HF%?&A`M-n)`t~Vu_cf(R(3g{ zt*a%eb!9bPr<N@xn>+y*Fac6Y&)jagf+tc#bp^ck(+oupK~PqthDD{6R#JivAj32p z(AWl!YzWa@h~-0k9T{Xfmf?a7yEwqHLU^&ja^%RM@NSNt77}u7WG@_vR0bhiV3>S9 zPv`4t=yWg~&+`l$WP-r}Mg-h~g;XzKxwWMVGH^A=u#o{R(vQ`4m_s5(m5yNAqh&33 zq)oVCjHlWRN3+adKt=gK)HFxYE=qv(|Iu!;U;`!rT$pn-d~xYopKJ?~15^Z^B!t^b zU2M%j1l<g@NvSPNbEKkbhUI657>XjqEf=Yl2I8_v;S6mUy1+L}^$mO^91Atd92aFH zTr3!E3`!CgjfTRUT;j@5%bCDJC9eL5+fbJ4n_-v@9AgL2V-7UQp+gHsc`fzjwG4Ch z@>)V=xeOM={BzZ%6!wq595pTuMy(Gl>~{wnyYoP@8$XI-T#h8Y*N2Wju8gdmc6YA$ z;b&^CSJ?FGLGy-(4{zO@`w3|GV}(`m6GyL}t*I=Y5-y)#6#SaCzMX#Ff2!E`?py~o z^(RS8uqSXYi|62-`RtfzuIAW`RO<Hbx8v)2tFA{XQSX*H^2-5!Y|ZH>J$qXFHh_io z-6tClPrvqj|B`FTi?gMDKh9K5ezfY)_d(%TMWOqt_+oif$!0D*$V|OieKd09%P!~S zk)5fJV&?PAzMeO~s-H=NTRS(Z6+-{Onk#o!>>fi{7Z>cRO-~X0ryh^C$d{V8?fnh6 Cc69~-
--- a/browser/themes/winstripe/devtools/splitview.css +++ b/browser/themes/winstripe/devtools/splitview.css @@ -15,123 +15,156 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -.splitview-root { - margin-top: 4px; +.splitview-nav-container { + background-color: hsl(211,21%,26%); + color: white; } -.splitview-filter { - -moz-box-flex: 1; - -moz-margin-start: 1ex; - max-width: 25ex; +.splitview-nav { + -moz-appearance: none; + margin: 0; + box-shadow: inset -1px 0 0 #222426; } -.splitview-nav-container { - -moz-box-pack: center; - margin: 4px; - border: 1px inset WindowFrame; - border-radius: 4px; - background-color: -moz-default-background-color; - color: -moz-default-color; +.splitview-nav > li { + color: white; + background-clip: padding-box; + border-bottom: 1px solid hsla(210,40%,83%,.1); + box-shadow: inset 0 -1px 0 hsla(211,68%,6%,.3); + -moz-padding-end: 8px; + -moz-box-align: center; } -ol.splitview-nav { - overflow-x: hidden; - overflow-y: auto; +.splitview-nav { list-style-image: none; list-style: none; padding: 0; margin: 0; } -ol.splitview-nav > li { - display: -moz-box; - -moz-box-orient: vertical; +.splitview-nav > li { outline: 0; - border-bottom: 1px solid ThreeDShadow; - padding: 2px; - padding-top: 4px; vertical-align: bottom; - color: black; - -moz-transition-property: background-color, max-height; - -moz-transition-duration: 1s; - max-height: 2048px; /* for slide transition */ -} -ol.splitview-nav > li.splitview-active { - background-color: #eaf2fe; /* same as orion.css's .line_caret */ -} -ol.splitview-nav > li:hover, -ol.splitview-nav > li:focus { - background-color: #f0f5fd; /* slightly lighter .line_caret */ } -ol.splitview-nav > li.splitview-flash { - background-color: #faf0e1; /* complement of .line_caret */ -} -ol.splitview-nav > li.splitview-slide { - max-height: 0; - overflow: hidden; -} - -.splitview-side-details { - margin: 2px; -} - -.splitview-nav.splitview-all-filtered ~ .splitview-nav.placeholder.all-filtered, -.splitview-nav:empty ~ .splitview-nav.placeholder.empty { - -moz-box-flex: 0; +.placeholder { + -moz-box-flex: 1; + -moz-box-back: center; text-align: center; } -.splitview-main .toolbar, -.splitview-main .toolbar > * { - display: -moz-box; +.splitview-nav > li.splitview-active { + background-image: url(itemArrow-ltr.png), + -moz-linear-gradient(left, black, black), + -moz-linear-gradient(hsl(200,100%,33%), hsl(200,100%,25%)); + background-repeat: no-repeat, no-repeat, repeat-x; + background-position: center right, top right, top left; + background-size: auto, 1px 100%, auto; + border-bottom: 1px solid hsla(210,8%,5%,.25); + box-shadow: inset 0 1px 0 hsla(210,40%,83%,.15), + inset 0 -1px 0 hsla(210,40%,83%,.05); +} + +.splitview-nav > li.splitview-active:-moz-locale-dir(rtl) { + background-image: url(itemArrow-rtl.png), + -moz-linear-gradient(left, black, black), + -moz-linear-gradient(hsl(200,100%,33%), hsl(200,100%,25%)); + background-repeat: no-repeat, no-repeat, repeat-x; + background-position: center left, top left, top right; } -.splitview-main .toolbar { - -moz-box-flex: 1; - -moz-box-orient: horizontal; - -moz-padding-start: 3px; + +/* Toolbars */ + +.devtools-toolbar { + height: 26px; + background-origin: border-box; + background-clip: border-box; + border-top: 1px solid hsla(210,8%,5%,.5); + border-bottom: 1px solid hsla(210,8%,5%,.65); + padding: 3px; +} + +.splitview-main > toolbar:-moz-locale-dir(ltr) { + border-right: 1px solid hsla(210,8%,5%,.5); +} + +.splitview-main > toolbar:-moz-locale-dir(rtl) { + border-left: 1px solid hsla(210,8%,5%,.5); } -a { - color: -moz-hyperlinktext; - text-decoration: underline; +.devtools-toolbarbutton { + font-size: 11px; + padding: 0 8px; + width: auto; + min-width: 48px; + min-height: 0; } -button { - margin: 0; + +/* Resizers */ + +.splitview-landscape-resizer { + -moz-appearance: none; + width: 7px; + background-image: -moz-linear-gradient(left, black 1px, rgba(255,255,255,0.2) 1px); + background-size: 2px 10px; + background-clip: padding-box; + background-repeat: repeat-x; + border-width: 1px; + border-style: solid; + border-color: rgba(255, 255, 255, 0.05); + margin: 5px 0; + -moz-transform: translateX(-7px); +} + +.splitview-landscape-resizer:-moz-locale-dir(rtl) { + -moz-transform: translateX(7px); +} + +.splitview-portrait-resizer { + -moz-appearance: none; + background: -moz-linear-gradient(top, black 1px, rgba(255,255,255,0.2) 1px), + -moz-linear-gradient(top, hsl(209,18%,34%), hsl(210,24%,16%)); + height: 12px; + background-size: 10px 2px, 100% 12px; + background-clip: content-box, border-box; + background-repeat: repeat-y, no-repeat; + background-position: center center; + padding: 2px 0; + border-top: 1px solid hsla(210,8%,5%,.5); + border-bottom: 1px solid hsla(210,8%,5%,.5); } /* limited width mode (hide search unless it has focus [search-on-type]) */ @media (max-width: 250px) { .splitview-filter { max-width: none; position: fixed; margin: 0; bottom: -4em; - -moz-transition-property: bottom; - -moz-transition-duration: 0.2s; } .splitview-filter[focused="true"] { bottom: 0; } }
--- a/browser/themes/winstripe/devtools/styleeditor.css +++ b/browser/themes/winstripe/devtools/styleeditor.css @@ -15,163 +15,142 @@ * The Original Code is Style Editor code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Cedric Vivier <cedricv@neonux.com> (original author) + * Paul Rouget <paul@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -ol.splitview-nav:focus { +.stylesheet-title, +.stylesheet-name { + text-decoration: none; + color: hsl(210,30%,85%); +} + +.stylesheet-name { + font-size: 13px; +} + +.stylesheet-rule-count, +.stylesheet-saveButton { + color: hsl(210,16%,53%); +} + +.stylesheet-saveButton { + text-decoration: underline; + cursor: pointer; +} + +.splitview-active .stylesheet-title, +.splitview-active .stylesheet-name { + color: hsl(0,0%,100%); +} + +.splitview-active .stylesheet-rule-count, +.splitview-active .stylesheet-saveButton { + color: hsl(205,50%,70%); +} + +.splitview-nav:focus { outline: 0; /* focus ring is on the stylesheet name */ } -.splitview-nav > li:-moz-locale-dir(ltr), -.splitview-nav > li hgroup:-moz-locale-dir(ltr) { - float: left; -} -.splitview-nav > li:-moz-locale-dir(rtl), -.splitview-nav > li hgroup:-moz-locale-dir(rtl) { - float: right; -} -.splitview-nav > li > hgroup.stylesheet-info { - max-width: 66%; -} -.splitview-nav > li > hgroup .stylesheet-name { - display: inline-block; - width: 100%; - max-width: 34ex; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} .splitview-nav > li.unsaved > hgroup .stylesheet-name { font-style: italic; } -.splitview-nav > li.unsaved > hgroup .stylesheet-name:before:-moz-locale-dir(ltr), -.splitview-nav > li.unsaved > hgroup .stylesheet-name:after:-moz-locale-dir(rtl) { + +.splitview-nav:-moz-locale-dir(ltr) > li.unsaved > hgroup .stylesheet-name:before, +.splitview-nav:-moz-locale-dir(rtl) > li.unsaved > hgroup .stylesheet-name:after { font-style: italic; - content: "* "; } -.splitview-nav > li > .stylesheet-enabled { - float: left; - width: 20px; - height: 20px; - -moz-margin-end: 6px; - border: 1px solid transparent; - background-image: url(eye-toggle.png); - background-position: center center; +.stylesheet-enabled { + padding: 8px 0; + margin: 0 8px; + background-image: url(itemToggle.png); background-repeat: no-repeat; -} -.splitview-nav > li > .stylesheet-enabled:-moz-locale-dir(rtl) { - float: right; + background-clip: content-box; + background-position: 0 8px; + width: 24px; + height: 40px; } -.splitview-nav > li.disabled > .stylesheet-enabled { - background-image: none; + +.disabled > .stylesheet-enabled { + background-position: -24px 8px; } + .splitview-nav > li > .stylesheet-enabled:focus, .splitview-nav > li:hover > .stylesheet-enabled { outline: 0; - border: 1px inset WindowFrame; - -moz-margin-end: 6px; -} - -.splitview-nav > li hgroup .stylesheet-title { - color: GrayText; - font-size: 0.8em; -} -.splitview-nav > li.error hgroup > .stylesheet-error-message { - color: red; - font-size: 0.8em; } -.splitview-nav > li > .stylesheet-more { - position: relative; - right: 0; -} -.splitview-nav > li > .stylesheet-more:-moz-locale-dir(rtl) { - left: 0; +.stylesheet-error-message { + color: red; } -.splitview-nav > li hgroup.stylesheet-stats, -.splitview-nav > li hgroup.stylesheet-actions { - position: absolute; - z-index: 2; - -moz-transition-property: left, right; - -moz-transition-duration: 0.2s; - -moz-transition-delay: 0.2s; - -moz-transition-timing-function: ease-in-out; +.stylesheet-more > h3 { + font-size: 11px; + -moz-margin-end: 2px; } -.splitview-nav > li hgroup.stylesheet-stats { - z-index: 1; - -moz-transition-delay: 0.4s; - color: GrayText; - padding-left: 6px; /* Fitts */ - padding-right: 6px; -} -.splitview-nav > li hgroup.stylesheet-actions a { - color: ButtonText; - padding-left: 6px; /* Fitts */ - padding-right: 6px; +.devtools-searchinput { + max-width: 25ex; + font-size: 11px; } -.splitview-nav > li hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li:hover hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li:focus hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li.splitview-active hgroup.stylesheet-stats:-moz-locale-dir(ltr) { - right: -50ex; -} -.splitview-nav > li hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li:hover hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li:focus hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li.splitview-active hgroup.stylesheet-stats:-moz-locale-dir(rtl) { - left: -50ex; -} -.splitview-nav > li hgroup.stylesheet-stats:-moz-locale-dir(ltr), -.splitview-nav > li:hover hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li:focus hgroup.stylesheet-actions:-moz-locale-dir(ltr), -.splitview-nav > li.splitview-active hgroup.stylesheet-actions:-moz-locale-dir(ltr) { - right: 0; -} -.splitview-nav > li hgroup.stylesheet-stats:-moz-locale-dir(rtl), -.splitview-nav > li:hover hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li:focus hgroup.stylesheet-actions:-moz-locale-dir(rtl), -.splitview-nav > li.splitview-active hgroup.stylesheet-actions:-moz-locale-dir(rtl) { - left: 0; +.placeholder { + color: white; } -.stylesheet-editor-input { - display: -moz-box; - -moz-box-flex: 1; - overflow: hidden; - min-height: 8em; - margin: 3px; - margin-top: 0; - border: 1px inset WindowFrame; - border-radius: 4px; - background-color: -moz-default-background-color; +.placeholder a { + text-decoration: underline; } h1, h2, h3 { font-size: inherit; font-weight: normal; margin: 0; padding: 0; } + +/* portrait mode */ +@media (max-aspect-ratio: 5/3) { + .splitview-nav { + box-shadow: none; + } + + .splitview-nav > li.splitview-active { + background-size: 0 0, 0 0, auto; + } + + .stylesheet-enabled { + padding: 0; + background-position: 0 0; + height: 24px; + } + + .disabled > .stylesheet-enabled { + background-position: -24px 0; + } + + .splitview-nav > li > hgroup.stylesheet-info { + -moz-box-align: baseline; + } +}
--- a/browser/themes/winstripe/jar.mn +++ b/browser/themes/winstripe/jar.mn @@ -100,16 +100,17 @@ browser.jar: skin/classic/browser/tabview/close.png (tabview/close.png) skin/classic/browser/tabview/edit-light.png (tabview/edit-light.png) skin/classic/browser/tabview/grain.png (tabview/grain.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-inverted.png (tabview/tabview-inverted.png) skin/classic/browser/tabview/tabview.css (tabview/tabview.css) + skin/classic/browser/devtools/common.css (devtools/common.css) skin/classic/browser/devtools/arrows.png (devtools/arrows.png) skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/browser/devtools/gcli.css (devtools/gcli.css) skin/classic/browser/devtools/toolbarbutton-close.png (devtools/toolbarbutton-close.png) skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css) skin/classic/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css) skin/classic/browser/devtools/webconsole.png (devtools/webconsole.png) @@ -134,17 +135,20 @@ browser.jar: skin/classic/browser/devtools/breadcrumbs/rtl-middle-selected.png (devtools/breadcrumbs/rtl-middle-selected.png) skin/classic/browser/devtools/breadcrumbs/rtl-middle.png (devtools/breadcrumbs/rtl-middle.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-pressed.png (devtools/breadcrumbs/rtl-start-pressed.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png (devtools/breadcrumbs/rtl-start-selected-pressed.png) skin/classic/browser/devtools/breadcrumbs/rtl-start.png (devtools/breadcrumbs/rtl-start.png) skin/classic/browser/devtools/breadcrumbs/rtl-start-selected.png (devtools/breadcrumbs/rtl-start-selected.png) skin/classic/browser/devtools/splitview.css (devtools/splitview.css) skin/classic/browser/devtools/styleeditor.css (devtools/styleeditor.css) - skin/classic/browser/devtools/eye-toggle.png (devtools/eye-toggle.png) + skin/classic/browser/devtools/magnifying-glass.png (devtools/magnifying-glass.png) + skin/classic/browser/devtools/itemToggle.png (devtools/itemToggle.png) + skin/classic/browser/devtools/itemArrow-rtl.png (devtools/itemArrow-rtl.png) + skin/classic/browser/devtools/itemArrow-ltr.png (devtools/itemArrow-ltr.png) #ifdef MOZ_SERVICES_SYNC skin/classic/browser/sync-throbber.png skin/classic/browser/sync-16.png skin/classic/browser/sync-32.png skin/classic/browser/sync-128.png skin/classic/browser/sync-bg.png skin/classic/browser/sync-desktopIcon.png skin/classic/browser/sync-mobileIcon.png @@ -255,16 +259,17 @@ browser.jar: skin/classic/aero/browser/tabview/close.png (tabview/close.png) skin/classic/aero/browser/tabview/edit-light.png (tabview/edit-light.png) skin/classic/aero/browser/tabview/grain.png (tabview/grain.png) skin/classic/aero/browser/tabview/search.png (tabview/search.png) skin/classic/aero/browser/tabview/stack-expander.png (tabview/stack-expander.png) skin/classic/aero/browser/tabview/tabview.png (tabview/tabview.png) skin/classic/aero/browser/tabview/tabview-inverted.png (tabview/tabview-inverted.png) skin/classic/aero/browser/tabview/tabview.css (tabview/tabview.css) + skin/classic/aero/browser/devtools/common.css (devtools/common.css) skin/classic/aero/browser/devtools/arrows.png (devtools/arrows.png) skin/classic/aero/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/aero/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/aero/browser/devtools/gcli.css (devtools/gcli.css) skin/classic/aero/browser/devtools/toolbarbutton-close.png (devtools/toolbarbutton-close.png) skin/classic/aero/browser/devtools/webconsole.css (devtools/webconsole.css) skin/classic/aero/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css) skin/classic/aero/browser/devtools/webconsole.png (devtools/webconsole.png) @@ -289,17 +294,20 @@ browser.jar: skin/classic/aero/browser/devtools/breadcrumbs/rtl-middle-selected.png (devtools/breadcrumbs/rtl-middle-selected.png) skin/classic/aero/browser/devtools/breadcrumbs/rtl-middle.png (devtools/breadcrumbs/rtl-middle.png) skin/classic/aero/browser/devtools/breadcrumbs/rtl-start-pressed.png (devtools/breadcrumbs/rtl-start-pressed.png) skin/classic/aero/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png (devtools/breadcrumbs/rtl-start-selected-pressed.png) skin/classic/aero/browser/devtools/breadcrumbs/rtl-start.png (devtools/breadcrumbs/rtl-start.png) skin/classic/aero/browser/devtools/breadcrumbs/rtl-start-selected.png (devtools/breadcrumbs/rtl-start-selected.png) skin/classic/aero/browser/devtools/splitview.css (devtools/splitview.css) skin/classic/aero/browser/devtools/styleeditor.css (devtools/styleeditor.css) - skin/classic/aero/browser/devtools/eye-toggle.png (devtools/eye-toggle.png) + skin/classic/aero/browser/devtools/magnifying-glass.png (devtools/magnifying-glass.png) + skin/classic/aero/browser/devtools/itemToggle.png (devtools/itemToggle.png) + skin/classic/aero/browser/devtools/itemArrow-rtl.png (devtools/itemArrow-rtl.png) + skin/classic/aero/browser/devtools/itemArrow-ltr.png (devtools/itemArrow-ltr.png) #ifdef MOZ_SERVICES_SYNC skin/classic/aero/browser/sync-throbber.png skin/classic/aero/browser/sync-16.png skin/classic/aero/browser/sync-32.png skin/classic/aero/browser/sync-128.png skin/classic/aero/browser/sync-bg.png skin/classic/aero/browser/sync-desktopIcon.png skin/classic/aero/browser/sync-mobileIcon.png
--- a/build/automation.py.in +++ b/build/automation.py.in @@ -391,16 +391,17 @@ user_pref("camino.warn_when_closing", fa user_pref("urlclassifier.updateinterval", 172800); // Point the url-classifier to the local testing server for fast failures user_pref("browser.safebrowsing.provider.0.gethashURL", "http://%(server)s/safebrowsing-dummy/gethash"); user_pref("browser.safebrowsing.provider.0.keyURL", "http://%(server)s/safebrowsing-dummy/newkey"); user_pref("browser.safebrowsing.provider.0.updateURL", "http://%(server)s/safebrowsing-dummy/update"); // Point update checks to the local testing server for fast failures user_pref("extensions.update.url", "http://%(server)s/extensions-dummy/updateURL"); user_pref("extensions.blocklist.url", "http://%(server)s/extensions-dummy/blocklistURL"); +user_pref("extensions.hotfix.url", "http://%(server)s/extensions-dummy/hotfixURL"); // Make sure opening about:addons won't hit the network user_pref("extensions.webservice.discoverURL", "http://%(server)s/extensions-dummy/discoveryURL"); // Make sure AddonRepository won't hit the network user_pref("extensions.getAddons.maxResults", 0); user_pref("extensions.getAddons.get.url", "http://%(server)s/extensions-dummy/repositoryGetURL"); user_pref("extensions.getAddons.search.browseURL", "http://%(server)s/extensions-dummy/repositoryBrowseURL"); user_pref("extensions.getAddons.search.url", "http://%(server)s/extensions-dummy/repositorySearchURL"); """ % { "server" : self.webServer + ":" + str(self.httpPort) }
new file mode 100644 --- /dev/null +++ b/build/mobile/robocop/README @@ -0,0 +1,9 @@ +Robocop is a Mozilla project which uses Robotium to test Firefox on Android devices. + +Robotium is an open source tool licensed under the Apache 2.0 license and the original +source can be found here: +http://code.google.com/p/robotium/ + +We are including robotium-solo-3.0.jar as a binary and are not modifying it in anyway +from the original download found at: +http://code.google.com/p/robotium/
new file mode 100644 index 0000000000000000000000000000000000000000..3305251f61d61702e0f3dd61f67eb11e984ac587 GIT binary patch literal 49323 zc$}2GV~}o5w<TJ(ji;)1*|vAtwr$(CZQHhO+qUhhz56}Ur~97o#JzpL&WQPA#Tqjr zGjhZjGjq))F9iw)1N0xGoYj^e=)Vl;e?mq?S%6kTR+L`;KVeWnW&gk)K_X(^|9NWo zC(!;YOh!OfLR3UanNCLZNoIOVT8fr#0bYuhYIb_ANs(chdH=+bMsjwXMv7Jt3i7yE zH5r4tpTxZ*J4z8%N>Rx<hpGk*0E?2utcdQ7I;HsZ&l^c*C&~Upk&h2jB;UwdHA%K{ zduHAscVgyreS2RE1xKpJlTwC?_~F9mWfT@lT{<B7|Gl8H|F$5of5OPlhW`H>0sEf_ zO9Kx#1CRd$5cOYy2DZkIb{59}hXla?dxE2#p`EjZ%l~Okg#SO8PIlII|809t1Pik> z|JlB)f2PUu@1zSDIa|0|ID4o#TUa~M8Ce@RIi;vsxudOM`;vDVq?!C8{4EGKkB-EK zJ6Nc$*|7msSdk?Ul_nU)wUHAXFe96uBLk(`lCr3(S+iN0uWCi#z#a?(D_-&n0kX1d zr`XbhY4yePVv*O%pVhlJeQlalP5Hg<H0yoFy?63McXr+Jm(L5PKjmEtDr%k^<8GJ^ z`_p(GufK*cx$AgK5Wt5vc+)P#cL%pWL>N6J7VNDC#kx*h6&G5M<t6lv#YdNy7r(MY zcs)ceGGAugPVVm|vQZ|~j`$XK55z|dmzUB5Y2t1Uz#sL+Mu3_kE__-5!iU{=BAgbq zLyDXF7DmcT`<OuL^{0n;DEZY35aiE=IiwcwR+0Y91pIVTe1&2;%A3nYMG64}5cacR zzD2o=sMGP+7A2-w5*cf{xL2h!Q*IWQT1|0HJtG2PXbo_ALwD8;OX0VgLEJ-!OACa- zEuFY(w5XLd$%@R-SYpXsUh9{ZQKqdF<av+Hb5nQ%q$St7T&SW(QBBpXyH?k#UPd0b zQ#WikMO&#;8I??{XHHHSS?RfK!~2vDw_5ONQ(Iz`t0x*+!lYXpY(&j8o0?MTR@3%1 zG&gHcc(_d~1jJIQ+ew+IGD}FcyP02bv0GD26UkJEW14p}Z!FhpUNpTTlPlXZ<`r>S zr{eA6&fD6s;l=|0))CvyLU832$gSjb?j%drT&ym6E^e`qG_xjrwgoV#dYYl_lbJbl zZ}Adkcq2bJONS*il5R7@fS{Oel4XLamafe5jZk<J)>6{$V0YQ73EsUvwn=_t)&8dG zX$GsAg^ScM!uF6Q0$5-ejb)4omu#qXGg)aAv!N$?T{4V_T=4d&F<-BgrjWC`HD|gi z#hDgw%dd*IcHeA3V{2+ap}tUr22M`1F=t6~O*C!RlYFGm!c1~cTXR+DD<bPtOEZ^P zfvB03bqGpbtJ@(=W};9YS~t-W?_3xgW-w+U(?q&67Zr5a%h2-`k~d<IqKl2>t#)Q- z;}K@0i0^MBF6?OQMV4(ZGS4^@ts4}#BsXL=f>i4P3ka0wQ=;}GkH$)inr@9NBeY~_ zP!}-A4W|;KGw3B(s>ifY?S{BjsmEHWbVJI3)e6T}sRyJ`?S{1g15^@*pwZX#HF7=7 zRV&?9hkcQ>RI-OnHFl~GwbpU^ov36dc4e5nwTgM`4!PfJBkvBrsC@mGg1ePb$~l5C zK{%=o0ke?zLg@5|r0D#EaVp=!s{A8!AnzTKdQc~6?<tXbN8OQo`b~kI3V|bm1hIc3 zs}m$84KQj0>VuiFRUeq>?tgO>lnhxcA+%i?M4{Uvzt!7RzSpe3Mn<YV;25>dTK%5B z3Cy>hVyIEpTXzm@;Q;jCDSzYFG4s`!x~KE4D!FH+7U1ymUKdBwA)WK@$5D0aFhD=& z8NZlSt1$ds#36z;LJDEM*?Ix1syIN=9FLb)@0(%r+NrF?6@frimLh|FyTz@3>Rxv7 zB+Dv<?jkOF8;!bjtgR>2qH7^nMS5hBQuz!iAw8FY?>gr4F;kse_jDA`s@7K+Ymru< zj@G_z8H?TD{-&)qRPAk2WpEIFGlV@~P}J~|ft1qCG^zM=I>#{+$PTB~948uc&S>j= zB0~hPjn5LTQ=C3T82NWdoW);EGiR2KQ?b!b1)=OAlUO&?cs-u)N<(2Tw5GLd)eh|p zuq5%!$ZTGC(4zg&-s?<Viz87|K$E5FlSZ4fo)NmK)vw?EY*<vqUD9PMGktz>9OJo1 z)x_RY&{ad9lMgzLp<|mos)#uPmAJ+WroS~EB;Uh3RUPS~zPxCq$!#d(EvDJ3?BAqr z7jd;hie{ZqRnC<6J2uN92?ZU8r47sv8Z`s@h_+|ydI5H%Q-3*ZJ6!WVm)dcPK?pTE zwOf(C_Z8`sKUCzKT``ub!?v9&>1!y%<H^1@acb=2R0b5hD*MGnzC$<WigWk(q|W`o zoQLW&R<ik!LbAviUI_iBJKCRfiDWyzP)0H2ecStb;{1#wI4};~fgmRa3@1ilWNAU( z3x#Q6(A}w>a%v2AA_NX<MkNPTL;Z{<6jYz$*8CJSMv77T1FATDfqi*_6RfcIapam# zxLotKI@a$8rkCzXdo{FWst1abWLAn^z$m^*Il+Lt5W=N_m@sJ#{uyO^G}Z6?Ns9W! zdubx&B<N*j7_<_DO$|}GwSpKk@};hq^?mV*7dVA_<SZW0$Q~&8H$xj}dbDnWtezpO ziJK!Hy3C>XR1X(UX{=%2z^0ZINIO9&c1&wxFW@VO^*}^<bx!n7b?Qg=`(b+fUJL2v zJfRW$qiCX|QFoN8V~>NJ-4hR2bl#^Nfg%of99E_ic@K!C_QLImA5c3F>Iu9*l@LDZ z5&5XaK-Qm0q@%pWH>MCfk)qq9ed}&$8V)MJM0{S_)XAEXROB{#JHEl%yh*}gcN}DG z?PM}9(p)jn3U(92ue6VH4^oyV3?~v}5&dZRwZ8bQH8GshGX<&uCpAv(Rsw;(@$DnE zPe|SLG*EPikfV5ji$<A^BNX_XDno#OR|e4+R-~7FfL8{?TLHpblR3UV5WcZIexVW~ zaRBK0=p73_DN-DA@K^(;9LKGm4CWEoDTd=$J(5&DW3{5{7fiu!nCoPG@U;j^C+a4G zvnRt1Nn5}3Zrk*Who{vM^t60E0dt3Y7|3VOy55!BH#|EBLfTi_3!-*<E5VxNANX59 zzitJoWJkB(e#~l8`p79m*JUK&)ZR;WMH_)r7%TAePXKf8$r7YNZRBZ3h|>9z&a}?O z?Z8obn?+n4L*5KC`>Dtr0UB+J7w?o0UVy`auB?AR(6?tM-Z>KUIfK(FHd_?&F^}jj z>M`GJCoeGU9Alg80p%>@$1wL;TjOsZP$vfnGOm?FGaV5uw4nSp1Dq>wZZ$Rx?t7_{ z9QuAgeD3%{5fcuncT|LLZ!yo7#Y^-?9FtUKjuZf{bW;3Mp{{XCkFxTJr9dmpQpF*o zh|2a23uMC1gvRVz#|EE(;8E#Epzr$;O(^vanOX>C2$|ZA@z9j>E67FN{g(<`?;7A` z<+$Rsd&$bmC6^Gx&sUM@dn1I+eo<-f5PTy~Tk{QSP%$!PB3nz{<pYa;y9n+XvHP}k zY0z71{47!Z3aUdBt~Zo@uu{<aY{_|F#x<g^5W>&sqkH1(<SzP7>-Zbe<FClAU!&UJ ztkFMZ{zgz~+zX2B#B?@p+LjO6R7MpO>p>+5zfGcVZfNQnrc<{vC|mx5{%ft*uZx92 z2mu5Hi~s~g|8LcLPEIC{&L)okv&<_|`%ptwL;DjNEX{<VrA`#cs#rxRV8mYeTOnU@ z0I0^Hq8(wvKPV}KAp^-st7~KR_RH{XbELKJ1rU?%DI3TC`W$EJwKt6f0v1!oe}CG; z{?>c<b=z|%`~H>3{|D^;moF-k;C7e|$8hKnNbG*OznOh>Pdb`CfE+A)n39c~Hhuz| zP24)&&=s1E1bjT*bO<i4X<7-HA<BtI8CWK~iSQ(3H1}ClEHj65YzS#Sv>o#coaNWh z5L!L72K}i|bDq)ZS<iUW2>9s(P28C~&s>41Wcp;c;VEKPWadFVbLza(f(B(?(xZZe z6i#PiG|p$TE!BoHOHq}lbN+HsS`axoWvR9Od3V>H!c;Qn3uUI^s}l!ur`m9&0#}^9 zJ>rE#hLDc*!tsN(r6e1Igc8-wyOF1$Vw`yB;OcDY7EhHt5)r!mq_Oc(>LQKCQ$e-C zcxK0V%22DkwQ6QsVP)}*@KI@jIde~y8<qqgsTtE^^oV5&aKmCTTF;i}*;A<Up#h#6 zah}{1w34i*763<8!@*pGjz3QqPQbmyL64*r3xqO<?zFHiPxfIX1zU!x34-&s!hd(u zjB&Rh5`@h{LYe8v(N=gWJu&r{z3pS|Lu-oGZcF5mxmH4#pdT@yvh1Zg^>{xeQp1{Z zE`4bCZ^_!>K^wK1wCshbuQt1pXKWDlu&zo;c%ptE_Cl!(!eMynM5s%(v;=$#uZQ$v zd2BSTRP3;F_>~4RAtE(RA8S-fSC9jG10ExC4pdZle$<!<GX1^?K7E8cc3pUTu$o6V z*`bT}=|gBZ`$KAYn}fzMv3oMSkoEdZ^&avA-R{vtZ#d$8L3rFfV_2ypjfnSP?3ePe z*?YE-z6k)bDKaw|9$D=kJnXf0ztQ>)jFMYJ0)BBp0ADZi9Y!ze9b#`0uY!hxsCVcM zuz9Obdr0M5e=9+k-UtX9R#e!ay?~B<N9Jer<yWGHl|7N+BtFD}5cv+&t3XxV=I2<Z zugFW!Eb)>`(KZMx>K*mGtGA_b$vI^**^p>68tZY<pqj<@aFNp@xYWMlbI<76vB#OP zbeXEqY7l7=r*j}pQ9W^}8e*k=qJHg5-JtQIE?k1ZK5;(EM&;>5dHva77hCx~c2isK zSG^Dz5h+v1%F<CfiqVK8zY@`0Jt1MHXVAu2Kh7gH5QTshnjA-oourL3WvwJNM}cX4 zRjah-uuwtcKwNTpqp9z}`ZB_%(wE4Eo_8Itm+Cf_ak3+XV!XQ4nnoS1qBXlhyd7Gi z7SvfgnJB7|nYLWb!zh!Wub^qNFy;G?6BgKFv<-Ts6>~^W*_RbBH+_zqNpqs7#dwf5 zjEdD;udCanw9bi-z$X!U)pW^bJ?mhVV4&gjD3yCx<~AYj*Uzr<OG_kZq)+<xBNglU z5Pt5cgY#SUvOG2Yk&;8CP+1o+N>&{k9~7DEyqB>*7>8F5>9XyA={o6La&%g14;W>8 zpO4kFE+#1Y1vCYZcwo?<$%r+Z$(T=-sRZe!Upk(-(H2%Ww4&nwWnLUrssgTzxlie@ z=kEsHwAy$>(#=rdnzG-5`LMYVGe*<xdR>?i)0UMBcNZA6cCi1zW(?e`sGJvcNhPoY zo*=ss-HWmuOJpgA+ycsbPTI_u88wnKW>L1c*f4h3w6?%6^kC!w7mN)}2+$~OXz+KT zE{Ri2MaTy?!icE9(Ii2pNQB~8+^_};I-dF+cKyp9SkvobC%bCP<{%PoMdi1QTuar~ z(shHxGKTz_tnP@b*@kpNMPE!P$TzPy^`0cj4>*f%z}U`B@9{zH&(|6)3tm^msW>q0 zA0T+}>b-XVRa16&*!6m}B?d5@xTQ-llP3}!he((w7Li-HS0SQ=vU?U3abgPzUh!Zr zg*b9?3_0NQ5k5F226179KiUd^vXemBnohd%4<s@>Xp4Wa1Y9ISPg70IlV1^jof@AL zeKaP0+7-k!w~S@OeNghh?TnHw;y4?Bu_qmmyEvoS_xVN9=A|Oi=wD5GB@yxBtklc4 zTSys1#T=GDB&IU*hyW@n5T@ULk)2b{%i{h7u_EmG{j1v~fvgJnfdc^<!T|x%{X1?W zWNu<)^}oy}M^#1*R|U(L?gI;2NCG-o5LTpy6nee^y#@tGig>wMViN~UtI9Po+Sok3 zfEktVQcS1)3A5hCfPKe3Hbx9HmrlFm^&N8igSh&xhdFpYSWsp*qvOe!Z|<x2ZT9=& zuC5Q5Bg#$?ORyF-X#8oa1*!HZG#F73Dj&)JJtm~XnJ^f!0c#M2?{ZLP`!Fr8W5Wjj z5EVKv6zLSv0FA_Z6#g!lq8LXIOa!_F3Bq1WP$O`3zNOX*_bF4U(i~$b!+JtnMRmCb z-bG3wrqSfmWP~ZIv}jEgeXBZi^03w?k+8ks65%bH;JSlEx??HY_FOjdK=pd$5sypE zJ7FM?ZA!SFyb4#dw^ehw8oWiFRKjkRreZ~8W$~kl{Fxhl$5b4UO{B9R=>{H$ztgMi z1X!{cF$w*n?kb|AmQra+Lw!+cxiumEjUm+5+EJPUsG%{26VsZ;0_jv(Wy4kvCG5mJ zT-`*NK5vR;hJ~F#^Kip>HW6~M#K6``*GQke_1~MHn#wFHo>^gSGELU$pHPOCXOI8w z)tMral)tau*^qr4I#3usYX9i(42Sng8Op~lJ+n|H8TwhwMOIg|x4?$Co0dvaTy@EI z@tMVAMk}>5nV7!JCpg2fEZe1&@%^_>)N9qJ^M=(sz`pIyC&@$2VlCaE8GN!fHI56I zZ!dL5z&G2n&lYplc_?3j+(Do!GNUMA5jyn7vav9CvcS=OK=|66W+^xC8hp0>h}t6# zZtN9y>^|{mz!b}SwXy=GAW)-8a<h9@Oz)L#7duvPRKlC?h(mT9YcxFA1REV`=HSd# za}?%wvfNMwgg0G1$zCoLTq}^cXf)+&J-#7=7W?f1d}#dXN;bq|PH{BtU2>G>)Yv-) z5)Sn1-Z&iZb=m;xu61A2A!JiZ>({7USA!6KjPvU~vDa?1Y0RU^j1WU>S;uW^96QdC z9&+Sb;_T>s)U<bRkNd4RV)F)g2KBb>p-8MJmv)8dMW%^GXuo)vY4wYG<ed|Z@MgHh zrSskN!4kmE596g((xQ~QG6(bdJGA}frk&j-Fq?GnI@Q2DPN1_;6Z}S3hFKEF@9%<Q z&E^~cTNh22s;_2mP1xr`2k9`R{CwrHn%LE#t5-i+_g?5ZVm?5(m(qM?>J5A+DE}zq z8IFEwNv83Bp@;l|S>5oPkqZSi?%+$Iy_abF+ZnI)3W{su0ji@{GErd-zU)5p9peJo zB3=DK7_XTxhOzUB#ce!uD-4x?z|F85;V&xKB@`b~hTJhU%-%%l`hn;*gJC$V4;FN^ z(loT@R4$3A?sEwd5;f7)mF{Za1u=#A8(@y>;3`O2><oq187WZSw=uTX;&1+6%yGD_ z@COxkP{J$(IFwFeRF`M#qO7{0EvR<_UhmH`JIu#;D83k5666uM*#nT%gh3T;G#15T zezD9ZXLxxBwC(^(g<0(&%~}E4F!l!w;J8DcpS@B5sxIX=*4?lD4X4i96&4GfLy5#0 zdEd6Gz9ibVS;xbpnPFlm)E5Bb)uf!~@E95Iu7Pe0S8S|Tx5duY!=I`Uw^;Wx2e>t; zEtly7h}!&L?s5vZO~DKyZV@*O2PfSgQcdu?8Uv}j(8UMVZd#X;bdkWBHVmHu-ySEW z9K?EH$T);?^1-N&C7}^YdvE7baH!wDz+YMfUhmI&WXHtu!wi!Yi|lq0L}?cJER#Bg zRP?aV(38yKf2CN=`36iOpOV8o{5eYA^j%5sJkrm2ruP!~?*y}r_-+k-1I2w8)x@5m zA+{|EoXVp2Ve)TlqhQ3cUKL~Vt5N;o|6yv(qvAY7H3$4oJ61tEyCCm!;goycBI4qo zae1Tf;y$WEv;Tf@P(a<n<VFSp>L&horQF)$|B><(by#<_H5Wdyuk@V-phY6+)U>oP z0}W{CAmrD;fnWG2sbHe8>;6G%RS7Khn<;MrG+i<{VT$asH!RRH4tV4)+v7gNqZOp~ z;Y#E&jIv8&i=z^nXE|iHizK$6k~(9@{BEXVAT`EtdAHdePPZLr4|z^=JM_ID7jq~J zF5YpnVdsYax-g3ZpM`LK#6xMu?^@V@WJCMX4hW3j8{za8&Iw$Y&I`N0lVtTu(p)}q ze00j}=J~Il>7OG-_u%H+oIlxo$bavxTzEbEVEgXxeDfsOe^<qp@Wai=IeVu3kqIT3 zx<}3U<A&`^H8dxDI0yQiN%Mi2<16qNJOA(Ed7sNC!KYqM=Xn~R;$QE&^Jl;3PU#;% z(jI}n!~>a}LZa_qI*S?Uc)RE-`zJ8rMu;5iumtsT9N%14fb!#CS6Jt1f-0BR_i!<0 zm(I*QBTe_mRM?fEfW$KT{-zU+A}884aCce%v&j5<sJyTnkKS2WcLRUSiP5!jY2l-h z!fTP3G%)uH*)MnO=tC=!suP^Ld5+2Amb+aKk_HoUrSc#1NB2g`oatv)7j#F}QajM4 z=u~SmJ#kZ*ucV8@31yFMrZCs^5aqrMBTH*J6UfY1vaqnkA(;tjIXbHsmXpSvjX)KE z`J~y>M(NMdHxlM}nd64D=IUzS%O+hIHf#^ZvcBfJ?x8dS0$Ym#of?3FImCEi(o}dS z(ccH0I>$`&XEp0OryYc-*?W@(Qe<dd#oYYKFvE|+0^N9JvQ5|Jcf+J^L~HC#*BhyS z6kA+=DCPRX>c;9yug@30^gK?f#z?e_+Jbbt8|H8tgJmjSIT4!eB@=8s>UHBM(}W<S zS>$S(&(680_4wrlGpr1$04`g^DsD}*%KGrL=<`j;qYc>IO{o4RlAe!vEf*a18>lYr z2EG!HmC5w%;qSH#DUz<GQW6oi6zMy;QyLF9vYrrMYCn~Ca|x{qBdTR)MZw$Ie%jIu zgGUj!>-d}vG-bJQ9%hwkjgW&Ix3Xyg$Q5t)Kd$?BSlG)+c#|a6z%)lX;oTm9-iAG& zNYl(SPx-`_3Sw%*)+zRgc0-Wb$`rwy4e7mhMPG`Q(r*QMl&iwDD8+V#y^|CR*Ni!7 zr>PpQ@?(glbvaJ(O9JD{c3d(QfaMUT0k8fG+GmDyftE~F9l`2!Mt+&Tn^dWp-0bvO zifa;8>ShRS15o#UM9Kx@L9a&a7x%PuLybNH!%C_KZPb(mF9iVzIJr~$pb{B+bweuS zinO?(b($1LBh}v1i0wi@@@hg#aE-IF6h+9;NvmB`k6KpSEu-7pZCB&3cSqAatP5Om zB5q{Su1Ukb0b}4UGvOnL5Hz<X{4dnzN;Dl54RRV$rkvbgU9N+Jv>n=x?K_jOv6pmm z(FX&Hj@5K+`kz$AocQ{hd<&nc&P;KR@@$eY|H!9!ZZpIl^8~O{-BIdME9K?2<IOV( z%49V4s_k&|IZItN_UzbdOvL*#hD_stuIg_5<^)ESx*oej)B{VVWV@yjaRn`Lr6f*k zO*WDHF3TlgX_JzpG;a0VJZs+pW+8wjSIJnS>&as1q)a)(ha3y;^t8e)TUVurT5Gyw z8ZQ-S$v)DdD4emppSr;2;+*lEVaH&eQ4%*f;Q(sKLO!t*o~dFjAMFKeS?mWw!x=3e zSFMCK<8F-8YW~+wiNo~1r|rCZ%0SF^@q=Yh-4QEJ9qYTNF65bv(#3;H1(pOUbAog$ z(ghnahXKTr>A<x{wL{au)dg}X-al1cXCo+CY?-v)@T6F^bn(2Ms6C&^^k}c>i{mul zc9zVEHwI@<|2_u5?j8iU_9Pi}TLQVT67kpAqcmMsY+tVhef4x&SDD65=|on+x@ds? zfh>qUDm#mD{^z-i=$akwlY`gx9)s~G6GQAkfO1bVO_`0jg*@=7r+t0Drd#m{Bd879 zODBSt+kDfMf(`(sB&>aO10g$+1JUNFeZ&TOc0>!&<`g!X195lC3$ZupB~k~;a?8Xq z@D*&<Hvsw07G!r81VL~(1hF@8H~$_!;P!|glLX=BG`WwjFw1fdeH((HcKWzlm~xx& zYNsmrjV5tOpCy4P26ubpi)~MajjWPC<4v-KD-cNa<k>VLEoW5B>apE?(XQ#Fd}IVs zhE1M=kbwN41c)-N>`z`Du)uDhjtZEaU&2Ae@x~-Dt&D`z2=P5(_o^7+oW*?x_#m9Q zW=LmVue-7*RY@5`qp!F1iv-0z#RuGig}FaldJ&eh-FENnh|Qq2z6!4_XlbU;u)DyY zIY_q^H(g3oAxH`>8k8(8x(DFa%xzb60s#ISw}Oj;g0vC0n=53zGtRUN-xfHsU@Ufp zN8_5mEo-efk_5Xjax^p3A69G6sdN~<FB<~_0V?3#w-lK_f=YG>VQcbiZq*i2e0Hb$ z@wv*vMC5MuB1x4bbQV3TdW>h~*1tR>tQlAKQf3jT+zJLVV<avLm7hr9jas1wR+5ZU zIFuyUheKcD7a9HQWb-h<G%S}YM`YU4hqmT(Z*iOP(3MwR_9FudA75>OIi>*tu4cRU zuD0Y*I4o9_r;bn&OJl<1c}+^Wv5TgRHSLqIV9F_7d$HEDxBI85R#I+w+7Yho`kX!a z%^B2FZ{Y<KP3Q5SNguMLcmu(|>_mH(lY^zjOW{i{SvuB|WMRoexZu@Nto+I>P^Ml= z>LoK&l9(YI$7Wim9jNUJpq;gMk!Y{>E4FK)EmJg}=$NZY_%p7U79LC$OIff&s(XG? zPP_Uv%w1DvB!ZYzvL{MiNu>A{r5*LeBy!s@*Pypg=(-Gu$tH4hsku1GF%I$csBFki z!UC##nYLblq<+f9ORqU(n#l+R84LopHd21NE3+$??$uJBRoL3h4!p9%nhT><O`fft zgh1rYReP%lSV1^FMfe8me*aD*t&uiUtj$}I)jgPOTXK#qL|<rSiqO8rsg#004};c% zNwihV1x83qW`?YLF}bTz8fa-;lO$%(Zef>kap<7BR|-a0Buw0+6<Q2OS>nD|4fsoV zAuJG9jIAQqTzDDLtIWHQQb~@Z^dgLSRZGzCWjg4ELHw!QeYWhCYwAxYk9_1X-7Ss3 zc)yLoEd_v8iB2R}?J2ZO?rx}LEjo@`iA&^PWsuagUZDUtG`OPxH!|3xxM-;NOQte9 zn`r-`nZYW_kgLKAJyxS(VyGphp9u?*D$h(^1ZaxEmS<ord1}hC%Y*Jf^>UQMFAL&c z*jAgjxD*(4iv3h}%6tT(lkS$wC%+FAQ9MMeDIB8a6%JGTRtqp+uD?@(=YtpL6=`Ta zwC%RF&z@;?PCLa`9^#nS2|*gp$um^PD6|lPuobA)U>D6psf-2{;M}k9!FNOzJeX$Q ztZ#{@V7UpVslq7Yt}N2-pBH1@gkrw>x4~|=En;lK)&@7a&^K>_$oM7gMz9)sO<bya zV*aEycBbsYSAsaUE%-d+tK$V{qvm_B8`1u-<phsmEWv!@$pcpl5ZG$Xv<0eF^O0hB zncS~=Tz%(GS)-%cOkEB$rA@Ux17;pd<Xq{Ua@DFe-YI6#)@YP-p`kruPjlfy;`scr z)uP=NO$RwepN2!6;=!bJFmFNZp$A?G=eY!VAq!%DRZAh?S|Q(ig1NH>dcpSR08QJ0 zPAmDlBK!^ekKT!wJK$A<L9L0NHCg*R%C(*{?YCUVZR%w&!nL5Cy*j{62m&I7*jK>> zcS;c`j4~oeekV3hBNI~9oBOEwAC7kyRzCueC;SqLoSCy*g8VlDCDlcI=i(j&i$asa zKO!)p7~(YEc?(CopY?9h7^`s$g{B0fR+&Erb!896HFw9+(r@sZ>sKRDdOctm*`*o{ zoSWG|fhYp<=)9s)b<$H|^=n@RCwEIUpTG2-VI)2wffmAmkNAa|_~62SkiWl?{a+PK z1`M>=*8+o$0^|_|R6`1_5oZf;;=h4YKG_9*arkuL%6*}d3Akz0cGv3V)IIdNJz>7K zeBFV066a|fJnP0_`{<C5l~<w{7LgaZg+R(Q=So9h@r&x=ORRK4QStFRo+~|fBGm%a zk@72hh@}34G|3tMvGDeQ8Q=`6e5UNb#x}m9K>I;k=9AL8$Y%QSEY~~h9~X+!Uk*#j zkY8{SgWYxwa}<Nk8C`>!M;r=im3T8~xu<u^j}yzcyu+dm6TmA#H$?h%tTGxoi=!fN zlsFruEb`4WO0WM%WV-J+t8>8Vg2?%I;vyr+2WxCBN~B4x=@ei_I8Q9Q)1IG$G}{c| z)2>7~vvmE$@<mRehP`He<6i}G`qM<oB}zR;f#II5m|kA}wkprNtoy>?B4cbGZDnwy zVQJ`2Ot)-VdPa$Z2<4jP1ERUl@oT<Uw$##xfLzGb>L(7B&pB56^ScsuyjsPm`IKpI zd0tRm>v2Z68`THB*8>~FC&qMf&0*0Sw5iVjZfpOWY&O?UA-Puw?^y>e@@_zHFD%X1 zKll$J(Fd{r_t^8;GwLVU51RRV#-mvsSCh4$r8+wJS`pBt!SYqy;+V4VY&##{k?3DI z5(y?Si(vdA7(^D&X^BwFYVS13P#odI9V%>fU+RV;MF+%UBF>N2Pp4+KTeaJl<@uKu zUH6I)ps^MQ#G!-$r)EBU^>>Dk?yTZkw$Y%2{G&(N0zlf8fghGYuR*jepy(aTCLZSj zZU*jZZgCWb>(_IWGiq%+LD9zR6j}2hPi<VnzvCt3L!00<P*$*(KIIO?&b_N%nHc^G zLgH+BqP%r__4TXNdTG(~V%iQf0&40u_X?U0xwfK7^`ybW))nxv3$636^5y2VM$JOM z*#zA-UC#?M8;xq@WARc7V8nu}p>KwfYL#7E1p7HHxfvWUN*2kw01E|LqbE|x&lJl5 zkz1r5;J<%iGJeP==Se#;4y^P?ZPA-Udz!O+mS=n??fq|0e&y)r+@48##+xlddSLh@ zSDjPVmY%t@=^W#HGOaC6X^Yi8Y3B|Z?Dju>0MRR&dm>S+#~}P>C@yNfR>FdL1SE@O zR1Nn!u$B>*5ft(RvjqkQqYVD`85G5$DBBLiX}CfvCucZQS@uF7{O(Tsll%t`Bh-WW zhx2t_|3Fi@R}N%EPOuo*;&oc75-3lAwOW4V0COMS|EL9Gzg|gy{TD;C0tHevCXnZl zE^vO@5#Pk&XgmM4ThXaoQE5%0=_I(`mjz4+D-EzFmn^6rNJH9SFRbyfvF!}h4mScV zvFaX!Xb$l*`wa#i1CF-7xe^d)<sC*TFBVSeaG0eqha{h_1S_COL>p0$RX$m5!PT}H zbXz#gowekhtMT1a-xv?xfq7@_>H@eoA$Om{CxU%(&Lc@nrj>a0PRYUC(eOrWS<;EX z{%qf^t+qQf>6~6g#{=GM2`@Yj(M9r*>TF)kUeyOhAr6GuDE?5%A!TWD_loA2??AD& z*(u(%&U;nI1B3cHYoH7rVRnn-H|VKK+3Iw<zCN(F8#M^aE$Pbfy=>+{%`G;Vt=d;c z?JIK*b3-uq*B0lS=p(lL+=5w-k6j?2V<@=M6Yrwh4eyaFy>ALg1T?S8{0^PCUkM#= z>-bs9_#9_^Z73zk1u^;i;<woN*@k;=r+=96cA0gS%$NSoQ?uMJvYRzuVBvLszi5PU z3D<yH<oz(#{(Cloy5D<Yh2ew$L?(?=Tb_f@QZzS)Ln6<%3{F}66<J7oTB<!k&AzYZ zh?oT)K@mrp1tg+8q?tKCVy6wYvI{)-Ar@KkjaWf3j5``B_8qt(HyXY-N1Lr++x?pT zD%UgfVyQ*#nN2NyJF*|J6DHcrVIA<lUc=;?B61~x00C8k0Rb`nJJ&G676#UKX8*NQ zPiaaPRRQY{0-ounVh5V0u<&oRO%OaZP*HIiw5)YBZGV+1OD^6)!X-{qQ^_H(b{4v5 zXk0e3z)^6-{Yml%<mJC`m<}crBxm1kcYWSxd3Sxic%bb;9~^~PF$4YST%$+r5fL1= z2d;pmbf$R5c$4!@^lp{ofSwuNQ16XYc&D*VD-EyGlT}{I%TjVHCZw6r3n{V8l)eWk zxX?TMKcWIof5U3?hEb&TFlwP-;IcBNRIK~NTL<%bQ(b1~l`!b^tk^8Kx9TksG!jiL zv}8vfgBRsuH0x=<TRGH`Q;FMhAqO8U(gRXS0}G#Jt8pJ2h<#G%lqOXp^l$GW+(7+g zTCvuZ4r!3!>9T+=NJDR#{}TVv^bC$_r<&il^$9w}I=pJU*yyHEj_bjcJaenop$?!P zCq)wC37{i^lO|^f$`057dt`v0CN;;tWt!GDrJ^cM%!)m+&6u;~-Y&Hz#vZXK-NDok z51DF^l-rU0m>dzg-a8zCJy<od3fWpz;<Kd6nXpZro40fjnqTDKslEFEwqtnSkeMUa zMUSW&bXZ<m1S5@J*h4DOD+ZMi!Ih90(Ka_2Hf7J@E$$)W6?Bukg;lrxM8fOH5EAAK z3Fsk|E_$NM5lTMC0S;RbOKm{K`uGZvS2R(ls1U5222w0D@kQYibz^<QP9QdSb^#PT zwcn$E7N)L>)`;-dl)SXv#q&SW3X3T&AkHf-fIt%z+!1@gAS!(I`31+noks)AA<ytI z2P2b&`_V42FA1f1<%|MVO;dY4G&8`b4Kh?u2`xmnhj1_y27J1QgX}v&oFf5ZI6;Il zD^HwN!y`yCD^Vy7jN&xK_rZ^d3&BIlcU%%&A7X>Pw%`Aa;;(`ByglGRKsj(gK(zl3 z#l=jV|968zimHVhiW-)0D5(%xQAF@?A=!v3?k|#d=cM8WuqYA6R$$bUsGNS13@By? ztlyn?tIm5?e}DIFI#F%DX6O1^&Rr0k_gQ@HVuL^xEAVZ1yq)OexplnN`T2gp_ZxWA z@B3z7j8L4eJEqdkLAhf*$)@);0J};;iyvkCgVVrp#KHQE?{l{D%pHLPb3YI*IVto@ z#k<o$+aE>4YP`-s$2VLLM#5HIOH0G7f@urt{syK}s(VmBbI2G%ptPbe87a?YPWDb1 zDlk^14qhv^6sZg)Wi7Lkq^q`)$}C8RIVenB8(dJ0phWO75vd(EA?~8O0+6+-)z2T3 zKjcOhV@WgB_Z$~aOa_;tt1y~!Sij$`9C$t5)%w8D*xL^`XHOUKSCl_$SJabSSy)iY zp}8qeNq&G!sI7O%I%8EyKGY8KQR1que@9v~+;K#IBv~nHz?_k~kOHQpMh=yU;<wSv zuo;JbW&EM}Vy_uV;i1f^aa>;^oE)eq=lp<yq#H1Jm$j?9%ECu%gOx2?Qer0A$x>8R zo}joGc6R2%yEq(|4jW3fC;Cl*FvfjkL0Al@qo7vGGy_E~8Cwrkc0w)6D=W4EHu}X+ z!*&7$8CTLKJc1;PM3h*-XpRT*&>-!iUIMeW?Cl~zNks;u9lCEgO5q_yJ6YICr;;SO z@C!QOCvWxCWKj4-pWSGCDaHeJaH*!grK=a+ediaG4E$GHIYd_C(f+2jXX>I1orO=& z0_8Brx{9{A1t~AJ5-l>4kE)I=6S*)Cm`*U_mk5tPqzIs20AB<dLXv2*{Jx#2Ffz@f zo9Ixbd-TW!*=}D3-!8%(_b%KW^Uh(t2ONxOcT5GDU>_$A9+}{f_|PWKx3&1#$vS!c zj3qBT?g2VZPQ*LZ>bSbD5UYwW)r4T=Kq<1<q^9`v_32%E81p@GOpT~_l%1y+{Q>Wg zsFqkZ#x-qc!XW=*cB6!qQ)<Qdt*N2DCvxNyYJ0@gKzpgk^47R%2^Ftqfw#@a<)T?* zLf6mCg+$hb37BeczGwP34q<YHy2P5v%5%i!?%qai0IjBhqn6gwi_#Cw<GG^%^%QiA zwTt$S@%Y|Kzp5!@SA4}|isx7p2DEb?*sUy;%&tlWhuNVdCn*?SrN_NBm4$?tkF1u) zx)Y?3waTK><4Iz*sfnQzc4kVtt4PcQ^So?PRopRY=u&*&5{pw!7?*}>#SD3;^6#<~ z&!zgTLfVpNu6zzfNdsQ`ISFuA;Odm~O?dh%=SuU>68mQLWEU8v_-PqUdd6BhSLSNu zR{D_hoH}H;ru)K}gp-%HZBQGfsihd%BlnD2c2%*a72(<qifBP%t7Kh8|D0S&mR|ES zQ`G72MWmuSP=HJuqvntE<d7&@KWaBP9fvP!tNuCJ^*}_H{kOO?E=V&%5bv4ya0fw8 zu^qVufW$|j5Q5etn%KDaou^c1cAIgE&1uYfD}pOPqL5(<n``TW8q6=yXwMyf7PoY7 zS~rf;Z+!W#sU7DNJotiOb{lULdC@ib)i4KTbg0>D`1xC5Y1b%~*A|~gTX;|ZRnQgD z^O~5o9pl2B{Hh0eY}^G(cgzL~84}aM6OZ*-#Iu{1U+CD}6W_QC58yjC3w3v5bzW!i zOL?gFD&J`MW2n#1E6309TdkdbdoX`XX$a{8uQbk!otCh*BQ6!E`*mym$R@%K#iyAs zz<0Vo>IiEfDOf$ZktGT>oKVCH!a;jjLR(~T*d(`*Q$WKVFh<cRAxIubDHuy+t>3cH zZwb0oyk~lAIv$vFtxZO)Fu9A>Xncls@@~$Xm%58}(c;V?P5TEG{twoJ76-q{A)ro8 zxkFc>2&{TWcW9TnpojH3E9)I}HUbyUn=5wPysCy}Wd&rUPds(bD7?^Sb=90WS0VB* z)W!vAY#B5puEcXvS=sa^m(8X0AIN|8fxzUZW6FPgU?2M5{Ng0<X!0M;YX8#+VpOH< z(NxfQd6$yNgdh{+!3YI}SQxOOg1iICkb=Ps1$|A&?~zkxr-?7TJIg#h(@A_I1xq9` z4+mpX>H0+~w-pl26;g5CQt7lioTefj%`5~e&U$j;C~JtC#;?A1yYigodfrTYzrS|h zfO5w|C@k&EQC2u;(hxcT2~)5Nbo8PN5w#Sthv~_k@PIx4v_g)6BnZ#K^N|V)*`m4r zDTq&2tP2fpUSb~jhk<79wDeXCm{q|+N2XjWGn8EJgHKmqx&$Y)9bvirtrCH@oa{P- zvHi-zlo_&5kJFR0;3KWx8!lyL$0kAJspnicXA4z@dTTw+mKr-3*$T;`qE@4?9h~0q zl)MSlhcv_v>vS7R$F(EV;Lw?%R^renC)7c1E1BuXV%K>YttQH;rjuUx@-HRVTADwi zya`j3RF#d202JBYJxr%(<g2s*;?^YOCmfblUX&{}v&<QOLTXMMofed)ROSrvNax+A zpAe-div*pTV&04P+;Q{uap6<PqCs3ISe(IJZK1kFla|QL>CIT;?qBs8)VG2CDT~b% zVoSEW4>o3wJW^no9`Vjkx|-RoCab2589pc}5jR*23Q@FVm-2Rnz*;gqAvR>Lg)9Bo zs6ki^49137v}B?T`2`QqALi?uMw~OTSM1c&Gk=oJO?RHS;iEI%!HsZmR3+%vGb9ek zBR#OiGdZFhKq*nr>~)2zw+G`3#?nQ}N<}hJ(PAg4s_%$9xWtiJ6{qi@bE*o+$g`)h z8|JStvLCD+2PBewOgM)r4P2Kz5Tp(x&1ND3uVzSO#e;`YTaxWpr<!2k8(MS@ysA~# zL?YbWGJa%#IVQ_>?Lw0;k$)%CuG4lI{aAg!PBR&+X<4AuDUuVScTFCYn7w>dDk5%# zCrNt=a=?83<!vpQpB8HjMXZ?hH55~*Opz(+y{3LKv7&^JiCG(OiRiL|A{@MXeP^FP z^h!mJywefo*zJYm?Um6JJw~t-S|@aoA7}}|&lMuoY=G{<vS9BSy=SpQ0MEULTlg)3 z5>ZMLL0U`_K~_x?Ay&8{kq4Z4)SaLy+TCCXjvgl@w(?*AaxPzh1Ja^M0Xm10T$<ei zF)O&@Ob5)%)Ek9xh3DC$`#@^BdG%82>0^1!tE2UK_V%uGP7UXVd2rc)ZVmOCV%bN! z4mpUz=6czJJG3`wZN2ukBWk7YY26)TV`YO=UdgkkH`uM*9YP#)gM4|X_U6)kcHvn% zRy;%NoNSGcE4Iq0x|IauP^{D^l&kr^*ANHC*H7>+#Yl<WBT(v(@3<UAm2K$Zxq;@h zd^?5@w+}R%AB8ASzn8-Y_u!nqNTKL0w%d<Y`wKelk!SRRIwXrDZq6RK%^q1#;SWxl zJ!0JfWOr<yJ$B#Vpj~>u&m<y)1dWnAl$Od9i~_cGf=+e8tT?)LB~}S+wUPa+gv4hF z32(7U)}m32RL*_*I<#V>63oLNIn(B}nvw#a7Vc&#p0t~8@j=1wC>C3R6&SV}{in^+ zawX}@Ay2oZvvN2$_K?!pib?jJ(E&qnSMSJ9)=BuB1k&Z|i)?W-;g!>~zpJ8WK+Q-A z-xo}RvPIsW^u#lFaNcN=EjX&6J}F1a`6D1U7!w0o(?7JQFKn*|c&k@9S1x$u4|F{} za(?XRH=v(iNP%w5@8NuQi=Rd#AEdGOwM0P%d_Mtb1-F&X=}j06J@ug%BPdHz(YOpf z;lYMnqkz|^wrt~1|ID4BzaalAy4(*Ss=xjb-BXx<^ItH<|9twdCrnkH|7a54NfL$} z6bEC0S;o*RAoLclQh^btrT~Xu&-6$CVkKE)h@UQIMrCOIA^ZcP=Td`X)1|7G=Y6h3 z@VUOX=(?970Y?^fIrYQwmfbVQ=X59W=lv{g4=8&mP9b}^MK-&?5Wp8>2tB2sJqC|% z!C6<Xe$zig!8de9Wh=4}5)Ei{RKFVJvYk4BMRzMa9|&dHOUc(0eL(L`9b%{IRVknj z$0|Ld;z(JY>9)cCNY<q*OSNdCCN=2nv{FBf23etmQNU;oH0Cl(QQY!$k*h1c6liU+ z=nySQcC0Q;nSAes<L0qS59Kb~_dNU^xHbmRF`I=|)ujk8fmf<lmCPEPz04BP^juPv zrLVneC438DJha7*4Q%>5=Rmz)(;>Q$uz^|a!P{2!D?7d!W+1k#?L~)IWqC%Bs>?*n zD>0~6Czj!fU3g`VCQ&^VxGXc9nMkbxzRmN-S2p=dWCwXA8#AAVn!_|Iv4uKyMrVjI zywf(E_mnsHUV%!Q%4MYW#d6brJ7b|$Rq>8VT0pO8+c7Uuod*uvY<vl=;~GZGjrOC0 ztGEcvBHVi5)=}!@B~;DZuc7M1b6{wLCI@meVEWNKHY^9bNdMAyr1Wdj+O<=r)yc-? z3&>_<t)c4{TVxVu(v5TB85tw8^JuzTf!Bx=JE;YOcmAU?Fc;%DxR|$W0;2j+-RE+W zRO?K4jyD%Kq}r*<^I8~Rz3)P_N`q5i;7Qcx8yT5NdZ-fC>U<n9e2}};NNFe_ROOfz zD*ExZ#e)dvcA{ti6hAmH3AU5dSo0Q1&$5F;o3Z%pc)|i59A1mza{UW+tv&`XW2HQl zNRmn#9%B-x7xYU-P70WX<8fI;WQgund3#NM1QdSn2ogNWZj}rT;8SsNdfGbvU_qkW zmP5&L%&Mw->i;T^Ea25)d6QvvBE2#V-Wo!?W10|rvvs(I{<^iyt3@BdJGCpJ;{Y&V zE-JsJZFCJGVBPf&V5+rA56OV9Yv39MJ!s*6EkYnRM_|%#_E|c&X=$vnxtOhNzw`W! zE6mz6)4(OJRAG$Dl0A)KvY<70w&9IZql;2f^h^7$@d@QxsIqThotn%Sd#J#7!@?aD z)250f$vom&ar&aMB&PYumenAfe~SD=3s11l8&dmavaJ6DY5nzqZOpB`ODK-vO#Kl% z`FLF^IPpjh+4nF6!NUMK)*+UBUSiyKFsIaH9C4`29r0c@QS?DIkz)7-8xE2M{8lI% zGKrs1TPRpbyyif@-X~c66Iw?F<>ko!H=bGTuK>w>tb#)<!jUh0pKLzG6{xpFX9n?L zcHAQ13S4tsb0WNI0iWP=NjtN5&O$!3Xd-TqS>Q%cf_cw?S1FzkB%k*2>QbD>uXE<W zVsi6*1%KdZgKYPl^nQ{#V~Dv6+9~!Q>dspdtNGjm@l2<;$@jT%O84+3ZGg%>x2Gz( z?*6$jd=KIR=V-^>Ymwhye6Q(qdnMM>0)v2;_DHl^#xhd+DiV#^dp~6uvx}Xf%<LkF zj6IfFC1@;G2~y1Ty^-G`cYYI9@z0r-?lKEk#CIUlN;7b#psaoiYNz!iE72d8svK^0 zvS5~EWS5qu#6Jm`)!u%^p+>9#zwlcJJJh$7pNir!J<F%6T++WdeNS9Y-7+D#>ccv6 zd*F`<Pl^&g$frKLOXSRYgC^4+FM5y3RKw{bW7;7&l0J2EIJ#;$x=PQFDYHwh`!%)y zz03uD-H^Tm1_EjY1p;FHcNAC2$kEQ)+QgBB@jvBOalm%zH<Hg5hXc;`GA-IduwVdC z#M0_9++_fWqA*ZJjpH6il{2xKT4PSAH%MTffaLGPe#m=;aE&oiZU5CoGgC9O-CiGV zeqY}&g#3_ID(h|L(_Tiz=!z8i;UN_KgNB&Sm{9n*0`J)&O@J^LT$iFWRwZ8TXF{rv zAJG?R!aI2%dmhuV%!e1m>g*w<5Fuxh!ws}h6Y6;a|M3!Z-X|tS!tI4{te9`LP)<NZ zcs|TrapDBw(A6jU=bwSv9b0GYYT_MCxGTJh;jM>q@<OFuSjwi21z^N3o<!3eQre*$ zU^rPVN@Tnco>*{`SNge%)xxdg!UiHOb~H(HPXPE~3JZC)PBI?c2Pe59y$aH$dgTCa zLiR;(Olc7BHMe@$RerD)0-&0c0=FrkG6ocqFS=JPe|SIh={vqE;BPHEnt&h*jnbG= z2?h!aU5q49l!Qj4ZzZ<t)nA|Fn?4K%G|coli^NA4rC6QJRU+OADw;LcNT6eh<mEJG zImd<Sy7|5UnaW<-1z63q3AOH1!1Pv@(a2T?@tKW=llrdOF@G5^`#459<hws@qb!b^ zJ?a+2kh}n^5RWk3j#Ce|!3>lo#1$-zRJP*e0rA7fGh}L(!HGS0&GrD^BgXCGjctie zv~7lOAJD(DN3@~z@%kV3Wd2{Xhv|Q@XTf%f0gYEzun9dbl@S;h7mZ@RbPI$BBr}*S zo{B5pe8r8tg-flLmeiuk2V)Ti1<@NwFK8dn0go#NQ(r3CE9dIy=*a2k<?M_eC|BPO zoOIiv;B;_@31pl4i0={@AIu$VA9?6e`TSFP0((eREM35I<yU6Kfc)vg6vtIL&E3+q zQ)s1-rHSzz{wAde#HuO9i5OKCzp1$k3U{pNp*vY@ky7dMD4SZ6L$ZcVk!_-8jftdn z3Fc(Eciw@_5y;h_lKP!%=66WfU)WT5iyy8`u_l|S4W*NsV`PGF{~YE17M^q8!0GSX z7#Vx!i=;|aUgzp5{ZQtNN|A>e4oOhB-H^x}Tb;P7^M>5S3@gXitC20RDVe%cJP~t4 z&F`BN9jlL^$D${5(gisw*CXeTGz951zJgemE7(?v!!k$jju2-YJAXDUenl|$$?fs5 zQ#+WB%xCO0&1#2g9`)_4e{=iO%o*>dWIj_$oqoV;2IA-}`+qjT)oHr80wqr*5G9E@ zH>I6d<x7@Vv22$4<vn_?X9k6EJJEz}Ik_K@zZ1Yb<BXsb1lYBUCSV@9c-r;9{2^n* z(4K?3Idyjzq#?iOJ6yyT>sbHbuK0L>MAW-?U#E$0s~6cAW3xT-Y>1@ejy%KsSL(Qf zSa@@T{3ASIKtP=TSJV-<a5OP;wy?AP&pv%6D?1bgB;GU~b$qF*BGvL0O%d?Q>J~%k zU+|@fLV}Ud7)$RLjn(bO8!{NJrGF<EhjC&`^L`XYJE(EQagExurj2i>vpJc$-^S+X z_kgVn0Rhop3Ov7c1vCX1VbE~}dEkigNzaIp6<~-dn@jf@h4$~!g^bsn;eCv`*n%|M zY=(9k-tEoduqWYnu+4pZ9|Q8tw{JURH&(REj-sXQ^5OBO7BoAr)Kd>m{}d`?9q*iG zfkKe3`7Us5TQTx@ag!^ar)%ZrKl13MV+!p$bV3Xn4mHPs+RZa=uXP(O#2f~(?=dbv z#qjZ;W{%wCuHtl*?o^?j(xh2(aJ6l2vx=lhP;Q)p3cb^%6yR5t+QhbEr`G8!&^J?h zJ?|D{3u~Irof6NHl2FnE4k~SB67^(HZZ~%GxiEih4pD75bE|N_N`K-1MO8+*r&2WR zSfsMqMg`Y`({fT)NElE;XLqn7IutJ#CmN_{*a8!hZv$kx)11I6!LxDu1QOMT{0~a* zDM+_wTNibWvc9ry+pbZzZQHhO+qTV7wr$%QW$b^Qz2-h=%{UixM`UE=Wxsf`XSUYk z?LTyKn>@U_exuZCUw<{gQ#QzW(NlKPl_#MKfzFHPB2XCt4`bo_P^-WF;;Xrfha+P9 z`3UWQofB)ou1bV@>xCXLkI5cPLcX>&upAwjfzlI11@}o0Kui2}!?4v~epx&dr~8=I zD}<Mi#I8Dp%=sqP>CfDY-SnN}8W?i(88FV{LM(eieNd20m_g(d8e%VOv>OWC9ZMW( zjud;qXjs8qJ1@B@hI-dI^7es`GQ>MdQRow-{ebzOB2&FJkJ$bZnF{(J79amdq>_cP z$-gk#*e%GT_|nlPr#0R)ou)sUL_$lS+dn`x<|C6qIYi`;MCH+y7)n?q0W*K7#gfjL zvwU2|G39D823Rv5*f`40_{>Z?$<BV=KTf&<ktP$z-xEZJjZywny9gH;N`;FV3>AU$ zq2UcPBnnzVw_+Zt_Be=3wsn#PZ8+mBZZ^Hyo5NwYYK3yoy?-8o@Xxm|{?)Fk@~|Dn z)i?}bbGA`i1kASBEKWv(qK58Wo_tG5mK$%*YT8|J37uabXb6sO;lY4&cYOK<PkPm! znRb|Po>blE8+nFx8!g5hobtMl-Vv={JQ~%mZ=GAbk2PiMlKycoQJ!RN-#*DDg_f=w zgTqe;?otlms?v;Q-7rz_3H;5xTY5I{6~z^IraHS{)F75ooDDRfGMEd_pBGWXeJJ3f zaMC4ATG?eZ%YdD_hw~GJE@FyG*&tw%vT_j-h#Puf2&P=UUlEzr&Wh?lqD+#Yubx>Z zOKr4PD}<uz_?FQM$K|t#fjIriuVzXy3%9IyIHB^#BUhkAweU250XxwWQvih^2ZgJF z4qPBS8dB9B@U%PDDW#cx26}}Ij2_RIIBcI|JT__@|AWP(^uq-FZ9@a-xWnv+86zTK zK(Cio{JIuh361;5VeR{@);|uRwXpxoA*pu1O+T)icb-ge#O+D4M9@DDU;lp`k~RB_ zJ%BQP!CpNnx-GDL@EZI0;7=Oj1y76_RiwUw{ZEJ5p%@jCFhD??82@2N_FoSFJ0z>_ z;jO%k`mK91E&cEyC^$e8Oj7vEm`MTy6q{HI1vp?2G#-{<4LWIxm?t|UZ3ZdarbWfF zrB&66-GPu!W~nqv71*+cPDSf-!Lp@AwX06k3jL?%>&AyZ2`DN46U*0W)oF(JlzXx# z?)3ZP&Io8`-~;R8{tXz^zQ??mAQM~IsVJ2GfDE8FkjCl_ruX;2N_VSzAHjA$e_wTe zt2E)xl^)KDVgxtvN>;!=Ewt<2g&tglzjz;SiyHFw@c_FJe}w^N7iGF_=xNjN2^a8k z_=~=`%76}U$sUv#EA~L05N}`*3lH%WxBq46Y#x|pkFo#FhtYE@ioDx>A*u|eJjZlN zKEI6|Nwkp_O`;?^8J%BVzJ5d+YujQ`GTwZ;^cowL;u<<qvqqQ-SE9I0#1L~(<aa)S z-K8m`qPT^lnt%*NVmKKsGgkD|Gx%ml>eNt-Fc;AgZCNrT=}X4>cZ~&es$xCIlFe|? z2hrCD@mIgXO7XHu$+R?2dZVGL{jxh;B*hhT%$JR5r&nEqa{bv7aBIwb(souPrf8i$ zAUm^Vv6M8+EF^<rkrw*qUe5Bs`8p%_U1_!57TagR5(*tXY$~{c5&4!WabH|5n!1Fr ziW_MYO(N6qhNkkohm2Q|KZLn6NtK4oK%r<{JTB1N5Bq0hxInjw+<-KuJUqlFp;w#% zP2vfZJLX0@QM8VC&gO}$AwL~@%PUd!lPGo*rF~&VWM%@6(?}~`61%5Hm8^elB2M!I z*??JACk3#@^d8>He0zEel<~nWG5hVmD1`;))X0b2k9<`h3~e=x_m@IK!pph}bOV~| z>$>#;lZ&#QDkJ(SY)aYFV_Q~qKzHzJo%*TaZ2-+BBKBC?fQmZY{@rn+03}OOKt;9X z%d~k^9Afl|Aj3APCUO%Y8UMEZdq?4vcHCtuQbM>*-d%v)2UWr>5oIoU^I%*Al0#BX zSZ>du(+{cF6_Z@k5@)CKkIvWx`VQi#VjBiG#9&}<F{aB%z<5jY%`{fKyChjic2a47 z<BWoMBS-3*XWRRzNDocbBsq`W0fy6PdSkO|=-HsE8QWZBSIAiXvgyczs3Ys3?}@}I z;;6zM#yD~=UEw+C3hI7+v$?D+LiY4)<Xt0jNbQAWOo2NRFx%;qe!T}M8mZA;D6PVT zW5}vIn6djgn<K7j9-+O`2MN}4(tQFI*>IP8YhXxObCU71Mo~y#uVUJJnXcd|3|g0Z z8Ob9G-O!=O^&x<`VTV#G<k`6kQ|8vh-c>WhxUJv4;I2?%MFiLZ_jKO^_cUK)v_rkr zh*R}UJpzqBcmAHn_iQ-MnI{b2>%Kb{{f;PVnFKYbfz4pX>pn3yZ?B9?cZ8bDmn^eK z|En&qv&D?kU;a%6w{HKG%Qs-P=d~o3{f-(86&W-wmi;~z{m;rhwu32BMUsVBlE$d4 zcJ*Of;GJ9H8z|lCy;t|aFuwCAqMV%6HmTq$zsJ29u3x`i&udm}+kGs$-|9Wx_x`Y# z;a48lH>vD9d+q#us0-J3kQK_3%o|4OXu1@e%k?4Y5c~X-U^pVTOQ=JfP@3M5%^O8f z3bgC<V`psJNcD{rW-4Z=$krKy5#xO=0W1CWI`Z~lH)2h#^HA}Y=1(Z#`hb;jy+ns~ zoH*Kq$%LdZi<Y^cXnj5J?8In@zk$U-bkKRn!26iN{tCE@N34HVW5sDp;lPr4p(sKs z_;qHb-LPo-bQWxpf|ML}Eva^^(3q@&a$X?bMw)7*s+TlLJiIMfn0S{_t{dWu6J=L} zy}#*Xsi18*gA*U9DN!_=wUc+=tW+BBHhW_)4`^s>6zwMArC_kzae{7~wuWZ3k!CK9 zQEdWBhJvUvYRRoBh3PsSIh~V!85(YL${3F5M;ZUl8)OVV<%bzuwi8|MI$vefuOJ1w ziD{e!*~B@_;;N4OhT7aYY;Ss^Wrj(FadR3p?+!OXxL6FsJ@Y3xo5NO*M~H0axGM~J z6~l`tL)|kb<03{xR$l6XgZpq9>kl2?J2!bViC!g*odRofE3I^zwS`_AU-aS|ug>hO zE<BY3TIwCQJEfTiN7f^JOcr~A@>VTQS|p6>bGMPntW~NHpT+Fpo3)z5v&2LD`YaSq z2vRwJVE6Aq#CG5qv3zi<Wn%kX`r}$O79QLs!DBO@Us#MFQSzY#tm@IKH`z8)16b9l zc^5cPGANu#ok!ydb0ef;g7_&P-NDv2$*bkt(l-E{pi`VU^9OVmtH(?j>LoBQ@0%** z>Gw~M=lt?5rQF-hwmuiw9TR3?c%nMT5y*$IJzdo+OR8tok1e-@E$AA-Tgw$HXzIw$ zOqi12{ii2^sX<Lg`VCA^{mdF%F1{g|m;N6X{e~OOfgD#t&^}joLxfu+J0q6l6YI5P zL^X5a;)slt1tm`Amps+vFW?V)zd;4FUG$OJ46!$(8ZwaD<W0%p>~9^dhgG&Z5YZLB z;c!Zg1O75NAnj<!xuPU3;H4l8rzCd=TZJ`s4KZIP{mR8m<ip&nAUywPiTlqoADr-A zIGRl<GV8~-KV)eX<bGEy2j_S(H4A|(XXMc~-<J?&p|+~RB)qP~!+X&Bv^<>cS@9A# zI*I3g%7EHCTkcIa7lEwU60<oJ5rq%Vrl?B7#vA;UHTJiiBfhiWp5=owZs3U%yGN+J zatR#4?x`%hhq(MwF*ueE->kyaU4<bZP@9!Ht}8&PR_fqSX6G+2b02u(-D39V0<1Jc zI>T}iV6y>3P;v{SNQF#7OCMo#{sfNSll-FG^l2P*WwpywmGDw5mKKX*97rArGlp0r zq)Z^g=IE}AGln<9b0RvD6%y=jD#C<2iABob70+W+7yEIyisbli_dEf98IbK_^4-Mp zdOA)hq{Qi*so|N<n=L55J<3e_O~$BHMGZO+<xHJs5yf<e4N~Rtg2Qw!3pLSXP)e>) zY7`fcl5qvqMX*g+vHficeW|;#n7?LHsAQ=^CmFP^Xq2c`I@G3m)+JNYBV=T3JE^xF zn;7I(&iNuI?sYYW#D5*OhbtT#wJIOF(hT7W|D{un?6T-XD0<MP^1*k&OC4!hqcV-z zJkHk<#vdlx;1l)ECQe8acz0#rKO^86K(~$P0vaoAYkca_c#ktZ2P{w@4Brf02#~8n zVCN1?|5EI!Pub_H3Zjng$Q0tp`^6LXhl<q`V%`#Av8db?;3Q8>78bF1c7f13;SkfQ zHM6qJP^%UNrdl=dJIE?oNxV9OtwZG0Ni2(pFHRlT|1|#;B=1z!Jsm#)JON}`IXXVC zG<JV0WZfFS^f_*>Rt)ni&f(bM;0yHPj^y4eayfH-M6MR*wW9@O7I_&RBY_^NC@p+^ z@@$m49jWes%lBP-mOd}*j*Gev`)MQVX-RAS>TJ}z*u+&kg32^82RBH=55Uy)JgJXk zZ2R}0IhoISTtWL?%DrN1{c_L*&L=ygoXg|E;rrFa*ef*C-FR+wg+E}OU8qXct*xF# zt!>SNIn86RnR8nL8#~3(gTF^6XV*Z+GY$2CH#^{^$xV&$yw?7ya{5AVlKVkPF;7#I zBC#SkeZ$#^leWC}U~J_tfmoiYNVC&B;DRgDv=%X&F>oV{L9QS2qz*+&TZ^I9)l_PF zStP==MYH+l9irYoe%YU0Kcs6w=Kw#z4-!?o7F$>%Uyyc+E^axD*#iJoGm*?gqpZwA zWlN*Nqh9LX5CHZnSOSzru>pGi7gJm4gempTs-y!ZBQr1MgspL#iaxx=8#tW0Z~E)< zs3XtF5e8%EkidWBkvc>37mcYN?1x?L_80vByq5ossM-Vq0RlP&|4(~eCI*g1=KpV} zv_|<-aq&0GcWSG!U_7vh1E@$vW~vm$4j5v!auuo>=q2p8{ep7{1K}izMS|Ept-Wac zeHi?n5N9p`tWw0<Y)aa7*4K+}cYWK*_w(}^_cu5_*IYz1j_5H%so-EcG%hj~th6L$ zks&m@%GQ8Qit-Ibd(~cU;0Nrs%Ay4H>N?#<uZ|-Jh?c=wqWSWPmd5ClPiXEyrv@uv z)LAVCA=A_xe#M%fbDTl5ekioT*48d#GxR)_*B}ibmn^KW#s;g$F`#}>YF6VQmpQ#w zi#x?Mbxylh!-61=idm?kKsK@sws{<t5`*-TI?WKa6Id@@X71Ulz1mk!G6e)qd)v7M z^JOnMl0}|4B@eCeaLoXFRso`#(&rjoZI5FM)@m;yr1NTiFVk^{%A<d#-l(R-T<$Jx zbVhH=JUO}8WSqsZ1)t=jqFH7Wh>qRQ#hz+k6M5>u&d?|<OUC0QiGnGngM>PJz^Roh zvuY5CybvDi+~0z;zj<>Zg;yQX7-#`tb}uhL_raPe)Dpts#X?G7zJqjvK4IlajiSk= zP@jt*R05l2Il9*#M4+1&ve-|@Jn%b_5_7X0fb|(A6GQKdx8$PHNyd-l6mXQZb9Z*> zQ{0<Bmp)ZfRa9m`)aeylZl<|WQjk{E=(aibDa)L5;n;<h61P)LBRr8hPuCD-@_Nb3 zK&?<Xa+jyRYfybUFR6JT@Ul-rDsx=Ip6%&1JmH<)qFd{wiHz_Y@zl}kAyj(ExqA&Q zf9TfYHFs-?H+qlwB?}j2a8ZEOl0YYX;Gh8mG_4G`FAXN>!zt(o{8j7{TddJcNR{w( zMyKv+k8X2*uOqymhxjG!jy<!uCcDw+1v^(B;s}h+0J+{+?mt%c)FQg!Xh-!0W{uy# z+nluY4D|)!FQ{Y;Z}vRj@W|chgi^t7Y$O;WQay>$AJ$o})KZ>y9*4vfO<i!j{K|8W zK`8OSU@m4ky5J@6CM!X-vPY-sls?pA-y4g)pBsxpmsp&rN<MJ=Z~Z?=2s(SCf2!P8 ztpBvi{qODc-<wGt${j}q_ot`Fv?*hbWx8~`H9+2I{fcaxZBBJjQ(Oo*fMnP-Yr+4( z*ey|deJYrD0W?7f;T{w$4p^{4kiUfra=lskMu-5K0+PsmPX|;)WVq>jH*4IOeH~Dd z_txw4c+&I2@B8y8llwZm{Q|5$I3YC`yzSk-69#Axn6-U6fcf-5#<xwaABCvvaEgNW zx))&|+AXZ|enqnVJO6Hj^!z3tTX&aMC%HzyZ^fs4aLMNl()M8w(L3&Tb2O;qZL<|d zLni3}1o39y7A&Ow+2-92@sfJLw?)4npjh1(91P)8J}l(@VbJ>(4j*^0S>g^G_ZUO| zYMltbd%xf1o*3mG>6CXgxTt-3EAiS3AJg6+W%l~0!S~r0b^4m*&KHL-=`Ju3haoA( z;-Z$784IYC2vxylG@@u!!rUy07D3_7WodRNv3SC?pk+ppz=R@RVD|9^31UZ;!ioSb z1N>pNX>&=3EKwFz3FFi;$8$c>kVUh(wcc)|o#@-ZoX~{jO;LSvj!PUXm%Sn6T4*?K zek`0WV^ns&QWi}X7o3M6+CDEXg+~Yj!_?^_C=y+sX9-IzM152zt05)Yw#=MKcD4fP zOq?N6sny-N8HuGtb+fqt#fqC@*ld7|NVmW&<YVb5^}|LugtWI_ey-_>Jebm7)O4$$ z?))uUeQ99dg5i)tyz1N{RgR<bjzq<tfvAMUE2(&RyHZHaTV8T<s;?rUnV^t?^mwi5 z$xsQX5GC6-jc>aQ<dn6Lpr}|1UDvg|y{@?=Mf(yJjbpzw%7I=FVr#b<du&!27*vgC zrpX>o=+9AxSW*ZzTAnvxO;tV2ISMS8l21Fv?^ihPWdun_>Yqb4;?<Nyjwe-#b83;; zz=TzKQ^my2ZIm9Ap2r?^8WFpsd2&KRX_1bw&^AyI^?Y@bZH*mS+HW>J<H2)k>=Kb6 zc~4$@gB?8%cAlCu$}m=3UPScuAKd8sHLJ{wg$l$rBa_*+JpjTyg31`d`IdoQBr|+J z!xl?GV;Qos7d@4O3VHphZb8P5xt)o3ny^orQbXzomvv&Sh<Q1u*bSR}iqLv5UmTyU z0HA52p&c@?Y+^-caT6zjx8<uFAVc6lD_d&T$7AheiV$wX+pScLS-=GD-w8zESPtYH z6fcj&V=a~K5|duDiaJ+`&!~VrRY#@yJ<PraDWV;~3m&GLW!LrGoT<D3PLEQHn6O+B zC<t>d#sUzL(Nu48>2HI46J#8L0ud=nu^fswY?=NI=ceFJWa@*6Yo#uMtll$M(KJ<a z9-NiH(cEAi8*O;EJ}&!>lPl-=WtX8f#iK$}R3$&jU0`oH6D@bKFKxu}b;ew*Z;!-n z79Y0^Wz<J?Z(|DI;8-FfQS9CWJ0m)D|C+2WEmLBtR;N2%?}N9!Ve9T9<`m@+U7MTQ z5<1Cs`a?tglX`N=#x$P3QF@=N!ZvJ%${r9M<DM3+G)Gf}Oh2&}jYbu#MQh8nVV@Z- z!;$fR)x0mKrWkaDfLT_gGa$v}8=WWqS`nS+fW~NDv^mgyzf@}g6tq=)xm4mlucV}% zk;YjzSze5CW~1y_rq*Wq#PZkDD+&2Wdw|~f6X{RlofYPvemfIySp2jEQPB~DZlZlR zCf#8xBwzYNcz2x<{Cn~N4r*wVPfR=U*Qn?}2X;t1$@gx)^^NkK@-cLYeoWs1eiN_g z-?WF0pJD@u8NdI~F_JMu?8IjzwPwJmO-{w2lb$3v&?Omb2g!|3O-dR&+y9}-#cau9 z)+CydlJ}5FmabT#csgXyz{+@2r^FYJ*EUM6RF0X~BW_^Iz#T-J)3M&6Bl=!UY<s#U zX(w9td|>MwRkUykk2Xg|_YJsMLW1)3C?0f9fSzHOD3^+W2Mtw<C1dt9+XiZnlyYq1 z<w|F9jmVsByNDx8D$hui(~`DVEr6Nnon1lgkgfKV(ooW9ixH1-Gf~845?ylj8R|~e zB)SX=iLyX!C@FSo@>$hDx}tTpR|qhn0?S;k^f;`e-Ws4bty4V2R#wzO`5t&t*3#*8 zugEq`M3x#FDAJ8r;5h4Eu(pZXluI~~2pp>&ENo^)p}KT(-oD_}BC3#X^L=ND9}83{ z_*~#Q)&fs4W<RgFVDz<kE(Iu^NXI|7oksK<E;Y4e_X<o2?r^%?+W)osRMbpeB^}?9 z%vS9wcClg_*V&h}Ku5xHi>3=4_c-qPQn`hW>?(8eXMSFk5;&zC9Hd$`hJ%=*(-dy! z$=jd0exSStZG{V>nLJobi_)e9J8CTgmstb)EeK}k#8S0aBh6EB7(xD*+mf$rVJkq@ zv&`4*&*RUBd|1&7^Uz1eQxTW6Q^pF{yvQM%XBW6^`<VuQrayDD{k+PdeF)Xo;a%{+ zp?<-;gLpxx1BYPP-Zo=EqQmPA0?urq16Vf;c*G!6vLPp0A)E^2yjD8G(&C!G+hRmK zC5YBM?KiFpJp&`-VL6WBhy$kuYotx{K#La^Uh-ViJ&+_dA@wCMOT~k>8*wcBHkcUN zXz;+_W#6>joZ&zh-9K*ZTeV*wvE4^oa>_F}xLFZ$FzaW^pku1k<EjRYsvsKXtQz5$ z?I|-gBwjE2UHRtCEjB~zYlO`<!t@H9LsvKlrzlNM5d);Aw*?tlB+L6f9C6Nmc_wyA zVTN8sai)ye$AiLyq$_xWZ?W;axVe1;WO5XH`*V%uYr7=4g2%D`EWdtygf&8k)dNM) zdZ7tFcr>>qs!ok4k=Sxe?g-&h<PqJl<!WNeRz{Sp4l7#jmo(kmyM1BR-7Bjf&5Y(2 zO7O9+Gsaw@jZd}4bctf|JZ;JB8s2Ft;q)Dns8Qe$s!1=md|zbL)vw)dMJ&cp?PUn+ z^XO^Idwo3#k67|r`QuQ{>4?VBljzb8+_goYd$Vc0!H%a=fIrBTDr4N4*Nb%sc4+Fk zhpfd3=ms^<7$6-`hxZt2I>2VI3;?no0WzH8$tQ0lIqZmKXJTs1F!$@usf!)zr;Qdl zK7t2j7Tv06W)H6G?;Q++siualQO*uW!f<*L3z3vI%4=>@iLO~G=P_Ho#)~C6#z!VP z0EmWc1NPL#;>>+toK4{sSTl$06ny&ABe9e{duEYqyonSo3i@Y7*)6Iko``2vc~iac zmn6K=xlbbRzR36UtM+u)jPQ5w?dcRL>uq|}PCe15V(zSbRQwt_)vo76)vOEn{L*n; zzVO425$a5yU$X+;F$Lq;cbe{^Z_+@OHdIjUAfy`Iyiq9{*>fad#WaCk4gNIyFv&Q= zIUt*F0dqy_7I=VZm*iP^BIy_xcvRGTMLF7FYnPDS7VMN}63!;`c0AI8cc|)(Teo$k zDwJ#P1xsufYATEFtSPtffxmdrnGh75_(PsN!X>AORDa?WFL*^m_8g$=$j1tjUJ-JO z5j>#T<<~cZ%<Q>yMbKsu!%idK!S>^QnbtkA=tm&NyKROJ9ihD<68Dhyv2;brY*wWs zn@tSaQqGcG3*|H;bVI!)o>Pi1k+vk@KJ0Z1<szR<S9VmIUl0+KozEM$-W4(zAtF%| z*|h+qS6j+5{TS;o{3&NNs#&hR1LM!QoH)=hT5(2zb=&DFbslK~y@EG`3yL~L8Q<v} zLbyuvy!s{hO@={N*DxodIc0w9Q#%g&I6lhc-i?buM9&B28%md{=M%&zJLr2;rcT-d zxNi?5#7F;=!pv)oPACBCjgWb<uZQ8Vghq9XTcf&KLoONx`l{)DEQtH5EB9LVVxWjj zSsnGaLrW}Qm8>aVL2yLHy66tg*2F{)3dbs1-$A<%cxojN&8h>N@F%8sD-dHA1mm@z zY;@jenn+GjR@@xy&%b?@5~PPr5CH}P;spJV@9Y1Si~3jb8>6Hnhb(}?E7Yb#0h1g@ z1S&8`Wg>uvGADcpqpzsg7f#4{Z_>$~+<y(bZrlG&lqaDn<9!G5S`_V;s^WcDly%j? zY<9!@a+A}w+w1oRt&b}Q!Qc-8js{2u&|um>ju~;rq4G30SPnKdm>T66yatAq_>Uf> zJncq>8<b9{AXs3!r!kdBt!=)!yha!7wzq+ii>Vr5Fm8sb-k<M}ZwAZ!-3TN92sIrW zE^E}#G*Yj8@7&M1e<ro_;&&46EHzrUbeF-kycHjENF;mFro#NAzefFn^Ea-OI%Q&k zF{q^mL_kEX1PP)>R7Tj&otDJ3y3z*^?@>I{M^dxY9-M&#wM4iX_rX*Np=rxXqQvDr zS$at^*hI;n_EJ)eNS{J=_7&_!u=Zl-20|};RFV2&2LD|3C@O71nZcd5$x^%GO6NGN zlTyV;Z>Wr`{(h|A$eIIVupI<K2riWIAYWg9sSotT+L~)^06FxY-?&)o{7nl3njJc< zg?WE;sRR4MMXKU*hW5F9oM8#&e#UOFP5%3bR`zE(Xk(R&y~&yatI!cCz$5dAN9T~B zF(mLD`FE;j%9^01n3B|Vv0g>o4ipNdWumHA^K3$nTUwX?jU>9yjWs%Eo4JcY$FMcJ z#tXBfn#2+90FDT-RXUM#;$NOp2W-=9Q^vH5-k=oYOh@kGHNt+lahLcn&=2D33l$_z z+1{^;8wRFe>>-;4U+Vch>De23xI_LF(+PdTic`9qgckV$pQ*WtCqtm|$A9}Ln9#+w zgwa1Dqy8^NGW|=WmeT*zjtK=9^mnXsgs52nC-HX^&_x)XN}hxq^vbL?Vch082R}l8 zn}Ssth4Ay|pSZU!U%^z!%J4RuJ;}cH?m9i%e4*F-Rc+XWj&@_IJ}18<-#7;`IzW_4 zvo+WVzB&{cp@M8hcEb#t{ca!-!L^ItuZ71fo$8|zL#*I3E8H@Y;`MrY$R!j9#~+IX zZHyOGvfUXUaR95~LW3288mh<{esL4w=X;XZ#lL<~jzpQTv@MDvdh<(-igd~rl5&YG zNbQQ_5+9nk&Ur}RT0{kjMI9~imh3Nd9Q>E0IQQT&#oZt=KiY<!4VET52!^$sB%WP} zZ&AO6S%Z>D2rHKanJkHc0t|zQj3{FrQ*?^lr_wIKN5iRY7veJqDWTZ>(w~lTk3K|o z&P}ALT1eu#6?UMU(AXxd>ag7MARs2p-Pj0&nC+cW-w1&dTL?>((deKdhTPrqAS1@b zdd)o+5Sm~`rR2oLhb&Y(U9ZNuA5e&GZPz1P+}+t90>_E@j;)RR&1T~?{KMu{t}~w$ zx$2xL;gojQ!w&mas7CdJD1grMt)`3Rso0P*^p7MJuF1CpR-8`vTHKDLSk9AtKdMYr zjE-zu@ZYKL2^$5eC9?B+>ms)lBNSY6Rp>`<NjdgtS^6`I$T~C5$e3nR<^%S81s_Dy z9RlekIDLaMg4{ZC`Z!8+N?b7+Xhr$vIz~GkB(+k;e8eA!rjyKyb*CWF4<eF`AsSDu z(6EC9TZC_2&40v3H{_y@&p&Y1H3V~*cd4=pQqbIB+QzXc_Tb1YOcatsp5Fc~S&Cb` z;|Tqa*F%v1JFm?D@+u>@`5VC}Y8wNIy&d5_K~PFc6DiElJg$ZVMS(I=OI~1${n?Ps z(KX@v_nQbWaf0ea0e?P!<;7aDB-~dx>1?&xZnqC})A#-3rW??vJ0}E;oKsV3mMCVE zyXuHjwU)W2xrRM$Gv>*x#}<c_b8<L~&m?lFNnRDhJkt}MF-F7`H^yzRX+1eIhI&{* za?V6^!|>b#$o7lp=R=^L=N}EE?d1%dryk|e4Q><-GRNEn><Z)7!8r@roWJxYIV+4o z9aTaCB5#Tj@Ik(6Bx2pzO2+-GzvALNh#qeh=B8Yj{Ua|ZNE5fy%PR84y);E))RZF< zU{Tgh>G~2A79t=qQ$O+ePj#nMj;?*6hcw7qh@9W#;S+y%Cv^l)0H#ghNY}ln!d<9T zo^*}NxSHz?4#C)Llo{=cq9Xy=Z8jX`T6fmg23ZF8@TYSWrM3S3n9NshUPNQ%dWUnP z0gCKjnt6#y1(}go`VWdVY(Lyx@4LU2%Ao|Yw3C?XC0{&KL)jq)9Ug9gjw%E~%2Ma! z7=-GAxPvwGm*IS}j;w6GAWv*z84qh=4che#bWzVl8c78~a9A5%8)^-pUJ~?@A<E<0 zV<C0wyH<xB0f#WQKB4D&sF<i+e^?Hx1_-DrTm>@=17GN_kKgeOJNmebkYTG)xbXHF zJ(4WF1HGE5kS7H1KmRQ=;cMqa&+!i{;{VInAj`j4?f!ExBYdZ(;^CAf=P5*%s~7On zKtOk!y9-ETMUk!C_4aHgldkGG^8dz*9ufXQ#q%a=$b8+y-@`Y_?peu?u;?70o|*P# zew?1Vnbq6%16mte;TW->4R1tzv57Vs9-*QVRi<r6TcP2pmp7`H^H7gP&MjsHsbZEk z36%#|Y{?V-lop1S0@MbIPxf&q322e%KHff#!iF4)j~oL+EeBU|Z`1Sg?wxMql!~>u z5-dieT*`Y&#S?QEkt>WFC-1tMn$>(5k}e2^eB~el4H^kk+!I_ii9DyZ2sKKvH%|8n z<BH#Iu^&S@K`^pA6^S-rJaAwds{xZ0-6AbVg~|!l7{IC4)VLA;2DJ`TavkW7%g@id zuLmRvnur^=7c39M%oZ5ZPXpE16!SZ3zU4+#=f6qBxa#X~`UXRTBv5dr`yA{6tGLny z#s-W1LdiHhf)NHM{Nv_CLTUZ--H~^VE;OIPnXV?DDOAf=8yE46l!i2kCx6l`I+)x; zT^0w21rS0N7Kxd8eTYzQ=4kQDpf<)(qe?}9u9r%z%X;UVFbeFT7lShiZPLCUn`b+% zbQs(kq7d6wL}tE1KTSe&Ni_&q>|;3-WlLub@z@P)CxIou)bq^Q=iRpGG2WuBm)|j` zHK*?SpmR=p4WEEr<*2m@cH5_B&gKU$%yja*`?M-AaCui>?C%3+_zkm|Fv%W+H)jrZ zCcNF=vmMnZ8h6O#<XzkvqOptDgRw3Z-T?m-q4DCQeEC1`HDIX!Fg36A|4Gf4sOmUj zv7_(;4`hPjthOYrtwkIb1Mq7k3}1*zWypVZ5fY97*kV5BB4Dw#;I2GfTU_5@zSwgr z2Bo<dNBN$_Ogvkv17MTWlOfJ8E^@tMRXdS>y1x$Tf!yu{M^SD>>=Ad%$;vW6xO)F9 zg>epfm=MbYjkV$;Twk#7g{#1`BEN(<iVTorO~x2_Q|xHe)z=pZb>Csa9hcEK2CPCN z!BZ4=xAb=C$`gwcc9RV^#Mj_bV!;hwD^6RQ!h2i>w>556Z>E-;*;vgc4%nFDRvDP! zKNCA9-}N$tc=y$3;-F_&G6g@VZtJ(JBb7Fsv%SE2W!<ulG3zv1b}JmW${X!sCPD-n zm+s6eGZwR0FQB`@YV0knA+@ZAPTTWpa0z9HzxNV0^{i_*s4EvfdEyf=66K<_z{(2D zmzqojJyhw~3BRhoEi)fqK(3)p+xC|H`qi_ZJxl*_0P*@U5b@LJNJ+7UQc8UeBZIV= zYID6AddPDibpBrIgs1aVj$h9}m1}T7lWq{%P6bdvKk@B9A(y;*0NUjKh1=WyNOyK& z4qFo&+u$6bP&a33H4-WxM!2zlm?GpmWt2YHguyr94BJ%M5lxN7W<+5WH8aT>H#yBM zy)0gBo*9~BXFtk_lkx@um^CWb_lj0_L$x=9?W+V<9tEnV?2ChKn}Ny)DCJRY?w$Cy zcDtD`kq9wVxEh;uPn28~+e~z|+N3{NhZ@kmDOGl*e4drV6w-P-#%}i4t-q|EPB9>H zskK_APUANC=wo-!*mG)J(7tw9WnLiN+vXgERbf)B{3KZABjx4tt2sE&7gwqmvKvR< zyb+YD7|iv5r;GlYis#*A?-gcCfmuf%V-NGNL}u|6aQby&wqR55e1{U?e1_8Re1cN2 z%X0+Wk_HJzLnORTl<bA1Hr^?U$9lRy?j+O0XH1FbnIpdGl6MS>oCBNjCqeutR{jn^ z_Ze|#%hgoRfo&<|6%>KDO|rE3mvi34!h5zz<B>Fbp2iT9oua4FcHsax_b-%&!0dZ+ zHNy0+-~#$R7M6!UXhiyDM7TTA#$1^A8bP1YyDF-jU?<3}q&R^H--!mMo*;0Z2NK4( z-hG7L!eVXXH1d54o`W)C8zT0=2Qy<&u@2Xhdm7gn-7Sw#>L%VT&sUXvH>_I&S0-(5 zmhM<HBWLh+`kF6ctKLtL4M6YJTF=w^m-n&BD;9i(9+@*nj^5C1kuUzO^S@{HSeB-# zPJRIaiGuux0cj;`6BGOY6Oc}jv0MC&5V~uT&A|xwbx>3y5Bw!r2pI*FMns|vHcmk) zZb4j|<-Tlt<W4*a{tog=o9#tG0QU*xD>oaiVFZ~%G}Qlb)1B#KI`a56x@rf6SG1oW zJq>NW#V$6ze;5!Hw$|8SV>CKKSMd7&=1?a?kSEVOH_w8ouz+qr1p}mmM5XgHH=7te zPn4WnDNZ^I8RA(aR}be*02PIcIzH&k6Mvt85qwqc{3IXjgGh~hTAGqwNm;OtdC|a* zWOh50L0(9(LUm`zI~O52x}zMnaT%g0Yur6cD?6RSJ>ERIoT2n0<Diuz%$549U<EUx zZ2(5Z`QS}~=#V3agvtC5{)9xKbF-ag6=U1plQS0lF^tK(!y{ANlofiEx}!qCVWDNL zmU>fzS+nfgr`s>VFF!LPnrZbqaAHpBT6M9q29yBI2a}>Wth$;h7@fXI3qY`y#*w4; z7j-XOR0_GiS%#g>bGS>(8|IRB=_CwIeKVar$E?GiShvbI4GN~x0F~HHomqQ8R`t;0 zk0{@Gf=SQ^sMUyrI$-()+%)<Df8@F&dIe_$i+Sag$sL>X5MY+sn-c@CC;tgq<&}Gk z#@Xd;(un))`qp-BGKA%Yy5h1mZpq2Hxy9C~C()ku*Xfr0e~NKN7m?M)0Rn<D1OlS| zkHq{l{ckSAS`h9y!+-sn+!i#;QkJtwJM^(96KycrBW>0bX*SK4tjF1qM(k5(9t_T9 zw{o`pf1i<tAQ1opB?$e03C&>&ibIm}62>Da5)kGj$}&_O{p?&_?U>uCx*f>%dVjO9 zH*w#-OmurZnwoyawDJFl0C7lkO+c{M*B$r$y}DHP7Bbs?3Rv}ipw02wgy8ysW6hmk zck|gZnpHgH%<-9p@VNR|a@RHEzZ3Z76@bORv>xXzKjkYOlXrF{f}h-wR(`LP^ECyL zLe@9Q_0a)exlUhxFO~B(0l~ahS8<P>^R)s&UawYuUpb@u*suM}#p+wuwEK~t`W1lX zx3r$;EkFA$9rNex3V=^z=vOk5#YYpHv}Kpj?YFqT>r)^76@>LeV(~39{HMY_EAmIb z;1_B%w9G0`x&O&>3ysd?3M+0wGo|v8{JxMxi#8Q3)kAr@qzE6DF!gVX7QyCx)!;(Q zVdZ3bg-R=vCoNeKFw_)^UbdJ>Dyqr|4?s`4>@X~qsUoA)s_b0Lx^j-tuy%8cYhms5 zVvA;BhTJumPF2|muqDmZJembSSxdSl$=L>KLs%<vWi|C;gUOPnY{XGVOCTnx!lAJ? zM=(aIB4C*4x|woAQb#M~u(+nQFd>rFT+F7XmUZ5)skUWL-{P{|e7WUsXKR0%&C=)6 zj_~lga&v;p#<(Xgi81+d=a_g_MQcc;t<L3qOATx(s9}RX3tlu+x!q+PEPFOKM?1fL zJs|>KxTqiqV1BGtoQH*L3n2<t1S?bcGzHf2B_!};72@#AE8JDVbHir*TfFwr?njrX zMoMnO@cGzSs9<V*>Yoz<36OY(nc$M)lVB}LgAtwyZK|JbJC6zV2>f+F*DL?Ix8iP2 zF{1APUYbHV)(cY5CvPkdWURmIGX5=$2agxt7V1#Vgp-?V>{sjI$HK&tTyav!Y+>6o zuKh^M1O`yGrog}%x3BM<?iEk%;YT>|<>BXDcHKz{H|%#W72fWqMg*A3Hun=Pczs^i z<Y;+eFz{zqkRrtngY3Vy_RX2kfy^-`1<Y^nEUl2e?>BjX!8&eaa;><uvADDxfB@lS z)XvcIYGr;d{lW;Uru_zBdlW?nwAHxq)}=AcwYn<QVC2<aZtV#CMY`JAm|yG+!J2+8 z>}fHgUT(`*ywu#(^x{ZEvu<g2ac!#|lr&Sbf~c#84iUN+1*f*$q)`DOCI<K}5p!|j zz>b34%ae3FZb?m6sLkw#ZfO#M2!OxY6xi1rIlHSdY#^_(2Fpcm5Pby{*aVn|ZyXe` z_mT&HGt&n-^aBI3@v-Qkf-<4NO4i7SjO0tvviheYT1a~$=WuBvpCPd*k(OJoDdG<a z;p+Ku;6$}TDNYJ)0WFW@z<G!H<Piy|!wMvHVh2tjAHaYj4jZh@!uh`bR(YD(91P96 zC2w{VNO-npyfgS%$P}kep`iWW-Yk(mXyu5i>r4v4rv_do#EC1*RJ!fs@w`akg?O-$ zsKT%-#?i-QF#)M(5z)?2Y%P|*QSIni=aBA6T<Ah#|0Ylj|8CZ)G48%`XF<W!=KK@K zllX^D(nqQ&;eF{(MEOLh!wzg5To&GLM;GsJDFV2BJa_;EaZ&gf8)LaV@Drk7D`r#! zJ{#5Ym;30Jxck}OKaV>^9$&J=R%;s}J<1z@nJhH2Cj%Zr$!o3~os|h8R(-B<a@Ac~ z76w0cpu$^LF+vmaN1{)r7>CEZVGdPl`;Xw?fmxeH1}KW8LYiemU;dsk=n#lN2n?Ex z>{2p^4(OCeEiMfXS=MD~1x*M+hea>Iqrjs%k1S)o^gexd{n*tiGA0fVwCobMiuEPf z=sgt9jQ06(sZ;83qCz7xmZYeKT}@u0xvj9Tx+tTIdASn_1{@q@V>~J|IV|$w0Xrv2 z$Z6_4#q<*y_l_EeU>(Z6)O0jQh;gnUyGZ_Tl_vvf0+68Q@DPx}SEqxaVnZ$>6WzN$ z@p^td90a9CHsV~LY!;MD$eWkP>O%f>RqZ75G8!gSTX;CJLI`f6`&P&i7&+P=Dn!Pi zDOxWgTA>7t3YAGAt!MpW&bdG69*@=C%+VhD4B<s-DqX(33C!7~*1X>ZZ_pljt>W$s z>-5+k_x&%5G|~s^H|5boBn@Y$_@dNWIZ?xd_joz<xvda`Mc?lBYc`^D^~0iW3hc>2 zcIb&D8ZEwyVvJTeu`XamT4Tas-D)r5;b<;RMTp3>%z{VqehRawf$96|xDTxw51FP+ zU8&SUDCnaL>9f3lw}x#s2AhxCXAB^ekfqntic+}W*+L**Ln%3_w17bh!WX~2VODWC z<GmAMHA?Zm8DxwzGkx2t2e^YPh(#sS@Wu)1`C0s%a&IlJq6-qi=fT`FHoGDSlU$pE z^Fn{uYNvMfW~axv5ny2q9l@JLrPFJ46(#I5+oz5Yn}w^=+ZkjaM?r{b5)~z{y-qC| z=otH@%boLinYFnDufToOQ1XTx@I4sL4|`K(@+RCM9N+F>{EQE}_tGK2yGDGq%T8n@ zy%E$xa#Ri`*n7*J-stW;06^gkAB5sCrYc=7vV=7$<>LvUbXf)bl#=ma2~=;dG^G-G z6BI0spxLnCW2H`Lxi^gmdVCz9C_-wMa_D>RYt4=0yZ>Z3XEPCLQpqaHF?xv^Z(KyY z8&wPFZVMIs$_~3M4EWNPihjCRIC2q$u5;j(vGr)UUs@zD6<~*6Fz`p!{Ji+xO%c+< zTBVaZLMh<2qSl%C5CYUghDlht{f1CUSO;OQaYeBBek#{T1+l4GpILfl*;@qQx#rMD zyoR!}T?i&&jm-T_IpbQsu#{jJjOjx&DzKEv{+%f@acm15_%4mHc0e-*>Fc;4Rg{$R zgcLyMI<{r8jQyLI#lL_%12q!hBJmKxE6k{A%@nmZZcq}hlMUJwEL2U3X}JE*kzd|~ zK&?a(6)coORxm}({i~HmsGcN&xd}}J!7wM8GF4(<dEQZ2*wP0g47BoCNpKed0FYkr zM}rEZk`~OMlOfN>1dibR&2XI9tJsQFG}r=*nmoo~tbwFB@y9UP**KI!!Qr<BmwJbm zJ(6jYdG>%rzctdpIN{v>*toPlQY=jgJY4$`G(QvvB`rZaw1w_i6%|o#_W2b?8y2@U zMG1IPeL=ST-7mP|Vn+5lbp{5sP{WnA^;t<F#`XQH)ArNi46+yG#Y{Xmh_F}P6<WWu zB3d;D9(zxOwy@kDWwdneiCl5V%^dpH{BiPT!z_$up=P9u`%?#v@(O%Tv->Vk?IgFb zfq;TJLhU4<XAg7fRR%A*LA8Rl+@&ILJ$BQ$ul~P;T(=ViN+%*i<NkJy8Q?rX@K_As z@CRhPi&D@aH-TLaGFe+X2oH;%fLGA1*s5z|+x77JS^uoP6KTkjOJX9PMgKv2h@dx2 zy>EnNI1oNS-gvmAb}Hhs2KW|q8)JIfeh*;&ie(RvBM~ab!^Wtu$6k+Yn?3wycWH)g z&zB=Jf@!6NLLtYfFXpa5x?6C|5($xOnf7j9TH9#L1T*1=X;1dmTJ&@3Ql997eUJEV zUOIfpgaQ$OamV=TPS#7ZO-e-g+2=1eP*(m-3!>|vhjCXJs#K}&AYx$NW#RY*?rYU& zb;pJ3mw!O7+-=dPMFRulo@MC|Qz3O=Y#y|M$2Flu+uvT7rOzq@){+Pnble0SgxW6! zPHj*EPHl9oEL~KX8F>z#6>!j`aRnMQUAmE0kv@2WWzAQ`+#K&pcf+)W&VJFbsvos3 zNF~d(rg+evOv}6mO|wU96TT-qD2UCrW=U&ZkG7H?$$0}iQW1~33uq0n84`@bsE)Fc z6|vYrZF&&fs_P&N3S}$IG3&#=no`z9>nRXvNiP^~QP9~m>np-?<d@<$?=#v6P`)~P zx2|tm|7{s|6lqm2(8{jjY|+B3p1zMH&pVG~RgZzq+AMU1P$abi-FCF2ziM%+<nRma z$}?!YTqj&AoU5&*?N)*{B1HjfLu6xExf{Lhu#ylOPQ5maTf!`C>`vU6g-1WOp;pJx zJk2r<bK{u9Vr{TnKMrF9^@v}Oz|AxI80#wPO6n--^$N;ys%%{v+=;nUf4GH{Q-|9v zCyKhORwtrsSVCJrHtT`ct1#i~L}!8X_DGcTQ4ZuRSl{B>_)i}}B{Oq=BEMBewsf9M z(K89yw_T*?aF-qAWm3X8)Wf4h++i18``?sVKbcXh?^CYGStIdu+#fIllGk3h?FN!N znV(%Kvbc#q-)TzvpX7?SiK<DB$2FMcc0P75f8y(OUDTIOU6GUc13!efgco#~vGOk$ zkRGwTyeN9hMnCC{cxlximFg~a?Al!%ps(9+U5bb*q)_!h?xfiM=HzXX!}(;3|Fsa$ z+x1pcxh%_!;)Fd{Lfm?t$&vp&8YK={S>fTS@8@#KVYjWKf2WEw7~W3y7+osVKX*+$ zSF;oVF4^VNaI%eUpJei5dKGuT*`Js~io9p}oFOOMm7Y?H>D_!$Jjb;hQ2N?X24%NX z=j>N6{&}G0M{&wVqRi>0U({GIGl@Cmy!R64nz>(^d3hY9p)_gLIE{QHeViPuggQW) z3cTD02PzLG+UPT?36GV1rN5beqrb^`qqhxuyREUu{`mskn(>1l#Qj8f>-v0Iyu<vC z!gl`lLf@M9yA2@ze9>)>``LjPd%Fd>Be3P;3v&VB4LqkW$^ItAN!oxn`arDs^04No zYWd@TJzD&X-ta|Q@x{^lho&X3?>R~FgVLIxw&hRYb)DpOox#T?oJTLCZ0=-3td=j$ zpBS&oGC~NR*RIkVjQY-j*bJlmWz-pJ3=p~PqP=Tga1EpQ7?qwjUx96*cpuo(XaP9B zyT69arx-`E0RhuImRP276-M!KanPQZ6;cl#`xq$ukA_uN32*Jju#)!<8g)xuEN`9O zuvB+0C41~Pu$A>1v@f+B;H*XrxcIa6c!$JGCTM(I1?=lq&lpqvVon{#;XVf#Q-iKG zH1j;)Ggth6uorheyghYEx%3!8A+O#Fc3+I<7(v7E_J_U@lW-Ixj*#7RARYCn+a?&6 z1h7#Az*PpIoqIfMAPVh}hG(S?&aDbKOFnnNS7EDrK%XFRjTZLdv;mJA#M(f!1RK&$ z;d@<oG(Q{e03L{4kP)lhu+s!)z&ZRBVF>G*)}UTbZ7yz5QexrT>mfBEcI`pEi77h_ zniUyM(IUaG*5I~ZrSTfb^+)9~sndCSvk9<GalZ}kh`NJ&!h6*qmBhhKb3ti%H&pZd zkFO}m#{~*fq56oLG4o}-IUJlEE=~@IT85@XT=_%t95My_PfX}0W;wg`AYH%4W{euD zPOmo5rH5{Oy&X~Z@qfF*Z;Z6ASs-y&ej)jWaF8A98C|pAX&IEcdJ9H7aUOzJo9o51 zq*%Pt6Ml>)9Y#pg>}k7)fSl_8QEL!Ae8cLd%U3hXI_pp)ei|3UF}ky{U~#gZ!+FL1 z%#GWzx`X(&4A6L;O>Qjg^;89xbqMSk>%VAsFou$0sQf|%l-zIR?ah`$F}_CW+p`rK zAKK;W%V(zeE9KDWp3<Z`NIY1hd9X$CWQpYJ3$(EB)rkvC?VwCO7mi-MX4x@QPs{dM z$h!U<U14=-zp-_BXX*4#)9sq3(XT07bF4s~)4pciHR5>-eU&+m;6-QdfL4?A=91{8 z(gG%xvu>4Nxn~?g6*U$^b3Z3ttNff~?O<eQ8uX6kV^KSzzo-+-zQYJGA;)ZSH0>53 zERpIrptu%?A*AJ<j%e`-xILsrqa8#u^_^?%TPrPZ`=ISAR=psMy;R*fHx=!s-IMOu z$It}Pto*fGF-i@Aq&+24XoXW4@RzF%styj^>&-A9^{1&Z+a%fO9vy!*1^crTgK>(m zLZz!@nn0)jGgOo+6YXgw*P@YH^Mh*=jZ`*~RR8yYfvOM%e<V6}q_avTvHHuQ;XsjY z3lV^JR0yR<Pa8VoS%+S<iFG<=ldwg&yo#B10N&oZQv}LGj!Q7vK&;=&>5}Nb4Bc0c z@@u&%;RIXs_lZ+d%ectO<Kjf-C7D$V(%nXLV<w37T&Vv}Z1c|j94qu$oRkucjy%^) z83xvn%r_bOTbwbCUv5@SmX7t8IF{CF$D2q~l%6-M(VsCVW}&7iOx>|9SlhwyIaaDO zH8RF%yKsXkBPFmTop8bZ8iMiQKw0QCKk<V4z7s`#C(8N`6i7N{?imn3(IsPlorI>0 zV<pnu!5DxQx71u|i5i;vs0&gQ-G<1Q%W=>pc1xaG^(d5H312mugS1*X$EcOdp|r|T zy7L72$%g3sk?^b9Q~G6v`)_3!j!nQ37@rnBeiee~Q-fr+1&&81_5(QiLq&Ku6Rjg^ zEhL#^%eCIP3Pu8>u(h+`M}L`(V%-p%b1g!qCF{VSi8W_6GGFo}UE_tc)CkHyQ^w#~ zl<C#+qVUKQGO}=A`Boqkh}pxk^-9`{Ge_xf%t-c~M&RbebQW;OR!7NADF;(hzq6FG z9~H7;k`JZ~oNT&C-4N3iS{G03p0h!nN%~6_A+9AsyP%<)t4QJFpJA?q*=DyI>ouzr zAg0<fnu~gBa6t-<oX?#nJc;3E!j`zfvANU&Yn7t81y?EZ?ZnOo=?-s#OEr0C^)R&j zIWxzNbJo`9TRURWIzgQ|J8%NDulX#_V6&q7annL=6L52J!m}6!Z5)XBqQm3b2|R^^ zE$x#UBuEdF!e5oKFwr-|9U*Ik+HJ|V+!%uSnD0ZQdkN)1(>p!2(Y><W`TKz$3%UB% z?svn+8#~zOR7T!I%*ShF_tfO))N~AcOvX#BGX&>CR4C5a$afr2o@mp=%?}i8I@B%H z+KKJl2)w%E562w^_|`@FL<sUGWRb_RhR@O-qI>Oi1%PMP=tgQ*8B=({^xdHghKTLT zC2d4Y3~vY5B(ZzJ$YV{X8$Bm@-m?=|{b!klfd5x(X8{#Qw(fg^1$UQDa3?@;4I12? zAZfgDZJgll?!g;(hY;M|Ex0=bNszqEn{#hwxaXWVbMEV|>a}aF+P`o0-n(kmSGDW^ zmtB#?T%%VLgA_8-!BwI?!-r6a*n@j%7*c?B$Mt38B}1FzfKRU6Q;1${scSe=i_>j9 z!kkF`@-ZHW{U9nMWRdc?Ej8<#1tOg<b<nLEdHQ%R5lF4b9b7W3mgKgFus%S|xG=3& zP|eRyF)d`3`F#V0Y|FOS#N3`WOv5Vi67${{Y?Nq%&spmy_1=M_x{2C>^BQRqm_|=^ zdu)5rNND=VWbT*scHZ1)NxE9SD%J%}w0t*`one5NtGh-uxN*_-M9y#iAh1y-zy$^K zg}h(m7t|`HfLmB{!4!Bqm?eawJ_RQPa6JXbO=GF!@L0B9!52&HAb#C9)}6ZHeOT4S zi+%u)NbD;r^M2!J59IU2z<#-V&Tg9qaXp679a)c0u5umTGd)o9MN2Dr>Nx=K=gQzW z7h)3(>vMS<?roDsX$V=M9i!JgPUMBm^;+CgV(H_Pz4d0-=}p^uyt$~{_uV>ZDs8w2 zek%3iTS4DSb$<JKZsFlQQV)!<30mOv`qVS;>>NmHBamL5uD%7FS3`L~B>2eDguq0^ zzkvbdL}GnAI5Twou8j*@vI6>o(*IqK|B<2TBH6NIHa#?5;EMmdfObRz4-#j0P3UXx zYnm?-1G#x!((cm7{TRz7(5vzA_l$hd-8~+<>Q3mVHU1Pz-=P(USYbDxlf{2<INibo z5W82!e1-Cw++RVO`C`Sg+CrM>=1zr}xPZlI$QJ->TI1jk+qE&?&?-;M*^Nugrob7P zVa<tP{6%1LU!n<B&zdG;oAKp+bNVq>A7r~U>%~{B!)G15)S4Q+lWp{NrC82+9$%DL zTJJt~w&-JhoW%PW3%6j+{3f62_vQ1;B??%CU@MKHe0TptK=$iv%)*@{k&qiUa|xNI zf-+Y+WW?V5qjyyvXw_}LD<2Is%E!5$?ef&Mq1CkkMm+txRXJ}ki1BvN7Ix~B1CK2| z)B2TU7)f*A_0g7pVJ!@85UIN1q@zuoUzWDSmC+O{{qmlZ+~o+vRamPSh#1Uw)r@@A zOf21YBbh#EDQ|qlkGK6>ffZ~e(ZreCZ<?i&1`BdvEaS9G>ocQXJOYC*VL_Lapv(9$ z&bxW9?1-LyC_b}7s{+m~jIaQah<Dk&aERP%s(V_FfxDEPgH3%?jBz8`>_|-IFUERQ z_o!6&3L)cT?{IjtbPec@9Gb_`Om%@lYB9x%6T$%!6(UVH9CWH`^B(j^2Cii8=$c8{ zCe2&vLScubYX#)q;^JS#;z*MS`l(;zzCR*w@HmPlf6)~km)0}6Wr$yMv#2AF9fNne zZxRR=B<hNxGa@|bawR^)axNmWEkkUaMbwOeKVx%lBC1?~wRDCam4b1BYf(mZ>4)Xt zf_;|`e@5?IM`T-r*tme$NMANMH&4T)=Z?*jp>IpM22Hcv%TC-sG+zgO;>a3i)d+%H zo^?!ndsn}ObuG9=D#wG|t?9sn>qi<bCf8>5vik<P8;z_uLbFUF{`7wO20yVDzXlzW zZ-p~iaQi)*eNt~&5RzE0B$?*xV%$5a*H<1iZNpxW`&M@kwr#>V*U`_mkoZ_9!I(Vz z>im^S>sQ1um_uhe?>gu1SAMqyfu8*m+VUd4x72Wj^3Y#4{hKv>2NSaA<q(`|h*fi; z50o?@Iv59C)`~5-iuw)#-w{MSr%{XbpIx;wO!r|NY+5Vg(|z>XM{;5iSuyeUt5rw3 zgO^)_eRtIDCQ5p-jUGNvgK_1|^=vhb{-yQQGAw_%BDhhwOzn-FQ^0ph5zj%?VyS0p z+elaD{@=rir?rqE+8Pi(%!3+hMLt}`A>Hf~5lG9*M^1*1sXxoY5DIHWQ6z}G2E-ln zK#&U(3=Ilmn0`QTnnnewKEt&SaD&PQIQoUsf4puI@kGl8RD%aDNKy>}4Z0iic&7TP z)K+f&j|Ckefv+!=X%?NBUr%bk?OirnDvCXxWv`}MHnLD2a0U}CU|Cml6dCa)O4PG* zEjSk&IW+Os81tFru27CIj>M%7g|6G%Df^Au6Y|PHmp4XKj5<V5B)srpJjJ}+-ku!- zszeV-VLX0`!!ad-`+Q_-0J^SW5xV1nj6Dk8)?@`u)#yiySvH9OTs$<t6;UDDC8#Xv z=Ql05Ckv2&<dhCtawxVnb*#fa9NT9eIwGCeEn|XXz=a0jJ?C$LI#YPLpSJnhhcn-i z*#L0s=<B*R<?B82W|zX`LHmBm*BgHV_2;n(UEYM<?AjJT$93k$T2Zleg{5b+c4eZM zHFBuq(w07_<C0PE$nV%}5qp<@r5HT;3H4BM)Hy>q>BL8G1)1-wCBgyk(S*Yq|H^Z_ zl@G{Q{EeDpK_yqvE?Ii8T>Cv|@7r*!=e9}v-!EwfE#!8Zw|{KS9_e6hovqrQH0{Fi zjFjOu(Y+NcNQY^ZIZ96XaKj^^Y$NI5d7u2y6MKY<8~>repv?I^RQj-4)WdyX&l{Ct zIq}n>Ydgi!LE5`%&v%-qLxUEZmj2&AOt~#hxS2M7o<VM;nU}4i?AJHkqFnQnuk{*t z>ggjpk}92AUsSohVOQ~7@-ds^nFz#WD!r{2HPm0<)>!X*)0akcueby+<V#|OiDPy* zr~dfj&yOj;jT{MWLPJ57!2LxXC{<$@M{#RMWBWg-BC4(^Pbp$NipZ!)NBbIVzZEMZ zg0>1p$azVhZ&vpiL6)>h=I5DuDle1r<>`8a!dl&HWfRBV=V#d@H+kY1TR9o~Cp;~y z)}I7gcJIGGJkWfQDs_5^CKqf+M(r=zGw$bz!pkNiE5S<CB_JCz;z>Bg>WBoUG4XeK zIb6dA7<8dDl=rPR)s#|aZIip6h+|P?IYI&thkmkAuTLr5O=b3#fSX1(XbaFa92;lq z`ZCMKZ@sv*6@}~_Q6n&Qz9P{a++f%|5bp1oeWZG&yJ@h>Jsu_0krBI@;-v;A9hwjq z8@(nlO^+4dkz4wTM>!9&$i~OB&Af0O(o_=RK2%NiKk+rMQES%*dQ8!3$>JQxqn4Q2 zsvM>DRzeh^_b4yxM_gvv-X+CQO<^5xQO=NTe3DbfWdssOjtyBZ;JgUQ5-ET)&q=Bo zO5DWS$K5&R#wEN&0vHN+sG-m{h6}<yH0Hb{>wX!_mPzXpYKnvxlTelSGRPQi>|8`- z<4BnCdx6^fcfx>IxUC|>9Z2d$5oI%C!wPH_3C>zt!=oYQD-FlJtn#(7nj(cmt;?&~ zawSacx+K;c(A*p`Si8rmr&fSzG4M?5X9kYmRi4(=y5WnvkD@w1;%6o0M27@#1I0&9 zHIPk_v#?p&@@+iK_Snf=49`$Qjh$2AU@0WZdXGZ=<G*Jiji#g?V}Yj~A_u+}?fPsa zVg;0r=?3A;%~=jtHgl+V(+W@vu=lkg^lbt^KuxlX`pC0$$l(i!TYY`ejgcK>UMF_v z{C=Vroy;6N$ZSeE2*Dg?UDUshqShM~SRNCuh!Wk2AVsB#zQJoPviwm;lJm8f2<=&! z#p*a-F$K9J=>_p*_7^i!(yR#zOQ8PSBV_ifJD<^pw~A(j<+&y6hsB#%WT_#|3d!Mb zs8fXF0khm~$z935f#yWt2wQuP=mHPr0?C%qa!%Kn_gPfK*Wt^6{-G4N4^Jkys^v!* z|K<z?3-=eDf&OsN{MR94@qgbCSW>UoO$@>fYjsqLH`dWSFB1<Ti;h;6^pEauFz4Ht zc1|2V@x6!f_WRK()?v2sR_M2P1nOI{08%vrM{Tdcqv;MiCyx&|ms}sThIK0K7=o<1 z@p|oa3c-%-F+IA-H!S9zb<yGzB8XGeCbGBiY$Aa%K2=C@PPoC%WAzOW#;GcHVMD>< z<k7}3x(*_tdkN3_+G_1VelPKTdAY_lFk>sa%jh)@OBeG}Jg6X5JMbzZyFqa&dwvM0 z!>S<RA)CrJ-TK`Z86SN?7$J?@LBg-k=Dro0DM`Gu6Ay0|1u)Hu=b4({A(rVXt!~74 z*Q%GZ&!b(Y$y$H2h{3XFATzgN_(b8$ZFxGDRmK**-FGXB-)R9S6;g-SUEG`GuRh}) zdK4a5KM{1t={9Zwob83-uRTYIvf}Sh@tw1c?6niy>wjtAIDI|cC&yoNPV!0;NCPi7 zOaxW*E-|(wfErm8075dxcHq?WwXU8<1kmxan$<0?aVV!d*Twnaa~pon`#LTNKA3+~ z#zr>@T{omO?!5dNDj~xGod=V-{#bH!nO)JWdph#by+_-FOYz0S9HrvEjDb{TIk4H^ z*B#GFMJ3VNbY)i9CS%o#BFW=5yqhYc#x^na)?#L9Om3lTdxUXLhV9z;oRz4)r5+ed zoG$ckTwzmfFp*YaV(9|Sz@_I@(o+s}!G29Hx5>grAdHsVD4~_D8}aPj^H|ATqOUkC zF2UajsgIvY_XwSZ-btQP)QFri=tmEM^SwWR{X}+!ya3j#V)y*8ELa++5;P&cNlDh& z?GY+}#Ul12i+m6fCQ5y;A%K{@<Xb{yQ@q(Jg5CH8Z5hbe5b;EAF~3RqkTT)+i2y`l zn<cF@Iuum&%fC3p)y<8;62^|dURwXnhg`MK=`rfsE`KHgLj;TQrQS}};*1}c2tv3E zf>EA$qEWC_cv~r+`2a{`L6;1NrfN#LFk-4X1e<F-zSo+x4pFY7Du8qemJ78}D(;g` zp;Sh%)pzU7Y4ddIvJCH?FKyaV3@odK87X`YJHxK`yTgQ@S7opC;49_p@5X(?sOF;z zJuE-1i6UmIJB;13_{j9Q%m(eAiNlPQY~!P}nypn6c@2EVooP2(L-&Au7QZ?-hVh1c zuYl};Sj&qZje9PmR4>(LJVt_qdgo?3xu!n}oxcY>s&aT2>^#1Uxeow6DtkUApnFHO z)Acai7NC2V;9YO(6n}H3dqk^9+~B))pYhO;x=RH;3YR_RqOW!d(Op;2&pb8}{K%Po zRP($~L;n%^Lvh5Lh=Bb}UyyzC4qopjTl`AsEL-jB$8i^$M?0*|T2Rkz7VsWIU_(zW z#Cg^Z@3kSy=LK5(fpXvekr8X8SE0AY5Nxy=5^i8+%FZ$ENY2JdL}(F8c{f$$;;q8# z#F!8fg~DO19HOeC^B8I6>zaFR<PEB2hz&>So@`ri<mY(_IpW9UAvBj3i-nP!C6O8` zh(_Ak!9121V++-lvhjFHI1rg<=v%yhSk^&Gd0yWecYcJ{5%_r|R0k}%_9f$h=8`Al z+=!8%&5<$jB#cC+JASyxjM9!aHnPOVeKLbIe2OK4OK@M2pK}o~B=OwP9LXH5yV|p8 z{X~*CaTp2OXLPwdE^n%P=>Tc?T<l7?1@B!c_0ktJ-ULY!S#a;`1rqOU$c*dGqB}hi z@o2A#)Ct{oX1$n*-A8I<Xz+}dKLxv#iViO+p-Q@>+4$EY$I`5$je94Aox<3VsxL8{ zeVY^9V^ZOyp{5&)%=Ss29VUTVPGDiJFpAOanVNLXL|Lkv?wq1pIgQsdaE4txT(HQj zW=yuF(2`w@^rI5`QZQHDIjZ9^;)?jRd1~*I1`vHJgcPErB3o1jEd3=ZmSu9{HYXn) z{U=z)@n0zSw#q4XFs&EOBH-b@$Fp!~Z+oSRU|Hj~!e?m+nI`(0f6}j5ka3zmVCl>h z@%82u5Ki-bK)sS#QSn2H`%S(IMHhc))j>${G5gBEGXFFFB{X684hp0&@QTB3-)j){ zi*IdyMM@wg6_#j1lrJiVc($P@CTloZL_+}u3KPdsJ<s9Q((94$<xv>+(GJs-bzTi; zrVUTfIXd(k-biX^81M;TB*(~^Uf!ldv`=K}`mh%?-R6=*TlQ1xD->EPbL%SdqraJu zm{`%Gpr_5%r(ofQS9Xfv_h|5P`RW~gJc_ZDrdq1r)Q;0^w+aj8XLG;nJd~;j5j|Lb z5VUugbtzoj?q)f{V74q4F`-M3l)airItV!@qB7DodbQUowP2c1BVUvDR*Pv*eqhyS zp<0DMWk4c!Vt#sZZLJEs3SzHd<<*7}7MbU2yu12-=wi03=u6C=fjfWV-WZKm%G=2p z$!>V^kovEm`!Pf*vn<7*RhzLV4s2oXCy(q=5LCGGO;&9pN-yUn;au3eE!1+Pq-z!6 zij{vDWaufI@YiiEO}4(VrC-V<l9Hbom`fv)V%RxAEA1~~A(}D47T~to;3Q!==izWe zwn-ai1xm)yG22~k)MZRSa6qakZpuZaWB`>`%C2R?Q8qi8<WamGJc-Q*M<<n~s&L;A za0)+a#TnAHT27T(c5xwMvK~ZHyNLzRL*2CU6D|QN)gkC>&#>uOzS)=%&L&UMWg3ms zP=xfZtC9mqEyB@JX^2{$s|+M>`zD~V%Nem)N>{}vZ>Y!>B?rc*C^I|AE(ZnE;R2J{ zH0b40Xw<0XH}PeQ)U!C)R=c}ygUOI(&xb@r@lvWaL8w~54UIEM2y5$HbbbM2+;(6o z%Ql`<r?i&wAV|wl`pp5(Iz=F?9HLZP2n*UpC&8q!p|l@+>Yi8<nOs3>f>S|h5^qP& zp_o4%v8`U^)^}my=oM~C0v#?S1X0eENtDhOeg_v2;?Gl;6>tFOvz*q^M|ar;dM1@f z#&Az)+t@r)$`s>__@F$%d)w(%S*g*pluTz$b&S>~3pb^YZ`kVajt`_|q@kW4Ahqi3 z$fi|SyK?6YwiMIxrSB^CeB}X>UuVVyy9KK~H!+b?GbT6>*9~ULK5Ow{0k-4`;F7NQ z+GjS?wAWLTmJIc#xzlRlmg*X8sT153SB_dmp`i1nK_bF>0GHW|1)%yBM^p8zQBZ$U zn$;AQ{M&U48CMF8Rmh=u8(e$~I(3RZu-N}A?8%9ud2MktiaMeIY2;KJud%0&US?X; z;1ML8kPkp8Wpva1x+|nV*-c1p)2zaB2%Et>lQ~8E9b{;nS@&yzR%2dKI*-ih)YAGq zU9~NZ6Bn-5sFgP6SgkSJ0oh2OiaRey9<6C&P<Ip`krGxJGi-xMx=na4;BKf_NsX5? zo|o`YGP71M(m7jE|CW_S=UgM3w4*wKBhzz=6V{|xb;Zg0;9CtNW=(5NS-7cy)ylI6 zc-wQ?-YXU!Q}>#fy_UPl7_;GMb>PcFH~Ohs3;#wvS2G(0o4yVf-L3H9NXjg?#c9?A zG`Aa)#s-SzzKL_yMQM~0>yM($O^p48hs3gl5($P^-mmEk!hDVAqtKw3Rf{J-<dQqJ zRNfSYJ@>U10Q2qGFZ=1$d!{2glm~mdo?%fExWS8)G%|x0`R3I-N9q%gvEmKr23;n} zMyEAfYza=Gze;8dvWekhah^g(+~v%mPf9e)n-N{8*UH$b6+Q4Ad_f0D($s4$7|m-W z+VUJ9+-@g=)il$<Yec)BIU0%Ie)YNGejXVuar}<R4Kd$z-PANwe0z(|7{6JJwEK+m zGQhG7#$xTgJ45>tcMEb@Wg2h8p<hzWHu)rJPn))Xek6hnDW;~3Z3MX_1C!ctU2X^B z@V*-W7p&L0Y+Lz=MX$4brBPM!c)@dIZ*{Hi{%|s+V34w^d#t;<fyj9)puu7@L8The zH3dw+9=u(ufIp;B6fm4vvh^wC$c9^@v!mH=l1Y;_uZD4$zgEr?{C<F@sx+%z{+!kV zTW&^#sa_>Xho>P)89XTygt@69<U}}5^n%93+Soh179KofCLmDTO|N{@HT242X6OO; zn%>Eo(IK8BYKj?<^B&4CzCOG^Y!f!WlwA4C2oD!l9=nur8LHh#r&%n4@ro(mmDZ^H zLPH>PdvGlC9NL_TLLH6RQW>I}`)otw1CQbihN`Kew*DdbCewMq99`}<l<nbO%B+k! zw4-@EjPZe8+9RtIde;8gauj@PlmT&%3IE6AN<UTPVE6ni;(Ua4foVPS#RId&;;T*4 zQC;&gb5>3eLy_b#xAr@-=Y9`>efp~93if%d$<Z74a$sE+FC(`fRq;)haKr&V^N(Ae zWG{uJ$N7BWbNdHJE5Od&+x{PzIcpl`t5HB0K?zqtzGD=|NEFYaD(go^8^U>$yI3}! z#iOb^x{Y$i{m_0Vny!Pq*}(1QvXQBJh1As;g;DvN0TfgKO#_Wt6OHSjsoAC7_f7DA z)Y#+;1?9Na79XKhQq)vZ?^5u6)$DZ;By}ZJ<sJ3&x*Dom_Rx3OnvUG~CD|6Vh|HOv zH;}XOz<$bk*OjXeSUVZ-W4E|q>{wx{)_q6o<9J&?UyGC9AQhiuz3xq-+t(mqorClZ z#UEN|2Sv;lMYb|^XAF{o@_+@wBnJ?`(0D3MSuwys7><P%oAQ^j7g<vE@)a@4uK7!K z3%bW92bveKi-#pe9g}zpOk}vKEZWZS#$+520shE~#hSAPeXpo8BT3UVZF<*5Ik0Z? zo*9vm36x$o<0@t1r-1ES&bBjphi>p*{^_J>#W|i^z|F|b1xo`WI%v4bv3`G!OS-|( z$GWU+Z{qp618<+Rg-#<$8&fgaF5aE1wyzBbaYV(E8UKcB$6QaAeRiKyrk3|N(Glx} zhaqi#vPHvyRR`2h@C}D++|u`%@T1c$#4l1$nPmVfMhzYt>5F^A9JXikh12nOt$vye zU7zHcyxv&034inIZ@j~7d!&B2GF;rE5$jgiziOxyhIP+Jxa*DphXh3#byXp6J6YOx zf0B|62s$H+SQNY`f6IKa5~SZ5)Ks5b<<efC2PrJV4ii_GS6;L*?n0fb<PJJSEcHMu zfyLI8GYmJ>6K%`qtkd^;QAo+Z`r!Ju1^3`Ow#in8%0oH8zNnYzJXa477{=JEUgX5C zDYfsVCBw-<vEyhyON4{@`mk=9*)ltC7EQ^<khnqjosu4xFImdx)Pc_z^m8&Sr;l9e zhA0KRYO}H;Vj~{YKK*@PF{2jWwn|0PKU~Xy=|>6sAgwy)GiIIOmnEub3m*Z(!Rob> z3Y$A^3k@J^*D$SdgMaJyXf{4^dClcd2vlCCIzU(m2QK&`31*}jF*r*jcUF@&455|v zdU@tD&vIT=!!P(pZDKEaw?%^5>OmmK_R-Fs(lWplPquG@6iK_uuD@~f@_rp|1LWt0 za|T(0ad=I5l73&|5m8UAMLYm8$<l64->=AE>XtFJIXI$D+F}V$4rH{{c~)blqq(^g zp;{I=G?p!^U}bj~adx|;pH$ATvnNaTT#+*4OcGz3GF*CJB6m5GbHBrDKVKIuTL+EL z+1w~U=LpC$WHalmq%^rXpWjy{6E#X$+<eq)V`k(UOzxzh<&0R}(3ml0eOkq2bbOyz zbD16|<sDa&wIh&cC~ZB#^}_ayuC(NxkPm7G2}=&A{X8zYJ?G3}pzR6?8YXI5g#q#p zW`CY9ypeFltDKQYGd3^YRvp+RAg7vRzsfUN;d;Ga;zi>padk(iu1@f!Hw+`TV1W%1 z%XrV`OJ$G6V2oq2jWatyz&YS&mUzQPdD`b32_C#NTfBL_&M$fC1x0!R)x71m*ec+7 zE8RPQealqb8fj0`W8+Y(7L~aLk&6=SQVIe@SeTL4M(B3}Z^159m*#z)>op{F*j{M6 zmzkJ@t;m_3qoLJ(A&|j()5;igPR*t;KXY^>*I?lbvf%`D!%zIBRJA}CA5T5jihGh% zB~K@qFnX|1n1KH0W;<1Y3*Z=hkzai(^IX%+rVSD&%4*@;)?86w9(Dn|008jCi<Xg9 zPDJa(6e;>D6~AXp1C@JnZ(AR$!*gLDJy-M$_)Ea?Yp4tTx6I!N|D2h}T}mTPB11u? z6aB@v4>jJK|MKkBboId5CiDsvFsUK*e}feaiy|Z*EB6vfn*F6+_8VU*2;~QOKjsA= z6l>>A0AkgKR#9D&RT*w;nU%JMj^#+`q_&Q`c}bnRP6gn45+ty=I13P(+I=u_t{Gs) zy6EFt^|;I&bN5W^`{H><21T>!?Zw#TB+iYS6~C=g?V+7`X#6dlk*ohgODKu>VLs@= zYuP_7;22NHy2r|EIg-zDdB2bS-EQBmZPJUZKKy%vUVH&XZ{$Mcn<S$q9YHUxJ^?RP zgl`&WY73ra1kY_N81?7QQH3JAJkf026DlM6V`uH!D_`K$Kfiau2=c#4v%h9q5XjqH z;ssnA#sus6pWdG7x(aS|-E4jH6!QA;;@~zW@-2rf>J??#GX|boI&*O>B6-kp$kog# z5-Mt7;DP9bEx$>?;bzrwRbIkDi9$Dd)prBtK6}(2m_(k&S=sBasdlJgQH%zc1Of|J zqlxt##GFo`ac#4)15NfA6!Ew;(U|ystT_$>Qmc+x^`KEIMbH`5u;Q}1mb*~`DcZUH z`=gLP@|XcO-fo~7IWYC16F(U?OHPLK6o~;ur2%p&`fgSwz)Kqi9gutGeo;PaIlHDu zikwDNP^Ya_BQVpj5)KZmf9t}Q%Q1@`YKhjv<O)Vx8PE&k(Qq&#)e%uw&gQX-ZmFws zfu}_^o+)b)fyw?ZN!wiWiGr{phc9W)QOSjUx)5jAb4F3`L!o%`*Ss0iUS%oNax=?l zx~5E16ZU2EkW%2=rjO<C)yt!2Vid`%TJuX}@^GZYA=s!?u3|*|>g<*$J1WLFb<uqm zg;WW7IkVz)Dvp$}QazbKK^6}wwxpxr{G9cA3_tlAE0w{%T)ycn;YN>~Yut>CAq{2e zeV3+`%^WlfQ}%e-o`DueaZ^JJYLbnZ!TN26%jNnM(pBW_$(&ClW&CMF{T=BpjQ#jo z;Fp$<mI#Svn#qOP_0eQsy@w_ixTTta7%I#^;s&Rl;dZ9L2{N!>MyVByGT({|s~59T z5|9#QQHmdxoabc>Y|k)pz~O>mhzc}m!WE+NX7y+Z<G!Z>15z4boLL6#&3w;Y%pfz; zlA-WO85P_pTPZmQ>|mOFDo7u{1Gs%5j=jsuGSjn2uqDZIKAWEn8+(#brQ?v)0Leq? zvntMG-luPQ7hS}8Ukgpou;VO`LJcSS$4waC7ZuYFuxFdOWb7+4mRb)ebo*l9r?j{a zKjz_vv1K^8Xy?(5e?a9^4|(iPMM<e`17OY*>R5;qgsEA&_u+NV(;4DtohsS7CN6q# zgbuA@%JjI)f?^|0xxVy>*cgxkURRPZps){2ewac@kCcEBE@i7EI(=OUZ-H8Cm>c<m z_!bc`ckb_#wIKx~)TP4fWxZz3pSy_<?-gPivXzWIk}dX%FD7yqB|WImk>6$wt`)MW z0bjp92VcKNqP1Z!yJv!Trr&3Sa*y|l@Rro8ViO(yF<6Mug|I?V4S)sz7_NbO)PY<5 zZXj<k8by0O!=zde+k4_R)u(;UiPVO`1>1)3wxse=F0p;n3bjvxJW`c~^+7$qRB}E~ z=ErBDg~MX_G9#OWR5UgF>sO-{^bAV45mY7p=HhuJV_avE2DdgaKRUcqT;tL+Wsg{| zi0e;*o~$ax#+JJtdj!&yBZ8eXaiM)9kOO=xbxLx-)b8}4u&5I}QT*U-kj~=#e5S5| zI%)RfBV*L^xc`^T%-2#0LPCXd+#7W<jHK%N-rbfOD(#LW`pzc`SuVXz7JBhWAqkr& zn4J8@LK+I!(A{Cfc{T=<5i^OpVqJ(c*aaSs2)HuTWP<K>P8tk}&ACm&)ys&6ELe6X z$43X{sa=jPS=-^Tgj5^>Z+pV;RrCtnL_?fsHd15{5)1Tt`-X(G`~t6Q{c)MRiKkn4 zkH)?_v}7m{5ApP+9eA8{xq`P)R`*(Y2=$1#?tm~RGLD}Cn303c2fj#Xg|iuz%!v!K zQ?D<rRZeurd(dMGnc%7}szY5=W-1}$0o<qk`}{_wB(H2YO!e6kixMt$Thpiy!QEPh zepR;tR~=%V;ZxM!l2*K%bTwz&%_SzUi*FB|2)&07lF4%YS_s($rsG86h(_1Ekkl{Q z=yo4uKRJA+<sBus+Dcw`;5DDkPO(5<J)tg38td`7%Z8I)ERkTLQmnT9j_}TB5wj7- ziQ)_vFXA&X#5U>;x~hxBT8qZM=Gc`O&cK*sqf#VrI42QQ&H)jFx>Oo^<#hk86~QzH zlwXEeW~L%Ej?WOqUWc7k0LjoiR_3c(Dsu)l1;roFug!bHoBMyFRg|%qqHU(Jh}8(; zmn&jy2&twIJM&5(IVA_>QXHVsPkgiFM)*<uEkPrQh~MXKO+J?!l_H|3&YYy?1=Zz{ zz}zZII|gdhC!==P<(tM{oG}&PtnxDNZO9pP=B(0{GQChjXwOHLmp?Mh`iZ932q;_7 zdTo%Jl5()q_Ok9b-@gWL@a%H8hcvz7+kr=azu0tR=$31GB6w?F^(q2OuoX9Ragg1F z@iNi%CM3Z4#4~vmy_q2*<!;^X+~~*N=Adm78~+=%wTEm3d;@wBT5)tgQ?^Dvf>Ax7 zIV(RtTL<}Ih{@82Qf%S$Fy?JB44nk*YCiN8`e@-VV$J4`nA_<JsDQ!poJ4C0kUOUY zd2SG!Wid;UEZh;=_Pu=HH*h?OcC=IGdGb)S>o>-qmr7S~(Ps(Y*d)URvxI>|XM5PL z1RftIUkM{JcU3i}JL?T>-Mxgd=YY8-1KOf?xtDbsP<Y&P>U>*QNj4fc8_k(W7ths# zo6C15WKShwmnLvSbYLbL(PB^S&7K%~jod=Q4p?u>Q^C%7C2nqpn{^q|A?2f;6egI+ zPyyrA^osD5G`ZK$K;shCaZlnp<RRHFjRn7f4bht74HzSsPs<fd2L)ZsnO1GhWxQey zEOwj_%i2t4=&PdcV@;#)e7#g9h`R$(iDjVEfjpF+T+=6Rl!k13+Q_@!)o|Woini0A zGBx(cP+ie}zJsny2%r?mqf}d9*OC%^8+&xrjFV#bc4t$b2<Z&<#2##H4L`eM^wPcW z$ntxYd_?+@JAI)Oqsb*~#UmgzvBaA&(+Jr!^qFg_+*d+QUsF4_Ohb6VF{sw)vQBKR z5=0sp2hkYTPXnxa&P%ESZnP8w9~+BIi{ii=+Jkn-x_xz4L5dwneD!ip;sfRIMI7~Q zI+bq2qUaeZQ|d_)#<_agLLZuluCt|`FWLFSH;FuP^GZ`4_&l_A0!}}l?S*yaqJy4S z)0w(IvI)4rT`U2q_40Qs)?FU$Azg=GFHkxAx%T^Xj%aO61#Eg*2|gwXGOkAxc3aQH z)f=<U2a<81d44?y&R*e2uR{32N_|@Lh6&y5)v8GlmeT>W6lx&FJZ?><G;7v^!@d8} zL~S}h<0$>B-u%(zg*ejJOk1`Ko%HAwmfG_4JIHY>#`5$h@4?kQnR0sj&q(|e-~vX6 zie{IElQFfo5E68QeBXBKuLqw}m+JK$d^5&6#-^s%jDJ1<WeBvefMi6ou%}d9?x@=K z#x)jMcpsPzuUjqG{;0lp^1e}bD0DFNdf;rZs60heQAcZs?y|scgUvfdUv1%RFP8w! zH!=F5JR?L)8zW(nerKDAaeOvg*rEf;N<bY{Hu#LtyCzv$W1^DWnK>h(T?aK_Svbj# zKH2HFWsjSxrDVosO3O0VjMw$r{sW}GY(Q56$@#Rg-V@ogIBnAeVd$odkN<nKDn7Es zy09vj8$G}Ibnuut>`C`9&!{?SP!~h31X>G^`Ly(aYtTUUi%#;{Q=oKms>DNhTx0aw z7NJa|lwr}~OZf@fIrk6sb?44i3EL(~TUd#(wan^A>NztJ+Q%O3Abf+iSwGH^ZXWGd z^&r0Svg7XU)PRy&-G%BSlXX2m^b+85T8~u)k$>u<?%{BtOvZxZkd5+3z+`4QQIY_{ zF&oBrz~qwZiveZNc-8BzTY_z`cgKR~-v5;xKtVx%CI?V|_@Mt><-}EmnWW?;URk|& zHnx8CuXkqnpF96dESP^!ESUe1STO&0V)3s*Jbw@LUj?S$ZRP(v)5-XW4XCrS5_kp$ zB>)2j_2z$rwf(uLi<M=Wim-ea3kH8-MX*~GshL8|0BI3!uyn9aUAN2u#!}2N_3^3Q z3bkAw`J2v$l#G=H(t%Re=FZNZ=UNPREUP?oM)A^SN|<IJ=gB4t^2QV_nkng|c1?|) zD}jn&-M7u+<12;xq@FqzoS&3L$m5+pB7N0WH{y(D(EWg|{m{wyD32MOr)xcBC5@Ii zcB$2!x1-sfQ|09X_)eH%tEWQLW&?25Gn1m{cDAMb*f`;fox56x?LJ`k>cWjh-s8<W z|G{C%Or43N>Ur}uu!=jSUPGw;f+k)h!4)oWg5fI%9M)yh&@}hZh8zLOp4L&;DJNu^ z5O%}n5Z#KaJQ=`3YqN?eUAsyRBq3HMQ6n37<0p@#;f`pUZZ54_bx5~n9{^*>#zqii zp#4y&=+1T$B8W6-oZYp3WczmX2m83+di-s(x|zezE%%@6+y8CX*xK9J8rwUX8#{0e zR-yT_U_gyOeA>V=NyF>#@gKnG`Vc2%I}QSEjgsUScvplS4wW$b_$ea+c73t8KP$?0 zx+H{`3%ehr);lm|1`*HB^7IQg&@R7-2nZT{1bDXhgECbGRZ*%mLcTzTV>doQn}>q6 zCo3L~D+grOe*Uj#&^R#vd@LjWcL@XPSQzS$|MOS1-?Q=y=#WU4pIcQwSDZf}@_cCi zSWQk?UP?k-MU`1j;*Ws~p9F^eQ{ahzWcmND2J)Y3T>kmKz`v`A{ili~&;IERg?|Si z`4d3yp9B7I;`rAjvOkf6{vV`&oG|{}4cj6)>8U@v?GXF->1@Bcq4%%ggbf|doy{Fx z|KPCxG{R>+0z5K!D5z&>zblaaicpRGS0Xq#{2c24bvx!MJPvwR*c%QC3W)N%%*-$N zORT>D7d10BwD?zSCF~`9K1?X6R*I+WL;SzOwlx3O>`W7M-rpuf6~q2MTjUqpp6)NO z#mwJZ+L->EM!)v86=?g}E*U7l-}Cy#S7ZDO{I`G5-+GGnjj!3F`-xsdeA+C!Y=30{ z+8h7YqyL=EcMh%o@+W%->FH>k<oXM2<$rAbn}&JnX#FdKn81JFZ~YYi)bjWj-dE^9 zFhG8ae`<^S3*RREzc9&t8s@3j>8~&fV*i=*>C*^LT`Ye^n3MS1o|aGHPrZ14!L615 z181J6_@~|^f9M3YzwK1=6#i65`4`;k{oj^VehPo8iTexw!|-n_<UWNz6)^n;uQ2)B za;8t=Ph~8B!QsvSwy5P(_)~epU+^%CzbRJu6#Y~N?HAh1=I@H4J!L-?%=*QywEJ7~ zSx>=Fr?~$DYefEM6W*Ujcsd{WSA_7G|73RXQ~uM*n7{Zo@&C!x%>QxO@#K-xFFs=4 z-+aLI?=Gj&|GR_%_2UP1<v&SJ|8-@CKUG%wpOyc8y85rdJbwbG|2^>2^z~P}{<8%3 uSG!*RZ^HZ|o&969f0mQ|iWXV@|1CpPl!1f)4NCp<`wA5b%B1GEt^Why-&frL
--- a/build/mobile/sutagent/android/Makefile.in +++ b/build/mobile/sutagent/android/Makefile.in @@ -99,17 +99,17 @@ sutAgentAndroid.ap_: $(srcdir)/AndroidMa $(AAPT) package -f -M $(srcdir)/AndroidManifest.xml -I $(ANDROID_SDK)/android.jar -S res -F $@ sutAgentAndroid-unsigned-unaligned.apk: sutAgentAndroid.ap_ classes.dex $(APKBUILDER) $@ -v $(APKBUILDER_FLAGS) -z sutAgentAndroid.ap_ -f classes.dex sutAgentAndroid-unaligned.apk: sutAgentAndroid-unsigned-unaligned.apk cp sutAgentAndroid-unsigned-unaligned.apk $@ ifdef JARSIGNER - $(JARSIGNER) $@ + $(JARSIGNER) $@ endif sutAgentAndroid.apk: sutAgentAndroid-unaligned.apk $(ZIPALIGN) -f -v 4 sutAgentAndroid-unaligned.apk $@ export:: $(NSINSTALL) -D res @(cd $(srcdir)/res && tar $(TAR_CREATE_FLAGS) - *) | (cd $(DEPTH)/build/mobile/sutagent/android/res && tar -xf -)
deleted file mode 100644 --- a/build/unix/gnu-ld-scripts/jemalloc-standalone-linkage-version-script +++ /dev/null @@ -1,21 +0,0 @@ -{ - global: - _malloc_postfork; - _malloc_prefork; - jemalloc_stats; - malloc_usable_size; - je_malloc_usable_size_in_advance; - posix_memalign; - free; - realloc; - calloc; - malloc; - memalign; - valloc; - __free_hook; - __malloc_hook; - __realloc_hook; - __memalign_hook; - _IO_stdin_used; - local: *; -};
--- a/client.mk +++ b/client.mk @@ -166,16 +166,19 @@ OBJDIR = $(MOZ_OBJDIR) MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR) endif # MOZ_BUILD_PROJECTS # 'configure' scripts generated by autoconf. CONFIGURES := $(TOPSRCDIR)/configure CONFIGURES += $(TOPSRCDIR)/js/src/configure +# Make targets that are going to be passed to the real build system +OBJDIR_TARGETS = install export libs clean realclean distclean alldep maybe_clobber_profiledbuild upload sdk installer package package-compare stage-package source-package l10n-check + ####################################################################### # Rules # The default rule is build build:: $(MAKE) -f $(TOPSRCDIR)/client.mk $(if $(MOZ_PGO),profiledbuild,realbuild) @@ -254,17 +257,17 @@ else done endif endif # If we're building multiple projects, but haven't specified which project, # loop through them. ifeq (,$(MOZ_CURRENT_PROJECT)$(if $(MOZ_BUILD_PROJECTS),,1)) -configure depend realbuild install export libs clean realclean distclean alldep preflight postflight maybe_clobber_profiledbuild upload sdk:: +configure depend realbuild preflight postflight $(OBJDIR_TARGETS):: set -e; \ for app in $(MOZ_BUILD_PROJECTS); do \ $(MAKE) -f $(TOPSRCDIR)/client.mk $@ MOZ_CURRENT_PROJECT=$$app; \ done else # MOZ_CURRENT_PROJECT: either doing a single-project build, or building an @@ -365,17 +368,17 @@ endif realbuild:: $(OBJDIR)/Makefile $(OBJDIR)/config.status @$(PYTHON) $(TOPSRCDIR)/js/src/config/check-sync-dirs.py $(TOPSRCDIR)/js/src/config $(TOPSRCDIR)/config $(MOZ_MAKE) #################################### # Other targets # Pass these target onto the real build system -install export libs clean realclean distclean alldep maybe_clobber_profiledbuild upload sdk:: $(OBJDIR)/Makefile $(OBJDIR)/config.status +$(OBJDIR_TARGETS):: $(OBJDIR)/Makefile $(OBJDIR)/config.status $(MOZ_MAKE) $@ #################################### # Postflight realbuild alldep postflight:: ifdef MOZ_POSTFLIGHT set -e; \ @@ -424,9 +427,9 @@ cleansrcdir: echo-variable-%: @echo $($*) # This makefile doesn't support parallel execution. It does pass # MOZ_MAKE_FLAGS to sub-make processes, so they will correctly execute # in parallel. .NOTPARALLEL: -.PHONY: checkout real_checkout depend realbuild build profiledbuild maybe_clobber_profiledbuild export libs alldep install clean realclean distclean cleansrcdir pull_all build_all clobber clobber_all pull_and_build_all everything configure preflight_all preflight postflight postflight_all upload sdk +.PHONY: checkout real_checkout depend realbuild build profiledbuild cleansrcdir pull_all build_all clobber clobber_all pull_and_build_all everything configure preflight_all preflight postflight postflight_all $(OBJDIR_TARGETS)
--- a/config/milestone.txt +++ b/config/milestone.txt @@ -5,9 +5,9 @@ # x.x.x.x # x.x.x+ # # Referenced by milestone.pl. # Hopefully I'll be able to automate replacement of *all* # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -11.0a1 +12.0a1
--- a/configure.in +++ b/configure.in @@ -175,17 +175,17 @@ then *** EOF exit 1 break fi fi MOZ_BUILD_ROOT=`pwd` -dnl Default to MSVC for win32 and gcc-4.2 for darwin +dnl Default to MSVC for win32 and gcc for darwin dnl ============================================================== if test -z "$CROSS_COMPILE"; then case "$target" in *-mingw*) if test -z "$CC"; then CC=cl; fi if test -z "$CXX"; then CXX=cl; fi if test -z "$CPP"; then CPP="cl -E -nologo"; fi if test -z "$CXXCPP"; then CXXCPP="cl -TP -E -nologo"; ac_cv_prog_CXXCPP="$CXXCPP"; fi @@ -198,18 +198,20 @@ case "$target" in x86_64) AS=ml64; ;; esac fi if test -z "$MIDL"; then MIDL=midl; fi ;; *-darwin*) - if test -z "$CC"; then CC=gcc-4.2; fi - if test -z "$CXX"; then CXX=g++-4.2; fi + # we prefer gcc-4.2 over gcc on older darwin, so + # use that specific version if it's available. + MOZ_PATH_PROGS(CC, $CC gcc-4.2 gcc) + MOZ_PATH_PROGS(CXX, $CXX g++-4.2 g++) ;; esac fi COMPILE_ENVIRONMENT=1 MOZ_ARG_DISABLE_BOOL(compile-environment, [ --disable-compile-environment Disable compiler/library checks.], @@ -4134,23 +4136,16 @@ AC_CACHE_CHECK(for __attribute__((malloc AC_CACHE_CHECK(for __attribute__((warn_unused_result)), ac_cv_attribute_warn_unused, [AC_TRY_COMPILE([int f(void) __attribute__((warn_unused_result));], [], ac_cv_attribute_warn_unused=yes, ac_cv_attribute_warn_unused=no)]) -AC_CACHE_CHECK(for __attribute__((noreturn)), - ac_cv_attribute_noreturn, - [AC_TRY_COMPILE([void f(void) __attribute__((noreturn));], - [], - ac_cv_attribute_noreturn=yes, - ac_cv_attribute_noreturn=no)]) - dnl End of C++ language/feature checks AC_LANG_C dnl ======================================================== dnl = Internationalization checks dnl ======================================================== dnl dnl Internationalization and Locale support is different @@ -4196,22 +4191,16 @@ else fi if test "$ac_cv_attribute_warn_unused" = yes ; then AC_DEFINE(NS_WARN_UNUSED_RESULT, [__attribute__((warn_unused_result))]) else AC_DEFINE(NS_WARN_UNUSED_RESULT,) fi -if test "$ac_cv_attribute_noreturn" = yes ; then - AC_DEFINE(NS_NORETURN, [__attribute__((noreturn))]) -else - AC_DEFINE(NS_NORETURN,) -fi - dnl We can't run TRY_COMPILE tests on Windows, so hard-code some dnl features that Windows actually does support. if test -n "$SKIP_COMPILER_CHECKS"; then dnl Windows has malloc.h AC_DEFINE(MALLOC_H, [<malloc.h>]) AC_DEFINE(HAVE_FORCEINLINE) AC_DEFINE(HAVE_LOCALECONV) @@ -4647,17 +4636,17 @@ MOZ_DISABLE_DOMCRYPTO= NSS_DISABLE_DBM= NECKO_WIFI=1 NECKO_COOKIES=1 NECKO_PROTOCOLS_DEFAULT="about data file ftp http res viewsource websocket wyciwyg device" USE_ARM_KUSER= BUILD_CTYPES=1 MOZ_USE_NATIVE_POPUP_WINDOWS= MOZ_ANDROID_HISTORY= -MOZ_GRAPHITE= +MOZ_GRAPHITE=1 case "${target}" in *darwin*) ACCESSIBILITY= ;; *) ACCESSIBILITY=1 ;; @@ -5489,16 +5478,25 @@ then fi AC_SUBST(MOZ_ENABLE_DBUS) AC_SUBST(MOZ_DBUS_CFLAGS) AC_SUBST(MOZ_DBUS_LIBS) AC_SUBST(MOZ_DBUS_GLIB_CFLAGS) AC_SUBST(MOZ_DBUS_GLIB_LIBS) dnl ======================================================== +dnl = Enable Android History instead of Places +dnl ======================================================== +if test -n "$MOZ_ANDROID_HISTORY"; then + dnl Do this if defined in confvars.sh + AC_DEFINE(MOZ_ANDROID_HISTORY) +fi + + +dnl ======================================================== dnl = Build Personal Security Manager dnl ======================================================== MOZ_ARG_DISABLE_BOOL(crypto, [ --disable-crypto Disable crypto support (Personal Security Manager)], MOZ_PSM=, MOZ_PSM=1 ) dnl ======================================================== @@ -5700,16 +5698,17 @@ if test -n "$MOZ_WEBM"; then #include <vpx/vpx_decoder.h> #if !defined(VPX_CODEC_USE_INPUT_PARTITION) #error "test failed." #endif ], [return 0;], [AC_MSG_RESULT([yes]) MOZ_NATIVE_LIBVPX=1 + AC_DEFINE(MOZ_NATIVE_LIBVPX) MOZ_LIBVPX_INCLUDES="-I${LIBVPX_DIR}/include" MOZ_LIBVPX_LIBS="-L${LIBVPX_DIR}/lib -lvpx"], [AC_MSG_RESULT([no]) AC_MSG_ERROR([--with-system-libvpx requested but it is not v0.9.7 or later])]) fi CFLAGS=$_SAVE_CFLAGS LDFLAGS=$_SAVE_LDFLAGS LIBS=$_SAVE_LIBS
--- a/content/base/public/Makefile.in +++ b/content/base/public/Makefile.in @@ -112,14 +112,14 @@ XPIDLSRCS = \ nsIScriptLoaderObserver.idl \ nsIDroppedLinkHandler.idl \ nsIImageLoadingContent.idl \ nsIObjectLoadingContent.idl \ nsIFrameLoader.idl \ nsIXMLHttpRequest.idl \ nsIContentSecurityPolicy.idl \ nsIFrameMessageManager.idl \ - nsIMozWebSocket.idl \ + nsIWebSocket.idl \ nsIEventSource.idl \ $(NULL) include $(topsrcdir)/config/rules.mk
--- a/content/base/public/nsDOMFile.h +++ b/content/base/public/nsDOMFile.h @@ -129,20 +129,16 @@ protected: } virtual bool IsWholeFile() { NS_NOTREACHED("Should only be called on dom blobs backed by files!"); return false; } - indexedDB::FileInfo* - GetFileInfoInternal(indexedDB::FileManager* aFileManager, - PRUint32 aStartIndex); - bool mIsFile; bool mImmutable; nsString mContentType; nsString mName; PRUint64 mStart; PRUint64 mLength;
--- a/content/base/public/nsIContent.h +++ b/content/base/public/nsIContent.h @@ -897,18 +897,18 @@ public: /** * Set the SMIL override style rule for this node. If aNotify is true, this * method will notify the document's pres context, so that the style changes * will be noticed. */ virtual nsresult SetSMILOverrideStyleRule(mozilla::css::StyleRule* aStyleRule, bool aNotify) = 0; - nsresult LookupNamespaceURI(const nsAString& aNamespacePrefix, - nsAString& aNamespaceURI) const; + nsresult LookupNamespaceURIInternal(const nsAString& aNamespacePrefix, + nsAString& aNamespaceURI) const; /** * If this content has independent selection, e.g., if this is input field * or textarea, this return TRUE. Otherwise, false. */ bool HasIndependentSelection(); /**
--- a/content/base/public/nsINode.h +++ b/content/base/public/nsINode.h @@ -912,16 +912,28 @@ public: CheckNotNativeAnonymous(); return false; #else return HasFlag(NODE_IS_IN_ANONYMOUS_SUBTREE); #endif } /** + * Returns true if |this| node is the common ancestor of the start/end + * nodes of a Range in a Selection or a descendant of such a common ancestor. + * This node is definitely not selected when |false| is returned, but it may + * or may not be selected when |true| is returned. + */ + bool IsSelectionDescendant() const + { + return IsDescendantOfCommonAncestorForRangeInSelection() || + IsCommonAncestorForRangeInSelection(); + } + + /** * Get the root content of an editor. So, this node must be a descendant of * an editor. Note that this should be only used for getting input or textarea * editor's root content. This method doesn't support HTML editors. */ nsIContent* GetTextEditorRootContent(nsIEditor** aEditor = nsnull); /** * Get the nearest selection root, ie. the node that will be selected if the @@ -1196,16 +1208,21 @@ private: // documents with different id mappings. ElementHasID, // Set if the element might have inline style. ElementMayHaveStyle, // Set if the element has a name attribute set. ElementHasName, // Set if the element might have a contenteditable attribute set. ElementMayHaveContentEditableAttr, + // Set if the node is the common ancestor of the start/end nodes of a Range + // that is in a Selection. + NodeIsCommonAncestorForRangeInSelection, + // Set if the node is a descendant of a node with the above bit set. + NodeIsDescendantOfCommonAncestorForRangeInSelection, // Guard value BooleanFlagCount };