Update from https://crrev.com/333737

* Cherrypick crrev.com/333293 (freetype -> freetype-android).
* Update mojo/go/go.py to use android-16 (NDK API level 16), which is
  4.1 (first Jelly Bean). Chromium dropped support for 14.
* TODO (separately): also update tools/go/upload.py and upload new
  binaries?
* Roll android_tools (to match Chromium).
* Small fixes to match //base changes: base::ObserverList, TraceConfig,
  ThreadTicks, etc.
* Restore build/ls.py (and add it to the list of files to not roll).
* Remove the dependency on third_party/instrumented_libraries.
* Add "enable_topchrome_md = false" to build/config/ui.gni.
* Add build/config/ui.gni to files_not_to_roll in
  update_from_chromium.py. (We should probably get rid of the use_glib
  variable/argument, and others as well.)
* Remove mojo/tools/roll/{roll_network_service.py,
  roll_network_service_patches/network_service.patch}. These are for
  rolling from Chromium, whereas we now have/use monet.
* Roll buildtools (to match Chromium).
* Modify sanitizer gn/gni files to make it work (patch included).
  (Maybe the patch even works -- I haven't checked.)

TBR=rockot@chromium.org,jamesr@chromium.org,rogulenko@google.com

Review URL: https://codereview.chromium.org/1180693002.
diff --git a/testing/android/native_test.gyp b/testing/android/native_test.gyp
index 5993c43..fcfd7d7 100644
--- a/testing/android/native_test.gyp
+++ b/testing/android/native_test.gyp
@@ -7,25 +7,6 @@
     ['OS=="android"', {
       'targets': [
         {
-          # GN: //testing/android:native_test_native_code
-          'target_name': 'native_test_native_code',
-          'message': 'building native pieces of native test package',
-          'type': 'static_library',
-          'sources': [
-            'native_test/native_test_jni_onload.cc',
-            'native_test/native_test_launcher.cc',
-            'native_test/native_test_launcher.h',
-          ],
-          'dependencies': [
-            '../../base/base.gyp:base',
-            '../../base/base.gyp:test_support_base',
-            '../../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
-            '../gtest.gyp:gtest',
-            'native_test_jni_headers',
-            'native_test_util',
-          ],
-        },
-        {
           # GN: //testing/android:native_test_jni_headers
           'target_name': 'native_test_jni_headers',
           'type': 'none',
@@ -38,17 +19,52 @@
           'includes': [ '../../build/jni_generator.gypi' ],
         },
         {
-          # GN: //testing/android:native_test_util
-          'target_name': 'native_test_util',
+          # GN: //testing/android:native_test_support
+          'target_name': 'native_test_support',
+          'message': 'building native pieces of native test package',
           'type': 'static_library',
           'sources': [
+            'native_test/native_test_launcher.cc',
+            'native_test/native_test_launcher.h',
             'native_test/native_test_util.cc',
             'native_test/native_test_util.h',
           ],
           'dependencies': [
             '../../base/base.gyp:base',
+            '../../base/base.gyp:test_support_base',
+            '../../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+            '../gtest.gyp:gtest',
+            'native_test_jni_headers',
           ],
         },
+        {
+          # GN: //testing/android:native_test_native_code
+          'target_name': 'native_test_native_code',
+          'message': 'building JNI onload for native test package',
+          'type': 'static_library',
+          'sources': [
+            'native_test/native_test_jni_onload.cc',
+          ],
+          'dependencies': [
+            'native_test_support',
+            '../../base/base.gyp:base',
+          ],
+        },
+        {
+          'target_name': 'native_test_java',
+          'type': 'none',
+          'dependencies': [
+            'appurify_support.gyp:appurify_support_java',
+            '../../base/base.gyp:base_native_libraries_gen',
+            '../../base/base.gyp:base_java',
+          ],
+          'variables': {
+            'chromium_code': '1',
+            'jar_excluded_classes': [ '*/NativeLibraries.class' ],
+            'java_in_dir': 'native_test/java',
+          },
+          'includes': [ '../../build/java.gypi' ],
+        },
       ],
     }]
   ],
diff --git a/testing/android/native_test/BUILD.gn b/testing/android/native_test/BUILD.gn
index 5df47fd..0e8ffcb 100644
--- a/testing/android/native_test/BUILD.gn
+++ b/testing/android/native_test/BUILD.gn
@@ -4,22 +4,34 @@
 
 import("//build/config/android/rules.gni")
 
+# GYP: //testing/android/native_test.gyp:native_test_support
+source_set("native_test_support") {
+  testonly = true
+  sources = [
+    "native_test_launcher.cc",
+    "native_test_launcher.h",
+    "native_test_util.cc",
+    "native_test_util.h",
+  ]
+  deps = [
+    ":native_test_jni_headers",
+    "//base",
+    "//base/test:test_support",
+    "//base/third_party/dynamic_annotations",
+    "//testing/gtest",
+  ]
+}
+
 # GYP: //testing/android/native_test.gyp:native_test_native_code
 source_set("native_test_native_code") {
   testonly = true
   sources = [
     "native_test_jni_onload.cc",
-    "native_test_launcher.cc",
-    "native_test_launcher.h",
   ]
   libs = [ "log" ]
   deps = [
-    ":native_test_jni_headers",
-    ":native_test_util",
+    ":native_test_support",
     "//base",
-    "//base/test:test_support",
-    "//base/third_party/dynamic_annotations",
-    "//testing/gtest",
   ]
 }
 
@@ -30,14 +42,3 @@
   ]
   jni_package = "testing"
 }
-
-# GYP: //testing/android/native_test.gyp:native_test_util
-source_set("native_test_util") {
-  sources = [
-    "native_test_util.cc",
-    "native_test_util.h",
-  ]
-  deps = [
-    "//base",
-  ]
-}
diff --git a/testing/android/native_test/java/AndroidManifest.xml b/testing/android/native_test/java/AndroidManifest.xml
index 37cc82d..6505014 100644
--- a/testing/android/native_test/java/AndroidManifest.xml
+++ b/testing/android/native_test/java/AndroidManifest.xml
@@ -22,7 +22,7 @@
 
     <application android:label="NativeTests"
             android:name="org.chromium.base.BaseChromiumApplication">
-        <activity android:name=".NativeTestActivity"
+        <activity android:name=".NativeUnitTestActivity"
                 android:label="NativeTest"
                 android:configChanges="orientation|keyboardHidden">
             <intent-filter>
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
new file mode 100644
index 0000000..ac2ddee
--- /dev/null
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeBrowserTestActivity.java
@@ -0,0 +1,46 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.native_test;
+
+import android.os.Bundle;
+
+/**
+ * An {@link android.app.Activity} for running native browser tests.
+ */
+public abstract class NativeBrowserTestActivity extends NativeTestActivity {
+
+    private static final String BROWSER_TESTS_FLAGS[] = {
+        // content::kSingleProcessTestsFlag
+        "--single_process",
+
+        // switches::kUseFakeDeviceForMediaStream
+        "--use-fake-device-for-media-stream",
+
+        // switches::kUseFakeUIForMediaStream
+        "--use-fake-ui-for-media-stream"
+    };
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        for (String flag : BROWSER_TESTS_FLAGS) {
+            appendCommandLineFlags(flag);
+        }
+    }
+
+    @Override
+    public void onStart() {
+        initializeBrowserProcess();
+        super.onStart();
+    }
+
+    /** Initializes the browser process.
+     *
+     *  This generally includes loading native libraries and switching to the native command line,
+     *  among other things.
+     */
+    protected abstract void initializeBrowserProcess();
+
+}
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
index e8c4055..46a490b 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
@@ -6,16 +6,14 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 
 import org.chromium.base.CommandLine;
+import org.chromium.base.JNINamespace;
 import org.chromium.base.Log;
-import org.chromium.base.PathUtils;
-import org.chromium.base.PowerMonitor;
-import org.chromium.base.ResourceExtractor;
-import org.chromium.base.library_loader.NativeLibraries;
 
 import java.io.File;
 
@@ -24,6 +22,7 @@
  *  Our tests need to go up to our own java classes, which is not possible using
  *  the native activity class loader.
  */
+@JNINamespace("testing::android")
 public class NativeTestActivity extends Activity {
     public static final String EXTRA_COMMAND_LINE_FILE =
             "org.chromium.native_test.NativeTestActivity.CommandLineFile";
@@ -37,25 +36,54 @@
     // We post a delayed task to run tests so that we do not block onCreate().
     private static final long RUN_TESTS_DELAY_IN_MS = 300;
 
+    private String mCommandLineFilePath;
+    private StringBuilder mCommandLineFlags = new StringBuilder();
+    private boolean mRunInSubThread = false;
+    private boolean mStdoutFifo = false;
+    private String mStdoutFilePath;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         CommandLine.init(new String[]{});
 
-        // Needed by path_utils_unittest.cc
-        PathUtils.setPrivateDataDirectorySuffix("chrome", getApplicationContext());
+        parseArgumentsFromIntent(getIntent());
+    }
 
-        ResourceExtractor resourceExtractor = ResourceExtractor.get(getApplicationContext());
-        resourceExtractor.setExtractAllPaksAndV8SnapshotForTesting();
-        resourceExtractor.startExtractingResources();
-        resourceExtractor.waitForCompletion();
+    private void parseArgumentsFromIntent(Intent intent) {
+        mCommandLineFilePath = intent.getStringExtra(EXTRA_COMMAND_LINE_FILE);
+        if (mCommandLineFilePath == null) {
+            mCommandLineFilePath = "";
+        } else {
+            File commandLineFile = new File(mCommandLineFilePath);
+            if (!commandLineFile.isAbsolute()) {
+                mCommandLineFilePath = Environment.getExternalStorageDirectory() + "/"
+                        + mCommandLineFilePath;
+            }
+            Log.i(TAG, "command line file path: %s", mCommandLineFilePath);
+        }
 
-        // Needed by system_monitor_unittest.cc
-        PowerMonitor.createForTests(this);
+        String commandLineFlags = intent.getStringExtra(EXTRA_COMMAND_LINE_FLAGS);
+        if (commandLineFlags != null) mCommandLineFlags.append(commandLineFlags);
 
-        loadLibraries();
-        Bundle extras = this.getIntent().getExtras();
-        if (extras != null && extras.containsKey(EXTRA_RUN_IN_SUB_THREAD)) {
+        mRunInSubThread = intent.hasExtra(EXTRA_RUN_IN_SUB_THREAD);
+
+        mStdoutFilePath = intent.getStringExtra(EXTRA_STDOUT_FILE);
+        if (mStdoutFilePath == null) {
+            mStdoutFilePath = new File(getFilesDir(), "test.fifo").getAbsolutePath();
+            mStdoutFifo = true;
+        }
+    }
+
+    protected void appendCommandLineFlags(String flags) {
+        mCommandLineFlags.append(" ").append(flags);
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        if (mRunInSubThread) {
             // Create a new thread and run tests on it.
             new Thread() {
                 @Override
@@ -76,31 +104,8 @@
     }
 
     private void runTests() {
-        String commandLineFlags = getIntent().getStringExtra(EXTRA_COMMAND_LINE_FLAGS);
-        if (commandLineFlags == null) commandLineFlags = "";
-
-        String commandLineFilePath = getIntent().getStringExtra(EXTRA_COMMAND_LINE_FILE);
-        if (commandLineFilePath == null) {
-            commandLineFilePath = "";
-        } else {
-            File commandLineFile = new File(commandLineFilePath);
-            if (!commandLineFile.isAbsolute()) {
-                commandLineFilePath = Environment.getExternalStorageDirectory() + "/"
-                        + commandLineFilePath;
-            }
-            Log.i(TAG, "command line file path: %s", commandLineFilePath);
-        }
-
-        String stdoutFilePath = getIntent().getStringExtra(EXTRA_STDOUT_FILE);
-        boolean stdoutFifo = false;
-        if (stdoutFilePath == null) {
-            stdoutFilePath = new File(getFilesDir(), "test.fifo").getAbsolutePath();
-            stdoutFifo = true;
-        }
-
-        // This directory is used by build/android/pylib/test_package_apk.py.
-        nativeRunTests(commandLineFlags, commandLineFilePath, stdoutFilePath, stdoutFifo,
-                getApplicationContext());
+        nativeRunTests(mCommandLineFlags.toString(), mCommandLineFilePath, mStdoutFilePath,
+                mStdoutFifo, getApplicationContext());
         finish();
     }
 
@@ -111,14 +116,6 @@
         Log.e(TAG, "[ RUNNER_FAILED ] could not load native library");
     }
 
-    private void loadLibraries() {
-        for (String library : NativeLibraries.LIBRARIES) {
-            Log.i(TAG, "loading: %s", library);
-            System.loadLibrary(library);
-            Log.i(TAG, "loaded: %s", library);
-        }
-    }
-
     private native void nativeRunTests(String commandLineFlags, String commandLineFilePath,
             String stdoutFilePath, boolean stdoutFifo, Context appContext);
 }
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java
index c5a4443..4db6286 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestInstrumentationTestRunner.java
@@ -31,27 +31,32 @@
  *  An Instrumentation that runs tests based on NativeTestActivity.
  */
 public class NativeTestInstrumentationTestRunner extends Instrumentation {
-    // TODO(jbudorick): Remove this extra when b/18981674 is fixed.
-    public static final String EXTRA_ONLY_OUTPUT_FAILURES =
+
+    public static final String EXTRA_NATIVE_TEST_ACTIVITY =
             "org.chromium.native_test.NativeTestInstrumentationTestRunner."
-                    + "OnlyOutputFailures";
+                    + "NativeTestActivity";
 
     private static final String TAG = Log.makeTag("native_test");
 
     private static final int ACCEPT_TIMEOUT_MS = 5000;
+    private static final String DEFAULT_NATIVE_TEST_ACTIVITY =
+            "org.chromium.native_test.NativeUnitTestActivity";
     private static final Pattern RE_TEST_OUTPUT = Pattern.compile("\\[ *([^ ]*) *\\] ?([^ ]+) .*");
 
+    private ResultsBundleGenerator mBundleGenerator = new RobotiumBundleGenerator();
     private String mCommandLineFile;
     private String mCommandLineFlags;
+    private String mNativeTestActivity;
+    private Bundle mLogBundle = new Bundle();
     private File mStdoutFile;
-    private Bundle mLogBundle;
-    private ResultsBundleGenerator mBundleGenerator;
-    private boolean mOnlyOutputFailures;
 
     @Override
     public void onCreate(Bundle arguments) {
         mCommandLineFile = arguments.getString(NativeTestActivity.EXTRA_COMMAND_LINE_FILE);
         mCommandLineFlags = arguments.getString(NativeTestActivity.EXTRA_COMMAND_LINE_FLAGS);
+        mNativeTestActivity = arguments.getString(EXTRA_NATIVE_TEST_ACTIVITY);
+        if (mNativeTestActivity == null) mNativeTestActivity = DEFAULT_NATIVE_TEST_ACTIVITY;
+
         try {
             mStdoutFile = File.createTempFile(
                     ".temp_stdout_", ".txt", Environment.getExternalStorageDirectory());
@@ -61,9 +66,6 @@
             finish(Activity.RESULT_CANCELED, new Bundle());
             return;
         }
-        mLogBundle = new Bundle();
-        mBundleGenerator = new RobotiumBundleGenerator();
-        mOnlyOutputFailures = arguments.containsKey(EXTRA_ONLY_OUTPUT_FAILURES);
         start();
     }
 
@@ -100,9 +102,7 @@
      */
     private Activity startNativeTestActivity() {
         Intent i = new Intent(Intent.ACTION_MAIN);
-        i.setComponent(new ComponentName(
-                "org.chromium.native_test",
-                "org.chromium.native_test.NativeTestActivity"));
+        i.setComponent(new ComponentName(getContext().getPackageName(), mNativeTestActivity));
         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         if (mCommandLineFile != null) {
             Log.i(TAG, "Passing command line file extra: %s", mCommandLineFile);
@@ -139,26 +139,17 @@
             for (String l = r.readLine(); l != null && !l.equals("<<ScopedMainEntryLogger");
                     l = r.readLine()) {
                 Matcher m = RE_TEST_OUTPUT.matcher(l);
-                boolean isFailure = false;
                 if (m.matches()) {
                     if (m.group(1).equals("RUN")) {
                         results.put(m.group(2), ResultsBundleGenerator.TestResult.UNKNOWN);
                     } else if (m.group(1).equals("FAILED")) {
                         results.put(m.group(2), ResultsBundleGenerator.TestResult.FAILED);
-                        isFailure = true;
-                        mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
-                        sendStatus(0, mLogBundle);
                     } else if (m.group(1).equals("OK")) {
                         results.put(m.group(2), ResultsBundleGenerator.TestResult.PASSED);
                     }
                 }
-
-                // TODO(jbudorick): mOnlyOutputFailures is a workaround for b/18981674. Remove it
-                // once that issue is fixed.
-                if (!mOnlyOutputFailures || isFailure) {
-                    mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
-                    sendStatus(0, mLogBundle);
-                }
+                mLogBundle.putString(Instrumentation.REPORT_KEY_STREAMRESULT, l + "\n");
+                sendStatus(0, mLogBundle);
                 Log.i(TAG, l);
             }
         } catch (FileNotFoundException e) {
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTestActivity.java
new file mode 100644
index 0000000..ae66727
--- /dev/null
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeUnitTestActivity.java
@@ -0,0 +1,48 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.native_test;
+
+import android.os.Bundle;
+
+import org.chromium.base.Log;
+import org.chromium.base.PathUtils;
+import org.chromium.base.PowerMonitor;
+import org.chromium.base.ResourceExtractor;
+import org.chromium.base.library_loader.NativeLibraries;
+
+/**
+ * An {@link android.app.Activity} for running native unit tests.
+ * (i.e., not browser tests)
+ */
+public class NativeUnitTestActivity extends NativeTestActivity {
+
+    private static final String TAG = Log.makeTag("native_test");
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Needed by path_utils_unittest.cc
+        PathUtils.setPrivateDataDirectorySuffix("chrome", getApplicationContext());
+
+        ResourceExtractor resourceExtractor = ResourceExtractor.get(getApplicationContext());
+        resourceExtractor.setExtractAllPaksAndV8SnapshotForTesting();
+        resourceExtractor.startExtractingResources();
+        resourceExtractor.waitForCompletion();
+
+        // Needed by system_monitor_unittest.cc
+        PowerMonitor.createForTests(this);
+
+        loadLibraries();
+    }
+
+    private void loadLibraries() {
+        for (String library : NativeLibraries.LIBRARIES) {
+            Log.i(TAG, "loading: %s", library);
+            System.loadLibrary(library);
+            Log.i(TAG, "loaded: %s", library);
+        }
+    }
+}
diff --git a/testing/android/native_test/native_test_jni_onload.cc b/testing/android/native_test/native_test_jni_onload.cc
index 041aa74..8fecc44 100644
--- a/testing/android/native_test/native_test_jni_onload.cc
+++ b/testing/android/native_test/native_test_jni_onload.cc
@@ -10,11 +10,11 @@
 namespace {
 
 bool RegisterJNI(JNIEnv* env) {
-  return RegisterNativeTestJNI(env);
+  return testing::android::RegisterNativeTestJNI(env);
 }
 
 bool Init() {
-  InstallHandlers();
+  testing::android::InstallHandlers();
   return true;
 }
 
diff --git a/testing/android/native_test/native_test_launcher.cc b/testing/android/native_test/native_test_launcher.cc
index d49ca11..343f118 100644
--- a/testing/android/native_test/native_test_launcher.cc
+++ b/testing/android/native_test/native_test_launcher.cc
@@ -28,14 +28,12 @@
 #include "jni/NativeTestActivity_jni.h"
 #include "testing/android/native_test/native_test_util.h"
 
-using testing::native_test_util::ArgsToArgv;
-using testing::native_test_util::ParseArgsFromCommandLineFile;
-using testing::native_test_util::ParseArgsFromString;
-using testing::native_test_util::ScopedMainEntryLogger;
-
 // The main function of the program to be wrapped as a test apk.
 extern int main(int argc, char** argv);
 
+namespace testing {
+namespace android {
+
 namespace {
 
 // The test runner script writes the command line file in
@@ -123,7 +121,7 @@
       exit(EXIT_FAILURE);
     }
   }
-  if (!base::android::RedirectStream(stdout, stdout_file_path, "w")) {
+  if (!base::android::RedirectStream(stdout, stdout_file_path, "w+")) {
     AndroidLog(ANDROID_LOG_ERROR, "Failed to redirect stream to file: %s: %s\n",
                stdout_file_path.value().c_str(), strerror(errno));
     exit(EXIT_FAILURE);
@@ -145,7 +143,6 @@
   return RegisterNativesImpl(env);
 }
 
-
 // TODO(nileshagrawal): now that we're using FIFO, test scripts can detect EOF.
 // Remove the signal handlers.
 void InstallHandlers() {
@@ -159,3 +156,6 @@
     sigaction(kExceptionSignals[i], &sa, &g_old_sa[kExceptionSignals[i]]);
   }
 }
+
+}  // namespace android
+}  // namespace testing
diff --git a/testing/android/native_test/native_test_launcher.h b/testing/android/native_test/native_test_launcher.h
index cdd1e76..ea4dfe8 100644
--- a/testing/android/native_test/native_test_launcher.h
+++ b/testing/android/native_test/native_test_launcher.h
@@ -7,7 +7,13 @@
 
 #include <jni.h>
 
+namespace testing {
+namespace android {
+
 void InstallHandlers();
 bool RegisterNativeTestJNI(JNIEnv* env);
 
+}  // namespace android
+}  // namespace testing
+
 #endif  // TESTING_ANDROID_NATIVE_TEST_LAUNCHER_H_
diff --git a/testing/android/native_test/native_test_util.cc b/testing/android/native_test/native_test_util.cc
index 2eaf971..ffb1b11 100644
--- a/testing/android/native_test/native_test_util.cc
+++ b/testing/android/native_test/native_test_util.cc
@@ -10,7 +10,7 @@
 #include "base/strings/string_util.h"
 
 namespace testing {
-namespace native_test_util {
+namespace android {
 
 void ParseArgsFromString(const std::string& command_line,
                          std::vector<std::string>* args) {
@@ -46,5 +46,5 @@
   return argc;
 }
 
-}  // namespace native_test_util
+}  // namespace android
 }  // namespace testing
diff --git a/testing/android/native_test/native_test_util.h b/testing/android/native_test/native_test_util.h
index ef17e52..e647a92 100644
--- a/testing/android/native_test/native_test_util.h
+++ b/testing/android/native_test/native_test_util.h
@@ -12,7 +12,7 @@
 // Helper methods for setting up environment for running gtest tests
 // inside an APK.
 namespace testing {
-namespace native_test_util {
+namespace android {
 
 class ScopedMainEntryLogger {
  public:
@@ -33,7 +33,7 @@
     const char* path, std::vector<std::string>* args);
 int ArgsToArgv(const std::vector<std::string>& args, std::vector<char*>* argv);
 
-}  // namespace native_test_util
+}  // namespace android
 }  // namespace testing
 
 #endif  // TESTING_ANDROID_NATIVE_TEST_UTIL_
diff --git a/testing/buildbot/OWNERS b/testing/buildbot/OWNERS
index c3c145a..c768380 100644
--- a/testing/buildbot/OWNERS
+++ b/testing/buildbot/OWNERS
@@ -3,12 +3,11 @@
 # and understand the implications of changing these files.
 set noparent
 
-cmp@chromium.org
-darin@chromium.org
 dpranke@chromium.org
 jam@chromium.org
 jochen@chromium.org
 machenbach@chromium.org
+maruel@chromium.org
 phajdan.jr@chromium.org
 sky@chromium.org
 thakis@chromium.org
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 177b686..daa9b22 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -220,6 +220,9 @@
         "test": "midi_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -408,6 +411,9 @@
         "test": "midi_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -592,6 +598,9 @@
         "test": "midi_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 670524f..f3ce760 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -4,7 +4,7 @@
       {
         "args": [
           "--enable-browser-side-navigation",
-          "--gtest_filter=-BookmarkletTest.DocumentWrite:BookmarkletTest.NonEmptyResult:BookmarkletTest.Redirect:BookmarkletTest.RedirectVoided:ChildProcessLauncherBrowserTest.ChildSpawnFail:CrossProcessFrameTreeBrowserTest.CreateCrossProcessSubframeProxies:CrossProcessFrameTreeBrowserTest.OriginSetOnCrossProcessNavigations:CrossSiteRedirectorBrowserTest.VerifyCrossSiteRedirectURL:CrossSiteTransferTest.NoLeakOnCrossSiteCancel:CrossSiteTransferTest.ReplaceEntryCrossProcessThenTransfer:CrossSiteTransferTest.ReplaceEntryCrossProcessTwice:CrossSiteTransferTest.ReplaceEntryInProcessThenTranfers:DownloadContentTest.CancelAtFinalRename:DownloadContentTest.CancelAtRelease:DownloadContentTest.CancelInterruptedDownload:DownloadContentTest.CancelResumingDownload:DownloadContentTest.DownloadCancelled:DownloadContentTest.DownloadGZipWithNoContent:DownloadContentTest.DownloadOctetStream:DownloadContentTest.MultiDownload:DownloadContentTest.RemoveDownload:DownloadContentTest.RemoveResumingDownload:DownloadContentTest.ResumeInterruptedDownload:DownloadContentTest.ResumeInterruptedDownloadBadPrecondition:DownloadContentTest.ResumeInterruptedDownloadNoRange:DownloadContentTest.ResumeInterruptedDownloadNoVerifiers:DownloadContentTest.ResumeWithDeletedFile:DownloadContentTest.ResumeWithFileFinalRenameError:DownloadContentTest.ResumeWithFileInitError:DownloadContentTest.ResumeWithFileIntermediateRenameError:DownloadContentTest.ShutdownAtRelease:DownloadContentTest.ShutdownInProgress:FrameTreeBrowserTest.SandboxFlagsSetForChildFrames:NavigationControllerBrowserTest.CorrectLengthWithCurrentItemReplacement:NavigationControllerBrowserTest.ErrorPageReplacement:NavigationControllerBrowserTest.NavigationTypeClassification_ClientSideRedirect:NavigationControllerBrowserTest.NavigationTypeClassification_ExistingPage:NavigationControllerBrowserTest.NavigationTypeClassification_InPage:NavigationControllerBrowserTest.NavigationTypeClassification_NewAndAutoSubframe:NavigationControllerBrowserTest.NavigationTypeClassification_NewPage:NavigationControllerBrowserTest.SubframeOnEmptyPage:RFHMProcessPerTabTest.BackFromWebUI:RenderFrameHostManagerTest.BackForwardNotStale:RenderFrameHostManagerTest.DisownOpener:RenderFrameHostManagerTest.DisownSubframeOpener:RenderFrameHostManagerTest.DontPreemptNavigationWithFrameTreeUpdate:RenderFrameHostManagerTest.NoScriptAccessAfterSwapOut:RenderFrameHostManagerTest.RendererDebugURLsDontSwap:RenderFrameHostManagerTest.ShowLoadingURLUntilSpoof:RenderFrameHostManagerTest.SwappedOutViewHasCorrectVisibilityState:RenderViewImplTest.DecideNavigationPolicy:RenderViewImplTest.NavigationStartOverride:RenderViewImplTest.OnNavigationHttpPost:RenderViewImplTest.ReloadWhileSwappedOut:RenderViewImplTest.StaleNavigationsIgnored:RenderViewImplTest.TestBackForward:SecurityExploitBrowserTest.AttemptDuplicateRenderViewHost:SecurityExploitBrowserTest.AttemptDuplicateRenderWidgetHost:SecurityExploitBrowserTest.InterstitialCommandFromUnderlyingContent:ServiceWorkerBrowserTest.CrossSiteTransfer:ServiceWorkerBrowserTest.ImportsBustMemcache:ServiceWorkerBrowserTest.Reload:ServiceWorkerBrowserTest.ResponseFromHTTPServiceWorkerIsNotMarkedAsSecure:ServiceWorkerBrowserTest.ResponseFromHTTPSServiceWorkerIsMarkedAsSecure:SessionHistoryTest.BasicBackForward:SessionHistoryTest.CrossFrameFormBackForward:SessionHistoryTest.FragmentBackForward:SessionHistoryTest.FrameBackForward:SessionHistoryTest.FrameFormBackForward:SessionHistoryTest.HistoryLength:SessionHistoryTest.JavascriptHistory:SessionHistoryTest.LocationChangeInSubframe:SitePerProcessAccessibilityBrowserTest.CrossSiteIframeAccessibility:SitePerProcessBrowserTest.CleanupCrossSiteIframe:SitePerProcessBrowserTest.CompositorFrameSwapped:SitePerProcessBrowserTest.CreateProxiesForNewFrames:SitePerProcessBrowserTest.CrossSiteDidStopLoading:SitePerProcessBrowserTest.CrossSiteIframe:SitePerProcessBrowserTest.DynamicSandboxFlags:SitePerProcessBrowserTest.DynamicSandboxFlagsRemoteToLocal:SitePerProcessBrowserTest.KillingRendererClearsDescendantProxies:SitePerProcessBrowserTest.NavigateRemoteFrame:SitePerProcessBrowserTest.NavigateRemoteFrameToBlankAndDataURLs:SitePerProcessBrowserTest.NavigateRemoteFrameToKilledProcess:SitePerProcessBrowserTest.NavigateRemoteFrameToKilledProcessWithSubtree:SitePerProcessBrowserTest.NavigateWithSiblingRemoteFrame:SitePerProcessBrowserTest.NavigatingToKilledProcessRestoresAllProxies:SitePerProcessBrowserTest.OriginReplication:SitePerProcessBrowserTest.OriginUpdatesReachProxies:SitePerProcessBrowserTest.ProxyCreationSkipsSubtree:SitePerProcessBrowserTest.RFPHDestruction:SitePerProcessBrowserTest.RestrictFrameDetach:SitePerProcessBrowserTest.SandboxFlagsReplication:SitePerProcessBrowserTest.SubframePostMessage:SitePerProcessDevToolsBrowserTest.CrossSiteIframeAgentHost:TransitionBrowserTest.NormalNavigationNotDeferred:TransitionBrowserTest.TransitionNavigationDataIsCleared:TransitionBrowserTest.TransitionNavigationIsDeferred:WebContentsImplBrowserTest.ClearNonVisiblePendingOnFail:WebContentsImplBrowserTest.GetSizeForNewRenderView:WebContentsViewAuraTest.OverscrollScreenshot:WebContentsViewAuraTest.ReplaceStateReloadPushState:WebUIMojoTest.EndToEndPing:WorkerTest.IncognitoSharedWorkers"
+          "--gtest_filter=-CrossSiteRedirectorBrowserTest.VerifyCrossSiteRedirectURL:CrossSiteTransferTest.NoLeakOnCrossSiteCancel:CrossSiteTransferTest.ReplaceEntryCrossProcessThenTransfer:CrossSiteTransferTest.ReplaceEntryCrossProcessTwice:CrossSiteTransferTest.ReplaceEntryInProcessThenTranfers:DevToolsProtocolTest.NavigationPreservesMessages:NavigationControllerBrowserTest.CorrectLengthWithCurrentItemReplacement:NavigationControllerBrowserTest.FrameNavigationEntry_BlankAutoSubframe:NavigationControllerBrowserTest.NavigationTypeClassification_ClientSideRedirect:NavigationControllerBrowserTest.NavigationTypeClassification_ExistingPage:NavigationControllerBrowserTest.NavigationTypeClassification_InPage:NavigationControllerBrowserTest.NavigationTypeClassification_NewAndAutoSubframe:NavigationControllerBrowserTest.NavigationTypeClassification_NewPage:NavigationControllerBrowserTest.PreventSpoofFromSubframeAndReplace:NavigationControllerBrowserTest.StopCausesFailureDespiteJavaScriptURL:RenderViewImplTest.DecideNavigationPolicy:RenderViewImplTest.NavigationStartOverride:RenderViewImplTest.OnNavigationHttpPost:RenderViewImplTest.ReloadWhileSwappedOut:RenderViewImplTest.TestBackForward:SecurityExploitBrowserTest.AttemptDuplicateRenderViewHost:SecurityExploitBrowserTest.AttemptDuplicateRenderWidgetHost:SecurityExploitBrowserTest.InterstitialCommandFromUnderlyingContent:ServiceWorkerBrowserTest.CrossSiteTransfer:ServiceWorkerBrowserTest.ImportsBustMemcache:ServiceWorkerBrowserTest.Reload:ServiceWorkerBrowserTest.ResponseFromHTTPServiceWorkerIsNotMarkedAsSecure:ServiceWorkerBrowserTest.ResponseFromHTTPSServiceWorkerIsMarkedAsSecure:SessionHistoryTest.CrossFrameFormBackForward:SessionHistoryTest.FrameBackForward:SessionHistoryTest.FrameFormBackForward:SessionHistoryTest.LocationChangeInSubframe:SitePerProcessBrowserTest.CrossSiteDidStopLoading:WebContentsImplBrowserTest.ClearNonVisiblePendingOnFail:WebContentsViewAuraTest.ReplaceStateReloadPushState:WebRtcBrowserTest.CallInsideIframe:WebUIMojoTest.EndToEndPing"
         ],
         "test": "content_browsertests"
       },
@@ -17,64 +17,6 @@
       }
     ]
   },
-  "Cast Linux": {
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      },
-      {
-        "test": "cacheinvalidation_unittests"
-      },
-      {
-        "test": "cast_base_unittests"
-      },
-      {
-        "test": "cast_media_unittests"
-      },
-      {
-        "test": "cast_shell_browser_test"
-      },
-      {
-        "test": "content_unittests"
-      },
-      {
-        "test": "crypto_unittests"
-      },
-      {
-        "test": "gpu_unittests"
-      },
-      {
-        "test": "ipc_tests"
-      },
-      {
-        "test": "jingle_unittests"
-      },
-      {
-        "test": "media_unittests"
-      },
-      {
-        "test": "midi_unittests"
-      },
-      {
-        "test": "net_unittests"
-      },
-      {
-        "test": "sandbox_linux_unittests"
-      },
-      {
-        "test": "sql_unittests"
-      },
-      {
-        "test": "sync_unit_tests"
-      },
-      {
-        "test": "ui_base_unittests"
-      },
-      {
-        "test": "url_unittests"
-      }
-    ]
-  },
   "Chromium Mac 10.10": {
     "gtest_tests": [
       {
@@ -228,6 +170,9 @@
         "test": "accessibility_unittests"
       },
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -339,6 +284,9 @@
         "test": "mojo_system_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -400,6 +348,9 @@
         "test": "accessibility_unittests"
       },
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -536,6 +487,9 @@
         "test": "accessibility_unittests"
       },
       {
+        "test": "angle_unittests"
+      },
+      {
         "test": "app_list_unittests"
       },
       {
@@ -701,6 +655,9 @@
         "test": "accessibility_unittests"
       },
       {
+        "test": "angle_unittests"
+      },
+      {
         "test": "app_list_unittests"
       },
       {
@@ -860,9 +817,798 @@
       }
     ]
   },
+  "ClangToTWin tester": {
+    "gtest_tests": [
+      {
+        "test": "angle_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "test": "chrome_elf_unittests"
+      },
+      {
+        "test": "components_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "courgette_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "crypto_unittests"
+      },
+      {
+        "test": "device_unittests"
+      },
+      {
+        "test": "extensions_unittests"
+      },
+      {
+        "test": "gcm_unit_tests"
+      },
+      {
+        "test": "google_apis_unittests"
+      },
+      {
+        "test": "gpu_unittests"
+      },
+      {
+        "test": "installer_util_unittests"
+      },
+      {
+        "test": "ipc_tests"
+      },
+      {
+        "test": "jingle_unittests"
+      },
+      {
+        "test": "media_unittests"
+      },
+      {
+        "test": "midi_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "net_unittests"
+      },
+      {
+        "test": "ppapi_unittests"
+      },
+      {
+        "test": "printing_unittests"
+      },
+      {
+        "test": "remoting_unittests"
+      },
+      {
+        "test": "sbox_integration_tests"
+      },
+      {
+        "test": "sbox_unittests"
+      },
+      {
+        "test": "sbox_validation_tests"
+      },
+      {
+        "test": "skia_unittests"
+      },
+      {
+        "test": "sql_unittests"
+      },
+      {
+        "test": "sync_unit_tests"
+      },
+      {
+        "test": "ui_base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
+        "test": "url_unittests"
+      },
+      {
+        "test": "views_unittests"
+      }
+    ]
+  },
+  "ClangToTWin(dbg) tester": {
+    "gtest_tests": [
+      {
+        "test": "angle_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "test": "chrome_elf_unittests"
+      },
+      {
+        "test": "components_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "courgette_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "crypto_unittests"
+      },
+      {
+        "test": "device_unittests"
+      },
+      {
+        "test": "extensions_unittests"
+      },
+      {
+        "test": "gcm_unit_tests"
+      },
+      {
+        "test": "google_apis_unittests"
+      },
+      {
+        "test": "gpu_unittests"
+      },
+      {
+        "test": "installer_util_unittests"
+      },
+      {
+        "test": "ipc_tests"
+      },
+      {
+        "test": "jingle_unittests"
+      },
+      {
+        "test": "media_unittests"
+      },
+      {
+        "test": "midi_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "net_unittests"
+      },
+      {
+        "test": "ppapi_unittests"
+      },
+      {
+        "test": "printing_unittests"
+      },
+      {
+        "test": "remoting_unittests"
+      },
+      {
+        "test": "sbox_integration_tests"
+      },
+      {
+        "test": "sbox_unittests"
+      },
+      {
+        "test": "sbox_validation_tests"
+      },
+      {
+        "test": "skia_unittests"
+      },
+      {
+        "test": "sql_unittests"
+      },
+      {
+        "test": "sync_unit_tests"
+      },
+      {
+        "test": "ui_base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
+        "test": "url_unittests"
+      },
+      {
+        "test": "views_unittests"
+      }
+    ]
+  },
+  "ClangToTWin(dll) tester": {
+    "gtest_tests": [
+      {
+        "test": "angle_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "test": "chrome_elf_unittests"
+      },
+      {
+        "test": "components_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "courgette_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "crypto_unittests"
+      },
+      {
+        "test": "device_unittests"
+      },
+      {
+        "test": "extensions_unittests"
+      },
+      {
+        "test": "gcm_unit_tests"
+      },
+      {
+        "test": "google_apis_unittests"
+      },
+      {
+        "test": "gpu_unittests"
+      },
+      {
+        "test": "installer_util_unittests"
+      },
+      {
+        "test": "ipc_tests"
+      },
+      {
+        "test": "jingle_unittests"
+      },
+      {
+        "test": "media_unittests"
+      },
+      {
+        "test": "midi_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "net_unittests"
+      },
+      {
+        "test": "ppapi_unittests"
+      },
+      {
+        "test": "printing_unittests"
+      },
+      {
+        "test": "remoting_unittests"
+      },
+      {
+        "test": "sbox_integration_tests"
+      },
+      {
+        "test": "sbox_unittests"
+      },
+      {
+        "test": "sbox_validation_tests"
+      },
+      {
+        "test": "skia_unittests"
+      },
+      {
+        "test": "sql_unittests"
+      },
+      {
+        "test": "sync_unit_tests"
+      },
+      {
+        "test": "ui_base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
+        "test": "url_unittests"
+      },
+      {
+        "test": "views_unittests"
+      }
+    ]
+  },
+  "ClangToTWin64 tester": {
+    "gtest_tests": [
+      {
+        "test": "angle_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "test": "chrome_elf_unittests"
+      },
+      {
+        "test": "components_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "courgette_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "crypto_unittests"
+      },
+      {
+        "test": "device_unittests"
+      },
+      {
+        "test": "extensions_unittests"
+      },
+      {
+        "test": "gcm_unit_tests"
+      },
+      {
+        "test": "google_apis_unittests"
+      },
+      {
+        "test": "gpu_unittests"
+      },
+      {
+        "test": "installer_util_unittests"
+      },
+      {
+        "test": "ipc_tests"
+      },
+      {
+        "test": "jingle_unittests"
+      },
+      {
+        "test": "media_unittests"
+      },
+      {
+        "test": "midi_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "net_unittests"
+      },
+      {
+        "test": "ppapi_unittests"
+      },
+      {
+        "test": "printing_unittests"
+      },
+      {
+        "test": "remoting_unittests"
+      },
+      {
+        "test": "sbox_integration_tests"
+      },
+      {
+        "test": "sbox_unittests"
+      },
+      {
+        "test": "sbox_validation_tests"
+      },
+      {
+        "test": "skia_unittests"
+      },
+      {
+        "test": "sql_unittests"
+      },
+      {
+        "test": "sync_unit_tests"
+      },
+      {
+        "test": "ui_base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
+        "test": "url_unittests"
+      },
+      {
+        "test": "views_unittests"
+      }
+    ]
+  },
+  "ClangToTWin64(dbg) tester": {
+    "gtest_tests": [
+      {
+        "test": "angle_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "test": "chrome_elf_unittests"
+      },
+      {
+        "test": "components_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "courgette_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "crypto_unittests"
+      },
+      {
+        "test": "device_unittests"
+      },
+      {
+        "test": "extensions_unittests"
+      },
+      {
+        "test": "gcm_unit_tests"
+      },
+      {
+        "test": "google_apis_unittests"
+      },
+      {
+        "test": "gpu_unittests"
+      },
+      {
+        "test": "installer_util_unittests"
+      },
+      {
+        "test": "ipc_tests"
+      },
+      {
+        "test": "jingle_unittests"
+      },
+      {
+        "test": "media_unittests"
+      },
+      {
+        "test": "midi_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "net_unittests"
+      },
+      {
+        "test": "ppapi_unittests"
+      },
+      {
+        "test": "printing_unittests"
+      },
+      {
+        "test": "remoting_unittests"
+      },
+      {
+        "test": "sbox_integration_tests"
+      },
+      {
+        "test": "sbox_unittests"
+      },
+      {
+        "test": "sbox_validation_tests"
+      },
+      {
+        "test": "skia_unittests"
+      },
+      {
+        "test": "sql_unittests"
+      },
+      {
+        "test": "sync_unit_tests"
+      },
+      {
+        "test": "ui_base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
+        "test": "url_unittests"
+      },
+      {
+        "test": "views_unittests"
+      }
+    ]
+  },
+  "ClangToTWin64(dll) tester": {
+    "gtest_tests": [
+      {
+        "test": "angle_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "shards": 10
+        },
+        "test": "browser_tests"
+      },
+      {
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "test": "chrome_elf_unittests"
+      },
+      {
+        "test": "components_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "courgette_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "crypto_unittests"
+      },
+      {
+        "test": "device_unittests"
+      },
+      {
+        "test": "extensions_unittests"
+      },
+      {
+        "test": "gcm_unit_tests"
+      },
+      {
+        "test": "google_apis_unittests"
+      },
+      {
+        "test": "gpu_unittests"
+      },
+      {
+        "test": "installer_util_unittests"
+      },
+      {
+        "test": "ipc_tests"
+      },
+      {
+        "test": "jingle_unittests"
+      },
+      {
+        "test": "media_unittests"
+      },
+      {
+        "test": "midi_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "net_unittests"
+      },
+      {
+        "test": "ppapi_unittests"
+      },
+      {
+        "test": "printing_unittests"
+      },
+      {
+        "test": "remoting_unittests"
+      },
+      {
+        "test": "sbox_integration_tests"
+      },
+      {
+        "test": "sbox_unittests"
+      },
+      {
+        "test": "sbox_validation_tests"
+      },
+      {
+        "test": "skia_unittests"
+      },
+      {
+        "test": "sql_unittests"
+      },
+      {
+        "test": "sync_unit_tests"
+      },
+      {
+        "test": "ui_base_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "unit_tests"
+      },
+      {
+        "test": "url_unittests"
+      },
+      {
+        "test": "views_unittests"
+      }
+    ]
+  },
   "CrWinAsan tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -978,6 +1724,9 @@
   "CrWinAsan(dll) tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1093,6 +1842,9 @@
   "CrWinClang tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1221,6 +1973,9 @@
   "CrWinClang(dbg) tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1349,6 +2104,9 @@
   "CrWinClang(shared) tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1477,6 +2235,9 @@
   "CrWinClang64 tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1605,16 +2366,12 @@
   "CrWinClang64(dbg) tester": {
     "gtest_tests": [
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
+        "test": "angle_unittests"
+      },
+      {
         "test": "base_unittests"
       },
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "shards": 10
-        },
         "test": "browser_tests"
       },
       {
@@ -1627,27 +2384,15 @@
         "test": "components_unittests"
       },
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "content_browsertests"
       },
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "content_unittests"
       },
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "courgette_unittests"
       },
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "crypto_unittests"
       },
       {
@@ -1681,9 +2426,6 @@
         "test": "midi_unittests"
       },
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "net_unittests"
       },
       {
@@ -1717,9 +2459,6 @@
         "test": "ui_base_unittests"
       },
       {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "unit_tests"
       },
       {
@@ -1733,6 +2472,9 @@
   "CrWinClang64(dll) tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1861,6 +2603,9 @@
   "CrWinClangLLD tester": {
     "gtest_tests": [
       {
+        "test": "angle_unittests"
+      },
+      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -2113,6 +2858,9 @@
         "test": "mojo_system_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -2284,6 +3032,9 @@
         "test": "mojo_system_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -2461,6 +3212,9 @@
         "test": "mojo_system_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -2632,6 +3386,9 @@
         "test": "mojo_system_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -2697,14 +3454,14 @@
       {
         "args": [
           "--site-per-process",
-          "--gtest_filter=-AppApiTest.*:BlockedAppApiTest.*:BrowserTest.ClearPendingOnFailUnlessNTP:BrowserTest.OtherRedirectsDontForkProcess:BrowserTest.WindowOpenClose:ChromeAppAPITest.*:ChromeRenderProcessHostTest.*:ChromeRenderProcessHostTestWithCommandLine.*:DevToolsExperimentalExtensionTest.*:DevToolsExtensionTest.*:DnsProbeBrowserTest.*:ErrorPageTest.*:ExecuteScriptApiTest.ExecuteScriptPermissions:ExtensionApiTest.ActiveTab:ExtensionApiTest.ChromeRuntimeOpenOptionsPage:ExtensionApiTest.ContentScriptExtensionIframe:ExtensionApiTest.ContentScriptOtherExtensions:ExtensionApiTest.ContentScriptExtensionProcess:ExtensionApiTest.Tabs2:ExtensionApiTest.TabsOnUpdated:ExtensionApiTest.WindowOpenPopupIframe:ExtensionBrowserTest.LoadChromeExtensionsWithOptionsParamWhenEmbedded:ExtensionCrxInstallerTest.InstallDelayedUntilNextUpdate:ExtensionOptionsApiTest.ExtensionCanEmbedOwnOptions:ExtensionWebUITest.CanEmbedExtensionOptions:ExtensionWebUITest.ReceivesExtensionOptionsOnClose:InlineLoginUISafeIframeBrowserTest.*:IsolatedAppTest.*:LaunchWebAuthFlowFunctionTest.*:MimeHandlerViewTest.*:*.NewAvatarMenuEnabledInGuestMode:OptionsUIBrowserTest.*:*PDFExtensionTest.Load*:PhishingClassifierTest.*:PhishingDOMFeatureExtractorTest.*:PlatformAppUrlRedirectorBrowserTest.*:PopupBlockerBrowserTest.*:PrerenderBrowserTest.*:ProcessManagementTest.*:RedirectTest.*:ReferrerPolicyTest.*:SSLUITest.*:WebNavigationApiTest.CrossProcessFragment:WebNavigationApiTest.ServerRedirectSingleProcess:WebNavigationApiTest.CrossProcessHistory:WebViewDPITest.*:WebViewPluginTest.*:WebViewTest.*:ZoomControllerBrowserTest.*:*.NavigateFromNTPToOptionsInSameTab:*.ProfilesWithoutPagesNotLaunched:*.TabMove:*.WhitelistedExtension:*.NewTabPageURL:*.HomepageLocation:RestoreOnStartupPolicyTest*:PhishingClassifierDelegateTest.*:WebUIWebViewBrowserTest*"
+          "--gtest_filter=-AppApiTest.*:BlockedAppApiTest.*:BrowserTest.ClearPendingOnFailUnlessNTP:BrowserTest.OtherRedirectsDontForkProcess:BrowserTest.WindowOpenClose:ChromeAppAPITest.*:ChromeRenderProcessHostTest.*:ChromeRenderProcessHostTestWithCommandLine.*:DevToolsExperimentalExtensionTest.*:DevToolsExtensionTest.*:DnsProbeBrowserTest.*:ErrorPageTest.*:ExecuteScriptApiTest.ExecuteScriptPermissions:ExtensionApiTest.ActiveTab:ExtensionApiTest.ChromeRuntimeOpenOptionsPage:ExtensionApiTest.ContentScriptExtensionIframe:ExtensionApiTest.ContentScriptOtherExtensions:ExtensionApiTest.ContentScriptExtensionProcess:ExtensionApiTest.Tabs2:ExtensionApiTest.TabsOnUpdated:ExtensionApiTest.WindowOpenPopupIframe:ExtensionBrowserTest.LoadChromeExtensionsWithOptionsParamWhenEmbedded:ExtensionCrxInstallerTest.InstallDelayedUntilNextUpdate:ExtensionOptionsApiTest.ExtensionCanEmbedOwnOptions:ExtensionWebUITest.CanEmbedExtensionOptions:ExtensionWebUITest.ReceivesExtensionOptionsOnClose:InlineLoginUISafeIframeBrowserTest.*:IsolatedAppTest.*:LaunchWebAuthFlowFunctionTest.*:MimeHandlerViewTest.*:*.NewAvatarMenuEnabledInGuestMode:OptionsUIBrowserTest.*:*PDFExtensionTest.*:PhishingClassifierTest.*:PhishingDOMFeatureExtractorTest.*:PlatformAppUrlRedirectorBrowserTest.*:PopupBlockerBrowserTest.*:PrerenderBrowserTest.*:ProcessManagementTest.*:RedirectTest.*:ReferrerPolicyTest.*:SSLUITest.*:WebNavigationApiTest.CrossProcessFragment:WebNavigationApiTest.ServerRedirectSingleProcess:WebNavigationApiTest.CrossProcessHistory:WebViewCommonTest.*:WebViewDPITest.*:WebViewPluginTest.*:WebViewTest.*:ZoomControllerBrowserTest.*:*.NavigateFromNTPToOptionsInSameTab:*.ProfilesWithoutPagesNotLaunched:*.TabMove:*.WhitelistedExtension:*.NewTabPageURL:*.HomepageLocation:RestoreOnStartupPolicyTest*:PhishingClassifierDelegateTest.*:WebUIWebViewBrowserTest*:WebRtcBrowserTest.RunsAudioVideoWebRTCCallInTwoTabs"
         ],
         "test": "browser_tests"
       },
       {
         "args": [
           "--site-per-process",
-          "--gtest_filter=-*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort"
+          "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.DisownOpener:*.SupportCrossProcessPostMessageWithMessagePort"
         ],
         "test": "content_browsertests"
       },
@@ -2727,14 +3484,14 @@
       {
         "args": [
           "--site-per-process",
-          "--gtest_filter=-AppApiTest.*:BlockedAppApiTest.*:BrowserTest.ClearPendingOnFailUnlessNTP:BrowserTest.OtherRedirectsDontForkProcess:BrowserTest.WindowOpenClose:ChromeAppAPITest.*:ChromeRenderProcessHostTest.*:ChromeRenderProcessHostTestWithCommandLine.*:DevToolsExperimentalExtensionTest.*:DevToolsExtensionTest.*:DnsProbeBrowserTest.*:ErrorPageTest.*:ExecuteScriptApiTest.ExecuteScriptPermissions:ExtensionApiTest.ActiveTab:ExtensionApiTest.ChromeRuntimeOpenOptionsPage:ExtensionApiTest.ContentScriptExtensionIframe:ExtensionApiTest.ContentScriptOtherExtensions:ExtensionApiTest.ContentScriptExtensionProcess:ExtensionApiTest.Tabs2:ExtensionApiTest.TabsOnUpdated:ExtensionApiTest.WindowOpenPopupIframe:ExtensionBrowserTest.LoadChromeExtensionsWithOptionsParamWhenEmbedded:ExtensionCrxInstallerTest.InstallDelayedUntilNextUpdate:ExtensionOptionsApiTest.ExtensionCanEmbedOwnOptions:ExtensionWebUITest.CanEmbedExtensionOptions:ExtensionWebUITest.ReceivesExtensionOptionsOnClose:InlineLoginUISafeIframeBrowserTest.*:IsolatedAppTest.*:LaunchWebAuthFlowFunctionTest.*:MimeHandlerViewTest.*:*.NewAvatarMenuEnabledInGuestMode:OptionsUIBrowserTest.*:*PDFExtensionTest.Load*:PhishingClassifierTest.*:PhishingDOMFeatureExtractorTest.*:PlatformAppUrlRedirectorBrowserTest.*:PopupBlockerBrowserTest.*:PrerenderBrowserTest.*:ProcessManagementTest.*:RedirectTest.*:ReferrerPolicyTest.*:SSLUITest.*:WebNavigationApiTest.CrossProcessFragment:WebNavigationApiTest.ServerRedirectSingleProcess:WebNavigationApiTest.CrossProcessHistory:WebViewDPITest.*:WebViewPluginTest.*:WebViewTest.*:ZoomControllerBrowserTest.*:*.NavigateFromNTPToOptionsInSameTab:*.ProfilesWithoutPagesNotLaunched:*.TabMove:*.WhitelistedExtension:*.NewTabPageURL:*.HomepageLocation:RestoreOnStartupPolicyTest*:PhishingClassifierDelegateTest.*:WebUIWebViewBrowserTest*"
+          "--gtest_filter=-AppApiTest.*:BlockedAppApiTest.*:BrowserTest.ClearPendingOnFailUnlessNTP:BrowserTest.OtherRedirectsDontForkProcess:BrowserTest.WindowOpenClose:ChromeAppAPITest.*:ChromeRenderProcessHostTest.*:ChromeRenderProcessHostTestWithCommandLine.*:DevToolsExperimentalExtensionTest.*:DevToolsExtensionTest.*:DnsProbeBrowserTest.*:ErrorPageTest.*:ExecuteScriptApiTest.ExecuteScriptPermissions:ExtensionApiTest.ActiveTab:ExtensionApiTest.ChromeRuntimeOpenOptionsPage:ExtensionApiTest.ContentScriptExtensionIframe:ExtensionApiTest.ContentScriptOtherExtensions:ExtensionApiTest.ContentScriptExtensionProcess:ExtensionApiTest.Tabs2:ExtensionApiTest.TabsOnUpdated:ExtensionApiTest.WindowOpenPopupIframe:ExtensionBrowserTest.LoadChromeExtensionsWithOptionsParamWhenEmbedded:ExtensionCrxInstallerTest.InstallDelayedUntilNextUpdate:ExtensionOptionsApiTest.ExtensionCanEmbedOwnOptions:ExtensionWebUITest.CanEmbedExtensionOptions:ExtensionWebUITest.ReceivesExtensionOptionsOnClose:InlineLoginUISafeIframeBrowserTest.*:IsolatedAppTest.*:LaunchWebAuthFlowFunctionTest.*:MimeHandlerViewTest.*:*.NewAvatarMenuEnabledInGuestMode:OptionsUIBrowserTest.*:*PDFExtensionTest.*:PhishingClassifierTest.*:PhishingDOMFeatureExtractorTest.*:PlatformAppUrlRedirectorBrowserTest.*:PopupBlockerBrowserTest.*:PrerenderBrowserTest.*:ProcessManagementTest.*:RedirectTest.*:ReferrerPolicyTest.*:SSLUITest.*:WebNavigationApiTest.CrossProcessFragment:WebNavigationApiTest.ServerRedirectSingleProcess:WebNavigationApiTest.CrossProcessHistory:WebViewCommonTest.*:WebViewDPITest.*:WebViewPluginTest.*:WebViewTest.*:ZoomControllerBrowserTest.*:*.NavigateFromNTPToOptionsInSameTab:*.ProfilesWithoutPagesNotLaunched:*.TabMove:*.WhitelistedExtension:*.NewTabPageURL:*.HomepageLocation:RestoreOnStartupPolicyTest*:PhishingClassifierDelegateTest.*:WebUIWebViewBrowserTest*:WebRtcBrowserTest.RunsAudioVideoWebRTCCallInTwoTabs"
         ],
         "test": "browser_tests"
       },
       {
         "args": [
           "--site-per-process",
-          "--gtest_filter=-*.DontPreemptNavigationWithFrameTreeUpdate:*.ProcessExitWithSwappedOutViews:*.SupportCrossProcessPostMessageWithMessagePort"
+          "--gtest_filter=-*.AllowTargetedNavigationsAfterSwap:*.DisownOpener:*.SupportCrossProcessPostMessageWithMessagePort"
         ],
         "test": "content_browsertests"
       },
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index c18aece..a0d832f 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -35,6 +35,64 @@
       }
     ]
   },
+  "Cast Linux": {
+    "gtest_tests": [
+      {
+        "test": "base_unittests"
+      },
+      {
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "test": "cast_base_unittests"
+      },
+      {
+        "test": "cast_media_unittests"
+      },
+      {
+        "test": "cast_shell_browser_test"
+      },
+      {
+        "test": "content_unittests"
+      },
+      {
+        "test": "crypto_unittests"
+      },
+      {
+        "test": "gpu_unittests"
+      },
+      {
+        "test": "ipc_tests"
+      },
+      {
+        "test": "jingle_unittests"
+      },
+      {
+        "test": "media_unittests"
+      },
+      {
+        "test": "midi_unittests"
+      },
+      {
+        "test": "net_unittests"
+      },
+      {
+        "test": "sandbox_linux_unittests"
+      },
+      {
+        "test": "sql_unittests"
+      },
+      {
+        "test": "sync_unit_tests"
+      },
+      {
+        "test": "ui_base_unittests"
+      },
+      {
+        "test": "url_unittests"
+      }
+    ]
+  },
   "Linux Clang (dbg)": {
     "gtest_tests": [
       {
@@ -306,6 +364,23 @@
       {
         "test": "wm_unittests"
       }
+    ],
+    "scripts": [
+      {
+        "name": "gn_check",
+        "script": "gn_check.py"
+      },
+      {
+        "args": [
+          "chrome"
+        ],
+        "name": "gyp_flag_compare",
+        "script": "gyp_flag_compare.py"
+      },
+      {
+        "name": "mojo_apptest",
+        "script": "mojo_apptest.py"
+      }
     ]
   },
   "Linux GN (dbg)": {
@@ -356,11 +431,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "Linux GN Clobber": {
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json
index 6122703..565a917 100644
--- a/testing/buildbot/chromium.perf.json
+++ b/testing/buildbot/chromium.perf.json
@@ -163,6 +163,14 @@
         ],
         "name": "cc_perftests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -198,6 +206,14 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -233,6 +249,14 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -257,6 +281,14 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -281,6 +313,14 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -296,6 +336,14 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -320,6 +368,14 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -335,6 +391,14 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
@@ -350,10 +414,27 @@
         ],
         "name": "performance_browser_tests",
         "script": "gtest_perf_test.py"
+      },
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
       }
     ]
   },
   "Win 8 Perf (2)": {
-    "scripts": []
+    "scripts": [
+      {
+        "args": [
+          "load_library_perf_tests",
+          "--test-launcher-print-test-stdio=always"
+        ],
+        "name": "load_library_perf_tests",
+        "script": "gtest_perf_test.py"
+      }
+    ]
   }
 }
diff --git a/testing/buildbot/chromium.webkit.json b/testing/buildbot/chromium.webkit.json
index 12cd7e8..80221c9 100644
--- a/testing/buildbot/chromium.webkit.json
+++ b/testing/buildbot/chromium.webkit.json
@@ -126,6 +126,9 @@
         "test": "midi_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
@@ -304,6 +307,9 @@
         "test": "midi_unittests"
       },
       {
+        "test": "nacl_helper_nonsfi_unittests"
+      },
+      {
         "test": "nacl_loader_unittests"
       },
       {
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index c122825..f1fb879 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -231,9 +231,6 @@
         "test": "accessibility_unittests"
       },
       {
-        "test": "app_installer_unittests"
-      },
-      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -536,11 +533,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "Win x64 GN (dbg)": {
@@ -594,11 +586,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "Win7 Tests (1)": {
@@ -610,9 +597,6 @@
         "test": "accessibility_unittests"
       },
       {
-        "test": "app_installer_unittests"
-      },
-      {
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -1096,17 +1080,56 @@
     ]
   },
   "Win8 Aura": {
+    "additional_compile_targets": [
+      "accessibility_unittests",
+      "app_list_unittests",
+      "app_shell_unittests",
+      "ash_unittests",
+      "aura_unittests",
+      "cacheinvalidation_unittests",
+      "cast_unittests",
+      "cc_unittests",
+      "chrome",
+      "chrome_elf_unittests",
+      "chromedriver_unittests",
+      "components_browsertests",
+      "components_unittests",
+      "compositor_unittests",
+      "content_unittests",
+      "courgette_unittests",
+      "crypto_unittests",
+      "device_unittests",
+      "extensions_browsertests",
+      "extensions_unittests",
+      "gcm_unit_tests",
+      "gfx_unittests",
+      "gl_unittests",
+      "google_apis_unittests",
+      "gpu_unittests",
+      "interactive_ui_tests",
+      "ipc_mojo_unittests",
+      "ipc_tests",
+      "jingle_unittests",
+      "keyboard_unittests",
+      "mandoline:all",
+      "media_unittests",
+      "message_center_unittests",
+      "ppapi_unittests",
+      "printing_unittests",
+      "sbox_integration_tests",
+      "sbox_unittests",
+      "sbox_validation_tests",
+      "skia_unittests",
+      "sql_unittests",
+      "sync_integration_tests",
+      "sync_unit_tests",
+      "ui_base_unittests",
+      "url_unittests",
+      "views_unittests",
+      "wm_unittests"
+    ],
     "gtest_tests": [
       {
-        "test": "ash_unittests"
-      },
-      {
-        "test": "aura_unittests"
-      },
-      {
-        "test": "compositor_unittests"
-      },
-      {
         "test": "content_browsertests"
       },
       {
@@ -1114,12 +1137,6 @@
       },
       {
         "test": "ui_touch_selection_unittests"
-      },
-      {
-        "test": "views_unittests"
-      },
-      {
-        "test": "wm_unittests"
       }
     ]
   },
@@ -1174,11 +1191,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "Win8 GN (dbg)": {
@@ -1232,11 +1244,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "XP Tests (1)": {
diff --git a/testing/buildbot/chromium_arm.json b/testing/buildbot/chromium_arm.json
index a2d4329..c3d306d 100644
--- a/testing/buildbot/chromium_arm.json
+++ b/testing/buildbot/chromium_arm.json
@@ -1,11 +1,13 @@
 {
   "compile_targets": [
     "browser_tests_run",
+    "nacl_helper_nonsfi_unittests_run",
     "nacl_loader_unittests_run",
     "sandbox_linux_unittests_run"
   ],
   "gtest_tests": [
     "browser_tests",
+    "nacl_helper_nonsfi_unittests",
     "nacl_loader_unittests",
     "sandbox_linux_unittests"
   ]
diff --git a/testing/buildbot/chromium_trybot.json b/testing/buildbot/chromium_trybot.json
index 68735d8..59c8c6f 100644
--- a/testing/buildbot/chromium_trybot.json
+++ b/testing/buildbot/chromium_trybot.json
@@ -16,12 +16,6 @@
       "test": "accessibility_unittests"
     },
     {
-      "platforms": [
-        "win"
-      ],
-      "test": "app_installer_unittests"
-    },
-    {
       "swarming": {
         "can_use_on_swarming_builders": true
       },
@@ -225,6 +219,12 @@
     "mojo_public_system_unittests",
     "mojo_public_utility_unittests",
     "mojo_system_unittests",
+    {
+      "platforms": [
+        "linux"
+      ],
+      "test": "nacl_helper_nonsfi_unittests"
+    },
     "nacl_loader_unittests",
     {
       "swarming": {
diff --git a/testing/buildbot/client.v8.branches.json b/testing/buildbot/client.v8.branches.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/testing/buildbot/client.v8.branches.json
@@ -0,0 +1 @@
+{}
diff --git a/testing/buildbot/manage.py b/testing/buildbot/manage.py
index bc362fd..98de7ef 100755
--- a/testing/buildbot/manage.py
+++ b/testing/buildbot/manage.py
@@ -36,6 +36,14 @@
   # http://crbug.com/441429
   'Linux Trusty (32)', 'Linux Trusty (dbg)(32)',
 
+  # http://crbug.com/480053
+  'Linux GN',
+  'linux_chromium_gn_rel',
+
+  # Unmaintained builders on chromium.fyi
+  'ClangToTMac',
+  'ClangToTMacASan',
+
   # One off builders. Note that Swarming does support ARM.
   'Linux ARM Cross-Compile',
   'Site Isolation Linux',
@@ -43,12 +51,8 @@
 }
 
 
-def upgrade_test(test):
-  """Converts from old style string to new style dict."""
-  if isinstance(test, basestring):
-    return {'test': test}
-  assert isinstance(test, dict)
-  return test
+class Error(Exception):
+  """Processing error."""
 
 
 def get_isolates():
@@ -57,33 +61,159 @@
   return [os.path.basename(f) for f in files if f.endswith('.isolate')]
 
 
+def process_builder_convert(data, filename, builder, test_name):
+  """Converts 'test_name' to run on Swarming in 'data'.
+
+  Returns True if 'test_name' was found.
+  """
+  result = False
+  for test in data['gtest_tests']:
+    if test['test'] != test_name:
+      continue
+    test.setdefault('swarming', {})
+    if not test['swarming'].get('can_use_on_swarming_builders'):
+      print('- %s: %s' % (filename, builder))
+      test['swarming']['can_use_on_swarming_builders'] = True
+    result = True
+  return result
+
+
+def process_builder_remaining(data, filename, builder, tests_location):
+  """Calculates tests_location when mode is --remaining."""
+  for test in data['gtest_tests']:
+    name = test['test']
+    if test.get('swarming', {}).get('can_use_on_swarming_builders'):
+      tests_location[name]['count_run_on_swarming'] += 1
+    else:
+      tests_location[name]['count_run_local'] += 1
+      tests_location[name]['local_configs'].setdefault(
+          filename, []).append(builder)
+
+
+def process_file(mode, test_name, tests_location, filepath):
+  """Processes a file.
+
+  The action depends on mode. Updates tests_location.
+
+  Return False if the process exit code should be 1.
+  """
+  filename = os.path.basename(filepath)
+  with open(filepath) as f:
+    content = f.read()
+  try:
+    config = json.loads(content)
+  except ValueError as e:
+    raise Error('Exception raised while checking %s: %s' % (filepath, e))
+
+  for builder, data in sorted(config.iteritems()):
+    if builder in SKIP:
+      # Oddities.
+      continue
+    if not isinstance(data, dict):
+      raise Error('%s: %s is broken: %s' % (filename, builder, data))
+    if 'gtest_tests' not in data:
+      continue
+    if not isinstance(data['gtest_tests'], list):
+      raise Error(
+          '%s: %s is broken: %s' % (filename, builder, data['gtest_tests']))
+    if not all(isinstance(g, dict) for g in data['gtest_tests']):
+      raise Error(
+          '%s: %s is broken: %s' % (filename, builder, data['gtest_tests']))
+
+    config[builder]['gtest_tests'] = sorted(
+        data['gtest_tests'], key=lambda x: x['test'])
+    if mode == 'remaining':
+      process_builder_remaining(data, filename, builder, tests_location)
+    elif mode == 'convert':
+      process_builder_convert(data, filename, builder, test_name)
+
+  expected = json.dumps(
+      config, sort_keys=True, indent=2, separators=(',', ': ')) + '\n'
+  if content != expected:
+    if mode in ('convert', 'write'):
+      with open(filepath, 'wb') as f:
+        f.write(expected)
+      if mode == 'write':
+        print('Updated %s' % filename)
+    else:
+      print('%s is not in canonical format' % filename)
+      print('run `testing/buildbot/manage.py -w` to fix')
+    return mode != 'check'
+  return True
+
+
+def print_remaining(test_name,tests_location):
+  """Prints a visual summary of what tests are yet to be converted to run on
+  Swarming.
+  """
+  if test_name:
+    if test_name not in tests_location:
+      raise Error('Unknown test %s' % test_name)
+    for config, builders in sorted(
+        tests_location[test_name]['local_configs'].iteritems()):
+      print('%s:' % config)
+      for builder in sorted(builders):
+        print('  %s' % builder)
+    return
+
+  isolates = get_isolates()
+  l = max(map(len, tests_location))
+  print('%-*s%sLocal       %sSwarming  %sMissing isolate' %
+      (l, 'Test', colorama.Fore.RED, colorama.Fore.GREEN,
+        colorama.Fore.MAGENTA))
+  total_local = 0
+  total_swarming = 0
+  for name, location in sorted(tests_location.iteritems()):
+    if not location['count_run_on_swarming']:
+      c = colorama.Fore.RED
+    elif location['count_run_local']:
+      c = colorama.Fore.YELLOW
+    else:
+      c = colorama.Fore.GREEN
+    total_local += location['count_run_local']
+    total_swarming += location['count_run_on_swarming']
+    missing_isolate = ''
+    if name + '.isolate' not in isolates:
+      missing_isolate = colorama.Fore.MAGENTA + '*'
+    print('%s%-*s %4d           %4d    %s' %
+        (c, l, name, location['count_run_local'],
+          location['count_run_on_swarming'], missing_isolate))
+
+  total = total_local + total_swarming
+  p_local = 100. * total_local / total
+  p_swarming = 100. * total_swarming / total
+  print('%s%-*s %4d (%4.1f%%)   %4d (%4.1f%%)' %
+      (colorama.Fore.WHITE, l, 'Total:', total_local, p_local,
+        total_swarming, p_swarming))
+  print('%-*s                %4d' % (l, 'Total executions:', total))
+
+
 def main():
   colorama.init()
   parser = argparse.ArgumentParser(description=sys.modules[__name__].__doc__)
   group = parser.add_mutually_exclusive_group(required=True)
   group.add_argument(
-      '-c', '--check', action='store_true', help='Only check the files')
+      '-c', '--check', dest='mode', action='store_const', const='check',
+      default='check', help='Only check the files')
   group.add_argument(
-      '--convert', action='store_true',
+      '--convert', dest='mode', action='store_const', const='convert',
       help='Convert a test to run on Swarming everywhere')
   group.add_argument(
-      '--remaining', action='store_true',
+      '--remaining', dest='mode', action='store_const', const='remaining',
       help='Count the number of tests not yet running on Swarming')
   group.add_argument(
-      '-w', '--write', action='store_true', help='Rewrite the files')
+      '-w', '--write', dest='mode', action='store_const', const='write',
+      help='Rewrite the files')
   parser.add_argument(
       'test_name', nargs='?',
       help='The test name to print which configs to update; only to be used '
            'with --remaining')
   args = parser.parse_args()
 
-  if args.convert or args.remaining:
-    isolates = get_isolates()
-
-  if args.convert:
+  if args.mode == 'convert':
     if not args.test_name:
       parser.error('A test name is required with --convert')
-    if args.test_name + '.isolate' not in isolates:
+    if args.test_name + '.isolate' not in get_isolates():
       parser.error('Create %s.isolate first' % args.test_name)
 
   # Stats when running in --remaining mode;
@@ -92,101 +222,18 @@
         'count_run_local': 0, 'count_run_on_swarming': 0, 'local_configs': {}
       })
 
-  result = 0
-  for filepath in glob.glob(os.path.join(THIS_DIR, '*.json')):
-    filename = os.path.basename(filepath)
-    with open(filepath) as f:
-      content = f.read()
-    try:
-      config = json.loads(content)
-    except ValueError as e:
-      print "Exception raised while checking %s: %s" % (filepath, e)
-      raise
-    for builder, data in sorted(config.iteritems()):
-      if builder in SKIP:
-        # Oddities.
-        continue
+  try:
+    result = 0
+    for filepath in glob.glob(os.path.join(THIS_DIR, '*.json')):
+      if not process_file(args.mode, args.test_name, tests_location, filepath):
+        result = 1
 
-      if not isinstance(data, dict):
-        print('%s: %s is broken: %s' % (filename, builder, data))
-        continue
-
-      if 'gtest_tests' in data:
-        config[builder]['gtest_tests'] = sorted(
-          (upgrade_test(l) for l in data['gtest_tests']),
-          key=lambda x: x['test'])
-
-        if args.remaining:
-          for test in data['gtest_tests']:
-            name = test['test']
-            if test.get('swarming', {}).get('can_use_on_swarming_builders'):
-              tests_location[name]['count_run_on_swarming'] += 1
-            else:
-              tests_location[name]['count_run_local'] += 1
-              tests_location[name]['local_configs'].setdefault(
-                  filename, []).append(builder)
-        elif args.convert:
-          for test in data['gtest_tests']:
-            if test['test'] != args.test_name:
-              continue
-            test.setdefault('swarming', {})
-            if not test['swarming'].get('can_use_on_swarming_builders'):
-              print('- %s: %s' % (filename, builder))
-              test['swarming']['can_use_on_swarming_builders'] = True
-
-    expected = json.dumps(
-        config, sort_keys=True, indent=2, separators=(',', ': ')) + '\n'
-    if content != expected:
-      result = 1
-      if args.write or args.convert:
-        with open(filepath, 'wb') as f:
-          f.write(expected)
-        if args.write:
-          print('Updated %s' % filename)
-      else:
-        print('%s is not in canonical format' % filename)
-
-  if args.remaining:
-    if args.test_name:
-      if args.test_name not in tests_location:
-        print('Unknown test %s' % args.test_name)
-        return 1
-      for config, builders in sorted(
-          tests_location[args.test_name]['local_configs'].iteritems()):
-        print('%s:' % config)
-        for builder in sorted(builders):
-          print('  %s' % builder)
-    else:
-      l = max(map(len, tests_location))
-      print('%-*s%sLocal       %sSwarming  %sMissing isolate' %
-          (l, 'Test', colorama.Fore.RED, colorama.Fore.GREEN,
-            colorama.Fore.MAGENTA))
-      total_local = 0
-      total_swarming = 0
-      for name, location in sorted(tests_location.iteritems()):
-        if not location['count_run_on_swarming']:
-          c = colorama.Fore.RED
-        elif location['count_run_local']:
-          c = colorama.Fore.YELLOW
-        else:
-          c = colorama.Fore.GREEN
-        total_local += location['count_run_local']
-        total_swarming += location['count_run_on_swarming']
-        missing_isolate = ''
-        if name + '.isolate' not in isolates:
-          missing_isolate = colorama.Fore.MAGENTA + '*'
-        print('%s%-*s %4d           %4d    %s' %
-            (c, l, name, location['count_run_local'],
-              location['count_run_on_swarming'], missing_isolate))
-
-      total = total_local + total_swarming
-      p_local = 100. * total_local / total
-      p_swarming = 100. * total_swarming / total
-      print('%s%-*s %4d (%4.1f%%)   %4d (%4.1f%%)' %
-          (colorama.Fore.WHITE, l, 'Total:', total_local, p_local,
-            total_swarming, p_swarming))
-      print('%-*s                %4d' % (l, 'Total executions:', total))
-  return result
+    if args.mode == 'remaining':
+      print_remaining(args.test_name, tests_location)
+    return result
+  except Error as e:
+    sys.stderr.write('%s\n' % e)
+    return 1
 
 
 if __name__ == "__main__":
diff --git a/testing/buildbot/trybot_analyze_config.json b/testing/buildbot/trybot_analyze_config.json
index f5c6710..5608ae4 100644
--- a/testing/buildbot/trybot_analyze_config.json
+++ b/testing/buildbot/trybot_analyze_config.json
@@ -18,17 +18,20 @@
       "testing/buildbot/.*",
       "testing/test_env.py",
       "tools/clang/blink_gc_plugin/CMakeLists.txt",
+      "tools/luci-go/.*",
       "tools/whitespace.txt"
     ]
   },
   "chromium": {
     "exclusions": [
       "chrome/test/data/.*",
+      "chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py",
       "components/test/data/.*",
       "content/test/data/.*",
       "content/test/gpu/.*",
       "extensions/test/data/.*",
       "gpu/gles2_conform_support/gles2_conform_test_expectations.txt",
+      "mojo/tools/.*",
       "media/test/data/.*",
       "net/data/.*",
       "sql/test/data/.*",
diff --git a/testing/buildbot/tryserver.chromium.linux.json b/testing/buildbot/tryserver.chromium.linux.json
index 767c5b4..876d8a5 100644
--- a/testing/buildbot/tryserver.chromium.linux.json
+++ b/testing/buildbot/tryserver.chromium.linux.json
@@ -3,15 +3,13 @@
     "additional_compile_targets": [
       "chrome_shell_apk",
       "mandoline:all"
-    ],
-    "gtest_tests": []
+    ]
   },
   "android_chromium_gn_compile_rel": {
     "additional_compile_targets": [
       "chrome_shell_apk",
       "mandoline:all"
-    ],
-    "gtest_tests": []
+    ]
   },
   "linux_chromium_gn_chromeos_dbg": {
     "additional_compile_targets": [
@@ -55,11 +53,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "linux_chromium_gn_chromeos_rel": {
@@ -107,11 +100,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "linux_chromium_gn_dbg": {
@@ -162,11 +150,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "linux_chromium_gn_rel": {
@@ -352,6 +335,23 @@
       {
         "test": "wm_unittests"
       }
+    ],
+    "scripts": [
+      {
+        "name": "gn_check",
+        "script": "gn_check.py"
+      },
+      {
+        "args": [
+          "chrome"
+        ],
+        "name": "gyp_flag_compare",
+        "script": "gyp_flag_compare.py"
+      },
+      {
+        "name": "mojo_apptest",
+        "script": "mojo_apptest.py"
+      }
     ]
   }
 }
diff --git a/testing/buildbot/tryserver.chromium.win.json b/testing/buildbot/tryserver.chromium.win.json
index 14d7964..4142387 100644
--- a/testing/buildbot/tryserver.chromium.win.json
+++ b/testing/buildbot/tryserver.chromium.win.json
@@ -50,11 +50,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "win8_chromium_gn_rel": {
@@ -108,11 +103,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "win_chromium_gn_x64_dbg": {
@@ -166,11 +156,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   },
   "win_chromium_gn_x64_rel": {
@@ -224,11 +209,6 @@
       "url_unittests",
       "views_unittests",
       "wm_unittests"
-    ],
-    "gtest_tests": [
-      {
-        "test": "base_unittests"
-      }
     ]
   }
 }
diff --git a/testing/chromoting/browser_test_commands_linux.txt b/testing/chromoting/browser_test_commands_linux.txt
index 61c501c..dbc386c 100644
--- a/testing/chromoting/browser_test_commands_linux.txt
+++ b/testing/chromoting/browser_test_commands_linux.txt
@@ -1,19 +1,17 @@
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Launch --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gafyd --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=non-gmail --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Launch --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_Connect_Local_Host --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_Connect_Local_Host --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_RetryOnHostOffline --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_v2_Alive_OnLostFocus --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_Connect --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_InvalidAccessCode --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_CancelShare --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_VerifyAccessCodeNonReusable --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Cancel_PIN --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Update_PIN --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Invalid_PIN --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123457 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=FullscreenBrowserTest.MANUAL_Me2Me_Bump_Scroll --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile --test-launcher-print-test-stdio=always
-cd ../../remoting/internal/config && /usr/bin/python ./is_valid_json.py
\ No newline at end of file
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Launch:RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gafyd
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=non-gmail
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Launch:RemoteDesktopBrowserTest.MANUAL_Auth --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_Connect_Local_Host --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_Connect_Local_Host --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_RetryOnHostOffline --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=Me2MeBrowserTest.MANUAL_Me2Me_v2_Alive_OnLostFocus --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_Connect --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_InvalidAccessCode --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_CancelShare --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=It2MeBrowserTest.MANUAL_VerifyAccessCodeNonReusable --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Cancel_PIN --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Update_PIN --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=RemoteDesktopBrowserTest.MANUAL_Invalid_PIN --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123457 --override-user-data-dir=/tmp/chromoting_test_profile
+/usr/bin/python ../xvfb.py #PROD_DIR# #PROD_DIR#/browser_tests --gtest_filter=FullscreenBrowserTest.MANUAL_Me2Me_Bump_Scroll --run-manual --ui-test-action-timeout=100000 --webapp-unpacked=#PROD_DIR#/remoting/remoting.webapp.v2 --extension-name=Chromoting --accounts-file=../../remoting/tools/internal/test_accounts.json --account-type=gmail --me2me-pin=123456 --override-user-data-dir=/tmp/chromoting_test_profile
+cd ../../remoting/internal/config && /usr/bin/python ./is_valid_json.py
diff --git a/testing/chromoting/browser_tests_launcher.py b/testing/chromoting/browser_tests_launcher.py
index 1c9652f..d39d291 100644
--- a/testing/chromoting/browser_tests_launcher.py
+++ b/testing/chromoting/browser_tests_launcher.py
@@ -25,11 +25,45 @@
 TEST_FAILURE = False
 FAILING_TESTS = ''
 HOST_READY_INDICATOR = 'Host ready to receive connections.'
+BROWSER_NOT_STARTED_ERROR = (
+    'Still waiting for the following processes to finish')
+TIME_OUT_INDICATOR = '(TIMED OUT)'
+MAX_RETRIES = 1
 
 
-def LaunchBTCommand(command):
+def LaunchBTCommand(args, command):
+  """Launches the specified browser-test command.
+
+      If the execution failed because a browser-instance was not launched, retry
+      once.
+  Args:
+    args: Command line args, used for test-case startup tasks.
+    command: Browser-test command line.
+  """
   global TEST_FAILURE, FAILING_TESTS
-  results = RunCommandInSubProcess(command)
+
+  retries = 0
+  while retries <= MAX_RETRIES:
+    TestCaseSetup(args)
+    results = RunCommandInSubProcess(command)
+
+    if SUCCESS_INDICATOR in results:
+      # Test passed.
+      break
+
+    # Sometimes, during execution of browser-tests, a browser instance is
+    # not started and the test times out. See http://crbug/480025.
+    # To work around it, check if this execution failed owing to that
+    # problem and retry.
+    # There are 2 things to look for in the results:
+    # A line saying "Still waiting for the following processes to finish",
+    # and, because sometimes that line gets logged even if the test
+    # eventually passes, we'll also look for "(TIMED OUT)", before retrying.
+    if not (
+        BROWSER_NOT_STARTED_ERROR in results and TIME_OUT_INDICATOR in results):
+      # Test failed for some other reason. Let's not retry.
+      break
+    retries += 1
 
   # Check that the test passed.
   if SUCCESS_INDICATOR not in results:
@@ -173,28 +207,28 @@
     print process.name
 
 
+def TestCaseSetup(args):
+  # Stop+start me2me host process.
+  if not RestartMe2MeHost():
+    # Host restart failed. Don't run any more tests.
+    raise Exception('Host restart failed.')
+
+  # Reset the user profile directory to start each test with a clean slate.
+  SetupUserProfileDir(args.me2me_manifest_file, args.it2me_manifest_file,
+                      args.user_profile_dir)
+
+
 def main(args):
 
   InitialiseTestMachineForLinux(args.cfg_file)
 
   with open(args.commands_file) as f:
     for line in f:
-      # Reset the user profile directory to start each test with a clean slate.
-      SetupUserProfileDir(args.me2me_manifest_file, args.it2me_manifest_file,
-                          args.user_profile_dir)
-
       # Replace the PROD_DIR value in the command-line with
       # the passed in value.
       line = line.replace(PROD_DIR_ID, args.prod_dir)
       # Launch specified command line for test.
-      LaunchBTCommand(line)
-      # After each test, stop+start me2me host process.
-      if not RestartMe2MeHost():
-        # Host restart failed. Don't run any more tests.
-        raise Exception('Host restart failed.')
-
-      # Print list of currently running processes.
-      PrintRunningProcesses()
+      LaunchBTCommand(args, line)
 
   # All tests completed. Include host-logs in the test results.
   host_log_contents = ''
diff --git a/testing/chromoting/chromoting_integration_tests.isolate b/testing/chromoting/chromoting_integration_tests.isolate
index 6062cb2..eb7fec0 100644
--- a/testing/chromoting/chromoting_integration_tests.isolate
+++ b/testing/chromoting/chromoting_integration_tests.isolate
@@ -24,7 +24,6 @@
           '../xvfb.py',
           './browser_tests_launcher.py',
           './browser_test_commands_linux.txt',
-          '<(PRODUCT_DIR)/libffmpegsumo.so',
           '<(PRODUCT_DIR)/libosmesa.so',
           '<(PRODUCT_DIR)/nacl_irt_x86_64.nexe',
           '../../remoting/tools/internal/test-account-host-config.json',
@@ -71,7 +70,6 @@
       'variables': {
         'files': [
           '<(PRODUCT_DIR)/chrome_elf.dll',
-          '<(PRODUCT_DIR)/ffmpegsumo.dll',
           '<(PRODUCT_DIR)/libglesv2.dll',
         ],
       },
@@ -81,7 +79,6 @@
         'files': [
           '<(PRODUCT_DIR)/<(mac_product_name).app/',
           '<(PRODUCT_DIR)/exif.so',
-          '<(PRODUCT_DIR)/ffmpegsumo.so',
         ],
       },
     }],
diff --git a/testing/commit_queue/OWNERS b/testing/commit_queue/OWNERS
deleted file mode 100644
index b8fe80c..0000000
--- a/testing/commit_queue/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# This is needed because of * in testing/OWNERS .
-set noparent
-
-phajdan.jr@chromium.org
-sergeyberezin@chromium.org
-sergiyb@chromium.org
-sheyang@chromium.org
diff --git a/testing/commit_queue/config.json b/testing/commit_queue/config.json
deleted file mode 100644
index 3338304..0000000
--- a/testing/commit_queue/config.json
+++ /dev/null
@@ -1,182 +0,0 @@
-{
-    "commit_burst_delay": 60,
-    "commit_user": "commit-bot@chromium.org",
-    "cq_status_url": "https://chromium-cq-status.appspot.com",
-    "git_repo_url": "https://chromium.googlesource.com/chromium/src",
-    "hide_ref_in_committed_msg": true,
-    "max_commit_burst": 2,
-    "project_bases_legacy": [
-        "^svn\\:\\/\\/svn\\.chromium\\.org\\/chrome/trunk/src(|/.*)$",
-        "^svn\\:\\/\\/chrome\\-svn\\/chrome/trunk/src(|/.*)$",
-        "^svn\\:\\/\\/chrome\\-svn\\.corp\\/chrome/trunk/src(|/.*)$",
-        "^svn\\:\\/\\/chrome\\-svn\\.corp\\.google\\.com\\/chrome/trunk/src(|/.*)$",
-        "^http\\:\\/\\/src\\.chromium\\.org\\/svn/trunk/src(|/.*)$",
-        "^https\\:\\/\\/src\\.chromium\\.org\\/svn/trunk/src(|/.*)$",
-        "^http\\:\\/\\/src\\.chromium\\.org\\/chrome/trunk/src(|/.*)$",
-        "^https\\:\\/\\/src\\.chromium\\.org\\/chrome/trunk/src(|/.*)$"
-    ],
-    "project_bases_legacy_from_git_repo_url": true,
-    "remote_branch": "refs/pending/heads/master",
-    "rietveld_url": "https://codereview.chromium.org",
-    "rietveld_user": "commit-bot@chromium.org",
-    "skip_throttle_users": [
-        "commit-bot@chromium.org"
-    ],
-    "use_buildbucket_for_tryjobs": true,
-    "verifiers_no_patch": {
-        "experimental_try_job_verifier": {
-            "10 percent experiment": {
-                "percentage": 0.1,
-                "trybots": {
-                    "launched": {
-                        "tryserver.chromium.linux": {
-                        },
-                        "tryserver.chromium.mac": {
-                            "mac_chromium_gn_rel": [
-                                "defaulttests"
-                            ]
-                        },
-                        "tryserver.chromium.win": {
-                            "win8_chromium_gn_rel": [
-                                "defaulttests"
-                            ],
-                            "win8_chromium_ng": [
-                                "defaulttests"
-                            ]
-                        }
-                    }
-                }
-            },
-            "100 percent experiment": {
-                "percentage": 1.0,
-                "trybots": {
-                    "launched": {
-                        "tryserver.chromium.linux": {
-                            "android_amp_rel_tests_recipe": [
-                                "defaulttests"
-                            ],
-                            "linux_arm_compile": [
-                                "defaulttests"
-                            ]
-                        },
-                        "tryserver.chromium.mac": {}
-                    }
-                }
-            },
-            "50 percent experiment": {
-                "percentage": 0.5,
-                "trybots": {
-                    "launched": {
-                        "tryserver.chromium.linux": {}
-                    }
-                }
-            },
-            "75 percent experiment": {
-                "percentage": 0.75,
-                "trybots": {
-                    "launched": {
-                        "tryserver.chromium.linux": {}
-                    }
-                }
-            }
-        },
-        "reviewer_lgtm_verifier": {
-            "committer_project": "chromium"
-        },
-        "tree_status_verifier": {
-            "tree_status_url": "https://chromium-status.appspot.com"
-        },
-        "try_job_verifier": {
-            "launched": {
-                "tryserver.chromium.linux": {
-                    "android_arm64_dbg_recipe": [
-                        "defaulttests"
-                    ],
-                    "android_chromium_gn_compile_dbg": [
-                        "defaulttests"
-                    ],
-                    "android_chromium_gn_compile_rel": [
-                        "defaulttests"
-                    ],
-                    "android_clang_dbg_recipe": [
-                        "defaulttests"
-                    ],
-                    "android_compile_dbg": [
-                        "defaulttests"
-                    ],
-                    "cast_shell_android": [
-                        "defaulttests"
-                    ],
-                    "cast_shell_linux": [
-                        "defaulttests"
-                    ],
-                    "chromium_presubmit": [
-                        "defaulttests"
-                    ],
-                    "linux_android_rel_ng": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_asan_rel_ng": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_chromeos_compile_dbg_ng": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_chromeos_ozone_rel_ng": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_chromeos_rel_ng": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_clobber_rel_ng": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_compile_dbg_32_ng": [
-                        "compile"
-                    ],
-                    "linux_chromium_gn_chromeos_rel": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_gn_dbg": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_gn_rel": [
-                        "defaulttests"
-                    ],
-                    "linux_chromium_rel_ng": [
-                        "defaulttests"
-                    ]
-                },
-                "tryserver.chromium.mac": {
-                    "ios_dbg_simulator_ninja": [
-                        "defaulttests"
-                    ],
-                    "ios_rel_device_ninja": [
-                        "defaulttests"
-                    ],
-                    "mac_chromium_compile_dbg_ng": [
-                        "defaulttests"
-                    ],
-                    "mac_chromium_rel_ng": [
-                        "defaulttests"
-                    ]
-                },
-                "tryserver.chromium.win": {
-                    "win8_chromium_rel": [
-                        "defaulttests"
-                    ],
-                    "win_chromium_compile_dbg_ng": [
-                        "defaulttests"
-                    ],
-                    "win_chromium_rel_ng": [
-                        "defaulttests"
-                    ],
-                    "win_chromium_x64_rel_ng": [
-                        "defaulttests"
-                    ]
-                }
-            }
-        }
-    },
-    "version": 1
-}
diff --git a/testing/generate_gmock_mutant.py b/testing/generate_gmock_mutant.py
index a6ee4c3..9c5678c 100755
--- a/testing/generate_gmock_mutant.py
+++ b/testing/generate_gmock_mutant.py
@@ -113,7 +113,7 @@
 //
 
 #include "base/memory/linked_ptr.h"
-#include "base/tuple.h"  // for Tuple
+#include "base/tuple.h"
 
 namespace testing {"""
 
@@ -202,7 +202,7 @@
   }
 
   inline R operator()() {
-    return impl_->RunWithParams(Tuple<>());
+    return impl_->RunWithParams(base::Tuple<>());
   }
 
   template <typename Arg1>
@@ -276,7 +276,7 @@
   MutantRunner<R, %(calltime)s>* t =
       new Mutant<R, T, R (U::*)(%(params)s),
                  %(prebound)s, %(calltime)s>
-          (obj, method, MakeTuple(%(call_args)s));
+          (obj, method, base::MakeTuple(%(call_args)s));
   return MutantFunctor<R, %(calltime)s>(t);
 }
 """
@@ -288,14 +288,14 @@
   MutantRunner<R, %(calltime)s>* t =
       new MutantFunction<R, R (*)(%(params)s),
                          %(prebound)s, %(calltime)s>
-          (function, MakeTuple(%(call_args)s));
+          (function, base::MakeTuple(%(call_args)s));
   return MutantFunctor<R, %(calltime)s>(t);
 }
 """
 
 def SplitLine(line, width):
   """Splits a single line at comma, at most |width| characters long."""
-  if len(line) < width:
+  if len(line) <= width:
     return (line, None)
   n = 1 + line[:width].rfind(",")
   if n == 0:  # If comma cannot be found give up and return the entire line.
@@ -352,14 +352,18 @@
 
 
 def GenTuple(pattern, n):
-  return Clean("Tuple<%s>" % (Gen(pattern, n, 1)))
+  return Clean("base::Tuple<%s>" % (Gen(pattern, n, 1)))
 
 
 def FixCode(s):
   lines = Clean(s).splitlines()
-  # Wrap sometimes very long 1st and 3rd line at 80th column.
+  # Wrap sometimes very long 1st line to be inside the "template <"
   lines[0] = Wrap(lines[0], 80, 10)
-  lines[2] = Wrap(lines[2], 80, 4)
+
+  # Wrap all subsequent lines to 6 spaces arbitrarily. This is a 2-space line
+  # indent, plus a 4 space continuation indent.
+  for line in xrange(1, len(lines)):
+    lines[line] = Wrap(lines[line], 80, 6)
   return "\n".join(lines)
 
 
@@ -370,8 +374,8 @@
                                 Gen("typename C%", calltime, 1)]),
       "prebound": GenTuple("P%", prebound),
       "calltime": GenTuple("C%", calltime),
-      "args": Merge([Gen("get<%>(p)", prebound, 0),
-                     Gen("get<%>(c)", calltime, 0)]),
+      "args": Merge([Gen("base::get<%>(p)", prebound, 0),
+                     Gen("base::get<%>(c)", calltime, 0)]),
   }
 
   print FixCode(DISPATCH_TO_METHOD_TEMPLATE % args)
diff --git a/testing/gmock_mutant.h b/testing/gmock_mutant.h
index 964d56b..acc1ae9 100644
--- a/testing/gmock_mutant.h
+++ b/testing/gmock_mutant.h
@@ -104,313 +104,335 @@
 //
 
 #include "base/memory/linked_ptr.h"
-#include "base/tuple.h"  // for Tuple
+#include "base/tuple.h"
 
 namespace testing {
 
 // 0 - 0
 template <typename R, typename T, typename Method>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<>& p,
-                          const Tuple<>& c) {
+                          const base::Tuple<>& p,
+                          const base::Tuple<>& c) {
   return (obj->*method)();
 }
 template <typename R, typename Function>
 inline R DispatchToFunction(Function function,
-                            const Tuple<>& p,
-                            const Tuple<>& c) {
+                            const base::Tuple<>& p,
+                            const base::Tuple<>& c) {
   return (*function)();
 }
 
 // 0 - 1
 template <typename R, typename T, typename Method, typename C1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<>& p,
-                          const Tuple<C1>& c) {
-  return (obj->*method)(get<0>(c));
+                          const base::Tuple<>& p,
+                          const base::Tuple<C1>& c) {
+  return (obj->*method)(base::get<0>(c));
 }
 template <typename R, typename Function, typename C1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<>& p,
-                            const Tuple<C1>& c) {
-  return (*function)(get<0>(c));
+                            const base::Tuple<>& p,
+                            const base::Tuple<C1>& c) {
+  return (*function)(base::get<0>(c));
 }
 
 // 0 - 2
 template <typename R, typename T, typename Method, typename C1, typename C2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<>& p,
-                          const Tuple<C1, C2>& c) {
-  return (obj->*method)(get<0>(c), get<1>(c));
+                          const base::Tuple<>& p,
+                          const base::Tuple<C1, C2>& c) {
+  return (obj->*method)(base::get<0>(c), base::get<1>(c));
 }
 template <typename R, typename Function, typename C1, typename C2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<>& p,
-                            const Tuple<C1, C2>& c) {
-  return (*function)(get<0>(c), get<1>(c));
+                            const base::Tuple<>& p,
+                            const base::Tuple<C1, C2>& c) {
+  return (*function)(base::get<0>(c), base::get<1>(c));
 }
 
 // 0 - 3
 template <typename R, typename T, typename Method, typename C1, typename C2,
           typename C3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<>& p,
-                          const Tuple<C1, C2, C3>& c) {
-  return (obj->*method)(get<0>(c), get<1>(c), get<2>(c));
+                          const base::Tuple<>& p,
+                          const base::Tuple<C1, C2, C3>& c) {
+  return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c));
 }
 template <typename R, typename Function, typename C1, typename C2, typename C3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<>& p,
-                            const Tuple<C1, C2, C3>& c) {
-  return (*function)(get<0>(c), get<1>(c), get<2>(c));
+                            const base::Tuple<>& p,
+                            const base::Tuple<C1, C2, C3>& c) {
+  return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c));
 }
 
 // 0 - 4
 template <typename R, typename T, typename Method, typename C1, typename C2,
           typename C3, typename C4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<>& p,
-                          const Tuple<C1, C2, C3, C4>& c) {
-  return (obj->*method)(get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                          const base::Tuple<>& p,
+                          const base::Tuple<C1, C2, C3, C4>& c) {
+  return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c));
 }
 template <typename R, typename Function, typename C1, typename C2, typename C3,
           typename C4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<>& p,
-                            const Tuple<C1, C2, C3, C4>& c) {
-  return (*function)(get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                            const base::Tuple<>& p,
+                            const base::Tuple<C1, C2, C3, C4>& c) {
+  return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c));
 }
 
 // 0 - 5
 template <typename R, typename T, typename Method, typename C1, typename C2,
           typename C3, typename C4, typename C5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<>& p,
-                          const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (obj->*method)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                          const base::Tuple<>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c));
 }
 template <typename R, typename Function, typename C1, typename C2, typename C3,
           typename C4, typename C5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<>& p,
-                            const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (*function)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                            const base::Tuple<>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c));
 }
 
 // 0 - 6
 template <typename R, typename T, typename Method, typename C1, typename C2,
           typename C3, typename C4, typename C5, typename C6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<>& p,
-                          const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (obj->*method)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                          const base::Tuple<>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 template <typename R, typename Function, typename C1, typename C2, typename C3,
           typename C4, typename C5, typename C6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<>& p,
-                            const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (*function)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                            const base::Tuple<>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 
 // 1 - 0
 template <typename R, typename T, typename Method, typename P1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1>& p,
-                          const Tuple<>& c) {
-  return (obj->*method)(get<0>(p));
+                          const base::Tuple<P1>& p,
+                          const base::Tuple<>& c) {
+  return (obj->*method)(base::get<0>(p));
 }
 template <typename R, typename Function, typename P1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1>& p,
-                            const Tuple<>& c) {
-  return (*function)(get<0>(p));
+                            const base::Tuple<P1>& p,
+                            const base::Tuple<>& c) {
+  return (*function)(base::get<0>(p));
 }
 
 // 1 - 1
 template <typename R, typename T, typename Method, typename P1, typename C1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1>& p,
-                          const Tuple<C1>& c) {
-  return (obj->*method)(get<0>(p), get<0>(c));
+                          const base::Tuple<P1>& p,
+                          const base::Tuple<C1>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<0>(c));
 }
 template <typename R, typename Function, typename P1, typename C1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1>& p,
-                            const Tuple<C1>& c) {
-  return (*function)(get<0>(p), get<0>(c));
+                            const base::Tuple<P1>& p,
+                            const base::Tuple<C1>& c) {
+  return (*function)(base::get<0>(p), base::get<0>(c));
 }
 
 // 1 - 2
 template <typename R, typename T, typename Method, typename P1, typename C1,
           typename C2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1>& p,
-                          const Tuple<C1, C2>& c) {
-  return (obj->*method)(get<0>(p), get<0>(c), get<1>(c));
+                          const base::Tuple<P1>& p,
+                          const base::Tuple<C1, C2>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c));
 }
 template <typename R, typename Function, typename P1, typename C1, typename C2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1>& p,
-                            const Tuple<C1, C2>& c) {
-  return (*function)(get<0>(p), get<0>(c), get<1>(c));
+                            const base::Tuple<P1>& p,
+                            const base::Tuple<C1, C2>& c) {
+  return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c));
 }
 
 // 1 - 3
 template <typename R, typename T, typename Method, typename P1, typename C1,
           typename C2, typename C3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1>& p,
-                          const Tuple<C1, C2, C3>& c) {
-  return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c));
+                          const base::Tuple<P1>& p,
+                          const base::Tuple<C1, C2, C3>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c));
 }
 template <typename R, typename Function, typename P1, typename C1, typename C2,
           typename C3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1>& p,
-                            const Tuple<C1, C2, C3>& c) {
-  return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c));
+                            const base::Tuple<P1>& p,
+                            const base::Tuple<C1, C2, C3>& c) {
+  return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c));
 }
 
 // 1 - 4
 template <typename R, typename T, typename Method, typename P1, typename C1,
           typename C2, typename C3, typename C4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1>& p,
-                          const Tuple<C1, C2, C3, C4>& c) {
-  return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                          const base::Tuple<P1>& p,
+                          const base::Tuple<C1, C2, C3, C4>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c));
 }
 template <typename R, typename Function, typename P1, typename C1, typename C2,
           typename C3, typename C4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1>& p,
-                            const Tuple<C1, C2, C3, C4>& c) {
-  return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                            const base::Tuple<P1>& p,
+                            const base::Tuple<C1, C2, C3, C4>& c) {
+  return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c));
 }
 
 // 1 - 5
 template <typename R, typename T, typename Method, typename P1, typename C1,
           typename C2, typename C3, typename C4, typename C5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1>& p,
-                          const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                          const base::Tuple<P1>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 template <typename R, typename Function, typename P1, typename C1, typename C2,
           typename C3, typename C4, typename C5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1>& p,
-                            const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                            const base::Tuple<P1>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 
 // 1 - 6
 template <typename R, typename T, typename Method, typename P1, typename C1,
           typename C2, typename C3, typename C4, typename C5, typename C6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1>& p,
-                          const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                          const base::Tuple<P1>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 template <typename R, typename Function, typename P1, typename C1, typename C2,
           typename C3, typename C4, typename C5, typename C6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1>& p,
-                            const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                            const base::Tuple<P1>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 
 // 2 - 0
 template <typename R, typename T, typename Method, typename P1, typename P2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2>& p,
-                          const Tuple<>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p));
+                          const base::Tuple<P1, P2>& p,
+                          const base::Tuple<>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p));
 }
 template <typename R, typename Function, typename P1, typename P2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2>& p,
-                            const Tuple<>& c) {
-  return (*function)(get<0>(p), get<1>(p));
+                            const base::Tuple<P1, P2>& p,
+                            const base::Tuple<>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p));
 }
 
 // 2 - 1
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename C1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2>& p,
-                          const Tuple<C1>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<0>(c));
+                          const base::Tuple<P1, P2>& p,
+                          const base::Tuple<C1>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename C1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2>& p,
-                            const Tuple<C1>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<0>(c));
+                            const base::Tuple<P1, P2>& p,
+                            const base::Tuple<C1>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c));
 }
 
 // 2 - 2
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename C1, typename C2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2>& p,
-                          const Tuple<C1, C2>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c));
+                          const base::Tuple<P1, P2>& p,
+                          const base::Tuple<C1, C2>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename C1,
           typename C2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2>& p,
-                            const Tuple<C1, C2>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c));
+                            const base::Tuple<P1, P2>& p,
+                            const base::Tuple<C1, C2>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c));
 }
 
 // 2 - 3
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename C1, typename C2, typename C3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2>& p,
-                          const Tuple<C1, C2, C3>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c));
+                          const base::Tuple<P1, P2>& p,
+                          const base::Tuple<C1, C2, C3>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename C1,
           typename C2, typename C3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2>& p,
-                            const Tuple<C1, C2, C3>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c));
+                            const base::Tuple<P1, P2>& p,
+                            const base::Tuple<C1, C2, C3>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c));
 }
 
 // 2 - 4
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename C1, typename C2, typename C3, typename C4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2>& p,
-                          const Tuple<C1, C2, C3, C4>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                          const base::Tuple<P1, P2>& p,
+                          const base::Tuple<C1, C2, C3, C4>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename C1,
           typename C2, typename C3, typename C4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2>& p,
-                            const Tuple<C1, C2, C3, C4>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                            const base::Tuple<P1, P2>& p,
+                            const base::Tuple<C1, C2, C3, C4>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c));
 }
 
 // 2 - 5
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename C1, typename C2, typename C3, typename C4, typename C5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2>& p,
-                          const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                          const base::Tuple<P1, P2>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename C1,
           typename C2, typename C3, typename C4, typename C5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2>& p,
-                            const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                            const base::Tuple<P1, P2>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 
 // 2 - 6
@@ -418,95 +440,107 @@
           typename C1, typename C2, typename C3, typename C4, typename C5,
           typename C6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2>& p,
-                          const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                          const base::Tuple<P1, P2>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
+      base::get<5>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename C1,
           typename C2, typename C3, typename C4, typename C5, typename C6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2>& p,
-                            const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                            const base::Tuple<P1, P2>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
+      base::get<5>(c));
 }
 
 // 3 - 0
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3>& p,
-                          const Tuple<>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p));
+                          const base::Tuple<P1, P2, P3>& p,
+                          const base::Tuple<>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3>& p,
-                            const Tuple<>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p));
+                            const base::Tuple<P1, P2, P3>& p,
+                            const base::Tuple<>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p));
 }
 
 // 3 - 1
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename C1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3>& p,
-                          const Tuple<C1>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c));
+                          const base::Tuple<P1, P2, P3>& p,
+                          const base::Tuple<C1>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename C1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3>& p,
-                            const Tuple<C1>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c));
+                            const base::Tuple<P1, P2, P3>& p,
+                            const base::Tuple<C1>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c));
 }
 
 // 3 - 2
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename C1, typename C2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3>& p,
-                          const Tuple<C1, C2>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c));
+                          const base::Tuple<P1, P2, P3>& p,
+                          const base::Tuple<C1, C2>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename C1, typename C2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3>& p,
-                            const Tuple<C1, C2>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c));
+                            const base::Tuple<P1, P2, P3>& p,
+                            const base::Tuple<C1, C2>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c));
 }
 
 // 3 - 3
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename C1, typename C2, typename C3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3>& p,
-                          const Tuple<C1, C2, C3>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c));
+                          const base::Tuple<P1, P2, P3>& p,
+                          const base::Tuple<C1, C2, C3>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename C1, typename C2, typename C3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3>& p,
-                            const Tuple<C1, C2, C3>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c));
+                            const base::Tuple<P1, P2, P3>& p,
+                            const base::Tuple<C1, C2, C3>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c));
 }
 
 // 3 - 4
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename C1, typename C2, typename C3, typename C4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3>& p,
-                          const Tuple<C1, C2, C3, C4>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                          const base::Tuple<P1, P2, P3>& p,
+                          const base::Tuple<C1, C2, C3, C4>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename C1, typename C2, typename C3, typename C4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3>& p,
-                            const Tuple<C1, C2, C3, C4>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                            const base::Tuple<P1, P2, P3>& p,
+                            const base::Tuple<C1, C2, C3, C4>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c));
 }
 
 // 3 - 5
@@ -514,16 +548,20 @@
           typename P3, typename C1, typename C2, typename C3, typename C4,
           typename C5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3>& p,
-                          const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                          const base::Tuple<P1, P2, P3>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
+      base::get<4>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename C1, typename C2, typename C3, typename C4, typename C5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3>& p,
-                            const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                            const base::Tuple<P1, P2, P3>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
+      base::get<4>(c));
 }
 
 // 3 - 6
@@ -531,81 +569,93 @@
           typename P3, typename C1, typename C2, typename C3, typename C4,
           typename C5, typename C6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3>& p,
-                          const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                          const base::Tuple<P1, P2, P3>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
+      base::get<4>(c), base::get<5>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename C1, typename C2, typename C3, typename C4, typename C5,
           typename C6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3>& p,
-                            const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                            const base::Tuple<P1, P2, P3>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
+      base::get<4>(c), base::get<5>(c));
 }
 
 // 4 - 0
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4>& p,
-                          const Tuple<>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p));
+                          const base::Tuple<P1, P2, P3, P4>& p,
+                          const base::Tuple<>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4>& p,
-                            const Tuple<>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p));
+                            const base::Tuple<P1, P2, P3, P4>& p,
+                            const base::Tuple<>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p));
 }
 
 // 4 - 1
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename C1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4>& p,
-                          const Tuple<C1>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c));
+                          const base::Tuple<P1, P2, P3, P4>& p,
+                          const base::Tuple<C1>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename C1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4>& p,
-                            const Tuple<C1>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c));
+                            const base::Tuple<P1, P2, P3, P4>& p,
+                            const base::Tuple<C1>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c));
 }
 
 // 4 - 2
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename C1, typename C2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4>& p,
-                          const Tuple<C1, C2>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c));
+                          const base::Tuple<P1, P2, P3, P4>& p,
+                          const base::Tuple<C1, C2>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename C1, typename C2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4>& p,
-                            const Tuple<C1, C2>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c));
+                            const base::Tuple<P1, P2, P3, P4>& p,
+                            const base::Tuple<C1, C2>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c));
 }
 
 // 4 - 3
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename C1, typename C2, typename C3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4>& p,
-                          const Tuple<C1, C2, C3>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c));
+                          const base::Tuple<P1, P2, P3, P4>& p,
+                          const base::Tuple<C1, C2, C3>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename C1, typename C2, typename C3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4>& p,
-                            const Tuple<C1, C2, C3>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c));
+                            const base::Tuple<P1, P2, P3, P4>& p,
+                            const base::Tuple<C1, C2, C3>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c));
 }
 
 // 4 - 4
@@ -613,16 +663,20 @@
           typename P3, typename P4, typename C1, typename C2, typename C3,
           typename C4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4>& p,
-                          const Tuple<C1, C2, C3, C4>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                          const base::Tuple<P1, P2, P3, P4>& p,
+                          const base::Tuple<C1, C2, C3, C4>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename C1, typename C2, typename C3, typename C4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4>& p,
-                            const Tuple<C1, C2, C3, C4>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                            const base::Tuple<P1, P2, P3, P4>& p,
+                            const base::Tuple<C1, C2, C3, C4>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c));
 }
 
 // 4 - 5
@@ -630,17 +684,21 @@
           typename P3, typename P4, typename C1, typename C2, typename C3,
           typename C4, typename C5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4>& p,
-                          const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                          const base::Tuple<P1, P2, P3, P4>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename C1, typename C2, typename C3, typename C4,
           typename C5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4>& p,
-                            const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                            const base::Tuple<P1, P2, P3, P4>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c));
 }
 
 // 4 - 6
@@ -648,65 +706,75 @@
           typename P3, typename P4, typename C1, typename C2, typename C3,
           typename C4, typename C5, typename C6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4>& p,
-                          const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                          const base::Tuple<P1, P2, P3, P4>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename C1, typename C2, typename C3, typename C4,
           typename C5, typename C6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4>& p,
-                            const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                            const base::Tuple<P1, P2, P3, P4>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
+      base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 
 // 5 - 0
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename P5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5>& p,
-                          const Tuple<>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p));
+                          const base::Tuple<P1, P2, P3, P4, P5>& p,
+                          const base::Tuple<>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5>& p,
-                            const Tuple<>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p));
+                            const base::Tuple<P1, P2, P3, P4, P5>& p,
+                            const base::Tuple<>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p));
 }
 
 // 5 - 1
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename C1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5>& p,
-                          const Tuple<C1>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5>& p,
+                          const base::Tuple<C1>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename C1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5>& p,
-                            const Tuple<C1>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5>& p,
+                            const base::Tuple<C1>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c));
 }
 
 // 5 - 2
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename C1, typename C2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5>& p,
-                          const Tuple<C1, C2>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5>& p,
+                          const base::Tuple<C1, C2>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename C1, typename C2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5>& p,
-                            const Tuple<C1, C2>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5>& p,
+                            const base::Tuple<C1, C2>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c));
 }
 
 // 5 - 3
@@ -714,16 +782,20 @@
           typename P3, typename P4, typename P5, typename C1, typename C2,
           typename C3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5>& p,
-                          const Tuple<C1, C2, C3>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5>& p,
+                          const base::Tuple<C1, C2, C3>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename C1, typename C2, typename C3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5>& p,
-                            const Tuple<C1, C2, C3>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5>& p,
+                            const base::Tuple<C1, C2, C3>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c));
 }
 
 // 5 - 4
@@ -731,17 +803,21 @@
           typename P3, typename P4, typename P5, typename C1, typename C2,
           typename C3, typename C4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5>& p,
-                          const Tuple<C1, C2, C3, C4>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5>& p,
+                          const base::Tuple<C1, C2, C3, C4>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename C1, typename C2, typename C3,
           typename C4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5>& p,
-                            const Tuple<C1, C2, C3, C4>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5>& p,
+                            const base::Tuple<C1, C2, C3, C4>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c));
 }
 
 // 5 - 5
@@ -749,17 +825,21 @@
           typename P3, typename P4, typename P5, typename C1, typename C2,
           typename C3, typename C4, typename C5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5>& p,
-                          const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename C1, typename C2, typename C3,
           typename C4, typename C5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5>& p,
-                            const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 
 // 5 - 6
@@ -767,49 +847,57 @@
           typename P3, typename P4, typename P5, typename C1, typename C2,
           typename C3, typename C4, typename C5, typename C6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5>& p,
-                          const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename C1, typename C2, typename C3,
           typename C4, typename C5, typename C6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5>& p,
-                            const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
+      base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
 }
 
 // 6 - 0
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                          const Tuple<>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p));
+                          const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                          const base::Tuple<>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename P6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                            const Tuple<>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p));
+                            const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                            const base::Tuple<>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p));
 }
 
 // 6 - 1
 template <typename R, typename T, typename Method, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename C1>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                          const Tuple<C1>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                          const base::Tuple<C1>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename P6, typename C1>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                            const Tuple<C1>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                            const base::Tuple<C1>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c));
 }
 
 // 6 - 2
@@ -817,16 +905,20 @@
           typename P3, typename P4, typename P5, typename P6, typename C1,
           typename C2>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                          const Tuple<C1, C2>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                          const base::Tuple<C1, C2>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename P6, typename C1, typename C2>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                            const Tuple<C1, C2>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                            const base::Tuple<C1, C2>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c));
 }
 
 // 6 - 3
@@ -834,17 +926,21 @@
           typename P3, typename P4, typename P5, typename P6, typename C1,
           typename C2, typename C3>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                          const Tuple<C1, C2, C3>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                          const base::Tuple<C1, C2, C3>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename P6, typename C1, typename C2,
           typename C3>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                            const Tuple<C1, C2, C3>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                            const base::Tuple<C1, C2, C3>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c));
 }
 
 // 6 - 4
@@ -852,17 +948,21 @@
           typename P3, typename P4, typename P5, typename P6, typename C1,
           typename C2, typename C3, typename C4>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                          const Tuple<C1, C2, C3, C4>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                          const base::Tuple<C1, C2, C3, C4>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename P6, typename C1, typename C2,
           typename C3, typename C4>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                            const Tuple<C1, C2, C3, C4>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                            const base::Tuple<C1, C2, C3, C4>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c));
 }
 
 // 6 - 5
@@ -870,17 +970,21 @@
           typename P3, typename P4, typename P5, typename P6, typename C1,
           typename C2, typename C3, typename C4, typename C5>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                          const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename P6, typename C1, typename C2,
           typename C3, typename C4, typename C5>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                            const Tuple<C1, C2, C3, C4, C5>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
 }
 
 // 6 - 6
@@ -888,17 +992,23 @@
           typename P3, typename P4, typename P5, typename P6, typename C1,
           typename C2, typename C3, typename C4, typename C5, typename C6>
 inline R DispatchToMethod(T* obj, Method method,
-                          const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                          const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                          const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                          const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
+      base::get<5>(c));
 }
 template <typename R, typename Function, typename P1, typename P2, typename P3,
           typename P4, typename P5, typename P6, typename C1, typename C2,
           typename C3, typename C4, typename C5, typename C6>
 inline R DispatchToFunction(Function function,
-                            const Tuple<P1, P2, P3, P4, P5, P6>& p,
-                            const Tuple<C1, C2, C3, C4, C5, C6>& c) {
-  return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c));
+                            const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
+                            const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
+  return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
+      base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
+      base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
+      base::get<5>(c));
 }
 
 // Interface that is exposed to the consumer, that does the actual calling
@@ -984,7 +1094,7 @@
   }
 
   inline R operator()() {
-    return impl_->RunWithParams(Tuple<>());
+    return impl_->RunWithParams(base::Tuple<>());
   }
 
   template <typename Arg1>
@@ -1017,198 +1127,198 @@
 
 // 0 - 0
 template <typename R, typename T, typename U>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (U::*method)()) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (U::*)(),
-                 Tuple<>, Tuple<>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<>, base::Tuple<>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (*function)()) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (*)(),
-                         Tuple<>, Tuple<>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<>, base::Tuple<>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (U::*method)()) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(),
-                               Tuple<>, Tuple<>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<>, base::Tuple<>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (__stdcall U::*method)()) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (__stdcall U::*)(),
-                 Tuple<>, Tuple<>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<>, base::Tuple<>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (__stdcall *function)()) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (__stdcall *)(),
-                         Tuple<>, Tuple<>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<>, base::Tuple<>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (__stdcall U::*method)()) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(),
-                               Tuple<>, Tuple<>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<>, base::Tuple<>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 
 // 0 - 1
 template <typename R, typename T, typename U, typename A1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (U::*method)(A1)) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (U::*)(A1),
-                 Tuple<>, Tuple<A1>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename A1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (*function)(A1)) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (*)(A1),
-                         Tuple<>, Tuple<A1>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<>, base::Tuple<A1>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (U::*method)(A1)) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(A1),
-                               Tuple<>, Tuple<A1>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename A1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(A1)) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (__stdcall U::*)(A1),
-                 Tuple<>, Tuple<A1>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename A1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (__stdcall *function)(A1)) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (__stdcall *)(A1),
-                         Tuple<>, Tuple<A1>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<>, base::Tuple<A1>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(A1)) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1),
-                               Tuple<>, Tuple<A1>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 
 // 0 - 2
 template <typename R, typename T, typename U, typename A1, typename A2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (U::*method)(A1, A2)) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (U::*)(A1, A2),
-                 Tuple<>, Tuple<A1, A2>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename A1, typename A2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (*function)(A1, A2)) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (*)(A1, A2),
-                         Tuple<>, Tuple<A1, A2>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (U::*method)(A1, A2)) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(A1, A2),
-                               Tuple<>, Tuple<A1, A2>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename A1, typename A2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2)) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (__stdcall U::*)(A1, A2),
-                 Tuple<>, Tuple<A1, A2>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename A1, typename A2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (__stdcall *function)(A1, A2)) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (__stdcall *)(A1, A2),
-                         Tuple<>, Tuple<A1, A2>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2)) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2),
-                               Tuple<>, Tuple<A1, A2>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1216,69 +1326,69 @@
 // 0 - 3
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3)) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (U::*)(A1, A2, A3),
-                 Tuple<>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (*function)(A1, A2, A3)) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (*)(A1, A2, A3),
-                         Tuple<>, Tuple<A1, A2, A3>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3)) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3),
-                               Tuple<>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3)) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3),
-                 Tuple<>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (__stdcall *function)(A1, A2, A3)) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (__stdcall *)(A1, A2, A3),
-                         Tuple<>, Tuple<A1, A2, A3>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3)) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3),
-                               Tuple<>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1286,69 +1396,69 @@
 // 0 - 4
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (U::*)(A1, A2, A3, A4),
-                 Tuple<>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3, typename A4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (*function)(A1, A2, A3, A4)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (*)(A1, A2, A3, A4),
-                         Tuple<>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4),
-                               Tuple<>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4),
-                 Tuple<>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3, typename A4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4),
-                         Tuple<>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4),
-                               Tuple<>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1356,71 +1466,71 @@
 // 0 - 5
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5),
-                 Tuple<>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3, typename A4,
           typename A5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (*function)(A1, A2, A3, A4, A5)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (*)(A1, A2, A3, A4, A5),
-                         Tuple<>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5),
-                               Tuple<>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5),
-                 Tuple<>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3, typename A4,
           typename A5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5),
-                         Tuple<>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5),
-                               Tuple<>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1428,137 +1538,137 @@
 // 0 - 6
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5, A6),
-                 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (*function)(A1, A2, A3, A4, A5, A6)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (*)(A1, A2, A3, A4, A5, A6),
-                         Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5, A6),
-                               Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6),
-                 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5, A6)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5, A6),
-                         Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (function, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6),
-                               Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple());
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple());
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 
 // 1 - 0
 template <typename R, typename T, typename U, typename P1, typename X1>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (U::*method)(X1), const P1& p1) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (U::*)(X1),
-                 Tuple<P1>, Tuple<>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename X1>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (*function)(X1), const P1& p1) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (*)(X1),
-                         Tuple<P1>, Tuple<>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1>, base::Tuple<>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename X1>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (U::*method)(X1), const P1& p1) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1),
-                               Tuple<P1>, Tuple<>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename X1>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1), const P1& p1) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1),
-                 Tuple<P1>, Tuple<>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename X1>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (__stdcall *function)(X1), const P1& p1) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (__stdcall *)(X1),
-                         Tuple<P1>, Tuple<>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1>, base::Tuple<>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename X1>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1), const P1& p1) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1),
-                               Tuple<P1>, Tuple<>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1566,69 +1676,69 @@
 // 1 - 1
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename X1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (U::*method)(X1, A1), const P1& p1) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (U::*)(X1, A1),
-                 Tuple<P1>, Tuple<A1>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename X1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (*function)(X1, A1), const P1& p1) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (*)(X1, A1),
-                         Tuple<P1>, Tuple<A1>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename X1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (U::*method)(X1, A1), const P1& p1) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, A1),
-                               Tuple<P1>, Tuple<A1>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename X1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1), const P1& p1) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, A1),
-                 Tuple<P1>, Tuple<A1>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename X1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (__stdcall *function)(X1, A1), const P1& p1) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, A1),
-                         Tuple<P1>, Tuple<A1>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename X1>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1), const P1& p1) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1),
-                               Tuple<P1>, Tuple<A1>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1636,69 +1746,69 @@
 // 1 - 2
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (U::*)(X1, A1, A2),
-                 Tuple<P1>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (*function)(X1, A1, A2), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (*)(X1, A1, A2),
-                         Tuple<P1>, Tuple<A1, A2>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2),
-                               Tuple<P1>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2),
-                 Tuple<P1>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (__stdcall *function)(X1, A1, A2), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, A1, A2),
-                         Tuple<P1>, Tuple<A1, A2>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2),
-                               Tuple<P1>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1706,71 +1816,71 @@
 // 1 - 3
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (U::*)(X1, A1, A2, A3),
-                 Tuple<P1>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (*function)(X1, A1, A2, A3), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (*)(X1, A1, A2, A3),
-                         Tuple<P1>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3),
-                               Tuple<P1>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3),
-                 Tuple<P1>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3),
-                         Tuple<P1>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3),
-                               Tuple<P1>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1778,73 +1888,73 @@
 // 1 - 4
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4),
-                 Tuple<P1>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename A4, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (*function)(X1, A1, A2, A3, A4), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (*)(X1, A1, A2, A3, A4),
-                         Tuple<P1>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4),
-                               Tuple<P1>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4),
-                 Tuple<P1>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename A4, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4),
-                         Tuple<P1>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4),
-                               Tuple<P1>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1852,73 +1962,73 @@
 // 1 - 5
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5),
-                 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5),
-                         Tuple<P1>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5),
-                               Tuple<P1>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5),
-                 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5),
-                         Tuple<P1>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5),
-                               Tuple<P1>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -1927,39 +2037,39 @@
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5, A6), const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -1967,39 +2077,39 @@
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5, A6),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (function, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6),
-    const P1& p1) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2007,71 +2117,71 @@
 // 2 - 0
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (U::*)(X1, X2),
-                 Tuple<P1, P2>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (*function)(X1, X2), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (*)(X1, X2),
-                         Tuple<P1, P2>, Tuple<>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2),
-                               Tuple<P1, P2>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2),
-                 Tuple<P1, P2>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (__stdcall *function)(X1, X2), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<>>* t =
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2),
-                         Tuple<P1, P2>, Tuple<>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2),
-                               Tuple<P1, P2>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2079,74 +2189,73 @@
 // 2 - 1
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, A1),
-                 Tuple<P1, P2>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (*function)(X1, X2, A1), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (*)(X1, X2, A1),
-                         Tuple<P1, P2>, Tuple<A1>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1>>* t =
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1),
-                               Tuple<P1, P2>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1),
-                 Tuple<P1, P2>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1>>
-CreateFunctor(R (__stdcall *function)(X1, X2, A1), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1>>* t =
+inline MutantFunctor<R, base::Tuple<A1>>
+CreateFunctor(R (__stdcall *function)(X1, X2, A1), const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, A1),
-                         Tuple<P1, P2>, Tuple<A1>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1),
-                               Tuple<P1, P2>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2154,76 +2263,76 @@
 // 2 - 2
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, A1, A2),
-                 Tuple<P1, P2>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (*function)(X1, X2, A1, A2), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (*)(X1, X2, A1, A2),
-                         Tuple<P1, P2>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2),
-                               Tuple<P1, P2>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2),
-                 Tuple<P1, P2>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2),
-                         Tuple<P1, P2>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2),
-                               Tuple<P1, P2>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2231,76 +2340,76 @@
 // 2 - 3
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (*function)(X1, X2, A1, A2, A3), const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (*)(X1, X2, A1, A2, A3),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2309,40 +2418,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename A4, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -2350,39 +2459,39 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename A4, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2391,40 +2500,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -2432,39 +2541,39 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2473,41 +2582,42 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename A6, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5, A6), const P1& p1,
-    const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5,
+      A6>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename A6, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -2515,40 +2625,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename A6, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6, typename X1,
           typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5,
+      A6>>
+          (function, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename A6, typename X1, typename X2>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2556,77 +2667,77 @@
 // 3 - 0
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2,
-    const P3& p3) {
-  MutantRunner<R, Tuple<>>* t =
+      const P3& p3) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3),
-                 Tuple<P1, P2, P3>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (*function)(X1, X2, X3), const P1& p1, const P2& p2,
-    const P3& p3) {
-  MutantRunner<R, Tuple<>>* t =
+      const P3& p3) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3),
-                         Tuple<P1, P2, P3>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2,
-    const P3& p3) {
-  MutantRunner<R, Tuple<>>* t =
+      const P3& p3) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3),
-                               Tuple<P1, P2, P3>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3),
-                 Tuple<P1, P2, P3>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3), const P1& p1, const P2& p2,
-    const P3& p3) {
-  MutantRunner<R, Tuple<>>* t =
+      const P3& p3) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3),
-                         Tuple<P1, P2, P3>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3),
-                               Tuple<P1, P2, P3>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2634,77 +2745,77 @@
 // 3 - 1
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, A1),
-                 Tuple<P1, P2, P3>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (*function)(X1, X2, X3, A1), const P1& p1, const P2& p2,
-    const P3& p3) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P3& p3) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, A1),
-                         Tuple<P1, P2, P3>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1),
-                               Tuple<P1, P2, P3>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1),
-                 Tuple<P1, P2, P3>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1),
-                         Tuple<P1, P2, P3>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1),
-                               Tuple<P1, P2, P3>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2713,40 +2824,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename X1, typename X2,
           typename X3>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (*function)(X1, X2, X3, A1, A2), const P1& p1, const P2& p2,
-    const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, A1, A2),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename X1, typename X2,
           typename X3>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -2754,39 +2865,39 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename X1, typename X2,
           typename X3>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename X1, typename X2,
           typename X3>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2795,40 +2906,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3), const P1& p1, const P2& p2,
-    const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -2836,39 +2947,39 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2877,41 +2988,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename A4, typename X1, typename X2,
           typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -2919,40 +3030,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename A4, typename X1, typename X2,
           typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -2961,41 +3072,42 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
+      A5>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3003,40 +3115,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1,
           typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
+      A5>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3045,41 +3158,42 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5, A6), const P1& p1,
-    const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
+      A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3087,40 +3201,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5,
-    A6), const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      A6), const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
+      A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6, typename X1, typename X2, typename X3>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5,
-    A6), const P1& p1, const P2& p2, const P3& p3) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      A6), const P1& p1, const P2& p2, const P3& p3) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3129,40 +3244,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4),
-                 Tuple<P1, P2, P3, P4>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (*function)(X1, X2, X3, X4), const P1& p1, const P2& p2,
-    const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<>>* t =
+      const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4),
-                         Tuple<P1, P2, P3, P4>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4),
-                               Tuple<P1, P2, P3, P4>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3170,39 +3285,39 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4),
-                 Tuple<P1, P2, P3, P4>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4),
-                         Tuple<P1, P2, P3, P4>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4),
-                               Tuple<P1, P2, P3, P4>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3211,40 +3326,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, A1), const P1& p1, const P2& p2,
-    const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, A1),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3252,39 +3367,39 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3293,41 +3408,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename X1,
           typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2), const P1& p1, const P2& p2,
-    const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename X1,
           typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3335,40 +3450,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename X1,
           typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename X1,
           typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3377,41 +3492,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3419,40 +3534,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3461,41 +3576,42 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename A4, typename X1,
           typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
+      A4>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3503,40 +3619,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename A4, typename X1,
           typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
+      A4>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3546,27 +3663,28 @@
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
+      A4, A5>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -3574,14 +3692,14 @@
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3590,41 +3708,42 @@
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
-    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
+      A4, A5>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1, typename X2, typename X3,
           typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
-    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3634,27 +3753,29 @@
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
+      A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename A6, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
+      A4, A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -3662,14 +3783,15 @@
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
+      A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3678,41 +3800,47 @@
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
-    A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5,
+      A6),
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
+      A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename A1, typename A2, typename A3, typename A4, typename A5,
           typename A6, typename X1, typename X2, typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5,
+      A6),
+                         base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
+      A4, A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1, typename X2,
           typename X3, typename X4>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
-    A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5,
+      A6),
+                 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
+      A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3721,41 +3849,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5), const P1& p1, const P2& p2,
-    const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<>>* t =
+      const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3763,40 +3891,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3805,41 +3933,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1), const P1& p1, const P2& p2,
-    const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3847,40 +3975,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3889,41 +4017,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename X1, typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename X1, typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -3931,40 +4059,40 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename X1, typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename X1, typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -3974,27 +4102,28 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4002,14 +4131,14 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4018,41 +4147,42 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4062,27 +4192,28 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename A4,
           typename X1, typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3, A4>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4090,14 +4221,14 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4106,43 +4237,44 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
-    A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename A4,
           typename X1, typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3, A4>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
-    A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4152,28 +4284,30 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3, A4, A5>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4181,14 +4315,15 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4197,44 +4332,50 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
-    A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
-      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+      A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
+      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
+      A5),
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename X1, typename X2, typename X3, typename X4,
           typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
-      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
+      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
+      A5),
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3, A4, A5>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename X1, typename X2,
           typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
-    A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
-      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+      A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
+      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
+      A5),
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4244,29 +4385,31 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
-    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3, A4, A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4274,15 +4417,16 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
-    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4291,45 +4435,51 @@
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
-    A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
+      A5, A6),
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename A1, typename A2, typename A3, typename A4,
           typename A5, typename A6, typename X1, typename X2, typename X3,
           typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
-    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
+      A5, A6),
+                         base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
+      A3, A4, A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename A1, typename A2,
           typename A3, typename A4, typename A5, typename A6, typename X1,
           typename X2, typename X3, typename X4, typename X5>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
-    A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
+      A5, A6),
+                 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
+      A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4338,41 +4488,41 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6), const P1& p1, const P2& p2,
-    const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<>>* t =
+      const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4380,42 +4530,42 @@
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<>>
+inline MutantFunctor<R, base::Tuple<>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4425,27 +4575,27 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4453,14 +4603,14 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4469,43 +4619,43 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1>>
+inline MutantFunctor<R, base::Tuple<A1>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4515,28 +4665,29 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename X1, typename X2, typename X3, typename X4,
           typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4544,15 +4695,15 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename X1, typename X2, typename X3, typename X4,
           typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4561,44 +4712,45 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename X1, typename X2, typename X3, typename X4,
           typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename X1, typename X2, typename X3, typename X4,
           typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2>>
+inline MutantFunctor<R, base::Tuple<A1, A2>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4608,29 +4760,30 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3), const P1& p1,
-    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4638,15 +4791,15 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4655,45 +4808,46 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3>>* t =
+      A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
       new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4703,30 +4857,32 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename A4, typename X1, typename X2, typename X3, typename X4,
           typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3, A4>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4734,15 +4890,16 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4751,45 +4908,51 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
-      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+      A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
+      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4),
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename A4, typename X1, typename X2, typename X3, typename X4,
           typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
-      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
+      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4),
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3, A4>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4>>* t =
-      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t);
+      A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
+      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4),
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4799,30 +4962,32 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
-    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3, A4, A5>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4830,15 +4995,16 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
-    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
+      A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4847,45 +5013,51 @@
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
-      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+      A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
+      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4, A5),
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename X1, typename X2, typename X3,
           typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
-    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
-      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+      A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
+      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4, A5),
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3, A4, A5>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
           typename P3, typename P4, typename P5, typename P6, typename A1,
           typename A2, typename A3, typename A4, typename A5, typename X1,
           typename X2, typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t =
-      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t);
+      A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
+      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4, A5),
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
@@ -4896,30 +5068,33 @@
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5,
-    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
-    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5,
+      A6),
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3, A4, A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
@@ -4928,15 +5103,16 @@
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5,
-    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
-    const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
+      const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
       new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 
@@ -4946,30 +5122,34 @@
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
-                 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4, A5, A6),
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 
 template <typename R, typename P1, typename P2, typename P3, typename P4,
           typename P5, typename P6, typename A1, typename A2, typename A3,
           typename A4, typename A5, typename A6, typename X1, typename X2,
           typename X3, typename X4, typename X5, typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
-    A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
-                         Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4, A5, A6),
+                         base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
+      A2, A3, A4, A5, A6>>
+          (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 template <typename R, typename T, typename U, typename P1, typename P2,
@@ -4977,15 +5157,17 @@
           typename A2, typename A3, typename A4, typename A5, typename A6,
           typename X1, typename X2, typename X3, typename X4, typename X5,
           typename X6>
-inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>
+inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
-    A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
-    const P5& p5, const P6& p6) {
-  MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t =
-      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
-                               Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>>
-          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
-  return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t);
+      A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
+      const P5& p5, const P6& p6) {
+  MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
+      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
+      A4, A5, A6),
+                 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
+      A4, A5, A6>>
+          (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
+  return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
 }
 #endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
 #endif  // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
diff --git a/testing/gtest_ios/unittest-Info.plist b/testing/gtest_ios/unittest-Info.plist
index f443580..6b3c094 100644
--- a/testing/gtest_ios/unittest-Info.plist
+++ b/testing/gtest_ios/unittest-Info.plist
@@ -22,6 +22,8 @@
 	<string>1.0</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
+	<key>NSMainNibFile</key>
+	<string>${MAIN_NIB_FILE}</string>
 	<key>UILaunchImages</key>
 	<array>
 		<dict>
@@ -104,6 +106,42 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>com.google.sso.chrome</string>
+				<string>${BUNDLE_ID_TEST_NAME}.http</string>
+				<string>${BUNDLE_ID_TEST_NAME}.https</string>
+				<string>${BUNDLE_ID_TEST_NAME}-x-callback</string>
+			</array>
+		</dict>
+	</array>
+	<key>UTImportedTypeDeclarations</key>
+	<array>
+		<dict>
+			<key>UTTypeConformsTo</key>
+			<array>
+				<string>public.url</string>
+				<string>org.appextension.find-login-action</string>
+			</array>
+			<key>UTTypeDescription</key>
+			<string>Chrome Password Fill by App Extension Action</string>
+			<key>UTTypeIdentifier</key>
+			<string>org.appextension.chrome-password-action</string>
+		</dict>
+		<dict>
+			<key>UTTypeConformsTo</key>
+			<array>
+				<string>public.url</string>
+			</array>
+			<key>UTTypeDescription</key>
+			<string>1Password Find Login Action</string>
+			<key>UTTypeIdentifier</key>
+			<string>org.appextension.find-login-action</string>
+		</dict>
+	</array>
 	<key>UIBackgroundModes</key>
 	<array>
 		<string>fetch</string>
diff --git a/testing/gtest_mac.mm b/testing/gtest_mac.mm
index b39d258..6aee989 100644
--- a/testing/gtest_mac.mm
+++ b/testing/gtest_mac.mm
@@ -6,9 +6,9 @@
 
 #include <string>
 
+#include <gtest/gtest.h>
 #include <gtest/internal/gtest-port.h>
 #include <gtest/internal/gtest-string.h>
-#include <gtest/gtest.h>
 
 #ifdef GTEST_OS_MAC
 
diff --git a/testing/gtest_mac_unittest.mm b/testing/gtest_mac_unittest.mm
index 9363b41..01f1497 100644
--- a/testing/gtest_mac_unittest.mm
+++ b/testing/gtest_mac_unittest.mm
@@ -11,8 +11,8 @@
 #import <Foundation/Foundation.h>
 
 #include "base/mac/scoped_nsautorelease_pool.h"
-#include "testing/gtest/include/gtest/internal/gtest-port.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gtest/include/gtest/internal/gtest-port.h"
 
 TEST(GTestMac, ExpectNSEQ) {
   base::mac::ScopedNSAutoreleasePool pool;
diff --git a/testing/gtest_nacl.gyp b/testing/gtest_nacl.gyp
index e375dc5..d1c0ce0 100644
--- a/testing/gtest_nacl.gyp
+++ b/testing/gtest_nacl.gyp
@@ -20,7 +20,9 @@
             'nlib_target': 'libgtest_nacl.a',
             'build_glibc': 0,
             'build_newlib': 0,
+            'build_irt': 0,
             'build_pnacl_newlib': 1,
+            'build_nonsfi_helper': 1,
           },
           'sources': [
             '<@(gtest_sources)',
@@ -70,7 +72,9 @@
             'nlib_target': 'libgtest_main_nacl.a',
             'build_glibc': 0,
             'build_newlib': 0,
+            'build_irt': 0,
             'build_pnacl_newlib': 1,
+            'build_nonsfi_helper': 1,
           },
           'dependencies': [
             'gtest_nacl',
diff --git a/testing/iossim/iossim.gyp b/testing/iossim/iossim.gyp
index 0fdd8b1..6041d39 100644
--- a/testing/iossim/iossim.gyp
+++ b/testing/iossim/iossim.gyp
@@ -3,6 +3,9 @@
 # found in the LICENSE file.
 
 {
+  'variables': {
+    'mac_deployment_target': '10.8'
+  },
   'conditions': [
     ['OS!="ios" or "<(GENERATOR)"!="xcode" or "<(GENERATOR_FLAVOR)"=="ninja"', {
       'targets': [
@@ -25,13 +28,6 @@
               'defines': [
                 'IOSSIM_USE_XCODE_6',
               ],
-              'xcode_settings': {
-                # The CoreSimulator.h file generated by class-dump defines a
-                # property of type |NSString*| and a setter for the property
-                # that takes a parameter of type |id|. This type mismatch causes
-                # a compiler warning, so turn off -Werror.
-                'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO',
-              },
               'actions': [
                 {
                   'action_name': 'generate_dvt_foundation_header',
@@ -83,7 +79,7 @@
             }],  # xcode_version
           ],  # conditions
           'dependencies': [
-            'third_party/class-dump/class-dump.gyp:class-dump#host',
+            '<(DEPTH)/third_party/class-dump/class-dump.gyp:class-dump#host',
           ],
           'include_dirs': [
             '<(INTERMEDIATE_DIR)/iossim',
@@ -120,9 +116,6 @@
           ],  # actions
           'xcode_settings': {
             'ARCHS': ['x86_64'],
-            'WARNING_CFLAGS': [
-              '-Wno-objc-property-no-attribute',
-            ],
           },
         },
       ],
diff --git a/testing/iossim/iossim.mm b/testing/iossim/iossim.mm
index 2f2af8d..3910ba5 100644
--- a/testing/iossim/iossim.mm
+++ b/testing/iossim/iossim.mm
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import <Foundation/Foundation.h>
 #include <asl.h>
+#import <Foundation/Foundation.h>
 #include <libgen.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -28,15 +28,9 @@
 #import "DVTFoundation.h"
 #endif  // IOSSIM_USE_XCODE_6
 
-@protocol OS_dispatch_queue
-@end
-@protocol OS_dispatch_source
-@end
 // TODO(lliabraa): Once all builders are on Xcode 6 this ifdef can be removed
 // (crbug.com/385030).
 #if defined(IOSSIM_USE_XCODE_6)
-@protocol OS_xpc_object
-@end
 @protocol SimBridge;
 @class SimDeviceSet;
 @class SimDeviceType;
diff --git a/testing/iossim/redirect-stdout.sh b/testing/iossim/redirect-stdout.sh
index d6c3cf8..4465503 100755
--- a/testing/iossim/redirect-stdout.sh
+++ b/testing/iossim/redirect-stdout.sh
@@ -20,4 +20,6 @@
   exit 2
 fi
 
-$1 | sed /cxx_destruct/d > $2
+echo "// Treat class-dump output as a system header." > $2
+echo "#pragma clang system_header" >> $2
+$1 | sed /cxx_destruct/d >> $2
diff --git a/testing/scripts/gn_check.py b/testing/scripts/gn_check.py
new file mode 100755
index 0000000..5feb166
--- /dev/null
+++ b/testing/scripts/gn_check.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Wrap `gn check` for the bots.
+
+This script wraps the `gn check` command in the facade needed for the
+'ScriptTest' step class of the chromium recipe_module
+(see scripts/slave/recipe_modules/chromium/steps.py in the build repo).
+
+The script takes no arguments.
+"""
+
+
+import json
+import os
+import sys
+
+
+import common
+
+
+def main_run(args):
+  if sys.platform == 'win32':
+    exe = os.path.join(common.SRC_DIR, 'buildtools', 'win', 'gn.exe')
+  elif sys.platform == 'mac':
+    exe = os.path.join(common.SRC_DIR, 'buildtools', 'mac', 'gn')
+  else:
+    exe = os.path.join(common.SRC_DIR, 'buildtools', 'linux64', 'gn')
+
+  rc = common.run_command([
+      exe,
+      '--root=%s' % common.SRC_DIR,
+      'check',
+      '//out/%s' % args.build_config_fs,
+  ])
+
+  # TODO(dpranke): Figure out how to get a list of failures out of gn check?
+  json.dump({
+      'valid': True,
+      'failures': ['check_failed'] if rc else [],
+  }, args.output)
+
+  return rc
+
+
+def main_compile_targets(args):
+  json.dump([], args.output)
+
+
+if __name__ == '__main__':
+  funcs = {
+    'run': main_run,
+    'compile_targets': main_compile_targets,
+  }
+  sys.exit(common.run_script(sys.argv[1:], funcs))
diff --git a/testing/scripts/gyp_flag_compare.py b/testing/scripts/gyp_flag_compare.py
new file mode 100755
index 0000000..0b777d9
--- /dev/null
+++ b/testing/scripts/gyp_flag_compare.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Wrap //tools/gn/bin/gyp_flag_compare.py for the bots.
+
+This script wraps the GN test script in the facade needed for the
+'ScriptTest' step class of the chromium recipe_module
+(see scripts/slave/recipe_modules/chromium/steps.py in the build repo.
+
+The script takes N arguments, for the N targets to compare flags for.
+"""
+
+import json
+import os
+import sys
+
+
+import common
+
+
+def main_run(args):
+  rc = common.run_command([sys.executable,
+                           os.path.join(common.SRC_DIR,
+                                        'tools', 'gn', 'bin',
+                                        'gyp_flag_compare.py')] + args.args)
+
+  # TODO(dpranke): Figure out how to get a list of failures out of
+  # gyp_flag_compare?
+  json.dump({
+      'valid': True,
+      'failures': ['compare_failed'] if rc else [],
+  }, args.output)
+
+  return rc
+
+
+def main_compile_targets(args):
+  # TODO(dpranke): Figure out how to get args.args plumbed through to here.
+  json.dump([], args.output)
+
+
+if __name__ == '__main__':
+  funcs = {
+    'run': main_run,
+    'compile_targets': main_compile_targets,
+  }
+  sys.exit(common.run_script(sys.argv[1:], funcs))
diff --git a/testing/scripts/mojo_apptest.py b/testing/scripts/mojo_apptest.py
new file mode 100755
index 0000000..09e3f23
--- /dev/null
+++ b/testing/scripts/mojo_apptest.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import json
+import os
+import sys
+
+
+import common
+
+
+def main_run(args):
+  runner = os.path.join(common.SRC_DIR, 'mojo', 'tools', 'apptest_runner.py')
+  tests = os.path.join(common.SRC_DIR, 'mojo', 'tools', 'data', 'apptests')
+  build_dir = os.path.join(common.SRC_DIR, 'out', args.build_config_fs)
+
+  with common.temporary_file() as tempfile_path:
+    rc = common.run_command([runner, tests, build_dir, '--verbose',
+                             '--write-full-results-to', tempfile_path])
+    with open(tempfile_path) as f:
+      results = json.load(f)
+
+  parsed_results = common.parse_common_test_results(results, test_separator='.')
+  failures = parsed_results['unexpected_failures']
+
+  json.dump({
+      'valid': bool(rc <= common.MAX_FAILURES_EXIT_STATUS and
+                   ((rc == 0) or failures)),
+      'failures': failures.keys(),
+  }, args.output)
+
+  return rc
+
+
+def main_compile_targets(args):
+  json.dump(['mandoline:tests'], args.output)
+
+
+if __name__ == '__main__':
+  funcs = {
+    'run': main_run,
+    'compile_targets': main_compile_targets,
+  }
+  sys.exit(common.run_script(sys.argv[1:], funcs))
diff --git a/testing/test.gni b/testing/test.gni
index b4cdbed..c99df90 100644
--- a/testing/test.gni
+++ b/testing/test.gni
@@ -131,9 +131,25 @@
       }
     }
 
+    test_name = main_target_name
+    if (defined(invoker.output_name)) {
+      test_name = invoker.output_name
+    }
+    test_runner_script_name = "${test_name}__test_runner_script"
+    test_runner_script(test_runner_script_name) {
+      test_name = test_name
+      test_type = "gtest"
+      test_suite = test_name
+      if (defined(invoker.isolate_file)) {
+        isolate_file = invoker.isolate_file
+      }
+    }
+
     group(target_name) {
       testonly = true
-
+      datadeps = [
+        ":$test_runner_script_name",
+      ]
       deps = [
         ":$library_name",
         ":$apk_name",
diff --git a/testing/variations/PRESUBMIT.py b/testing/variations/PRESUBMIT.py
new file mode 100644
index 0000000..9e565e0
--- /dev/null
+++ b/testing/variations/PRESUBMIT.py
@@ -0,0 +1,83 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Presubmit script validating field trial configs.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details on the presubmit API built into depot_tools.
+"""
+
+def ValidateData(json_data, file_path, message_type):
+  """Validates the format of a fieldtrial configuration.
+
+  Args:
+    json_data: Parsed JSON object representing the fieldtrial config.
+    file_path: String representing the path to the JSON file.
+    message_type: Type of message from |output_api| to return in the case of
+        errors/warnings.
+
+  Returns:
+    A list of |message_type| messages. In the case of all tests passing with no
+    warnings/errors, this will return [].
+  """
+  if not isinstance(json_data, dict):
+    return [message_type(
+        'Malformed config file %s: Expecting dict' % file_path)]
+  for (study, groups) in json_data.iteritems():
+    if not isinstance(study, unicode):
+      return [message_type(
+          'Malformed config file %s: Expecting keys to be string, got %s'
+          % (file_path, type(study)))]
+    if not isinstance(groups, list):
+      return [message_type(
+          'Malformed config file %s: Expecting list for study %s'
+          % (file_path, study))]
+    for group in groups:
+      if not isinstance(group, dict):
+        return [message_type(
+            'Malformed config file %s: Expecting dict for group in '
+            'Study[%s]' % (file_path, study))]
+      if not 'group_name' in group or not isinstance(group['group_name'],
+          unicode):
+        return [message_type(
+            'Malformed config file %s: Missing valid group_name for group'
+            ' in Study[%s]' % (file_path, study))]
+      if 'params' in group:
+        params = group['params']
+        if not isinstance(params, dict):
+          return [message_type(
+              'Malformed config file %s: Invalid params for Group[%s]'
+              ' in Study[%s]' % (file_path, group['group_name'],
+              study))]
+        for (key, value) in params.iteritems():
+          if not isinstance(key, unicode) or not isinstance(value,
+              unicode):
+            return [message_type(
+                'Malformed config file %s: Invalid params for Group[%s]'
+                ' in Study[%s]' % (file_path, group['group_name'],
+                study))]
+  return []
+
+def CommonChecks(input_api, output_api):
+  affected_files = input_api.AffectedFiles(
+      include_deletes=False,
+      file_filter=lambda x: x.LocalPath().endswith('.json'))
+  for f in affected_files:
+    contents = input_api.ReadFile(f)
+    try:
+      json_data = input_api.json.loads(contents)
+      result =  ValidateData(json_data, f.LocalPath(),
+          output_api.PresubmitError)
+      if len(result):
+        return result
+    except ValueError:
+      return [output_api.PresubmitError(
+          'Malformed JSON file: %s' % f.LocalPath())]
+  return []
+
+def CheckChangeOnUpload(input_api, output_api):
+  return CommonChecks(input_api, output_api)
+
+def CheckChangeOnCommit(input_api, output_api):
+  return CommonChecks(input_api, output_api)
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/testing/variations/fieldtrial_testing_config_win.json b/testing/variations/fieldtrial_testing_config_win.json
new file mode 100644
index 0000000..c80a14e
--- /dev/null
+++ b/testing/variations/fieldtrial_testing_config_win.json
@@ -0,0 +1,97 @@
+{
+    "BrowserBlacklist": [
+        {
+            "group_name": "Enabled"
+        }
+    ],
+    "CTRequiredForEVTrial": [
+        {
+            "group_name": "RequirementEnforced"
+        }
+    ],
+    "ChildAccountDetection": [
+        {
+            "group_name": "Disabled"
+        }
+    ],
+    "ChromeDashboard": [
+        {
+            "group_name": "Default"
+        }
+    ],
+    "ExtensionContentVerification": [
+        {
+            "group_name": "Enforce"
+        }
+    ],
+    "ExtensionInstallVerification": [
+        {
+            "group_name": "Enforce"
+        }
+    ],
+    "GoogleNow": [
+        {
+            "group_name": "Enable"
+        }
+    ],
+    "IconNTP": [
+        {
+            "group_name": "Default"
+        }
+    ],
+    "NewProfileManagement": [
+        {
+            "group_name": "Enabled"
+        }
+    ],
+    "PasswordGeneration": [
+        {
+            "group_name": "Disabled"
+        }
+    ],
+    "RefreshTokenDeviceId": [
+        {
+            "group_name": "Enabled"
+        }
+    ],
+    "SHA1IdentityUIWarning": [
+        {
+            "group_name": "Enabled"
+        }
+    ],
+    "SHA1ToolbarUIJanuary2016": [
+        {
+            "group_name": "Warning"
+        }
+    ],
+    "SHA1ToolbarUIJanuary2017": [
+        {
+            "group_name": "Error"
+        }
+    ],
+    "SRTPromptFieldTrial": [
+        {
+            "group_name": "Default"
+        }
+    ],
+    "SettingsEnforcement": [
+        {
+            "group_name": "enforce_always_with_extensions_and_dse"
+        }
+    ],
+    "ShowAppLauncherPromo": [
+        {
+            "group_name": "ShowPromoUntilDismissed"
+        }
+    ],
+    "UwSInterstitialStatus": [
+        {
+            "group_name": "On"
+        }
+    ],
+    "VoiceTrigger": [
+        {
+            "group_name": "Install"
+        }
+    ]
+}