Bug 1313429 - WIP, not looking for reviews. Add mac touchbar buttons for a few functions. draft
authorErica Wright <ewright@mozilla.com>
Wed, 21 Jun 2017 15:33:45 -0700
changeset 616165 a3b2aaa0ff4aebfa4da926562723c9c16975a3bd
parent 604819 4bd7db49d22847111dff9c1dd63ed573903faa5b
child 639408 e63eb239e19f31d64a45cdd957c684eed65673f1
push id70615
push userbmo:ewright@mozilla.com
push dateWed, 26 Jul 2017 20:03:50 +0000
bugs1313429
milestone56.0a1
Bug 1313429 - WIP, not looking for reviews. Add mac touchbar buttons for a few functions. MozReview-Commit-ID: D85ZALavRjL
browser/base/content/test/static/browser_all_files_referenced.js
fx.xcodeproj/project.pbxproj
fx.xcodeproj/project.xcworkspace/contents.xcworkspacedata
fx.xcodeproj/project.xcworkspace/xcuserdata/ewright.xcuserdatad/UserInterfaceState.xcuserstate
fx.xcodeproj/xcuserdata/ewright.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
fx.xcodeproj/xcuserdata/ewright.xcuserdatad/xcschemes/debug.xcscheme
fx.xcodeproj/xcuserdata/ewright.xcuserdatad/xcschemes/xcschememanagement.plist
widget/cocoa/TouchBar.h
widget/cocoa/TouchBar.mm
widget/cocoa/cursors/arrowhead-right-16.png
widget/cocoa/cursors/back-16.png
widget/cocoa/cursors/bookmark.png
widget/cocoa/cursors/close-16.png
widget/cocoa/cursors/customize-16.png
widget/cocoa/cursors/fullscreen-16.png
widget/cocoa/cursors/fullscreen-exit-16.png
widget/cocoa/cursors/home-16.png
widget/cocoa/cursors/print.png
widget/cocoa/cursors/private.png
widget/cocoa/cursors/readermode-16.png
widget/cocoa/cursors/refresh-16.png
widget/cocoa/cursors/search-16.png
widget/cocoa/cursors/stop-16.png
widget/cocoa/cursors/tab-16.png
widget/cocoa/cursors/tabNew.png
widget/cocoa/cursors/windowNew.png
widget/cocoa/moz.build
widget/cocoa/nsAppShell.mm
widget/cocoa/nsCocoaWindow.h
widget/cocoa/nsCocoaWindow.mm
widget/cocoa/nsPrintDialogX.mm
--- a/browser/base/content/test/static/browser_all_files_referenced.js
+++ b/browser/base/content/test/static/browser_all_files_referenced.js
@@ -25,17 +25,17 @@ var gExceptionPaths = [
 
   // browser/extensions/pdfjs/content/build/pdf.js#1999
   "resource://pdf.js/web/images/",
 ];
 
 // These are not part of the omni.ja file, so we find them only when running
 // the test on a non-packaged build.
 if (AppConstants.platform == "macosx")
-  gExceptionPaths.push("resource://gre/res/cursors/");
+  gExceptionPaths.push("resource://gre/res/cursors/").push("resource://gre/res/touchbar/");
 
 var whitelist = [
   // browser/extensions/pdfjs/content/PdfStreamConverter.jsm
   {file: "chrome://pdf.js/locale/chrome.properties"},
   {file: "chrome://pdf.js/locale/viewer.properties"},
 
   // security/manager/pki/resources/content/device_manager.js
   {file: "chrome://pippki/content/load_device.xul"},
new file mode 100644
--- /dev/null
+++ b/fx.xcodeproj/project.pbxproj
@@ -0,0 +1,224 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXFileReference section */
+		2C84CB451F02F7DE00633810 /* accessible */ = {isa = PBXFileReference; lastKnownFileType = folder; path = accessible; sourceTree = "<group>"; };
+		2C84CB461F02F7DE00633810 /* aclocal.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; path = aclocal.m4; sourceTree = "<group>"; };
+		2C84CB471F02F7DE00633810 /* addon-sdk */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "addon-sdk"; sourceTree = "<group>"; };
+		2C84CB481F02F7DE00633810 /* Android.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Android.mk; sourceTree = "<group>"; };
+		2C84CB491F02F7DE00633810 /* AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = AUTHORS; sourceTree = "<group>"; };
+		2C84CB4A1F02F7DE00633810 /* browser */ = {isa = PBXFileReference; lastKnownFileType = folder; path = browser; sourceTree = "<group>"; };
+		2C84CB4B1F02F7DE00633810 /* build */ = {isa = PBXFileReference; lastKnownFileType = folder; path = build; sourceTree = "<group>"; };
+		2C84CB4C1F02F7DE00633810 /* build.gradle */ = {isa = PBXFileReference; lastKnownFileType = text; path = build.gradle; sourceTree = "<group>"; };
+		2C84CB4D1F02F7DE00633810 /* caps */ = {isa = PBXFileReference; lastKnownFileType = folder; path = caps; sourceTree = "<group>"; };
+		2C84CB4E1F02F7DE00633810 /* chrome */ = {isa = PBXFileReference; lastKnownFileType = folder; path = chrome; sourceTree = "<group>"; };
+		2C84CB4F1F02F7DE00633810 /* client.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = client.mk; sourceTree = "<group>"; };
+		2C84CB501F02F7DE00633810 /* client.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = client.py; sourceTree = "<group>"; };
+		2C84CB511F02F7DE00633810 /* CLOBBER */ = {isa = PBXFileReference; lastKnownFileType = text; path = CLOBBER; sourceTree = "<group>"; };
+		2C84CB521F02F7DE00633810 /* config */ = {isa = PBXFileReference; lastKnownFileType = folder; path = config; sourceTree = "<group>"; };
+		2C84CB531F02F7DE00633810 /* configure */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; };
+		2C84CB541F02F7DE00633810 /* configure.in */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = configure.in; sourceTree = "<group>"; };
+		2C84CB551F02F7DE00633810 /* configure.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = configure.py; sourceTree = "<group>"; };
+		2C84CB561F02F7DE00633810 /* db */ = {isa = PBXFileReference; lastKnownFileType = folder; path = db; sourceTree = "<group>"; };
+		2C84CB571F02F7DE00633810 /* devtools */ = {isa = PBXFileReference; lastKnownFileType = folder; path = devtools; sourceTree = "<group>"; };
+		2C84CB581F02F7DE00633810 /* docshell */ = {isa = PBXFileReference; lastKnownFileType = folder; path = docshell; sourceTree = "<group>"; };
+		2C84CB591F02F7DE00633810 /* dom */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dom; sourceTree = "<group>"; };
+		2C84CB5A1F02F7DE00633810 /* editor */ = {isa = PBXFileReference; lastKnownFileType = folder; path = editor; sourceTree = "<group>"; };
+		2C84CB5B1F02F7DE00633810 /* embedding */ = {isa = PBXFileReference; lastKnownFileType = folder; path = embedding; sourceTree = "<group>"; };
+		2C84CB5C1F02F7DE00633810 /* extensions */ = {isa = PBXFileReference; lastKnownFileType = folder; path = extensions; sourceTree = "<group>"; };
+		2C84CB5D1F02F7DE00633810 /* gfx */ = {isa = PBXFileReference; lastKnownFileType = folder; path = gfx; sourceTree = "<group>"; };
+		2C84CB5E1F02F7DE00633810 /* GNUmakefile */ = {isa = PBXFileReference; lastKnownFileType = text; path = GNUmakefile; sourceTree = "<group>"; };
+		2C84CB5F1F02F7DE00633810 /* gradle */ = {isa = PBXFileReference; lastKnownFileType = folder; path = gradle; sourceTree = "<group>"; };
+		2C84CB601F02F7DE00633810 /* gradle.properties */ = {isa = PBXFileReference; lastKnownFileType = text; path = gradle.properties; sourceTree = "<group>"; };
+		2C84CB611F02F7DE00633810 /* gradlew */ = {isa = PBXFileReference; lastKnownFileType = text; path = gradlew; sourceTree = "<group>"; };
+		2C84CB621F02F7DE00633810 /* hal */ = {isa = PBXFileReference; lastKnownFileType = folder; path = hal; sourceTree = "<group>"; };
+		2C84CB631F02F7DE00633810 /* image */ = {isa = PBXFileReference; lastKnownFileType = folder; path = image; sourceTree = "<group>"; };
+		2C84CB641F02F7DE00633810 /* intl */ = {isa = PBXFileReference; lastKnownFileType = folder; path = intl; sourceTree = "<group>"; };
+		2C84CB651F02F7DE00633810 /* ipc */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ipc; sourceTree = "<group>"; };
+		2C84CB661F02F7DE00633810 /* js */ = {isa = PBXFileReference; lastKnownFileType = folder; path = js; sourceTree = "<group>"; };
+		2C84CB671F02F7DE00633810 /* layout */ = {isa = PBXFileReference; lastKnownFileType = folder; path = layout; sourceTree = "<group>"; };
+		2C84CB681F02F7DE00633810 /* LEGAL */ = {isa = PBXFileReference; lastKnownFileType = text; path = LEGAL; sourceTree = "<group>"; };
+		2C84CB691F02F7DE00633810 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
+		2C84CB6A1F02F7DE00633810 /* mach */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = mach; sourceTree = "<group>"; };
+		2C84CB6B1F02F7DE00633810 /* Makefile.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.in; sourceTree = "<group>"; };
+		2C84CB6C1F02F7DE00633810 /* media */ = {isa = PBXFileReference; lastKnownFileType = folder; path = media; sourceTree = "<group>"; };
+		2C84CB6D1F02F7DE00633810 /* memory */ = {isa = PBXFileReference; lastKnownFileType = folder; path = memory; sourceTree = "<group>"; };
+		2C84CB6E1F02F7DE00633810 /* mfbt */ = {isa = PBXFileReference; lastKnownFileType = folder; path = mfbt; sourceTree = "<group>"; };
+		2C84CB6F1F02F7DE00633810 /* mobile */ = {isa = PBXFileReference; lastKnownFileType = folder; path = mobile; sourceTree = "<group>"; };
+		2C84CB701F02F7DE00633810 /* modules */ = {isa = PBXFileReference; lastKnownFileType = folder; path = modules; sourceTree = "<group>"; };
+		2C84CB711F02F7DE00633810 /* moz.build */ = {isa = PBXFileReference; lastKnownFileType = text; path = moz.build; sourceTree = "<group>"; };
+		2C84CB721F02F7DE00633810 /* moz.configure */ = {isa = PBXFileReference; lastKnownFileType = text; path = moz.configure; sourceTree = "<group>"; };
+		2C84CB731F02F7DE00633810 /* mozglue */ = {isa = PBXFileReference; lastKnownFileType = folder; path = mozglue; sourceTree = "<group>"; };
+		2C84CB741F02F7DE00633810 /* mozilla-config.h.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = "mozilla-config.h.in"; sourceTree = "<group>"; };
+		2C84CB751F02F7DE00633810 /* netwerk */ = {isa = PBXFileReference; lastKnownFileType = folder; path = netwerk; sourceTree = "<group>"; };
+		2C84CB761F02F7DE00633810 /* npm-shrinkwrap.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "npm-shrinkwrap.json"; sourceTree = "<group>"; };
+		2C84CB771F02F7DE00633810 /* nsprpub */ = {isa = PBXFileReference; lastKnownFileType = folder; path = nsprpub; sourceTree = "<group>"; };
+		2C84CB781F02F7DE00633810 /* old-configure */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "old-configure"; sourceTree = "<group>"; };
+		2C84CB791F02F7DE00633810 /* old-configure.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = "old-configure.in"; sourceTree = "<group>"; };
+		2C84CB7A1F02F7DE00633810 /* other-licenses */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "other-licenses"; sourceTree = "<group>"; };
+		2C84CB7B1F02F7DE00633810 /* package.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = package.json; sourceTree = "<group>"; };
+		2C84CB7C1F02F7DE00633810 /* parser */ = {isa = PBXFileReference; lastKnownFileType = folder; path = parser; sourceTree = "<group>"; };
+		2C84CB7D1F02F7DE00633810 /* probes */ = {isa = PBXFileReference; lastKnownFileType = folder; path = probes; sourceTree = "<group>"; };
+		2C84CB7E1F02F7DE00633810 /* python */ = {isa = PBXFileReference; lastKnownFileType = folder; path = python; sourceTree = "<group>"; };
+		2C84CB7F1F02F7DE00633810 /* rdf */ = {isa = PBXFileReference; lastKnownFileType = folder; path = rdf; sourceTree = "<group>"; };
+		2C84CB801F02F7DE00633810 /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = "<group>"; };
+		2C84CB811F02F7DE00633810 /* security */ = {isa = PBXFileReference; lastKnownFileType = folder; path = security; sourceTree = "<group>"; };
+		2C84CB821F02F7DE00633810 /* services */ = {isa = PBXFileReference; lastKnownFileType = folder; path = services; sourceTree = "<group>"; };
+		2C84CB831F02F7DE00633810 /* servo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = servo; sourceTree = "<group>"; };
+		2C84CB841F02F7DE00633810 /* settings.gradle */ = {isa = PBXFileReference; lastKnownFileType = text; path = settings.gradle; sourceTree = "<group>"; };
+		2C84CB851F02F7DE00633810 /* startupcache */ = {isa = PBXFileReference; lastKnownFileType = folder; path = startupcache; sourceTree = "<group>"; };
+		2C84CB861F02F7DE00633810 /* storage */ = {isa = PBXFileReference; lastKnownFileType = folder; path = storage; sourceTree = "<group>"; };
+		2C84CB871F02F7DE00633810 /* taskcluster */ = {isa = PBXFileReference; lastKnownFileType = folder; path = taskcluster; sourceTree = "<group>"; };
+		2C84CB881F02F7DE00633810 /* test.mozbuild */ = {isa = PBXFileReference; lastKnownFileType = text; path = test.mozbuild; sourceTree = "<group>"; };
+		2C84CB891F02F7DE00633810 /* testing */ = {isa = PBXFileReference; lastKnownFileType = folder; path = testing; sourceTree = "<group>"; };
+		2C84CB8A1F02F7DE00633810 /* third_party */ = {isa = PBXFileReference; lastKnownFileType = folder; path = third_party; sourceTree = "<group>"; };
+		2C84CB8B1F02F7DE00633810 /* toolkit */ = {isa = PBXFileReference; lastKnownFileType = folder; path = toolkit; sourceTree = "<group>"; };
+		2C84CB8C1F02F7DE00633810 /* tools */ = {isa = PBXFileReference; lastKnownFileType = folder; path = tools; sourceTree = "<group>"; };
+		2C84CB8D1F02F7DE00633810 /* uriloader */ = {isa = PBXFileReference; lastKnownFileType = folder; path = uriloader; sourceTree = "<group>"; };
+		2C84CB8E1F02F7DE00633810 /* view */ = {isa = PBXFileReference; lastKnownFileType = folder; path = view; sourceTree = "<group>"; };
+		2C84CB8F1F02F7DE00633810 /* widget */ = {isa = PBXFileReference; lastKnownFileType = folder; path = widget; sourceTree = "<group>"; };
+		2C84CB901F02F7DE00633810 /* xpcom */ = {isa = PBXFileReference; lastKnownFileType = folder; path = xpcom; sourceTree = "<group>"; };
+		2C84CB911F02F7DE00633810 /* xpfe */ = {isa = PBXFileReference; lastKnownFileType = folder; path = xpfe; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+		2C4C7A3F1F02F4FF00F3EC54 = {
+			isa = PBXGroup;
+			children = (
+				2C84CB451F02F7DE00633810 /* accessible */,
+				2C84CB461F02F7DE00633810 /* aclocal.m4 */,
+				2C84CB471F02F7DE00633810 /* addon-sdk */,
+				2C84CB481F02F7DE00633810 /* Android.mk */,
+				2C84CB491F02F7DE00633810 /* AUTHORS */,
+				2C84CB4A1F02F7DE00633810 /* browser */,
+				2C84CB4B1F02F7DE00633810 /* build */,
+				2C84CB4C1F02F7DE00633810 /* build.gradle */,
+				2C84CB4D1F02F7DE00633810 /* caps */,
+				2C84CB4E1F02F7DE00633810 /* chrome */,
+				2C84CB4F1F02F7DE00633810 /* client.mk */,
+				2C84CB501F02F7DE00633810 /* client.py */,
+				2C84CB511F02F7DE00633810 /* CLOBBER */,
+				2C84CB521F02F7DE00633810 /* config */,
+				2C84CB531F02F7DE00633810 /* configure */,
+				2C84CB541F02F7DE00633810 /* configure.in */,
+				2C84CB551F02F7DE00633810 /* configure.py */,
+				2C84CB561F02F7DE00633810 /* db */,
+				2C84CB571F02F7DE00633810 /* devtools */,
+				2C84CB581F02F7DE00633810 /* docshell */,
+				2C84CB591F02F7DE00633810 /* dom */,
+				2C84CB5A1F02F7DE00633810 /* editor */,
+				2C84CB5B1F02F7DE00633810 /* embedding */,
+				2C84CB5C1F02F7DE00633810 /* extensions */,
+				2C84CB5D1F02F7DE00633810 /* gfx */,
+				2C84CB5E1F02F7DE00633810 /* GNUmakefile */,
+				2C84CB5F1F02F7DE00633810 /* gradle */,
+				2C84CB601F02F7DE00633810 /* gradle.properties */,
+				2C84CB611F02F7DE00633810 /* gradlew */,
+				2C84CB621F02F7DE00633810 /* hal */,
+				2C84CB631F02F7DE00633810 /* image */,
+				2C84CB641F02F7DE00633810 /* intl */,
+				2C84CB651F02F7DE00633810 /* ipc */,
+				2C84CB661F02F7DE00633810 /* js */,
+				2C84CB671F02F7DE00633810 /* layout */,
+				2C84CB681F02F7DE00633810 /* LEGAL */,
+				2C84CB691F02F7DE00633810 /* LICENSE */,
+				2C84CB6A1F02F7DE00633810 /* mach */,
+				2C84CB6B1F02F7DE00633810 /* Makefile.in */,
+				2C84CB6C1F02F7DE00633810 /* media */,
+				2C84CB6D1F02F7DE00633810 /* memory */,
+				2C84CB6E1F02F7DE00633810 /* mfbt */,
+				2C84CB6F1F02F7DE00633810 /* mobile */,
+				2C84CB701F02F7DE00633810 /* modules */,
+				2C84CB711F02F7DE00633810 /* moz.build */,
+				2C84CB721F02F7DE00633810 /* moz.configure */,
+				2C84CB731F02F7DE00633810 /* mozglue */,
+				2C84CB741F02F7DE00633810 /* mozilla-config.h.in */,
+				2C84CB751F02F7DE00633810 /* netwerk */,
+				2C84CB761F02F7DE00633810 /* npm-shrinkwrap.json */,
+				2C84CB771F02F7DE00633810 /* nsprpub */,
+				2C84CB781F02F7DE00633810 /* old-configure */,
+				2C84CB791F02F7DE00633810 /* old-configure.in */,
+				2C84CB7A1F02F7DE00633810 /* other-licenses */,
+				2C84CB7B1F02F7DE00633810 /* package.json */,
+				2C84CB7C1F02F7DE00633810 /* parser */,
+				2C84CB7D1F02F7DE00633810 /* probes */,
+				2C84CB7E1F02F7DE00633810 /* python */,
+				2C84CB7F1F02F7DE00633810 /* rdf */,
+				2C84CB801F02F7DE00633810 /* README.txt */,
+				2C84CB811F02F7DE00633810 /* security */,
+				2C84CB821F02F7DE00633810 /* services */,
+				2C84CB831F02F7DE00633810 /* servo */,
+				2C84CB841F02F7DE00633810 /* settings.gradle */,
+				2C84CB851F02F7DE00633810 /* startupcache */,
+				2C84CB861F02F7DE00633810 /* storage */,
+				2C84CB871F02F7DE00633810 /* taskcluster */,
+				2C84CB881F02F7DE00633810 /* test.mozbuild */,
+				2C84CB891F02F7DE00633810 /* testing */,
+				2C84CB8A1F02F7DE00633810 /* third_party */,
+				2C84CB8B1F02F7DE00633810 /* toolkit */,
+				2C84CB8C1F02F7DE00633810 /* tools */,
+				2C84CB8D1F02F7DE00633810 /* uriloader */,
+				2C84CB8E1F02F7DE00633810 /* view */,
+				2C84CB8F1F02F7DE00633810 /* widget */,
+				2C84CB901F02F7DE00633810 /* xpcom */,
+				2C84CB911F02F7DE00633810 /* xpfe */,
+			);
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+		2C4C7A401F02F4FF00F3EC54 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0830;
+			};
+			buildConfigurationList = 2C4C7A431F02F4FF00F3EC54 /* Build configuration list for PBXProject "fx" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 2C4C7A3F1F02F4FF00F3EC54;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+			);
+		};
+/* End PBXProject section */
+
+/* Begin XCBuildConfiguration section */
+		2C4C7A441F02F4FF00F3EC54 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Debug;
+		};
+		2C4C7A451F02F4FF00F3EC54 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		2C4C7A431F02F4FF00F3EC54 /* Build configuration list for PBXProject "fx" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				2C4C7A441F02F4FF00F3EC54 /* Debug */,
+				2C4C7A451F02F4FF00F3EC54 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 2C4C7A401F02F4FF00F3EC54 /* Project object */;
+}
new file mode 100644
--- /dev/null
+++ b/fx.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:fx.xcodeproj">
+   </FileRef>
+</Workspace>
new file mode 100644
index 0000000000000000000000000000000000000000..222a8cadd9d54a403c503deb64e0a02eb28d2a36
GIT binary patch
literal 15680
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
U%QC)&%`p7Gf)dc}k7fD)0GMge&;S4c
new file mode 100644
--- /dev/null
+++ b/fx.xcodeproj/xcuserdata/ewright.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+   type = "1"
+   version = "2.0">
+   <Breakpoints>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "widget/cocoa/TouchBar.mm"
+            timestampString = "520288877.001294"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "36"
+            endingLineNumber = "36">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "widget/cocoa/TouchBar.mm"
+            timestampString = "520289565.052704"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "88"
+            endingLineNumber = "88"
+            landmarkName = "@implementation TouchBar"
+            landmarkType = "3">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "widget/cocoa/TouchBar.mm"
+            timestampString = "520289585.973992"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "90"
+            endingLineNumber = "90"
+            landmarkName = "-scrubber:viewForItemAtIndex:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+   </Breakpoints>
+</Bucket>
new file mode 100644
--- /dev/null
+++ b/fx.xcodeproj/xcuserdata/ewright.xcuserdatad/xcschemes/debug.xcscheme
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0830"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = ""
+      selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "YES"
+      customWorkingDirectory = "/Users/ewright/src/firefox/obj-x86_64-apple-darwin16.5.0/dist/Nightly.app/"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <PathRunnable
+         runnableDebuggingMode = "0"
+         BundleIdentifier = "org.mozilla.nightly"
+         FilePath = "/Users/ewright/src/firefox/obj-x86_64-apple-darwin16.5.0/dist/Nightly.app">
+      </PathRunnable>
+      <CommandLineArguments>
+         <CommandLineArgument
+            argument = "-P Testing"
+            isEnabled = "YES">
+         </CommandLineArgument>
+         <CommandLineArgument
+            argument = "-no-remote"
+            isEnabled = "YES">
+         </CommandLineArgument>
+      </CommandLineArguments>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
new file mode 100644
--- /dev/null
+++ b/fx.xcodeproj/xcuserdata/ewright.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>debug.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+	</dict>
+</dict>
+</plist>
new file mode 100644
--- /dev/null
+++ b/widget/cocoa/TouchBar.h
@@ -0,0 +1,19 @@
+#ifndef TouchBar_h_
+#define TouchBar_h_
+
+#import <Cocoa/Cocoa.h>
+
+@interface TouchBar : NSTouchBar<NSTouchBarDelegate, NSScrubberDelegate, NSScrubberDataSource>
+- (id)init;
+- (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar
+       makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier;
+- (NSInteger)numberOfItemsForScrubber:(NSScrubber *)scrubber;
+
+- (void)scrubber:(NSScrubber *)scrubber didSelectItemAtIndex:(NSInteger)selectedIndex;
+- (__kindof NSScrubberItemView *)scrubber:(NSScrubber *)scrubber viewForItemAtIndex:(NSInteger)index;
+
++ (NSImage *)cocoaWithImageNamed:(NSString *)anImage;
+
+@end
+
+#endif // TouchBar_h_
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/widget/cocoa/TouchBar.mm
@@ -0,0 +1,190 @@
+#include "TouchBar.h"
+#include "nsMenuItemX.h"
+#include "nsMenuUtilsX.h"
+#include "nsMenuBarX.h"
+#include "nsDirectoryServiceDefs.h"
+#include "nsIWindowMediator.h"
+#include "nsIDocShell.h"
+#include "nsISimpleEnumerator.h"
+#include "nsISupports.h"
+#include "nsIXULWindow.h"
+
+static NSTouchBarItemIdentifier NewWindowIdentifier = @"cmd_newNavigator";
+static NSTouchBarItemIdentifier NewTabIdentifier = @"cmd_newNavigatorTabNoEvent";
+static NSTouchBarItemIdentifier CloseWindowIdentifier = @"cmd_closeWindow";
+static NSTouchBarItemIdentifier CustomizeToolbarsIdentifier = @"cmd_CustomizeToolbars";
+static NSTouchBarItemIdentifier QuitApplicationIdentifier = @"cmd_quitApplication";
+static NSTouchBarItemIdentifier PageSourceIdentifier = @"View:PageSource";
+static NSTouchBarItemIdentifier FullScreenIdentifier = @"View:FullScreen";
+static NSTouchBarItemIdentifier ReaderViewIdentifier = @"View:ReaderView";
+static NSTouchBarItemIdentifier FindIdentifier = @"cmd_find";
+static NSTouchBarItemIdentifier AddBookmarkAsIdentifier = @"Browser:AddBookmarkAs";
+static NSTouchBarItemIdentifier HomeIdentifier = @"Browser:Home";
+static NSTouchBarItemIdentifier BackIdentifier = @"Browser:Back";
+static NSTouchBarItemIdentifier StopIdentifier = @"Browser:Stop";
+static NSTouchBarItemIdentifier ReloadIdentifier = @"Browser:Reload";
+static NSTouchBarItemIdentifier NextTabIdentifier = @"Browser:NextTab";
+
+static NSTouchBarItemIdentifier RestoreLastSessionIdentifier = @"Browser:RestoreLastSession";
+
+static nsLiteralString xulIdArray[34] = {NS_LITERAL_STRING("cmd_newNavigator"),NS_LITERAL_STRING("cmd_newNavigatorTabNoEvent"),
+NS_LITERAL_STRING("cmd_closeWindow"),NS_LITERAL_STRING("cmd_CustomizeToolbars"),NS_LITERAL_STRING("cmd_quitApplication"),
+NS_LITERAL_STRING("View:PageSource"),NS_LITERAL_STRING("View:FullScreen"),NS_LITERAL_STRING("View:ReaderView"),
+NS_LITERAL_STRING("cmd_find"),NS_LITERAL_STRING("Browser:AddBookmarkAs"),NS_LITERAL_STRING("Browser:Home"),
+NS_LITERAL_STRING("Browser:Back"),NS_LITERAL_STRING("Browser:Forward"),NS_LITERAL_STRING("Browser:Stop"),
+NS_LITERAL_STRING("Browser:Reload"),NS_LITERAL_STRING("Browser:NextTab"),NS_LITERAL_STRING("Browser:PrevTab"),
+NS_LITERAL_STRING("Browser:ShowAllTabs"),NS_LITERAL_STRING("cmd_fullZoomReduce"),NS_LITERAL_STRING("cmd_fullZoomEnlarge"),
+NS_LITERAL_STRING("cmd_fullZoomReset"),NS_LITERAL_STRING("Browser:OpenLocation"),NS_LITERAL_STRING("Browser:RestoreLastSession"),
+NS_LITERAL_STRING("Tools:Search"),NS_LITERAL_STRING("Tools:Downloads"),NS_LITERAL_STRING("Tools:Addons"),
+NS_LITERAL_STRING("History:UndoCloseTab"),NS_LITERAL_STRING("History:UndoCloseWindow"),NS_LITERAL_STRING("Social:SharePage"),
+NS_LITERAL_STRING("Browser:ShowAllBookmarks"),NS_LITERAL_STRING("Browser:ShowAllHistory"),NS_LITERAL_STRING("Tools:Addons"),
+NS_LITERAL_STRING("viewTabsSidebar"),NS_LITERAL_STRING("Tools:Downloads")};
+
+@implementation TouchBar
+
+- (id)init
+{
+  if ((self = [super init])) {
+    self.delegate = self;
+    self.defaultItemIdentifiers = @[BackIdentifier, CustomizeToolbarsIdentifier, ReloadIdentifier, 
+    FullScreenIdentifier, ReaderViewIdentifier, FindIdentifier, NewWindowIdentifier, NewTabIdentifier, NSTouchBarItemIdentifierOtherItemsProxy];
+    
+    self.customizationAllowedItemIdentifiers = @[NewTabIdentifier, NewWindowIdentifier, BackIdentifier, CloseWindowIdentifier, CustomizeToolbarsIdentifier,
+    QuitApplicationIdentifier, PageSourceIdentifier, FullScreenIdentifier, ReaderViewIdentifier, FindIdentifier, AddBookmarkAsIdentifier,
+    HomeIdentifier, StopIdentifier, ReloadIdentifier, NextTabIdentifier];
+  }
+  return self;
+}
+
+- (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier
+{
+  NSString *buttonString = @"";
+  NSImage* image = nil;
+  NSInteger index = 0;
+  NSButton* theButton = nil;
+
+  if ([identifier isEqualToString:NewWindowIdentifier]) {
+    buttonString = @"NewWin";
+    index = 0;
+    image = [TouchBar cocoaWithImageNamed:@"windowNew"];
+  } else if ([identifier isEqualToString:NewTabIdentifier]) {
+    buttonString = @"New Tab";
+    index = 1;
+    image = [TouchBar cocoaWithImageNamed:@"tabNew"];
+  } else if ([identifier isEqualToString:CloseWindowIdentifier]) {
+    buttonString = @"CloseWin";
+    index = 2;
+    image = [TouchBar cocoaWithImageNamed:@"close-16"];
+  } else if ([identifier isEqualToString:CustomizeToolbarsIdentifier]){
+    buttonString = @"Customize";
+    index = 3;
+    image = [TouchBar cocoaWithImageNamed:@"customize-16"];
+  } else if ([identifier isEqualToString:QuitApplicationIdentifier]){
+    buttonString = @"Quit";
+    index = 4;
+    // image = [TouchBar cocoaWithImageNamed:@"print"];
+  } else if ([identifier isEqualToString:PageSourceIdentifier]){
+    buttonString = @"Source";
+    index = 5;
+    // image = [TouchBar cocoaWithImageNamed:@"print"];
+  }  else if ([identifier isEqualToString:FullScreenIdentifier]){
+    buttonString = @"Fullscr";
+    index = 6;
+    image = [TouchBar cocoaWithImageNamed:@"fullscreen-16"];
+  } else if ([identifier isEqualToString:ReaderViewIdentifier]){
+    buttonString = @"Reader";
+    index = 7;
+    image = [TouchBar cocoaWithImageNamed:@"readermode-16"];
+  } else if ([identifier isEqualToString:FindIdentifier]){
+    buttonString = @"Find";
+    index = 8;
+    image = [TouchBar cocoaWithImageNamed:@"search-16"];
+  } else if ([identifier isEqualToString:AddBookmarkAsIdentifier]){
+    buttonString = @"AddBmkAs";
+    index = 9;
+    image = [TouchBar cocoaWithImageNamed:@"bookmark"];
+  } else if ([identifier isEqualToString:HomeIdentifier]){
+    buttonString = @"Home";
+    index = 10;
+    image = [TouchBar cocoaWithImageNamed:@"home-16"];
+  } else if ([identifier isEqualToString:BackIdentifier]){
+    buttonString = @"Back";
+    index = 11;
+    image = [TouchBar cocoaWithImageNamed:@"back-16"];
+  } else if ([identifier isEqualToString:StopIdentifier]){
+    buttonString = @"Stop";
+    index = 13;
+    image = [TouchBar cocoaWithImageNamed:@"stop-16"];
+  } else if ([identifier isEqualToString:ReloadIdentifier]){
+    buttonString = @"Reload";
+    index = 14;
+    image = [TouchBar cocoaWithImageNamed:@"refresh-16"];
+  } else if ([identifier isEqualToString:NextTabIdentifier]){
+    buttonString = @"nexttab";
+    index = 15;
+    image = [TouchBar cocoaWithImageNamed:@"arrowhead-right-16"];
+  }
+
+  if(image == nil) {
+    NSLog(@"nil image");
+    theButton = [NSButton buttonWithTitle:buttonString target:self action:@selector(buttonPressed:)];
+  } else {
+    NSLog(@"IMAGE");
+    theButton = [NSButton buttonWithImage:image target:self action:@selector(buttonPressed:)];
+    [theButton setImagePosition:NSImageOnly];
+  }
+
+  NSCustomTouchBarItem *customItemForButton =
+  [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
+  theButton.tag = index;
+
+  customItemForButton.view = theButton;
+  return customItemForButton;
+}
+
+- (void)buttonPressed:(NSButton *)theButton
+{
+  nsresult rv;
+  nsCOMPtr<nsIWindowMediator> wm(
+      do_GetService(NS_WINDOWMEDIATOR_CONTRACTID, &rv));
+
+  nsCOMPtr<nsISimpleEnumerator> windowList;
+  wm->GetXULWindowEnumerator(nullptr, getter_AddRefs(windowList));
+
+  nsCOMPtr<nsISupports> nextWindow = nullptr;
+  windowList->GetNext(getter_AddRefs(nextWindow));
+
+  nsCOMPtr<nsIXULWindow> xulWindow(do_QueryInterface(nextWindow));
+
+  nsCOMPtr<nsIDocShell> xulWinShell;
+  xulWindow->GetDocShell(getter_AddRefs(xulWinShell));
+
+  nsIDocument* doc = xulWinShell->GetDocument();
+  dom::Element* aDomElement = doc->GetElementById(xulIdArray[theButton.tag]);
+
+  nsMenuUtilsX::DispatchCommandTo(aDomElement);
+}
+
++ (NSImage *)cocoaWithImageNamed:(NSString *)imageName
+{
+  nsCOMPtr<nsIFile> resDir;
+  nsAutoCString resPath;
+  NSString* pathToImage;
+
+  nsresult rv = NS_GetSpecialDirectory(NS_GRE_DIR, getter_AddRefs(resDir));
+  resDir->AppendNative(NS_LITERAL_CSTRING("res"));
+  resDir->AppendNative(NS_LITERAL_CSTRING("cursors"));
+
+  rv = resDir->GetNativePath(resPath);
+
+  pathToImage = [NSString stringWithUTF8String:(const char*)resPath.get()];
+  pathToImage = [pathToImage stringByAppendingPathComponent:imageName];
+  pathToImage = [pathToImage stringByAppendingPathExtension:@"png"];
+  NSImage* image = [[NSImage alloc] initWithContentsOfFile:pathToImage];
+
+  if(image == nil) {
+    NSLog(@"nil image");
+  }
+  return image;
+}
+@end
new file mode 100644
index 0000000000000000000000000000000000000000..ecc2810e4503a3a9271713a23c51493d537a22a7
GIT binary patch
literal 866
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%Gkil$Pl6(NewKL^wDAok_7ajX~2#Ps1cT)?6__{Nl^wSu})7H
z#}Es_<OGQ+5B~rEU)}ISLZExnQ-=k|f*p96rZ>zeac-E!((uDXp!tBW!Zf9ust&#i
z&gU2mIVR+Ga0D2ikXCTmrZ~yrtoZ>qhQn-kwS8VNMf}*`kaU0HqyHOEJQicRrPZ2a
zJwdl2+H}^L1DR}=EE&HG71$Uz316yP@NBY!PnDJnH`lFV#^XxsnizT(%?BlXPgg&e
IbxsLQ0IHV|O#lD@
new file mode 100644
index 0000000000000000000000000000000000000000..f4e456091789353d49b2b02ac2cf21633cb39021
GIT binary patch
literal 868
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%Gkil)B>U%NewKL^wDAok_7ajX~2#Ps1cT)?6_u^JXrutV%?rD
zjv*F;M<+XSH7E$U>RL4j>b{bhyU+FZqD8K=UzvPk6N<5NGx;Fd`}4fv)fxJSEW;NI
ze$D!qeD9>tWUhvVuG1|#S#M@A99>vho2?fdK5g&yi)mcOJls1k&uF@(nEt4V|5jq+
zlGG>txydn^noJur+=SS(?m77>yv?8RVg8GCoAPIVyDUGs{m3)vQy-5BIK;Dj0VRD;
LS3j3^P6<r_fJhdM
new file mode 100644
index 0000000000000000000000000000000000000000..fdf1ee28a3e5f1d51cd9ff8b7ef728574480e180
GIT binary patch
literal 1555
zc%17D@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$+2c&V64e>b`J1#c2)=|%1_J8No8Qr
zn3$Z9pyjEfaUwA>A>qVXZB4GC@}Q26o}h&NhYy@Ra9H6;!cm2JGh$*MNC-SQ+#p=D
z``7`FMf$Is&Uk(PQ+avW)|!7}X6t7bg{fNY_}a)=?v+(&#LTSBK4I>hpgD86Q=T*2
zv^vS^s_O8KM<IIqo+S)N>=;wJMHpo{QtmTuysY?!U!hEB#@QoGVZuUBcv8F>ZZdfa
zY-8(~%a<74aO0$8r>4U;_7i#?(gzwYA9g)>=RnZ)i4D6w*>+kkHL!MAcy#hCaVef6
zc7f9d6$U#DGz?}KOBh5Ly)d$vwj^vygNW60@er}pW$9BiESQ|lLJwNnZ(p!QWvhq#
zL1X<$fA@nY4qRYZ!Y7h0u-Klx(KlVhx?kXQ{D}hzE6*G_aHm<od)Bc78*2HPn~!L=
z%s6Gk##Wcj)|UI6OQ>7uAz%8RV@@6MbJB8H5<goQ8f>`t`~UyVQq0W1RoL403;+NB
zfA5R`|Mzz{eq(<8#(|GPr9AUNPqq+0FgiF3JR*x37`TN&n2}-D90>*nX6ek3h>{3j
zAFJg2T)o7U{G?R9irfMQ5U{DR0y1+`OA-|-a&z*EttxDlz$&bOY>=?Nk^)#sNw%$0
zgl~X?bAC~(f~lT~o`I4bmx6+VO;JjkRgjAtR6CGotCUevQedU8UtV6WS8lAAUzDzI
zXlZGwZ(yWvWTXpJp<7&;SCUwvn^&w1F$89gOKNd)QD#9&W`3Rmh@Y60Us__Tqy$w1
z0Z@157QijaD~9?C=s*36!~%UoJp+Agno2U$(y;3S$>7wMT9JuE8%PGC%?_c@2Iw{`
z-~5!!v`Ux6l2kh*14DCN19M$N!w^FwD-#PVQ*#@AG&N|tor_WvOY)0C^7C`-+;S>2
z^U@W3fg%cy$@xWjz~DF2Gldv|tPsfzkaw&igHnt0b4o#>X=iR^qmLnouE9A!x1cDs
zxELg73RRCRhORyWn*|ZrEdYg-RX}D%YEFbpW^QU8*gzwoCae-zHAdpn7>S|LMjtIX
zLDH%|G_l%o0YeX#@a?#~r};kumSJL^E{-7<f^UOw^Bywb$q{5WaB?@CY&y3mFYMi-
z7=wdT8ji3FsY~uZ*Y~<5@yFtvgf};jY|CYnYmGQw7_)in=i)mje@;0#Gd7{LEJN<l
zi|x%Zj4F;%25Iv1`;+cpxoxBI)^y+QJq>I2>g_P_tt{l7p7cIG!&q^-(v1y%>hn9<
zp7F`V?d>w2FD50iROH#q2bb5zv)oqDej=z)Y^6AnF@4cDhaPs$V={9(tym`Mc&ySW
z%R1RNx%h+s6OZkGUhQ_8vHfq?g(tp+>krFL7k7{=w^%%Jec+s`hq4!5Fi91v?%l8=
z^L>2Od(&4R<9Hsw5)#&a_*pw^O^x3<!~4C<PA+jevYGd6bH^;<=PTJFFE8y_l6Fb(
c`S+yol}l^pC?48t2P!T+UHx3vIVCg!0DYS@!T<mO
new file mode 100644
index 0000000000000000000000000000000000000000..dd5ce89ce366073a1ba7ff1f1d1b9201457a9fc7
GIT binary patch
literal 955
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%EZXZ)Dof{NewKL^wDAok_7ajX~2#Ps1cT)?6}UXShOCP#2$IN
zIEGjVE)8<zVlw2(xth+QWan4gs9hmoyQbs8FK+v%2kSNNdggjfx+~Y!cp=4TX3pkP
zzX*<pZ2P%9T35(E=w(Saa+H}QZLxgXdz}DXgOj)RH?WAYO@7IBGK5L%*xzjho5DmV
zFzi0!#gQEyZ0YgbWzXX;CwI5Z71=qZ;g1KeuHU>nQ-3VBkXku2w?H*-lXuFW{ldvV
zH$N5ail4ZA;lydjxNjFS-VpQ?6F>dq0ZXEArs)2Q`;MrF%)j@0Zz%gUhdFXLW3Igs
zvhB+EH2BE<GdwAoNhN3#Ki89+S*#hmgkCV}zu9}*eAVA{P>%9+^>bP0l+XkK8MQqR
new file mode 100644
index 0000000000000000000000000000000000000000..32b809754a6f998f1f6ef5a31bddcb11c70ac4cf
GIT binary patch
literal 1482
zc%17D@N?(olHy`uVBq!ia0vp^3P3Ew!3HE54((N9U|_7tbaoE#baqw<D9TUE%t>Wn
z(3qH<kf7zMqj4fJF(Ki^S#3?OqVk}Qj-H@|{f7^nJ#bjzNWxKtc{5^S9!Lm0INTsy
zv-{Wqjz#*fo6dNB{!@8*+18qWVrJ`S7KN!=?fBZrSnicoXvEB{%syf6oS->#xKo}p
z+_XB$>Z<DSjYlDR`<^8XN9-6=x<wdeIa2O3ZoI7chF_sfXvWziOku)8Pk2(i8E!Ip
z3T$KRn9G+K-EiZiWT&RXHue*G9nuFHE+2M1c;`US^@$C;J=u0zE;X=rSa@{uEO9BG
zB6fk(1{DT73^WX87)uyL7`-sEn6@NrN`r{ibMX+d)Me>YG%T2$%|Z`a+HYU5MP;jp
z`$1#<NPqW(Ck|X-Si&cgF0k01z0o&a#JXSLbo_|}2`kSWIB=&~z<buQ0~>1jnVXMj
zw#+zX!^T#Z&DNItoJ*)%=pkSFpJPrP@pIC0SQ0;57#eK2_xu0<%~H(Fzg5`U_6z_2
z|9|g`|Nr-QH-2M&{KkQgL8UzNK~J_2KQJ~p3p^r=85p>QL70(Y)*J~224?BZkcg59
zUmvUF{9L`nl>DSry^7odP~<V#R9FF-xv3?I3Kh9IdBs*0wn|_XRzNmLSYJs2tfVB{
zRw=?aK*2e`C{@8!&qU8a$&O1wLBXadCCw_x#SN+*$g@?-C@Cqh($_C9FV`zK*2^zS
z*Eh7ZwA42+(l;{F1**_3uFNY*tkBIXR)!b?Gsh*hIJqdZpd>RtPXWYFOv*1Uu~kxn
zs(}EgJ97)*7UdN~eFgNNennz|zM-ChJ~mAynQ3X*b%A7XYD=xi#Gwr&1JP!O&}Rd5
zo0V^VN@iN6OJYf?osof|xvqh^uAyOwp`n$rrIm@9jXs(hG~Lccsfi`|MIrh5Id*P2
zm6>_z3cf%Q1;^z4qC8;mo9UTCj6hb1WCqAPR*^xe#rZj<pwP54H?q;k5JcDDoS$1z
zlv-R2k~4*>M;1d@AA!w+2<#SsLdq&2vm!Mo!X+~|H4ki{nW2q7Rtc;cBN6h(M#vf?
zF*Mrfqa`OuTGfXpRy!_W=)n@c9ar=7fF;1ZaMshsF~oy6IYEMTv7&(#6SE9c&z23q
z-1h&gL$N&5MkZzDWM(_-86P|+DYI|cBemi@bH{Vx#q(PwT#u|`jEdt6k!Cz%b>!8;
zSyl_4vO4@>=tx}9nAIk1#F3FKCa}NtCeM<WS(RKD4&|3@mwDo?;K%T2KaeG&8o;h_
z(>HEIu(q_B(5d%3E(tEZxj}IH!6RM5u|iEvGB*Q?YI}0nI()N48oD9`mPsj`Vhp$+
zd^KqXKZjMrv}w&UjyXy$o;g>#>LWCIE&<)X$(ezny``?i=kf6ipj__h>gTe~DWM4f
DuR{Vl
new file mode 100644
index 0000000000000000000000000000000000000000..24659895c7129e13fa619a763830ee0746f9e425
GIT binary patch
literal 940
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%Gl7#!~milNewKL^wDAok_7ajX~2#Ps1cT)?6|gi@5=%vvCEz=
zjv*F;TZ6s14jG8#9AVZF<9?L6r$PN%UQ1AnhL%#?!M&%CRVE4r{TAB&@!$u$nKRpL
zqD21lW#{r{Y@D3$?-r9V>p_lCacz&bPD5~w=-ib)idv1vN6YgU1+*(q2tUxgNcq#8
zt+Jb@a-Ps-4S%vUAgTEZ^U<(;6W$G`$M#edIJ}FnJ}$K`PuFOQJ|pi2{v|Pti@3YA
zP0agl&C#1PQ74nv=H}_<vrL-d0SYJAdlXH*{N<byv!=eoP31pX`*<Fi+2ou${GWT1
inC`JPk(Ybt*E0Nmz%=1=jnEfR7V>oUb6Mw<&;$TA;xaD)
new file mode 100644
index 0000000000000000000000000000000000000000..50454c1e859fb45bd9d50bf95024e97e66b9e338
GIT binary patch
literal 938
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%Gk)tzzCupNewKL^wDAok_7ajX~2#Ps1cT)?704hr5ph!v5THA
zjv*F;TZ0_A4mt4LnQG^-af`yfWBfnj9jgSRJ}y|%@q_ifT&#NbrrTa;zg;>|k~Y~V
zXqRc)n}Tzp2g1HNh&%A+s4O><stpi!;f&cYd3}YOW|8qlp^6Vb8RmKQpUP3#wNXtk
zG<f$3wS~qm_tvRzwWz*Pf5Wq=$#A#5ZRCmMs;iqDgC72J`rJRkyyNmN-qr663lAN$
zELd_?h|^o=@C0Ucvr|)d-dLzHL+rrZvtK5kiQt#pkbamo=EAy#%ugQgeXz1|>(+0c
h%mO8~`Rk9>)G!pkW9sfvbWsCkAWv66mvv4FO#oT|IotpM
new file mode 100644
index 0000000000000000000000000000000000000000..0543468d3aa6a258f1ef49dfe2fc0a0b4d618b4f
GIT binary patch
literal 1012
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%Gk)t*aD&*NewKL^wDAok_7ajX~2#Ps1cT)?6~eYA6*Mfp3<H!
zjv*F;y_0P7m<$D46}fC3y_|ceXqk6t?BLLKKf!r|cT#Xcqe+O4P(Yx9;)~9pWs8dU
zJ^!k3IxhdylIJrkKR@1BW<8f_PH}$$ulCQ@O=&aR6m6WE|0EWdE(%&P`}@Mr4YsWD
zQNPthj+p0n%0IBa<G64S=gBpZrx)r!;K*7qf#1<*_U~^-Me{#!X3ehQNV?<mBJXS>
zb8YMM2j4>l0`i?U7`k4|Gwa^cROcYE$jG_0{Ri{)YYEf3magiEe|YB0iM)^Nw?`ap
z;w*h~p7XioRo!cB^^W)J0<?DNt189TKVXmc*%&|Z-Q9JZQDJrBC!%!XJxaSDtN(au
zvhRxSPtQD=E8f#oe=dvu-&uLNLGG;7r@KZjmRG;z9MF&0u>88DfVvMTD|)*6xvX<a
GXaWGxdt6cg
new file mode 100644
index 0000000000000000000000000000000000000000..78f28c7a589dae576dcc9875d0cf1d86b945e6d8
GIT binary patch
literal 976
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz)aW3IK<G<%GA)x*aD&*NewKL^wDAok_7ajX~2#Ps1cT)?6?jcy>%9t#J+pF
zIEGjVCMPsB)&Kvu_V4HC=Qr*LvW~YmzWR3POGAd33ZK5R@?rsFV`Jq>5^TaL7Mm1=
zdzejTvY+_J`dHZeFfT)vgW*gW=6{n?ISd}uH2mB3{rC5Lb%k2?c!otM@3Ox7n#96o
z$8<~Q_y7O@3lbFk*f+Iyl-dQ{b)LXzuwR^!)uo|r1|zR9^CriQihM^D%={X182ns+
zs7y#^oNqO!=maO{vK2fh7?!C&<D0=?)cYiLgMpcN0YmDoi%xqOZwk!GS+R^uA-36D
z&`>XdH7n1pm{FtIG{IOTTH+6b)*7ZZM{6_QilYshuMNaz2W~PCIO~|=%&>p;3kwF*
R^jn~8=IQF^vd$@?2>@`3JBt7S
new file mode 100644
index 0000000000000000000000000000000000000000..320980ce0189995970a3aaaf20e110acb2ca292f
GIT binary patch
literal 1063
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z
z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z%2~Ij105p
zNH8!k6=jA*ltlRYSS9D@>LsS+C#C9D<Q6c1fK7!JkeQoWlBiITo0C^;Rbi_HR$&EX
zgM{^!6u?SKvTc<jd;=7m^NUgyO!Z9k43zA+6ciL}ic-?7f?V97+JQV<rHqo20xNy}
z^73-Ma$~*xqI7*jOG`_A10#JSBVC{h-Qvo;lEez#ykcdDAuw}XQj3#|G7CyF^Yauy
z{KTaE(h^%GC8!z*fLK(LnTD__uNdkrpa=CqGWv#k2Kv~v0eym9S4Cn0M3Wstmkr1$
ztH_|#;{2RakfZF(jcoKW1kp7(=jRp_r4|>1<V>OJk;Tx}M_{uc0=or3_ggs^r6!i-
z7lq{K=h(UBRA%O-EBFFM6daTDi}HYRW2OhR6<r~k8NT@`nQ4_Si6yCaMh1rFx&~&t
zM#dqAMpgz!R)$6p?MP~1k))3nOOPa>4^0DhTtJPm^km01_pd!LX)?-tx;Tbd2%eo}
z=y$|G#AUL=tfdQY&YLAw$hPF_y{4|dG}ptD7F@dQ3mlqe&0@}JpQ7X?b8qwH2QF(~
z2*l5-Nc&fF+bc-q|GHoM^pAc@YX4*S#({O$CY|bb$pCKc2ka*|{G2#1C_jwF@5mV!
znNNEU&icm{b0Ghq<?^eFE&SKi%@6Hfwdz$*Y3p}BxefOna*Mf_z1pScljK<UBG-07
z#_exMbsDQpzw}A3$X2|*Io<7HkCj-`V$Xu}o1Ehh+ke&BDOX~iawkE!-SF}3Wgjyv
z^!;`V?o>B_ZLr0wU*(!foaBwozl$%MO#jFtS7ckACh_H{|K|HDGnbp`HXT=5x#IJ^
zAN@<p_MDs0^1JeHWYWp6Mz->D((5V>zSqCj-CVzXKZA#UT3*2?rTd`l=;`X`vd$@?
F2>_JkZB_sP
new file mode 100644
index 0000000000000000000000000000000000000000..0334177fcab105451f3c7cad18244376b81dfb77
GIT binary patch
literal 880
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%GlV-zzm`tNewKL^wDAok_7ajX~2#Ps1cT)?6{7|eA)|4V$(fc
z978Mw-%bwXYB1nvbHA`wY0>1jE7#q04lL<h>U@-U`_<~EGk@#4IIP&koL(FZ|G>K^
z^@PIh<XjV>sMgB5hgEYPEO?`mq{xt`RwmxkqTr-_p(cGJLq*$_*Scm|Jfe*{3xC!#
zJ&&^faP!}r_4ii!E?M>LEN9T3e~;P3lP*-Qcsx<E)3UYIY0tX#(`1C_fBw6O+o<Rq
Y|M`hiIi8oXDT1<rr>mdKI;Vst088K=oB#j-
new file mode 100644
index 0000000000000000000000000000000000000000..421aa1925679006b89e7dd2082f53931fda88e6b
GIT binary patch
literal 1018
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%GlV-*aD&*NewKL^wDAok_7ajX~2#Ps1cT)?6|CXRK5X|r=q8e
zV~B;|+DV4qO@Sh9d!JoeA*#~%Q<{a{U47{SjX%84UOdrY$^FM6Sl^Jg_`#&Jxodj^
z1z!nFoqvAk9Buj7e1XabA7k!+o;UsUabJ~xk<XsjiMU#BVUuwVd+z^5`h`UDJlDhK
z%XFXa(K{k_Mj=F>$1mle<fGH#9rvvyE^2S!&$PXNX{p`9EdM_@7=9`4S$QL7`7ypT
zJTa@?^O8=p#=QI=mvh|uk>{bgRk_8C{90mrby?Dq=T_^k<aWRH-kf#8Ql?)=ULDbU
zz#Wrt;Qi^mhZ8UIiPW5a-^DGl%2)2f{qEK24`r9=Idh(Qb)h}>d~*fYC)p*t0+=dY
zBsC5*ESWapJCjR70o!^3t({MQ9!phEvS=_nar;MurO!gv>T}z-?qfQ=J!=AQVf$}T
OhV*pxb6Mw<&;$U2HD1mD
new file mode 100644
index 0000000000000000000000000000000000000000..e27c7210fdc12840c7cf637629075c027065d0cd
GIT binary patch
literal 1022
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%GkupzyP8hNewKL^wDAok_7ajX~2#Ps1cT)?6}sXPx1jKPgPGB
z#}Es_rIYu1F*}O1nu~D;E(&yZxOh!m@Xg;!HtkjuPj$P={u3RzSPi9`TCXKd*6Vm&
zKFRuxk$vW#4~FIMEx(^LvW^xJJGV1;N4xnC!((fhZ+zMJr0XHeJw<V;swvs`oaRJ5
zXMfFF(o=j*QbTT`9Ph#k^{D}$^D+W>?Hmh*U$GuN8I<(gV++%-sg-RL*&W%JWw<6;
zCZwkpe!j5TapAMtg%Ooy)BcBLoep7E3$x)pdg}Acr}v`0_C(!}dq35*w4?gUU&VXV
z=1x;Ib3DuSUo!g1u88RmW{W>zzsMje(C2vHQvBb7r#H{@W-5G3V7dQ+)p-Y7?gyqW
z^%pAbYqT#d;a*zryl{2xj&t*`WMm!Q-(Dj5iKlDgewUN7#jaAjGx!buGrOFa@NeOY
R+039!>FMg{vd$@?2>{*<U0?tJ
new file mode 100644
index 0000000000000000000000000000000000000000..1049b2d7873d60a0be5f9f4587194f7f2ba7bdb5
GIT binary patch
literal 963
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%Gkup$QYs>NewKL^wDAok_7ajX~2#Ps1cT)?6~Gxhs6Ms*eg#L
z#}Es_wUeW{4jBlz9u?h^;l1`<y`a*M=h7^!@!5f|cN%f}@``mcxBEQ1H}i(sx2pdg
zt5&6LXjqdgH&14o!Phu5=>QqU?@r1S)8wXQJxw*^%n4OpXYg&2>Z*ghBA?V6-C1um
zI=R`q?7SMGbT&^YiR+-iH{k+xZ|}MGyOJ~>@N`Xn_(|#36`e=t9xTw~etJ>=O1|0c
ze<y#f$Sg0qdaHSI+lK9vU-vJ#_24xNk7~@C$oXFSTmL03?Oo(7U^i>-#kL*Qixih$
zzPH-+HIrtE_F?a)?pbx7H5`YeMCPvlH0Rm7`ehF)>+bAf*yPyf8yi2b7L>C*UHx3v
IIVCg!06;lKfB*mh
new file mode 100644
index 0000000000000000000000000000000000000000..d9d558f10783d992f6d6ed6e88eba0d76dbf841d
GIT binary patch
literal 820
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz+BhRFvQT%%Gkup#1Nt#NewKL^wDAok_7ajX~2#Ps1cT)?6?*`;4lX!v1m^h
z#}Es_<OB)32mk;7w{xiB@8E3Q?Z6r*VaLv8r?f=a^B?0G1~&<270zT~XJaNt4_RTu
zu8%7vO&KIQ4jj1epT*O_B)Wv1<69HcMAmo>;R%af^cfewRO4lE_*H0c+-$W6l$1SP
L{an^LB{Ts5QQ-0m
new file mode 100644
index 0000000000000000000000000000000000000000..5d89ad2c6486c5fa9d732dfc7312387ec5abecc7
GIT binary patch
literal 893
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz)aW3IK<G<%Gk)t*aV^-NewKL^wDAok_7ajX~2#Ps1cT)?6}_g|2_>&VoN+-
z978Mw?*>M59WoHe$tvPm7%up~tNl}2)kLu`*OgT^&DHG5u~(VJZ_lG+eDlpYyGy12
zi@h|}Z}4pH@~x0JtrTed%(w6Q-lpvmj}J)bCrn*()|lnmow~=lJN|?nIK!vd!v0}J
z+WuRN&yQ{5Ht<@I+A?=ir!9;AhVAwTwnff-CVcef!PT;sw#%lhvwUvcy<&pJU%PM0
mdV;Lm-#F~l-o|0G_Yl*s(A?E(i~f~>@`R_WpUXO@geCxc&?E2w
new file mode 100644
index 0000000000000000000000000000000000000000..53644918b75412403715d18e235ce2b1404d565e
GIT binary patch
literal 928
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_q|0%#etZ2wxwo<osN{#FYG`RK1Ga0tOJUsjvbvb5lza6)JLb@`|l0
zY?Z(&tblBgu)dN4SV>8?tx|+<fP!;=QL2Keo{64;k{y?Vf`Uy^N}5%WiyKrskY}ru
zQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)T3sj+7T$xvrSfQI&tPC*(W{yj0adJ^+
zK}lwQo&t!Un3P{yVymPCRRaMKi%K%n5H{r%L%jv`pgu@O-%!s$ADcFyPq6E%NGyP8
zvP0;y0U2c#8I)R_pHm8Ql%2VejXs7Tx(4U`+=8Oi;$o1TDO5eO7`plhY!*adw*csV
zE9aur#FG4?ko^1{JGY$5%)E33U!aJBV{(2`9x!gq^nkXaD?~HHH$Npat<oj2B-PHy
zz|dURz)aW3IK<G<%EZFT)Ci&-NewKL^wDAok_7ajX~2#Ps1cT)?6|I+kK74NV#hsQ
z978Mwmri!%V^ZXC4NQJ?t#$Jk6}_J2MKAlZD@DYUllCw<{guybS{9fx%cS+v|0s`w
zyj7hijE=o{D89qQD%*Cev7W(^jl}}*8Fp;a&biOUsVK9ev7hD1#^|FNTT<7)s$k6&
zon7i>#NV6Z_43S?SI^weUKd$saD}y=S>c|DL(&_@HQWmAatD&M7F>I-eP_nO$8YZW
zt>TUQvt<1_lj|JoUv7M8Z}6XC!RoHb(_MWyd~ZbBU!L1}Yc|7t*}AtE9~_i&nPtOx
Xq~nLp=aQW#K-tFA)z4*}Q$iB}Uqm&}
--- a/widget/cocoa/moz.build
+++ b/widget/cocoa/moz.build
@@ -55,16 +55,17 @@ UNIFIED_SOURCES += [
     'nsToolkit.mm',
     'nsWidgetFactory.mm',
     'nsWindowMap.mm',
     'OSXNotificationCenter.mm',
     'RectTextureImage.mm',
     'ScreenHelperCocoa.mm',
     'SwipeTracker.mm',
     'TextInputHandler.mm',
+    'TouchBar.mm',
     'VibrancyManager.mm',
     'ViewRegion.mm',
     'WidgetTraceEvent.mm',
 ]
 
 # These files cannot be built in unified mode because they cause symbol conflicts
 SOURCES += [
     'nsChildView.mm',
@@ -94,52 +95,74 @@ if CONFIG['MOZ_ENABLE_SKIA_PDF']:
     LOCAL_INCLUDES += [
         # Skia includes because widget code includes PrintTargetSkPDF.h, and that
         # includes skia headers.
         '/gfx/skia/skia/include/config',
         '/gfx/skia/skia/include/core',
     ]
 
 RESOURCE_FILES.cursors += [
+    'cursors/arrowhead-right-16.png',
     'cursors/arrowN.png',
     'cursors/arrowN@2x.png',
     'cursors/arrowS.png',
     'cursors/arrowS@2x.png',
+    'cursors/back-16.png',
+    'cursors/bookmark.png',
     'cursors/cell.png',
     'cursors/cell@2x.png',
+    'cursors/close-16.png',
     'cursors/colResize.png',
     'cursors/colResize@2x.png',
+    'cursors/customize-16.png',
+    'cursors/fullscreen-16.png',
+    'cursors/fullscreen-exit-16.png',
     'cursors/help.png',
     'cursors/help@2x.png',
+    'cursors/home-16.png',
     'cursors/move.png',
     'cursors/move@2x.png',
+    'cursors/print.png',
+    'cursors/private.png',
+    'cursors/readermode-16.png',
+    'cursors/refresh-16.png',
     'cursors/rowResize.png',
     'cursors/rowResize@2x.png',
+    'cursors/search-16.png',
     'cursors/sizeNE.png',
     'cursors/sizeNE@2x.png',
     'cursors/sizeNESW.png',
     'cursors/sizeNESW@2x.png',
     'cursors/sizeNS.png',
     'cursors/sizeNS@2x.png',
     'cursors/sizeNW.png',
     'cursors/sizeNW@2x.png',
     'cursors/sizeNWSE.png',
     'cursors/sizeNWSE@2x.png',
     'cursors/sizeSE.png',
     'cursors/sizeSE@2x.png',
     'cursors/sizeSW.png',
     'cursors/sizeSW@2x.png',
+    'cursors/stop-16.png',
+    'cursors/tab-16.png',
+    'cursors/tabNew.png',
     'cursors/vtIBeam.png',
     'cursors/vtIBeam@2x.png',
+    'cursors/windowNew.png',
     'cursors/zoomIn.png',
     'cursors/zoomIn@2x.png',
     'cursors/zoomOut.png',
     'cursors/zoomOut@2x.png',
 ]
 
+#RESOURCE_FILES.touchbar += [
+#    'touchbar/tabNew.png',
+#    'touchbar/tabNew.png',
+#]
+
 # These resources go in $(DIST)/bin/res/MainMenu.nib, but we can't use a magic
 # RESOURCE_FILES.MainMenu.nib attribute, since that would put the files in
 # $(DIST)/bin/res/MainMenu/nib. Instead, we call __setattr__ directly to create
 # an attribute with the correct name.
 RESOURCE_FILES.__setattr__('MainMenu.nib', [
     'resources/MainMenu.nib/classes.nib',
     'resources/MainMenu.nib/info.nib',
     'resources/MainMenu.nib/keyedobjects.nib',
--- a/widget/cocoa/nsAppShell.mm
+++ b/widget/cocoa/nsAppShell.mm
@@ -282,16 +282,18 @@ nsAppShell::Init()
   //    already been initialized and its main run loop is already running.
   [NSBundle loadNibFile:
                      [NSString stringWithUTF8String:(const char*)nibPath.get()]
       externalNameTable:
            [NSDictionary dictionaryWithObject:[GeckoNSApplication sharedApplication]
                                        forKey:@"NSOwner"]
                withZone:NSDefaultMallocZone()];
 
+  [NSApplication sharedApplication].automaticCustomizeTouchBarMenuItemEnabled = true;
+
   mDelegate = [[AppShellDelegate alloc] initWithAppShell:this];
   NS_ENSURE_STATE(mDelegate);
 
   // Add a CFRunLoopSource to the main native run loop.  The source is
   // responsible for interrupting the run loop when Gecko events are ready.
 
   mCFRunLoop = [[NSRunLoop currentRunLoop] getCFRunLoop];
   NS_ENSURE_STATE(mCFRunLoop);
--- a/widget/cocoa/nsCocoaWindow.h
+++ b/widget/cocoa/nsCocoaWindow.h
@@ -90,16 +90,18 @@ typedef struct _nsCocoaWindowList {
 
 - (void)disableSetNeedsDisplay;
 - (void)enableSetNeedsDisplay;
 
 - (NSRect)getAndResetNativeDirtyRect;
 
 - (void)setUseMenuStyle:(BOOL)aValue;
 
+- (NSTouchBar *)makeTouchBar;
+
 @end
 
 @interface NSWindow (Undocumented)
 
 // If a window has been explicitly removed from the "window cache" (to
 // deactivate it), it's sometimes necessary to "reset" it to reactivate it
 // (and put it back in the "window cache").  One way to do this, which Apple
 // often uses, is to set the "window number" to '-1' and then back to its
--- a/widget/cocoa/nsCocoaWindow.mm
+++ b/widget/cocoa/nsCocoaWindow.mm
@@ -2,17 +2,16 @@
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsCocoaWindow.h"
 
 #include "NativeKeyBindings.h"
-#include "ScreenHelperCocoa.h"
 #include "TextInputHandler.h"
 #include "nsObjCExceptions.h"
 #include "nsCOMPtr.h"
 #include "nsWidgetsCID.h"
 #include "nsIRollupListener.h"
 #include "nsChildView.h"
 #include "nsWindowMap.h"
 #include "nsAppShell.h"
@@ -30,24 +29,27 @@
 #include "nsStyleConsts.h"
 #include "nsNativeThemeColors.h"
 #include "nsNativeThemeCocoa.h"
 #include "nsChildView.h"
 #include "nsCocoaFeatures.h"
 #include "nsIScreenManager.h"
 #include "nsIWidgetListener.h"
 #include "nsIPresShell.h"
+#include "ScreenHelperCocoa.h"
 
 #include "gfxPlatform.h"
 #include "gfxPrefs.h"
 #include "qcms.h"
 
 #include "mozilla/AutoRestore.h"
 #include "mozilla/BasicEvents.h"
 #include "mozilla/Preferences.h"
+#include "nsMenuItemX.h"
+#include "TouchBar.h"
 #include <algorithm>
 
 namespace mozilla {
 namespace layers {
 class LayerManager;
 } // namespace layers
 } // namespace mozilla
 using namespace mozilla::layers;
@@ -3094,16 +3096,22 @@ static NSMutableSet *gSwizzledFrameViewC
   mDisabledNeedsDisplay = YES;
 }
 
 - (void)enableSetNeedsDisplay
 {
   mDisabledNeedsDisplay = NO;
 }
 
+- (NSTouchBar *)makeTouchBar
+{
+  TouchBar *touchBar = [[TouchBar alloc] init];
+  return touchBar;
+}
+
 - (void)dealloc
 {
   [mActiveTitlebarColor release];
   [mInactiveTitlebarColor release];
   [self removeTrackingArea];
   ChildViewMouseTracker::OnDestroyWindow(self);
   [super dealloc];
 }
--- a/widget/cocoa/nsPrintDialogX.mm
+++ b/widget/cocoa/nsPrintDialogX.mm
@@ -1,27 +1,27 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "mozilla/ArrayUtils.h"
-#include "mozilla/Preferences.h"
 
 #include "nsPrintDialogX.h"
 #include "nsIPrintSettings.h"
 #include "nsIPrintSettingsService.h"
 #include "nsPrintSettingsX.h"
 #include "nsCOMPtr.h"
 #include "nsQueryObject.h"
 #include "nsServiceManagerUtils.h"
 #include "nsIWebProgressListener.h"
 #include "nsIStringBundle.h"
 #include "nsIWebBrowserPrint.h"
 #include "nsCRT.h"
+#include "mozilla/Preferences.h"
 
 #import <Cocoa/Cocoa.h>
 #include "nsObjCExceptions.h"
 
 using namespace mozilla;
 
 NS_IMPL_ISUPPORTS(nsPrintDialogServiceX, nsIPrintDialogService)