Merge pull request #13631 from sreecha/cv-wait-monotonic

Use monotonic clock type for gpr_cv_wait
diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl
index 2ef8544..0f92608 100644
--- a/bazel/grpc_build_system.bzl
+++ b/bazel/grpc_build_system.bzl
@@ -98,7 +98,7 @@
         args = [
           poller,
           '$(location %s)' % name
-        ],
+        ] + args['args'],
       )
   else:
     native.cc_test(**args)
diff --git a/include/grpc++/impl/codegen/async_unary_call.h b/include/grpc++/impl/codegen/async_unary_call.h
index b9ea5fd..fb57300 100644
--- a/include/grpc++/impl/codegen/async_unary_call.h
+++ b/include/grpc++/impl/codegen/async_unary_call.h
@@ -103,6 +103,13 @@
     assert(size == sizeof(ClientAsyncResponseReader));
   }
 
+  // This operator should never be called as the memory should be freed as part
+  // of the arena destruction. It only exists to provide a matching operator
+  // delete to the operator new so that some compilers will not complain (see
+  // https://github.com/grpc/grpc/issues/11301) Note at the time of adding this
+  // there are no tests catching the compiler warning.
+  static void operator delete(void*, void*) { assert(0); }
+
   void StartCall() override {
     assert(!started_);
     started_ = true;
diff --git a/include/grpc++/impl/codegen/call.h b/include/grpc++/impl/codegen/call.h
index af2c2b5..e581049 100644
--- a/include/grpc++/impl/codegen/call.h
+++ b/include/grpc++/impl/codegen/call.h
@@ -558,10 +558,12 @@
 
 class CallOpClientRecvStatus {
  public:
-  CallOpClientRecvStatus() : recv_status_(nullptr) {}
+  CallOpClientRecvStatus()
+      : recv_status_(nullptr), debug_error_string_(nullptr) {}
 
   void ClientRecvStatus(ClientContext* context, Status* status) {
-    metadata_map_ = &context->trailing_metadata_;
+    client_context_ = context;
+    metadata_map_ = &client_context_->trailing_metadata_;
     recv_status_ = status;
     error_message_ = g_core_codegen_interface->grpc_empty_slice();
   }
@@ -574,7 +576,7 @@
     op->data.recv_status_on_client.trailing_metadata = metadata_map_->arr();
     op->data.recv_status_on_client.status = &status_code_;
     op->data.recv_status_on_client.status_details = &error_message_;
-    op->data.recv_status_on_client.error_string = nullptr;
+    op->data.recv_status_on_client.error_string = &debug_error_string_;
     op->flags = 0;
     op->reserved = NULL;
   }
@@ -592,13 +594,20 @@
                            grpc::string(GRPC_SLICE_START_PTR(error_message_),
                                         GRPC_SLICE_END_PTR(error_message_)),
                            binary_error_details);
+    client_context_->set_debug_error_string(
+        debug_error_string_ != nullptr ? debug_error_string_ : "");
     g_core_codegen_interface->grpc_slice_unref(error_message_);
+    if (debug_error_string_ != nullptr) {
+      g_core_codegen_interface->gpr_free((void*)debug_error_string_);
+    }
     recv_status_ = nullptr;
   }
 
  private:
+  ClientContext* client_context_;
   MetadataMap* metadata_map_;
   Status* recv_status_;
+  const char* debug_error_string_;
   grpc_status_code status_code_;
   grpc_slice error_message_;
 };
diff --git a/include/grpc++/impl/codegen/client_context.h b/include/grpc++/impl/codegen/client_context.h
index 22b581c..61d97ce 100644
--- a/include/grpc++/impl/codegen/client_context.h
+++ b/include/grpc++/impl/codegen/client_context.h
@@ -348,6 +348,13 @@
   /// Applications never need to call this method.
   grpc_call* c_call() { return call_; }
 
+  /// EXPERIMENTAL debugging API
+  ///
+  /// if status is not ok() for an RPC, this will return a detailed string
+  /// of the gRPC Core error that led to the failure. It should not be relied
+  /// upon for anything other than gaining more debug data in failure cases.
+  grpc::string debug_error_string() const { return debug_error_string_; }
+
  private:
   // Disallow copy and assign.
   ClientContext(const ClientContext&);
@@ -374,6 +381,11 @@
   template <class InputMessage, class OutputMessage>
   friend class ::grpc::internal::BlockingUnaryCallImpl;
 
+  // Used by friend class CallOpClientRecvStatus
+  void set_debug_error_string(const grpc::string& debug_error_string) {
+    debug_error_string_ = debug_error_string;
+  }
+
   grpc_call* call() const { return call_; }
   void set_call(grpc_call* call, const std::shared_ptr<Channel>& channel);
 
@@ -412,6 +424,8 @@
 
   grpc_compression_algorithm compression_algorithm_;
   bool initial_metadata_corked_;
+
+  grpc::string debug_error_string_;
 };
 
 }  // namespace grpc
diff --git a/src/core/lib/security/credentials/google_default/credentials_generic.cc b/src/core/lib/security/credentials/google_default/credentials_generic.cc
index 58ee080..af103f5 100644
--- a/src/core/lib/security/credentials/google_default/credentials_generic.cc
+++ b/src/core/lib/security/credentials/google_default/credentials_generic.cc
@@ -29,7 +29,7 @@
   char* result = nullptr;
   char* base = gpr_getenv(GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR);
   if (base == nullptr) {
-    gpr_log(GPR_ERROR, "Could not get " GRPC_GOOGLE_CREDENTIALS_ENV_VAR
+    gpr_log(GPR_ERROR, "Could not get " GRPC_GOOGLE_CREDENTIALS_PATH_ENV_VAR
                        " environment variable.");
     return nullptr;
   }
diff --git a/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs b/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs
new file mode 100644
index 0000000..a43040f
--- /dev/null
+++ b/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs
@@ -0,0 +1,86 @@
+#region Copyright notice and license
+
+// Copyright 2017 gRPC authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core;
+using Grpc.Core.Internal;
+using Grpc.Core.Profiling;
+using Grpc.Core.Utils;
+using NUnit.Framework;
+
+namespace Grpc.Core.Tests
+{
+    public class ChannelConnectivityTest
+    {
+        const string Host = "127.0.0.1";
+
+        MockServiceHelper helper;
+        Server server;
+        Channel channel;
+
+        [SetUp]
+        public void Init()
+        {
+            helper = new MockServiceHelper(Host);
+            server = helper.GetServer();
+            server.Start();
+            channel = helper.GetChannel();
+        }
+
+        [TearDown]
+        public void Cleanup()
+        {
+            channel.ShutdownAsync().Wait();
+            server.ShutdownAsync().Wait();
+        }
+
+        [Test]
+        public async Task Channel_WaitForStateChangedAsync()
+        {
+            helper.UnaryHandler = new UnaryServerMethod<string, string>((request, context) =>
+            {
+                return Task.FromResult(request);
+            });
+
+            Assert.ThrowsAsync(typeof(TaskCanceledException), 
+                async () => await channel.WaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(10)));
+
+            var stateChangedTask = channel.WaitForStateChangedAsync(channel.State);
+
+            await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc");
+
+            await stateChangedTask;
+            Assert.AreEqual(ChannelState.Ready, channel.State);
+        }
+
+        [Test]
+        public async Task Channel_ConnectAsync()
+        {
+            await channel.ConnectAsync();
+            Assert.AreEqual(ChannelState.Ready, channel.State);
+
+            await channel.ConnectAsync(DateTime.UtcNow.AddMilliseconds(1000));
+            Assert.AreEqual(ChannelState.Ready, channel.State);
+        }
+    }
+}
diff --git a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
index 90dd365..331c332 100644
--- a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
@@ -373,34 +373,5 @@
             });
             Assert.AreEqual("PASS", Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "abc"));
         }
-
-        [Test]
-        public async Task Channel_WaitForStateChangedAsync()
-        {
-            helper.UnaryHandler = new UnaryServerMethod<string, string>((request, context) =>
-            {
-                return Task.FromResult(request);
-            });
-
-            Assert.ThrowsAsync(typeof(TaskCanceledException), 
-                async () => await channel.WaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(10)));
-
-            var stateChangedTask = channel.WaitForStateChangedAsync(channel.State);
-
-            await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc");
-
-            await stateChangedTask;
-            Assert.AreEqual(ChannelState.Ready, channel.State);
-        }
-
-        [Test]
-        public async Task Channel_ConnectAsync()
-        {
-            await channel.ConnectAsync();
-            Assert.AreEqual(ChannelState.Ready, channel.State);
-
-            await channel.ConnectAsync(DateTime.UtcNow.AddMilliseconds(1000));
-            Assert.AreEqual(ChannelState.Ready, channel.State);
-        }
     }
 }
diff --git a/src/csharp/Grpc.Core.Tests/Internal/CompletionQueueSafeHandleTest.cs b/src/csharp/Grpc.Core.Tests/Internal/CompletionQueueSafeHandleTest.cs
index 775c950..7e4e297 100644
--- a/src/csharp/Grpc.Core.Tests/Internal/CompletionQueueSafeHandleTest.cs
+++ b/src/csharp/Grpc.Core.Tests/Internal/CompletionQueueSafeHandleTest.cs
@@ -40,7 +40,7 @@
         public void CreateAsyncAndShutdown()
         {
             var env = GrpcEnvironment.AddRef();
-            var cq = CompletionQueueSafeHandle.CreateAsync(new CompletionRegistry(env, () => BatchContextSafeHandle.Create()));
+            var cq = CompletionQueueSafeHandle.CreateAsync(new CompletionRegistry(env, () => BatchContextSafeHandle.Create(), () => RequestCallContextSafeHandle.Create()));
             cq.Shutdown();
             var ev = cq.Next();
             cq.Dispose();
diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs
index f9925a8..e39da9c 100644
--- a/src/csharp/Grpc.Core/Channel.cs
+++ b/src/csharp/Grpc.Core/Channel.cs
@@ -152,8 +152,11 @@
                 "Shutdown is a terminal state. No further state changes can occur.");
             var tcs = new TaskCompletionSource<object>();
             var deadlineTimespec = deadline.HasValue ? Timespec.FromDateTime(deadline.Value) : Timespec.InfFuture;
-            // pass "tcs" as "state" for WatchConnectivityStateHandler.
-            handle.WatchConnectivityState(lastObservedState, deadlineTimespec, completionQueue, WatchConnectivityStateHandler, tcs);
+            lock (myLock)
+            {
+                // pass "tcs" as "state" for WatchConnectivityStateHandler.
+                handle.WatchConnectivityState(lastObservedState, deadlineTimespec, completionQueue, WatchConnectivityStateHandler, tcs);
+            }
             return tcs.Task;
         }
 
@@ -236,7 +239,10 @@
                 Logger.Warning("Channel shutdown was called but there are still {0} active calls for that channel.", activeCallCount);
             }
 
-            handle.Dispose();
+            lock (myLock)
+            {
+                handle.Dispose();
+            }
 
             await Task.WhenAll(GrpcEnvironment.ReleaseAsync(), connectivityWatcherTask).ConfigureAwait(false);
         }
@@ -285,7 +291,10 @@
         {
             try
             {
-                return handle.CheckConnectivityState(tryToConnect);
+                lock (myLock)
+                {
+                    return handle.CheckConnectivityState(tryToConnect);
+                }
             }
             catch (ObjectDisposedException)
             {
diff --git a/src/csharp/Grpc.Core/GrpcEnvironment.cs b/src/csharp/Grpc.Core/GrpcEnvironment.cs
index 2b1b5e3..7b4342b 100644
--- a/src/csharp/Grpc.Core/GrpcEnvironment.cs
+++ b/src/csharp/Grpc.Core/GrpcEnvironment.cs
@@ -35,6 +35,8 @@
         const int MinDefaultThreadPoolSize = 4;
         const int DefaultBatchContextPoolSharedCapacity = 10000;
         const int DefaultBatchContextPoolThreadLocalCapacity = 64;
+        const int DefaultRequestCallContextPoolSharedCapacity = 10000;
+        const int DefaultRequestCallContextPoolThreadLocalCapacity = 64;
 
         static object staticLock = new object();
         static GrpcEnvironment instance;
@@ -44,12 +46,15 @@
         static bool inlineHandlers;
         static int batchContextPoolSharedCapacity = DefaultBatchContextPoolSharedCapacity;
         static int batchContextPoolThreadLocalCapacity = DefaultBatchContextPoolThreadLocalCapacity;
+        static int requestCallContextPoolSharedCapacity = DefaultRequestCallContextPoolSharedCapacity;
+        static int requestCallContextPoolThreadLocalCapacity = DefaultRequestCallContextPoolThreadLocalCapacity;
         static readonly HashSet<Channel> registeredChannels = new HashSet<Channel>();
         static readonly HashSet<Server> registeredServers = new HashSet<Server>();
 
         static ILogger logger = new LogLevelFilterLogger(new ConsoleLogger(), LogLevel.Off, true);
 
         readonly IObjectPool<BatchContextSafeHandle> batchContextPool;
+        readonly IObjectPool<RequestCallContextSafeHandle> requestCallContextPool;
         readonly GrpcThreadPool threadPool;
         readonly DebugStats debugStats = new DebugStats();
         readonly AtomicCounter cqPickerCounter = new AtomicCounter();
@@ -263,6 +268,26 @@
         }
 
         /// <summary>
+        /// Sets the parameters for a pool that caches request call context instances. Reusing request call context instances
+        /// instead of creating a new one for every requested call in C core helps reducing the GC pressure.
+        /// Can be only invoked before the <c>GrpcEnviroment</c> is started and cannot be changed afterwards.
+        /// This is an advanced setting and you should only use it if you know what you are doing.
+        /// Most users should rely on the default value provided by gRPC library.
+        /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
+        /// </summary>
+        public static void SetRequestCallContextPoolParams(int sharedCapacity, int threadLocalCapacity)
+        {
+            lock (staticLock)
+            {
+                GrpcPreconditions.CheckState(instance == null, "Can only be set before GrpcEnvironment is initialized");
+                GrpcPreconditions.CheckArgument(sharedCapacity >= 0, "Shared capacity needs to be a non-negative number");
+                GrpcPreconditions.CheckArgument(threadLocalCapacity >= 0, "Thread local capacity needs to be a non-negative number");
+                requestCallContextPoolSharedCapacity = sharedCapacity;
+                requestCallContextPoolThreadLocalCapacity = threadLocalCapacity;
+            }
+        }
+
+        /// <summary>
         /// Occurs when <c>GrpcEnvironment</c> is about the start the shutdown logic.
         /// If <c>GrpcEnvironment</c> is later initialized and shutdown, the event will be fired again (unless unregistered first).
         /// </summary>
@@ -275,6 +300,7 @@
         {
             GrpcNativeInit();
             batchContextPool = new DefaultObjectPool<BatchContextSafeHandle>(() => BatchContextSafeHandle.Create(this.batchContextPool), batchContextPoolSharedCapacity, batchContextPoolThreadLocalCapacity);
+            requestCallContextPool = new DefaultObjectPool<RequestCallContextSafeHandle>(() => RequestCallContextSafeHandle.Create(this.requestCallContextPool), requestCallContextPoolSharedCapacity, requestCallContextPoolThreadLocalCapacity);
             threadPool = new GrpcThreadPool(this, GetThreadPoolSizeOrDefault(), GetCompletionQueueCountOrDefault(), inlineHandlers);
             threadPool.Start();
         }
@@ -292,6 +318,8 @@
 
         internal IObjectPool<BatchContextSafeHandle> BatchContextPool => batchContextPool;
 
+        internal IObjectPool<RequestCallContextSafeHandle> RequestCallContextPool => requestCallContextPool;
+
         internal bool IsAlive
         {
             get
diff --git a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
index cf3f3c0..79d0c91 100644
--- a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
+++ b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs
@@ -37,14 +37,16 @@
 
         readonly GrpcEnvironment environment;
         readonly Func<BatchContextSafeHandle> batchContextFactory;
+        readonly Func<RequestCallContextSafeHandle> requestCallContextFactory;
         readonly Dictionary<IntPtr, IOpCompletionCallback> dict = new Dictionary<IntPtr, IOpCompletionCallback>(new IntPtrComparer());
         SpinLock spinLock = new SpinLock(Debugger.IsAttached);
         IntPtr lastRegisteredKey;  // only for testing
 
-        public CompletionRegistry(GrpcEnvironment environment, Func<BatchContextSafeHandle> batchContextFactory)
+        public CompletionRegistry(GrpcEnvironment environment, Func<BatchContextSafeHandle> batchContextFactory, Func<RequestCallContextSafeHandle> requestCallContextFactory)
         {
             this.environment = GrpcPreconditions.CheckNotNull(environment);
             this.batchContextFactory = GrpcPreconditions.CheckNotNull(batchContextFactory);
+            this.requestCallContextFactory = GrpcPreconditions.CheckNotNull(requestCallContextFactory);
         }
 
         public void Register(IntPtr key, IOpCompletionCallback callback)
@@ -73,10 +75,12 @@
             return ctx;
         }
 
-        public void RegisterRequestCallCompletion(RequestCallContextSafeHandle ctx, RequestCallCompletionDelegate callback)
+        public RequestCallContextSafeHandle RegisterRequestCallCompletion(RequestCallCompletionDelegate callback)
         {
+            var ctx = requestCallContextFactory();
             ctx.CompletionCallback = callback;
             Register(ctx.Handle, ctx);
+            return ctx;
         }
 
         public IOpCompletionCallback Extract(IntPtr key)
diff --git a/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs b/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs
index f1b5a4f..8ddda9b 100644
--- a/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs
+++ b/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs
@@ -219,7 +219,7 @@
             var list = new List<CompletionQueueSafeHandle>();
             for (int i = 0; i < completionQueueCount; i++)
             {
-                var completionRegistry = new CompletionRegistry(environment, () => environment.BatchContextPool.Lease());
+                var completionRegistry = new CompletionRegistry(environment, () => environment.BatchContextPool.Lease(), () => environment.RequestCallContextPool.Lease());
                 list.Add(CompletionQueueSafeHandle.CreateAsync(completionRegistry));
             }
             return list.AsReadOnly();
diff --git a/src/csharp/Grpc.Core/Internal/NativeMethods.cs b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
index 43acb8f..8b15c26 100644
--- a/src/csharp/Grpc.Core/Internal/NativeMethods.cs
+++ b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
@@ -61,6 +61,7 @@
         public readonly Delegates.grpcsharp_request_call_context_host_delegate grpcsharp_request_call_context_host;
         public readonly Delegates.grpcsharp_request_call_context_deadline_delegate grpcsharp_request_call_context_deadline;
         public readonly Delegates.grpcsharp_request_call_context_request_metadata_delegate grpcsharp_request_call_context_request_metadata;
+        public readonly Delegates.grpcsharp_request_call_context_reset_delegate grpcsharp_request_call_context_reset;
         public readonly Delegates.grpcsharp_request_call_context_destroy_delegate grpcsharp_request_call_context_destroy;
 
         public readonly Delegates.grpcsharp_composite_call_credentials_create_delegate grpcsharp_composite_call_credentials_create;
@@ -179,6 +180,7 @@
             this.grpcsharp_request_call_context_host = GetMethodDelegate<Delegates.grpcsharp_request_call_context_host_delegate>(library);
             this.grpcsharp_request_call_context_deadline = GetMethodDelegate<Delegates.grpcsharp_request_call_context_deadline_delegate>(library);
             this.grpcsharp_request_call_context_request_metadata = GetMethodDelegate<Delegates.grpcsharp_request_call_context_request_metadata_delegate>(library);
+            this.grpcsharp_request_call_context_reset = GetMethodDelegate<Delegates.grpcsharp_request_call_context_reset_delegate>(library);
             this.grpcsharp_request_call_context_destroy = GetMethodDelegate<Delegates.grpcsharp_request_call_context_destroy_delegate>(library);
 
             this.grpcsharp_composite_call_credentials_create = GetMethodDelegate<Delegates.grpcsharp_composite_call_credentials_create_delegate>(library);
@@ -322,6 +324,7 @@
             public delegate IntPtr grpcsharp_request_call_context_host_delegate(RequestCallContextSafeHandle ctx, out UIntPtr hostLength);
             public delegate Timespec grpcsharp_request_call_context_deadline_delegate(RequestCallContextSafeHandle ctx);
             public delegate IntPtr grpcsharp_request_call_context_request_metadata_delegate(RequestCallContextSafeHandle ctx);
+            public delegate void grpcsharp_request_call_context_reset_delegate(RequestCallContextSafeHandle ctx);
             public delegate void grpcsharp_request_call_context_destroy_delegate(IntPtr ctx);
 
             public delegate CallCredentialsSafeHandle grpcsharp_composite_call_credentials_create_delegate(CallCredentialsSafeHandle creds1, CallCredentialsSafeHandle creds2);
diff --git a/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs b/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs
index 09f5c3e..59e9d9b 100644
--- a/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/RequestCallContextSafeHandle.cs
@@ -30,14 +30,17 @@
     {
         static readonly NativeMethods Native = NativeMethods.Get();
         static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<RequestCallContextSafeHandle>();
+        IObjectPool<RequestCallContextSafeHandle> ownedByPool;
 
         private RequestCallContextSafeHandle()
         {
         }
 
-        public static RequestCallContextSafeHandle Create()
+        public static RequestCallContextSafeHandle Create(IObjectPool<RequestCallContextSafeHandle> ownedByPool = null)
         {
-            return Native.grpcsharp_request_call_context_create();
+            var ctx = Native.grpcsharp_request_call_context_create();
+            ctx.ownedByPool = ownedByPool;
+            return ctx;
         }
 
         public IntPtr Handle
@@ -71,6 +74,19 @@
             return new ServerRpcNew(server, call, method, host, deadline, metadata);
         }
 
+        public void Recycle()
+        {
+            if (ownedByPool != null)
+            {
+                Native.grpcsharp_request_call_context_reset(this);
+                ownedByPool.Return(this);
+            }
+            else
+            {
+                Dispose();
+            }
+        }
+
         protected override bool ReleaseHandle()
         {
             Native.grpcsharp_request_call_context_destroy(handle);
@@ -90,7 +106,7 @@
             finally
             {
                 CompletionCallback = null;
-                Dispose();
+                Recycle();
             }
         }
     }
diff --git a/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
index 9b7ea88..56dda9c 100644
--- a/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs
@@ -75,8 +75,7 @@
         {
             using (completionQueue.NewScope())
             {
-                var ctx = RequestCallContextSafeHandle.Create();
-                completionQueue.CompletionRegistry.RegisterRequestCallCompletion(ctx, callback);
+                var ctx = completionQueue.CompletionRegistry.RegisterRequestCallCompletion(callback);
                 Native.grpcsharp_server_request_call(this, completionQueue, ctx).CheckOk();
             }
         }
diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs
index 71c7f10..60dacbf 100644
--- a/src/csharp/Grpc.Core/Server.cs
+++ b/src/csharp/Grpc.Core/Server.cs
@@ -300,6 +300,7 @@
         {
             if (!shutdownRequested)
             {
+                // TODO(jtattermusch): avoid unnecessary delegate allocation
                 handle.RequestCall((success, ctx) => HandleNewServerRpc(success, ctx, cq), cq);
             }
         }
diff --git a/src/csharp/Grpc.Microbenchmarks/CompletionRegistryBenchmark.cs b/src/csharp/Grpc.Microbenchmarks/CompletionRegistryBenchmark.cs
index eefdb50..bb57a69 100644
--- a/src/csharp/Grpc.Microbenchmarks/CompletionRegistryBenchmark.cs
+++ b/src/csharp/Grpc.Microbenchmarks/CompletionRegistryBenchmark.cs
@@ -43,7 +43,7 @@
         public void Run(int threadCount, int iterations, bool useSharedRegistry)
         {
             Console.WriteLine(string.Format("CompletionRegistryBenchmark: threads={0}, iterations={1}, useSharedRegistry={2}", threadCount, iterations, useSharedRegistry));
-            CompletionRegistry sharedRegistry = useSharedRegistry ? new CompletionRegistry(environment, () => BatchContextSafeHandle.Create()) : null;
+            CompletionRegistry sharedRegistry = useSharedRegistry ? new CompletionRegistry(environment, () => BatchContextSafeHandle.Create(), () => RequestCallContextSafeHandle.Create()) : null;
             var threadedBenchmark = new ThreadedBenchmark(threadCount, () => ThreadBody(iterations, sharedRegistry));
             threadedBenchmark.Run();
             // TODO: parametrize by number of pending completions
@@ -51,7 +51,7 @@
 
         private void ThreadBody(int iterations, CompletionRegistry optionalSharedRegistry)
         {
-            var completionRegistry = optionalSharedRegistry ?? new CompletionRegistry(environment, () => BatchContextSafeHandle.Create());
+            var completionRegistry = optionalSharedRegistry ?? new CompletionRegistry(environment, () => throw new NotImplementedException(), () => throw new NotImplementedException());
             var ctx = BatchContextSafeHandle.Create();
   
             var stopwatch = Stopwatch.StartNew();
diff --git a/src/csharp/Grpc.Microbenchmarks/SendMessageBenchmark.cs b/src/csharp/Grpc.Microbenchmarks/SendMessageBenchmark.cs
index da4f35f..390c062 100644
--- a/src/csharp/Grpc.Microbenchmarks/SendMessageBenchmark.cs
+++ b/src/csharp/Grpc.Microbenchmarks/SendMessageBenchmark.cs
@@ -52,7 +52,7 @@
 
         private void ThreadBody(int iterations, int payloadSize)
         {
-            var completionRegistry = new CompletionRegistry(environment, () => environment.BatchContextPool.Lease());
+            var completionRegistry = new CompletionRegistry(environment, () => environment.BatchContextPool.Lease(), () => throw new NotImplementedException());
             var cq = CompletionQueueSafeHandle.CreateAsync(completionRegistry);
             var call = CreateFakeCall(cq);
 
diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c
index 24d779e..6875d40 100644
--- a/src/csharp/ext/grpc_csharp_ext.c
+++ b/src/csharp/ext/grpc_csharp_ext.c
@@ -226,17 +226,22 @@
 }
 
 GPR_EXPORT void GPR_CALLTYPE
-grpcsharp_request_call_context_destroy(grpcsharp_request_call_context* ctx) {
-  if (!ctx) {
-    return;
-  }
+grpcsharp_request_call_context_reset(grpcsharp_request_call_context* ctx) {
   /* NOTE: ctx->server_rpc_new.call is not destroyed because callback handler is
      supposed
      to take its ownership. */
 
   grpc_call_details_destroy(&(ctx->call_details));
   grpcsharp_metadata_array_destroy_metadata_only(&(ctx->request_metadata));
+  memset(ctx, 0, sizeof(grpcsharp_request_call_context));
+}
 
+GPR_EXPORT void GPR_CALLTYPE
+grpcsharp_request_call_context_destroy(grpcsharp_request_call_context* ctx) {
+  if (!ctx) {
+    return;
+  }
+  grpcsharp_request_call_context_reset(ctx);
   gpr_free(ctx);
 }
 
diff --git a/src/csharp/tests.json b/src/csharp/tests.json
index 82573ed..469328a 100644
--- a/src/csharp/tests.json
+++ b/src/csharp/tests.json
@@ -14,6 +14,7 @@
     "Grpc.Core.Tests.CallCancellationTest",
     "Grpc.Core.Tests.CallCredentialsTest",
     "Grpc.Core.Tests.CallOptionsTest",
+    "Grpc.Core.Tests.ChannelConnectivityTest",
     "Grpc.Core.Tests.ChannelCredentialsTest",
     "Grpc.Core.Tests.ChannelOptionsTest",
     "Grpc.Core.Tests.ChannelTest",
diff --git a/src/objective-c/tests/run_tests.sh b/src/objective-c/tests/run_tests.sh
index 62c4e10..cf0b07e 100755
--- a/src/objective-c/tests/run_tests.sh
+++ b/src/objective-c/tests/run_tests.sh
@@ -34,6 +34,19 @@
 # Kill them when this script exits.
 trap 'kill -9 `jobs -p` ; echo "EXIT TIME:  $(date)"' EXIT
 
+# Boot Xcode first with several retries since Xcode might fail due to a bug:
+# http://www.openradar.me/29785686
+xcrun simctl list | egrep 'iPhone 6 \('
+udid=`xcrun simctl list | egrep 'iPhone 6 \(.*\) \(.*\)' | sed -E 's/ *iPhone 6 \(([^\)]*)\).*/\1/g' | head -n 1`
+retries=0
+while [ $retries -lt 3 ] && ! open -a Simulator --args -CurrentDeviceUDID $udid ; do
+retries=$(($retries+1))
+done
+if [ $retries == 3 ]; then
+  echo "Xcode simulator failed to start after 3 retries."
+  exit 1
+fi
+
 # xcodebuild is very verbose. We filter its output and tell Bash to fail if any
 # element of the pipe fails.
 # TODO(jcanizales): Use xctool instead? Issue #2540.
diff --git a/src/php/ext/grpc/channel_credentials.c b/src/php/ext/grpc/channel_credentials.c
index 86e4f46..d120d6e 100644
--- a/src/php/ext/grpc/channel_credentials.c
+++ b/src/php/ext/grpc/channel_credentials.c
@@ -35,6 +35,7 @@
 #include <zend_hash.h>
 
 #include <grpc/support/alloc.h>
+#include <grpc/support/string_util.h>
 #include <grpc/grpc.h>
 #include <grpc/grpc_security.h>
 
@@ -46,10 +47,11 @@
 
 static grpc_ssl_roots_override_result get_ssl_roots_override(
     char **pem_root_certs) {
-  *pem_root_certs = default_pem_root_certs;
-  if (default_pem_root_certs == NULL) {
+  if (!default_pem_root_certs) {
+    *pem_root_certs = NULL;
     return GRPC_SSL_ROOTS_OVERRIDE_FAIL;
   }
+  *pem_root_certs = gpr_strdup(default_pem_root_certs);
   return GRPC_SSL_ROOTS_OVERRIDE_OK;
 }
 
@@ -101,7 +103,7 @@
                          "setDefaultRootsPem expects 1 string", 1 TSRMLS_CC);
     return;
   }
-  default_pem_root_certs = gpr_malloc((pem_roots_length + 1) * sizeof(char));
+  default_pem_root_certs = gpr_realloc(default_pem_root_certs, (pem_roots_length + 1) * sizeof(char));
   memcpy(default_pem_root_certs, pem_roots, pem_roots_length + 1);
 }
 
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index d2a68f0..aea0786 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -15,667 +15,667 @@
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_core_dependencies.py.template`!!!
 
 CORE_SOURCE_FILES = [
-  'src/core/lib/profiling/basic_timers.cc',
-  'src/core/lib/profiling/stap_timers.cc',
-  'src/core/lib/support/alloc.cc',
-  'src/core/lib/support/arena.cc',
-  'src/core/lib/support/atm.cc',
-  'src/core/lib/support/avl.cc',
-  'src/core/lib/support/cmdline.cc',
-  'src/core/lib/support/cpu_iphone.cc',
-  'src/core/lib/support/cpu_linux.cc',
-  'src/core/lib/support/cpu_posix.cc',
-  'src/core/lib/support/cpu_windows.cc',
-  'src/core/lib/support/env_linux.cc',
-  'src/core/lib/support/env_posix.cc',
-  'src/core/lib/support/env_windows.cc',
-  'src/core/lib/support/fork.cc',
-  'src/core/lib/support/host_port.cc',
-  'src/core/lib/support/log.cc',
-  'src/core/lib/support/log_android.cc',
-  'src/core/lib/support/log_linux.cc',
-  'src/core/lib/support/log_posix.cc',
-  'src/core/lib/support/log_windows.cc',
-  'src/core/lib/support/mpscq.cc',
-  'src/core/lib/support/murmur_hash.cc',
-  'src/core/lib/support/string.cc',
-  'src/core/lib/support/string_posix.cc',
-  'src/core/lib/support/string_util_windows.cc',
-  'src/core/lib/support/string_windows.cc',
-  'src/core/lib/support/subprocess_posix.cc',
-  'src/core/lib/support/subprocess_windows.cc',
-  'src/core/lib/support/sync.cc',
-  'src/core/lib/support/sync_posix.cc',
-  'src/core/lib/support/sync_windows.cc',
-  'src/core/lib/support/thd.cc',
-  'src/core/lib/support/thd_posix.cc',
-  'src/core/lib/support/thd_windows.cc',
-  'src/core/lib/support/time.cc',
-  'src/core/lib/support/time_posix.cc',
-  'src/core/lib/support/time_precise.cc',
-  'src/core/lib/support/time_windows.cc',
-  'src/core/lib/support/tls_pthread.cc',
-  'src/core/lib/support/tmpfile_msys.cc',
-  'src/core/lib/support/tmpfile_posix.cc',
-  'src/core/lib/support/tmpfile_windows.cc',
-  'src/core/lib/support/wrap_memcpy.cc',
-  'src/core/lib/surface/init.cc',
-  'src/core/lib/backoff/backoff.cc',
-  'src/core/lib/channel/channel_args.cc',
-  'src/core/lib/channel/channel_stack.cc',
-  'src/core/lib/channel/channel_stack_builder.cc',
-  'src/core/lib/channel/connected_channel.cc',
-  'src/core/lib/channel/handshaker.cc',
-  'src/core/lib/channel/handshaker_factory.cc',
-  'src/core/lib/channel/handshaker_registry.cc',
-  'src/core/lib/compression/compression.cc',
-  'src/core/lib/compression/message_compress.cc',
-  'src/core/lib/compression/stream_compression.cc',
-  'src/core/lib/compression/stream_compression_gzip.cc',
-  'src/core/lib/compression/stream_compression_identity.cc',
-  'src/core/lib/debug/stats.cc',
-  'src/core/lib/debug/stats_data.cc',
-  'src/core/lib/http/format_request.cc',
-  'src/core/lib/http/httpcli.cc',
-  'src/core/lib/http/parser.cc',
-  'src/core/lib/iomgr/call_combiner.cc',
-  'src/core/lib/iomgr/combiner.cc',
-  'src/core/lib/iomgr/endpoint.cc',
-  'src/core/lib/iomgr/endpoint_pair_posix.cc',
-  'src/core/lib/iomgr/endpoint_pair_uv.cc',
-  'src/core/lib/iomgr/endpoint_pair_windows.cc',
-  'src/core/lib/iomgr/error.cc',
-  'src/core/lib/iomgr/ev_epoll1_linux.cc',
-  'src/core/lib/iomgr/ev_epollex_linux.cc',
-  'src/core/lib/iomgr/ev_epollsig_linux.cc',
-  'src/core/lib/iomgr/ev_poll_posix.cc',
-  'src/core/lib/iomgr/ev_posix.cc',
-  'src/core/lib/iomgr/ev_windows.cc',
-  'src/core/lib/iomgr/exec_ctx.cc',
-  'src/core/lib/iomgr/executor.cc',
-  'src/core/lib/iomgr/fork_posix.cc',
-  'src/core/lib/iomgr/fork_windows.cc',
-  'src/core/lib/iomgr/gethostname_fallback.cc',
-  'src/core/lib/iomgr/gethostname_host_name_max.cc',
-  'src/core/lib/iomgr/gethostname_sysconf.cc',
-  'src/core/lib/iomgr/iocp_windows.cc',
-  'src/core/lib/iomgr/iomgr.cc',
-  'src/core/lib/iomgr/iomgr_posix.cc',
-  'src/core/lib/iomgr/iomgr_uv.cc',
-  'src/core/lib/iomgr/iomgr_windows.cc',
-  'src/core/lib/iomgr/is_epollexclusive_available.cc',
-  'src/core/lib/iomgr/load_file.cc',
-  'src/core/lib/iomgr/lockfree_event.cc',
-  'src/core/lib/iomgr/network_status_tracker.cc',
-  'src/core/lib/iomgr/polling_entity.cc',
-  'src/core/lib/iomgr/pollset_set_uv.cc',
-  'src/core/lib/iomgr/pollset_set_windows.cc',
-  'src/core/lib/iomgr/pollset_uv.cc',
-  'src/core/lib/iomgr/pollset_windows.cc',
-  'src/core/lib/iomgr/resolve_address_posix.cc',
-  'src/core/lib/iomgr/resolve_address_uv.cc',
-  'src/core/lib/iomgr/resolve_address_windows.cc',
-  'src/core/lib/iomgr/resource_quota.cc',
-  'src/core/lib/iomgr/sockaddr_utils.cc',
-  'src/core/lib/iomgr/socket_factory_posix.cc',
-  'src/core/lib/iomgr/socket_mutator.cc',
-  'src/core/lib/iomgr/socket_utils_common_posix.cc',
-  'src/core/lib/iomgr/socket_utils_linux.cc',
-  'src/core/lib/iomgr/socket_utils_posix.cc',
-  'src/core/lib/iomgr/socket_utils_uv.cc',
-  'src/core/lib/iomgr/socket_utils_windows.cc',
-  'src/core/lib/iomgr/socket_windows.cc',
-  'src/core/lib/iomgr/tcp_client_posix.cc',
-  'src/core/lib/iomgr/tcp_client_uv.cc',
-  'src/core/lib/iomgr/tcp_client_windows.cc',
-  'src/core/lib/iomgr/tcp_posix.cc',
-  'src/core/lib/iomgr/tcp_server_posix.cc',
-  'src/core/lib/iomgr/tcp_server_utils_posix_common.cc',
-  'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc',
-  'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc',
-  'src/core/lib/iomgr/tcp_server_uv.cc',
-  'src/core/lib/iomgr/tcp_server_windows.cc',
-  'src/core/lib/iomgr/tcp_uv.cc',
-  'src/core/lib/iomgr/tcp_windows.cc',
-  'src/core/lib/iomgr/time_averaged_stats.cc',
-  'src/core/lib/iomgr/timer_generic.cc',
-  'src/core/lib/iomgr/timer_heap.cc',
-  'src/core/lib/iomgr/timer_manager.cc',
-  'src/core/lib/iomgr/timer_uv.cc',
-  'src/core/lib/iomgr/udp_server.cc',
-  'src/core/lib/iomgr/unix_sockets_posix.cc',
-  'src/core/lib/iomgr/unix_sockets_posix_noop.cc',
-  'src/core/lib/iomgr/wakeup_fd_cv.cc',
-  'src/core/lib/iomgr/wakeup_fd_eventfd.cc',
-  'src/core/lib/iomgr/wakeup_fd_nospecial.cc',
-  'src/core/lib/iomgr/wakeup_fd_pipe.cc',
-  'src/core/lib/iomgr/wakeup_fd_posix.cc',
-  'src/core/lib/json/json.cc',
-  'src/core/lib/json/json_reader.cc',
-  'src/core/lib/json/json_string.cc',
-  'src/core/lib/json/json_writer.cc',
-  'src/core/lib/slice/b64.cc',
-  'src/core/lib/slice/percent_encoding.cc',
-  'src/core/lib/slice/slice.cc',
-  'src/core/lib/slice/slice_buffer.cc',
-  'src/core/lib/slice/slice_hash_table.cc',
-  'src/core/lib/slice/slice_intern.cc',
-  'src/core/lib/slice/slice_string_helpers.cc',
-  'src/core/lib/surface/alarm.cc',
-  'src/core/lib/surface/api_trace.cc',
-  'src/core/lib/surface/byte_buffer.cc',
-  'src/core/lib/surface/byte_buffer_reader.cc',
-  'src/core/lib/surface/call.cc',
-  'src/core/lib/surface/call_details.cc',
-  'src/core/lib/surface/call_log_batch.cc',
-  'src/core/lib/surface/channel.cc',
-  'src/core/lib/surface/channel_init.cc',
-  'src/core/lib/surface/channel_ping.cc',
-  'src/core/lib/surface/channel_stack_type.cc',
-  'src/core/lib/surface/completion_queue.cc',
-  'src/core/lib/surface/completion_queue_factory.cc',
-  'src/core/lib/surface/event_string.cc',
-  'src/core/lib/surface/lame_client.cc',
-  'src/core/lib/surface/metadata_array.cc',
-  'src/core/lib/surface/server.cc',
-  'src/core/lib/surface/validate_metadata.cc',
-  'src/core/lib/surface/version.cc',
-  'src/core/lib/transport/bdp_estimator.cc',
-  'src/core/lib/transport/byte_stream.cc',
-  'src/core/lib/transport/connectivity_state.cc',
-  'src/core/lib/transport/error_utils.cc',
-  'src/core/lib/transport/metadata.cc',
-  'src/core/lib/transport/metadata_batch.cc',
-  'src/core/lib/transport/pid_controller.cc',
-  'src/core/lib/transport/service_config.cc',
-  'src/core/lib/transport/static_metadata.cc',
-  'src/core/lib/transport/status_conversion.cc',
-  'src/core/lib/transport/timeout_encoding.cc',
-  'src/core/lib/transport/transport.cc',
-  'src/core/lib/transport/transport_op_string.cc',
-  'src/core/lib/debug/trace.cc',
-  'src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc',
-  'src/core/ext/transport/chttp2/transport/bin_decoder.cc',
-  'src/core/ext/transport/chttp2/transport/bin_encoder.cc',
-  'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc',
-  'src/core/ext/transport/chttp2/transport/chttp2_transport.cc',
-  'src/core/ext/transport/chttp2/transport/flow_control.cc',
-  'src/core/ext/transport/chttp2/transport/frame_data.cc',
-  'src/core/ext/transport/chttp2/transport/frame_goaway.cc',
-  'src/core/ext/transport/chttp2/transport/frame_ping.cc',
-  'src/core/ext/transport/chttp2/transport/frame_rst_stream.cc',
-  'src/core/ext/transport/chttp2/transport/frame_settings.cc',
-  'src/core/ext/transport/chttp2/transport/frame_window_update.cc',
-  'src/core/ext/transport/chttp2/transport/hpack_encoder.cc',
-  'src/core/ext/transport/chttp2/transport/hpack_parser.cc',
-  'src/core/ext/transport/chttp2/transport/hpack_table.cc',
-  'src/core/ext/transport/chttp2/transport/http2_settings.cc',
-  'src/core/ext/transport/chttp2/transport/huffsyms.cc',
-  'src/core/ext/transport/chttp2/transport/incoming_metadata.cc',
-  'src/core/ext/transport/chttp2/transport/parsing.cc',
-  'src/core/ext/transport/chttp2/transport/stream_lists.cc',
-  'src/core/ext/transport/chttp2/transport/stream_map.cc',
-  'src/core/ext/transport/chttp2/transport/varint.cc',
-  'src/core/ext/transport/chttp2/transport/writing.cc',
-  'src/core/ext/transport/chttp2/alpn/alpn.cc',
-  'src/core/ext/filters/http/client/http_client_filter.cc',
-  'src/core/ext/filters/http/http_filters_plugin.cc',
-  'src/core/ext/filters/http/message_compress/message_compress_filter.cc',
-  'src/core/ext/filters/http/server/http_server_filter.cc',
-  'src/core/lib/http/httpcli_security_connector.cc',
-  'src/core/lib/security/context/security_context.cc',
-  'src/core/lib/security/credentials/composite/composite_credentials.cc',
-  'src/core/lib/security/credentials/credentials.cc',
-  'src/core/lib/security/credentials/credentials_metadata.cc',
-  'src/core/lib/security/credentials/fake/fake_credentials.cc',
-  'src/core/lib/security/credentials/google_default/credentials_generic.cc',
-  'src/core/lib/security/credentials/google_default/google_default_credentials.cc',
-  'src/core/lib/security/credentials/iam/iam_credentials.cc',
-  'src/core/lib/security/credentials/jwt/json_token.cc',
-  'src/core/lib/security/credentials/jwt/jwt_credentials.cc',
-  'src/core/lib/security/credentials/jwt/jwt_verifier.cc',
-  'src/core/lib/security/credentials/oauth2/oauth2_credentials.cc',
-  'src/core/lib/security/credentials/plugin/plugin_credentials.cc',
-  'src/core/lib/security/credentials/ssl/ssl_credentials.cc',
-  'src/core/lib/security/transport/client_auth_filter.cc',
-  'src/core/lib/security/transport/lb_targets_info.cc',
-  'src/core/lib/security/transport/secure_endpoint.cc',
-  'src/core/lib/security/transport/security_connector.cc',
-  'src/core/lib/security/transport/security_handshaker.cc',
-  'src/core/lib/security/transport/server_auth_filter.cc',
-  'src/core/lib/security/transport/tsi_error.cc',
-  'src/core/lib/security/util/json_util.cc',
-  'src/core/lib/surface/init_secure.cc',
-  'src/core/tsi/fake_transport_security.cc',
-  'src/core/tsi/gts_transport_security.cc',
-  'src/core/tsi/ssl_transport_security.cc',
-  'src/core/tsi/transport_security_grpc.cc',
-  'src/core/tsi/transport_security.cc',
-  'src/core/tsi/transport_security_adapter.cc',
-  'src/core/ext/transport/chttp2/server/chttp2_server.cc',
-  'src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc',
-  'src/core/ext/filters/client_channel/backup_poller.cc',
-  'src/core/ext/filters/client_channel/channel_connectivity.cc',
-  'src/core/ext/filters/client_channel/client_channel.cc',
-  'src/core/ext/filters/client_channel/client_channel_factory.cc',
-  'src/core/ext/filters/client_channel/client_channel_plugin.cc',
-  'src/core/ext/filters/client_channel/connector.cc',
-  'src/core/ext/filters/client_channel/http_connect_handshaker.cc',
-  'src/core/ext/filters/client_channel/http_proxy.cc',
-  'src/core/ext/filters/client_channel/lb_policy.cc',
-  'src/core/ext/filters/client_channel/lb_policy_factory.cc',
-  'src/core/ext/filters/client_channel/lb_policy_registry.cc',
-  'src/core/ext/filters/client_channel/parse_address.cc',
-  'src/core/ext/filters/client_channel/proxy_mapper.cc',
-  'src/core/ext/filters/client_channel/proxy_mapper_registry.cc',
-  'src/core/ext/filters/client_channel/resolver.cc',
-  'src/core/ext/filters/client_channel/resolver_factory.cc',
-  'src/core/ext/filters/client_channel/resolver_registry.cc',
-  'src/core/ext/filters/client_channel/retry_throttle.cc',
-  'src/core/ext/filters/client_channel/subchannel.cc',
-  'src/core/ext/filters/client_channel/subchannel_index.cc',
-  'src/core/ext/filters/client_channel/uri_parser.cc',
-  'src/core/ext/filters/deadline/deadline_filter.cc',
-  'src/core/ext/transport/chttp2/client/chttp2_connector.cc',
-  'src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc',
-  'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc',
-  'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
-  'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
-  'src/core/ext/transport/inproc/inproc_plugin.cc',
-  'src/core/ext/transport/inproc/inproc_transport.cc',
-  'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc',
-  'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc',
-  'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc',
-  'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc',
-  'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc',
-  'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c',
-  'third_party/nanopb/pb_common.c',
-  'third_party/nanopb/pb_decode.c',
-  'third_party/nanopb/pb_encode.c',
-  'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc',
-  'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc',
-  'src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc',
-  'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc',
-  'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc',
-  'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc',
-  'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc',
-  'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc',
-  'src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc',
-  'src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc',
-  'src/core/ext/filters/load_reporting/server_load_reporting_filter.cc',
-  'src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc',
-  'src/core/ext/census/grpc_context.cc',
-  'src/core/ext/filters/max_age/max_age_filter.cc',
-  'src/core/ext/filters/message_size/message_size_filter.cc',
-  'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc',
-  'src/core/ext/filters/workarounds/workaround_utils.cc',
-  'src/core/plugin_registry/grpc_plugin_registry.cc',
-  'src/boringssl/err_data.c',
-  'third_party/boringssl/crypto/aes/aes.c',
-  'third_party/boringssl/crypto/aes/key_wrap.c',
-  'third_party/boringssl/crypto/aes/mode_wrappers.c',
-  'third_party/boringssl/crypto/asn1/a_bitstr.c',
-  'third_party/boringssl/crypto/asn1/a_bool.c',
-  'third_party/boringssl/crypto/asn1/a_d2i_fp.c',
-  'third_party/boringssl/crypto/asn1/a_dup.c',
-  'third_party/boringssl/crypto/asn1/a_enum.c',
-  'third_party/boringssl/crypto/asn1/a_gentm.c',
-  'third_party/boringssl/crypto/asn1/a_i2d_fp.c',
-  'third_party/boringssl/crypto/asn1/a_int.c',
-  'third_party/boringssl/crypto/asn1/a_mbstr.c',
-  'third_party/boringssl/crypto/asn1/a_object.c',
-  'third_party/boringssl/crypto/asn1/a_octet.c',
-  'third_party/boringssl/crypto/asn1/a_print.c',
-  'third_party/boringssl/crypto/asn1/a_strnid.c',
-  'third_party/boringssl/crypto/asn1/a_time.c',
-  'third_party/boringssl/crypto/asn1/a_type.c',
-  'third_party/boringssl/crypto/asn1/a_utctm.c',
-  'third_party/boringssl/crypto/asn1/a_utf8.c',
-  'third_party/boringssl/crypto/asn1/asn1_lib.c',
-  'third_party/boringssl/crypto/asn1/asn1_par.c',
-  'third_party/boringssl/crypto/asn1/asn_pack.c',
-  'third_party/boringssl/crypto/asn1/f_enum.c',
-  'third_party/boringssl/crypto/asn1/f_int.c',
-  'third_party/boringssl/crypto/asn1/f_string.c',
-  'third_party/boringssl/crypto/asn1/t_bitst.c',
-  'third_party/boringssl/crypto/asn1/tasn_dec.c',
-  'third_party/boringssl/crypto/asn1/tasn_enc.c',
-  'third_party/boringssl/crypto/asn1/tasn_fre.c',
-  'third_party/boringssl/crypto/asn1/tasn_new.c',
-  'third_party/boringssl/crypto/asn1/tasn_typ.c',
-  'third_party/boringssl/crypto/asn1/tasn_utl.c',
-  'third_party/boringssl/crypto/asn1/time_support.c',
-  'third_party/boringssl/crypto/asn1/x_bignum.c',
-  'third_party/boringssl/crypto/asn1/x_long.c',
-  'third_party/boringssl/crypto/base64/base64.c',
-  'third_party/boringssl/crypto/bio/bio.c',
-  'third_party/boringssl/crypto/bio/bio_mem.c',
-  'third_party/boringssl/crypto/bio/connect.c',
-  'third_party/boringssl/crypto/bio/fd.c',
-  'third_party/boringssl/crypto/bio/file.c',
-  'third_party/boringssl/crypto/bio/hexdump.c',
-  'third_party/boringssl/crypto/bio/pair.c',
-  'third_party/boringssl/crypto/bio/printf.c',
-  'third_party/boringssl/crypto/bio/socket.c',
-  'third_party/boringssl/crypto/bio/socket_helper.c',
-  'third_party/boringssl/crypto/bn/add.c',
-  'third_party/boringssl/crypto/bn/asm/x86_64-gcc.c',
-  'third_party/boringssl/crypto/bn/bn.c',
-  'third_party/boringssl/crypto/bn/bn_asn1.c',
-  'third_party/boringssl/crypto/bn/cmp.c',
-  'third_party/boringssl/crypto/bn/convert.c',
-  'third_party/boringssl/crypto/bn/ctx.c',
-  'third_party/boringssl/crypto/bn/div.c',
-  'third_party/boringssl/crypto/bn/exponentiation.c',
-  'third_party/boringssl/crypto/bn/gcd.c',
-  'third_party/boringssl/crypto/bn/generic.c',
-  'third_party/boringssl/crypto/bn/kronecker.c',
-  'third_party/boringssl/crypto/bn/montgomery.c',
-  'third_party/boringssl/crypto/bn/montgomery_inv.c',
-  'third_party/boringssl/crypto/bn/mul.c',
-  'third_party/boringssl/crypto/bn/prime.c',
-  'third_party/boringssl/crypto/bn/random.c',
-  'third_party/boringssl/crypto/bn/rsaz_exp.c',
-  'third_party/boringssl/crypto/bn/shift.c',
-  'third_party/boringssl/crypto/bn/sqrt.c',
-  'third_party/boringssl/crypto/buf/buf.c',
-  'third_party/boringssl/crypto/bytestring/asn1_compat.c',
-  'third_party/boringssl/crypto/bytestring/ber.c',
-  'third_party/boringssl/crypto/bytestring/cbb.c',
-  'third_party/boringssl/crypto/bytestring/cbs.c',
-  'third_party/boringssl/crypto/chacha/chacha.c',
-  'third_party/boringssl/crypto/cipher/aead.c',
-  'third_party/boringssl/crypto/cipher/cipher.c',
-  'third_party/boringssl/crypto/cipher/derive_key.c',
-  'third_party/boringssl/crypto/cipher/e_aes.c',
-  'third_party/boringssl/crypto/cipher/e_chacha20poly1305.c',
-  'third_party/boringssl/crypto/cipher/e_des.c',
-  'third_party/boringssl/crypto/cipher/e_null.c',
-  'third_party/boringssl/crypto/cipher/e_rc2.c',
-  'third_party/boringssl/crypto/cipher/e_rc4.c',
-  'third_party/boringssl/crypto/cipher/e_ssl3.c',
-  'third_party/boringssl/crypto/cipher/e_tls.c',
-  'third_party/boringssl/crypto/cipher/tls_cbc.c',
-  'third_party/boringssl/crypto/cmac/cmac.c',
-  'third_party/boringssl/crypto/conf/conf.c',
-  'third_party/boringssl/crypto/cpu-aarch64-linux.c',
-  'third_party/boringssl/crypto/cpu-arm-linux.c',
-  'third_party/boringssl/crypto/cpu-arm.c',
-  'third_party/boringssl/crypto/cpu-intel.c',
-  'third_party/boringssl/crypto/cpu-ppc64le.c',
-  'third_party/boringssl/crypto/crypto.c',
-  'third_party/boringssl/crypto/curve25519/curve25519.c',
-  'third_party/boringssl/crypto/curve25519/spake25519.c',
-  'third_party/boringssl/crypto/curve25519/x25519-x86_64.c',
-  'third_party/boringssl/crypto/des/des.c',
-  'third_party/boringssl/crypto/dh/check.c',
-  'third_party/boringssl/crypto/dh/dh.c',
-  'third_party/boringssl/crypto/dh/dh_asn1.c',
-  'third_party/boringssl/crypto/dh/params.c',
-  'third_party/boringssl/crypto/digest/digest.c',
-  'third_party/boringssl/crypto/digest/digests.c',
-  'third_party/boringssl/crypto/dsa/dsa.c',
-  'third_party/boringssl/crypto/dsa/dsa_asn1.c',
-  'third_party/boringssl/crypto/ec/ec.c',
-  'third_party/boringssl/crypto/ec/ec_asn1.c',
-  'third_party/boringssl/crypto/ec/ec_key.c',
-  'third_party/boringssl/crypto/ec/ec_montgomery.c',
-  'third_party/boringssl/crypto/ec/oct.c',
-  'third_party/boringssl/crypto/ec/p224-64.c',
-  'third_party/boringssl/crypto/ec/p256-64.c',
-  'third_party/boringssl/crypto/ec/p256-x86_64.c',
-  'third_party/boringssl/crypto/ec/simple.c',
-  'third_party/boringssl/crypto/ec/util-64.c',
-  'third_party/boringssl/crypto/ec/wnaf.c',
-  'third_party/boringssl/crypto/ecdh/ecdh.c',
-  'third_party/boringssl/crypto/ecdsa/ecdsa.c',
-  'third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c',
-  'third_party/boringssl/crypto/engine/engine.c',
-  'third_party/boringssl/crypto/err/err.c',
-  'third_party/boringssl/crypto/evp/digestsign.c',
-  'third_party/boringssl/crypto/evp/evp.c',
-  'third_party/boringssl/crypto/evp/evp_asn1.c',
-  'third_party/boringssl/crypto/evp/evp_ctx.c',
-  'third_party/boringssl/crypto/evp/p_dsa_asn1.c',
-  'third_party/boringssl/crypto/evp/p_ec.c',
-  'third_party/boringssl/crypto/evp/p_ec_asn1.c',
-  'third_party/boringssl/crypto/evp/p_rsa.c',
-  'third_party/boringssl/crypto/evp/p_rsa_asn1.c',
-  'third_party/boringssl/crypto/evp/pbkdf.c',
-  'third_party/boringssl/crypto/evp/print.c',
-  'third_party/boringssl/crypto/evp/sign.c',
-  'third_party/boringssl/crypto/ex_data.c',
-  'third_party/boringssl/crypto/hkdf/hkdf.c',
-  'third_party/boringssl/crypto/hmac/hmac.c',
-  'third_party/boringssl/crypto/lhash/lhash.c',
-  'third_party/boringssl/crypto/md4/md4.c',
-  'third_party/boringssl/crypto/md5/md5.c',
-  'third_party/boringssl/crypto/mem.c',
-  'third_party/boringssl/crypto/modes/cbc.c',
-  'third_party/boringssl/crypto/modes/cfb.c',
-  'third_party/boringssl/crypto/modes/ctr.c',
-  'third_party/boringssl/crypto/modes/gcm.c',
-  'third_party/boringssl/crypto/modes/ofb.c',
-  'third_party/boringssl/crypto/modes/polyval.c',
-  'third_party/boringssl/crypto/obj/obj.c',
-  'third_party/boringssl/crypto/obj/obj_xref.c',
-  'third_party/boringssl/crypto/pem/pem_all.c',
-  'third_party/boringssl/crypto/pem/pem_info.c',
-  'third_party/boringssl/crypto/pem/pem_lib.c',
-  'third_party/boringssl/crypto/pem/pem_oth.c',
-  'third_party/boringssl/crypto/pem/pem_pk8.c',
-  'third_party/boringssl/crypto/pem/pem_pkey.c',
-  'third_party/boringssl/crypto/pem/pem_x509.c',
-  'third_party/boringssl/crypto/pem/pem_xaux.c',
-  'third_party/boringssl/crypto/pkcs8/p5_pbev2.c',
-  'third_party/boringssl/crypto/pkcs8/p8_pkey.c',
-  'third_party/boringssl/crypto/pkcs8/pkcs8.c',
-  'third_party/boringssl/crypto/poly1305/poly1305.c',
-  'third_party/boringssl/crypto/poly1305/poly1305_arm.c',
-  'third_party/boringssl/crypto/poly1305/poly1305_vec.c',
-  'third_party/boringssl/crypto/pool/pool.c',
-  'third_party/boringssl/crypto/rand/deterministic.c',
-  'third_party/boringssl/crypto/rand/fuchsia.c',
-  'third_party/boringssl/crypto/rand/rand.c',
-  'third_party/boringssl/crypto/rand/urandom.c',
-  'third_party/boringssl/crypto/rand/windows.c',
-  'third_party/boringssl/crypto/rc4/rc4.c',
-  'third_party/boringssl/crypto/refcount_c11.c',
-  'third_party/boringssl/crypto/refcount_lock.c',
-  'third_party/boringssl/crypto/rsa/blinding.c',
-  'third_party/boringssl/crypto/rsa/padding.c',
-  'third_party/boringssl/crypto/rsa/rsa.c',
-  'third_party/boringssl/crypto/rsa/rsa_asn1.c',
-  'third_party/boringssl/crypto/rsa/rsa_impl.c',
-  'third_party/boringssl/crypto/sha/sha1-altivec.c',
-  'third_party/boringssl/crypto/sha/sha1.c',
-  'third_party/boringssl/crypto/sha/sha256.c',
-  'third_party/boringssl/crypto/sha/sha512.c',
-  'third_party/boringssl/crypto/stack/stack.c',
-  'third_party/boringssl/crypto/thread.c',
-  'third_party/boringssl/crypto/thread_none.c',
-  'third_party/boringssl/crypto/thread_pthread.c',
-  'third_party/boringssl/crypto/thread_win.c',
-  'third_party/boringssl/crypto/x509/a_digest.c',
-  'third_party/boringssl/crypto/x509/a_sign.c',
-  'third_party/boringssl/crypto/x509/a_strex.c',
-  'third_party/boringssl/crypto/x509/a_verify.c',
-  'third_party/boringssl/crypto/x509/algorithm.c',
-  'third_party/boringssl/crypto/x509/asn1_gen.c',
-  'third_party/boringssl/crypto/x509/by_dir.c',
-  'third_party/boringssl/crypto/x509/by_file.c',
-  'third_party/boringssl/crypto/x509/i2d_pr.c',
-  'third_party/boringssl/crypto/x509/pkcs7.c',
-  'third_party/boringssl/crypto/x509/rsa_pss.c',
-  'third_party/boringssl/crypto/x509/t_crl.c',
-  'third_party/boringssl/crypto/x509/t_req.c',
-  'third_party/boringssl/crypto/x509/t_x509.c',
-  'third_party/boringssl/crypto/x509/t_x509a.c',
-  'third_party/boringssl/crypto/x509/x509.c',
-  'third_party/boringssl/crypto/x509/x509_att.c',
-  'third_party/boringssl/crypto/x509/x509_cmp.c',
-  'third_party/boringssl/crypto/x509/x509_d2.c',
-  'third_party/boringssl/crypto/x509/x509_def.c',
-  'third_party/boringssl/crypto/x509/x509_ext.c',
-  'third_party/boringssl/crypto/x509/x509_lu.c',
-  'third_party/boringssl/crypto/x509/x509_obj.c',
-  'third_party/boringssl/crypto/x509/x509_r2x.c',
-  'third_party/boringssl/crypto/x509/x509_req.c',
-  'third_party/boringssl/crypto/x509/x509_set.c',
-  'third_party/boringssl/crypto/x509/x509_trs.c',
-  'third_party/boringssl/crypto/x509/x509_txt.c',
-  'third_party/boringssl/crypto/x509/x509_v3.c',
-  'third_party/boringssl/crypto/x509/x509_vfy.c',
-  'third_party/boringssl/crypto/x509/x509_vpm.c',
-  'third_party/boringssl/crypto/x509/x509cset.c',
-  'third_party/boringssl/crypto/x509/x509name.c',
-  'third_party/boringssl/crypto/x509/x509rset.c',
-  'third_party/boringssl/crypto/x509/x509spki.c',
-  'third_party/boringssl/crypto/x509/x509type.c',
-  'third_party/boringssl/crypto/x509/x_algor.c',
-  'third_party/boringssl/crypto/x509/x_all.c',
-  'third_party/boringssl/crypto/x509/x_attrib.c',
-  'third_party/boringssl/crypto/x509/x_crl.c',
-  'third_party/boringssl/crypto/x509/x_exten.c',
-  'third_party/boringssl/crypto/x509/x_info.c',
-  'third_party/boringssl/crypto/x509/x_name.c',
-  'third_party/boringssl/crypto/x509/x_pkey.c',
-  'third_party/boringssl/crypto/x509/x_pubkey.c',
-  'third_party/boringssl/crypto/x509/x_req.c',
-  'third_party/boringssl/crypto/x509/x_sig.c',
-  'third_party/boringssl/crypto/x509/x_spki.c',
-  'third_party/boringssl/crypto/x509/x_val.c',
-  'third_party/boringssl/crypto/x509/x_x509.c',
-  'third_party/boringssl/crypto/x509/x_x509a.c',
-  'third_party/boringssl/crypto/x509v3/pcy_cache.c',
-  'third_party/boringssl/crypto/x509v3/pcy_data.c',
-  'third_party/boringssl/crypto/x509v3/pcy_lib.c',
-  'third_party/boringssl/crypto/x509v3/pcy_map.c',
-  'third_party/boringssl/crypto/x509v3/pcy_node.c',
-  'third_party/boringssl/crypto/x509v3/pcy_tree.c',
-  'third_party/boringssl/crypto/x509v3/v3_akey.c',
-  'third_party/boringssl/crypto/x509v3/v3_akeya.c',
-  'third_party/boringssl/crypto/x509v3/v3_alt.c',
-  'third_party/boringssl/crypto/x509v3/v3_bcons.c',
-  'third_party/boringssl/crypto/x509v3/v3_bitst.c',
-  'third_party/boringssl/crypto/x509v3/v3_conf.c',
-  'third_party/boringssl/crypto/x509v3/v3_cpols.c',
-  'third_party/boringssl/crypto/x509v3/v3_crld.c',
-  'third_party/boringssl/crypto/x509v3/v3_enum.c',
-  'third_party/boringssl/crypto/x509v3/v3_extku.c',
-  'third_party/boringssl/crypto/x509v3/v3_genn.c',
-  'third_party/boringssl/crypto/x509v3/v3_ia5.c',
-  'third_party/boringssl/crypto/x509v3/v3_info.c',
-  'third_party/boringssl/crypto/x509v3/v3_int.c',
-  'third_party/boringssl/crypto/x509v3/v3_lib.c',
-  'third_party/boringssl/crypto/x509v3/v3_ncons.c',
-  'third_party/boringssl/crypto/x509v3/v3_pci.c',
-  'third_party/boringssl/crypto/x509v3/v3_pcia.c',
-  'third_party/boringssl/crypto/x509v3/v3_pcons.c',
-  'third_party/boringssl/crypto/x509v3/v3_pku.c',
-  'third_party/boringssl/crypto/x509v3/v3_pmaps.c',
-  'third_party/boringssl/crypto/x509v3/v3_prn.c',
-  'third_party/boringssl/crypto/x509v3/v3_purp.c',
-  'third_party/boringssl/crypto/x509v3/v3_skey.c',
-  'third_party/boringssl/crypto/x509v3/v3_sxnet.c',
-  'third_party/boringssl/crypto/x509v3/v3_utl.c',
-  'third_party/boringssl/ssl/bio_ssl.c',
-  'third_party/boringssl/ssl/custom_extensions.c',
-  'third_party/boringssl/ssl/d1_both.c',
-  'third_party/boringssl/ssl/d1_lib.c',
-  'third_party/boringssl/ssl/d1_pkt.c',
-  'third_party/boringssl/ssl/d1_srtp.c',
-  'third_party/boringssl/ssl/dtls_method.c',
-  'third_party/boringssl/ssl/dtls_record.c',
-  'third_party/boringssl/ssl/handshake_client.c',
-  'third_party/boringssl/ssl/handshake_server.c',
-  'third_party/boringssl/ssl/s3_both.c',
-  'third_party/boringssl/ssl/s3_lib.c',
-  'third_party/boringssl/ssl/s3_pkt.c',
-  'third_party/boringssl/ssl/ssl_aead_ctx.c',
-  'third_party/boringssl/ssl/ssl_asn1.c',
-  'third_party/boringssl/ssl/ssl_buffer.c',
-  'third_party/boringssl/ssl/ssl_cert.c',
-  'third_party/boringssl/ssl/ssl_cipher.c',
-  'third_party/boringssl/ssl/ssl_ecdh.c',
-  'third_party/boringssl/ssl/ssl_file.c',
-  'third_party/boringssl/ssl/ssl_lib.c',
-  'third_party/boringssl/ssl/ssl_privkey.c',
-  'third_party/boringssl/ssl/ssl_privkey_cc.cc',
-  'third_party/boringssl/ssl/ssl_session.c',
-  'third_party/boringssl/ssl/ssl_stat.c',
-  'third_party/boringssl/ssl/ssl_transcript.c',
-  'third_party/boringssl/ssl/ssl_x509.c',
-  'third_party/boringssl/ssl/t1_enc.c',
-  'third_party/boringssl/ssl/t1_lib.c',
-  'third_party/boringssl/ssl/tls13_both.c',
-  'third_party/boringssl/ssl/tls13_client.c',
-  'third_party/boringssl/ssl/tls13_enc.c',
-  'third_party/boringssl/ssl/tls13_server.c',
-  'third_party/boringssl/ssl/tls_method.c',
-  'third_party/boringssl/ssl/tls_record.c',
-  'third_party/zlib/adler32.c',
-  'third_party/zlib/compress.c',
-  'third_party/zlib/crc32.c',
-  'third_party/zlib/deflate.c',
-  'third_party/zlib/gzclose.c',
-  'third_party/zlib/gzlib.c',
-  'third_party/zlib/gzread.c',
-  'third_party/zlib/gzwrite.c',
-  'third_party/zlib/infback.c',
-  'third_party/zlib/inffast.c',
-  'third_party/zlib/inflate.c',
-  'third_party/zlib/inftrees.c',
-  'third_party/zlib/trees.c',
-  'third_party/zlib/uncompr.c',
-  'third_party/zlib/zutil.c',
-  'third_party/cares/cares/ares__close_sockets.c',
-  'third_party/cares/cares/ares__get_hostent.c',
-  'third_party/cares/cares/ares__read_line.c',
-  'third_party/cares/cares/ares__timeval.c',
-  'third_party/cares/cares/ares_cancel.c',
-  'third_party/cares/cares/ares_create_query.c',
-  'third_party/cares/cares/ares_data.c',
-  'third_party/cares/cares/ares_destroy.c',
-  'third_party/cares/cares/ares_expand_name.c',
-  'third_party/cares/cares/ares_expand_string.c',
-  'third_party/cares/cares/ares_fds.c',
-  'third_party/cares/cares/ares_free_hostent.c',
-  'third_party/cares/cares/ares_free_string.c',
-  'third_party/cares/cares/ares_getenv.c',
-  'third_party/cares/cares/ares_gethostbyaddr.c',
-  'third_party/cares/cares/ares_gethostbyname.c',
-  'third_party/cares/cares/ares_getnameinfo.c',
-  'third_party/cares/cares/ares_getopt.c',
-  'third_party/cares/cares/ares_getsock.c',
-  'third_party/cares/cares/ares_init.c',
-  'third_party/cares/cares/ares_library_init.c',
-  'third_party/cares/cares/ares_llist.c',
-  'third_party/cares/cares/ares_mkquery.c',
-  'third_party/cares/cares/ares_nowarn.c',
-  'third_party/cares/cares/ares_options.c',
-  'third_party/cares/cares/ares_parse_a_reply.c',
-  'third_party/cares/cares/ares_parse_aaaa_reply.c',
-  'third_party/cares/cares/ares_parse_mx_reply.c',
-  'third_party/cares/cares/ares_parse_naptr_reply.c',
-  'third_party/cares/cares/ares_parse_ns_reply.c',
-  'third_party/cares/cares/ares_parse_ptr_reply.c',
-  'third_party/cares/cares/ares_parse_soa_reply.c',
-  'third_party/cares/cares/ares_parse_srv_reply.c',
-  'third_party/cares/cares/ares_parse_txt_reply.c',
-  'third_party/cares/cares/ares_platform.c',
-  'third_party/cares/cares/ares_process.c',
-  'third_party/cares/cares/ares_query.c',
-  'third_party/cares/cares/ares_search.c',
-  'third_party/cares/cares/ares_send.c',
-  'third_party/cares/cares/ares_strcasecmp.c',
-  'third_party/cares/cares/ares_strdup.c',
-  'third_party/cares/cares/ares_strerror.c',
-  'third_party/cares/cares/ares_timeout.c',
-  'third_party/cares/cares/ares_version.c',
-  'third_party/cares/cares/ares_writev.c',
-  'third_party/cares/cares/bitncmp.c',
-  'third_party/cares/cares/inet_net_pton.c',
-  'third_party/cares/cares/inet_ntop.c',
-  'third_party/cares/cares/windows_port.c',
+    'src/core/lib/profiling/basic_timers.cc',
+    'src/core/lib/profiling/stap_timers.cc',
+    'src/core/lib/support/alloc.cc',
+    'src/core/lib/support/arena.cc',
+    'src/core/lib/support/atm.cc',
+    'src/core/lib/support/avl.cc',
+    'src/core/lib/support/cmdline.cc',
+    'src/core/lib/support/cpu_iphone.cc',
+    'src/core/lib/support/cpu_linux.cc',
+    'src/core/lib/support/cpu_posix.cc',
+    'src/core/lib/support/cpu_windows.cc',
+    'src/core/lib/support/env_linux.cc',
+    'src/core/lib/support/env_posix.cc',
+    'src/core/lib/support/env_windows.cc',
+    'src/core/lib/support/fork.cc',
+    'src/core/lib/support/host_port.cc',
+    'src/core/lib/support/log.cc',
+    'src/core/lib/support/log_android.cc',
+    'src/core/lib/support/log_linux.cc',
+    'src/core/lib/support/log_posix.cc',
+    'src/core/lib/support/log_windows.cc',
+    'src/core/lib/support/mpscq.cc',
+    'src/core/lib/support/murmur_hash.cc',
+    'src/core/lib/support/string.cc',
+    'src/core/lib/support/string_posix.cc',
+    'src/core/lib/support/string_util_windows.cc',
+    'src/core/lib/support/string_windows.cc',
+    'src/core/lib/support/subprocess_posix.cc',
+    'src/core/lib/support/subprocess_windows.cc',
+    'src/core/lib/support/sync.cc',
+    'src/core/lib/support/sync_posix.cc',
+    'src/core/lib/support/sync_windows.cc',
+    'src/core/lib/support/thd.cc',
+    'src/core/lib/support/thd_posix.cc',
+    'src/core/lib/support/thd_windows.cc',
+    'src/core/lib/support/time.cc',
+    'src/core/lib/support/time_posix.cc',
+    'src/core/lib/support/time_precise.cc',
+    'src/core/lib/support/time_windows.cc',
+    'src/core/lib/support/tls_pthread.cc',
+    'src/core/lib/support/tmpfile_msys.cc',
+    'src/core/lib/support/tmpfile_posix.cc',
+    'src/core/lib/support/tmpfile_windows.cc',
+    'src/core/lib/support/wrap_memcpy.cc',
+    'src/core/lib/surface/init.cc',
+    'src/core/lib/backoff/backoff.cc',
+    'src/core/lib/channel/channel_args.cc',
+    'src/core/lib/channel/channel_stack.cc',
+    'src/core/lib/channel/channel_stack_builder.cc',
+    'src/core/lib/channel/connected_channel.cc',
+    'src/core/lib/channel/handshaker.cc',
+    'src/core/lib/channel/handshaker_factory.cc',
+    'src/core/lib/channel/handshaker_registry.cc',
+    'src/core/lib/compression/compression.cc',
+    'src/core/lib/compression/message_compress.cc',
+    'src/core/lib/compression/stream_compression.cc',
+    'src/core/lib/compression/stream_compression_gzip.cc',
+    'src/core/lib/compression/stream_compression_identity.cc',
+    'src/core/lib/debug/stats.cc',
+    'src/core/lib/debug/stats_data.cc',
+    'src/core/lib/http/format_request.cc',
+    'src/core/lib/http/httpcli.cc',
+    'src/core/lib/http/parser.cc',
+    'src/core/lib/iomgr/call_combiner.cc',
+    'src/core/lib/iomgr/combiner.cc',
+    'src/core/lib/iomgr/endpoint.cc',
+    'src/core/lib/iomgr/endpoint_pair_posix.cc',
+    'src/core/lib/iomgr/endpoint_pair_uv.cc',
+    'src/core/lib/iomgr/endpoint_pair_windows.cc',
+    'src/core/lib/iomgr/error.cc',
+    'src/core/lib/iomgr/ev_epoll1_linux.cc',
+    'src/core/lib/iomgr/ev_epollex_linux.cc',
+    'src/core/lib/iomgr/ev_epollsig_linux.cc',
+    'src/core/lib/iomgr/ev_poll_posix.cc',
+    'src/core/lib/iomgr/ev_posix.cc',
+    'src/core/lib/iomgr/ev_windows.cc',
+    'src/core/lib/iomgr/exec_ctx.cc',
+    'src/core/lib/iomgr/executor.cc',
+    'src/core/lib/iomgr/fork_posix.cc',
+    'src/core/lib/iomgr/fork_windows.cc',
+    'src/core/lib/iomgr/gethostname_fallback.cc',
+    'src/core/lib/iomgr/gethostname_host_name_max.cc',
+    'src/core/lib/iomgr/gethostname_sysconf.cc',
+    'src/core/lib/iomgr/iocp_windows.cc',
+    'src/core/lib/iomgr/iomgr.cc',
+    'src/core/lib/iomgr/iomgr_posix.cc',
+    'src/core/lib/iomgr/iomgr_uv.cc',
+    'src/core/lib/iomgr/iomgr_windows.cc',
+    'src/core/lib/iomgr/is_epollexclusive_available.cc',
+    'src/core/lib/iomgr/load_file.cc',
+    'src/core/lib/iomgr/lockfree_event.cc',
+    'src/core/lib/iomgr/network_status_tracker.cc',
+    'src/core/lib/iomgr/polling_entity.cc',
+    'src/core/lib/iomgr/pollset_set_uv.cc',
+    'src/core/lib/iomgr/pollset_set_windows.cc',
+    'src/core/lib/iomgr/pollset_uv.cc',
+    'src/core/lib/iomgr/pollset_windows.cc',
+    'src/core/lib/iomgr/resolve_address_posix.cc',
+    'src/core/lib/iomgr/resolve_address_uv.cc',
+    'src/core/lib/iomgr/resolve_address_windows.cc',
+    'src/core/lib/iomgr/resource_quota.cc',
+    'src/core/lib/iomgr/sockaddr_utils.cc',
+    'src/core/lib/iomgr/socket_factory_posix.cc',
+    'src/core/lib/iomgr/socket_mutator.cc',
+    'src/core/lib/iomgr/socket_utils_common_posix.cc',
+    'src/core/lib/iomgr/socket_utils_linux.cc',
+    'src/core/lib/iomgr/socket_utils_posix.cc',
+    'src/core/lib/iomgr/socket_utils_uv.cc',
+    'src/core/lib/iomgr/socket_utils_windows.cc',
+    'src/core/lib/iomgr/socket_windows.cc',
+    'src/core/lib/iomgr/tcp_client_posix.cc',
+    'src/core/lib/iomgr/tcp_client_uv.cc',
+    'src/core/lib/iomgr/tcp_client_windows.cc',
+    'src/core/lib/iomgr/tcp_posix.cc',
+    'src/core/lib/iomgr/tcp_server_posix.cc',
+    'src/core/lib/iomgr/tcp_server_utils_posix_common.cc',
+    'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc',
+    'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc',
+    'src/core/lib/iomgr/tcp_server_uv.cc',
+    'src/core/lib/iomgr/tcp_server_windows.cc',
+    'src/core/lib/iomgr/tcp_uv.cc',
+    'src/core/lib/iomgr/tcp_windows.cc',
+    'src/core/lib/iomgr/time_averaged_stats.cc',
+    'src/core/lib/iomgr/timer_generic.cc',
+    'src/core/lib/iomgr/timer_heap.cc',
+    'src/core/lib/iomgr/timer_manager.cc',
+    'src/core/lib/iomgr/timer_uv.cc',
+    'src/core/lib/iomgr/udp_server.cc',
+    'src/core/lib/iomgr/unix_sockets_posix.cc',
+    'src/core/lib/iomgr/unix_sockets_posix_noop.cc',
+    'src/core/lib/iomgr/wakeup_fd_cv.cc',
+    'src/core/lib/iomgr/wakeup_fd_eventfd.cc',
+    'src/core/lib/iomgr/wakeup_fd_nospecial.cc',
+    'src/core/lib/iomgr/wakeup_fd_pipe.cc',
+    'src/core/lib/iomgr/wakeup_fd_posix.cc',
+    'src/core/lib/json/json.cc',
+    'src/core/lib/json/json_reader.cc',
+    'src/core/lib/json/json_string.cc',
+    'src/core/lib/json/json_writer.cc',
+    'src/core/lib/slice/b64.cc',
+    'src/core/lib/slice/percent_encoding.cc',
+    'src/core/lib/slice/slice.cc',
+    'src/core/lib/slice/slice_buffer.cc',
+    'src/core/lib/slice/slice_hash_table.cc',
+    'src/core/lib/slice/slice_intern.cc',
+    'src/core/lib/slice/slice_string_helpers.cc',
+    'src/core/lib/surface/alarm.cc',
+    'src/core/lib/surface/api_trace.cc',
+    'src/core/lib/surface/byte_buffer.cc',
+    'src/core/lib/surface/byte_buffer_reader.cc',
+    'src/core/lib/surface/call.cc',
+    'src/core/lib/surface/call_details.cc',
+    'src/core/lib/surface/call_log_batch.cc',
+    'src/core/lib/surface/channel.cc',
+    'src/core/lib/surface/channel_init.cc',
+    'src/core/lib/surface/channel_ping.cc',
+    'src/core/lib/surface/channel_stack_type.cc',
+    'src/core/lib/surface/completion_queue.cc',
+    'src/core/lib/surface/completion_queue_factory.cc',
+    'src/core/lib/surface/event_string.cc',
+    'src/core/lib/surface/lame_client.cc',
+    'src/core/lib/surface/metadata_array.cc',
+    'src/core/lib/surface/server.cc',
+    'src/core/lib/surface/validate_metadata.cc',
+    'src/core/lib/surface/version.cc',
+    'src/core/lib/transport/bdp_estimator.cc',
+    'src/core/lib/transport/byte_stream.cc',
+    'src/core/lib/transport/connectivity_state.cc',
+    'src/core/lib/transport/error_utils.cc',
+    'src/core/lib/transport/metadata.cc',
+    'src/core/lib/transport/metadata_batch.cc',
+    'src/core/lib/transport/pid_controller.cc',
+    'src/core/lib/transport/service_config.cc',
+    'src/core/lib/transport/static_metadata.cc',
+    'src/core/lib/transport/status_conversion.cc',
+    'src/core/lib/transport/timeout_encoding.cc',
+    'src/core/lib/transport/transport.cc',
+    'src/core/lib/transport/transport_op_string.cc',
+    'src/core/lib/debug/trace.cc',
+    'src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc',
+    'src/core/ext/transport/chttp2/transport/bin_decoder.cc',
+    'src/core/ext/transport/chttp2/transport/bin_encoder.cc',
+    'src/core/ext/transport/chttp2/transport/chttp2_plugin.cc',
+    'src/core/ext/transport/chttp2/transport/chttp2_transport.cc',
+    'src/core/ext/transport/chttp2/transport/flow_control.cc',
+    'src/core/ext/transport/chttp2/transport/frame_data.cc',
+    'src/core/ext/transport/chttp2/transport/frame_goaway.cc',
+    'src/core/ext/transport/chttp2/transport/frame_ping.cc',
+    'src/core/ext/transport/chttp2/transport/frame_rst_stream.cc',
+    'src/core/ext/transport/chttp2/transport/frame_settings.cc',
+    'src/core/ext/transport/chttp2/transport/frame_window_update.cc',
+    'src/core/ext/transport/chttp2/transport/hpack_encoder.cc',
+    'src/core/ext/transport/chttp2/transport/hpack_parser.cc',
+    'src/core/ext/transport/chttp2/transport/hpack_table.cc',
+    'src/core/ext/transport/chttp2/transport/http2_settings.cc',
+    'src/core/ext/transport/chttp2/transport/huffsyms.cc',
+    'src/core/ext/transport/chttp2/transport/incoming_metadata.cc',
+    'src/core/ext/transport/chttp2/transport/parsing.cc',
+    'src/core/ext/transport/chttp2/transport/stream_lists.cc',
+    'src/core/ext/transport/chttp2/transport/stream_map.cc',
+    'src/core/ext/transport/chttp2/transport/varint.cc',
+    'src/core/ext/transport/chttp2/transport/writing.cc',
+    'src/core/ext/transport/chttp2/alpn/alpn.cc',
+    'src/core/ext/filters/http/client/http_client_filter.cc',
+    'src/core/ext/filters/http/http_filters_plugin.cc',
+    'src/core/ext/filters/http/message_compress/message_compress_filter.cc',
+    'src/core/ext/filters/http/server/http_server_filter.cc',
+    'src/core/lib/http/httpcli_security_connector.cc',
+    'src/core/lib/security/context/security_context.cc',
+    'src/core/lib/security/credentials/composite/composite_credentials.cc',
+    'src/core/lib/security/credentials/credentials.cc',
+    'src/core/lib/security/credentials/credentials_metadata.cc',
+    'src/core/lib/security/credentials/fake/fake_credentials.cc',
+    'src/core/lib/security/credentials/google_default/credentials_generic.cc',
+    'src/core/lib/security/credentials/google_default/google_default_credentials.cc',
+    'src/core/lib/security/credentials/iam/iam_credentials.cc',
+    'src/core/lib/security/credentials/jwt/json_token.cc',
+    'src/core/lib/security/credentials/jwt/jwt_credentials.cc',
+    'src/core/lib/security/credentials/jwt/jwt_verifier.cc',
+    'src/core/lib/security/credentials/oauth2/oauth2_credentials.cc',
+    'src/core/lib/security/credentials/plugin/plugin_credentials.cc',
+    'src/core/lib/security/credentials/ssl/ssl_credentials.cc',
+    'src/core/lib/security/transport/client_auth_filter.cc',
+    'src/core/lib/security/transport/lb_targets_info.cc',
+    'src/core/lib/security/transport/secure_endpoint.cc',
+    'src/core/lib/security/transport/security_connector.cc',
+    'src/core/lib/security/transport/security_handshaker.cc',
+    'src/core/lib/security/transport/server_auth_filter.cc',
+    'src/core/lib/security/transport/tsi_error.cc',
+    'src/core/lib/security/util/json_util.cc',
+    'src/core/lib/surface/init_secure.cc',
+    'src/core/tsi/fake_transport_security.cc',
+    'src/core/tsi/gts_transport_security.cc',
+    'src/core/tsi/ssl_transport_security.cc',
+    'src/core/tsi/transport_security_grpc.cc',
+    'src/core/tsi/transport_security.cc',
+    'src/core/tsi/transport_security_adapter.cc',
+    'src/core/ext/transport/chttp2/server/chttp2_server.cc',
+    'src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc',
+    'src/core/ext/filters/client_channel/backup_poller.cc',
+    'src/core/ext/filters/client_channel/channel_connectivity.cc',
+    'src/core/ext/filters/client_channel/client_channel.cc',
+    'src/core/ext/filters/client_channel/client_channel_factory.cc',
+    'src/core/ext/filters/client_channel/client_channel_plugin.cc',
+    'src/core/ext/filters/client_channel/connector.cc',
+    'src/core/ext/filters/client_channel/http_connect_handshaker.cc',
+    'src/core/ext/filters/client_channel/http_proxy.cc',
+    'src/core/ext/filters/client_channel/lb_policy.cc',
+    'src/core/ext/filters/client_channel/lb_policy_factory.cc',
+    'src/core/ext/filters/client_channel/lb_policy_registry.cc',
+    'src/core/ext/filters/client_channel/parse_address.cc',
+    'src/core/ext/filters/client_channel/proxy_mapper.cc',
+    'src/core/ext/filters/client_channel/proxy_mapper_registry.cc',
+    'src/core/ext/filters/client_channel/resolver.cc',
+    'src/core/ext/filters/client_channel/resolver_factory.cc',
+    'src/core/ext/filters/client_channel/resolver_registry.cc',
+    'src/core/ext/filters/client_channel/retry_throttle.cc',
+    'src/core/ext/filters/client_channel/subchannel.cc',
+    'src/core/ext/filters/client_channel/subchannel_index.cc',
+    'src/core/ext/filters/client_channel/uri_parser.cc',
+    'src/core/ext/filters/deadline/deadline_filter.cc',
+    'src/core/ext/transport/chttp2/client/chttp2_connector.cc',
+    'src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc',
+    'src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc',
+    'src/core/ext/transport/chttp2/client/insecure/channel_create.cc',
+    'src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc',
+    'src/core/ext/transport/inproc/inproc_plugin.cc',
+    'src/core/ext/transport/inproc/inproc_transport.cc',
+    'src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc',
+    'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc',
+    'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc',
+    'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc',
+    'src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc',
+    'src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c',
+    'third_party/nanopb/pb_common.c',
+    'third_party/nanopb/pb_decode.c',
+    'third_party/nanopb/pb_encode.c',
+    'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc',
+    'src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc',
+    'src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc',
+    'src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc',
+    'src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc',
+    'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc',
+    'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc',
+    'src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc',
+    'src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc',
+    'src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc',
+    'src/core/ext/filters/load_reporting/server_load_reporting_filter.cc',
+    'src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc',
+    'src/core/ext/census/grpc_context.cc',
+    'src/core/ext/filters/max_age/max_age_filter.cc',
+    'src/core/ext/filters/message_size/message_size_filter.cc',
+    'src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc',
+    'src/core/ext/filters/workarounds/workaround_utils.cc',
+    'src/core/plugin_registry/grpc_plugin_registry.cc',
+    'src/boringssl/err_data.c',
+    'third_party/boringssl/crypto/aes/aes.c',
+    'third_party/boringssl/crypto/aes/key_wrap.c',
+    'third_party/boringssl/crypto/aes/mode_wrappers.c',
+    'third_party/boringssl/crypto/asn1/a_bitstr.c',
+    'third_party/boringssl/crypto/asn1/a_bool.c',
+    'third_party/boringssl/crypto/asn1/a_d2i_fp.c',
+    'third_party/boringssl/crypto/asn1/a_dup.c',
+    'third_party/boringssl/crypto/asn1/a_enum.c',
+    'third_party/boringssl/crypto/asn1/a_gentm.c',
+    'third_party/boringssl/crypto/asn1/a_i2d_fp.c',
+    'third_party/boringssl/crypto/asn1/a_int.c',
+    'third_party/boringssl/crypto/asn1/a_mbstr.c',
+    'third_party/boringssl/crypto/asn1/a_object.c',
+    'third_party/boringssl/crypto/asn1/a_octet.c',
+    'third_party/boringssl/crypto/asn1/a_print.c',
+    'third_party/boringssl/crypto/asn1/a_strnid.c',
+    'third_party/boringssl/crypto/asn1/a_time.c',
+    'third_party/boringssl/crypto/asn1/a_type.c',
+    'third_party/boringssl/crypto/asn1/a_utctm.c',
+    'third_party/boringssl/crypto/asn1/a_utf8.c',
+    'third_party/boringssl/crypto/asn1/asn1_lib.c',
+    'third_party/boringssl/crypto/asn1/asn1_par.c',
+    'third_party/boringssl/crypto/asn1/asn_pack.c',
+    'third_party/boringssl/crypto/asn1/f_enum.c',
+    'third_party/boringssl/crypto/asn1/f_int.c',
+    'third_party/boringssl/crypto/asn1/f_string.c',
+    'third_party/boringssl/crypto/asn1/t_bitst.c',
+    'third_party/boringssl/crypto/asn1/tasn_dec.c',
+    'third_party/boringssl/crypto/asn1/tasn_enc.c',
+    'third_party/boringssl/crypto/asn1/tasn_fre.c',
+    'third_party/boringssl/crypto/asn1/tasn_new.c',
+    'third_party/boringssl/crypto/asn1/tasn_typ.c',
+    'third_party/boringssl/crypto/asn1/tasn_utl.c',
+    'third_party/boringssl/crypto/asn1/time_support.c',
+    'third_party/boringssl/crypto/asn1/x_bignum.c',
+    'third_party/boringssl/crypto/asn1/x_long.c',
+    'third_party/boringssl/crypto/base64/base64.c',
+    'third_party/boringssl/crypto/bio/bio.c',
+    'third_party/boringssl/crypto/bio/bio_mem.c',
+    'third_party/boringssl/crypto/bio/connect.c',
+    'third_party/boringssl/crypto/bio/fd.c',
+    'third_party/boringssl/crypto/bio/file.c',
+    'third_party/boringssl/crypto/bio/hexdump.c',
+    'third_party/boringssl/crypto/bio/pair.c',
+    'third_party/boringssl/crypto/bio/printf.c',
+    'third_party/boringssl/crypto/bio/socket.c',
+    'third_party/boringssl/crypto/bio/socket_helper.c',
+    'third_party/boringssl/crypto/bn/add.c',
+    'third_party/boringssl/crypto/bn/asm/x86_64-gcc.c',
+    'third_party/boringssl/crypto/bn/bn.c',
+    'third_party/boringssl/crypto/bn/bn_asn1.c',
+    'third_party/boringssl/crypto/bn/cmp.c',
+    'third_party/boringssl/crypto/bn/convert.c',
+    'third_party/boringssl/crypto/bn/ctx.c',
+    'third_party/boringssl/crypto/bn/div.c',
+    'third_party/boringssl/crypto/bn/exponentiation.c',
+    'third_party/boringssl/crypto/bn/gcd.c',
+    'third_party/boringssl/crypto/bn/generic.c',
+    'third_party/boringssl/crypto/bn/kronecker.c',
+    'third_party/boringssl/crypto/bn/montgomery.c',
+    'third_party/boringssl/crypto/bn/montgomery_inv.c',
+    'third_party/boringssl/crypto/bn/mul.c',
+    'third_party/boringssl/crypto/bn/prime.c',
+    'third_party/boringssl/crypto/bn/random.c',
+    'third_party/boringssl/crypto/bn/rsaz_exp.c',
+    'third_party/boringssl/crypto/bn/shift.c',
+    'third_party/boringssl/crypto/bn/sqrt.c',
+    'third_party/boringssl/crypto/buf/buf.c',
+    'third_party/boringssl/crypto/bytestring/asn1_compat.c',
+    'third_party/boringssl/crypto/bytestring/ber.c',
+    'third_party/boringssl/crypto/bytestring/cbb.c',
+    'third_party/boringssl/crypto/bytestring/cbs.c',
+    'third_party/boringssl/crypto/chacha/chacha.c',
+    'third_party/boringssl/crypto/cipher/aead.c',
+    'third_party/boringssl/crypto/cipher/cipher.c',
+    'third_party/boringssl/crypto/cipher/derive_key.c',
+    'third_party/boringssl/crypto/cipher/e_aes.c',
+    'third_party/boringssl/crypto/cipher/e_chacha20poly1305.c',
+    'third_party/boringssl/crypto/cipher/e_des.c',
+    'third_party/boringssl/crypto/cipher/e_null.c',
+    'third_party/boringssl/crypto/cipher/e_rc2.c',
+    'third_party/boringssl/crypto/cipher/e_rc4.c',
+    'third_party/boringssl/crypto/cipher/e_ssl3.c',
+    'third_party/boringssl/crypto/cipher/e_tls.c',
+    'third_party/boringssl/crypto/cipher/tls_cbc.c',
+    'third_party/boringssl/crypto/cmac/cmac.c',
+    'third_party/boringssl/crypto/conf/conf.c',
+    'third_party/boringssl/crypto/cpu-aarch64-linux.c',
+    'third_party/boringssl/crypto/cpu-arm-linux.c',
+    'third_party/boringssl/crypto/cpu-arm.c',
+    'third_party/boringssl/crypto/cpu-intel.c',
+    'third_party/boringssl/crypto/cpu-ppc64le.c',
+    'third_party/boringssl/crypto/crypto.c',
+    'third_party/boringssl/crypto/curve25519/curve25519.c',
+    'third_party/boringssl/crypto/curve25519/spake25519.c',
+    'third_party/boringssl/crypto/curve25519/x25519-x86_64.c',
+    'third_party/boringssl/crypto/des/des.c',
+    'third_party/boringssl/crypto/dh/check.c',
+    'third_party/boringssl/crypto/dh/dh.c',
+    'third_party/boringssl/crypto/dh/dh_asn1.c',
+    'third_party/boringssl/crypto/dh/params.c',
+    'third_party/boringssl/crypto/digest/digest.c',
+    'third_party/boringssl/crypto/digest/digests.c',
+    'third_party/boringssl/crypto/dsa/dsa.c',
+    'third_party/boringssl/crypto/dsa/dsa_asn1.c',
+    'third_party/boringssl/crypto/ec/ec.c',
+    'third_party/boringssl/crypto/ec/ec_asn1.c',
+    'third_party/boringssl/crypto/ec/ec_key.c',
+    'third_party/boringssl/crypto/ec/ec_montgomery.c',
+    'third_party/boringssl/crypto/ec/oct.c',
+    'third_party/boringssl/crypto/ec/p224-64.c',
+    'third_party/boringssl/crypto/ec/p256-64.c',
+    'third_party/boringssl/crypto/ec/p256-x86_64.c',
+    'third_party/boringssl/crypto/ec/simple.c',
+    'third_party/boringssl/crypto/ec/util-64.c',
+    'third_party/boringssl/crypto/ec/wnaf.c',
+    'third_party/boringssl/crypto/ecdh/ecdh.c',
+    'third_party/boringssl/crypto/ecdsa/ecdsa.c',
+    'third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c',
+    'third_party/boringssl/crypto/engine/engine.c',
+    'third_party/boringssl/crypto/err/err.c',
+    'third_party/boringssl/crypto/evp/digestsign.c',
+    'third_party/boringssl/crypto/evp/evp.c',
+    'third_party/boringssl/crypto/evp/evp_asn1.c',
+    'third_party/boringssl/crypto/evp/evp_ctx.c',
+    'third_party/boringssl/crypto/evp/p_dsa_asn1.c',
+    'third_party/boringssl/crypto/evp/p_ec.c',
+    'third_party/boringssl/crypto/evp/p_ec_asn1.c',
+    'third_party/boringssl/crypto/evp/p_rsa.c',
+    'third_party/boringssl/crypto/evp/p_rsa_asn1.c',
+    'third_party/boringssl/crypto/evp/pbkdf.c',
+    'third_party/boringssl/crypto/evp/print.c',
+    'third_party/boringssl/crypto/evp/sign.c',
+    'third_party/boringssl/crypto/ex_data.c',
+    'third_party/boringssl/crypto/hkdf/hkdf.c',
+    'third_party/boringssl/crypto/hmac/hmac.c',
+    'third_party/boringssl/crypto/lhash/lhash.c',
+    'third_party/boringssl/crypto/md4/md4.c',
+    'third_party/boringssl/crypto/md5/md5.c',
+    'third_party/boringssl/crypto/mem.c',
+    'third_party/boringssl/crypto/modes/cbc.c',
+    'third_party/boringssl/crypto/modes/cfb.c',
+    'third_party/boringssl/crypto/modes/ctr.c',
+    'third_party/boringssl/crypto/modes/gcm.c',
+    'third_party/boringssl/crypto/modes/ofb.c',
+    'third_party/boringssl/crypto/modes/polyval.c',
+    'third_party/boringssl/crypto/obj/obj.c',
+    'third_party/boringssl/crypto/obj/obj_xref.c',
+    'third_party/boringssl/crypto/pem/pem_all.c',
+    'third_party/boringssl/crypto/pem/pem_info.c',
+    'third_party/boringssl/crypto/pem/pem_lib.c',
+    'third_party/boringssl/crypto/pem/pem_oth.c',
+    'third_party/boringssl/crypto/pem/pem_pk8.c',
+    'third_party/boringssl/crypto/pem/pem_pkey.c',
+    'third_party/boringssl/crypto/pem/pem_x509.c',
+    'third_party/boringssl/crypto/pem/pem_xaux.c',
+    'third_party/boringssl/crypto/pkcs8/p5_pbev2.c',
+    'third_party/boringssl/crypto/pkcs8/p8_pkey.c',
+    'third_party/boringssl/crypto/pkcs8/pkcs8.c',
+    'third_party/boringssl/crypto/poly1305/poly1305.c',
+    'third_party/boringssl/crypto/poly1305/poly1305_arm.c',
+    'third_party/boringssl/crypto/poly1305/poly1305_vec.c',
+    'third_party/boringssl/crypto/pool/pool.c',
+    'third_party/boringssl/crypto/rand/deterministic.c',
+    'third_party/boringssl/crypto/rand/fuchsia.c',
+    'third_party/boringssl/crypto/rand/rand.c',
+    'third_party/boringssl/crypto/rand/urandom.c',
+    'third_party/boringssl/crypto/rand/windows.c',
+    'third_party/boringssl/crypto/rc4/rc4.c',
+    'third_party/boringssl/crypto/refcount_c11.c',
+    'third_party/boringssl/crypto/refcount_lock.c',
+    'third_party/boringssl/crypto/rsa/blinding.c',
+    'third_party/boringssl/crypto/rsa/padding.c',
+    'third_party/boringssl/crypto/rsa/rsa.c',
+    'third_party/boringssl/crypto/rsa/rsa_asn1.c',
+    'third_party/boringssl/crypto/rsa/rsa_impl.c',
+    'third_party/boringssl/crypto/sha/sha1-altivec.c',
+    'third_party/boringssl/crypto/sha/sha1.c',
+    'third_party/boringssl/crypto/sha/sha256.c',
+    'third_party/boringssl/crypto/sha/sha512.c',
+    'third_party/boringssl/crypto/stack/stack.c',
+    'third_party/boringssl/crypto/thread.c',
+    'third_party/boringssl/crypto/thread_none.c',
+    'third_party/boringssl/crypto/thread_pthread.c',
+    'third_party/boringssl/crypto/thread_win.c',
+    'third_party/boringssl/crypto/x509/a_digest.c',
+    'third_party/boringssl/crypto/x509/a_sign.c',
+    'third_party/boringssl/crypto/x509/a_strex.c',
+    'third_party/boringssl/crypto/x509/a_verify.c',
+    'third_party/boringssl/crypto/x509/algorithm.c',
+    'third_party/boringssl/crypto/x509/asn1_gen.c',
+    'third_party/boringssl/crypto/x509/by_dir.c',
+    'third_party/boringssl/crypto/x509/by_file.c',
+    'third_party/boringssl/crypto/x509/i2d_pr.c',
+    'third_party/boringssl/crypto/x509/pkcs7.c',
+    'third_party/boringssl/crypto/x509/rsa_pss.c',
+    'third_party/boringssl/crypto/x509/t_crl.c',
+    'third_party/boringssl/crypto/x509/t_req.c',
+    'third_party/boringssl/crypto/x509/t_x509.c',
+    'third_party/boringssl/crypto/x509/t_x509a.c',
+    'third_party/boringssl/crypto/x509/x509.c',
+    'third_party/boringssl/crypto/x509/x509_att.c',
+    'third_party/boringssl/crypto/x509/x509_cmp.c',
+    'third_party/boringssl/crypto/x509/x509_d2.c',
+    'third_party/boringssl/crypto/x509/x509_def.c',
+    'third_party/boringssl/crypto/x509/x509_ext.c',
+    'third_party/boringssl/crypto/x509/x509_lu.c',
+    'third_party/boringssl/crypto/x509/x509_obj.c',
+    'third_party/boringssl/crypto/x509/x509_r2x.c',
+    'third_party/boringssl/crypto/x509/x509_req.c',
+    'third_party/boringssl/crypto/x509/x509_set.c',
+    'third_party/boringssl/crypto/x509/x509_trs.c',
+    'third_party/boringssl/crypto/x509/x509_txt.c',
+    'third_party/boringssl/crypto/x509/x509_v3.c',
+    'third_party/boringssl/crypto/x509/x509_vfy.c',
+    'third_party/boringssl/crypto/x509/x509_vpm.c',
+    'third_party/boringssl/crypto/x509/x509cset.c',
+    'third_party/boringssl/crypto/x509/x509name.c',
+    'third_party/boringssl/crypto/x509/x509rset.c',
+    'third_party/boringssl/crypto/x509/x509spki.c',
+    'third_party/boringssl/crypto/x509/x509type.c',
+    'third_party/boringssl/crypto/x509/x_algor.c',
+    'third_party/boringssl/crypto/x509/x_all.c',
+    'third_party/boringssl/crypto/x509/x_attrib.c',
+    'third_party/boringssl/crypto/x509/x_crl.c',
+    'third_party/boringssl/crypto/x509/x_exten.c',
+    'third_party/boringssl/crypto/x509/x_info.c',
+    'third_party/boringssl/crypto/x509/x_name.c',
+    'third_party/boringssl/crypto/x509/x_pkey.c',
+    'third_party/boringssl/crypto/x509/x_pubkey.c',
+    'third_party/boringssl/crypto/x509/x_req.c',
+    'third_party/boringssl/crypto/x509/x_sig.c',
+    'third_party/boringssl/crypto/x509/x_spki.c',
+    'third_party/boringssl/crypto/x509/x_val.c',
+    'third_party/boringssl/crypto/x509/x_x509.c',
+    'third_party/boringssl/crypto/x509/x_x509a.c',
+    'third_party/boringssl/crypto/x509v3/pcy_cache.c',
+    'third_party/boringssl/crypto/x509v3/pcy_data.c',
+    'third_party/boringssl/crypto/x509v3/pcy_lib.c',
+    'third_party/boringssl/crypto/x509v3/pcy_map.c',
+    'third_party/boringssl/crypto/x509v3/pcy_node.c',
+    'third_party/boringssl/crypto/x509v3/pcy_tree.c',
+    'third_party/boringssl/crypto/x509v3/v3_akey.c',
+    'third_party/boringssl/crypto/x509v3/v3_akeya.c',
+    'third_party/boringssl/crypto/x509v3/v3_alt.c',
+    'third_party/boringssl/crypto/x509v3/v3_bcons.c',
+    'third_party/boringssl/crypto/x509v3/v3_bitst.c',
+    'third_party/boringssl/crypto/x509v3/v3_conf.c',
+    'third_party/boringssl/crypto/x509v3/v3_cpols.c',
+    'third_party/boringssl/crypto/x509v3/v3_crld.c',
+    'third_party/boringssl/crypto/x509v3/v3_enum.c',
+    'third_party/boringssl/crypto/x509v3/v3_extku.c',
+    'third_party/boringssl/crypto/x509v3/v3_genn.c',
+    'third_party/boringssl/crypto/x509v3/v3_ia5.c',
+    'third_party/boringssl/crypto/x509v3/v3_info.c',
+    'third_party/boringssl/crypto/x509v3/v3_int.c',
+    'third_party/boringssl/crypto/x509v3/v3_lib.c',
+    'third_party/boringssl/crypto/x509v3/v3_ncons.c',
+    'third_party/boringssl/crypto/x509v3/v3_pci.c',
+    'third_party/boringssl/crypto/x509v3/v3_pcia.c',
+    'third_party/boringssl/crypto/x509v3/v3_pcons.c',
+    'third_party/boringssl/crypto/x509v3/v3_pku.c',
+    'third_party/boringssl/crypto/x509v3/v3_pmaps.c',
+    'third_party/boringssl/crypto/x509v3/v3_prn.c',
+    'third_party/boringssl/crypto/x509v3/v3_purp.c',
+    'third_party/boringssl/crypto/x509v3/v3_skey.c',
+    'third_party/boringssl/crypto/x509v3/v3_sxnet.c',
+    'third_party/boringssl/crypto/x509v3/v3_utl.c',
+    'third_party/boringssl/ssl/bio_ssl.c',
+    'third_party/boringssl/ssl/custom_extensions.c',
+    'third_party/boringssl/ssl/d1_both.c',
+    'third_party/boringssl/ssl/d1_lib.c',
+    'third_party/boringssl/ssl/d1_pkt.c',
+    'third_party/boringssl/ssl/d1_srtp.c',
+    'third_party/boringssl/ssl/dtls_method.c',
+    'third_party/boringssl/ssl/dtls_record.c',
+    'third_party/boringssl/ssl/handshake_client.c',
+    'third_party/boringssl/ssl/handshake_server.c',
+    'third_party/boringssl/ssl/s3_both.c',
+    'third_party/boringssl/ssl/s3_lib.c',
+    'third_party/boringssl/ssl/s3_pkt.c',
+    'third_party/boringssl/ssl/ssl_aead_ctx.c',
+    'third_party/boringssl/ssl/ssl_asn1.c',
+    'third_party/boringssl/ssl/ssl_buffer.c',
+    'third_party/boringssl/ssl/ssl_cert.c',
+    'third_party/boringssl/ssl/ssl_cipher.c',
+    'third_party/boringssl/ssl/ssl_ecdh.c',
+    'third_party/boringssl/ssl/ssl_file.c',
+    'third_party/boringssl/ssl/ssl_lib.c',
+    'third_party/boringssl/ssl/ssl_privkey.c',
+    'third_party/boringssl/ssl/ssl_privkey_cc.cc',
+    'third_party/boringssl/ssl/ssl_session.c',
+    'third_party/boringssl/ssl/ssl_stat.c',
+    'third_party/boringssl/ssl/ssl_transcript.c',
+    'third_party/boringssl/ssl/ssl_x509.c',
+    'third_party/boringssl/ssl/t1_enc.c',
+    'third_party/boringssl/ssl/t1_lib.c',
+    'third_party/boringssl/ssl/tls13_both.c',
+    'third_party/boringssl/ssl/tls13_client.c',
+    'third_party/boringssl/ssl/tls13_enc.c',
+    'third_party/boringssl/ssl/tls13_server.c',
+    'third_party/boringssl/ssl/tls_method.c',
+    'third_party/boringssl/ssl/tls_record.c',
+    'third_party/zlib/adler32.c',
+    'third_party/zlib/compress.c',
+    'third_party/zlib/crc32.c',
+    'third_party/zlib/deflate.c',
+    'third_party/zlib/gzclose.c',
+    'third_party/zlib/gzlib.c',
+    'third_party/zlib/gzread.c',
+    'third_party/zlib/gzwrite.c',
+    'third_party/zlib/infback.c',
+    'third_party/zlib/inffast.c',
+    'third_party/zlib/inflate.c',
+    'third_party/zlib/inftrees.c',
+    'third_party/zlib/trees.c',
+    'third_party/zlib/uncompr.c',
+    'third_party/zlib/zutil.c',
+    'third_party/cares/cares/ares__close_sockets.c',
+    'third_party/cares/cares/ares__get_hostent.c',
+    'third_party/cares/cares/ares__read_line.c',
+    'third_party/cares/cares/ares__timeval.c',
+    'third_party/cares/cares/ares_cancel.c',
+    'third_party/cares/cares/ares_create_query.c',
+    'third_party/cares/cares/ares_data.c',
+    'third_party/cares/cares/ares_destroy.c',
+    'third_party/cares/cares/ares_expand_name.c',
+    'third_party/cares/cares/ares_expand_string.c',
+    'third_party/cares/cares/ares_fds.c',
+    'third_party/cares/cares/ares_free_hostent.c',
+    'third_party/cares/cares/ares_free_string.c',
+    'third_party/cares/cares/ares_getenv.c',
+    'third_party/cares/cares/ares_gethostbyaddr.c',
+    'third_party/cares/cares/ares_gethostbyname.c',
+    'third_party/cares/cares/ares_getnameinfo.c',
+    'third_party/cares/cares/ares_getopt.c',
+    'third_party/cares/cares/ares_getsock.c',
+    'third_party/cares/cares/ares_init.c',
+    'third_party/cares/cares/ares_library_init.c',
+    'third_party/cares/cares/ares_llist.c',
+    'third_party/cares/cares/ares_mkquery.c',
+    'third_party/cares/cares/ares_nowarn.c',
+    'third_party/cares/cares/ares_options.c',
+    'third_party/cares/cares/ares_parse_a_reply.c',
+    'third_party/cares/cares/ares_parse_aaaa_reply.c',
+    'third_party/cares/cares/ares_parse_mx_reply.c',
+    'third_party/cares/cares/ares_parse_naptr_reply.c',
+    'third_party/cares/cares/ares_parse_ns_reply.c',
+    'third_party/cares/cares/ares_parse_ptr_reply.c',
+    'third_party/cares/cares/ares_parse_soa_reply.c',
+    'third_party/cares/cares/ares_parse_srv_reply.c',
+    'third_party/cares/cares/ares_parse_txt_reply.c',
+    'third_party/cares/cares/ares_platform.c',
+    'third_party/cares/cares/ares_process.c',
+    'third_party/cares/cares/ares_query.c',
+    'third_party/cares/cares/ares_search.c',
+    'third_party/cares/cares/ares_send.c',
+    'third_party/cares/cares/ares_strcasecmp.c',
+    'third_party/cares/cares/ares_strdup.c',
+    'third_party/cares/cares/ares_strerror.c',
+    'third_party/cares/cares/ares_timeout.c',
+    'third_party/cares/cares/ares_version.c',
+    'third_party/cares/cares/ares_writev.c',
+    'third_party/cares/cares/bitncmp.c',
+    'third_party/cares/cares/inet_net_pton.c',
+    'third_party/cares/cares/inet_ntop.c',
+    'third_party/cares/cares/windows_port.c',
 ]
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index 8f07f3b..1fac57b 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -14,4 +14,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
 
-VERSION='1.9.0.dev0'
+VERSION = '1.9.0.dev0'
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index 0987d57..5b7e585 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -14,4 +14,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
 
-VERSION='1.9.0.dev0'
+VERSION = '1.9.0.dev0'
diff --git a/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py b/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py
index c598ea9..26a7ba8 100644
--- a/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py
+++ b/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py
@@ -70,7 +70,8 @@
 
     def _file_containing_extension(self, containing_type, extension_number):
         try:
-            message_descriptor = self._pool.FindMessageTypeByName(containing_type)
+            message_descriptor = self._pool.FindMessageTypeByName(
+                containing_type)
             extension_descriptor = self._pool.FindExtensionByNumber(
                 message_descriptor, extension_number)
             descriptor = self._pool.FindFileContainingSymbol(
@@ -82,10 +83,13 @@
 
     def _all_extension_numbers_of_type(self, containing_type):
         try:
-            message_descriptor = self._pool.FindMessageTypeByName(containing_type)
-            extension_numbers = tuple(sorted(
-                extension.number
-                for extension in self._pool.FindAllExtensions(message_descriptor)))
+            message_descriptor = self._pool.FindMessageTypeByName(
+                containing_type)
+            extension_numbers = tuple(
+                sorted(
+                    extension.number
+                    for extension in self._pool.FindAllExtensions(
+                        message_descriptor)))
         except KeyError:
             return _not_found_error()
         else:
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 95d2ff1..0ad9621 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -14,4 +14,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
 
-VERSION='1.9.0.dev0'
+VERSION = '1.9.0.dev0'
diff --git a/src/python/grpcio_testing/grpc_testing/__init__.py b/src/python/grpcio_testing/grpc_testing/__init__.py
index 9942745..e87d0ff 100644
--- a/src/python/grpcio_testing/grpc_testing/__init__.py
+++ b/src/python/grpcio_testing/grpc_testing/__init__.py
@@ -495,8 +495,8 @@
     """A server with which to test a system that services RPCs."""
 
     @abc.abstractmethod
-    def invoke_unary_unary(
-            self, method_descriptor, invocation_metadata, request, timeout):
+    def invoke_unary_unary(self, method_descriptor, invocation_metadata,
+                           request, timeout):
         """Invokes an RPC to be serviced by the system under test.
 
         Args:
@@ -513,8 +513,8 @@
         raise NotImplementedError()
 
     @abc.abstractmethod
-    def invoke_unary_stream(
-            self, method_descriptor, invocation_metadata, request, timeout):
+    def invoke_unary_stream(self, method_descriptor, invocation_metadata,
+                            request, timeout):
         """Invokes an RPC to be serviced by the system under test.
 
         Args:
@@ -531,8 +531,8 @@
         raise NotImplementedError()
 
     @abc.abstractmethod
-    def invoke_stream_unary(
-            self, method_descriptor, invocation_metadata, timeout):
+    def invoke_stream_unary(self, method_descriptor, invocation_metadata,
+                            timeout):
         """Invokes an RPC to be serviced by the system under test.
 
         Args:
@@ -548,8 +548,8 @@
         raise NotImplementedError()
 
     @abc.abstractmethod
-    def invoke_stream_stream(
-            self, method_descriptor, invocation_metadata, timeout):
+    def invoke_stream_stream(self, method_descriptor, invocation_metadata,
+                             timeout):
         """Invokes an RPC to be serviced by the system under test.
 
         Args:
diff --git a/src/python/grpcio_testing/grpc_testing/_channel/__init__.py b/src/python/grpcio_testing/grpc_testing/_channel/__init__.py
index 8011975..7a64cda 100644
--- a/src/python/grpcio_testing/grpc_testing/_channel/__init__.py
+++ b/src/python/grpcio_testing/grpc_testing/_channel/__init__.py
@@ -20,4 +20,6 @@
 # pylint: disable=unused-argument
 def testing_channel(descriptors, time):
     return _channel.TestingChannel(time, _channel_state.State())
+
+
 # pylint: enable=unused-argument
diff --git a/src/python/grpcio_testing/grpc_testing/_channel/_channel.py b/src/python/grpcio_testing/grpc_testing/_channel/_channel.py
index fbd064d..b015b8d 100644
--- a/src/python/grpcio_testing/grpc_testing/_channel/_channel.py
+++ b/src/python/grpcio_testing/grpc_testing/_channel/_channel.py
@@ -32,20 +32,28 @@
     def unsubscribe(self, callback):
         raise NotImplementedError()
 
-    def unary_unary(
-            self, method, request_serializer=None, response_deserializer=None):
+    def unary_unary(self,
+                    method,
+                    request_serializer=None,
+                    response_deserializer=None):
         return _multi_callable.UnaryUnary(method, self._state)
 
-    def unary_stream(
-            self, method, request_serializer=None, response_deserializer=None):
+    def unary_stream(self,
+                     method,
+                     request_serializer=None,
+                     response_deserializer=None):
         return _multi_callable.UnaryStream(method, self._state)
 
-    def stream_unary(
-            self, method, request_serializer=None, response_deserializer=None):
+    def stream_unary(self,
+                     method,
+                     request_serializer=None,
+                     response_deserializer=None):
         return _multi_callable.StreamUnary(method, self._state)
 
-    def stream_stream(
-            self, method, request_serializer=None, response_deserializer=None):
+    def stream_stream(self,
+                      method,
+                      request_serializer=None,
+                      response_deserializer=None):
         return _multi_callable.StreamStream(method, self._state)
 
     def take_unary_unary(self, method_descriptor):
@@ -59,4 +67,6 @@
 
     def take_stream_stream(self, method_descriptor):
         return _channel_rpc.stream_stream(self._state, method_descriptor)
+
+
 # pylint: enable=unused-argument
diff --git a/src/python/grpcio_testing/grpc_testing/_channel/_channel_rpc.py b/src/python/grpcio_testing/grpc_testing/_channel/_channel_rpc.py
index 762b6a0..54499b3 100644
--- a/src/python/grpcio_testing/grpc_testing/_channel/_channel_rpc.py
+++ b/src/python/grpcio_testing/grpc_testing/_channel/_channel_rpc.py
@@ -27,8 +27,8 @@
         self._rpc_state.cancelled()
 
     def terminate(self, response, trailing_metadata, code, details):
-        self._rpc_state.terminate_with_response(
-            response, trailing_metadata, code, details)
+        self._rpc_state.terminate_with_response(response, trailing_metadata,
+                                                code, details)
 
 
 class _UnaryStream(grpc_testing.UnaryStreamChannelRpc):
@@ -67,8 +67,8 @@
         self._rpc_state.cancelled()
 
     def terminate(self, response, trailing_metadata, code, details):
-        self._rpc_state.terminate_with_response(
-            response, trailing_metadata, code, details)
+        self._rpc_state.terminate_with_response(response, trailing_metadata,
+                                                code, details)
 
 
 class _StreamStream(grpc_testing.StreamStreamChannelRpc):
diff --git a/src/python/grpcio_testing/grpc_testing/_channel/_channel_state.py b/src/python/grpcio_testing/grpc_testing/_channel/_channel_state.py
index 569c41d..779d59e 100644
--- a/src/python/grpcio_testing/grpc_testing/_channel/_channel_state.py
+++ b/src/python/grpcio_testing/grpc_testing/_channel/_channel_state.py
@@ -25,11 +25,10 @@
         self._condition = threading.Condition()
         self._rpc_states = collections.defaultdict(list)
 
-    def invoke_rpc(
-            self, method_full_rpc_name, invocation_metadata, requests,
-            requests_closed, timeout):
-        rpc_state = _rpc_state.State(
-            invocation_metadata, requests, requests_closed)
+    def invoke_rpc(self, method_full_rpc_name, invocation_metadata, requests,
+                   requests_closed, timeout):
+        rpc_state = _rpc_state.State(invocation_metadata, requests,
+                                     requests_closed)
         with self._condition:
             self._rpc_states[method_full_rpc_name].append(rpc_state)
             self._condition.notify_all()
diff --git a/src/python/grpcio_testing/grpc_testing/_channel/_multi_callable.py b/src/python/grpcio_testing/grpc_testing/_channel/_multi_callable.py
index fe69257..32b2f36 100644
--- a/src/python/grpcio_testing/grpc_testing/_channel/_multi_callable.py
+++ b/src/python/grpcio_testing/grpc_testing/_channel/_multi_callable.py
@@ -16,6 +16,7 @@
 from grpc_testing import _common
 from grpc_testing._channel import _invocation
 
+
 # All per-call credentials parameters are unused by this test infrastructure.
 # pylint: disable=unused-argument
 class UnaryUnary(grpc.UnaryUnaryMultiCallable):
@@ -26,20 +27,20 @@
 
     def __call__(self, request, timeout=None, metadata=None, credentials=None):
         rpc_handler = self._channel_handler.invoke_rpc(
-            self._method_full_rpc_name, _common.fuss_with_metadata(metadata),
-            [request], True, timeout)
+            self._method_full_rpc_name,
+            _common.fuss_with_metadata(metadata), [request], True, timeout)
         return _invocation.blocking_unary_response(rpc_handler)
 
     def with_call(self, request, timeout=None, metadata=None, credentials=None):
         rpc_handler = self._channel_handler.invoke_rpc(
-            self._method_full_rpc_name, _common.fuss_with_metadata(metadata),
-            [request], True, timeout)
+            self._method_full_rpc_name,
+            _common.fuss_with_metadata(metadata), [request], True, timeout)
         return _invocation.blocking_unary_response_with_call(rpc_handler)
 
     def future(self, request, timeout=None, metadata=None, credentials=None):
         rpc_handler = self._channel_handler.invoke_rpc(
-            self._method_full_rpc_name, _common.fuss_with_metadata(metadata),
-            [request], True, timeout)
+            self._method_full_rpc_name,
+            _common.fuss_with_metadata(metadata), [request], True, timeout)
         return _invocation.future_call(rpc_handler)
 
 
@@ -112,4 +113,6 @@
             _common.fuss_with_metadata(metadata), [], False, timeout)
         _invocation.consume_requests(request_iterator, rpc_handler)
         return _invocation.ResponseIteratorCall(rpc_handler)
+
+
 # pylint: enable=unused-argument
diff --git a/src/python/grpcio_testing/grpc_testing/_channel/_rpc_state.py b/src/python/grpcio_testing/grpc_testing/_channel/_rpc_state.py
index e1fa49a..ee02330 100644
--- a/src/python/grpcio_testing/grpc_testing/_channel/_rpc_state.py
+++ b/src/python/grpcio_testing/grpc_testing/_channel/_rpc_state.py
@@ -63,23 +63,22 @@
                 if self._code is grpc.StatusCode.OK:
                     if self._responses:
                         response = self._responses.pop(0)
-                        return _common.ChannelRpcRead(
-                            response, None, None, None)
+                        return _common.ChannelRpcRead(response, None, None,
+                                                      None)
                     else:
                         return _common.ChannelRpcRead(
-                            None, self._trailing_metadata,
-                            grpc.StatusCode.OK, self._details)
+                            None, self._trailing_metadata, grpc.StatusCode.OK,
+                            self._details)
                 elif self._code is None:
                     if self._responses:
                         response = self._responses.pop(0)
-                        return _common.ChannelRpcRead(
-                            response, None, None, None)
+                        return _common.ChannelRpcRead(response, None, None,
+                                                      None)
                     else:
                         self._condition.wait()
                 else:
-                    return _common.ChannelRpcRead(
-                        None, self._trailing_metadata, self._code,
-                        self._details)
+                    return _common.ChannelRpcRead(None, self._trailing_metadata,
+                                                  self._code, self._details)
 
     def termination(self):
         with self._condition:
@@ -150,8 +149,8 @@
                 self._responses.append(response)
                 self._condition.notify_all()
 
-    def terminate_with_response(
-            self, response, trailing_metadata, code, details):
+    def terminate_with_response(self, response, trailing_metadata, code,
+                                details):
         with self._condition:
             if self._initial_metadata is None:
                 self._initial_metadata = _common.FUSSED_EMPTY_METADATA
diff --git a/src/python/grpcio_testing/grpc_testing/_common.py b/src/python/grpcio_testing/grpc_testing/_common.py
index 1517434..05327b0 100644
--- a/src/python/grpcio_testing/grpc_testing/_common.py
+++ b/src/python/grpcio_testing/grpc_testing/_common.py
@@ -21,11 +21,9 @@
 
 def _fuss(tuplified_metadata):
     return tuplified_metadata + (
-        (
-            'grpc.metadata_added_by_runtime',
-            'gRPC is allowed to add metadata in transmission and does so.',
-        ),
-    )
+        ('grpc.metadata_added_by_runtime',
+         'gRPC is allowed to add metadata in transmission and does so.',),)
+
 
 FUSSED_EMPTY_METADATA = _fuss(())
 
@@ -41,8 +39,8 @@
     rpc_names_to_descriptors = {}
     for service_descriptor in service_descriptors:
         for method_descriptor in service_descriptor.methods_by_name.values():
-            rpc_name = '/{}/{}'.format(
-                service_descriptor.full_name, method_descriptor.name)
+            rpc_name = '/{}/{}'.format(service_descriptor.full_name,
+                                       method_descriptor.name)
             rpc_names_to_descriptors[rpc_name] = method_descriptor
     return rpc_names_to_descriptors
 
@@ -96,9 +94,8 @@
 class ChannelHandler(six.with_metaclass(abc.ABCMeta)):
 
     @abc.abstractmethod
-    def invoke_rpc(
-            self, method_full_rpc_name, invocation_metadata, requests,
-            requests_closed, timeout):
+    def invoke_rpc(self, method_full_rpc_name, invocation_metadata, requests,
+                   requests_closed, timeout):
         raise NotImplementedError()
 
 
@@ -138,23 +135,21 @@
 class Serverish(six.with_metaclass(abc.ABCMeta)):
 
     @abc.abstractmethod
-    def invoke_unary_unary(
-            self, method_descriptor, handler, invocation_metadata, request,
-            deadline):
+    def invoke_unary_unary(self, method_descriptor, handler,
+                           invocation_metadata, request, deadline):
         raise NotImplementedError()
 
     @abc.abstractmethod
-    def invoke_unary_stream(
-            self, method_descriptor, handler, invocation_metadata, request,
-            deadline):
+    def invoke_unary_stream(self, method_descriptor, handler,
+                            invocation_metadata, request, deadline):
         raise NotImplementedError()
 
     @abc.abstractmethod
-    def invoke_stream_unary(
-            self, method_descriptor, handler, invocation_metadata, deadline):
+    def invoke_stream_unary(self, method_descriptor, handler,
+                            invocation_metadata, deadline):
         raise NotImplementedError()
 
     @abc.abstractmethod
-    def invoke_stream_stream(
-            self, method_descriptor, handler, invocation_metadata, deadline):
+    def invoke_stream_stream(self, method_descriptor, handler,
+                             invocation_metadata, deadline):
         raise NotImplementedError()
diff --git a/src/python/grpcio_testing/grpc_testing/_server/__init__.py b/src/python/grpcio_testing/grpc_testing/_server/__init__.py
index 7595129..5f035a9 100644
--- a/src/python/grpcio_testing/grpc_testing/_server/__init__.py
+++ b/src/python/grpcio_testing/grpc_testing/_server/__init__.py
@@ -16,5 +16,5 @@
 
 
 def server_from_dictionary(descriptors_to_servicers, time):
-    return _server.server_from_descriptor_to_servicers(
-        descriptors_to_servicers, time)
+    return _server.server_from_descriptor_to_servicers(descriptors_to_servicers,
+                                                       time)
diff --git a/src/python/grpcio_testing/grpc_testing/_server/_handler.py b/src/python/grpcio_testing/grpc_testing/_server/_handler.py
index b47e04c..5e4730e 100644
--- a/src/python/grpcio_testing/grpc_testing/_server/_handler.py
+++ b/src/python/grpcio_testing/grpc_testing/_server/_handler.py
@@ -170,10 +170,8 @@
                     if self._unary_response is None:
                         if self._responses:
                             self._unary_response = self._responses.pop(0)
-                    return (
-                        self._unary_response, self._trailing_metadata,
-                        self._code, self._details,)
-
+                    return (self._unary_response, self._trailing_metadata,
+                            self._code, self._details,)
 
     def stream_response_termination(self):
         with self._condition:
diff --git a/src/python/grpcio_testing/grpc_testing/_server/_rpc.py b/src/python/grpcio_testing/grpc_testing/_server/_rpc.py
index f81876f..2060e8d 100644
--- a/src/python/grpcio_testing/grpc_testing/_server/_rpc.py
+++ b/src/python/grpcio_testing/grpc_testing/_server/_rpc.py
@@ -80,9 +80,8 @@
 
     def application_cancel(self):
         with self._condition:
-            self._abort(
-                grpc.StatusCode.CANCELLED,
-                'Cancelled by server-side application!')
+            self._abort(grpc.StatusCode.CANCELLED,
+                        'Cancelled by server-side application!')
 
     def application_exception_abort(self, exception):
         with self._condition:
diff --git a/src/python/grpcio_testing/grpc_testing/_server/_server.py b/src/python/grpcio_testing/grpc_testing/_server/_server.py
index 66bcfc1..3e358e5 100644
--- a/src/python/grpcio_testing/grpc_testing/_server/_server.py
+++ b/src/python/grpcio_testing/grpc_testing/_server/_server.py
@@ -29,28 +29,34 @@
 
 
 def _unary_unary_service(request):
+
     def service(implementation, rpc, servicer_context):
-        _service.unary_unary(
-            implementation, rpc, request, servicer_context)
+        _service.unary_unary(implementation, rpc, request, servicer_context)
+
     return service
 
 
 def _unary_stream_service(request):
+
     def service(implementation, rpc, servicer_context):
-        _service.unary_stream(
-            implementation, rpc, request, servicer_context)
+        _service.unary_stream(implementation, rpc, request, servicer_context)
+
     return service
 
 
 def _stream_unary_service(handler):
+
     def service(implementation, rpc, servicer_context):
         _service.stream_unary(implementation, rpc, handler, servicer_context)
+
     return service
 
 
 def _stream_stream_service(handler):
+
     def service(implementation, rpc, servicer_context):
         _service.stream_stream(implementation, rpc, handler, servicer_context)
+
     return service
 
 
@@ -60,11 +66,10 @@
         self._descriptors_to_servicers = descriptors_to_servicers
         self._time = time
 
-    def _invoke(
-            self, service_behavior, method_descriptor, handler,
-            invocation_metadata, deadline):
-        implementation = _implementation(
-            self._descriptors_to_servicers, method_descriptor)
+    def _invoke(self, service_behavior, method_descriptor, handler,
+                invocation_metadata, deadline):
+        implementation = _implementation(self._descriptors_to_servicers,
+                                         method_descriptor)
         rpc = _rpc.Rpc(handler, invocation_metadata)
         if handler.add_termination_callback(rpc.extrinsic_abort):
             servicer_context = _servicer_context.ServicerContext(
@@ -74,28 +79,26 @@
                 args=(implementation, rpc, servicer_context,))
             service_thread.start()
 
-    def invoke_unary_unary(
-            self, method_descriptor, handler, invocation_metadata, request,
-            deadline):
+    def invoke_unary_unary(self, method_descriptor, handler,
+                           invocation_metadata, request, deadline):
         self._invoke(
             _unary_unary_service(request), method_descriptor, handler,
             invocation_metadata, deadline)
 
-    def invoke_unary_stream(
-            self, method_descriptor, handler, invocation_metadata, request,
-            deadline):
+    def invoke_unary_stream(self, method_descriptor, handler,
+                            invocation_metadata, request, deadline):
         self._invoke(
             _unary_stream_service(request), method_descriptor, handler,
             invocation_metadata, deadline)
 
-    def invoke_stream_unary(
-            self, method_descriptor, handler, invocation_metadata, deadline):
+    def invoke_stream_unary(self, method_descriptor, handler,
+                            invocation_metadata, deadline):
         self._invoke(
             _stream_unary_service(handler), method_descriptor, handler,
             invocation_metadata, deadline)
 
-    def invoke_stream_stream(
-            self, method_descriptor, handler, invocation_metadata, deadline):
+    def invoke_stream_stream(self, method_descriptor, handler,
+                             invocation_metadata, deadline):
         self._invoke(
             _stream_stream_service(handler), method_descriptor, handler,
             invocation_metadata, deadline)
@@ -106,7 +109,8 @@
         return None, _handler.handler_without_deadline(requests_closed)
     else:
         deadline = time.time() + timeout
-        handler = _handler.handler_with_deadline(requests_closed, time, deadline)
+        handler = _handler.handler_with_deadline(requests_closed, time,
+                                                 deadline)
         return deadline, handler
 
 
@@ -116,32 +120,32 @@
         self._serverish = serverish
         self._time = time
 
-    def invoke_unary_unary(
-            self, method_descriptor, invocation_metadata, request, timeout):
+    def invoke_unary_unary(self, method_descriptor, invocation_metadata,
+                           request, timeout):
         deadline, handler = _deadline_and_handler(True, self._time, timeout)
         self._serverish.invoke_unary_unary(
             method_descriptor, handler, invocation_metadata, request, deadline)
         return _server_rpc.UnaryUnaryServerRpc(handler)
 
-    def invoke_unary_stream(
-            self, method_descriptor, invocation_metadata, request, timeout):
+    def invoke_unary_stream(self, method_descriptor, invocation_metadata,
+                            request, timeout):
         deadline, handler = _deadline_and_handler(True, self._time, timeout)
         self._serverish.invoke_unary_stream(
             method_descriptor, handler, invocation_metadata, request, deadline)
         return _server_rpc.UnaryStreamServerRpc(handler)
 
-    def invoke_stream_unary(
-            self, method_descriptor, invocation_metadata, timeout):
+    def invoke_stream_unary(self, method_descriptor, invocation_metadata,
+                            timeout):
         deadline, handler = _deadline_and_handler(False, self._time, timeout)
-        self._serverish.invoke_stream_unary(
-            method_descriptor, handler, invocation_metadata, deadline)
+        self._serverish.invoke_stream_unary(method_descriptor, handler,
+                                            invocation_metadata, deadline)
         return _server_rpc.StreamUnaryServerRpc(handler)
 
-    def invoke_stream_stream(
-            self, method_descriptor, invocation_metadata, timeout):
+    def invoke_stream_stream(self, method_descriptor, invocation_metadata,
+                             timeout):
         deadline, handler = _deadline_and_handler(False, self._time, timeout)
-        self._serverish.invoke_stream_stream(
-            method_descriptor, handler, invocation_metadata, deadline)
+        self._serverish.invoke_stream_stream(method_descriptor, handler,
+                                             invocation_metadata, deadline)
         return _server_rpc.StreamStreamServerRpc(handler)
 
 
diff --git a/src/python/grpcio_testing/grpc_version.py b/src/python/grpcio_testing/grpc_version.py
index afc6dd8..0eb5fbf 100644
--- a/src/python/grpcio_testing/grpc_version.py
+++ b/src/python/grpcio_testing/grpc_version.py
@@ -14,4 +14,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_testing/grpc_version.py.template`!!!
 
-VERSION='1.9.0.dev0'
+VERSION = '1.9.0.dev0'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index 99ca3fd..b1b4d7e 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -14,4 +14,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
 
-VERSION='1.9.0.dev0'
+VERSION = '1.9.0.dev0'
diff --git a/templates/src/python/grpcio/grpc_core_dependencies.py.template b/templates/src/python/grpcio/grpc_core_dependencies.py.template
index 02e066c..6295ed3 100644
--- a/templates/src/python/grpcio/grpc_core_dependencies.py.template
+++ b/templates/src/python/grpcio/grpc_core_dependencies.py.template
@@ -20,7 +20,7 @@
   % for lib in libs:
   % if lib.name in python_dependencies.transitive_deps:
   % for src in lib.src:
-    '${src}',
+      '${src}',
   % endfor
   % endif
   % endfor
diff --git a/templates/src/python/grpcio/grpc_version.py.template b/templates/src/python/grpcio/grpc_version.py.template
index 38ae54d..5e5d221 100644
--- a/templates/src/python/grpcio/grpc_version.py.template
+++ b/templates/src/python/grpcio/grpc_version.py.template
@@ -16,4 +16,4 @@
 
   # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
 
-  VERSION='${settings.python_version.pep440()}'
+  VERSION = '${settings.python_version.pep440()}'
diff --git a/templates/src/python/grpcio_health_checking/grpc_version.py.template b/templates/src/python/grpcio_health_checking/grpc_version.py.template
index 558b2d1..ffb81ac 100644
--- a/templates/src/python/grpcio_health_checking/grpc_version.py.template
+++ b/templates/src/python/grpcio_health_checking/grpc_version.py.template
@@ -16,4 +16,4 @@
 
   # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
 
-  VERSION='${settings.python_version.pep440()}'
+  VERSION = '${settings.python_version.pep440()}'
diff --git a/templates/src/python/grpcio_reflection/grpc_version.py.template b/templates/src/python/grpcio_reflection/grpc_version.py.template
index 8fb42a4..cc99533 100644
--- a/templates/src/python/grpcio_reflection/grpc_version.py.template
+++ b/templates/src/python/grpcio_reflection/grpc_version.py.template
@@ -16,4 +16,4 @@
 
   # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
 
-  VERSION='${settings.python_version.pep440()}'
+  VERSION = '${settings.python_version.pep440()}'
diff --git a/templates/src/python/grpcio_testing/grpc_version.py.template b/templates/src/python/grpcio_testing/grpc_version.py.template
index 74db811..a49392e 100644
--- a/templates/src/python/grpcio_testing/grpc_version.py.template
+++ b/templates/src/python/grpcio_testing/grpc_version.py.template
@@ -16,4 +16,4 @@
 
   # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_testing/grpc_version.py.template`!!!
 
-  VERSION='${settings.python_version.pep440()}'
+  VERSION = '${settings.python_version.pep440()}'
diff --git a/templates/src/python/grpcio_tests/grpc_version.py.template b/templates/src/python/grpcio_tests/grpc_version.py.template
index 16fc92e..851fb7b 100644
--- a/templates/src/python/grpcio_tests/grpc_version.py.template
+++ b/templates/src/python/grpcio_tests/grpc_version.py.template
@@ -16,4 +16,4 @@
 
   # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
 
-  VERSION='${settings.python_version.pep440()}'
+  VERSION = '${settings.python_version.pep440()}'
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index c71034b..4c8dfe0 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -741,6 +741,7 @@
   Status s = stream->Finish();
   EXPECT_EQ(response.message(), request.message());
   EXPECT_TRUE(s.ok());
+  EXPECT_TRUE(context.debug_error_string().empty());
 }
 
 TEST_P(End2endTest, RequestStreamOneRequestWithCoalescingApi) {
@@ -1258,6 +1259,13 @@
     EXPECT_EQ(iter->code(), s.error_code());
     EXPECT_EQ(iter->error_message(), s.error_message());
     EXPECT_EQ(iter->binary_error_details(), s.error_details());
+    EXPECT_TRUE(context.debug_error_string().find("created") !=
+                std::string::npos);
+    EXPECT_TRUE(context.debug_error_string().find("file") != std::string::npos);
+    EXPECT_TRUE(context.debug_error_string().find("line") != std::string::npos);
+    EXPECT_TRUE(context.debug_error_string().find("status") !=
+                std::string::npos);
+    EXPECT_TRUE(context.debug_error_string().find("13") != std::string::npos);
   }
 }
 
@@ -1300,12 +1308,19 @@
   EchoResponse response;
   request.set_message("Hello");
   request.mutable_param()->set_skip_cancelled_check(true);
-  // Let server sleep for 2 ms first to guarantee expiry
-  request.mutable_param()->set_server_sleep_us(2 * 1000);
+  // Let server sleep for 40 ms first to guarantee expiry.
+  // 40 ms might seem a bit extreme but the timer manager would have been just
+  // initialized (when ResetStub() was called) and there are some warmup costs
+  // i.e the timer thread many not have even started. There might also be other
+  // delays in the timer manager thread (in acquiring locks, timer data
+  // structure manipulations, starting backup timer threads) that add to the
+  // delays. 40ms is still not enough in some cases but this significantly
+  // reduces the test flakes
+  request.mutable_param()->set_server_sleep_us(40 * 1000);
 
   ClientContext context;
   std::chrono::system_clock::time_point deadline =
-      std::chrono::system_clock::now() + std::chrono::microseconds(10);
+      std::chrono::system_clock::now() + std::chrono::milliseconds(1);
   context.set_deadline(deadline);
   Status s = stub_->Echo(&context, request, &response);
   EXPECT_EQ(StatusCode::DEADLINE_EXCEEDED, s.error_code());
diff --git a/tools/distrib/yapf_code.sh b/tools/distrib/yapf_code.sh
index e5beb70..51d1799 100755
--- a/tools/distrib/yapf_code.sh
+++ b/tools/distrib/yapf_code.sh
@@ -22,11 +22,6 @@
     'src/python'
 )
 EXCLUSIONS=(
-    'grpcio/grpc_*.py'
-    'grpcio_health_checking/grpc_*.py'
-    'grpcio_reflection/grpc_*.py'
-    'grpcio_testing/grpc_*.py'
-    'grpcio_tests/grpc_*.py'
 )
 
 VIRTUALENV=yapf_virtual_environment
diff --git a/tools/interop_matrix/client_matrix.py b/tools/interop_matrix/client_matrix.py
index 7b02f51..7281307 100644
--- a/tools/interop_matrix/client_matrix.py
+++ b/tools/interop_matrix/client_matrix.py
@@ -66,11 +66,8 @@
         {'v1.4.2': None},
         {'v1.5.2': None},
         {'v1.6.0': None},
-        {'v1.7.0': None},
-        {'v1.7.1': None},
-        {'v1.7.2': None},
-        {'v1.7.3': None},
-        {'v1.8.0': None},
+        {'v1.7.4': None},
+        {'v1.8.1': None},
     ],
     'java': [
         {'v1.0.3': None},
diff --git a/tools/run_tests/sanity/check_sources_and_headers.py b/tools/run_tests/sanity/check_sources_and_headers.py
index cae175c..986b626 100755
--- a/tools/run_tests/sanity/check_sources_and_headers.py
+++ b/tools/run_tests/sanity/check_sources_and_headers.py
@@ -29,28 +29,58 @@
 re_inc2 = re.compile(r'^#\s*include\s*<((grpc|grpc\+\+)/[^"]*)>')
 assert re_inc2.match('#include <grpc++/foo>').group(1) == 'grpc++/foo'
 
+
 def get_target(name):
   for target in js:
     if target['name'] == name:
       return target
   assert False, 'no target %s' % name
 
+
+def get_headers_transitive():
+  """Computes set of headers transitively provided by each target"""
+  target_headers_transitive = {}
+  for target in js:
+    target_name = target['name']
+    assert not target_headers_transitive.has_key(target_name)
+    target_headers_transitive[target_name] = set(target['headers'])
+
+  # Make sure each target's transitive headers contain those
+  # of their dependencies. If not, add them and continue doing
+  # so until we get a full pass over all targets without any updates.
+  closure_changed = True
+  while closure_changed:
+    closure_changed = False
+    for target in js:
+      target_name = target['name']
+      for dep in target['deps']:
+        headers = target_headers_transitive[target_name]
+        old_count = len(headers)
+        headers.update(target_headers_transitive[dep])
+        if old_count != len(headers):
+          closure_changed=True
+  return target_headers_transitive
+
+
+# precompute transitive closure of headers provided by each target
+target_headers_transitive = get_headers_transitive()
+
+
 def target_has_header(target, name):
-  if name.startswith('absl/'): return True
-  # print target['name'], name
-  if name in target['headers']:
+  if name in target_headers_transitive[target['name']]:
     return True
-  for dep in target['deps']:
-    if target_has_header(get_target(dep), name):
-      return True
+  if name.startswith('absl/'):
+    return True
   if name in ['src/core/lib/profiling/stap_probes.h',
               'src/proto/grpc/reflection/v1alpha/reflection.grpc.pb.h']:
     return True
   return False
 
+
 def produces_object(name):
   return os.path.splitext(name)[1] in ['.c', '.cc']
 
+
 c_ish = {}
 obj_producer_to_source = {'c': c_ish, 'c++': c_ish, 'csharp': {}}